ERC-20
Overview
Max Total Supply
50,000,000,000,000,000 SHAMAN
Holders
5,882
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
295,989,524,358.083674197042920852 SHAMANValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
Shaman
Compiler Version
v0.8.13+commit.abaa5c0e
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-04-12 */ // SPDX-License-Identifier: MIT pragma solidity 0.8.13; interface IERC20 { function totalSupply() external view returns (uint256); function balanceOf(address account) external view returns (uint256); function transfer(address recipient, uint256 amount) external returns (bool); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 amount) external returns (bool); function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); event Approval( address indexed owner, address indexed spender, uint256 value ); } interface IFactory { function createPair(address tokenA, address tokenB) external returns (address pair); function getPair(address tokenA, address tokenB) external view returns (address pair); } interface IRouter { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidityETH( address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external payable returns ( uint256 amountToken, uint256 amountETH, uint256 liquidity ); function swapExactETHForTokensSupportingFeeOnTransferTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; } library SafeMath { function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } library Address { function isContract(address account) internal view returns (bool) { 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; } function _msgData() internal view virtual returns (bytes calldata) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); constructor () { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } function owner() public view returns (address) { return _owner; } modifier onlyOwner() { require(_owner == _msgSender(), "Ownable: caller is not the owner"); _; } function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } contract Shaman is IERC20, Ownable { using Address for address; using SafeMath for uint256; IRouter public uniswapV2Router; address public immutable uniswapV2Pair; string private constant _name = "Shaman"; string private constant _symbol = "SHAMAN"; uint8 private constant _decimals = 18; mapping (address => uint256) private _rOwned; mapping (address => uint256) private _tOwned; mapping (address => mapping (address => uint256)) private _allowances; uint256 private constant MAX = ~uint256(0); uint256 private constant _tTotal = 50000000000000000 * 10**18; uint256 private _rTotal = (MAX - (MAX % _tTotal)); uint256 private _tFeeTotal; bool public isTradingEnabled; uint256 private _tradingPausedTimestamp; // max wallet is 1.0% of initialSupply uint256 public maxWalletAmount = _tTotal * 100 / 10000; // max tx is 0.15% of initialSupply uint256 public maxTxAmount = _tTotal * 150 / 100000; bool private _swapping; // max wallet is 0.025% of initialSupply uint256 public minimumTokensBeforeSwap = _tTotal * 250 / 1000000; address private dead = 0x000000000000000000000000000000000000dEaD; address public liquidityWallet; address public marketingWallet; address public buyBackWallet; address public devWallet; struct CustomTaxPeriod { bytes23 periodName; uint8 blocksInPeriod; uint256 timeInPeriod; uint8 liquidityFeeOnBuy; uint8 liquidityFeeOnSell; uint8 marketingFeeOnBuy; uint8 marketingFeeOnSell; uint8 devFeeOnBuy; uint8 devFeeOnSell; uint8 buyBackFeeOnBuy; uint8 buyBackFeeOnSell; uint8 holdersFeeOnBuy; uint8 holdersFeeOnSell; } // Base taxes CustomTaxPeriod private _base = CustomTaxPeriod('base',0,0,1,1,3,3,1,1,3,3,2,2); mapping (address => bool) private _isExcludedFromFee; mapping (address => bool) private _isExcludedFromMaxWalletLimit; mapping (address => bool) private _isExcludedFromMaxTransactionLimit; mapping (address => bool) public automatedMarketMakerPairs; mapping (address => bool) private _isExcludedFromDividends; mapping (address => bool) private _isAllowedToTradeWhenDisabled; address[] private _excludedFromDividends; uint8 private _liquidityFee; uint8 private _marketingFee; uint8 private _devFee; uint8 private _buyBackFee; uint8 private _holdersFee; uint8 private _totalFee; event AutomatedMarketMakerPairChange(address indexed pair, bool indexed value); event AllowedWhenTradingDisabledChange(address indexed account, bool isExcluded); event UniswapV2RouterChange(address indexed newAddress, address indexed oldAddress); event WalletChange(string indexed indentifier, address indexed newWallet, address indexed oldWallet); event FeeChange(string indexed identifier, uint8 liquidityFee, uint8 marketingFee, uint8 devFee, uint8 buyBackFee, uint8 holdersFee); event CustomTaxPeriodChange(uint256 indexed newValue, uint256 indexed oldValue, string indexed taxType, bytes23 period); event MaxWalletAmountChange(uint256 indexed newValue, uint256 indexed oldValue); event MaxTransactionAmountChange(uint256 indexed newValue, uint256 indexed oldValue); event ExcludeFromDividendsChange(address indexed account, bool isExcluded); event ExcludeFromFeesChange(address indexed account, bool isExcluded); event ExcludeFromMaxTransferChange(address indexed account, bool isExcluded); event ExcludeFromMaxWalletChange(address indexed account, bool isExcluded); event MinTokenAmountBeforeSwapChange(uint256 indexed newValue, uint256 indexed oldValue); event SwapAndLiquify(uint256 tokensSwapped, uint256 ethReceived,uint256 tokensIntoLiqudity); event ClaimETHOverflow(uint256 amount); event FeesApplied(uint8 liquidityFee, uint8 marketingFee, uint8 devFee, uint8 buyBackFee, uint8 holdersFee, uint8 totalFee); constructor() { liquidityWallet = owner(); marketingWallet = owner(); buyBackWallet = owner(); devWallet = owner(); IRouter _uniswapV2Router = IRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); address _uniswapV2Pair = IFactory(_uniswapV2Router.factory()).createPair( address(this), _uniswapV2Router.WETH() ); uniswapV2Router = _uniswapV2Router; uniswapV2Pair = _uniswapV2Pair; _setAutomatedMarketMakerPair(_uniswapV2Pair, true); _isExcludedFromFee[owner()] = true; _isExcludedFromFee[address(this)] = true; excludeFromDividends(address(this), true); excludeFromDividends(address(dead), true); excludeFromDividends(address(_uniswapV2Router), true); _isAllowedToTradeWhenDisabled[owner()] = true; _isAllowedToTradeWhenDisabled[address(this)] = true; _isExcludedFromMaxWalletLimit[_uniswapV2Pair] = true; _isExcludedFromMaxWalletLimit[address(uniswapV2Router)] = true; _isExcludedFromMaxWalletLimit[address(this)] = true; _isExcludedFromMaxWalletLimit[owner()] = true; _isExcludedFromMaxTransactionLimit[address(this)] = true; _isExcludedFromMaxTransactionLimit[address(dead)] = true; _isExcludedFromMaxTransactionLimit[owner()] = true; _rOwned[owner()] = _rTotal; emit Transfer(address(0), owner(), _tTotal); } receive() external payable {} // Setters function transfer(address recipient, uint256 amount) external override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } function approve(address spender, uint256 amount) public override returns (bool) { _approve(_msgSender(), spender, amount); return true; } function transferFrom( address sender,address recipient,uint256 amount) external override returns (bool) { _transfer(sender, recipient, amount); _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount,"ERC20: transfer amount exceeds allowance")); return true; } function increaseAllowance(address spender, uint256 addedValue) external virtual returns (bool){ _approve(_msgSender(),spender,_allowances[_msgSender()][spender].add(addedValue)); return true; } function decreaseAllowance(address spender, uint256 subtractedValue) external virtual returns (bool) { _approve(_msgSender(),spender,_allowances[_msgSender()][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 _getNow() private view returns (uint256) { return block.timestamp; } function activateTrading() external onlyOwner { isTradingEnabled = true; } function deactivateTrading() external onlyOwner { isTradingEnabled = false; _tradingPausedTimestamp = _getNow(); } function _setAutomatedMarketMakerPair(address pair, bool value) private { require(automatedMarketMakerPairs[pair] != value, "Shaman: Automated market maker pair is already set to that value"); automatedMarketMakerPairs[pair] = value; emit AutomatedMarketMakerPairChange(pair, value); } function allowTradingWhenDisabled(address account, bool allowed) external onlyOwner { _isAllowedToTradeWhenDisabled[account] = allowed; emit AllowedWhenTradingDisabledChange(account, allowed); } function excludeFromFees(address account, bool excluded) external onlyOwner { require(_isExcludedFromFee[account] != excluded, "Shaman: Account is already the value of 'excluded'"); _isExcludedFromFee[account] = excluded; emit ExcludeFromFeesChange(account, excluded); } function excludeFromMaxWalletLimit(address account, bool excluded) external onlyOwner { require(_isExcludedFromMaxWalletLimit[account] != excluded, "Shaman: Account is already the value of 'excluded'"); _isExcludedFromMaxWalletLimit[account] = excluded; emit ExcludeFromMaxWalletChange(account, excluded); } function excludeFromMaxTransactionLimit(address account, bool excluded) external onlyOwner { require(_isExcludedFromMaxTransactionLimit[account] != excluded, "Shaman: Account is already the value of 'excluded'"); _isExcludedFromMaxTransactionLimit[account] = excluded; emit ExcludeFromMaxTransferChange(account, excluded); } function setWallets(address newLiquidityWallet, address newMarketingWallet, address newDevWallet, address newBuyBackWallet) external onlyOwner { if(liquidityWallet != newLiquidityWallet) { require(newLiquidityWallet != address(0), "Shaman: The liquidityWallet cannot be 0"); emit WalletChange('liquidityWallet', newLiquidityWallet, liquidityWallet); liquidityWallet = newLiquidityWallet; } if(marketingWallet != newMarketingWallet) { require(newMarketingWallet != address(0), "Shaman: The marketingWallet cannot be 0"); emit WalletChange('marketingWallet', newMarketingWallet, marketingWallet); marketingWallet = newMarketingWallet; } if(devWallet != newDevWallet) { require(newDevWallet != address(0), "Shaman: The devWallet cannot be 0"); emit WalletChange('devWallet', newDevWallet, devWallet); devWallet = newDevWallet; } if(buyBackWallet != newBuyBackWallet) { require(newBuyBackWallet != address(0), "Shaman: The buyBackWallet cannot be 0"); emit WalletChange('buyBackWallet', newBuyBackWallet, buyBackWallet); buyBackWallet = newBuyBackWallet; } } // Base fees function setBaseFeesOnBuy(uint8 _liquidityFeeOnBuy, uint8 _marketingFeeOnBuy, uint8 _devFeeOnBuy, uint8 _buyBackFeeOnBuy, uint8 _holdersFeeOnBuy) external onlyOwner { _setCustomBuyTaxPeriod(_base, _liquidityFeeOnBuy, _marketingFeeOnBuy, _devFeeOnBuy, _buyBackFeeOnBuy, _holdersFeeOnBuy); emit FeeChange('baseFees-Buy', _liquidityFeeOnBuy, _marketingFeeOnBuy, _devFeeOnBuy, _buyBackFeeOnBuy, _holdersFeeOnBuy); } function setBaseFeesOnSell(uint8 _liquidityFeeOnSell, uint8 _marketingFeeOnSell, uint8 _devFeeOnSell, uint8 _buyBackFeeOnSell, uint8 _holdersFeeOnSell) external onlyOwner { _setCustomSellTaxPeriod(_base, _liquidityFeeOnSell, _marketingFeeOnSell, _devFeeOnSell, _buyBackFeeOnSell, _holdersFeeOnSell); emit FeeChange('baseFees-Sell', _liquidityFeeOnSell, _marketingFeeOnSell, _devFeeOnSell, _buyBackFeeOnSell, _holdersFeeOnSell); } function setMaxWalletAmount(uint256 newValue) external onlyOwner { require(newValue != maxWalletAmount, "Shaman: Cannot update maxWalletAmount to same value"); emit MaxWalletAmountChange(newValue, maxWalletAmount); maxWalletAmount = newValue; } function setMaxTransactionAmount(uint256 newValue) external onlyOwner { require(newValue != maxTxAmount, "Shaman: Cannot update maxTxAmount to same value"); emit MaxTransactionAmountChange(newValue, maxTxAmount); maxTxAmount = newValue; } function excludeFromDividends(address account, bool excluded) public onlyOwner { require(_isExcludedFromDividends[account] != excluded, "Shaman: Account is already the value of 'excluded'"); if(excluded) { if(_rOwned[account] > 0) { _tOwned[account] = tokenFromReflection(_rOwned[account]); } _isExcludedFromDividends[account] = excluded; _excludedFromDividends.push(account); } else { for (uint256 i = 0; i < _excludedFromDividends.length; i++) { if (_excludedFromDividends[i] == account) { _excludedFromDividends[i] = _excludedFromDividends[_excludedFromDividends.length - 1]; _tOwned[account] = 0; _isExcludedFromDividends[account] = false; _excludedFromDividends.pop(); break; } } } emit ExcludeFromDividendsChange(account, excluded); } function setMinimumTokensBeforeSwap(uint256 newValue) external onlyOwner { require(newValue != minimumTokensBeforeSwap, "Shaman: Cannot update minimumTokensBeforeSwap to same value"); emit MinTokenAmountBeforeSwapChange(newValue, minimumTokensBeforeSwap); minimumTokensBeforeSwap = newValue; } function claimETHOverflow() external onlyOwner { require(address(this).balance > 0, "Shaman: Cannot send more than contract balance"); uint256 amount = address(this).balance; (bool success,) = address(owner()).call{value : amount}(""); if (success){ emit ClaimETHOverflow(amount); } } // Getters function name() external view returns (string memory) { return _name; } function symbol() external view returns (string memory) { return _symbol; } function decimals() external view virtual returns (uint8) { return _decimals; } function totalSupply() external view override returns (uint256) { return _tTotal; } function balanceOf(address account) public view override returns (uint256) { if (_isExcludedFromDividends[account]) return _tOwned[account]; return tokenFromReflection(_rOwned[account]); } function totalFees() external view returns (uint256) { return _tFeeTotal; } function allowance(address owner, address spender) external view override returns (uint256) { return _allowances[owner][spender]; } function getBaseBuyFees() external view returns (uint8, uint8, uint8, uint8, uint8){ return (_base.liquidityFeeOnBuy, _base.marketingFeeOnBuy, _base.devFeeOnBuy, _base.buyBackFeeOnBuy, _base.holdersFeeOnBuy); } function getBaseSellFees() external view returns (uint8, uint8, uint8, uint8, uint8){ return (_base.liquidityFeeOnSell, _base.marketingFeeOnSell, _base.devFeeOnSell, _base.buyBackFeeOnSell, _base.holdersFeeOnSell); } function tokenFromReflection(uint256 rAmount) public view returns(uint256) { require(rAmount <= _rTotal, "Shaman: Amount must be less than total reflections"); uint256 currentRate = _getRate(); return rAmount / currentRate; } function reflectionFromToken(uint256 tAmount, bool deductTransferFee) external view returns (uint256) { require(tAmount <= _tTotal, "Shaman: Amount must be less than supply"); uint256 currentRate = _getRate(); uint256 rAmount = tAmount * currentRate; if (!deductTransferFee) { return rAmount; } else { uint256 rTotalFee = tAmount * _totalFee / 100 * currentRate; uint256 rTransferAmount = rAmount - rTotalFee; return rTransferAmount; } } // Main function _transfer( address from, address to, uint256 amount ) internal { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); require(amount > 0, "Transfer amount must be greater than zero"); require(amount <= balanceOf(from), "Shaman: Cannot transfer more than balance"); bool isBuyFromLp = automatedMarketMakerPairs[from]; bool isSelltoLp = automatedMarketMakerPairs[to]; if(!_isAllowedToTradeWhenDisabled[from] && !_isAllowedToTradeWhenDisabled[to]) { require(isTradingEnabled, "Shaman: Trading is currently disabled."); if (!_isExcludedFromMaxTransactionLimit[to] && !_isExcludedFromMaxTransactionLimit[from]) { require(amount <= maxTxAmount, "Shaman: Transfer amount exceeds the maxTxAmount."); } if (!_isExcludedFromMaxWalletLimit[to]) { require((balanceOf(to) + amount) <= maxWalletAmount, "Shaman: Expected wallet amount exceeds the maxWalletAmount."); } } _adjustTaxes(isBuyFromLp, isSelltoLp); bool canSwap = balanceOf(address(this)) >= minimumTokensBeforeSwap; if ( isTradingEnabled && canSwap && !_swapping && _totalFee > 0 && automatedMarketMakerPairs[to] ) { _swapping = true; _swapAndLiquify(); _swapping = false; } bool takeFee = !_swapping && isTradingEnabled; if(_isExcludedFromFee[from] || _isExcludedFromFee[to]){ takeFee = false; } _tokenTransfer(from, to, amount, takeFee); } function _tokenTransfer(address sender,address recipient, uint256 tAmount, bool takeFee) private { (uint256 tTransferAmount,uint256 tFee, uint256 tOther) = _getTValues(tAmount, takeFee); (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 rOther) = _getRValues(tAmount, tFee, tOther, _getRate()); if (_isExcludedFromDividends[sender]) { _tOwned[sender] = _tOwned[sender] - tAmount; } if (_isExcludedFromDividends[recipient]) { _tOwned[recipient] = _tOwned[recipient] + tTransferAmount; } _rOwned[sender] = _rOwned[sender] - rAmount; _rOwned[recipient] = _rOwned[recipient] + rTransferAmount; _takeContractFees(rOther, tOther); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function _reflectFee(uint256 rFee, uint256 tFee) private { _rTotal -= rFee; _tFeeTotal += tFee; } function _getTValues(uint256 tAmount, bool takeFee) private view returns (uint256,uint256,uint256){ if (!takeFee) { return (tAmount, 0, 0); } else { uint256 tFee = tAmount * _holdersFee / 100; uint256 tOther = tAmount * (_liquidityFee + _devFee + _marketingFee + _buyBackFee) / 100; uint256 tTransferAmount = tAmount - (tFee + tOther); return (tTransferAmount, tFee, tOther); } } function _getRValues( uint256 tAmount, uint256 tFee, uint256 tOther, uint256 currentRate ) private pure returns ( uint256, uint256, uint256, uint256) { uint256 rAmount = tAmount * currentRate; uint256 rFee = tFee * currentRate; uint256 rOther = tOther * currentRate; uint256 rTransferAmount = rAmount - (rFee + rOther); return (rAmount, rTransferAmount, rFee, rOther); } function _getRate() private view returns (uint256) { (uint256 rSupply, uint256 tSupply) = _getCurrentSupply(); return rSupply.div(tSupply); } function _getCurrentSupply() private view returns (uint256, uint256) { uint256 rSupply = _rTotal; uint256 tSupply = _tTotal; for (uint256 i = 0; i < _excludedFromDividends.length; i++) { if ( _rOwned[_excludedFromDividends[i]] > rSupply || _tOwned[_excludedFromDividends[i]] > tSupply ) return (_rTotal, _tTotal); rSupply = rSupply - _rOwned[_excludedFromDividends[i]]; tSupply = tSupply - _tOwned[_excludedFromDividends[i]]; } if (rSupply < _rTotal / _tTotal) return (_rTotal, _tTotal); return (rSupply, tSupply); } function _takeContractFees(uint256 rOther, uint256 tOther) private { if (_isExcludedFromDividends[address(this)]) { _tOwned[address(this)] += tOther; } _rOwned[address(this)] += rOther; } function _adjustTaxes(bool isBuyFromLp, bool isSelltoLp) private { _liquidityFee = 0; _devFee = 0; _marketingFee = 0; _buyBackFee = 0; _holdersFee = 0; if (isBuyFromLp) { _liquidityFee = _base.liquidityFeeOnBuy; _devFee = _base.devFeeOnBuy; _marketingFee = _base.marketingFeeOnBuy; _buyBackFee = _base.buyBackFeeOnBuy; _holdersFee = _base.holdersFeeOnBuy; } if (isSelltoLp) { _liquidityFee = _base.liquidityFeeOnSell; _devFee = _base.devFeeOnSell; _marketingFee = _base.marketingFeeOnSell; _buyBackFee = _base.buyBackFeeOnSell; _holdersFee = _base.holdersFeeOnSell; } _totalFee = _liquidityFee + _marketingFee + _devFee + _buyBackFee + _holdersFee; emit FeesApplied(_liquidityFee, _marketingFee, _devFee, _buyBackFee, _holdersFee, _totalFee); } function _setCustomSellTaxPeriod(CustomTaxPeriod storage map, uint8 _liquidityFeeOnSell, uint8 _marketingFeeOnSell, uint8 _devFeeOnSell, uint8 _buyBackFeeOnSell, uint8 _holdersFeeOnSell ) private { if (map.liquidityFeeOnSell != _liquidityFeeOnSell) { emit CustomTaxPeriodChange(_liquidityFeeOnSell, map.liquidityFeeOnSell, 'liquidityFeeOnSell', map.periodName); map.liquidityFeeOnSell = _liquidityFeeOnSell; } if (map.marketingFeeOnSell != _marketingFeeOnSell) { emit CustomTaxPeriodChange(_marketingFeeOnSell, map.marketingFeeOnSell, 'marketingFeeOnSell', map.periodName); map.marketingFeeOnSell = _marketingFeeOnSell; } if (map.devFeeOnSell != _devFeeOnSell) { emit CustomTaxPeriodChange(_devFeeOnSell, map.devFeeOnSell, 'devFeeOnSell', map.periodName); map.devFeeOnSell = _devFeeOnSell; } if (map.buyBackFeeOnSell != _buyBackFeeOnSell) { emit CustomTaxPeriodChange(_buyBackFeeOnSell, map.buyBackFeeOnSell, 'buyBackFeeOnSell', map.periodName); map.buyBackFeeOnSell = _buyBackFeeOnSell; } if (map.holdersFeeOnSell != _holdersFeeOnSell) { emit CustomTaxPeriodChange(_holdersFeeOnSell, map.holdersFeeOnSell, 'holdersFeeOnSell', map.periodName); map.holdersFeeOnSell = _holdersFeeOnSell; } } function _setCustomBuyTaxPeriod(CustomTaxPeriod storage map, uint8 _liquidityFeeOnBuy, uint8 _marketingFeeOnBuy, uint8 _devFeeOnBuy, uint8 _buyBackFeeOnBuy, uint8 _holdersFeeOnBuy ) private { if (map.liquidityFeeOnBuy != _liquidityFeeOnBuy) { emit CustomTaxPeriodChange(_liquidityFeeOnBuy, map.liquidityFeeOnBuy, 'liquidityFeeOnBuy', map.periodName); map.liquidityFeeOnBuy = _liquidityFeeOnBuy; } if (map.marketingFeeOnBuy != _marketingFeeOnBuy) { emit CustomTaxPeriodChange(_marketingFeeOnBuy, map.marketingFeeOnBuy, 'marketingFeeOnBuy', map.periodName); map.marketingFeeOnBuy = _marketingFeeOnBuy; } if (map.devFeeOnBuy != _devFeeOnBuy) { emit CustomTaxPeriodChange(_devFeeOnBuy, map.devFeeOnBuy, 'devFeeOnBuy', map.periodName); map.devFeeOnBuy = _devFeeOnBuy; } if (map.buyBackFeeOnBuy != _buyBackFeeOnBuy) { emit CustomTaxPeriodChange(_buyBackFeeOnBuy, map.buyBackFeeOnBuy, 'buyBackFeeOnBuy', map.periodName); map.buyBackFeeOnBuy = _buyBackFeeOnBuy; } if (map.holdersFeeOnBuy != _holdersFeeOnBuy) { emit CustomTaxPeriodChange(_holdersFeeOnBuy, map.holdersFeeOnBuy, 'holdersFeeOnBuy', map.periodName); map.holdersFeeOnBuy = _holdersFeeOnBuy; } } function _swapAndLiquify() private { uint256 contractBalance = balanceOf(address(this)); uint256 initialETHBalance = address(this).balance; uint8 totalFeePrior = _totalFee; uint8 liquidityFeePrior = _liquidityFee; uint8 marketingFeePrior = _marketingFee; uint8 devFeePrior = _devFee; uint8 buyBackFeePrior = _buyBackFee; uint8 holdersFeePrior = _holdersFee; uint256 amountToLiquify = contractBalance * _liquidityFee / _totalFee / 2; uint256 amountToSwapForETH = contractBalance - amountToLiquify; _swapTokensForETH(amountToSwapForETH); uint256 ETHBalanceAfterSwap = address(this).balance - initialETHBalance; uint256 totalETHFee = totalFeePrior - (liquidityFeePrior / 2) - (holdersFeePrior); uint256 amountETHLiquidity = ETHBalanceAfterSwap * liquidityFeePrior / totalETHFee / 2; uint256 amountETHDev = ETHBalanceAfterSwap * devFeePrior / totalETHFee; uint256 amountETHBuyBack = ETHBalanceAfterSwap * buyBackFeePrior / totalETHFee; uint256 amountETHMarketing = ETHBalanceAfterSwap - (amountETHLiquidity + amountETHDev + amountETHBuyBack); payable(marketingWallet).transfer(amountETHMarketing); payable(devWallet).transfer(amountETHDev); payable(buyBackWallet).transfer(amountETHBuyBack); if (amountToLiquify > 0) { _addLiquidity(amountToLiquify, amountETHLiquidity); emit SwapAndLiquify(amountToSwapForETH, amountETHLiquidity, amountToLiquify); } _totalFee = totalFeePrior; _liquidityFee = liquidityFeePrior; _marketingFee = marketingFeePrior; _devFee = devFeePrior; _buyBackFee = buyBackFeePrior; _holdersFee = holdersFeePrior; } function _swapTokensForETH(uint256 tokenAmount) private { address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); _approve(address(this), address(uniswapV2Router), tokenAmount); uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, address(this), block.timestamp ); } function _addLiquidity(uint256 tokenAmount, uint256 ethAmount) private { _approve(address(this), address(uniswapV2Router), tokenAmount); uniswapV2Router.addLiquidityETH{value: ethAmount}( address(this), tokenAmount, 0, // slippage is unavoidable 0, // slippage is unavoidable liquidityWallet, block.timestamp ); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"AllowedWhenTradingDisabledChange","type":"event"},{"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":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"AutomatedMarketMakerPairChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ClaimETHOverflow","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"oldValue","type":"uint256"},{"indexed":true,"internalType":"string","name":"taxType","type":"string"},{"indexed":false,"internalType":"bytes23","name":"period","type":"bytes23"}],"name":"CustomTaxPeriodChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromDividendsChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFeesChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromMaxTransferChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromMaxWalletChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"string","name":"identifier","type":"string"},{"indexed":false,"internalType":"uint8","name":"liquidityFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"marketingFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"devFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"buyBackFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"holdersFee","type":"uint8"}],"name":"FeeChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint8","name":"liquidityFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"marketingFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"devFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"buyBackFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"holdersFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"totalFee","type":"uint8"}],"name":"FeesApplied","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"oldValue","type":"uint256"}],"name":"MaxTransactionAmountChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"oldValue","type":"uint256"}],"name":"MaxWalletAmountChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"oldValue","type":"uint256"}],"name":"MinTokenAmountBeforeSwapChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UniswapV2RouterChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"string","name":"indentifier","type":"string"},{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"WalletChange","type":"event"},{"inputs":[],"name":"activateTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"allowed","type":"bool"}],"name":"allowTradingWhenDisabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyBackWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimETHOverflow","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deactivateTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromDividends","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromMaxTransactionLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromMaxWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getBaseBuyFees","outputs":[{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBaseSellFees","outputs":[{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","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":[],"name":"isTradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumTokensBeforeSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_liquidityFeeOnBuy","type":"uint8"},{"internalType":"uint8","name":"_marketingFeeOnBuy","type":"uint8"},{"internalType":"uint8","name":"_devFeeOnBuy","type":"uint8"},{"internalType":"uint8","name":"_buyBackFeeOnBuy","type":"uint8"},{"internalType":"uint8","name":"_holdersFeeOnBuy","type":"uint8"}],"name":"setBaseFeesOnBuy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_liquidityFeeOnSell","type":"uint8"},{"internalType":"uint8","name":"_marketingFeeOnSell","type":"uint8"},{"internalType":"uint8","name":"_devFeeOnSell","type":"uint8"},{"internalType":"uint8","name":"_buyBackFeeOnSell","type":"uint8"},{"internalType":"uint8","name":"_holdersFeeOnSell","type":"uint8"}],"name":"setBaseFeesOnSell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setMaxTransactionAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setMinimumTokensBeforeSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newLiquidityWallet","type":"address"},{"internalType":"address","name":"newMarketingWallet","type":"address"},{"internalType":"address","name":"newDevWallet","type":"address"},{"internalType":"address","name":"newBuyBackWallet","type":"address"}],"name":"setWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60a0604052620000216e09a130b963a6c115c3c7f40000000060001962000d79565b6200002f9060001962000da6565b600555612710620000516e09a130b963a6c115c3c7f400000000606462000dc0565b6200005d919062000de2565b600955620186a0620000806e09a130b963a6c115c3c7f400000000609662000dc0565b6200008c919062000de2565b600a55620f4240620000af6e09a130b963a6c115c3c7f40000000060fa62000dc0565b620000bb919062000de2565b600c55600d80546001600160a01b03191661dead179055604080516101a081018252636261736560e01b815260006020820181905291810182905260016060820181905260808201819052600360a0830181905260c0830181905260e0830182905261010083019190915261012082018190526101408201526002610160820181905261018090910152601280546001600160c01b031916636261736560981b1790556013556014805469020203030101030301016001600160501b03199091161790553480156200018c57600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35060008054600e80546001600160a01b039092166001600160a01b03199283168117909155600f805483168217905560108054831682179055601180549092161790556040805163c45a015560e01b81529051737a250d5630b4cf539739df2c5dacb4c659f2488d9291839163c45a0155916004808201926020929091908290030181865afa15801562000265573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200028b919062000df9565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002d9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002ff919062000df9565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156200034d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000373919062000df9565b600180546001600160a01b0319166001600160a01b038581169190911782558216608052909150620003a790829062000621565b600160156000620003c06000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff1995861617905530808252601590935220805490921660019081179092556200040e9162000713565b600d5462000427906001600160a01b0316600162000713565b6200043482600162000713565b6001601a60006200044d6000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff1996871617905530808252601a855283822080548716600190811790915587841683526016958690528483208054881682179055805490931682528382208054871684179055815291822080549094168117909355620004dc6000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055308152601793849052828120805486166001908117909155600d549092168152918220805490941681179093556200054a6000546001600160a01b031690565b6001600160a01b0316815260208101919091526040016000908120805460ff191692151592909217909155600554906002906200058f6000546001600160a01b031690565b6001600160a01b03168152602081019190915260400160002055620005bc6000546001600160a01b031690565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6e09a130b963a6c115c3c7f4000000006040516200061191815260200190565b60405180910390a3505062000ec4565b6001600160a01b03821660009081526018602052604090205481151560ff909116151503620006bf576040805162461bcd60e51b81526020600482015260248101919091527f5368616d616e3a204175746f6d61746564206d61726b6574206d616b6572207060448201527f61697220697320616c72656164792073657420746f20746861742076616c756560648201526084015b60405180910390fd5b6001600160a01b038216600081815260186020526040808220805460ff191685151590811790915590519092917fa666b9b2dc2c8f2d86fda7ba3a115be30d3a958fd84d359cbc6bc919df97990a91a35050565b6000546001600160a01b031633146200076f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620006b6565b6001600160a01b03821660009081526019602052604090205481151560ff909116151503620007fc5760405162461bcd60e51b815260206004820152603260248201527f5368616d616e3a204163636f756e7420697320616c7265616479207468652076604482015271616c7565206f6620276578636c756465642760701b6064820152608401620006b6565b8015620008c9576001600160a01b0382166000908152600260205260409020541562000860576001600160a01b038216600090815260026020526040902054620008469062000a4a565b6001600160a01b0383166000908152600360205260409020555b6001600160a01b0382166000818152601960205260408120805460ff1916841515179055601b805460018101825591527f3ad8aa4f87544323a9d1e5dd902f40c356527a7955687113db5f9a85ad579dc10180546001600160a01b031916909117905562000a00565b60005b601b54811015620009fe57826001600160a01b0316601b8281548110620008f757620008f762000e24565b6000918252602090912001546001600160a01b031603620009e957601b8054620009249060019062000da6565b8154811062000937576200093762000e24565b600091825260209091200154601b80546001600160a01b03909216918390811062000966576200096662000e24565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559185168152600382526040808220829055601990925220805460ff19169055601b805480620009c157620009c162000e3a565b600082815260209020810160001990810180546001600160a01b0319169055019055620009fe565b80620009f58162000e50565b915050620008cc565b505b816001600160a01b03167fcb9d59a6e9da25dee1a9ddef81481537dfd94e20b1593b58b08193bea9e9baa98260405162000a3e911515815260200190565b60405180910390a25050565b600060055482111562000abb5760405162461bcd60e51b815260206004820152603260248201527f5368616d616e3a20416d6f756e74206d757374206265206c657373207468616e60448201527120746f74616c207265666c656374696f6e7360701b6064820152608401620006b6565b600062000ac762000adc565b905062000ad5818462000de2565b9392505050565b6000808062000aea62000b0f565b9150915062000b08818362000cdd60201b62001b2e1790919060201c565b9250505090565b60055460009081906e09a130b963a6c115c3c7f400000000825b601b5481101562000c90578260026000601b848154811062000b4f5762000b4f62000e24565b60009182526020808320909101546001600160a01b03168352820192909252604001902054118062000bbe57508160036000601b848154811062000b975762000b9762000e24565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1562000be1575050600554936e09a130b963a6c115c3c7f4000000009350915050565b60026000601b838154811062000bfb5762000bfb62000e24565b60009182526020808320909101546001600160a01b0316835282019290925260400190205462000c2c908462000da6565b925060036000601b838154811062000c485762000c4862000e24565b60009182526020808320909101546001600160a01b0316835282019290925260400190205462000c79908362000da6565b91508062000c878162000e50565b91505062000b29565b506e09a130b963a6c115c3c7f40000000060055462000cb0919062000de2565b82101562000cd4575050600554926e09a130b963a6c115c3c7f40000000092509050565b90939092509050565b600062000ad583836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525062000d2760201b60201c565b6000818362000d4b5760405162461bcd60e51b8152600401620006b6919062000e6c565b50600062000d5a848662000de2565b95945050505050565b634e487b7160e01b600052601260045260246000fd5b60008262000d8b5762000d8b62000d63565b500690565b634e487b7160e01b600052601160045260246000fd5b60008282101562000dbb5762000dbb62000d90565b500390565b600081600019048311821515161562000ddd5762000ddd62000d90565b500290565b60008262000df45762000df462000d63565b500490565b60006020828403121562000e0c57600080fd5b81516001600160a01b038116811462000ad557600080fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b60006001820162000e655762000e6562000d90565b5060010190565b600060208083528351808285015260005b8181101562000e9b5785810183015185820160400152820162000e7d565b8181111562000eae576000604083870101525b50601f01601f1916929092016040019392505050565b608051613a3462000ee060003960006104d10152613a346000f3fe60806040526004361061026b5760003560e01c8063781edb3c11610144578063aee50b1e116100b6578063d2d7ad831161007a578063d2d7ad83146107b7578063d3221576146107cd578063d4698016146107ed578063dd62ed3e1461080d578063f2fde38b14610853578063fe0175351461087357600080fd5b8063aee50b1e146106b6578063b1ba39ea146106d6578063b62496f5146106f6578063c024666814610726578063cd43e2281461074657600080fd5b80638ea5220f116101085780638ea5220f146105f157806395d89b41146106115780639fad968314610640578063a457c2d714610660578063a9059cbb14610680578063aa4bde28146106a057600080fd5b8063781edb3c1461055d57806383672f3e1461057d578063880bcbc11461059d5780638c0b5e22146105bd5780638da5cb5b146105d357600080fd5b806327a14fc2116101dd5780634549b039116101a15780634549b0391461049f57806349bd5a5e146104bf57806366164f6f146104f357806370a0823114610508578063715018a61461052857806375f0a8741461053d57600080fd5b806327a14fc21461040e5780632d8381191461042e578063313ce5671461044e57806334cf1fea1461046a578063395093511461047f57600080fd5b806313114a9d1161022f57806313114a9d146103355780631694505e1461035457806318160ddd1461038c5780631cd348c0146103ae5780631e293c10146103ce57806323b872dd146103ee57600080fd5b80630483f7a014610277578063064a59d01461029957806306fdde03146102c8578063095ea7b3146103005780630bd05b691461032057600080fd5b3661027257005b600080fd5b34801561028357600080fd5b5061029761029236600461347f565b6108b9565b005b3480156102a557600080fd5b506007546102b39060ff1681565b60405190151581526020015b60405180910390f35b3480156102d457600080fd5b5060408051808201909152600681526529b430b6b0b760d11b60208201525b6040516102bf91906134b4565b34801561030c57600080fd5b506102b361031b366004613509565b610b60565b34801561032c57600080fd5b50610297610b77565b34801561034157600080fd5b506006545b6040519081526020016102bf565b34801561036057600080fd5b50600154610374906001600160a01b031681565b6040516001600160a01b0390911681526020016102bf565b34801561039857600080fd5b506e09a130b963a6c115c3c7f400000000610346565b3480156103ba57600080fd5b50601054610374906001600160a01b031681565b3480156103da57600080fd5b506102976103e9366004613535565b610bb0565b3480156103fa57600080fd5b506102b361040936600461354e565b610c76565b34801561041a57600080fd5b50610297610429366004613535565b610cdf565b34801561043a57600080fd5b50610346610449366004613535565b610da9565b34801561045a57600080fd5b50604051601281526020016102bf565b34801561047657600080fd5b50610297610e35565b34801561048b57600080fd5b506102b361049a366004613509565b610e6f565b3480156104ab57600080fd5b506103466104ba36600461358f565b610ea5565b3480156104cb57600080fd5b506103747f000000000000000000000000000000000000000000000000000000000000000081565b3480156104ff57600080fd5b50610297610f8b565b34801561051457600080fd5b506103466105233660046135b2565b6110c3565b34801561053457600080fd5b50610297611122565b34801561054957600080fd5b50600f54610374906001600160a01b031681565b34801561056957600080fd5b5061029761057836600461347f565b611196565b34801561058957600080fd5b506102976105983660046135cf565b611258565b3480156105a957600080fd5b506102976105b836600461347f565b611600565b3480156105c957600080fd5b50610346600a5481565b3480156105df57600080fd5b506000546001600160a01b0316610374565b3480156105fd57600080fd5b50601154610374906001600160a01b031681565b34801561061d57600080fd5b5060408051808201909152600681526529a420a6a0a760d11b60208201526102f3565b34801561064c57600080fd5b5061029761065b36600461363c565b6116c2565b34801561066c57600080fd5b506102b361067b366004613509565b611779565b34801561068c57600080fd5b506102b361069b366004613509565b6117c8565b3480156106ac57600080fd5b5061034660095481565b3480156106c257600080fd5b506102976106d1366004613535565b6117d5565b3480156106e257600080fd5b506102976106f136600461363c565b6118a9565b34801561070257600080fd5b506102b36107113660046135b2565b60186020526000908152604090205460ff1681565b34801561073257600080fd5b5061029761074136600461347f565b611900565b34801561075257600080fd5b5060145460ff80821691620100008104821691600160201b8204811691600160301b8104821691600160401b909104165b6040805160ff968716815294861660208601529285169284019290925283166060830152909116608082015260a0016102bf565b3480156107c357600080fd5b50610346600c5481565b3480156107d957600080fd5b506102976107e836600461347f565b6119c2565b3480156107f957600080fd5b50600e54610374906001600160a01b031681565b34801561081957600080fd5b506103466108283660046136a1565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b34801561085f57600080fd5b5061029761086e3660046135b2565b611a44565b34801561087f57600080fd5b5060145460ff610100820481169163010000008104821691600160281b8204811691600160381b8104821691600160481b90910416610783565b6000546001600160a01b031633146108ec5760405162461bcd60e51b81526004016108e3906136da565b60405180910390fd5b6001600160a01b03821660009081526019602052604090205481151560ff90911615150361092c5760405162461bcd60e51b81526004016108e39061370f565b80156109f4576001600160a01b0382166000908152600260205260409020541561098c576001600160a01b03821660009081526002602052604090205461097290610da9565b6001600160a01b0383166000908152600360205260409020555b6001600160a01b0382166000818152601960205260408120805460ff1916841515179055601b805460018101825591527f3ad8aa4f87544323a9d1e5dd902f40c356527a7955687113db5f9a85ad579dc10180546001600160a01b0319169091179055610b17565b60005b601b54811015610b1557826001600160a01b0316601b8281548110610a1e57610a1e613761565b6000918252602090912001546001600160a01b031603610b0357601b8054610a489060019061378d565b81548110610a5857610a58613761565b600091825260209091200154601b80546001600160a01b039092169183908110610a8457610a84613761565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559185168152600382526040808220829055601990925220805460ff19169055601b805480610adc57610adc6137a4565b600082815260209020810160001990810180546001600160a01b0319169055019055610b15565b80610b0d816137ba565b9150506109f7565b505b816001600160a01b03167fcb9d59a6e9da25dee1a9ddef81481537dfd94e20b1593b58b08193bea9e9baa982604051610b54911515815260200190565b60405180910390a25050565b6000610b6d338484611b70565b5060015b92915050565b6000546001600160a01b03163314610ba15760405162461bcd60e51b81526004016108e3906136da565b6007805460ff19166001179055565b6000546001600160a01b03163314610bda5760405162461bcd60e51b81526004016108e3906136da565b600a548103610c435760405162461bcd60e51b815260206004820152602f60248201527f5368616d616e3a2043616e6e6f7420757064617465206d61785478416d6f756e60448201526e7420746f2073616d652076616c756560881b60648201526084016108e3565b600a5460405182907f75f1c17bf623f0f7a2bd91ba61e89dff216960370e3e9a46b250750d03e4215e90600090a3600a55565b6000610c83848484611c94565b610cd58433610cd085604051806060016040528060288152602001613992602891396001600160a01b038a166000908152600460209081526040808320338452909152902054919061215e565b611b70565b5060019392505050565b6000546001600160a01b03163314610d095760405162461bcd60e51b81526004016108e3906136da565b6009548103610d765760405162461bcd60e51b815260206004820152603360248201527f5368616d616e3a2043616e6e6f7420757064617465206d617857616c6c6574416044820152726d6f756e7420746f2073616d652076616c756560681b60648201526084016108e3565b60095460405182907f6d3e257c59a11116c3e97bb144abf5ba1a6a9da6bd509192ecf0d48f7be1fc7690600090a3600955565b6000600554821115610e185760405162461bcd60e51b815260206004820152603260248201527f5368616d616e3a20416d6f756e74206d757374206265206c657373207468616e60448201527120746f74616c207265666c656374696f6e7360701b60648201526084016108e3565b6000610e22612198565b9050610e2e81846137e9565b9392505050565b6000546001600160a01b03163314610e5f5760405162461bcd60e51b81526004016108e3906136da565b6007805460ff1916905542600855565b3360008181526004602090815260408083206001600160a01b03871684529091528120549091610b6d918590610cd090866121bb565b60006e09a130b963a6c115c3c7f400000000831115610f165760405162461bcd60e51b815260206004820152602760248201527f5368616d616e3a20416d6f756e74206d757374206265206c657373207468616e60448201526620737570706c7960c81b60648201526084016108e3565b6000610f20612198565b90506000610f2e82866137fd565b905083610f3e579150610b719050565b601c546000908390606490610f5d90600160281b900460ff16896137fd565b610f6791906137e9565b610f7191906137fd565b90506000610f7f828461378d565b9450610b719350505050565b6000546001600160a01b03163314610fb55760405162461bcd60e51b81526004016108e3906136da565b6000471161101c5760405162461bcd60e51b815260206004820152602e60248201527f5368616d616e3a2043616e6e6f742073656e64206d6f7265207468616e20636f60448201526d6e74726163742062616c616e636560901b60648201526084016108e3565b4760006110316000546001600160a01b031690565b6001600160a01b03168260405160006040518083038185875af1925050503d806000811461107b576040519150601f19603f3d011682016040523d82523d6000602084013e611080565b606091505b5050905080156110bf576040518281527f362ae087cf4ccfc970d45b9e8ce6520f03b4eda3f9d76a70b655dc22badcca48906020015b60405180910390a15b5050565b6001600160a01b03811660009081526019602052604081205460ff161561110057506001600160a01b031660009081526003602052604090205490565b6001600160a01b038216600090815260026020526040902054610b7190610da9565b6000546001600160a01b0316331461114c5760405162461bcd60e51b81526004016108e3906136da565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146111c05760405162461bcd60e51b81526004016108e3906136da565b6001600160a01b03821660009081526016602052604090205481151560ff9091161515036112005760405162461bcd60e51b81526004016108e39061370f565b6001600160a01b038216600081815260166020908152604091829020805460ff191685151590811790915591519182527ff5133f371b17bf21ce0df4ae2c1b6e11ca7c2f27257eb55282edb1ccfd4ecb2e9101610b54565b6000546001600160a01b031633146112825760405162461bcd60e51b81526004016108e3906136da565b600e546001600160a01b03858116911614611364576001600160a01b0384166112fd5760405162461bcd60e51b815260206004820152602760248201527f5368616d616e3a20546865206c697175696469747957616c6c65742063616e6e60448201526606f7420626520360cc1b60648201526084016108e3565b600e546040516e1b1a5c5d5a591a5d1e55d85b1b195d608a1b81526001600160a01b0391821691861690600f016040519081900381209060008051602061397283398151915290600090a4600e80546001600160a01b0319166001600160a01b0386161790555b600f546001600160a01b03848116911614611446576001600160a01b0383166113df5760405162461bcd60e51b815260206004820152602760248201527f5368616d616e3a20546865206d61726b6574696e6757616c6c65742063616e6e60448201526606f7420626520360cc1b60648201526084016108e3565b600f80546040516e1b585c9ad95d1a5b99d5d85b1b195d608a1b81526001600160a01b039182169291861691016040519081900381209060008051602061397283398151915290600090a4600f80546001600160a01b0319166001600160a01b0385161790555b6011546001600160a01b0383811691161461151c576001600160a01b0382166114bb5760405162461bcd60e51b815260206004820152602160248201527f5368616d616e3a205468652064657657616c6c65742063616e6e6f74206265206044820152600360fc1b60648201526084016108e3565b6011546040516819195d95d85b1b195d60ba1b81526001600160a01b03918216918416906009016040519081900381209060008051602061397283398151915290600090a4601180546001600160a01b0319166001600160a01b0384161790555b6010546001600160a01b038281169116146115fa576001600160a01b0381166115955760405162461bcd60e51b815260206004820152602560248201527f5368616d616e3a20546865206275794261636b57616c6c65742063616e6e6f74604482015264020626520360dc1b60648201526084016108e3565b6010546040516c189d5e509858dad5d85b1b195d609a1b81526001600160a01b0391821691831690600d016040519081900381209060008051602061397283398151915290600090a4601080546001600160a01b0319166001600160a01b0383161790555b50505050565b6000546001600160a01b0316331461162a5760405162461bcd60e51b81526004016108e3906136da565b6001600160a01b03821660009081526017602052604090205481151560ff90911615150361166a5760405162461bcd60e51b81526004016108e39061370f565b6001600160a01b038216600081815260176020908152604091829020805460ff191685151590811790915591519182527f30098fc83ab61b1a98835d32c4e611adedccfc260eeef586bd329d48e8a40a409101610b54565b6000546001600160a01b031633146116ec5760405162461bcd60e51b81526004016108e3906136da565b6116fb6012868686868661221a565b6040516b62617365466565732d42757960a01b8152600c015b6040805191829003822060ff8881168452878116602085015286811684840152858116606085015284166080840152905190917f9a3619059270a48acdf850268d8f96db29f0cfe103bc17b5b4040a05af4d4f67919081900360a00190a25050505050565b6000610b6d3384610cd0856040518060600160405280602581526020016139da602591393360009081526004602090815260408083206001600160a01b038d168452909152902054919061215e565b6000610b6d338484611c94565b6000546001600160a01b031633146117ff5760405162461bcd60e51b81526004016108e3906136da565b600c5481036118765760405162461bcd60e51b815260206004820152603b60248201527f5368616d616e3a2043616e6e6f7420757064617465206d696e696d756d546f6b60448201527f656e734265666f72655377617020746f2073616d652076616c7565000000000060648201526084016108e3565b600c5460405182907f5b0491f767c1463bea8972339f785795be1a38784cc6483cf649cdcbb28c46b090600090a3600c55565b6000546001600160a01b031633146118d35760405162461bcd60e51b81526004016108e3906136da565b6118e2601286868686866124fe565b6040516c18985cd95199595ccb54d95b1b609a1b8152600d01611714565b6000546001600160a01b0316331461192a5760405162461bcd60e51b81526004016108e3906136da565b6001600160a01b03821660009081526015602052604090205481151560ff90911615150361196a5760405162461bcd60e51b81526004016108e39061370f565b6001600160a01b038216600081815260156020908152604091829020805460ff191685151590811790915591519182527fa856ba9fdc54a5434b2359874c95612f520a2d7f858864ae98d15c1b2099ca8b9101610b54565b6000546001600160a01b031633146119ec5760405162461bcd60e51b81526004016108e3906136da565b6001600160a01b0382166000818152601a6020908152604091829020805460ff191685151590811790915591519182527fcb9f97b7b4b41413e5c8d418a8cf9a88db1cf34dee66b213d070faf881d9d3509101610b54565b6000546001600160a01b03163314611a6e5760405162461bcd60e51b81526004016108e3906136da565b6001600160a01b038116611ad35760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016108e3565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000610e2e83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506127fe565b6001600160a01b038316611bd25760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016108e3565b6001600160a01b038216611c335760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016108e3565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316611cf85760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016108e3565b6001600160a01b038216611d5a5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016108e3565b60008111611dbc5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b60648201526084016108e3565b611dc5836110c3565b811115611e265760405162461bcd60e51b815260206004820152602960248201527f5368616d616e3a2043616e6e6f74207472616e73666572206d6f7265207468616044820152686e2062616c616e636560b81b60648201526084016108e3565b6001600160a01b03808416600081815260186020908152604080832054948716835280832054938352601a90915290205460ff928316929182169116158015611e8857506001600160a01b0384166000908152601a602052604090205460ff16155b1561204b5760075460ff16611eee5760405162461bcd60e51b815260206004820152602660248201527f5368616d616e3a2054726164696e672069732063757272656e746c792064697360448201526530b13632b21760d11b60648201526084016108e3565b6001600160a01b03841660009081526017602052604090205460ff16158015611f3057506001600160a01b03851660009081526017602052604090205460ff16155b15611fa057600a54831115611fa05760405162461bcd60e51b815260206004820152603060248201527f5368616d616e3a205472616e7366657220616d6f756e7420657863656564732060448201526f3a34329036b0bc2a3c20b6b7bab73a1760811b60648201526084016108e3565b6001600160a01b03841660009081526016602052604090205460ff1661204b5760095483611fcd866110c3565b611fd7919061381c565b111561204b5760405162461bcd60e51b815260206004820152603b60248201527f5368616d616e3a2045787065637465642077616c6c657420616d6f756e74206560448201527f78636565647320746865206d617857616c6c6574416d6f756e742e000000000060648201526084016108e3565b612055828261282c565b6000600c54612063306110c3565b600754911115915060ff1680156120775750805b80156120865750600b5460ff16155b801561209d5750601c54600160281b900460ff1615155b80156120c157506001600160a01b03851660009081526018602052604090205460ff165b156120e657600b805460ff191660011790556120db612a22565b600b805460ff191690555b600b5460009060ff161580156120fe575060075460ff165b6001600160a01b03881660009081526015602052604090205490915060ff168061214057506001600160a01b03861660009081526015602052604090205460ff165b15612149575060005b61215587878784612d14565b50505050505050565b600081848411156121825760405162461bcd60e51b81526004016108e391906134b4565b50600061218f848661378d565b95945050505050565b60008060006121a5612ee5565b90925090506121b48282611b2e565b9250505090565b6000806121c8838561381c565b905083811015610e2e5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016108e3565b600286015460ff86811691161461229b57604051706c69717569646974794665654f6e42757960781b815260110160405190819003812060028801548854919260ff91821692918916916000805160206139ba833981519152916122819160481b90613834565b60405180910390a460028601805460ff191660ff87161790555b600286015460ff85811662010000909204161461232f57604051706d61726b6574696e674665654f6e42757960781b815260110160405190819003812060028801548854919260ff62010000909204821692918816916000805160206139ba8339815191529161230e9160481b90613834565b60405180910390a460028601805462ff000019166201000060ff8716021790555b600286015460ff848116600160201b90920416146123c2576040516a6465764665654f6e42757960a81b8152600b0160405190819003812060028801548854919260ff600160201b909204821692918716916000805160206139ba8339815191529161239e9160481b90613834565b60405180910390a460028601805464ff000000001916600160201b60ff8616021790555b600286015460ff838116600160301b909204161461245b576040516e6275794261636b4665654f6e42757960881b8152600f0160405190819003812060028801548854919260ff600160301b909204821692918616916000805160206139ba833981519152916124359160481b90613834565b60405180910390a460028601805466ff0000000000001916600160301b60ff8516021790555b600286015460ff828116600160401b90920416146124f6576040516e686f6c646572734665654f6e42757960881b8152600f0160405190819003812060028801548854919260ff600160401b909204821692918516916000805160206139ba833981519152916124ce9160481b90613834565b60405180910390a460028601805468ff00000000000000001916600160401b60ff8416021790555b505050505050565b600286015460ff868116610100909204161461258f57604051711b1a5c5d5a591a5d1e51995953db94d95b1b60721b815260120160405190819003812060028801548854919260ff610100909204821692918916916000805160206139ba833981519152916125709160481b90613834565b60405180910390a460028601805461ff00191661010060ff8816021790555b600286015460ff8581166301000000909204161461262857604051711b585c9ad95d1a5b99d1995953db94d95b1b60721b815260120160405190819003812060028801548854919260ff6301000000909204821692918816916000805160206139ba833981519152916126059160481b90613834565b60405180910390a460028601805463ff0000001916630100000060ff8716021790555b600286015460ff848116600160281b90920416146126bd576040516b19195d91995953db94d95b1b60a21b8152600c0160405190819003812060028801548854919260ff600160281b909204821692918716916000805160206139ba833981519152916126989160481b90613834565b60405180910390a460028601805465ff00000000001916600160281b60ff8616021790555b600286015460ff838116600160381b9092041614612758576040516f189d5e509858dad1995953db94d95b1b60821b815260100160405190819003812060028801548854919260ff600160381b909204821692918616916000805160206139ba833981519152916127319160481b90613834565b60405180910390a460028601805467ff000000000000001916600160381b60ff8516021790555b600286015460ff828116600160481b90920416146124f6576040516f1a1bdb19195c9cd1995953db94d95b1b60821b815260100160405190819003812060028801548854919260ff600160481b909204821692918516916000805160206139ba833981519152916127cc9160481b90613834565b60405180910390a460028601805460ff8316600160481b0269ff00000000000000000019909116179055505050505050565b6000818361281f5760405162461bcd60e51b81526004016108e391906134b4565b50600061218f84866137e9565b601c805464ffffffffff1916905581156128b757601454601c805460ff80841662ff00ff1990921691909117600160201b8085048316620100009081029290921763ff00ff00191661010092860484169290920263ff000000191691909117600160301b850483166301000000021764ff000000001916600160401b90940491909116029190911790555b801561293357601454601c805461010080840460ff90811662ff00ff1990931692909217600160281b8504831662010000021763ff00ff001916630100000080860484169290920263ff000000191617600160381b85048316919091021764ff000000001916600160481b90930416600160201b029190911790555b601c5460ff600160201b8204811691630100000081048216916201000082048116916129679161010082048116911661384b565b612971919061384b565b61297b919061384b565b612985919061384b565b601c805465ff0000000000198116600160281b60ff948516810291821793849055604080519386169286169290921783526101008404851660208401526201000084048516918301919091526301000000830484166060830152600160201b83048416608083015290910490911660a08201527f6c6977cb51242ec6e05aba0e2a29a5292ed1a8a5cffa3b87ff66395b7997d6d29060c0016110b6565b6000612a2d306110c3565b601c54909150479060ff600160281b820481169181811691610100820481169162010000810482169163010000008204811691600160201b9004166000600287612a77888c6137fd565b612a8191906137e9565b612a8b91906137e9565b90506000612a99828b61378d565b9050612aa48161309a565b6000612ab08a4761378d565b9050600084612ac060028b613870565b612aca908c613892565b612ad49190613892565b60ff16905060006002828b60ff1685612aed91906137fd565b612af791906137e9565b612b0191906137e9565b9050600082612b1360ff8b16866137fd565b612b1d91906137e9565b9050600083612b2f60ff8b16876137fd565b612b3991906137e9565b9050600081612b48848661381c565b612b52919061381c565b612b5c908761378d565b600f546040519192506001600160a01b03169082156108fc029083906000818181858888f19350505050158015612b97573d6000803e3d6000fd5b506011546040516001600160a01b039091169084156108fc029085906000818181858888f19350505050158015612bd2573d6000803e3d6000fd5b506010546040516001600160a01b039091169083156108fc029084906000818181858888f19350505050158015612c0d573d6000803e3d6000fd5b508715612c6057612c1e88856131ec565b60408051888152602081018690529081018990527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15b8d601c60056101000a81548160ff021916908360ff1602179055508c601c60006101000a81548160ff021916908360ff1602179055508b601c60016101000a81548160ff021916908360ff1602179055508a601c60026101000a81548160ff021916908360ff16021790555089601c60036101000a81548160ff021916908360ff16021790555088601c60046101000a81548160ff021916908360ff16021790555050505050505050505050505050505050565b6000806000612d2385856132a0565b925092509250600080600080612d42898787612d3d612198565b61336a565b6001600160a01b038f166000908152601960205260409020549397509195509350915060ff1615612dab576001600160a01b038b16600090815260036020526040902054612d91908a9061378d565b6001600160a01b038c166000908152600360205260409020555b6001600160a01b038a1660009081526019602052604090205460ff1615612e0a576001600160a01b038a16600090815260036020526040902054612df090889061381c565b6001600160a01b038b166000908152600360205260409020555b6001600160a01b038b16600090815260026020526040902054612e2e90859061378d565b6001600160a01b03808d1660009081526002602052604080822093909355908c1681522054612e5e90849061381c565b6001600160a01b038b16600090815260026020526040902055612e8181866133c2565b612e8b8287613427565b896001600160a01b03168b6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef89604051612ed091815260200190565b60405180910390a35050505050505050505050565b60055460009081906e09a130b963a6c115c3c7f400000000825b601b54811015613050578260026000601b8481548110612f2157612f21613761565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612f8c57508160036000601b8481548110612f6557612f65613761565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15612fae575050600554936e09a130b963a6c115c3c7f4000000009350915050565b60026000601b8381548110612fc557612fc5613761565b60009182526020808320909101546001600160a01b03168352820192909252604001902054612ff4908461378d565b925060036000601b838154811061300d5761300d613761565b60009182526020808320909101546001600160a01b0316835282019290925260400190205461303c908361378d565b915080613048816137ba565b915050612eff565b506e09a130b963a6c115c3c7f40000000060055461306e91906137e9565b821015613091575050600554926e09a130b963a6c115c3c7f40000000092509050565b90939092509050565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106130cf576130cf613761565b6001600160a01b03928316602091820292909201810191909152600154604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015613128573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061314c91906138b5565b8160018151811061315f5761315f613761565b6001600160a01b0392831660209182029290920101526001546131859130911684611b70565b60015460405163791ac94760e01b81526001600160a01b039091169063791ac947906131be9085906000908690309042906004016138d2565b600060405180830381600087803b1580156131d857600080fd5b505af11580156124f6573d6000803e3d6000fd5b6001546132049030906001600160a01b031684611b70565b600154600e5460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af1158015613274573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906132999190613943565b5050505050565b6000806000836132b857508391506000905080613363565b601c546000906064906132d590600160201b900460ff16886137fd565b6132df91906137e9565b601c5490915060009060649060ff630100000082048116916101008104821691613312916201000081048216911661384b565b61331c919061384b565b613326919061384b565b6133339060ff16896137fd565b61333d91906137e9565b9050600061334b828461381c565b613355908961378d565b955091935091506133639050565b9250925092565b60008080808061337a868a6137fd565b90506000613388878a6137fd565b90506000613396888a6137fd565b905060006133a4828461381c565b6133ae908561378d565b939c939b5091995097509095505050505050565b3060009081526019602052604090205460ff16156133ff5730600090815260036020526040812080548392906133f990849061381c565b90915550505b306000908152600260205260408120805484929061341e90849061381c565b90915550505050565b8160056000828254613439919061378d565b92505081905550806006600082825461341e919061381c565b6001600160a01b038116811461346757600080fd5b50565b8035801515811461347a57600080fd5b919050565b6000806040838503121561349257600080fd5b823561349d81613452565b91506134ab6020840161346a565b90509250929050565b600060208083528351808285015260005b818110156134e1578581018301518582016040015282016134c5565b818111156134f3576000604083870101525b50601f01601f1916929092016040019392505050565b6000806040838503121561351c57600080fd5b823561352781613452565b946020939093013593505050565b60006020828403121561354757600080fd5b5035919050565b60008060006060848603121561356357600080fd5b833561356e81613452565b9250602084013561357e81613452565b929592945050506040919091013590565b600080604083850312156135a257600080fd5b823591506134ab6020840161346a565b6000602082840312156135c457600080fd5b8135610e2e81613452565b600080600080608085870312156135e557600080fd5b84356135f081613452565b9350602085013561360081613452565b9250604085013561361081613452565b9150606085013561362081613452565b939692955090935050565b803560ff8116811461347a57600080fd5b600080600080600060a0868803121561365457600080fd5b61365d8661362b565b945061366b6020870161362b565b93506136796040870161362b565b92506136876060870161362b565b91506136956080870161362b565b90509295509295909350565b600080604083850312156136b457600080fd5b82356136bf81613452565b915060208301356136cf81613452565b809150509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526032908201527f5368616d616e3a204163636f756e7420697320616c7265616479207468652076604082015271616c7565206f6620276578636c756465642760701b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008282101561379f5761379f613777565b500390565b634e487b7160e01b600052603160045260246000fd5b6000600182016137cc576137cc613777565b5060010190565b634e487b7160e01b600052601260045260246000fd5b6000826137f8576137f86137d3565b500490565b600081600019048311821515161561381757613817613777565b500290565b6000821982111561382f5761382f613777565b500190565b68ffffffffffffffffff1991909116815260200190565b600060ff821660ff84168060ff0382111561386857613868613777565b019392505050565b600060ff831680613883576138836137d3565b8060ff84160491505092915050565b600060ff821660ff8416808210156138ac576138ac613777565b90039392505050565b6000602082840312156138c757600080fd5b8151610e2e81613452565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156139225784516001600160a01b0316835293830193918301916001016138fd565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561395857600080fd5b835192506020840151915060408401519050925092509256fe4af24be54adc5e716fbcaa3fca0ad593e28dff90dffd49487c0a33b1547c6b5245524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636500edc71549f0cbe47086c2237ce0cf874d6897fd1d7ce43ee6b65c0230d7606e45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220a45651408d5c4241893b3de81f96b113421ebf00bdb90bd0f44303589311359264736f6c634300080d0033
Deployed Bytecode
0x60806040526004361061026b5760003560e01c8063781edb3c11610144578063aee50b1e116100b6578063d2d7ad831161007a578063d2d7ad83146107b7578063d3221576146107cd578063d4698016146107ed578063dd62ed3e1461080d578063f2fde38b14610853578063fe0175351461087357600080fd5b8063aee50b1e146106b6578063b1ba39ea146106d6578063b62496f5146106f6578063c024666814610726578063cd43e2281461074657600080fd5b80638ea5220f116101085780638ea5220f146105f157806395d89b41146106115780639fad968314610640578063a457c2d714610660578063a9059cbb14610680578063aa4bde28146106a057600080fd5b8063781edb3c1461055d57806383672f3e1461057d578063880bcbc11461059d5780638c0b5e22146105bd5780638da5cb5b146105d357600080fd5b806327a14fc2116101dd5780634549b039116101a15780634549b0391461049f57806349bd5a5e146104bf57806366164f6f146104f357806370a0823114610508578063715018a61461052857806375f0a8741461053d57600080fd5b806327a14fc21461040e5780632d8381191461042e578063313ce5671461044e57806334cf1fea1461046a578063395093511461047f57600080fd5b806313114a9d1161022f57806313114a9d146103355780631694505e1461035457806318160ddd1461038c5780631cd348c0146103ae5780631e293c10146103ce57806323b872dd146103ee57600080fd5b80630483f7a014610277578063064a59d01461029957806306fdde03146102c8578063095ea7b3146103005780630bd05b691461032057600080fd5b3661027257005b600080fd5b34801561028357600080fd5b5061029761029236600461347f565b6108b9565b005b3480156102a557600080fd5b506007546102b39060ff1681565b60405190151581526020015b60405180910390f35b3480156102d457600080fd5b5060408051808201909152600681526529b430b6b0b760d11b60208201525b6040516102bf91906134b4565b34801561030c57600080fd5b506102b361031b366004613509565b610b60565b34801561032c57600080fd5b50610297610b77565b34801561034157600080fd5b506006545b6040519081526020016102bf565b34801561036057600080fd5b50600154610374906001600160a01b031681565b6040516001600160a01b0390911681526020016102bf565b34801561039857600080fd5b506e09a130b963a6c115c3c7f400000000610346565b3480156103ba57600080fd5b50601054610374906001600160a01b031681565b3480156103da57600080fd5b506102976103e9366004613535565b610bb0565b3480156103fa57600080fd5b506102b361040936600461354e565b610c76565b34801561041a57600080fd5b50610297610429366004613535565b610cdf565b34801561043a57600080fd5b50610346610449366004613535565b610da9565b34801561045a57600080fd5b50604051601281526020016102bf565b34801561047657600080fd5b50610297610e35565b34801561048b57600080fd5b506102b361049a366004613509565b610e6f565b3480156104ab57600080fd5b506103466104ba36600461358f565b610ea5565b3480156104cb57600080fd5b506103747f0000000000000000000000009b4a421bdf48f44a7327dcde1dc741009e37989981565b3480156104ff57600080fd5b50610297610f8b565b34801561051457600080fd5b506103466105233660046135b2565b6110c3565b34801561053457600080fd5b50610297611122565b34801561054957600080fd5b50600f54610374906001600160a01b031681565b34801561056957600080fd5b5061029761057836600461347f565b611196565b34801561058957600080fd5b506102976105983660046135cf565b611258565b3480156105a957600080fd5b506102976105b836600461347f565b611600565b3480156105c957600080fd5b50610346600a5481565b3480156105df57600080fd5b506000546001600160a01b0316610374565b3480156105fd57600080fd5b50601154610374906001600160a01b031681565b34801561061d57600080fd5b5060408051808201909152600681526529a420a6a0a760d11b60208201526102f3565b34801561064c57600080fd5b5061029761065b36600461363c565b6116c2565b34801561066c57600080fd5b506102b361067b366004613509565b611779565b34801561068c57600080fd5b506102b361069b366004613509565b6117c8565b3480156106ac57600080fd5b5061034660095481565b3480156106c257600080fd5b506102976106d1366004613535565b6117d5565b3480156106e257600080fd5b506102976106f136600461363c565b6118a9565b34801561070257600080fd5b506102b36107113660046135b2565b60186020526000908152604090205460ff1681565b34801561073257600080fd5b5061029761074136600461347f565b611900565b34801561075257600080fd5b5060145460ff80821691620100008104821691600160201b8204811691600160301b8104821691600160401b909104165b6040805160ff968716815294861660208601529285169284019290925283166060830152909116608082015260a0016102bf565b3480156107c357600080fd5b50610346600c5481565b3480156107d957600080fd5b506102976107e836600461347f565b6119c2565b3480156107f957600080fd5b50600e54610374906001600160a01b031681565b34801561081957600080fd5b506103466108283660046136a1565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b34801561085f57600080fd5b5061029761086e3660046135b2565b611a44565b34801561087f57600080fd5b5060145460ff610100820481169163010000008104821691600160281b8204811691600160381b8104821691600160481b90910416610783565b6000546001600160a01b031633146108ec5760405162461bcd60e51b81526004016108e3906136da565b60405180910390fd5b6001600160a01b03821660009081526019602052604090205481151560ff90911615150361092c5760405162461bcd60e51b81526004016108e39061370f565b80156109f4576001600160a01b0382166000908152600260205260409020541561098c576001600160a01b03821660009081526002602052604090205461097290610da9565b6001600160a01b0383166000908152600360205260409020555b6001600160a01b0382166000818152601960205260408120805460ff1916841515179055601b805460018101825591527f3ad8aa4f87544323a9d1e5dd902f40c356527a7955687113db5f9a85ad579dc10180546001600160a01b0319169091179055610b17565b60005b601b54811015610b1557826001600160a01b0316601b8281548110610a1e57610a1e613761565b6000918252602090912001546001600160a01b031603610b0357601b8054610a489060019061378d565b81548110610a5857610a58613761565b600091825260209091200154601b80546001600160a01b039092169183908110610a8457610a84613761565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559185168152600382526040808220829055601990925220805460ff19169055601b805480610adc57610adc6137a4565b600082815260209020810160001990810180546001600160a01b0319169055019055610b15565b80610b0d816137ba565b9150506109f7565b505b816001600160a01b03167fcb9d59a6e9da25dee1a9ddef81481537dfd94e20b1593b58b08193bea9e9baa982604051610b54911515815260200190565b60405180910390a25050565b6000610b6d338484611b70565b5060015b92915050565b6000546001600160a01b03163314610ba15760405162461bcd60e51b81526004016108e3906136da565b6007805460ff19166001179055565b6000546001600160a01b03163314610bda5760405162461bcd60e51b81526004016108e3906136da565b600a548103610c435760405162461bcd60e51b815260206004820152602f60248201527f5368616d616e3a2043616e6e6f7420757064617465206d61785478416d6f756e60448201526e7420746f2073616d652076616c756560881b60648201526084016108e3565b600a5460405182907f75f1c17bf623f0f7a2bd91ba61e89dff216960370e3e9a46b250750d03e4215e90600090a3600a55565b6000610c83848484611c94565b610cd58433610cd085604051806060016040528060288152602001613992602891396001600160a01b038a166000908152600460209081526040808320338452909152902054919061215e565b611b70565b5060019392505050565b6000546001600160a01b03163314610d095760405162461bcd60e51b81526004016108e3906136da565b6009548103610d765760405162461bcd60e51b815260206004820152603360248201527f5368616d616e3a2043616e6e6f7420757064617465206d617857616c6c6574416044820152726d6f756e7420746f2073616d652076616c756560681b60648201526084016108e3565b60095460405182907f6d3e257c59a11116c3e97bb144abf5ba1a6a9da6bd509192ecf0d48f7be1fc7690600090a3600955565b6000600554821115610e185760405162461bcd60e51b815260206004820152603260248201527f5368616d616e3a20416d6f756e74206d757374206265206c657373207468616e60448201527120746f74616c207265666c656374696f6e7360701b60648201526084016108e3565b6000610e22612198565b9050610e2e81846137e9565b9392505050565b6000546001600160a01b03163314610e5f5760405162461bcd60e51b81526004016108e3906136da565b6007805460ff1916905542600855565b3360008181526004602090815260408083206001600160a01b03871684529091528120549091610b6d918590610cd090866121bb565b60006e09a130b963a6c115c3c7f400000000831115610f165760405162461bcd60e51b815260206004820152602760248201527f5368616d616e3a20416d6f756e74206d757374206265206c657373207468616e60448201526620737570706c7960c81b60648201526084016108e3565b6000610f20612198565b90506000610f2e82866137fd565b905083610f3e579150610b719050565b601c546000908390606490610f5d90600160281b900460ff16896137fd565b610f6791906137e9565b610f7191906137fd565b90506000610f7f828461378d565b9450610b719350505050565b6000546001600160a01b03163314610fb55760405162461bcd60e51b81526004016108e3906136da565b6000471161101c5760405162461bcd60e51b815260206004820152602e60248201527f5368616d616e3a2043616e6e6f742073656e64206d6f7265207468616e20636f60448201526d6e74726163742062616c616e636560901b60648201526084016108e3565b4760006110316000546001600160a01b031690565b6001600160a01b03168260405160006040518083038185875af1925050503d806000811461107b576040519150601f19603f3d011682016040523d82523d6000602084013e611080565b606091505b5050905080156110bf576040518281527f362ae087cf4ccfc970d45b9e8ce6520f03b4eda3f9d76a70b655dc22badcca48906020015b60405180910390a15b5050565b6001600160a01b03811660009081526019602052604081205460ff161561110057506001600160a01b031660009081526003602052604090205490565b6001600160a01b038216600090815260026020526040902054610b7190610da9565b6000546001600160a01b0316331461114c5760405162461bcd60e51b81526004016108e3906136da565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146111c05760405162461bcd60e51b81526004016108e3906136da565b6001600160a01b03821660009081526016602052604090205481151560ff9091161515036112005760405162461bcd60e51b81526004016108e39061370f565b6001600160a01b038216600081815260166020908152604091829020805460ff191685151590811790915591519182527ff5133f371b17bf21ce0df4ae2c1b6e11ca7c2f27257eb55282edb1ccfd4ecb2e9101610b54565b6000546001600160a01b031633146112825760405162461bcd60e51b81526004016108e3906136da565b600e546001600160a01b03858116911614611364576001600160a01b0384166112fd5760405162461bcd60e51b815260206004820152602760248201527f5368616d616e3a20546865206c697175696469747957616c6c65742063616e6e60448201526606f7420626520360cc1b60648201526084016108e3565b600e546040516e1b1a5c5d5a591a5d1e55d85b1b195d608a1b81526001600160a01b0391821691861690600f016040519081900381209060008051602061397283398151915290600090a4600e80546001600160a01b0319166001600160a01b0386161790555b600f546001600160a01b03848116911614611446576001600160a01b0383166113df5760405162461bcd60e51b815260206004820152602760248201527f5368616d616e3a20546865206d61726b6574696e6757616c6c65742063616e6e60448201526606f7420626520360cc1b60648201526084016108e3565b600f80546040516e1b585c9ad95d1a5b99d5d85b1b195d608a1b81526001600160a01b039182169291861691016040519081900381209060008051602061397283398151915290600090a4600f80546001600160a01b0319166001600160a01b0385161790555b6011546001600160a01b0383811691161461151c576001600160a01b0382166114bb5760405162461bcd60e51b815260206004820152602160248201527f5368616d616e3a205468652064657657616c6c65742063616e6e6f74206265206044820152600360fc1b60648201526084016108e3565b6011546040516819195d95d85b1b195d60ba1b81526001600160a01b03918216918416906009016040519081900381209060008051602061397283398151915290600090a4601180546001600160a01b0319166001600160a01b0384161790555b6010546001600160a01b038281169116146115fa576001600160a01b0381166115955760405162461bcd60e51b815260206004820152602560248201527f5368616d616e3a20546865206275794261636b57616c6c65742063616e6e6f74604482015264020626520360dc1b60648201526084016108e3565b6010546040516c189d5e509858dad5d85b1b195d609a1b81526001600160a01b0391821691831690600d016040519081900381209060008051602061397283398151915290600090a4601080546001600160a01b0319166001600160a01b0383161790555b50505050565b6000546001600160a01b0316331461162a5760405162461bcd60e51b81526004016108e3906136da565b6001600160a01b03821660009081526017602052604090205481151560ff90911615150361166a5760405162461bcd60e51b81526004016108e39061370f565b6001600160a01b038216600081815260176020908152604091829020805460ff191685151590811790915591519182527f30098fc83ab61b1a98835d32c4e611adedccfc260eeef586bd329d48e8a40a409101610b54565b6000546001600160a01b031633146116ec5760405162461bcd60e51b81526004016108e3906136da565b6116fb6012868686868661221a565b6040516b62617365466565732d42757960a01b8152600c015b6040805191829003822060ff8881168452878116602085015286811684840152858116606085015284166080840152905190917f9a3619059270a48acdf850268d8f96db29f0cfe103bc17b5b4040a05af4d4f67919081900360a00190a25050505050565b6000610b6d3384610cd0856040518060600160405280602581526020016139da602591393360009081526004602090815260408083206001600160a01b038d168452909152902054919061215e565b6000610b6d338484611c94565b6000546001600160a01b031633146117ff5760405162461bcd60e51b81526004016108e3906136da565b600c5481036118765760405162461bcd60e51b815260206004820152603b60248201527f5368616d616e3a2043616e6e6f7420757064617465206d696e696d756d546f6b60448201527f656e734265666f72655377617020746f2073616d652076616c7565000000000060648201526084016108e3565b600c5460405182907f5b0491f767c1463bea8972339f785795be1a38784cc6483cf649cdcbb28c46b090600090a3600c55565b6000546001600160a01b031633146118d35760405162461bcd60e51b81526004016108e3906136da565b6118e2601286868686866124fe565b6040516c18985cd95199595ccb54d95b1b609a1b8152600d01611714565b6000546001600160a01b0316331461192a5760405162461bcd60e51b81526004016108e3906136da565b6001600160a01b03821660009081526015602052604090205481151560ff90911615150361196a5760405162461bcd60e51b81526004016108e39061370f565b6001600160a01b038216600081815260156020908152604091829020805460ff191685151590811790915591519182527fa856ba9fdc54a5434b2359874c95612f520a2d7f858864ae98d15c1b2099ca8b9101610b54565b6000546001600160a01b031633146119ec5760405162461bcd60e51b81526004016108e3906136da565b6001600160a01b0382166000818152601a6020908152604091829020805460ff191685151590811790915591519182527fcb9f97b7b4b41413e5c8d418a8cf9a88db1cf34dee66b213d070faf881d9d3509101610b54565b6000546001600160a01b03163314611a6e5760405162461bcd60e51b81526004016108e3906136da565b6001600160a01b038116611ad35760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016108e3565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000610e2e83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506127fe565b6001600160a01b038316611bd25760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016108e3565b6001600160a01b038216611c335760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016108e3565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316611cf85760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016108e3565b6001600160a01b038216611d5a5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016108e3565b60008111611dbc5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b60648201526084016108e3565b611dc5836110c3565b811115611e265760405162461bcd60e51b815260206004820152602960248201527f5368616d616e3a2043616e6e6f74207472616e73666572206d6f7265207468616044820152686e2062616c616e636560b81b60648201526084016108e3565b6001600160a01b03808416600081815260186020908152604080832054948716835280832054938352601a90915290205460ff928316929182169116158015611e8857506001600160a01b0384166000908152601a602052604090205460ff16155b1561204b5760075460ff16611eee5760405162461bcd60e51b815260206004820152602660248201527f5368616d616e3a2054726164696e672069732063757272656e746c792064697360448201526530b13632b21760d11b60648201526084016108e3565b6001600160a01b03841660009081526017602052604090205460ff16158015611f3057506001600160a01b03851660009081526017602052604090205460ff16155b15611fa057600a54831115611fa05760405162461bcd60e51b815260206004820152603060248201527f5368616d616e3a205472616e7366657220616d6f756e7420657863656564732060448201526f3a34329036b0bc2a3c20b6b7bab73a1760811b60648201526084016108e3565b6001600160a01b03841660009081526016602052604090205460ff1661204b5760095483611fcd866110c3565b611fd7919061381c565b111561204b5760405162461bcd60e51b815260206004820152603b60248201527f5368616d616e3a2045787065637465642077616c6c657420616d6f756e74206560448201527f78636565647320746865206d617857616c6c6574416d6f756e742e000000000060648201526084016108e3565b612055828261282c565b6000600c54612063306110c3565b600754911115915060ff1680156120775750805b80156120865750600b5460ff16155b801561209d5750601c54600160281b900460ff1615155b80156120c157506001600160a01b03851660009081526018602052604090205460ff165b156120e657600b805460ff191660011790556120db612a22565b600b805460ff191690555b600b5460009060ff161580156120fe575060075460ff165b6001600160a01b03881660009081526015602052604090205490915060ff168061214057506001600160a01b03861660009081526015602052604090205460ff165b15612149575060005b61215587878784612d14565b50505050505050565b600081848411156121825760405162461bcd60e51b81526004016108e391906134b4565b50600061218f848661378d565b95945050505050565b60008060006121a5612ee5565b90925090506121b48282611b2e565b9250505090565b6000806121c8838561381c565b905083811015610e2e5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016108e3565b600286015460ff86811691161461229b57604051706c69717569646974794665654f6e42757960781b815260110160405190819003812060028801548854919260ff91821692918916916000805160206139ba833981519152916122819160481b90613834565b60405180910390a460028601805460ff191660ff87161790555b600286015460ff85811662010000909204161461232f57604051706d61726b6574696e674665654f6e42757960781b815260110160405190819003812060028801548854919260ff62010000909204821692918816916000805160206139ba8339815191529161230e9160481b90613834565b60405180910390a460028601805462ff000019166201000060ff8716021790555b600286015460ff848116600160201b90920416146123c2576040516a6465764665654f6e42757960a81b8152600b0160405190819003812060028801548854919260ff600160201b909204821692918716916000805160206139ba8339815191529161239e9160481b90613834565b60405180910390a460028601805464ff000000001916600160201b60ff8616021790555b600286015460ff838116600160301b909204161461245b576040516e6275794261636b4665654f6e42757960881b8152600f0160405190819003812060028801548854919260ff600160301b909204821692918616916000805160206139ba833981519152916124359160481b90613834565b60405180910390a460028601805466ff0000000000001916600160301b60ff8516021790555b600286015460ff828116600160401b90920416146124f6576040516e686f6c646572734665654f6e42757960881b8152600f0160405190819003812060028801548854919260ff600160401b909204821692918516916000805160206139ba833981519152916124ce9160481b90613834565b60405180910390a460028601805468ff00000000000000001916600160401b60ff8416021790555b505050505050565b600286015460ff868116610100909204161461258f57604051711b1a5c5d5a591a5d1e51995953db94d95b1b60721b815260120160405190819003812060028801548854919260ff610100909204821692918916916000805160206139ba833981519152916125709160481b90613834565b60405180910390a460028601805461ff00191661010060ff8816021790555b600286015460ff8581166301000000909204161461262857604051711b585c9ad95d1a5b99d1995953db94d95b1b60721b815260120160405190819003812060028801548854919260ff6301000000909204821692918816916000805160206139ba833981519152916126059160481b90613834565b60405180910390a460028601805463ff0000001916630100000060ff8716021790555b600286015460ff848116600160281b90920416146126bd576040516b19195d91995953db94d95b1b60a21b8152600c0160405190819003812060028801548854919260ff600160281b909204821692918716916000805160206139ba833981519152916126989160481b90613834565b60405180910390a460028601805465ff00000000001916600160281b60ff8616021790555b600286015460ff838116600160381b9092041614612758576040516f189d5e509858dad1995953db94d95b1b60821b815260100160405190819003812060028801548854919260ff600160381b909204821692918616916000805160206139ba833981519152916127319160481b90613834565b60405180910390a460028601805467ff000000000000001916600160381b60ff8516021790555b600286015460ff828116600160481b90920416146124f6576040516f1a1bdb19195c9cd1995953db94d95b1b60821b815260100160405190819003812060028801548854919260ff600160481b909204821692918516916000805160206139ba833981519152916127cc9160481b90613834565b60405180910390a460028601805460ff8316600160481b0269ff00000000000000000019909116179055505050505050565b6000818361281f5760405162461bcd60e51b81526004016108e391906134b4565b50600061218f84866137e9565b601c805464ffffffffff1916905581156128b757601454601c805460ff80841662ff00ff1990921691909117600160201b8085048316620100009081029290921763ff00ff00191661010092860484169290920263ff000000191691909117600160301b850483166301000000021764ff000000001916600160401b90940491909116029190911790555b801561293357601454601c805461010080840460ff90811662ff00ff1990931692909217600160281b8504831662010000021763ff00ff001916630100000080860484169290920263ff000000191617600160381b85048316919091021764ff000000001916600160481b90930416600160201b029190911790555b601c5460ff600160201b8204811691630100000081048216916201000082048116916129679161010082048116911661384b565b612971919061384b565b61297b919061384b565b612985919061384b565b601c805465ff0000000000198116600160281b60ff948516810291821793849055604080519386169286169290921783526101008404851660208401526201000084048516918301919091526301000000830484166060830152600160201b83048416608083015290910490911660a08201527f6c6977cb51242ec6e05aba0e2a29a5292ed1a8a5cffa3b87ff66395b7997d6d29060c0016110b6565b6000612a2d306110c3565b601c54909150479060ff600160281b820481169181811691610100820481169162010000810482169163010000008204811691600160201b9004166000600287612a77888c6137fd565b612a8191906137e9565b612a8b91906137e9565b90506000612a99828b61378d565b9050612aa48161309a565b6000612ab08a4761378d565b9050600084612ac060028b613870565b612aca908c613892565b612ad49190613892565b60ff16905060006002828b60ff1685612aed91906137fd565b612af791906137e9565b612b0191906137e9565b9050600082612b1360ff8b16866137fd565b612b1d91906137e9565b9050600083612b2f60ff8b16876137fd565b612b3991906137e9565b9050600081612b48848661381c565b612b52919061381c565b612b5c908761378d565b600f546040519192506001600160a01b03169082156108fc029083906000818181858888f19350505050158015612b97573d6000803e3d6000fd5b506011546040516001600160a01b039091169084156108fc029085906000818181858888f19350505050158015612bd2573d6000803e3d6000fd5b506010546040516001600160a01b039091169083156108fc029084906000818181858888f19350505050158015612c0d573d6000803e3d6000fd5b508715612c6057612c1e88856131ec565b60408051888152602081018690529081018990527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15b8d601c60056101000a81548160ff021916908360ff1602179055508c601c60006101000a81548160ff021916908360ff1602179055508b601c60016101000a81548160ff021916908360ff1602179055508a601c60026101000a81548160ff021916908360ff16021790555089601c60036101000a81548160ff021916908360ff16021790555088601c60046101000a81548160ff021916908360ff16021790555050505050505050505050505050505050565b6000806000612d2385856132a0565b925092509250600080600080612d42898787612d3d612198565b61336a565b6001600160a01b038f166000908152601960205260409020549397509195509350915060ff1615612dab576001600160a01b038b16600090815260036020526040902054612d91908a9061378d565b6001600160a01b038c166000908152600360205260409020555b6001600160a01b038a1660009081526019602052604090205460ff1615612e0a576001600160a01b038a16600090815260036020526040902054612df090889061381c565b6001600160a01b038b166000908152600360205260409020555b6001600160a01b038b16600090815260026020526040902054612e2e90859061378d565b6001600160a01b03808d1660009081526002602052604080822093909355908c1681522054612e5e90849061381c565b6001600160a01b038b16600090815260026020526040902055612e8181866133c2565b612e8b8287613427565b896001600160a01b03168b6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef89604051612ed091815260200190565b60405180910390a35050505050505050505050565b60055460009081906e09a130b963a6c115c3c7f400000000825b601b54811015613050578260026000601b8481548110612f2157612f21613761565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612f8c57508160036000601b8481548110612f6557612f65613761565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15612fae575050600554936e09a130b963a6c115c3c7f4000000009350915050565b60026000601b8381548110612fc557612fc5613761565b60009182526020808320909101546001600160a01b03168352820192909252604001902054612ff4908461378d565b925060036000601b838154811061300d5761300d613761565b60009182526020808320909101546001600160a01b0316835282019290925260400190205461303c908361378d565b915080613048816137ba565b915050612eff565b506e09a130b963a6c115c3c7f40000000060055461306e91906137e9565b821015613091575050600554926e09a130b963a6c115c3c7f40000000092509050565b90939092509050565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106130cf576130cf613761565b6001600160a01b03928316602091820292909201810191909152600154604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015613128573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061314c91906138b5565b8160018151811061315f5761315f613761565b6001600160a01b0392831660209182029290920101526001546131859130911684611b70565b60015460405163791ac94760e01b81526001600160a01b039091169063791ac947906131be9085906000908690309042906004016138d2565b600060405180830381600087803b1580156131d857600080fd5b505af11580156124f6573d6000803e3d6000fd5b6001546132049030906001600160a01b031684611b70565b600154600e5460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af1158015613274573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906132999190613943565b5050505050565b6000806000836132b857508391506000905080613363565b601c546000906064906132d590600160201b900460ff16886137fd565b6132df91906137e9565b601c5490915060009060649060ff630100000082048116916101008104821691613312916201000081048216911661384b565b61331c919061384b565b613326919061384b565b6133339060ff16896137fd565b61333d91906137e9565b9050600061334b828461381c565b613355908961378d565b955091935091506133639050565b9250925092565b60008080808061337a868a6137fd565b90506000613388878a6137fd565b90506000613396888a6137fd565b905060006133a4828461381c565b6133ae908561378d565b939c939b5091995097509095505050505050565b3060009081526019602052604090205460ff16156133ff5730600090815260036020526040812080548392906133f990849061381c565b90915550505b306000908152600260205260408120805484929061341e90849061381c565b90915550505050565b8160056000828254613439919061378d565b92505081905550806006600082825461341e919061381c565b6001600160a01b038116811461346757600080fd5b50565b8035801515811461347a57600080fd5b919050565b6000806040838503121561349257600080fd5b823561349d81613452565b91506134ab6020840161346a565b90509250929050565b600060208083528351808285015260005b818110156134e1578581018301518582016040015282016134c5565b818111156134f3576000604083870101525b50601f01601f1916929092016040019392505050565b6000806040838503121561351c57600080fd5b823561352781613452565b946020939093013593505050565b60006020828403121561354757600080fd5b5035919050565b60008060006060848603121561356357600080fd5b833561356e81613452565b9250602084013561357e81613452565b929592945050506040919091013590565b600080604083850312156135a257600080fd5b823591506134ab6020840161346a565b6000602082840312156135c457600080fd5b8135610e2e81613452565b600080600080608085870312156135e557600080fd5b84356135f081613452565b9350602085013561360081613452565b9250604085013561361081613452565b9150606085013561362081613452565b939692955090935050565b803560ff8116811461347a57600080fd5b600080600080600060a0868803121561365457600080fd5b61365d8661362b565b945061366b6020870161362b565b93506136796040870161362b565b92506136876060870161362b565b91506136956080870161362b565b90509295509295909350565b600080604083850312156136b457600080fd5b82356136bf81613452565b915060208301356136cf81613452565b809150509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526032908201527f5368616d616e3a204163636f756e7420697320616c7265616479207468652076604082015271616c7565206f6620276578636c756465642760701b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008282101561379f5761379f613777565b500390565b634e487b7160e01b600052603160045260246000fd5b6000600182016137cc576137cc613777565b5060010190565b634e487b7160e01b600052601260045260246000fd5b6000826137f8576137f86137d3565b500490565b600081600019048311821515161561381757613817613777565b500290565b6000821982111561382f5761382f613777565b500190565b68ffffffffffffffffff1991909116815260200190565b600060ff821660ff84168060ff0382111561386857613868613777565b019392505050565b600060ff831680613883576138836137d3565b8060ff84160491505092915050565b600060ff821660ff8416808210156138ac576138ac613777565b90039392505050565b6000602082840312156138c757600080fd5b8151610e2e81613452565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156139225784516001600160a01b0316835293830193918301916001016138fd565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561395857600080fd5b835192506020840151915060408401519050925092509256fe4af24be54adc5e716fbcaa3fca0ad593e28dff90dffd49487c0a33b1547c6b5245524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636500edc71549f0cbe47086c2237ce0cf874d6897fd1d7ce43ee6b65c0230d7606e45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220a45651408d5c4241893b3de81f96b113421ebf00bdb90bd0f44303589311359264736f6c634300080d0033
Deployed Bytecode Sourcemap
7734:24339:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18681:826;;;;;;;;;;-1:-1:-1;18681:826:0;;;;;:::i;:::-;;:::i;:::-;;8413:28;;;;;;;;;;-1:-1:-1;8413:28:0;;;;;;;;;;;800:14:1;;793:22;775:41;;763:2;748:18;8413:28:0;;;;;;;;20146:76;;;;;;;;;;-1:-1:-1;20212:5:0;;;;;;;;;;;;-1:-1:-1;;;20212:5:0;;;;20146:76;;;;;;;:::i;13145:146::-;;;;;;;;;;-1:-1:-1;13145:146:0;;;;;:::i;:::-;;:::i;14444:79::-;;;;;;;;;;;;;:::i;20685:80::-;;;;;;;;;;-1:-1:-1;20750:10:0;;20685:80;;;1895:25:1;;;1883:2;1868:18;20685:80:0;1749:177:1;7834:30:0;;;;;;;;;;-1:-1:-1;7834:30:0;;;;-1:-1:-1;;;;;7834:30:0;;;;;;-1:-1:-1;;;;;2110:32:1;;;2092:51;;2080:2;2065:18;7834:30:0;1931:218:1;20395:88:0;;;;;;;;;;-1:-1:-1;8298:26:0;20395:88;;8981:28;;;;;;;;;;-1:-1:-1;8981:28:0;;;;-1:-1:-1;;;;;8981:28:0;;;18417:261;;;;;;;;;;-1:-1:-1;18417:261:0;;;;;:::i;:::-;;:::i;13294:292::-;;;;;;;;;;-1:-1:-1;13294:292:0;;;;;:::i;:::-;;:::i;18159:255::-;;;;;;;;;;-1:-1:-1;18159:255:0;;;;;:::i;:::-;;:::i;21352:237::-;;;;;;;;;;-1:-1:-1;21352:237:0;;;;;:::i;:::-;;:::i;20308:84::-;;;;;;;;;;-1:-1:-1;20308:84:0;;8038:2;3150:36:1;;3138:2;3123:18;20308:84:0;3008:184:1;14526:122:0;;;;;;;;;;;;;:::i;13589:202::-;;;;;;;;;;-1:-1:-1;13589:202:0;;;;;:::i;:::-;;:::i;21592:478::-;;;;;;;;;;-1:-1:-1;21592:478:0;;;;;:::i;:::-;;:::i;7868:38::-;;;;;;;;;;;;;;;19817:311;;;;;;;;;;;;;:::i;20486:196::-;;;;;;;;;;-1:-1:-1;20486:196:0;;;;;:::i;:::-;;:::i;7366:133::-;;;;;;;;;;;;;:::i;8947:30::-;;;;;;;;;;-1:-1:-1;8947:30:0;;;;-1:-1:-1;;;;;8947:30:0;;;15445:318;;;;;;;;;;-1:-1:-1;15445:318:0;;;;;:::i;:::-;;:::i;16104:1170::-;;;;;;;;;;-1:-1:-1;16104:1170:0;;;;;:::i;:::-;;:::i;15766:335::-;;;;;;;;;;-1:-1:-1;15766:335:0;;;;;:::i;:::-;;:::i;8635:51::-;;;;;;;;;;;;;;;;7182:70;;;;;;;;;;-1:-1:-1;7220:7:0;7241:6;-1:-1:-1;;;;;7241:6:0;7182:70;;9013:24;;;;;;;;;;-1:-1:-1;9013:24:0;;;;-1:-1:-1;;;;;9013:24:0;;;20225:80;;;;;;;;;;-1:-1:-1;20293:7:0;;;;;;;;;;;;-1:-1:-1;;;20293:7:0;;;;20225:80;;17295:421;;;;;;;;;;-1:-1:-1;17295:421:0;;;;;:::i;:::-;;:::i;13794:253::-;;;;;;;;;;-1:-1:-1;13794:253:0;;;;;:::i;:::-;;:::i;12988:154::-;;;;;;;;;;-1:-1:-1;12988:154:0;;;;;:::i;:::-;;:::i;8534:54::-;;;;;;;;;;;;;;;;19510:304;;;;;;;;;;-1:-1:-1;19510:304:0;;;;;:::i;:::-;;:::i;17719:437::-;;;;;;;;;;-1:-1:-1;17719:437:0;;;;;:::i;:::-;;:::i;9716:58::-;;;;;;;;;;-1:-1:-1;9716:58:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;15158:281;;;;;;;;;;-1:-1:-1;15158:281:0;;;;;:::i;:::-;;:::i;20910:215::-;;;;;;;;;;-1:-1:-1;21006:23:0;;;;;;;21031;;;;;;-1:-1:-1;;;21056:17:0;;;;;-1:-1:-1;;;21075:21:0;;;;;-1:-1:-1;;;21098:21:0;;;;20910:215;;;;5277:4:1;5265:17;;;5247:36;;5319:17;;;5314:2;5299:18;;5292:45;5373:17;;;5353:18;;;5346:45;;;;5427:17;;5422:2;5407:18;;5400:45;5482:17;;;5476:3;5461:19;;5454:46;5234:3;5219:19;20910:215:0;5008:498:1;8766:64:0;;;;;;;;;;;;;;;;14953:202;;;;;;;;;;-1:-1:-1;14953:202:0;;;;;:::i;:::-;;:::i;8910:30::-;;;;;;;;;;-1:-1:-1;8910:30:0;;;;-1:-1:-1;;;;;8910:30:0;;;20768:136;;;;;;;;;;-1:-1:-1;20768:136:0;;;;;:::i;:::-;-1:-1:-1;;;;;20872:18:0;;;20851:7;20872:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;20768:136;7504:223;;;;;;;;;;-1:-1:-1;7504:223:0;;;;;:::i;:::-;;:::i;21128:221::-;;;;;;;;;;-1:-1:-1;21225:24:0;;;;;;;;;21251;;;;;;-1:-1:-1;;;21277:18:0;;;;;-1:-1:-1;;;21297:22:0;;;;;-1:-1:-1;;;21321:22:0;;;;21128:221;;18681:826;7291:6;;-1:-1:-1;;;;;7291:6:0;6648:10;7291:22;7283:67;;;;-1:-1:-1;;;7283:67:0;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;;;;18773:33:0;::::1;;::::0;;;:24:::1;:33;::::0;;;;;:45;::::1;;:33;::::0;;::::1;:45;;::::0;18765:108:::1;;;;-1:-1:-1::0;;;18765:108:0::1;;;;;;;:::i;:::-;18881:8;18878:570;;;-1:-1:-1::0;;;;;18900:16:0;::::1;18919:1;18900:16:::0;;;:7:::1;:16;::::0;;;;;:20;18897:95:::1;;-1:-1:-1::0;;;;;18968:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;18948:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;18929:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;18897:95:::1;-1:-1:-1::0;;;;;18997:33:0;::::1;;::::0;;;:24:::1;:33;::::0;;;;:44;;-1:-1:-1;;18997:44:0::1;::::0;::::1;;;::::0;;19047:22:::1;:36:::0;;-1:-1:-1;19047:36:0;::::1;::::0;;;;;::::1;::::0;;-1:-1:-1;;;;;;19047:36:0::1;::::0;;::::1;::::0;;18878:570:::1;;;19106:9;19101:342;19125:22;:29:::0;19121:33;::::1;19101:342;;;19201:7;-1:-1:-1::0;;;;;19172:36:0::1;:22;19195:1;19172:25;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;19172:25:0::1;:36:::0;19168:269:::1;;19246:22;19269:29:::0;;:33:::1;::::0;19301:1:::1;::::0;19269:33:::1;:::i;:::-;19246:57;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;19218:22:::1;:25:::0;;-1:-1:-1;;;;;19246:57:0;;::::1;::::0;19241:1;;19218:25;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:85:::0;;-1:-1:-1;;;;;;19218:85:0::1;-1:-1:-1::0;;;;;19218:85:0;;::::1;;::::0;;19311:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;19339:24:::1;:33:::0;;;;:41;;-1:-1:-1;;19339:41:0::1;::::0;;19388:22:::1;:28:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;19388:28:0;;;;;-1:-1:-1;;;;;;19388:28:0::1;::::0;;;;;19424:5:::1;;19168:269;19156:3:::0;::::1;::::0;::::1;:::i;:::-;;;;19101:342;;;;18878:570;19484:7;-1:-1:-1::0;;;;;19457:45:0::1;;19493:8;19457:45;;;;800:14:1::0;793:22;775:41;;763:2;748:18;;635:187;19457:45:0::1;;;;;;;;18681:826:::0;;:::o;13145:146::-;13220:4;13231:39;6648:10;13254:7;13263:6;13231:8;:39::i;:::-;-1:-1:-1;13282:4:0;13145:146;;;;;:::o;14444:79::-;7291:6;;-1:-1:-1;;;;;7291:6:0;6648:10;7291:22;7283:67;;;;-1:-1:-1;;;7283:67:0;;;;;;;:::i;:::-;14495:16:::1;:23:::0;;-1:-1:-1;;14495:23:0::1;14514:4;14495:23;::::0;;14444:79::o;18417:261::-;7291:6;;-1:-1:-1;;;;;7291:6:0;6648:10;7291:22;7283:67;;;;-1:-1:-1;;;7283:67:0;;;;;;;:::i;:::-;18512:11:::1;;18500:8;:23:::0;18492:83:::1;;;::::0;-1:-1:-1;;;18492:83:0;;7552:2:1;18492:83:0::1;::::0;::::1;7534:21:1::0;7591:2;7571:18;;;7564:30;7630:34;7610:18;;;7603:62;-1:-1:-1;;;7681:18:1;;;7674:45;7736:19;;18492:83:0::1;7350:411:1::0;18492:83:0::1;18628:11;::::0;18591:49:::1;::::0;18618:8;;18591:49:::1;::::0;;;::::1;18651:11;:22:::0;18417:261::o;13294:292::-;13393:4;13404:36;13414:6;13422:9;13433:6;13404:9;:36::i;:::-;13445:120;13454:6;6648:10;13476:88;13514:6;13476:88;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;13476:19:0;;;;;;:11;:19;;;;;;;;6648:10;13476:33;;;;;;;;;;:37;:88::i;:::-;13445:8;:120::i;:::-;-1:-1:-1;13577:4:0;13294:292;;;;;:::o;18159:255::-;7291:6;;-1:-1:-1;;;;;7291:6:0;6648:10;7291:22;7283:67;;;;-1:-1:-1;;;7283:67:0;;;;;;;:::i;:::-;18249:15:::1;;18237:8;:27:::0;18229:91:::1;;;::::0;-1:-1:-1;;;18229:91:0;;7968:2:1;18229:91:0::1;::::0;::::1;7950:21:1::0;8007:2;7987:18;;;7980:30;8046:34;8026:18;;;8019:62;-1:-1:-1;;;8097:18:1;;;8090:49;8156:19;;18229:91:0::1;7766:415:1::0;18229:91:0::1;18362:15;::::0;18330:48:::1;::::0;18352:8;;18330:48:::1;::::0;;;::::1;18383:15;:26:::0;18159:255::o;21352:237::-;21418:7;21451;;21440;:18;;21432:81;;;;-1:-1:-1;;;21432:81:0;;8388:2:1;21432:81:0;;;8370:21:1;8427:2;8407:18;;;8400:30;8466:34;8446:18;;;8439:62;-1:-1:-1;;;8517:18:1;;;8510:48;8575:19;;21432:81:0;8186:414:1;21432:81:0;21518:19;21541:10;:8;:10::i;:::-;21518:33;-1:-1:-1;21563:21:0;21518:33;21563:7;:21;:::i;:::-;21556:28;21352:237;-1:-1:-1;;;21352:237:0:o;14526:122::-;7291:6;;-1:-1:-1;;;;;7291:6:0;6648:10;7291:22;7283:67;;;;-1:-1:-1;;;7283:67:0;;;;;;;:::i;:::-;14579:16:::1;:24:::0;;-1:-1:-1;;14579:24:0::1;::::0;;14421:15;14608:23:::1;:35:::0;14526:122::o;13589:202::-;6648:10;13679:4;13719:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;13719:34:0;;;;;;;;;;13679:4;;13689:81;;13711:7;;13719:50;;13758:10;13719:38;:50::i;21592:478::-;21685:7;8298:26;21707:7;:18;;21699:70;;;;-1:-1:-1;;;21699:70:0;;9064:2:1;21699:70:0;;;9046:21:1;9103:2;9083:18;;;9076:30;9142:34;9122:18;;;9115:62;-1:-1:-1;;;9193:18:1;;;9186:37;9240:19;;21699:70:0;8862:403:1;21699:70:0;21774:19;21796:10;:8;:10::i;:::-;21774:32;-1:-1:-1;21811:15:0;21830:21;21774:32;21830:7;:21;:::i;:::-;21811:40;;21861:17;21856:210;;21893:7;-1:-1:-1;21886:14:0;;-1:-1:-1;21886:14:0;21856:210;21952:9;;21921:17;;21970:11;;21964:3;;21942:19;;-1:-1:-1;;;21952:9:0;;;;21942:7;:19;:::i;:::-;:25;;;;:::i;:::-;:39;;;;:::i;:::-;21921:60;-1:-1:-1;21987:23:0;22013:19;21921:60;22013:7;:19;:::i;:::-;21987:45;-1:-1:-1;22038:22:0;;-1:-1:-1;;;;22038:22:0;19817:311;7291:6;;-1:-1:-1;;;;;7291:6:0;6648:10;7291:22;7283:67;;;;-1:-1:-1;;;7283:67:0;;;;;;;:::i;:::-;19901:1:::1;19877:21;:25;19869:84;;;::::0;-1:-1:-1;;;19869:84:0;;9645:2:1;19869:84:0::1;::::0;::::1;9627:21:1::0;9684:2;9664:18;;;9657:30;9723:34;9703:18;;;9696:62;-1:-1:-1;;;9774:18:1;;;9767:44;9828:19;;19869:84:0::1;9443:410:1::0;19869:84:0::1;19981:21;19964:14;20033:7;7220::::0;7241:6;-1:-1:-1;;;;;7241:6:0;;7182:70;20033:7:::1;-1:-1:-1::0;;;;;20025:21:0::1;20055:6;20025:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20007:59;;;20075:7;20071:53;;;20094:24;::::0;1895:25:1;;;20094:24:0::1;::::0;1883:2:1;1868:18;20094:24:0::1;;;;;;;;20071:53;19864:264;;19817:311::o:0;20486:196::-;-1:-1:-1;;;;;20570:33:0;;20552:7;20570:33;;;:24;:33;;;;;;;;20566:62;;;-1:-1:-1;;;;;;20612:16:0;;;;;:7;:16;;;;;;;20486:196::o;20566:62::-;-1:-1:-1;;;;;20660:16:0;;;;;;:7;:16;;;;;;20640:37;;:19;:37::i;7366:133::-;7291:6;;-1:-1:-1;;;;;7291:6:0;6648:10;7291:22;7283:67;;;;-1:-1:-1;;;7283:67:0;;;;;;;:::i;:::-;7467:1:::1;7451:6:::0;;7430:40:::1;::::0;-1:-1:-1;;;;;7451:6:0;;::::1;::::0;7430:40:::1;::::0;7467:1;;7430:40:::1;7492:1;7475:19:::0;;-1:-1:-1;;;;;;7475:19:0::1;::::0;;7366:133::o;15445:318::-;7291:6;;-1:-1:-1;;;;;7291:6:0;6648:10;7291:22;7283:67;;;;-1:-1:-1;;;7283:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;15544:38:0;::::1;;::::0;;;:29:::1;:38;::::0;;;;;:50;::::1;;:38;::::0;;::::1;:50;;::::0;15536:113:::1;;;;-1:-1:-1::0;;;15536:113:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;15654:38:0;::::1;;::::0;;;:29:::1;:38;::::0;;;;;;;;:49;;-1:-1:-1;;15654:49:0::1;::::0;::::1;;::::0;;::::1;::::0;;;15713:45;;775:41:1;;;15713:45:0::1;::::0;748:18:1;15713:45:0::1;635:187:1::0;16104:1170:0;7291:6;;-1:-1:-1;;;;;7291:6:0;6648:10;7291:22;7283:67;;;;-1:-1:-1;;;7283:67:0;;;;;;;:::i;:::-;16255:15:::1;::::0;-1:-1:-1;;;;;16255:37:0;;::::1;:15:::0;::::1;:37;16252:268;;-1:-1:-1::0;;;;;16317:32:0;::::1;16309:84;;;::::0;-1:-1:-1;;;16309:84:0;;10270:2:1;16309:84:0::1;::::0;::::1;10252:21:1::0;10309:2;10289:18;;;10282:30;10348:34;10328:18;;;10321:62;-1:-1:-1;;;10399:18:1;;;10392:37;10446:19;;16309:84:0::1;10068:403:1::0;16309:84:0::1;16456:15;::::0;16404:68:::1;::::0;-1:-1:-1;;;10678:30:1;;-1:-1:-1;;;;;16456:15:0;;::::1;::::0;16404:68;::::1;::::0;10733:2:1;10724:12;16404:68:0::1;::::0;;;;::::1;::::0;;;-1:-1:-1;;;;;;;;;;;16404:68:0;;;::::1;16478:15;:36:::0;;-1:-1:-1;;;;;;16478:36:0::1;-1:-1:-1::0;;;;;16478:36:0;::::1;;::::0;;16252:268:::1;16533:15;::::0;-1:-1:-1;;;;;16533:37:0;;::::1;:15:::0;::::1;:37;16530:268;;-1:-1:-1::0;;;;;16595:32:0;::::1;16587:84;;;::::0;-1:-1:-1;;;16587:84:0;;10949:2:1;16587:84:0::1;::::0;::::1;10931:21:1::0;10988:2;10968:18;;;10961:30;11027:34;11007:18;;;11000:62;-1:-1:-1;;;11078:18:1;;;11071:37;11125:19;;16587:84:0::1;10747:403:1::0;16587:84:0::1;16734:15;::::0;;16682:68:::1;::::0;-1:-1:-1;;;11357:30:1;;-1:-1:-1;;;;;16734:15:0;;::::1;::::0;16682:68;;::::1;::::0;11403:12:1;16682:68:0::1;::::0;;;;::::1;::::0;;;-1:-1:-1;;;;;;;;;;;16682:68:0;;;::::1;16756:15;:36:::0;;-1:-1:-1;;;;;;16756:36:0::1;-1:-1:-1::0;;;;;16756:36:0;::::1;;::::0;;16530:268:::1;16805:9;::::0;-1:-1:-1;;;;;16805:25:0;;::::1;:9:::0;::::1;:25;16802:214;;-1:-1:-1::0;;;;;16855:26:0;::::1;16847:72;;;::::0;-1:-1:-1;;;16847:72:0;;11628:2:1;16847:72:0::1;::::0;::::1;11610:21:1::0;11667:2;11647:18;;;11640:30;11706:34;11686:18;;;11679:62;-1:-1:-1;;;11757:18:1;;;11750:31;11798:19;;16847:72:0::1;11426:397:1::0;16847:72:0::1;16970:9;::::0;16930:50:::1;::::0;-1:-1:-1;;;12030:24:1;;-1:-1:-1;;;;;16970:9:0;;::::1;::::0;16930:50;::::1;::::0;12079:1:1;12070:11;16930:50:0::1;::::0;;;;::::1;::::0;;;-1:-1:-1;;;;;;;;;;;16930:50:0;;;::::1;16986:9;:24:::0;;-1:-1:-1;;;;;;16986:24:0::1;-1:-1:-1::0;;;;;16986:24:0;::::1;;::::0;;16802:214:::1;17023:13;::::0;-1:-1:-1;;;;;17023:33:0;;::::1;:13:::0;::::1;:33;17020:250;;-1:-1:-1::0;;;;;17081:30:0;::::1;17073:80;;;::::0;-1:-1:-1;;;17073:80:0;;12294:2:1;17073:80:0::1;::::0;::::1;12276:21:1::0;12333:2;12313:18;;;12306:30;12372:34;12352:18;;;12345:62;-1:-1:-1;;;12423:18:1;;;12416:35;12468:19;;17073:80:0::1;12092:401:1::0;17073:80:0::1;17212:13;::::0;17164:62:::1;::::0;-1:-1:-1;;;12700:28:1;;-1:-1:-1;;;;;17212:13:0;;::::1;::::0;17164:62;::::1;::::0;12753:2:1;12744:12;17164:62:0::1;::::0;;;;::::1;::::0;;;-1:-1:-1;;;;;;;;;;;17164:62:0;;;::::1;17232:13;:32:::0;;-1:-1:-1;;;;;;17232:32:0::1;-1:-1:-1::0;;;;;17232:32:0;::::1;;::::0;;17020:250:::1;16104:1170:::0;;;;:::o;15766:335::-;7291:6;;-1:-1:-1;;;;;7291:6:0;6648:10;7291:22;7283:67;;;;-1:-1:-1;;;7283:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;15870:43:0;::::1;;::::0;;;:34:::1;:43;::::0;;;;;:55;::::1;;:43;::::0;;::::1;:55;;::::0;15862:118:::1;;;;-1:-1:-1::0;;;15862:118:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;15985:43:0;::::1;;::::0;;;:34:::1;:43;::::0;;;;;;;;:54;;-1:-1:-1;;15985:54:0::1;::::0;::::1;;::::0;;::::1;::::0;;;16049:47;;775:41:1;;;16049:47:0::1;::::0;748:18:1;16049:47:0::1;635:187:1::0;17295:421:0;7291:6;;-1:-1:-1;;;;;7291:6:0;6648:10;7291:22;7283:67;;;;-1:-1:-1;;;7283:67:0;;;;;;;:::i;:::-;17467:119:::1;17490:5;17497:18;17517;17537:12;17551:16;17569;17467:22;:119::i;:::-;17596:115;::::0;-1:-1:-1;;;12969:27:1;;13021:2;13012:12;17596:115:0::1;;::::0;;;;;::::1;::::0;;5277:4:1;5265:17;;;5247:36;;5319:17;;;5314:2;5299:18;;5292:45;5373:17;;;5353:18;;;5346:45;5427:17;;;5422:2;5407:18;;5400:45;5482:17;;5476:3;5461:19;;5454:46;17596:115:0;;;;::::1;::::0;;;;;5234:3:1;17596:115:0;;::::1;17295:421:::0;;;;;:::o;13794:253::-;13889:4;13900:126;6648:10;13922:7;13930:95;13969:15;13930:95;;;;;;;;;;;;;;;;;6648:10;13930:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;13930:34:0;;;;;;;;;;;;:38;:95::i;12988:154::-;13068:4;13079:42;6648:10;13103:9;13114:6;13079:9;:42::i;19510:304::-;7291:6;;-1:-1:-1;;;;;7291:6:0;6648:10;7291:22;7283:67;;;;-1:-1:-1;;;7283:67:0;;;;;;;:::i;:::-;19608:23:::1;;19596:8;:35:::0;19588:107:::1;;;::::0;-1:-1:-1;;;19588:107:0;;13237:2:1;19588:107:0::1;::::0;::::1;13219:21:1::0;13276:2;13256:18;;;13249:30;13315:34;13295:18;;;13288:62;13386:29;13366:18;;;13359:57;13433:19;;19588:107:0::1;13035:423:1::0;19588:107:0::1;19746:23;::::0;19705:65:::1;::::0;19736:8;;19705:65:::1;::::0;;;::::1;19775:23;:34:::0;19510:304::o;17719:437::-;7291:6;;-1:-1:-1;;;;;7291:6:0;6648:10;7291:22;7283:67;;;;-1:-1:-1;;;7283:67:0;;;;;;;:::i;:::-;17895:125:::1;17919:5;17926:19;17947;17968:13;17983:17;18002;17895:23;:125::i;:::-;18030:121;::::0;-1:-1:-1;;;13665:28:1;;13718:2;13709:12;18030:121:0::1;13463:264:1::0;15158:281:0;7291:6;;-1:-1:-1;;;;;7291:6:0;6648:10;7291:22;7283:67;;;;-1:-1:-1;;;7283:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;15247:27:0;::::1;;::::0;;;:18:::1;:27;::::0;;;;;:39;::::1;;:27;::::0;;::::1;:39;;::::0;15239:102:::1;;;;-1:-1:-1::0;;;15239:102:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;15346:27:0;::::1;;::::0;;;:18:::1;:27;::::0;;;;;;;;:38;;-1:-1:-1;;15346:38:0::1;::::0;::::1;;::::0;;::::1;::::0;;;15394:40;;775:41:1;;;15394:40:0::1;::::0;748:18:1;15394:40:0::1;635:187:1::0;14953:202:0;7291:6;;-1:-1:-1;;;;;7291:6:0;6648:10;7291:22;7283:67;;;;-1:-1:-1;;;7283:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;15042:38:0;::::1;;::::0;;;:29:::1;:38;::::0;;;;;;;;:48;;-1:-1:-1;;15042:48:0::1;::::0;::::1;;::::0;;::::1;::::0;;;15100:50;;775:41:1;;;15100:50:0::1;::::0;748:18:1;15100:50:0::1;635:187:1::0;7504:223:0;7291:6;;-1:-1:-1;;;;;7291:6:0;6648:10;7291:22;7283:67;;;;-1:-1:-1;;;7283:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;7587:22:0;::::1;7579:73;;;::::0;-1:-1:-1;;;7579:73:0;;13934:2:1;7579:73:0::1;::::0;::::1;13916:21:1::0;13973:2;13953:18;;;13946:30;14012:34;13992:18;;;13985:62;-1:-1:-1;;;14063:18:1;;;14056:36;14109:19;;7579:73:0::1;13732:402:1::0;7579:73:0::1;7683:6;::::0;;7662:38:::1;::::0;-1:-1:-1;;;;;7662:38:0;;::::1;::::0;7683:6;::::1;::::0;7662:38:::1;::::0;::::1;7705:6;:17:::0;;-1:-1:-1;;;;;;7705:17:0::1;-1:-1:-1::0;;;;;7705:17:0;;;::::1;::::0;;;::::1;::::0;;7504:223::o;2663:123::-;2721:7;2742:39;2746:1;2749;2742:39;;;;;;;;;;;;;;;;;:3;:39::i;14050:306::-;-1:-1:-1;;;;;14135:19:0;;14127:68;;;;-1:-1:-1;;;14127:68:0;;14341:2:1;14127:68:0;;;14323:21:1;14380:2;14360:18;;;14353:30;14419:34;14399:18;;;14392:62;-1:-1:-1;;;14470:18:1;;;14463:34;14514:19;;14127:68:0;14139:400:1;14127:68:0;-1:-1:-1;;;;;14208:21:0;;14200:68;;;;-1:-1:-1;;;14200:68:0;;14746:2:1;14200:68:0;;;14728:21:1;14785:2;14765:18;;;14758:30;14824:34;14804:18;;;14797:62;-1:-1:-1;;;14875:18:1;;;14868:32;14917:19;;14200:68:0;14544:398:1;14200:68:0;-1:-1:-1;;;;;14273:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;14319:32;;1895:25:1;;;14319:32:0;;1868:18:1;14319:32:0;;;;;;;14050:306;;;:::o;22085:1550::-;-1:-1:-1;;;;;22178:18:0;;22170:68;;;;-1:-1:-1;;;22170:68:0;;15149:2:1;22170:68:0;;;15131:21:1;15188:2;15168:18;;;15161:30;15227:34;15207:18;;;15200:62;-1:-1:-1;;;15278:18:1;;;15271:35;15323:19;;22170:68:0;14947:401:1;22170:68:0;-1:-1:-1;;;;;22251:16:0;;22243:64;;;;-1:-1:-1;;;22243:64:0;;15555:2:1;22243:64:0;;;15537:21:1;15594:2;15574:18;;;15567:30;15633:34;15613:18;;;15606:62;-1:-1:-1;;;15684:18:1;;;15677:33;15727:19;;22243:64:0;15353:399:1;22243:64:0;22329:1;22320:6;:10;22312:64;;;;-1:-1:-1;;;22312:64:0;;15959:2:1;22312:64:0;;;15941:21:1;15998:2;15978:18;;;15971:30;16037:34;16017:18;;;16010:62;-1:-1:-1;;;16088:18:1;;;16081:39;16137:19;;22312:64:0;15757:405:1;22312:64:0;22399:15;22409:4;22399:9;:15::i;:::-;22389:6;:25;;22381:79;;;;-1:-1:-1;;;22381:79:0;;16369:2:1;22381:79:0;;;16351:21:1;16408:2;16388:18;;;16381:30;16447:34;16427:18;;;16420:62;-1:-1:-1;;;16498:18:1;;;16491:39;16547:19;;22381:79:0;16167:405:1;22381:79:0;-1:-1:-1;;;;;22486:31:0;;;22467:16;22486:31;;;:25;:31;;;;;;;;;22540:29;;;;;;;;;22580:35;;;:29;:35;;;;;;22486:31;;;;;22540:29;;;;22580:35;22579:36;:74;;;;-1:-1:-1;;;;;;22620:33:0;;;;;;:29;:33;;;;;;;;22619:34;22579:74;22576:553;;;22669:16;;;;22661:67;;;;-1:-1:-1;;;22661:67:0;;16779:2:1;22661:67:0;;;16761:21:1;16818:2;16798:18;;;16791:30;16857:34;16837:18;;;16830:62;-1:-1:-1;;;16908:18:1;;;16901:36;16954:19;;22661:67:0;16577:402:1;22661:67:0;-1:-1:-1;;;;;22748:38:0;;;;;;:34;:38;;;;;;;;22747:39;:84;;;;-1:-1:-1;;;;;;22791:40:0;;;;;;:34;:40;;;;;;;;22790:41;22747:84;22743:207;;;22870:11;;22860:6;:21;;22852:82;;;;-1:-1:-1;;;22852:82:0;;17186:2:1;22852:82:0;;;17168:21:1;17225:2;17205:18;;;17198:30;17264:34;17244:18;;;17237:62;-1:-1:-1;;;17315:18:1;;;17308:46;17371:19;;22852:82:0;16984:412:1;22852:82:0;-1:-1:-1;;;;;22960:33:0;;;;;;:29;:33;;;;;;;;22955:169;;23038:15;;23027:6;23011:13;23021:2;23011:9;:13::i;:::-;:22;;;;:::i;:::-;23010:43;;23002:115;;;;-1:-1:-1;;;23002:115:0;;17736:2:1;23002:115:0;;;17718:21:1;17775:2;17755:18;;;17748:30;17814:34;17794:18;;;17787:62;17885:29;17865:18;;;17858:57;17932:19;;23002:115:0;17534:423:1;23002:115:0;23135:37;23148:11;23161:10;23135:12;:37::i;:::-;23177:12;23220:23;;23192:24;23210:4;23192:9;:24::i;:::-;23259:16;;23192:51;-1:-1:-1;23192:51:0;;-1:-1:-1;23259:16:0;;:31;;;;;23283:7;23259:31;:49;;;;-1:-1:-1;23299:9:0;;;;23298:10;23259:49;:70;;;;-1:-1:-1;23316:9:0;;-1:-1:-1;;;23316:9:0;;;;:13;;23259:70;:107;;;;-1:-1:-1;;;;;;23337:29:0;;;;;;:25;:29;;;;;;;;23259:107;23250:196;;;23378:9;:16;;-1:-1:-1;;23378:16:0;23390:4;23378:16;;;23400:17;:15;:17::i;:::-;23423:9;:17;;-1:-1:-1;;23423:17:0;;;23250:196;23468:9;;23452:12;;23468:9;;23467:10;:30;;;;-1:-1:-1;23481:16:0;;;;23467:30;-1:-1:-1;;;;;23507:24:0;;;;;;:18;:24;;;;;;23452:45;;-1:-1:-1;23507:24:0;;;:50;;-1:-1:-1;;;;;;23535:22:0;;;;;;:18;:22;;;;;;;;23507:50;23504:81;;;-1:-1:-1;23574:5:0;23504:81;23589:41;23604:4;23610:2;23614:6;23622:7;23589:14;:41::i;:::-;22165:1470;;;;22085:1550;;;:::o;2071:171::-;2157:7;2187:12;2179:6;;;;2171:29;;;;-1:-1:-1;;;2171:29:0;;;;;;;;:::i;:::-;-1:-1:-1;2205:9:0;2217:5;2221:1;2217;:5;:::i;:::-;2205:17;2071:171;-1:-1:-1;;;;;2071:171:0:o;25332:149::-;25374:7;25389:15;25406;25425:19;:17;:19::i;:::-;25388:56;;-1:-1:-1;25388:56:0;-1:-1:-1;25456:20:0;25388:56;;25456:11;:20::i;:::-;25449:27;;;;25332:149;:::o;1774:160::-;1832:7;;1858:5;1862:1;1858;:5;:::i;:::-;1846:17;;1881:1;1876;:6;;1868:46;;;;-1:-1:-1;;;1868:46:0;;18164:2:1;1868:46:0;;;18146:21:1;18203:2;18183:18;;;18176:30;18242:29;18222:18;;;18215:57;18289:18;;1868:46:0;17962:351:1;28371:1249:0;28593:21;;;;:43;;;;:21;;:43;28589:215;;28649:101;;-1:-1:-1;;;18520:32:1;;18577:2;18568:12;28649:101:0;;;;;;;;28691:21;;;;28735:14;;28649:101;;28691:21;;;;;28649:101;;;;-1:-1:-1;;;;;;;;;;;28649:101:0;;;28735:14;;;28649:101;:::i;:::-;;;;;;;;28756:21;;;:42;;-1:-1:-1;;28756:42:0;;;;;;;28589:215;28812:21;;;;:43;;;;:21;;;;;:43;28808:215;;28868:101;;-1:-1:-1;;;19007:32:1;;19064:2;19055:12;28868:101:0;;;;;;;;28910:21;;;;28954:14;;28868:101;;28910:21;;;;;;;;28868:101;;;;-1:-1:-1;;;;;;;;;;;28868:101:0;;;28954:14;;;28868:101;:::i;:::-;;;;;;;;28975:21;;;:42;;-1:-1:-1;;28975:42:0;;;;;;;;;28808:215;29037:15;;;;:31;;;;-1:-1:-1;;;29037:15:0;;;;:31;29033:173;;29081:83;;-1:-1:-1;;;19280:26:1;;19331:2;19322:12;29081:83:0;;;;;;;;29117:15;;;;29149:14;;29081:83;;29117:15;-1:-1:-1;;;29117:15:0;;;;;;29081:83;;;;-1:-1:-1;;;;;;;;;;;29081:83:0;;;29149:14;;;29081:83;:::i;:::-;;;;;;;;29170:15;;;:30;;-1:-1:-1;;29170:30:0;-1:-1:-1;;;29170:30:0;;;;;;;29033:173;29214:19;;;;:39;;;;-1:-1:-1;;;29214:19:0;;;;:39;29210:201;;29266:95;;-1:-1:-1;;;19547:30:1;;19602:2;19593:12;29266:95:0;;;;;;;;29306:19;;;;29346:14;;29266:95;;29306:19;-1:-1:-1;;;29306:19:0;;;;;;29266:95;;;;-1:-1:-1;;;;;;;;;;;29266:95:0;;;29346:14;;;29266:95;:::i;:::-;;;;;;;;29367:19;;;:38;;-1:-1:-1;;29367:38:0;-1:-1:-1;;;29367:38:0;;;;;;;29210:201;29419:19;;;;:39;;;;-1:-1:-1;;;29419:19:0;;;;:39;29415:201;;29471:95;;-1:-1:-1;;;19818:30:1;;19873:2;19864:12;29471:95:0;;;;;;;;29511:19;;;;29551:14;;29471:95;;29511:19;-1:-1:-1;;;29511:19:0;;;;;;29471:95;;;;-1:-1:-1;;;;;;;;;;;29471:95:0;;;29551:14;;;29471:95;:::i;:::-;;;;;;;;29572:19;;;:38;;-1:-1:-1;;29572:38:0;-1:-1:-1;;;29572:38:0;;;;;;;29415:201;28371:1249;;;;;;:::o;27078:1290::-;27306:22;;;;:45;;;;:22;;;;;:45;27302:222;;27364:104;;-1:-1:-1;;;20089:33:1;;20147:2;20138:12;27364:104:0;;;;;;;;27407:22;;;;27453:14;;27364:104;;27407:22;;;;;;;;27364:104;;;;-1:-1:-1;;;;;;;;;;;27364:104:0;;;27453:14;;;27364:104;:::i;:::-;;;;;;;;27474:22;;;:44;;-1:-1:-1;;27474:44:0;;;;;;;;;27302:222;27532:22;;;;:45;;;;:22;;;;;:45;27528:222;;27590:104;;-1:-1:-1;;;20363:33:1;;20421:2;20412:12;27590:104:0;;;;;;;;27633:22;;;;27679:14;;27590:104;;27633:22;;;;;;;;27590:104;;;;-1:-1:-1;;;;;;;;;;;27590:104:0;;;27679:14;;;27590:104;:::i;:::-;;;;;;;;27700:22;;;:44;;-1:-1:-1;;27700:44:0;;;;;;;;;27528:222;27764:16;;;;:33;;;;-1:-1:-1;;;27764:16:0;;;;:33;27760:180;;27810:86;;-1:-1:-1;;;20637:27:1;;20689:2;20680:12;27810:86:0;;;;;;;;27847:16;;;;27881:14;;27810:86;;27847:16;-1:-1:-1;;;27847:16:0;;;;;;27810:86;;;;-1:-1:-1;;;;;;;;;;;27810:86:0;;;27881:14;;;27810:86;:::i;:::-;;;;;;;;27902:16;;;:32;;-1:-1:-1;;27902:32:0;-1:-1:-1;;;27902:32:0;;;;;;;27760:180;27948:20;;;;:41;;;;-1:-1:-1;;;27948:20:0;;;;:41;27944:208;;28002:98;;-1:-1:-1;;;20905:31:1;;20961:2;20952:12;28002:98:0;;;;;;;;28043:20;;;;28085:14;;28002:98;;28043:20;-1:-1:-1;;;28043:20:0;;;;;;28002:98;;;;-1:-1:-1;;;;;;;;;;;28002:98:0;;;28085:14;;;28002:98;:::i;:::-;;;;;;;;28106:20;;;:40;;-1:-1:-1;;28106:40:0;-1:-1:-1;;;28106:40:0;;;;;;;27944:208;28160:20;;;;:41;;;;-1:-1:-1;;;28160:20:0;;;;:41;28156:208;;28214:98;;-1:-1:-1;;;21177:31:1;;21233:2;21224:12;28214:98:0;;;;;;;;28255:20;;;;28297:14;;28214:98;;28255:20;-1:-1:-1;;;28255:20:0;;;;;;28214:98;;;;-1:-1:-1;;;;;;;;;;;28214:98:0;;;28297:14;;;28214:98;:::i;:::-;;;;;;;;28318:20;;;:40;;;;;-1:-1:-1;;;28318:40:0;-1:-1:-1;;28318:40:0;;;;;;27078:1290;;;;;;:::o;2791:251::-;2877:7;2906:12;2899:5;2891:28;;;;-1:-1:-1;;;2891:28:0;;;;;;;;:::i;:::-;-1:-1:-1;2924:9:0;2936:5;2940:1;2936;:5;:::i;26254:821::-;26324:13;:17;;-1:-1:-1;;26404:15:0;;;26426:228;;;;26465:23;;26449:13;:39;;26465:23;;;;-1:-1:-1;;26494:27:0;;;;;;;-1:-1:-1;;;26504:17:0;;;;;26494:27;;;;;;;;-1:-1:-1;;26572:35:0;26465:23;26543;;;;;26527:39;;;;-1:-1:-1;;26572:35:0;;;;;-1:-1:-1;;;26586:21:0;;;;26572:35;;;-1:-1:-1;;26613:35:0;-1:-1:-1;;;26627:21:0;;;;;;;26613:35;;;;;;;26426:228;26662:10;26658:232;;;26696:24;;26680:13;:40;;26696:24;;;;;;;;-1:-1:-1;;26726:28:0;;;;;;;-1:-1:-1;;;26736:18:0;;;;26726:28;;;-1:-1:-1;;26806:36:0;26776:24;;;;;;26760:40;;;;-1:-1:-1;;26806:36:0;;-1:-1:-1;;;26820:22:0;;;;26806:36;;;;;-1:-1:-1;;26848:36:0;-1:-1:-1;;;26862:22:0;;;;-1:-1:-1;;;26848:36:0;;;;;;;26658:232;26962:11;;;-1:-1:-1;;;26962:11:0;;;;;26948;;;;;;26938:7;;;;;;26906:29;;26962:11;26922:13;;;;;26906;:29;:::i;:::-;:39;;;;:::i;:::-;:53;;;;:::i;:::-;:67;;;;:::i;:::-;26894:9;:79;;-1:-1:-1;;26894:79:0;;-1:-1:-1;;;26894:79:0;;;;;;;;;;;;;26983:87;;;26995:13;;;;;;;;;;21742:34:1;;26894:79:0;27010:13;;;;21807:2:1;21792:18;;21785:43;27025:7:0;;;;;21844:18:1;;;21837:43;;;;27034:11:0;;;;;21911:2:1;21896:18;;21889:43;-1:-1:-1;;;27047:11:0;;;;21963:3:1;21948:19;;21941:44;27060:9:0;;;;;;22016:3:1;22001:19;;21994:44;26983:87:0;;21706:3:1;21691:19;26983:87:0;21456:588:1;29623:1685:0;29663:23;29689:24;29707:4;29689:9;:24::i;:::-;29796:9;;29663:50;;-1:-1:-1;29746:21:0;;29796:9;-1:-1:-1;;;29796:9:0;;;;;29842:13;;;;29796:9;29892:13;;;;;29936:7;;;;;;29979:11;;;;;;-1:-1:-1;;;30019:11:0;;;29718:25;29936:7;29796:9;30063:31;29842:13;29663:50;30063:31;:::i;:::-;:43;;;;:::i;:::-;:47;;;;:::i;:::-;30037:73;-1:-1:-1;30115:26:0;30144:33;30037:73;30144:15;:33;:::i;:::-;30115:62;;30184:37;30202:18;30184:17;:37::i;:::-;30228:27;30258:41;30282:17;30258:21;:41;:::i;:::-;30228:71;-1:-1:-1;30304:19:0;30369:15;30343:21;30363:1;30343:17;:21;:::i;:::-;30326:39;;:13;:39;:::i;:::-;:59;;;;:::i;:::-;30304:81;;;;30390:26;30475:1;30461:11;30441:17;30419:39;;:19;:39;;;;:::i;:::-;:53;;;;:::i;:::-;:57;;;;:::i;:::-;30390:86;-1:-1:-1;30481:20:0;30540:11;30504:33;;;;:19;:33;:::i;:::-;:47;;;;:::i;:::-;30481:70;-1:-1:-1;30556:24:0;30623:11;30583:37;;;;:19;:37;:::i;:::-;:51;;;;:::i;:::-;30556:78;-1:-1:-1;30639:26:0;30556:78;30691:33;30712:12;30691:18;:33;:::i;:::-;:52;;;;:::i;:::-;30668:76;;:19;:76;:::i;:::-;30759:15;;30751:53;;30639:105;;-1:-1:-1;;;;;;30759:15:0;;30751:53;;;;;30639:105;;30759:15;30751:53;30759:15;30751:53;30639:105;30759:15;30751:53;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30817:9:0;;30809:41;;-1:-1:-1;;;;;30817:9:0;;;;30809:41;;;;;30837:12;;30817:9;30809:41;30817:9;30809:41;30837:12;30817:9;30809:41;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30863:13:0;;30855:49;;-1:-1:-1;;;;;30863:13:0;;;;30855:49;;;;;30887:16;;30863:13;30855:49;30863:13;30855:49;30887:16;30863:13;30855:49;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30915:19:0;;30911:169;;30942:50;30956:15;30973:18;30942:13;:50::i;:::-;31003:71;;;22621:25:1;;;22677:2;22662:18;;22655:34;;;22705:18;;;22698:34;;;31003:71:0;;22609:2:1;22594:18;31003:71:0;;;;;;;30911:169;31096:13;31084:9;;:25;;;;;;;;;;;;;;;;;;31136:17;31120:13;;:33;;;;;;;;;;;;;;;;;;31180:17;31164:13;;:33;;;;;;;;;;;;;;;;;;31218:11;31208:7;;:21;;;;;;;;;;;;;;;;;;31254:15;31240:11;;:29;;;;;;;;;;;;;;;;;;31288:15;31274:11;;:29;;;;;;;;;;;;;;;;;;29658:1650;;;;;;;;;;;;;;;;29623:1685::o;23638:762::-;23741:23;23765:12;23779:14;23797:29;23809:7;23818;23797:11;:29::i;:::-;23740:86;;;;;;23832:15;23849:23;23874:12;23888:14;23906:46;23918:7;23927:4;23933:6;23941:10;:8;:10::i;:::-;23906:11;:46::i;:::-;-1:-1:-1;;;;;23963:32:0;;;;;;:24;:32;;;;;;23831:121;;-1:-1:-1;23831:121:0;;-1:-1:-1;23831:121:0;-1:-1:-1;23831:121:0;-1:-1:-1;23963:32:0;;23959:93;;;-1:-1:-1;;;;;24021:15:0;;;;;;:7;:15;;;;;;:25;;24039:7;;24021:25;:::i;:::-;-1:-1:-1;;;;;24003:15:0;;;;;;:7;:15;;;;;:43;23959:93;-1:-1:-1;;;;;24060:35:0;;;;;;:24;:35;;;;;;;;24056:110;;;-1:-1:-1;;;;;24124:18:0;;;;;;:7;:18;;;;;;:36;;24145:15;;24124:36;:::i;:::-;-1:-1:-1;;;;;24103:18:0;;;;;;:7;:18;;;;;:57;24056:110;-1:-1:-1;;;;;24188:15:0;;;;;;:7;:15;;;;;;:25;;24206:7;;24188:25;:::i;:::-;-1:-1:-1;;;;;24170:15:0;;;;;;;:7;:15;;;;;;:43;;;;24239:18;;;;;;;:36;;24260:15;;24239:36;:::i;:::-;-1:-1:-1;;;;;24218:18:0;;;;;;:7;:18;;;;;:57;24280:33;24298:6;24306;24280:17;:33::i;:::-;24318:23;24330:4;24336;24318:11;:23::i;:::-;24368:9;-1:-1:-1;;;;;24351:44:0;24360:6;-1:-1:-1;;;;;24351:44:0;;24379:15;24351:44;;;;1895:25:1;;1883:2;1868:18;;1749:177;24351:44:0;;;;;;;;23735:665;;;;;;;23638:762;;;;:::o;25484:562::-;25576:7;;25535;;;;8298:26;25535:7;25618:331;25642:22;:29;25638:33;;25618:331;;;25731:7;25694;:34;25702:22;25725:1;25702:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;25702:25:0;25694:34;;;;;;;;;;;;;:44;;:97;;;25784:7;25747;:34;25755:22;25778:1;25755:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;25755:25:0;25747:34;;;;;;;;;;;;;:44;25694:97;25684:139;;;-1:-1:-1;;25806:7:0;;;8298:26;;-1:-1:-1;25484:562:0;-1:-1:-1;;25484:562:0:o;25684:139::-;25849:7;:34;25857:22;25880:1;25857:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;25857:25:0;25849:34;;;;;;;;;;;;;25839:44;;:7;:44;:::i;:::-;25829:54;;25909:7;:34;25917:22;25940:1;25917:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;25917:25:0;25909:34;;;;;;;;;;;;;25899:44;;:7;:44;:::i;:::-;25889:54;-1:-1:-1;25673:3:0;;;;:::i;:::-;;;;25618:331;;;;8298:26;25967:7;;:17;;;;:::i;:::-;25957:7;:27;25953:58;;;-1:-1:-1;;25994:7:0;;;8298:26;;-1:-1:-1;25484:562:0;-1:-1:-1;25484:562:0:o;25953:58::-;26024:7;;26033;;-1:-1:-1;25484:562:0;-1:-1:-1;25484:562:0:o;31311:411::-;31396:16;;;31410:1;31396:16;;;;;;;;31372:21;;31396:16;;;;;;;;;;-1:-1:-1;31396:16:0;31372:40;;31435:4;31417;31422:1;31417:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;31417:23:0;;;:7;;;;;;;;;;:23;;;;31455:15;;:22;;;-1:-1:-1;;;31455:22:0;;;;:15;;;;;:20;;:22;;;;;31417:7;;31455:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31445:4;31450:1;31445:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;31445:32:0;;;:7;;;;;;;;;:32;31514:15;;31482:62;;31499:4;;31514:15;31532:11;31482:8;:62::i;:::-;31549:15;;:168;;-1:-1:-1;;;31549:168:0;;-1:-1:-1;;;;;31549:15:0;;;;:66;;:168;;31620:11;;31549:15;;31670:4;;31687;;31697:15;;31549:168;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31725:345;31833:15;;31801:62;;31818:4;;-1:-1:-1;;;;;31833:15:0;31851:11;31801:8;:62::i;:::-;31868:15;;32022;;31868:194;;-1:-1:-1;;;31868:194:0;;31930:4;31868:194;;;24457:34:1;24507:18;;;24500:34;;;31868:15:0;24550:18:1;;;24543:34;;;24593:18;;;24586:34;-1:-1:-1;;;;;32022:15:0;;;24636:19:1;;;24629:44;32042:15:0;24689:19:1;;;24682:35;31868:15:0;;;:31;;31907:9;;24391:19:1;;31868:194:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;31725:345;;:::o;24511:413::-;24585:7;24593;24601;24619;24614:306;;-1:-1:-1;24642:7:0;;-1:-1:-1;24651:1:0;;-1:-1:-1;24651:1:0;24634:22;;24614:306;24702:11;;24677:12;;24716:3;;24692:21;;-1:-1:-1;;;24702:11:0;;;;24692:7;:21;:::i;:::-;:27;;;;:::i;:::-;24795:11;;24677:42;;-1:-1:-1;24725:14:0;;24810:3;;24795:11;;;;;;;;24779:13;;;;;24753:23;;24769:7;;;;;;24753:13;:23;:::i;:::-;:39;;;;:::i;:::-;:53;;;;:::i;:::-;24742:65;;;;:7;:65;:::i;:::-;:71;;;;:::i;:::-;24725:88;-1:-1:-1;24819:23:0;24856:13;24725:88;24856:4;:13;:::i;:::-;24845:25;;:7;:25;:::i;:::-;24819:51;-1:-1:-1;24901:4:0;;-1:-1:-1;24907:6:0;-1:-1:-1;24876:38:0;;-1:-1:-1;24876:38:0;24614:306;24511:413;;;;;:::o;24927:402::-;25056:7;;;;;25115:21;25125:11;25115:7;:21;:::i;:::-;25097:39;-1:-1:-1;25141:12:0;25156:18;25163:11;25156:4;:18;:::i;:::-;25141:33;-1:-1:-1;25179:14:0;25196:20;25205:11;25196:6;:20;:::i;:::-;25179:37;-1:-1:-1;25221:23:0;25258:13;25179:37;25258:4;:13;:::i;:::-;25247:25;;:7;:25;:::i;:::-;25285:7;;;;-1:-1:-1;25311:4:0;;-1:-1:-1;25311:4:0;-1:-1:-1;24927:402:0;;-1:-1:-1;;;;;;24927:402:0:o;26049:202::-;26158:4;26125:39;;;;:24;:39;;;;;;;;26121:89;;;26188:4;26172:22;;;;:7;:22;;;;;:32;;26198:6;;26172:22;:32;;26198:6;;26172:32;:::i;:::-;;;;-1:-1:-1;;26121:89:0;26230:4;26214:22;;;;:7;:22;;;;;:32;;26240:6;;26214:22;:32;;26240:6;;26214:32;:::i;:::-;;;;-1:-1:-1;;;;26049:202:0:o;24403:105::-;24476:4;24465:7;;:15;;;;;;;:::i;:::-;;;;;;;;24499:4;24485:10;;:18;;;;;;;:::i;14:131:1:-;-1:-1:-1;;;;;89:31:1;;79:42;;69:70;;135:1;132;125:12;69:70;14:131;:::o;150:160::-;215:20;;271:13;;264:21;254:32;;244:60;;300:1;297;290:12;244:60;150:160;;;:::o;315:315::-;380:6;388;441:2;429:9;420:7;416:23;412:32;409:52;;;457:1;454;447:12;409:52;496:9;483:23;515:31;540:5;515:31;:::i;:::-;565:5;-1:-1:-1;589:35:1;620:2;605:18;;589:35;:::i;:::-;579:45;;315:315;;;;;:::o;827:597::-;939:4;968:2;997;986:9;979:21;1029:6;1023:13;1072:6;1067:2;1056:9;1052:18;1045:34;1097:1;1107:140;1121:6;1118:1;1115:13;1107:140;;;1216:14;;;1212:23;;1206:30;1182:17;;;1201:2;1178:26;1171:66;1136:10;;1107:140;;;1265:6;1262:1;1259:13;1256:91;;;1335:1;1330:2;1321:6;1310:9;1306:22;1302:31;1295:42;1256:91;-1:-1:-1;1408:2:1;1387:15;-1:-1:-1;;1383:29:1;1368:45;;;;1415:2;1364:54;;827:597;-1:-1:-1;;;827:597:1:o;1429:315::-;1497:6;1505;1558:2;1546:9;1537:7;1533:23;1529:32;1526:52;;;1574:1;1571;1564:12;1526:52;1613:9;1600:23;1632:31;1657:5;1632:31;:::i;:::-;1682:5;1734:2;1719:18;;;;1706:32;;-1:-1:-1;;;1429:315:1:o;2362:180::-;2421:6;2474:2;2462:9;2453:7;2449:23;2445:32;2442:52;;;2490:1;2487;2480:12;2442:52;-1:-1:-1;2513:23:1;;2362:180;-1:-1:-1;2362:180:1:o;2547:456::-;2624:6;2632;2640;2693:2;2681:9;2672:7;2668:23;2664:32;2661:52;;;2709:1;2706;2699:12;2661:52;2748:9;2735:23;2767:31;2792:5;2767:31;:::i;:::-;2817:5;-1:-1:-1;2874:2:1;2859:18;;2846:32;2887:33;2846:32;2887:33;:::i;:::-;2547:456;;2939:7;;-1:-1:-1;;;2993:2:1;2978:18;;;;2965:32;;2547:456::o;3197:248::-;3262:6;3270;3323:2;3311:9;3302:7;3298:23;3294:32;3291:52;;;3339:1;3336;3329:12;3291:52;3375:9;3362:23;3352:33;;3404:35;3435:2;3424:9;3420:18;3404:35;:::i;3450:247::-;3509:6;3562:2;3550:9;3541:7;3537:23;3533:32;3530:52;;;3578:1;3575;3568:12;3530:52;3617:9;3604:23;3636:31;3661:5;3636:31;:::i;3702:671::-;3788:6;3796;3804;3812;3865:3;3853:9;3844:7;3840:23;3836:33;3833:53;;;3882:1;3879;3872:12;3833:53;3921:9;3908:23;3940:31;3965:5;3940:31;:::i;:::-;3990:5;-1:-1:-1;4047:2:1;4032:18;;4019:32;4060:33;4019:32;4060:33;:::i;:::-;4112:7;-1:-1:-1;4171:2:1;4156:18;;4143:32;4184:33;4143:32;4184:33;:::i;:::-;4236:7;-1:-1:-1;4295:2:1;4280:18;;4267:32;4308:33;4267:32;4308:33;:::i;:::-;3702:671;;;;-1:-1:-1;3702:671:1;;-1:-1:-1;;3702:671:1:o;4378:156::-;4444:20;;4504:4;4493:16;;4483:27;;4473:55;;4524:1;4521;4514:12;4539:464;4624:6;4632;4640;4648;4656;4709:3;4697:9;4688:7;4684:23;4680:33;4677:53;;;4726:1;4723;4716:12;4677:53;4749:27;4766:9;4749:27;:::i;:::-;4739:37;;4795:36;4827:2;4816:9;4812:18;4795:36;:::i;:::-;4785:46;;4850:36;4882:2;4871:9;4867:18;4850:36;:::i;:::-;4840:46;;4905:36;4937:2;4926:9;4922:18;4905:36;:::i;:::-;4895:46;;4960:37;4992:3;4981:9;4977:19;4960:37;:::i;:::-;4950:47;;4539:464;;;;;;;;:::o;5511:388::-;5579:6;5587;5640:2;5628:9;5619:7;5615:23;5611:32;5608:52;;;5656:1;5653;5646:12;5608:52;5695:9;5682:23;5714:31;5739:5;5714:31;:::i;:::-;5764:5;-1:-1:-1;5821:2:1;5806:18;;5793:32;5834:33;5793:32;5834:33;:::i;:::-;5886:7;5876:17;;;5511:388;;;;;:::o;5904:356::-;6106:2;6088:21;;;6125:18;;;6118:30;6184:34;6179:2;6164:18;;6157:62;6251:2;6236:18;;5904:356::o;6265:414::-;6467:2;6449:21;;;6506:2;6486:18;;;6479:30;6545:34;6540:2;6525:18;;6518:62;-1:-1:-1;;;6611:2:1;6596:18;;6589:48;6669:3;6654:19;;6265:414::o;6684:127::-;6745:10;6740:3;6736:20;6733:1;6726:31;6776:4;6773:1;6766:15;6800:4;6797:1;6790:15;6816:127;6877:10;6872:3;6868:20;6865:1;6858:31;6908:4;6905:1;6898:15;6932:4;6929:1;6922:15;6948:125;6988:4;7016:1;7013;7010:8;7007:34;;;7021:18;;:::i;:::-;-1:-1:-1;7058:9:1;;6948:125::o;7078:127::-;7139:10;7134:3;7130:20;7127:1;7120:31;7170:4;7167:1;7160:15;7194:4;7191:1;7184:15;7210:135;7249:3;7270:17;;;7267:43;;7290:18;;:::i;:::-;-1:-1:-1;7337:1:1;7326:13;;7210:135::o;8605:127::-;8666:10;8661:3;8657:20;8654:1;8647:31;8697:4;8694:1;8687:15;8721:4;8718:1;8711:15;8737:120;8777:1;8803;8793:35;;8808:18;;:::i;:::-;-1:-1:-1;8842:9:1;;8737:120::o;9270:168::-;9310:7;9376:1;9372;9368:6;9364:14;9361:1;9358:21;9353:1;9346:9;9339:17;9335:45;9332:71;;;9383:18;;:::i;:::-;-1:-1:-1;9423:9:1;;9270:168::o;17401:128::-;17441:3;17472:1;17468:6;17465:1;17462:13;17459:39;;;17478:18;;:::i;:::-;-1:-1:-1;17514:9:1;;17401:128::o;18591:209::-;-1:-1:-1;;18755:38:1;;;;18737:57;;18725:2;18710:18;;18591:209::o;21247:204::-;21285:3;21321:4;21318:1;21314:12;21353:4;21350:1;21346:12;21388:3;21382:4;21378:14;21373:3;21370:23;21367:49;;;21396:18;;:::i;:::-;21432:13;;21247:204;-1:-1:-1;;;21247:204:1:o;22049:165::-;22087:1;22121:4;22118:1;22114:12;22145:3;22135:37;;22152:18;;:::i;:::-;22204:3;22197:4;22194:1;22190:12;22186:22;22181:27;;;22049:165;;;;:::o;22219:195::-;22257:4;22294;22291:1;22287:12;22326:4;22323:1;22319:12;22351:3;22346;22343:12;22340:38;;;22358:18;;:::i;:::-;22395:13;;;22219:195;-1:-1:-1;;;22219:195:1:o;22875:251::-;22945:6;22998:2;22986:9;22977:7;22973:23;22969:32;22966:52;;;23014:1;23011;23004:12;22966:52;23046:9;23040:16;23065:31;23090:5;23065:31;:::i;23131:980::-;23393:4;23441:3;23430:9;23426:19;23472:6;23461:9;23454:25;23498:2;23536:6;23531:2;23520:9;23516:18;23509:34;23579:3;23574:2;23563:9;23559:18;23552:31;23603:6;23638;23632:13;23669:6;23661;23654:22;23707:3;23696:9;23692:19;23685:26;;23746:2;23738:6;23734:15;23720:29;;23767:1;23777:195;23791:6;23788:1;23785:13;23777:195;;;23856:13;;-1:-1:-1;;;;;23852:39:1;23840:52;;23947:15;;;;23912:12;;;;23888:1;23806:9;23777:195;;;-1:-1:-1;;;;;;;24028:32:1;;;;24023:2;24008:18;;24001:60;-1:-1:-1;;;24092:3:1;24077:19;24070:35;23989:3;23131:980;-1:-1:-1;;;23131:980:1:o;24728:306::-;24816:6;24824;24832;24885:2;24873:9;24864:7;24860:23;24856:32;24853:52;;;24901:1;24898;24891:12;24853:52;24930:9;24924:16;24914:26;;24980:2;24969:9;24965:18;24959:25;24949:35;;25024:2;25013:9;25009:18;25003:25;24993:35;;24728:306;;;;;:::o
Swarm Source
ipfs://a45651408d5c4241893b3de81f96b113421ebf00bdb90bd0f443035893113592
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.