ETH Price: $3,387.10 (-1.47%)
Gas: 2 Gwei

Token

LUCKY ROO (ROO)
 

Overview

Max Total Supply

10,000,000,000,000 ROO

Holders

847 (0.00%)

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
153,587.467392220217362525 ROO

Value
$0.00
0x83a4bd60eb630c99e0031b3abd1907f7aa3ed4df
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

Lucky Roo's vision is simple; creating opportunities to bring gambling and betting to the crypto market.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
LuckyRoo

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-10-11
*/

// SPDX-License-Identifier: MIT

pragma solidity 0.8.17;


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 LuckyRoo is IERC20, Ownable {
	using Address for address;
	using SafeMath for uint256;

	IRouter public uniswapV2Router;
	address public immutable uniswapV2Pair;

	string private constant _name =  "LUCKY ROO";
	string private constant _symbol = "ROO";
	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 = 10000000000000 * 10**18;
	uint256 private _rTotal = (MAX - (MAX % _tTotal));
	uint256 private _tFeeTotal;

	bool public isTradingEnabled;

	// max wallet is 1.5% of _tTotal
	uint256 public maxWalletAmount = _tTotal * 150 / 10000;

    // max buy and sell tx is 0.5% of _tTotal
	uint256 public maxTxAmount = _tTotal * 50 / 10000;

	bool private _swapping;
	uint256 public minimumTokensBeforeSwap = 25000000 * (10**18);

    address public liquidityWallet;
	address public marketingWallet;
	address public buyBackWallet;
    address public airdropWallet;

	struct CustomTaxPeriod {
		bytes23 periodName;
		uint8 blocksInPeriod;
		uint256 timeInPeriod;
		uint8 liquidityFeeOnBuy;
		uint8 liquidityFeeOnSell;
		uint8 marketingFeeOnBuy;
		uint8 marketingFeeOnSell;
		uint8 buyBackFeeOnBuy;
		uint8 buyBackFeeOnSell;
        uint8 airdropFeeOnBuy;
		uint8 airdropFeeOnSell;
		uint8 holdersFeeOnBuy;
		uint8 holdersFeeOnSell;
	}

	// Base taxes
	CustomTaxPeriod private _base = CustomTaxPeriod('base',0,0,1,1,3,3,1,1,1,1,2,2);

    uint256 private _launchStartTimestamp;
	uint256 private _launchBlockNumber;
    uint256 private constant _blockedTimeLimit = 172800;
    mapping (address => bool) private _isBlocked;
	mapping (address => bool) private _isExcludedFromFee;
	mapping (address => bool) private _isExcludedFromMaxTransactionLimit;
	mapping (address => bool) private _isExcludedFromMaxWalletLimit;
	mapping (address => bool) private _isAllowedToTradeWhenDisabled;
	mapping (address => bool) private _isExcludedFromDividends;
    mapping (address => bool) private _feeOnSelectedWalletTransfers;
	address[] private _excludedFromDividends;
	mapping (address => bool) public automatedMarketMakerPairs;

	uint8 private _liquidityFee;
	uint8 private _marketingFee;
	uint8 private _buyBackFee;
    uint8 private _airdropFee;
	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 walletIdentifier, address indexed newWallet, address indexed oldWallet);
	event FeeChange(string indexed identifier, uint8 liquidityFee, uint8 marketingFee, uint8 buyBackFee, uint8 airdropFee, uint8 holdersFee);
	event CustomTaxPeriodChange(uint8 indexed newValue, uint8 indexed oldValue, string indexed taxType, bytes23 period);
	event BlockedAccountChange(address indexed holder, bool indexed status);
    event MaxTransactionAmountChange(uint256 indexed newValue, uint256 indexed oldValue);
	event MaxWalletAmountChange(uint256 indexed newValue, uint256 indexed oldValue);
	event MinTokenAmountBeforeSwapChange(uint256 indexed newValue, uint256 indexed oldValue);
	event ExcludeFromFeesChange(address indexed account, bool isExcluded);
	event ExcludeFromMaxTransferChange(address indexed account, bool isExcluded);
	event ExcludeFromMaxWalletChange(address indexed account, bool isExcluded);
	event ExcludeFromDividendsChange(address indexed account, bool isExcluded);
	event SwapAndLiquify(uint256 tokensSwapped, uint256 ethReceived,uint256 tokensIntoLiqudity);
    event FeeOnSelectedWalletTransfersChange(address indexed account, bool newValue);
	event ClaimEthOverflow(uint256 amount);
	event TradingStatusChange(bool indexed newValue, bool indexed oldValue);

	constructor() {
		liquidityWallet = owner();
        marketingWallet = owner();
		buyBackWallet = owner();
        airdropWallet = 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(0), true);
		excludeFromDividends(address(_uniswapV2Router), true);
		excludeFromDividends(address(_uniswapV2Pair), true);

		_isAllowedToTradeWhenDisabled[owner()] = true;

		_isExcludedFromMaxTransactionLimit[address(this)] = true;
		_isExcludedFromMaxTransactionLimit[owner()] = true;

		_isExcludedFromMaxWalletLimit[_uniswapV2Pair] = true;
		_isExcludedFromMaxWalletLimit[address(uniswapV2Router)] = true;
		_isExcludedFromMaxWalletLimit[address(this)] = true;
		_isExcludedFromMaxWalletLimit[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 activateTrading() external onlyOwner {
		isTradingEnabled = true;
        if (_launchStartTimestamp == 0) {
            _launchStartTimestamp = block.timestamp;
            _launchBlockNumber = block.number;
        }
		emit TradingStatusChange(true, false);
	}
	function deactivateTrading() external onlyOwner {
		isTradingEnabled = false;
		emit TradingStatusChange(false, true);
	}
	function allowTradingWhenDisabled(address account, bool allowed) external onlyOwner {
		_isAllowedToTradeWhenDisabled[account] = allowed;
		emit AllowedWhenTradingDisabledChange(account, allowed);
	}
    function setFeeOnSelectedWalletTransfers(address account, bool value) external onlyOwner {
		require(_feeOnSelectedWalletTransfers[account] != value, "LuckyRoo: The selected wallet is already set to the value ");
		_feeOnSelectedWalletTransfers[account] = value;
		emit FeeOnSelectedWalletTransfersChange(account, value);
	}
	function _setAutomatedMarketMakerPair(address pair, bool value) private {
		require(automatedMarketMakerPairs[pair] != value, "LuckyRoo: Automated market maker pair is already set to that value");
		automatedMarketMakerPairs[pair] = value;
		emit AutomatedMarketMakerPairChange(pair, value);
	}
    function blockAccount(address account) external onlyOwner {
		require(!_isBlocked[account], "LuckyRoo: Account is already blocked");
		if (_launchStartTimestamp > 0) {
			require((block.timestamp - _launchStartTimestamp) < _blockedTimeLimit, "LuckyRoo: Time to block accounts has expired");
		}
		_isBlocked[account] = true;
		emit BlockedAccountChange(account, true);
	}
	function unblockAccount(address account) external onlyOwner {
		require(_isBlocked[account], "LuckyRoo: Account is not blcoked");
		_isBlocked[account] = false;
		emit BlockedAccountChange(account, false);
	}
	function excludeFromFees(address account, bool excluded) external onlyOwner {
		require(_isExcludedFromFee[account] != excluded, "LuckyRoo: Account is already the value of 'excluded'");
		_isExcludedFromFee[account] = excluded;
		emit ExcludeFromFeesChange(account, excluded);
	}
	function excludeFromMaxTransactionLimit(address account, bool excluded) external onlyOwner {
		require(_isExcludedFromMaxTransactionLimit[account] != excluded, "LuckyRoo: Account is already the value of 'excluded'");
		_isExcludedFromMaxTransactionLimit[account] = excluded;
		emit ExcludeFromMaxTransferChange(account, excluded);
	}
	function excludeFromMaxWalletLimit(address account, bool excluded) external onlyOwner {
		require(_isExcludedFromMaxWalletLimit[account] != excluded, "LuckyRoo: Account is already the value of 'excluded'");
		_isExcludedFromMaxWalletLimit[account] = excluded;
		emit ExcludeFromMaxWalletChange(account, excluded);
	}
	function excludeFromDividends(address account, bool excluded) public onlyOwner {
		require(_isExcludedFromDividends[account] != excluded, "LuckyRoo: 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 setWallets(address newLiquidityWallet, address newMarketingWallet, address newBuyBackWallet, address newAirdropWallet) external onlyOwner {
		if(liquidityWallet != newLiquidityWallet) {
			require(newLiquidityWallet != address(0), "LuckyRoo: The liquidityWallet cannot be 0");
			emit WalletChange('liquidityWallet', newLiquidityWallet, liquidityWallet);
			liquidityWallet = newLiquidityWallet;
		}
		if(marketingWallet != newMarketingWallet) {
			require(newMarketingWallet != address(0), "LuckyRoo: The marketingWallet cannot be 0");
			emit WalletChange('marketingWallet', newMarketingWallet, marketingWallet);
			marketingWallet = newMarketingWallet;
		}
		if(buyBackWallet != newBuyBackWallet) {
			require(newBuyBackWallet != address(0), "LuckyRoo: The buyBackWallet cannot be 0");
			emit WalletChange('buyBackWallet', newBuyBackWallet, buyBackWallet);
			buyBackWallet = newBuyBackWallet;
		}
        if(airdropWallet != newAirdropWallet) {
			require(newAirdropWallet != address(0), "LuckyRoo: The airdropWallet cannot be 0");
			emit WalletChange('airdropWallet', newAirdropWallet, airdropWallet);
			airdropWallet = newAirdropWallet;
		}
	}
	function setBaseFeesOnBuy(uint8 _liquidityFeeOnBuy, uint8 _marketingFeeOnBuy, uint8 _buyBackFeeOnBuy, uint8 _airdropFeeOnBuy, uint8 _holdersFeeOnBuy) external onlyOwner {
		_setCustomBuyTaxPeriod(_base, _liquidityFeeOnBuy, _marketingFeeOnBuy, _buyBackFeeOnBuy, _airdropFeeOnBuy, _holdersFeeOnBuy);
		emit FeeChange('baseFees-Buy', _liquidityFeeOnBuy, _marketingFeeOnBuy, _buyBackFeeOnBuy, _airdropFeeOnBuy, _holdersFeeOnBuy);
	}
	function setBaseFeesOnSell(uint8 _liquidityFeeOnSell,uint8 _marketingFeeOnSell, uint8 _buyBackFeeOnSell, uint8 _airdropFeeOnSell, uint8 _holdersFeeOnSell) external onlyOwner {
		_setCustomSellTaxPeriod(_base, _liquidityFeeOnSell, _marketingFeeOnSell, _buyBackFeeOnSell, _airdropFeeOnSell, _holdersFeeOnSell);
		emit FeeChange('baseFees-Sell', _liquidityFeeOnSell, _marketingFeeOnSell, _buyBackFeeOnSell, _airdropFeeOnSell, _holdersFeeOnSell);
	}
	function setUniswapRouter(address newAddress) external onlyOwner {
		require(newAddress != address(uniswapV2Router), "LuckyRoo: The router already has that address");
		emit UniswapV2RouterChange(newAddress, address(uniswapV2Router));
		uniswapV2Router = IRouter(newAddress);
	}
	function setMaxTransactionAmount(uint256 newValue) external onlyOwner {
		require(newValue != maxTxAmount, "LuckyRoo: Cannot update maxTxAmount to same value");
		emit MaxTransactionAmountChange(newValue, maxTxAmount);
		maxTxAmount = newValue;
	}
	function setMaxWalletAmount(uint256 newValue) external onlyOwner {
		require(newValue != maxWalletAmount, "LuckyRoo: Cannot update maxWalletAmount to same value");
		emit MaxWalletAmountChange(newValue, maxWalletAmount);
		maxWalletAmount = newValue;
	}
	function setMinimumTokensBeforeSwap(uint256 newValue) external onlyOwner {
		require(newValue != minimumTokensBeforeSwap, "LuckyRoo: Cannot update minimumTokensBeforeSwap to same value");
		emit MinTokenAmountBeforeSwapChange(newValue, minimumTokensBeforeSwap);
		minimumTokensBeforeSwap = newValue;
	}
	function claimEthOverflow(uint256 amount) external onlyOwner {
		require(amount < address(this).balance, "LuckyRoo: Cannot send more than contract balance");
		(bool success,) = address(owner()).call{value : amount}("");
		if (success){
			emit ClaimEthOverflow(amount);
		}
	}

	// Getters
	function name() external pure returns (string memory) {
		return _name;
	}
	function symbol() external pure returns (string memory) {
		return _symbol;
	}
	function decimals() external view virtual returns (uint8) {
		return _decimals;
	}
	function totalSupply() external pure 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.buyBackFeeOnBuy, _base.airdropFeeOnBuy, _base.holdersFeeOnBuy);
	}
	function getBaseSellFees() external view returns (uint8, uint8, uint8, uint8, uint8){
		return (_base.liquidityFeeOnSell, _base.marketingFeeOnSell, _base.buyBackFeeOnSell, _base.airdropFeeOnSell, _base.holdersFeeOnSell);
	}
	function tokenFromReflection(uint256 rAmount) public view returns(uint256) {
		require(rAmount <= _rTotal, "LuckyRoo: 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, "LuckyRoo: 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, "LuckyRoo: Transfer amount must be greater than zero");
		require(amount <= balanceOf(from), "LuckyRoo: Cannot transfer more than balance");

		if(!_isAllowedToTradeWhenDisabled[from] && !_isAllowedToTradeWhenDisabled[to]) {
			require(isTradingEnabled, "LuckyRoo: Trading is currently disabled.");
            require(!_isBlocked[to], "LuckyRoo: Account is blocked");
			require(!_isBlocked[from], "LuckyRoo: Account is blocked");
			if (!_isExcludedFromMaxTransactionLimit[to] && !_isExcludedFromMaxTransactionLimit[from]) {
				require(amount <= maxTxAmount, "LuckyRoo: Buy amount exceeds the maxTxBuyAmount.");
			}
			if (!_isExcludedFromMaxWalletLimit[to]) {
				require((balanceOf(to) + amount) <= maxWalletAmount, "LuckyRoo: Expected wallet amount exceeds the maxWalletAmount.");
			}
		}

		_adjustTaxes(automatedMarketMakerPairs[from], automatedMarketMakerPairs[to], to, from);
		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;
		_reflectFee(rFee, tFee, rOther, tOther);
		emit Transfer(sender, recipient, tTransferAmount);
	}
	function _reflectFee(uint256 rFee, uint256 tFee, uint256 rOther, uint256 tOther) private {
		_rTotal -= rFee;
		_tFeeTotal += tFee;

        if (_isExcludedFromDividends[address(this)]) {
			_tOwned[address(this)] += tOther;
		}
		_rOwned[address(this)] += rOther;
	}
	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 + _marketingFee + _airdropFee + _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 _adjustTaxes(bool isBuyFromLp, bool isSelltoLp, address to, address from) private {
		_liquidityFee = 0;
        _marketingFee = 0;
        _airdropFee = 0;
        _buyBackFee = 0;
        _holdersFee = 0;

        if (isBuyFromLp) {
            if (block.number - _launchBlockNumber <= 5) {
                _liquidityFee = 100;
            }
			else {
                _liquidityFee = _base.liquidityFeeOnBuy;
                _marketingFee = _base.marketingFeeOnBuy;
                _buyBackFee = _base.buyBackFeeOnBuy;
                _airdropFee = _base.airdropFeeOnBuy;
                _holdersFee = _base.holdersFeeOnBuy;
            }
		}
		if (isSelltoLp) {
			_liquidityFee = _base.liquidityFeeOnSell;
			_marketingFee = _base.marketingFeeOnSell;
			_buyBackFee = _base.buyBackFeeOnSell;
            _airdropFee = _base.airdropFeeOnSell;
			_holdersFee = _base.holdersFeeOnSell;
		}
		if (!isSelltoLp && !isBuyFromLp && (_feeOnSelectedWalletTransfers[from] || _feeOnSelectedWalletTransfers[to])) {
			_liquidityFee = _base.liquidityFeeOnSell;
			_marketingFee = _base.marketingFeeOnSell;
			_buyBackFee = _base.buyBackFeeOnSell;
            _airdropFee = _base.airdropFeeOnSell;
			_holdersFee = _base.holdersFeeOnSell;
		}
		_totalFee = _liquidityFee + _marketingFee + _buyBackFee + _airdropFee + _holdersFee;
	}
	function _setCustomSellTaxPeriod(CustomTaxPeriod storage map,
		uint8 _liquidityFeeOnSell,
		uint8 _marketingFeeOnSell,
		uint8 _buyBackFeeOnSell,
        uint8 _airdropFeeOnSell,
		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.buyBackFeeOnSell != _buyBackFeeOnSell) {
			emit CustomTaxPeriodChange(_buyBackFeeOnSell, map.buyBackFeeOnSell, 'buyBackFeeOnSell', map.periodName);
			map.buyBackFeeOnSell = _buyBackFeeOnSell;
		}
        if (map.airdropFeeOnSell != _airdropFeeOnSell) {
			emit CustomTaxPeriodChange(_airdropFeeOnSell, map.airdropFeeOnSell, 'airdropFeeOnSell', map.periodName);
			map.airdropFeeOnSell = _airdropFeeOnSell;
		}
		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 _buyBackFeeOnBuy,
        uint8 _airdropFeeOnBuy,
		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.buyBackFeeOnBuy != _buyBackFeeOnBuy) {
			emit CustomTaxPeriodChange(_buyBackFeeOnBuy, map.buyBackFeeOnBuy, 'buyBackFeeOnBuy', map.periodName);
			map.buyBackFeeOnBuy = _buyBackFeeOnBuy;
		}
        if (map.airdropFeeOnBuy != _airdropFeeOnBuy) {
			emit CustomTaxPeriodChange(_airdropFeeOnBuy, map.airdropFeeOnBuy, 'airdropFeeOnBuy', map.periodName);
			map.airdropFeeOnBuy = _airdropFeeOnBuy;
		}
		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 buyBackFeePrior  = _buyBackFee;
        uint8 airdropFeePrior = _airdropFee;
		uint8 holdersFeePrior = _holdersFee;

		uint256 amountToLiquify = contractBalance * _liquidityFee / _totalFee / 2;
		uint256 amountToSwap = contractBalance - amountToLiquify;

		_swapTokensForEth(amountToSwap);

		uint256 ethBalanceAfterSwap = address(this).balance - initialEthBalance;
		uint256 totalEthFee = totalFeePrior - (liquidityFeePrior / 2) - (holdersFeePrior);
		uint256 amountEthLiquidity = ethBalanceAfterSwap * liquidityFeePrior / totalEthFee / 2;
		uint256 amountEthMarketing = ethBalanceAfterSwap * marketingFeePrior / totalEthFee;
		uint256 amountEthBuyBack = ethBalanceAfterSwap * buyBackFeePrior / totalEthFee;
		uint256 amountEthAirdrop = ethBalanceAfterSwap - (amountEthLiquidity + amountEthMarketing + amountEthBuyBack);

		Address.sendValue(payable(marketingWallet),amountEthMarketing);
        Address.sendValue(payable(buyBackWallet),amountEthBuyBack);
        Address.sendValue(payable(airdropWallet),amountEthAirdrop);

		if (amountToLiquify > 0) {
			_addLiquidity(amountToLiquify, amountEthLiquidity);
			emit SwapAndLiquify(amountToSwap, amountEthLiquidity, amountToLiquify);
		}

		_totalFee = totalFeePrior;
		_liquidityFee = liquidityFeePrior;
		_marketingFee = marketingFeePrior;
		_buyBackFee = buyBackFeePrior;
        _airdropFee = airdropFeePrior;
		_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,
			1, // 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,
			1, // slippage is unavoidable
			1, // slippage is unavoidable
			liquidityWallet,
			block.timestamp
		);
	}
}

Contract Security Audit

Contract ABI

[{"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":true,"internalType":"address","name":"holder","type":"address"},{"indexed":true,"internalType":"bool","name":"status","type":"bool"}],"name":"BlockedAccountChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ClaimEthOverflow","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint8","name":"newValue","type":"uint8"},{"indexed":true,"internalType":"uint8","name":"oldValue","type":"uint8"},{"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":"buyBackFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"airdropFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"holdersFee","type":"uint8"}],"name":"FeeChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"newValue","type":"bool"}],"name":"FeeOnSelectedWalletTransfersChange","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":"bool","name":"newValue","type":"bool"},{"indexed":true,"internalType":"bool","name":"oldValue","type":"bool"}],"name":"TradingStatusChange","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":"walletIdentifier","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":[],"name":"airdropWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","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":[{"internalType":"address","name":"account","type":"address"}],"name":"blockAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buyBackWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"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":[{"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":"pure","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":"_buyBackFeeOnBuy","type":"uint8"},{"internalType":"uint8","name":"_airdropFeeOnBuy","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":"_buyBackFeeOnSell","type":"uint8"},{"internalType":"uint8","name":"_airdropFeeOnSell","type":"uint8"},{"internalType":"uint8","name":"_holdersFeeOnSell","type":"uint8"}],"name":"setBaseFeesOnSell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setFeeOnSelectedWalletTransfers","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":"newAddress","type":"address"}],"name":"setUniswapRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newLiquidityWallet","type":"address"},{"internalType":"address","name":"newMarketingWallet","type":"address"},{"internalType":"address","name":"newBuyBackWallet","type":"address"},{"internalType":"address","name":"newAirdropWallet","type":"address"}],"name":"setWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","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":[{"internalType":"address","name":"account","type":"address"}],"name":"unblockAccount","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"}]

60a06040526200001f6c7e37be2022c0914b268000000060001962000d25565b6200002d9060001962000d52565b6005556127106200004d6c7e37be2022c0914b2680000000609662000d68565b62000059919062000d82565b600855612710620000796c7e37be2022c0914b2680000000603262000d68565b62000085919062000d82565b6009556a14adf4b7320334b9000000600b55604080516101a081018252636261736560e01b815260006020820181905291810182905260016060820181905260808201819052600360a0830181905260c083015260e08201819052610100820181905261012082018190526101408201526002610160820181905261018090910152601080546001600160c01b031916636261736560981b1790556011556012805469020201010101030301016001600160501b03199091161790553480156200014e57600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35060008054600c80546001600160a01b039092166001600160a01b03199283168117909155600d8054831682179055600e8054831682179055600f80549092161790556040805163c45a015560e01b81529051737a250d5630b4cf539739df2c5dacb4c659f2488d9291839163c45a0155916004808201926020929091908290030181865afa15801562000227573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200024d919062000d99565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200029b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002c1919062000d99565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156200030f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000335919062000d99565b600180546001600160a01b0319166001600160a01b03858116919091178255821660805290915062000369908290620005ad565b600160166000620003826000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff199586161790553081526016909252812080549092166001908117909255620003d091620006a8565b620003dd826001620006a8565b620003ea816001620006a8565b600160196000620004036000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff19958616179055308152601792839052908120805490931660019081179093556200045b6000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055858216815260189384905282812080548616600190811790915580549092168152828120805486168317905530815291822080549094168117909355620004d86000546001600160a01b031690565b6001600160a01b0316815260208101919091526040016000908120805460ff191692151592909217909155600554906002906200051d6000546001600160a01b031690565b6001600160a01b031681526020810191909152604001600020556200054a6000546001600160a01b031690565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6c7e37be2022c0914b26800000006040516200059d91815260200190565b60405180910390a3505062000e5c565b6001600160a01b0382166000908152601d602052604090205481151560ff909116151503620006545760405162461bcd60e51b815260206004820152604260248201527f4c75636b79526f6f3a204175746f6d61746564206d61726b6574206d616b657260448201527f207061697220697320616c72656164792073657420746f20746861742076616c606482015261756560f01b608482015260a4015b60405180910390fd5b6001600160a01b0382166000818152601d6020526040808220805460ff191685151590811790915590519092917fa666b9b2dc2c8f2d86fda7ba3a115be30d3a958fd84d359cbc6bc919df97990a91a35050565b6000546001600160a01b03163314620007045760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016200064b565b6001600160a01b0382166000908152601a602052604090205481151560ff9091161515036200079c5760405162461bcd60e51b815260206004820152603460248201527f4c75636b79526f6f3a204163636f756e7420697320616c72656164792074686560448201527f2076616c7565206f6620276578636c756465642700000000000000000000000060648201526084016200064b565b801562000869576001600160a01b0382166000908152600260205260409020541562000800576001600160a01b038216600090815260026020526040902054620007e690620009ea565b6001600160a01b0383166000908152600360205260409020555b6001600160a01b0382166000818152601a60205260408120805460ff1916841515179055601c805460018101825591527f0e4562a10381dec21b205ed72637e6b1b523bdd0e4d4d50af5cd23dd4500a2110180546001600160a01b0319169091179055620009a0565b60005b601c548110156200099e57826001600160a01b0316601c828154811062000897576200089762000dc4565b6000918252602090912001546001600160a01b0316036200098957601c8054620008c49060019062000d52565b81548110620008d757620008d762000dc4565b600091825260209091200154601c80546001600160a01b03909216918390811062000906576200090662000dc4565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559185168152600382526040808220829055601a90925220805460ff19169055601c80548062000961576200096162000dda565b600082815260209020810160001990810180546001600160a01b03191690550190556200099e565b80620009958162000df0565b9150506200086c565b505b816001600160a01b03167fcb9d59a6e9da25dee1a9ddef81481537dfd94e20b1593b58b08193bea9e9baa982604051620009de911515815260200190565b60405180910390a25050565b600060055482111562000a665760405162461bcd60e51b815260206004820152603460248201527f4c75636b79526f6f3a20416d6f756e74206d757374206265206c65737320746860448201527f616e20746f74616c207265666c656374696f6e7300000000000000000000000060648201526084016200064b565b600062000a7262000a87565b905062000a80818462000d82565b9392505050565b6000808062000a9562000aba565b9150915062000ab3818362000c8060201b620020b11790919060201c565b9250505090565b60055460009081906c7e37be2022c0914b2680000000825b601c5481101562000c37578260026000601c848154811062000af85762000af862000dc4565b60009182526020808320909101546001600160a01b03168352820192909252604001902054118062000b6757508160036000601c848154811062000b405762000b4062000dc4565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1562000b88575050600554936c7e37be2022c0914b26800000009350915050565b60026000601c838154811062000ba25762000ba262000dc4565b60009182526020808320909101546001600160a01b0316835282019290925260400190205462000bd3908462000d52565b925060036000601c838154811062000bef5762000bef62000dc4565b60009182526020808320909101546001600160a01b0316835282019290925260400190205462000c20908362000d52565b91508062000c2e8162000df0565b91505062000ad2565b506c7e37be2022c0914b268000000060055462000c55919062000d82565b82101562000c77575050600554926c7e37be2022c0914b268000000092509050565b90939092509050565b600062000cca83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525062000cd360201b60201c565b90505b92915050565b6000818362000cf75760405162461bcd60e51b81526004016200064b919062000e0c565b50600062000d06848662000d82565b95945050505050565b634e487b7160e01b600052601260045260246000fd5b60008262000d375762000d3762000d0f565b500690565b634e487b7160e01b600052601160045260246000fd5b8181038181111562000ccd5762000ccd62000d3c565b808202811582820484141762000ccd5762000ccd62000d3c565b60008262000d945762000d9462000d0f565b500490565b60006020828403121562000dac57600080fd5b81516001600160a01b038116811462000a8057600080fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b60006001820162000e055762000e0562000d3c565b5060010190565b600060208083528351808285015260005b8181101562000e3b5785810183015185820160400152820162000e1d565b506000604082860101526040601f19601f8301168501019250505092915050565b60805161418e62000e78600039600061051e015261418e6000f3fe6080604052600436106102975760003560e01c80637c0a893d1161015a578063b1ba39ea116100c1578063d2d7ad831161007a578063d2d7ad831461086c578063d322157614610882578063d4698016146108a2578063dd62ed3e146108c2578063f2fde38b14610908578063fe0175351461092857600080fd5b8063b1ba39ea1461074b578063b62496f51461076b578063ba4f5de61461079b578063bea9849e146107bb578063c0246668146107db578063cd43e228146107fb57600080fd5b80639fad9683116101135780639fad968314610695578063a14779c9146106b5578063a457c2d7146106d5578063a9059cbb146106f5578063aa4bde2814610715578063aee50b1e1461072b57600080fd5b80637c0a893d146105d557806383672f3e146105f5578063880bcbc1146106155780638c0b5e22146106355780638da5cb5b1461064b57806395d89b411461066957600080fd5b80632d838119116101fe57806349bd5a5e116101b757806349bd5a5e1461050c5780634d78fdc61461054057806370a0823114610560578063715018a61461058057806375f0a87414610595578063781edb3c146105b557600080fd5b80632d8381191461045b578063313ce5671461047b57806334cf1fea1461049757806339509351146104ac5780634549b039146104cc57806345a42329146104ec57600080fd5b80631694505e116102505780631694505e1461038357806318160ddd146103bb5780631cd348c0146103db5780631e293c10146103fb57806323b872dd1461041b57806327a14fc21461043b57600080fd5b80630483f7a0146102a3578063064a59d0146102c557806306fdde03146102f4578063095ea7b31461032f5780630bd05b691461034f57806313114a9d1461036457600080fd5b3661029e57005b600080fd5b3480156102af57600080fd5b506102c36102be366004613c05565b61096e565b005b3480156102d157600080fd5b506007546102df9060ff1681565b60405190151581526020015b60405180910390f35b34801561030057600080fd5b506040805180820190915260098152684c55434b5920524f4f60b81b60208201525b6040516102eb9190613c3a565b34801561033b57600080fd5b506102df61034a366004613c88565b610c15565b34801561035b57600080fd5b506102c3610c2c565b34801561037057600080fd5b506006545b6040519081526020016102eb565b34801561038f57600080fd5b506001546103a3906001600160a01b031681565b6040516001600160a01b0390911681526020016102eb565b3480156103c757600080fd5b506c7e37be2022c0914b2680000000610375565b3480156103e757600080fd5b50600e546103a3906001600160a01b031681565b34801561040757600080fd5b506102c3610416366004613cb4565b610ca6565b34801561042757600080fd5b506102df610436366004613ccd565b610d6e565b34801561044757600080fd5b506102c3610456366004613cb4565b610dd7565b34801561046757600080fd5b50610375610476366004613cb4565b610ea3565b34801561048757600080fd5b50604051601281526020016102eb565b3480156104a357600080fd5b506102c3610f31565b3480156104b857600080fd5b506102df6104c7366004613c88565b610f95565b3480156104d857600080fd5b506103756104e7366004613d0e565b610fcb565b3480156104f857600080fd5b506102c3610507366004613c05565b6110b1565b34801561051857600080fd5b506103a37f000000000000000000000000000000000000000000000000000000000000000081565b34801561054c57600080fd5b506102c361055b366004613d31565b6111c9565b34801561056c57600080fd5b5061037561057b366004613d31565b6112a8565b34801561058c57600080fd5b506102c3611307565b3480156105a157600080fd5b50600d546103a3906001600160a01b031681565b3480156105c157600080fd5b506102c36105d0366004613c05565b61137b565b3480156105e157600080fd5b506102c36105f0366004613d31565b61143d565b34801561060157600080fd5b506102c3610610366004613d4e565b6115aa565b34801561062157600080fd5b506102c3610630366004613c05565b611962565b34801561064157600080fd5b5061037560095481565b34801561065757600080fd5b506000546001600160a01b03166103a3565b34801561067557600080fd5b50604080518082019091526003815262524f4f60e81b6020820152610322565b3480156106a157600080fd5b506102c36106b0366004613dbb565b611a24565b3480156106c157600080fd5b50600f546103a3906001600160a01b031681565b3480156106e157600080fd5b506102df6106f0366004613c88565b611adb565b34801561070157600080fd5b506102df610710366004613c88565b611b2a565b34801561072157600080fd5b5061037560085481565b34801561073757600080fd5b506102c3610746366004613cb4565b611b37565b34801561075757600080fd5b506102c3610766366004613dbb565b611c0b565b34801561077757600080fd5b506102df610786366004613d31565b601d6020526000908152604090205460ff1681565b3480156107a757600080fd5b506102c36107b6366004613cb4565b611c62565b3480156107c757600080fd5b506102c36107d6366004613d31565b611d88565b3480156107e757600080fd5b506102c36107f6366004613c05565b611e83565b34801561080757600080fd5b5060125460ff80821691620100008104821691600160201b8204811691600160301b8104821691600160401b909104165b6040805160ff968716815294861660208601529285169284019290925283166060830152909116608082015260a0016102eb565b34801561087857600080fd5b50610375600b5481565b34801561088e57600080fd5b506102c361089d366004613c05565b611f45565b3480156108ae57600080fd5b50600c546103a3906001600160a01b031681565b3480156108ce57600080fd5b506103756108dd366004613e20565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b34801561091457600080fd5b506102c3610923366004613d31565b611fc7565b34801561093457600080fd5b5060125460ff610100820481169163010000008104821691600160281b8204811691600160381b8104821691600160481b90910416610838565b6000546001600160a01b031633146109a15760405162461bcd60e51b815260040161099890613e59565b60405180910390fd5b6001600160a01b0382166000908152601a602052604090205481151560ff9091161515036109e15760405162461bcd60e51b815260040161099890613e8e565b8015610aa9576001600160a01b03821660009081526002602052604090205415610a41576001600160a01b038216600090815260026020526040902054610a2790610ea3565b6001600160a01b0383166000908152600360205260409020555b6001600160a01b0382166000818152601a60205260408120805460ff1916841515179055601c805460018101825591527f0e4562a10381dec21b205ed72637e6b1b523bdd0e4d4d50af5cd23dd4500a2110180546001600160a01b0319169091179055610bcc565b60005b601c54811015610bca57826001600160a01b0316601c8281548110610ad357610ad3613ee2565b6000918252602090912001546001600160a01b031603610bb857601c8054610afd90600190613f0e565b81548110610b0d57610b0d613ee2565b600091825260209091200154601c80546001600160a01b039092169183908110610b3957610b39613ee2565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559185168152600382526040808220829055601a90925220805460ff19169055601c805480610b9157610b91613f21565b600082815260209020810160001990810180546001600160a01b0319169055019055610bca565b80610bc281613f37565b915050610aac565b505b816001600160a01b03167fcb9d59a6e9da25dee1a9ddef81481537dfd94e20b1593b58b08193bea9e9baa982604051610c09911515815260200190565b60405180910390a25050565b6000610c223384846120f3565b5060015b92915050565b6000546001600160a01b03163314610c565760405162461bcd60e51b815260040161099890613e59565b6007805460ff19166001179055601354600003610c765742601355436014555b6040516000906001907fa0f694e30e34d9f05d12691b612650129ed8888d1f93b25fa0cd92e4416a8338908390a3565b6000546001600160a01b03163314610cd05760405162461bcd60e51b815260040161099890613e59565b6009548103610d3b5760405162461bcd60e51b815260206004820152603160248201527f4c75636b79526f6f3a2043616e6e6f7420757064617465206d61785478416d6f604482015270756e7420746f2073616d652076616c756560781b6064820152608401610998565b60095460405182907f75f1c17bf623f0f7a2bd91ba61e89dff216960370e3e9a46b250750d03e4215e90600090a3600955565b6000610d7b848484612217565b610dcd8433610dc8856040518060600160405280602881526020016140ec602891396001600160a01b038a16600090815260046020908152604080832033845290915290205491906127ca565b6120f3565b5060019392505050565b6000546001600160a01b03163314610e015760405162461bcd60e51b815260040161099890613e59565b6008548103610e705760405162461bcd60e51b815260206004820152603560248201527f4c75636b79526f6f3a2043616e6e6f7420757064617465206d617857616c6c6560448201527474416d6f756e7420746f2073616d652076616c756560581b6064820152608401610998565b60085460405182907f6d3e257c59a11116c3e97bb144abf5ba1a6a9da6bd509192ecf0d48f7be1fc7690600090a3600855565b6000600554821115610f145760405162461bcd60e51b815260206004820152603460248201527f4c75636b79526f6f3a20416d6f756e74206d757374206265206c657373207468604482015273616e20746f74616c207265666c656374696f6e7360601b6064820152608401610998565b6000610f1e612804565b9050610f2a8184613f66565b9392505050565b6000546001600160a01b03163314610f5b5760405162461bcd60e51b815260040161099890613e59565b6007805460ff191690556040516001906000907fa0f694e30e34d9f05d12691b612650129ed8888d1f93b25fa0cd92e4416a8338908290a3565b3360008181526004602090815260408083206001600160a01b03871684529091528120549091610c22918590610dc89086612827565b60006c7e37be2022c0914b268000000083111561103c5760405162461bcd60e51b815260206004820152602960248201527f4c75636b79526f6f3a20416d6f756e74206d757374206265206c657373207468604482015268616e20737570706c7960b81b6064820152608401610998565b6000611046612804565b905060006110548286613f7a565b905083611064579150610c269050565b601e54600090839060649061108390600160281b900460ff1689613f7a565b61108d9190613f66565b6110979190613f7a565b905060006110a58284613f0e565b9450610c269350505050565b6000546001600160a01b031633146110db5760405162461bcd60e51b815260040161099890613e59565b6001600160a01b0382166000908152601b602052604090205481151560ff9091161515036111715760405162461bcd60e51b815260206004820152603a60248201527f4c75636b79526f6f3a205468652073656c65637465642077616c6c657420697360448201527f20616c72656164792073657420746f207468652076616c7565200000000000006064820152608401610998565b6001600160a01b0382166000818152601b6020908152604091829020805460ff191685151590811790915591519182527fe70512a569cf898db2e20aa3b4cc3f0dd13377b82a493840d326ab5a196668779101610c09565b6000546001600160a01b031633146111f35760405162461bcd60e51b815260040161099890613e59565b6001600160a01b03811660009081526015602052604090205460ff1661125b5760405162461bcd60e51b815260206004820181905260248201527f4c75636b79526f6f3a204163636f756e74206973206e6f7420626c636f6b65646044820152606401610998565b6001600160a01b038116600081815260156020526040808220805460ff19169055519091907f2f092974a5a89dc001cc04aa60bc3afe575e0b7444ef2197f7bb5714b51528ba908390a350565b6001600160a01b0381166000908152601a602052604081205460ff16156112e557506001600160a01b031660009081526003602052604090205490565b6001600160a01b038216600090815260026020526040902054610c2690610ea3565b6000546001600160a01b031633146113315760405162461bcd60e51b815260040161099890613e59565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146113a55760405162461bcd60e51b815260040161099890613e59565b6001600160a01b03821660009081526018602052604090205481151560ff9091161515036113e55760405162461bcd60e51b815260040161099890613e8e565b6001600160a01b038216600081815260186020908152604091829020805460ff191685151590811790915591519182527ff5133f371b17bf21ce0df4ae2c1b6e11ca7c2f27257eb55282edb1ccfd4ecb2e9101610c09565b6000546001600160a01b031633146114675760405162461bcd60e51b815260040161099890613e59565b6001600160a01b03811660009081526015602052604090205460ff16156114dc5760405162461bcd60e51b8152602060048201526024808201527f4c75636b79526f6f3a204163636f756e7420697320616c726561647920626c6f60448201526318dad95960e21b6064820152608401610998565b60135415611558576202a300601354426114f69190613f0e565b106115585760405162461bcd60e51b815260206004820152602c60248201527f4c75636b79526f6f3a2054696d6520746f20626c6f636b206163636f756e747360448201526b081a185cc8195e1c1a5c995960a21b6064820152608401610998565b6001600160a01b038116600081815260156020526040808220805460ff1916600190811790915590519092917f2f092974a5a89dc001cc04aa60bc3afe575e0b7444ef2197f7bb5714b51528ba91a350565b6000546001600160a01b031633146115d45760405162461bcd60e51b815260040161099890613e59565b600c546001600160a01b038581169116146116b8576001600160a01b0384166116515760405162461bcd60e51b815260206004820152602960248201527f4c75636b79526f6f3a20546865206c697175696469747957616c6c657420636160448201526806e6e6f7420626520360bc1b6064820152608401610998565b600c546040516e1b1a5c5d5a591a5d1e55d85b1b195d608a1b81526001600160a01b0391821691861690600f01604051908190038120906000805160206140cc83398151915290600090a4600c80546001600160a01b0319166001600160a01b0386161790555b600d546001600160a01b0384811691161461179c576001600160a01b0383166117355760405162461bcd60e51b815260206004820152602960248201527f4c75636b79526f6f3a20546865206d61726b6574696e6757616c6c657420636160448201526806e6e6f7420626520360bc1b6064820152608401610998565b600d546040516e1b585c9ad95d1a5b99d5d85b1b195d608a1b81526001600160a01b0391821691851690600f01604051908190038120906000805160206140cc83398151915290600090a4600d80546001600160a01b0319166001600160a01b0385161790555b600e546001600160a01b0383811691161461187c576001600160a01b0382166118175760405162461bcd60e51b815260206004820152602760248201527f4c75636b79526f6f3a20546865206275794261636b57616c6c65742063616e6e60448201526606f7420626520360cc1b6064820152608401610998565b600e546040516c189d5e509858dad5d85b1b195d609a1b81526001600160a01b0391821691841690600d01604051908190038120906000805160206140cc83398151915290600090a4600e80546001600160a01b0319166001600160a01b0384161790555b600f546001600160a01b0382811691161461195c576001600160a01b0381166118f75760405162461bcd60e51b815260206004820152602760248201527f4c75636b79526f6f3a205468652061697264726f7057616c6c65742063616e6e60448201526606f7420626520360cc1b6064820152608401610998565b600f546040516c185a5c991c9bdc15d85b1b195d609a1b81526001600160a01b0391821691831690600d01604051908190038120906000805160206140cc83398151915290600090a4600f80546001600160a01b0319166001600160a01b0383161790555b50505050565b6000546001600160a01b0316331461198c5760405162461bcd60e51b815260040161099890613e59565b6001600160a01b03821660009081526017602052604090205481151560ff9091161515036119cc5760405162461bcd60e51b815260040161099890613e8e565b6001600160a01b038216600081815260176020908152604091829020805460ff191685151590811790915591519182527f30098fc83ab61b1a98835d32c4e611adedccfc260eeef586bd329d48e8a40a409101610c09565b6000546001600160a01b03163314611a4e5760405162461bcd60e51b815260040161099890613e59565b611a5d60108686868686612886565b6040516b62617365466565732d42757960a01b8152600c015b6040805191829003822060ff8881168452878116602085015286811684840152858116606085015284166080840152905190917f9a3619059270a48acdf850268d8f96db29f0cfe103bc17b5b4040a05af4d4f67919081900360a00190a25050505050565b6000610c223384610dc885604051806060016040528060258152602001614134602591393360009081526004602090815260408083206001600160a01b038d16845290915290205491906127ca565b6000610c22338484612217565b6000546001600160a01b03163314611b615760405162461bcd60e51b815260040161099890613e59565b600b548103611bd85760405162461bcd60e51b815260206004820152603d60248201527f4c75636b79526f6f3a2043616e6e6f7420757064617465206d696e696d756d5460448201527f6f6b656e734265666f72655377617020746f2073616d652076616c75650000006064820152608401610998565b600b5460405182907f5b0491f767c1463bea8972339f785795be1a38784cc6483cf649cdcbb28c46b090600090a3600b55565b6000546001600160a01b03163314611c355760405162461bcd60e51b815260040161099890613e59565b611c4460108686868686612b6e565b6040516c18985cd95199595ccb54d95b1b609a1b8152600d01611a76565b6000546001600160a01b03163314611c8c5760405162461bcd60e51b815260040161099890613e59565b478110611cf45760405162461bcd60e51b815260206004820152603060248201527f4c75636b79526f6f3a2043616e6e6f742073656e64206d6f7265207468616e2060448201526f636f6e74726163742062616c616e636560801b6064820152608401610998565b600080546040516001600160a01b039091169083908381818185875af1925050503d8060008114611d41576040519150601f19603f3d011682016040523d82523d6000602084013e611d46565b606091505b505090508015611d84576040518281527fac2fafd34ac3a03cb5c729029e2b7e97cae2fc3dcad1563f8db67d877a0c7e009060200160405180910390a15b5050565b6000546001600160a01b03163314611db25760405162461bcd60e51b815260040161099890613e59565b6001546001600160a01b0390811690821603611e265760405162461bcd60e51b815260206004820152602d60248201527f4c75636b79526f6f3a2054686520726f7574657220616c72656164792068617360448201526c2074686174206164647265737360981b6064820152608401610998565b6001546040516001600160a01b03918216918316907f2afbff3ed601a8723765c7072d8ea8445e08f6f1874afd34a2b747a272c3ebad90600090a3600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611ead5760405162461bcd60e51b815260040161099890613e59565b6001600160a01b03821660009081526016602052604090205481151560ff909116151503611eed5760405162461bcd60e51b815260040161099890613e8e565b6001600160a01b038216600081815260166020908152604091829020805460ff191685151590811790915591519182527fa856ba9fdc54a5434b2359874c95612f520a2d7f858864ae98d15c1b2099ca8b9101610c09565b6000546001600160a01b03163314611f6f5760405162461bcd60e51b815260040161099890613e59565b6001600160a01b038216600081815260196020908152604091829020805460ff191685151590811790915591519182527fcb9f97b7b4b41413e5c8d418a8cf9a88db1cf34dee66b213d070faf881d9d3509101610c09565b6000546001600160a01b03163314611ff15760405162461bcd60e51b815260040161099890613e59565b6001600160a01b0381166120565760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610998565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000610f2a83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612e72565b6001600160a01b0383166121555760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610998565b6001600160a01b0382166121b65760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610998565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03831661227b5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610998565b6001600160a01b0382166122dd5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610998565b600081116123495760405162461bcd60e51b815260206004820152603360248201527f4c75636b79526f6f3a205472616e7366657220616d6f756e74206d7573742062604482015272652067726561746572207468616e207a65726f60681b6064820152608401610998565b612352836112a8565b8111156123b55760405162461bcd60e51b815260206004820152602b60248201527f4c75636b79526f6f3a2043616e6e6f74207472616e73666572206d6f7265207460448201526a68616e2062616c616e636560a81b6064820152608401610998565b6001600160a01b03831660009081526019602052604090205460ff161580156123f757506001600160a01b03821660009081526019602052604090205460ff16155b1561268e5760075460ff1661245f5760405162461bcd60e51b815260206004820152602860248201527f4c75636b79526f6f3a2054726164696e672069732063757272656e746c79206460448201526734b9b0b13632b21760c11b6064820152608401610998565b6001600160a01b03821660009081526015602052604090205460ff16156124c85760405162461bcd60e51b815260206004820152601c60248201527f4c75636b79526f6f3a204163636f756e7420697320626c6f636b6564000000006044820152606401610998565b6001600160a01b03831660009081526015602052604090205460ff16156125315760405162461bcd60e51b815260206004820152601c60248201527f4c75636b79526f6f3a204163636f756e7420697320626c6f636b6564000000006044820152606401610998565b6001600160a01b03821660009081526017602052604090205460ff1615801561257357506001600160a01b03831660009081526017602052604090205460ff16155b156125e3576009548111156125e35760405162461bcd60e51b815260206004820152603060248201527f4c75636b79526f6f3a2042757920616d6f756e7420657863656564732074686560448201526f1036b0bc2a3c213abca0b6b7bab73a1760811b6064820152608401610998565b6001600160a01b03821660009081526018602052604090205460ff1661268e5760085481612610846112a8565b61261a9190613f91565b111561268e5760405162461bcd60e51b815260206004820152603d60248201527f4c75636b79526f6f3a2045787065637465642077616c6c657420616d6f756e7460448201527f206578636565647320746865206d617857616c6c6574416d6f756e742e0000006064820152608401610998565b6001600160a01b038084166000908152601d60205260408082205492851682529020546126c39160ff90811691168486612ea0565b6000600b546126d1306112a8565b600754911115915060ff1680156126e55750805b80156126f45750600a5460ff16155b801561270b5750601e54600160281b900460ff1615155b801561272f57506001600160a01b0383166000908152601d602052604090205460ff165b1561275457600a805460ff19166001179055612749613108565b600a805460ff191690555b600a5460009060ff1615801561276c575060075460ff165b6001600160a01b03861660009081526016602052604090205490915060ff16806127ae57506001600160a01b03841660009081526016602052604090205460ff165b156127b7575060005b6127c38585858461338d565b5050505050565b600081848411156127ee5760405162461bcd60e51b81526004016109989190613c3a565b5060006127fb8486613f0e565b95945050505050565b6000806000612811613556565b909250905061282082826120b1565b9250505090565b6000806128348385613f91565b905083811015610f2a5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610998565b600286015460ff86811691161461290757604051706c69717569646974794665654f6e42757960781b815260110160405190819003812060028801548854919260ff9182169291891691600080516020614114833981519152916128ed9160481b90613fa4565b60405180910390a460028601805460ff191660ff87161790555b600286015460ff85811662010000909204161461299b57604051706d61726b6574696e674665654f6e42757960781b815260110160405190819003812060028801548854919260ff62010000909204821692918816916000805160206141148339815191529161297a9160481b90613fa4565b60405180910390a460028601805462ff000019166201000060ff8716021790555b600286015460ff848116600160201b9092041614612a32576040516e6275794261636b4665654f6e42757960881b8152600f0160405190819003812060028801548854919260ff600160201b9092048216929187169160008051602061411483398151915291612a0e9160481b90613fa4565b60405180910390a460028601805464ff000000001916600160201b60ff8616021790555b600286015460ff838116600160301b9092041614612acb576040516e61697264726f704665654f6e42757960881b8152600f0160405190819003812060028801548854919260ff600160301b9092048216929186169160008051602061411483398151915291612aa59160481b90613fa4565b60405180910390a460028601805466ff0000000000001916600160301b60ff8516021790555b600286015460ff828116600160401b9092041614612b66576040516e686f6c646572734665654f6e42757960881b8152600f0160405190819003812060028801548854919260ff600160401b9092048216929185169160008051602061411483398151915291612b3e9160481b90613fa4565b60405180910390a460028601805468ff00000000000000001916600160401b60ff8416021790555b505050505050565b600286015460ff8681166101009092041614612bff57604051711b1a5c5d5a591a5d1e51995953db94d95b1b60721b815260120160405190819003812060028801548854919260ff6101009092048216929189169160008051602061411483398151915291612be09160481b90613fa4565b60405180910390a460028601805461ff00191661010060ff8816021790555b600286015460ff85811663010000009092041614612c9857604051711b585c9ad95d1a5b99d1995953db94d95b1b60721b815260120160405190819003812060028801548854919260ff63010000009092048216929188169160008051602061411483398151915291612c759160481b90613fa4565b60405180910390a460028601805463ff0000001916630100000060ff8716021790555b600286015460ff848116600160281b9092041614612d31576040516f189d5e509858dad1995953db94d95b1b60821b815260100160405190819003812060028801548854919260ff600160281b9092048216929187169160008051602061411483398151915291612d0c9160481b90613fa4565b60405180910390a460028601805465ff00000000001916600160281b60ff8616021790555b600286015460ff838116600160381b9092041614612dcc576040516f185a5c991c9bdc11995953db94d95b1b60821b815260100160405190819003812060028801548854919260ff600160381b9092048216929186169160008051602061411483398151915291612da59160481b90613fa4565b60405180910390a460028601805467ff000000000000001916600160381b60ff8516021790555b600286015460ff828116600160481b9092041614612b66576040516f1a1bdb19195c9cd1995953db94d95b1b60821b815260100160405190819003812060028801548854919260ff600160481b9092048216929185169160008051602061411483398151915291612e409160481b90613fa4565b60405180910390a460028601805460ff8316600160481b0269ff00000000000000000019909116179055505050505050565b60008183612e935760405162461bcd60e51b81526004016109989190613c3a565b5060006127fb8486613f66565b601e805464ffffffffff191690558315612f4f57600560145443612ec49190613f0e565b11612edb57601e805460ff19166064179055612f4f565b601254601e805460ff80841661ffff1990921691909117610100620100008086048416919091029190911763ffff00001916600160201b80860484169290920263ff000000191617600160301b850483166301000000021764ff000000001916600160401b90940491909116029190911790555b8215612fca57601254601e805461010080840460ff90811661ffff199093169290921763010000008086048416929092021763ffff00001916600160281b85048316620100000263ff000000191617600160381b85048316919091021764ff000000001916600160481b90930416600160201b029190911790555b82158015612fd6575083155b801561301c57506001600160a01b0381166000908152601b602052604090205460ff168061301c57506001600160a01b0382166000908152601b602052604090205460ff165b1561309657601254601e805461010080840460ff90811661ffff199093169290921763010000008086048416929092021763ffff00001916600160281b85048316620100000263ff000000191617600160381b85048316919091021764ff000000001916600160481b90930416600160201b029190911790555b601e5460ff600160201b8204811691630100000081048216916201000082048116916130ca91610100820481169116613fbb565b6130d49190613fbb565b6130de9190613fbb565b6130e89190613fbb565b601e60056101000a81548160ff021916908360ff16021790555050505050565b6000613113306112a8565b601e54909150479060ff600160281b820481169181811691610100820481169162010000810482169163010000008204811691600160201b900416600060028761315d888c613f7a565b6131679190613f66565b6131719190613f66565b9050600061317f828b613f0e565b905061318a81613703565b60006131968a47613f0e565b90506000846131a660028b613fd4565b6131b0908c613ff6565b6131ba9190613ff6565b60ff16905060006002828b60ff16856131d39190613f7a565b6131dd9190613f66565b6131e79190613f66565b90506000826131f960ff8c1686613f7a565b6132039190613f66565b905060008361321560ff8c1687613f7a565b61321f9190613f66565b905060008161322e8486613f91565b6132389190613f91565b6132429087613f0e565b600d5490915061325b906001600160a01b031684613853565b600e54613271906001600160a01b031683613853565b600f54613287906001600160a01b031682613853565b87156132d9576132978885613971565b60408051888152602081018690529081018990527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15b8d601e60056101000a81548160ff021916908360ff1602179055508c601e60006101000a81548160ff021916908360ff1602179055508b601e60016101000a81548160ff021916908360ff1602179055508a601e60026101000a81548160ff021916908360ff16021790555089601e60036101000a81548160ff021916908360ff16021790555088601e60046101000a81548160ff021916908360ff16021790555050505050505050505050505050505050565b600080600061339c8585613a1f565b9250925092506000806000806133bb8987876133b6612804565b613ae9565b6001600160a01b038f166000908152601a60205260409020549397509195509350915060ff1615613424576001600160a01b038b1660009081526003602052604090205461340a908a90613f0e565b6001600160a01b038c166000908152600360205260409020555b6001600160a01b038a166000908152601a602052604090205460ff1615613483576001600160a01b038a16600090815260036020526040902054613469908890613f91565b6001600160a01b038b166000908152600360205260409020555b6001600160a01b038b166000908152600260205260409020546134a7908590613f0e565b6001600160a01b03808d1660009081526002602052604080822093909355908c16815220546134d7908490613f91565b6001600160a01b038b166000908152600260205260409020556134fc82878388613b41565b896001600160a01b03168b6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8960405161354191815260200190565b60405180910390a35050505050505050505050565b60055460009081906c7e37be2022c0914b2680000000825b601c548110156136bd578260026000601c848154811061359057613590613ee2565b60009182526020808320909101546001600160a01b0316835282019290925260400190205411806135fb57508160036000601c84815481106135d4576135d4613ee2565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561361b575050600554936c7e37be2022c0914b26800000009350915050565b60026000601c838154811061363257613632613ee2565b60009182526020808320909101546001600160a01b031683528201929092526040019020546136619084613f0e565b925060036000601c838154811061367a5761367a613ee2565b60009182526020808320909101546001600160a01b031683528201929092526040019020546136a99083613f0e565b9150806136b581613f37565b91505061356e565b506c7e37be2022c0914b26800000006005546136d99190613f66565b8210156136fa575050600554926c7e37be2022c0914b268000000092509050565b90939092509050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061373857613738613ee2565b6001600160a01b03928316602091820292909201810191909152600154604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015613791573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137b5919061400f565b816001815181106137c8576137c8613ee2565b6001600160a01b0392831660209182029290920101526001546137ee91309116846120f3565b6001805460405163791ac94760e01b81526001600160a01b039091169163791ac9479161382591869186903090429060040161402c565b600060405180830381600087803b15801561383f57600080fd5b505af1158015612b66573d6000803e3d6000fd5b804710156138a35760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610998565b6000826001600160a01b03168260405160006040518083038185875af1925050503d80600081146138f0576040519150601f19603f3d011682016040523d82523d6000602084013e6138f5565b606091505b505090508061396c5760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610998565b505050565b6001546139899030906001600160a01b0316846120f3565b60018054600c5460405163f305d71960e01b8152306004820152602481018690526044810184905260648101939093526001600160a01b0390811660848401524260a4840152169063f305d71990839060c40160606040518083038185885af11580156139fa573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906127c3919061409d565b600080600083613a3757508391506000905080613ae2565b601e54600090606490613a5490600160201b900460ff1688613f7a565b613a5e9190613f66565b601e5490915060009060649060ff62010000820481169163010000008104821691613a9191610100810482169116613fbb565b613a9b9190613fbb565b613aa59190613fbb565b613ab29060ff1689613f7a565b613abc9190613f66565b90506000613aca8284613f91565b613ad49089613f0e565b95509193509150613ae29050565b9250925092565b600080808080613af9868a613f7a565b90506000613b07878a613f7a565b90506000613b15888a613f7a565b90506000613b238284613f91565b613b2d9085613f0e565b939c939b5091995097509095505050505050565b8360056000828254613b539190613f0e565b925050819055508260066000828254613b6c9190613f91565b9091555050306000908152601a602052604090205460ff1615613bae573060009081526003602052604081208054839290613ba8908490613f91565b90915550505b3060009081526002602052604081208054849290613bcd908490613f91565b909155505050505050565b6001600160a01b0381168114613bed57600080fd5b50565b80358015158114613c0057600080fd5b919050565b60008060408385031215613c1857600080fd5b8235613c2381613bd8565b9150613c3160208401613bf0565b90509250929050565b600060208083528351808285015260005b81811015613c6757858101830151858201604001528201613c4b565b506000604082860101526040601f19601f8301168501019250505092915050565b60008060408385031215613c9b57600080fd5b8235613ca681613bd8565b946020939093013593505050565b600060208284031215613cc657600080fd5b5035919050565b600080600060608486031215613ce257600080fd5b8335613ced81613bd8565b92506020840135613cfd81613bd8565b929592945050506040919091013590565b60008060408385031215613d2157600080fd5b82359150613c3160208401613bf0565b600060208284031215613d4357600080fd5b8135610f2a81613bd8565b60008060008060808587031215613d6457600080fd5b8435613d6f81613bd8565b93506020850135613d7f81613bd8565b92506040850135613d8f81613bd8565b91506060850135613d9f81613bd8565b939692955090935050565b803560ff81168114613c0057600080fd5b600080600080600060a08688031215613dd357600080fd5b613ddc86613daa565b9450613dea60208701613daa565b9350613df860408701613daa565b9250613e0660608701613daa565b9150613e1460808701613daa565b90509295509295909350565b60008060408385031215613e3357600080fd5b8235613e3e81613bd8565b91506020830135613e4e81613bd8565b809150509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526034908201527f4c75636b79526f6f3a204163636f756e7420697320616c7265616479207468656040820152732076616c7565206f6620276578636c756465642760601b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b81810381811115610c2657610c26613ef8565b634e487b7160e01b600052603160045260246000fd5b600060018201613f4957613f49613ef8565b5060010190565b634e487b7160e01b600052601260045260246000fd5b600082613f7557613f75613f50565b500490565b8082028115828204841417610c2657610c26613ef8565b80820180821115610c2657610c26613ef8565b68ffffffffffffffffff1991909116815260200190565b60ff8181168382160190811115610c2657610c26613ef8565b600060ff831680613fe757613fe7613f50565b8060ff84160491505092915050565b60ff8281168282160390811115610c2657610c26613ef8565b60006020828403121561402157600080fd5b8151610f2a81613bd8565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561407c5784516001600160a01b031683529383019391830191600101614057565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156140b257600080fd5b835192506020840151915060408401519050925092509256fe4af24be54adc5e716fbcaa3fca0ad593e28dff90dffd49487c0a33b1547c6b5245524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365e4c649bdef80a9884d04138447ed68ee6c8a76c0f3f220dfa855dec4ffadc63845524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220d4073caf4a0ce1163ab25a3589ad8df2ea0bac56aede69f3694a175c77740c1864736f6c63430008110033

Deployed Bytecode

0x6080604052600436106102975760003560e01c80637c0a893d1161015a578063b1ba39ea116100c1578063d2d7ad831161007a578063d2d7ad831461086c578063d322157614610882578063d4698016146108a2578063dd62ed3e146108c2578063f2fde38b14610908578063fe0175351461092857600080fd5b8063b1ba39ea1461074b578063b62496f51461076b578063ba4f5de61461079b578063bea9849e146107bb578063c0246668146107db578063cd43e228146107fb57600080fd5b80639fad9683116101135780639fad968314610695578063a14779c9146106b5578063a457c2d7146106d5578063a9059cbb146106f5578063aa4bde2814610715578063aee50b1e1461072b57600080fd5b80637c0a893d146105d557806383672f3e146105f5578063880bcbc1146106155780638c0b5e22146106355780638da5cb5b1461064b57806395d89b411461066957600080fd5b80632d838119116101fe57806349bd5a5e116101b757806349bd5a5e1461050c5780634d78fdc61461054057806370a0823114610560578063715018a61461058057806375f0a87414610595578063781edb3c146105b557600080fd5b80632d8381191461045b578063313ce5671461047b57806334cf1fea1461049757806339509351146104ac5780634549b039146104cc57806345a42329146104ec57600080fd5b80631694505e116102505780631694505e1461038357806318160ddd146103bb5780631cd348c0146103db5780631e293c10146103fb57806323b872dd1461041b57806327a14fc21461043b57600080fd5b80630483f7a0146102a3578063064a59d0146102c557806306fdde03146102f4578063095ea7b31461032f5780630bd05b691461034f57806313114a9d1461036457600080fd5b3661029e57005b600080fd5b3480156102af57600080fd5b506102c36102be366004613c05565b61096e565b005b3480156102d157600080fd5b506007546102df9060ff1681565b60405190151581526020015b60405180910390f35b34801561030057600080fd5b506040805180820190915260098152684c55434b5920524f4f60b81b60208201525b6040516102eb9190613c3a565b34801561033b57600080fd5b506102df61034a366004613c88565b610c15565b34801561035b57600080fd5b506102c3610c2c565b34801561037057600080fd5b506006545b6040519081526020016102eb565b34801561038f57600080fd5b506001546103a3906001600160a01b031681565b6040516001600160a01b0390911681526020016102eb565b3480156103c757600080fd5b506c7e37be2022c0914b2680000000610375565b3480156103e757600080fd5b50600e546103a3906001600160a01b031681565b34801561040757600080fd5b506102c3610416366004613cb4565b610ca6565b34801561042757600080fd5b506102df610436366004613ccd565b610d6e565b34801561044757600080fd5b506102c3610456366004613cb4565b610dd7565b34801561046757600080fd5b50610375610476366004613cb4565b610ea3565b34801561048757600080fd5b50604051601281526020016102eb565b3480156104a357600080fd5b506102c3610f31565b3480156104b857600080fd5b506102df6104c7366004613c88565b610f95565b3480156104d857600080fd5b506103756104e7366004613d0e565b610fcb565b3480156104f857600080fd5b506102c3610507366004613c05565b6110b1565b34801561051857600080fd5b506103a37f000000000000000000000000ff578ac8ef9df9d02368842b7b0810a14e770d7181565b34801561054c57600080fd5b506102c361055b366004613d31565b6111c9565b34801561056c57600080fd5b5061037561057b366004613d31565b6112a8565b34801561058c57600080fd5b506102c3611307565b3480156105a157600080fd5b50600d546103a3906001600160a01b031681565b3480156105c157600080fd5b506102c36105d0366004613c05565b61137b565b3480156105e157600080fd5b506102c36105f0366004613d31565b61143d565b34801561060157600080fd5b506102c3610610366004613d4e565b6115aa565b34801561062157600080fd5b506102c3610630366004613c05565b611962565b34801561064157600080fd5b5061037560095481565b34801561065757600080fd5b506000546001600160a01b03166103a3565b34801561067557600080fd5b50604080518082019091526003815262524f4f60e81b6020820152610322565b3480156106a157600080fd5b506102c36106b0366004613dbb565b611a24565b3480156106c157600080fd5b50600f546103a3906001600160a01b031681565b3480156106e157600080fd5b506102df6106f0366004613c88565b611adb565b34801561070157600080fd5b506102df610710366004613c88565b611b2a565b34801561072157600080fd5b5061037560085481565b34801561073757600080fd5b506102c3610746366004613cb4565b611b37565b34801561075757600080fd5b506102c3610766366004613dbb565b611c0b565b34801561077757600080fd5b506102df610786366004613d31565b601d6020526000908152604090205460ff1681565b3480156107a757600080fd5b506102c36107b6366004613cb4565b611c62565b3480156107c757600080fd5b506102c36107d6366004613d31565b611d88565b3480156107e757600080fd5b506102c36107f6366004613c05565b611e83565b34801561080757600080fd5b5060125460ff80821691620100008104821691600160201b8204811691600160301b8104821691600160401b909104165b6040805160ff968716815294861660208601529285169284019290925283166060830152909116608082015260a0016102eb565b34801561087857600080fd5b50610375600b5481565b34801561088e57600080fd5b506102c361089d366004613c05565b611f45565b3480156108ae57600080fd5b50600c546103a3906001600160a01b031681565b3480156108ce57600080fd5b506103756108dd366004613e20565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b34801561091457600080fd5b506102c3610923366004613d31565b611fc7565b34801561093457600080fd5b5060125460ff610100820481169163010000008104821691600160281b8204811691600160381b8104821691600160481b90910416610838565b6000546001600160a01b031633146109a15760405162461bcd60e51b815260040161099890613e59565b60405180910390fd5b6001600160a01b0382166000908152601a602052604090205481151560ff9091161515036109e15760405162461bcd60e51b815260040161099890613e8e565b8015610aa9576001600160a01b03821660009081526002602052604090205415610a41576001600160a01b038216600090815260026020526040902054610a2790610ea3565b6001600160a01b0383166000908152600360205260409020555b6001600160a01b0382166000818152601a60205260408120805460ff1916841515179055601c805460018101825591527f0e4562a10381dec21b205ed72637e6b1b523bdd0e4d4d50af5cd23dd4500a2110180546001600160a01b0319169091179055610bcc565b60005b601c54811015610bca57826001600160a01b0316601c8281548110610ad357610ad3613ee2565b6000918252602090912001546001600160a01b031603610bb857601c8054610afd90600190613f0e565b81548110610b0d57610b0d613ee2565b600091825260209091200154601c80546001600160a01b039092169183908110610b3957610b39613ee2565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559185168152600382526040808220829055601a90925220805460ff19169055601c805480610b9157610b91613f21565b600082815260209020810160001990810180546001600160a01b0319169055019055610bca565b80610bc281613f37565b915050610aac565b505b816001600160a01b03167fcb9d59a6e9da25dee1a9ddef81481537dfd94e20b1593b58b08193bea9e9baa982604051610c09911515815260200190565b60405180910390a25050565b6000610c223384846120f3565b5060015b92915050565b6000546001600160a01b03163314610c565760405162461bcd60e51b815260040161099890613e59565b6007805460ff19166001179055601354600003610c765742601355436014555b6040516000906001907fa0f694e30e34d9f05d12691b612650129ed8888d1f93b25fa0cd92e4416a8338908390a3565b6000546001600160a01b03163314610cd05760405162461bcd60e51b815260040161099890613e59565b6009548103610d3b5760405162461bcd60e51b815260206004820152603160248201527f4c75636b79526f6f3a2043616e6e6f7420757064617465206d61785478416d6f604482015270756e7420746f2073616d652076616c756560781b6064820152608401610998565b60095460405182907f75f1c17bf623f0f7a2bd91ba61e89dff216960370e3e9a46b250750d03e4215e90600090a3600955565b6000610d7b848484612217565b610dcd8433610dc8856040518060600160405280602881526020016140ec602891396001600160a01b038a16600090815260046020908152604080832033845290915290205491906127ca565b6120f3565b5060019392505050565b6000546001600160a01b03163314610e015760405162461bcd60e51b815260040161099890613e59565b6008548103610e705760405162461bcd60e51b815260206004820152603560248201527f4c75636b79526f6f3a2043616e6e6f7420757064617465206d617857616c6c6560448201527474416d6f756e7420746f2073616d652076616c756560581b6064820152608401610998565b60085460405182907f6d3e257c59a11116c3e97bb144abf5ba1a6a9da6bd509192ecf0d48f7be1fc7690600090a3600855565b6000600554821115610f145760405162461bcd60e51b815260206004820152603460248201527f4c75636b79526f6f3a20416d6f756e74206d757374206265206c657373207468604482015273616e20746f74616c207265666c656374696f6e7360601b6064820152608401610998565b6000610f1e612804565b9050610f2a8184613f66565b9392505050565b6000546001600160a01b03163314610f5b5760405162461bcd60e51b815260040161099890613e59565b6007805460ff191690556040516001906000907fa0f694e30e34d9f05d12691b612650129ed8888d1f93b25fa0cd92e4416a8338908290a3565b3360008181526004602090815260408083206001600160a01b03871684529091528120549091610c22918590610dc89086612827565b60006c7e37be2022c0914b268000000083111561103c5760405162461bcd60e51b815260206004820152602960248201527f4c75636b79526f6f3a20416d6f756e74206d757374206265206c657373207468604482015268616e20737570706c7960b81b6064820152608401610998565b6000611046612804565b905060006110548286613f7a565b905083611064579150610c269050565b601e54600090839060649061108390600160281b900460ff1689613f7a565b61108d9190613f66565b6110979190613f7a565b905060006110a58284613f0e565b9450610c269350505050565b6000546001600160a01b031633146110db5760405162461bcd60e51b815260040161099890613e59565b6001600160a01b0382166000908152601b602052604090205481151560ff9091161515036111715760405162461bcd60e51b815260206004820152603a60248201527f4c75636b79526f6f3a205468652073656c65637465642077616c6c657420697360448201527f20616c72656164792073657420746f207468652076616c7565200000000000006064820152608401610998565b6001600160a01b0382166000818152601b6020908152604091829020805460ff191685151590811790915591519182527fe70512a569cf898db2e20aa3b4cc3f0dd13377b82a493840d326ab5a196668779101610c09565b6000546001600160a01b031633146111f35760405162461bcd60e51b815260040161099890613e59565b6001600160a01b03811660009081526015602052604090205460ff1661125b5760405162461bcd60e51b815260206004820181905260248201527f4c75636b79526f6f3a204163636f756e74206973206e6f7420626c636f6b65646044820152606401610998565b6001600160a01b038116600081815260156020526040808220805460ff19169055519091907f2f092974a5a89dc001cc04aa60bc3afe575e0b7444ef2197f7bb5714b51528ba908390a350565b6001600160a01b0381166000908152601a602052604081205460ff16156112e557506001600160a01b031660009081526003602052604090205490565b6001600160a01b038216600090815260026020526040902054610c2690610ea3565b6000546001600160a01b031633146113315760405162461bcd60e51b815260040161099890613e59565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146113a55760405162461bcd60e51b815260040161099890613e59565b6001600160a01b03821660009081526018602052604090205481151560ff9091161515036113e55760405162461bcd60e51b815260040161099890613e8e565b6001600160a01b038216600081815260186020908152604091829020805460ff191685151590811790915591519182527ff5133f371b17bf21ce0df4ae2c1b6e11ca7c2f27257eb55282edb1ccfd4ecb2e9101610c09565b6000546001600160a01b031633146114675760405162461bcd60e51b815260040161099890613e59565b6001600160a01b03811660009081526015602052604090205460ff16156114dc5760405162461bcd60e51b8152602060048201526024808201527f4c75636b79526f6f3a204163636f756e7420697320616c726561647920626c6f60448201526318dad95960e21b6064820152608401610998565b60135415611558576202a300601354426114f69190613f0e565b106115585760405162461bcd60e51b815260206004820152602c60248201527f4c75636b79526f6f3a2054696d6520746f20626c6f636b206163636f756e747360448201526b081a185cc8195e1c1a5c995960a21b6064820152608401610998565b6001600160a01b038116600081815260156020526040808220805460ff1916600190811790915590519092917f2f092974a5a89dc001cc04aa60bc3afe575e0b7444ef2197f7bb5714b51528ba91a350565b6000546001600160a01b031633146115d45760405162461bcd60e51b815260040161099890613e59565b600c546001600160a01b038581169116146116b8576001600160a01b0384166116515760405162461bcd60e51b815260206004820152602960248201527f4c75636b79526f6f3a20546865206c697175696469747957616c6c657420636160448201526806e6e6f7420626520360bc1b6064820152608401610998565b600c546040516e1b1a5c5d5a591a5d1e55d85b1b195d608a1b81526001600160a01b0391821691861690600f01604051908190038120906000805160206140cc83398151915290600090a4600c80546001600160a01b0319166001600160a01b0386161790555b600d546001600160a01b0384811691161461179c576001600160a01b0383166117355760405162461bcd60e51b815260206004820152602960248201527f4c75636b79526f6f3a20546865206d61726b6574696e6757616c6c657420636160448201526806e6e6f7420626520360bc1b6064820152608401610998565b600d546040516e1b585c9ad95d1a5b99d5d85b1b195d608a1b81526001600160a01b0391821691851690600f01604051908190038120906000805160206140cc83398151915290600090a4600d80546001600160a01b0319166001600160a01b0385161790555b600e546001600160a01b0383811691161461187c576001600160a01b0382166118175760405162461bcd60e51b815260206004820152602760248201527f4c75636b79526f6f3a20546865206275794261636b57616c6c65742063616e6e60448201526606f7420626520360cc1b6064820152608401610998565b600e546040516c189d5e509858dad5d85b1b195d609a1b81526001600160a01b0391821691841690600d01604051908190038120906000805160206140cc83398151915290600090a4600e80546001600160a01b0319166001600160a01b0384161790555b600f546001600160a01b0382811691161461195c576001600160a01b0381166118f75760405162461bcd60e51b815260206004820152602760248201527f4c75636b79526f6f3a205468652061697264726f7057616c6c65742063616e6e60448201526606f7420626520360cc1b6064820152608401610998565b600f546040516c185a5c991c9bdc15d85b1b195d609a1b81526001600160a01b0391821691831690600d01604051908190038120906000805160206140cc83398151915290600090a4600f80546001600160a01b0319166001600160a01b0383161790555b50505050565b6000546001600160a01b0316331461198c5760405162461bcd60e51b815260040161099890613e59565b6001600160a01b03821660009081526017602052604090205481151560ff9091161515036119cc5760405162461bcd60e51b815260040161099890613e8e565b6001600160a01b038216600081815260176020908152604091829020805460ff191685151590811790915591519182527f30098fc83ab61b1a98835d32c4e611adedccfc260eeef586bd329d48e8a40a409101610c09565b6000546001600160a01b03163314611a4e5760405162461bcd60e51b815260040161099890613e59565b611a5d60108686868686612886565b6040516b62617365466565732d42757960a01b8152600c015b6040805191829003822060ff8881168452878116602085015286811684840152858116606085015284166080840152905190917f9a3619059270a48acdf850268d8f96db29f0cfe103bc17b5b4040a05af4d4f67919081900360a00190a25050505050565b6000610c223384610dc885604051806060016040528060258152602001614134602591393360009081526004602090815260408083206001600160a01b038d16845290915290205491906127ca565b6000610c22338484612217565b6000546001600160a01b03163314611b615760405162461bcd60e51b815260040161099890613e59565b600b548103611bd85760405162461bcd60e51b815260206004820152603d60248201527f4c75636b79526f6f3a2043616e6e6f7420757064617465206d696e696d756d5460448201527f6f6b656e734265666f72655377617020746f2073616d652076616c75650000006064820152608401610998565b600b5460405182907f5b0491f767c1463bea8972339f785795be1a38784cc6483cf649cdcbb28c46b090600090a3600b55565b6000546001600160a01b03163314611c355760405162461bcd60e51b815260040161099890613e59565b611c4460108686868686612b6e565b6040516c18985cd95199595ccb54d95b1b609a1b8152600d01611a76565b6000546001600160a01b03163314611c8c5760405162461bcd60e51b815260040161099890613e59565b478110611cf45760405162461bcd60e51b815260206004820152603060248201527f4c75636b79526f6f3a2043616e6e6f742073656e64206d6f7265207468616e2060448201526f636f6e74726163742062616c616e636560801b6064820152608401610998565b600080546040516001600160a01b039091169083908381818185875af1925050503d8060008114611d41576040519150601f19603f3d011682016040523d82523d6000602084013e611d46565b606091505b505090508015611d84576040518281527fac2fafd34ac3a03cb5c729029e2b7e97cae2fc3dcad1563f8db67d877a0c7e009060200160405180910390a15b5050565b6000546001600160a01b03163314611db25760405162461bcd60e51b815260040161099890613e59565b6001546001600160a01b0390811690821603611e265760405162461bcd60e51b815260206004820152602d60248201527f4c75636b79526f6f3a2054686520726f7574657220616c72656164792068617360448201526c2074686174206164647265737360981b6064820152608401610998565b6001546040516001600160a01b03918216918316907f2afbff3ed601a8723765c7072d8ea8445e08f6f1874afd34a2b747a272c3ebad90600090a3600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611ead5760405162461bcd60e51b815260040161099890613e59565b6001600160a01b03821660009081526016602052604090205481151560ff909116151503611eed5760405162461bcd60e51b815260040161099890613e8e565b6001600160a01b038216600081815260166020908152604091829020805460ff191685151590811790915591519182527fa856ba9fdc54a5434b2359874c95612f520a2d7f858864ae98d15c1b2099ca8b9101610c09565b6000546001600160a01b03163314611f6f5760405162461bcd60e51b815260040161099890613e59565b6001600160a01b038216600081815260196020908152604091829020805460ff191685151590811790915591519182527fcb9f97b7b4b41413e5c8d418a8cf9a88db1cf34dee66b213d070faf881d9d3509101610c09565b6000546001600160a01b03163314611ff15760405162461bcd60e51b815260040161099890613e59565b6001600160a01b0381166120565760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610998565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000610f2a83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612e72565b6001600160a01b0383166121555760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610998565b6001600160a01b0382166121b65760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610998565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03831661227b5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610998565b6001600160a01b0382166122dd5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610998565b600081116123495760405162461bcd60e51b815260206004820152603360248201527f4c75636b79526f6f3a205472616e7366657220616d6f756e74206d7573742062604482015272652067726561746572207468616e207a65726f60681b6064820152608401610998565b612352836112a8565b8111156123b55760405162461bcd60e51b815260206004820152602b60248201527f4c75636b79526f6f3a2043616e6e6f74207472616e73666572206d6f7265207460448201526a68616e2062616c616e636560a81b6064820152608401610998565b6001600160a01b03831660009081526019602052604090205460ff161580156123f757506001600160a01b03821660009081526019602052604090205460ff16155b1561268e5760075460ff1661245f5760405162461bcd60e51b815260206004820152602860248201527f4c75636b79526f6f3a2054726164696e672069732063757272656e746c79206460448201526734b9b0b13632b21760c11b6064820152608401610998565b6001600160a01b03821660009081526015602052604090205460ff16156124c85760405162461bcd60e51b815260206004820152601c60248201527f4c75636b79526f6f3a204163636f756e7420697320626c6f636b6564000000006044820152606401610998565b6001600160a01b03831660009081526015602052604090205460ff16156125315760405162461bcd60e51b815260206004820152601c60248201527f4c75636b79526f6f3a204163636f756e7420697320626c6f636b6564000000006044820152606401610998565b6001600160a01b03821660009081526017602052604090205460ff1615801561257357506001600160a01b03831660009081526017602052604090205460ff16155b156125e3576009548111156125e35760405162461bcd60e51b815260206004820152603060248201527f4c75636b79526f6f3a2042757920616d6f756e7420657863656564732074686560448201526f1036b0bc2a3c213abca0b6b7bab73a1760811b6064820152608401610998565b6001600160a01b03821660009081526018602052604090205460ff1661268e5760085481612610846112a8565b61261a9190613f91565b111561268e5760405162461bcd60e51b815260206004820152603d60248201527f4c75636b79526f6f3a2045787065637465642077616c6c657420616d6f756e7460448201527f206578636565647320746865206d617857616c6c6574416d6f756e742e0000006064820152608401610998565b6001600160a01b038084166000908152601d60205260408082205492851682529020546126c39160ff90811691168486612ea0565b6000600b546126d1306112a8565b600754911115915060ff1680156126e55750805b80156126f45750600a5460ff16155b801561270b5750601e54600160281b900460ff1615155b801561272f57506001600160a01b0383166000908152601d602052604090205460ff165b1561275457600a805460ff19166001179055612749613108565b600a805460ff191690555b600a5460009060ff1615801561276c575060075460ff165b6001600160a01b03861660009081526016602052604090205490915060ff16806127ae57506001600160a01b03841660009081526016602052604090205460ff165b156127b7575060005b6127c38585858461338d565b5050505050565b600081848411156127ee5760405162461bcd60e51b81526004016109989190613c3a565b5060006127fb8486613f0e565b95945050505050565b6000806000612811613556565b909250905061282082826120b1565b9250505090565b6000806128348385613f91565b905083811015610f2a5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610998565b600286015460ff86811691161461290757604051706c69717569646974794665654f6e42757960781b815260110160405190819003812060028801548854919260ff9182169291891691600080516020614114833981519152916128ed9160481b90613fa4565b60405180910390a460028601805460ff191660ff87161790555b600286015460ff85811662010000909204161461299b57604051706d61726b6574696e674665654f6e42757960781b815260110160405190819003812060028801548854919260ff62010000909204821692918816916000805160206141148339815191529161297a9160481b90613fa4565b60405180910390a460028601805462ff000019166201000060ff8716021790555b600286015460ff848116600160201b9092041614612a32576040516e6275794261636b4665654f6e42757960881b8152600f0160405190819003812060028801548854919260ff600160201b9092048216929187169160008051602061411483398151915291612a0e9160481b90613fa4565b60405180910390a460028601805464ff000000001916600160201b60ff8616021790555b600286015460ff838116600160301b9092041614612acb576040516e61697264726f704665654f6e42757960881b8152600f0160405190819003812060028801548854919260ff600160301b9092048216929186169160008051602061411483398151915291612aa59160481b90613fa4565b60405180910390a460028601805466ff0000000000001916600160301b60ff8516021790555b600286015460ff828116600160401b9092041614612b66576040516e686f6c646572734665654f6e42757960881b8152600f0160405190819003812060028801548854919260ff600160401b9092048216929185169160008051602061411483398151915291612b3e9160481b90613fa4565b60405180910390a460028601805468ff00000000000000001916600160401b60ff8416021790555b505050505050565b600286015460ff8681166101009092041614612bff57604051711b1a5c5d5a591a5d1e51995953db94d95b1b60721b815260120160405190819003812060028801548854919260ff6101009092048216929189169160008051602061411483398151915291612be09160481b90613fa4565b60405180910390a460028601805461ff00191661010060ff8816021790555b600286015460ff85811663010000009092041614612c9857604051711b585c9ad95d1a5b99d1995953db94d95b1b60721b815260120160405190819003812060028801548854919260ff63010000009092048216929188169160008051602061411483398151915291612c759160481b90613fa4565b60405180910390a460028601805463ff0000001916630100000060ff8716021790555b600286015460ff848116600160281b9092041614612d31576040516f189d5e509858dad1995953db94d95b1b60821b815260100160405190819003812060028801548854919260ff600160281b9092048216929187169160008051602061411483398151915291612d0c9160481b90613fa4565b60405180910390a460028601805465ff00000000001916600160281b60ff8616021790555b600286015460ff838116600160381b9092041614612dcc576040516f185a5c991c9bdc11995953db94d95b1b60821b815260100160405190819003812060028801548854919260ff600160381b9092048216929186169160008051602061411483398151915291612da59160481b90613fa4565b60405180910390a460028601805467ff000000000000001916600160381b60ff8516021790555b600286015460ff828116600160481b9092041614612b66576040516f1a1bdb19195c9cd1995953db94d95b1b60821b815260100160405190819003812060028801548854919260ff600160481b9092048216929185169160008051602061411483398151915291612e409160481b90613fa4565b60405180910390a460028601805460ff8316600160481b0269ff00000000000000000019909116179055505050505050565b60008183612e935760405162461bcd60e51b81526004016109989190613c3a565b5060006127fb8486613f66565b601e805464ffffffffff191690558315612f4f57600560145443612ec49190613f0e565b11612edb57601e805460ff19166064179055612f4f565b601254601e805460ff80841661ffff1990921691909117610100620100008086048416919091029190911763ffff00001916600160201b80860484169290920263ff000000191617600160301b850483166301000000021764ff000000001916600160401b90940491909116029190911790555b8215612fca57601254601e805461010080840460ff90811661ffff199093169290921763010000008086048416929092021763ffff00001916600160281b85048316620100000263ff000000191617600160381b85048316919091021764ff000000001916600160481b90930416600160201b029190911790555b82158015612fd6575083155b801561301c57506001600160a01b0381166000908152601b602052604090205460ff168061301c57506001600160a01b0382166000908152601b602052604090205460ff165b1561309657601254601e805461010080840460ff90811661ffff199093169290921763010000008086048416929092021763ffff00001916600160281b85048316620100000263ff000000191617600160381b85048316919091021764ff000000001916600160481b90930416600160201b029190911790555b601e5460ff600160201b8204811691630100000081048216916201000082048116916130ca91610100820481169116613fbb565b6130d49190613fbb565b6130de9190613fbb565b6130e89190613fbb565b601e60056101000a81548160ff021916908360ff16021790555050505050565b6000613113306112a8565b601e54909150479060ff600160281b820481169181811691610100820481169162010000810482169163010000008204811691600160201b900416600060028761315d888c613f7a565b6131679190613f66565b6131719190613f66565b9050600061317f828b613f0e565b905061318a81613703565b60006131968a47613f0e565b90506000846131a660028b613fd4565b6131b0908c613ff6565b6131ba9190613ff6565b60ff16905060006002828b60ff16856131d39190613f7a565b6131dd9190613f66565b6131e79190613f66565b90506000826131f960ff8c1686613f7a565b6132039190613f66565b905060008361321560ff8c1687613f7a565b61321f9190613f66565b905060008161322e8486613f91565b6132389190613f91565b6132429087613f0e565b600d5490915061325b906001600160a01b031684613853565b600e54613271906001600160a01b031683613853565b600f54613287906001600160a01b031682613853565b87156132d9576132978885613971565b60408051888152602081018690529081018990527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15b8d601e60056101000a81548160ff021916908360ff1602179055508c601e60006101000a81548160ff021916908360ff1602179055508b601e60016101000a81548160ff021916908360ff1602179055508a601e60026101000a81548160ff021916908360ff16021790555089601e60036101000a81548160ff021916908360ff16021790555088601e60046101000a81548160ff021916908360ff16021790555050505050505050505050505050505050565b600080600061339c8585613a1f565b9250925092506000806000806133bb8987876133b6612804565b613ae9565b6001600160a01b038f166000908152601a60205260409020549397509195509350915060ff1615613424576001600160a01b038b1660009081526003602052604090205461340a908a90613f0e565b6001600160a01b038c166000908152600360205260409020555b6001600160a01b038a166000908152601a602052604090205460ff1615613483576001600160a01b038a16600090815260036020526040902054613469908890613f91565b6001600160a01b038b166000908152600360205260409020555b6001600160a01b038b166000908152600260205260409020546134a7908590613f0e565b6001600160a01b03808d1660009081526002602052604080822093909355908c16815220546134d7908490613f91565b6001600160a01b038b166000908152600260205260409020556134fc82878388613b41565b896001600160a01b03168b6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8960405161354191815260200190565b60405180910390a35050505050505050505050565b60055460009081906c7e37be2022c0914b2680000000825b601c548110156136bd578260026000601c848154811061359057613590613ee2565b60009182526020808320909101546001600160a01b0316835282019290925260400190205411806135fb57508160036000601c84815481106135d4576135d4613ee2565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561361b575050600554936c7e37be2022c0914b26800000009350915050565b60026000601c838154811061363257613632613ee2565b60009182526020808320909101546001600160a01b031683528201929092526040019020546136619084613f0e565b925060036000601c838154811061367a5761367a613ee2565b60009182526020808320909101546001600160a01b031683528201929092526040019020546136a99083613f0e565b9150806136b581613f37565b91505061356e565b506c7e37be2022c0914b26800000006005546136d99190613f66565b8210156136fa575050600554926c7e37be2022c0914b268000000092509050565b90939092509050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061373857613738613ee2565b6001600160a01b03928316602091820292909201810191909152600154604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015613791573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137b5919061400f565b816001815181106137c8576137c8613ee2565b6001600160a01b0392831660209182029290920101526001546137ee91309116846120f3565b6001805460405163791ac94760e01b81526001600160a01b039091169163791ac9479161382591869186903090429060040161402c565b600060405180830381600087803b15801561383f57600080fd5b505af1158015612b66573d6000803e3d6000fd5b804710156138a35760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610998565b6000826001600160a01b03168260405160006040518083038185875af1925050503d80600081146138f0576040519150601f19603f3d011682016040523d82523d6000602084013e6138f5565b606091505b505090508061396c5760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610998565b505050565b6001546139899030906001600160a01b0316846120f3565b60018054600c5460405163f305d71960e01b8152306004820152602481018690526044810184905260648101939093526001600160a01b0390811660848401524260a4840152169063f305d71990839060c40160606040518083038185885af11580156139fa573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906127c3919061409d565b600080600083613a3757508391506000905080613ae2565b601e54600090606490613a5490600160201b900460ff1688613f7a565b613a5e9190613f66565b601e5490915060009060649060ff62010000820481169163010000008104821691613a9191610100810482169116613fbb565b613a9b9190613fbb565b613aa59190613fbb565b613ab29060ff1689613f7a565b613abc9190613f66565b90506000613aca8284613f91565b613ad49089613f0e565b95509193509150613ae29050565b9250925092565b600080808080613af9868a613f7a565b90506000613b07878a613f7a565b90506000613b15888a613f7a565b90506000613b238284613f91565b613b2d9085613f0e565b939c939b5091995097509095505050505050565b8360056000828254613b539190613f0e565b925050819055508260066000828254613b6c9190613f91565b9091555050306000908152601a602052604090205460ff1615613bae573060009081526003602052604081208054839290613ba8908490613f91565b90915550505b3060009081526002602052604081208054849290613bcd908490613f91565b909155505050505050565b6001600160a01b0381168114613bed57600080fd5b50565b80358015158114613c0057600080fd5b919050565b60008060408385031215613c1857600080fd5b8235613c2381613bd8565b9150613c3160208401613bf0565b90509250929050565b600060208083528351808285015260005b81811015613c6757858101830151858201604001528201613c4b565b506000604082860101526040601f19601f8301168501019250505092915050565b60008060408385031215613c9b57600080fd5b8235613ca681613bd8565b946020939093013593505050565b600060208284031215613cc657600080fd5b5035919050565b600080600060608486031215613ce257600080fd5b8335613ced81613bd8565b92506020840135613cfd81613bd8565b929592945050506040919091013590565b60008060408385031215613d2157600080fd5b82359150613c3160208401613bf0565b600060208284031215613d4357600080fd5b8135610f2a81613bd8565b60008060008060808587031215613d6457600080fd5b8435613d6f81613bd8565b93506020850135613d7f81613bd8565b92506040850135613d8f81613bd8565b91506060850135613d9f81613bd8565b939692955090935050565b803560ff81168114613c0057600080fd5b600080600080600060a08688031215613dd357600080fd5b613ddc86613daa565b9450613dea60208701613daa565b9350613df860408701613daa565b9250613e0660608701613daa565b9150613e1460808701613daa565b90509295509295909350565b60008060408385031215613e3357600080fd5b8235613e3e81613bd8565b91506020830135613e4e81613bd8565b809150509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526034908201527f4c75636b79526f6f3a204163636f756e7420697320616c7265616479207468656040820152732076616c7565206f6620276578636c756465642760601b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b81810381811115610c2657610c26613ef8565b634e487b7160e01b600052603160045260246000fd5b600060018201613f4957613f49613ef8565b5060010190565b634e487b7160e01b600052601260045260246000fd5b600082613f7557613f75613f50565b500490565b8082028115828204841417610c2657610c26613ef8565b80820180821115610c2657610c26613ef8565b68ffffffffffffffffff1991909116815260200190565b60ff8181168382160190811115610c2657610c26613ef8565b600060ff831680613fe757613fe7613f50565b8060ff84160491505092915050565b60ff8281168282160390811115610c2657610c26613ef8565b60006020828403121561402157600080fd5b8151610f2a81613bd8565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561407c5784516001600160a01b031683529383019391830191600101614057565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156140b257600080fd5b835192506020840151915060408401519050925092509256fe4af24be54adc5e716fbcaa3fca0ad593e28dff90dffd49487c0a33b1547c6b5245524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365e4c649bdef80a9884d04138447ed68ee6c8a76c0f3f220dfa855dec4ffadc63845524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220d4073caf4a0ce1163ab25a3589ad8df2ea0bac56aede69f3694a175c77740c1864736f6c63430008110033

Deployed Bytecode Sourcemap

7736:26412:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17246:828;;;;;;;;;;-1:-1:-1;17246:828:0;;;;;:::i;:::-;;:::i;:::-;;8414:28;;;;;;;;;;-1:-1:-1;8414:28:0;;;;;;;;;;;800:14:1;;793:22;775:41;;763:2;748:18;8414:28:0;;;;;;;;21556:76;;;;;;;;;;-1:-1:-1;21622:5:0;;;;;;;;;;;;-1:-1:-1;;;21622:5:0;;;;21556:76;;;;;;;:::i;13237:146::-;;;;;;;;;;-1:-1:-1;13237:146:0;;;;;:::i;:::-;;:::i;14451:277::-;;;;;;;;;;;;;:::i;22095:80::-;;;;;;;;;;-1:-1:-1;22160:10:0;;22095:80;;;1846:25:1;;;1834:2;1819:18;22095:80:0;1700:177:1;7838:30:0;;;;;;;;;;-1:-1:-1;7838:30:0;;;;-1:-1:-1;;;;;7838:30:0;;;;;;-1:-1:-1;;;;;2061:32:1;;;2043:51;;2031:2;2016:18;7838:30:0;1882:218:1;21805:88:0;;;;;;;;;;-1:-1:-1;8302:23:0;21805:88;;8808:28;;;;;;;;;;-1:-1:-1;8808:28:0;;;;-1:-1:-1;;;;;8808:28:0;;;20432:251;;;;;;;;;;-1:-1:-1;20432:251:0;;;;;:::i;:::-;;:::i;13386:292::-;;;;;;;;;;-1:-1:-1;13386:292:0;;;;;:::i;:::-;;:::i;20686:257::-;;;;;;;;;;-1:-1:-1;20686:257:0;;;;;:::i;:::-;;:::i;22767:239::-;;;;;;;;;;-1:-1:-1;22767:239:0;;;;;:::i;:::-;;:::i;21718:84::-;;;;;;;;;;-1:-1:-1;21718:84:0;;8042:2;3101:36:1;;3089:2;3074:18;21718:84:0;2959:184:1;14731:124:0;;;;;;;;;;;;;:::i;13681:202::-;;;;;;;;;;-1:-1:-1;13681:202:0;;;;;:::i;:::-;;:::i;23009:480::-;;;;;;;;;;-1:-1:-1;23009:480:0;;;;;:::i;:::-;;:::i;15066:328::-;;;;;;;;;;-1:-1:-1;15066:328:0;;;;;:::i;:::-;;:::i;7872:38::-;;;;;;;;;;;;;;;16082:212;;;;;;;;;;-1:-1:-1;16082:212:0;;;;;:::i;:::-;;:::i;21896:196::-;;;;;;;;;;-1:-1:-1;21896:196:0;;;;;:::i;:::-;;:::i;7368:133::-;;;;;;;;;;;;;:::i;8774:30::-;;;;;;;;;;-1:-1:-1;8774:30:0;;;;-1:-1:-1;;;;;8774:30:0;;;16923:320;;;;;;;;;;-1:-1:-1;16923:320:0;;;;;:::i;:::-;;:::i;15701:378::-;;;;;;;;;;-1:-1:-1;15701:378:0;;;;;:::i;:::-;;:::i;18077:1182::-;;;;;;;;;;-1:-1:-1;18077:1182:0;;;;;:::i;:::-;;:::i;16583:337::-;;;;;;;;;;-1:-1:-1;16583:337:0;;;;;:::i;:::-;;:::i;8590:49::-;;;;;;;;;;;;;;;;7184:70;;;;;;;;;;-1:-1:-1;7222:7:0;7243:6;-1:-1:-1;;;;;7243:6:0;7184:70;;21635:80;;;;;;;;;;-1:-1:-1;21703:7:0;;;;;;;;;;;;-1:-1:-1;;;21703:7:0;;;;21635:80;;19262:431;;;;;;;;;;-1:-1:-1;19262:431:0;;;;;:::i;:::-;;:::i;8843:28::-;;;;;;;;;;-1:-1:-1;8843:28:0;;;;-1:-1:-1;;;;;8843:28:0;;;13886:253;;;;;;;;;;-1:-1:-1;13886:253:0;;;;;:::i;:::-;;:::i;13080:154::-;;;;;;;;;;-1:-1:-1;13080:154:0;;;;;:::i;:::-;;:::i;8483:54::-;;;;;;;;;;;;;;;;20946:306;;;;;;;;;;-1:-1:-1;20946:306:0;;;;;:::i;:::-;;:::i;19696:448::-;;;;;;;;;;-1:-1:-1;19696:448:0;;;;;:::i;:::-;;:::i;9992:58::-;;;;;;;;;;-1:-1:-1;9992:58:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;21255:283;;;;;;;;;;-1:-1:-1;21255:283:0;;;;;:::i;:::-;;:::i;20147:282::-;;;;;;;;;;-1:-1:-1;20147:282:0;;;;;:::i;:::-;;:::i;16297:283::-;;;;;;;;;;-1:-1:-1;16297:283:0;;;;;:::i;:::-;;:::i;22317:219::-;;;;;;;;;;-1:-1:-1;22413:23:0;;;;;;;22438;;;;;;-1:-1:-1;;;22463:21:0;;;;;-1:-1:-1;;;22486:21:0;;;;;-1:-1:-1;;;22509:21:0;;;;22317:219;;;;5228:4:1;5216:17;;;5198:36;;5270:17;;;5265:2;5250:18;;5243:45;5324:17;;;5304:18;;;5297:45;;;;5378:17;;5373:2;5358:18;;5351:45;5433:17;;;5427:3;5412:19;;5405:46;5185:3;5170:19;22317:219:0;4959:498:1;8671:60:0;;;;;;;;;;;;;;;;14858:202;;;;;;;;;;-1:-1:-1;14858:202:0;;;;;:::i;:::-;;:::i;8740:30::-;;;;;;;;;;-1:-1:-1;8740:30:0;;;;-1:-1:-1;;;;;8740:30:0;;;22178:136;;;;;;;;;;-1:-1:-1;22178:136:0;;;;;:::i;:::-;-1:-1:-1;;;;;22282:18:0;;;22261:7;22282:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;22178:136;7506:223;;;;;;;;;;-1:-1:-1;7506:223:0;;;;;:::i;:::-;;:::i;22539:225::-;;;;;;;;;;-1:-1:-1;22636:24:0;;;;;;;;;22662;;;;;;-1:-1:-1;;;22688:22:0;;;;;-1:-1:-1;;;22712:22:0;;;;;-1:-1:-1;;;22736:22:0;;;;22539:225;;17246:828;7293:6;;-1:-1:-1;;;;;7293:6:0;6650:10;7293:22;7285:67;;;;-1:-1:-1;;;7285:67:0;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;;;;17338:33:0;::::1;;::::0;;;:24:::1;:33;::::0;;;;;:45;::::1;;:33;::::0;;::::1;:45;;::::0;17330:110:::1;;;;-1:-1:-1::0;;;17330:110:0::1;;;;;;;:::i;:::-;17448:8;17445:570;;;-1:-1:-1::0;;;;;17467:16:0;::::1;17486:1;17467:16:::0;;;:7:::1;:16;::::0;;;;;:20;17464:95:::1;;-1:-1:-1::0;;;;;17535:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;17515:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;17496:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;17464:95:::1;-1:-1:-1::0;;;;;17564:33:0;::::1;;::::0;;;:24:::1;:33;::::0;;;;:44;;-1:-1:-1;;17564:44:0::1;::::0;::::1;;;::::0;;17614:22:::1;:36:::0;;-1:-1:-1;17614:36:0;::::1;::::0;;;;;::::1;::::0;;-1:-1:-1;;;;;;17614:36:0::1;::::0;;::::1;::::0;;17445:570:::1;;;17673:9;17668:342;17692:22;:29:::0;17688:33;::::1;17668:342;;;17768:7;-1:-1:-1::0;;;;;17739:36:0::1;:22;17762:1;17739:25;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;17739:25:0::1;:36:::0;17735:269:::1;;17813:22;17836:29:::0;;:33:::1;::::0;17868:1:::1;::::0;17836:33:::1;:::i;:::-;17813:57;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;17785:22:::1;:25:::0;;-1:-1:-1;;;;;17813:57:0;;::::1;::::0;17808:1;;17785:25;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:85:::0;;-1:-1:-1;;;;;;17785:85:0::1;-1:-1:-1::0;;;;;17785:85:0;;::::1;;::::0;;17878:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;17906:24:::1;:33:::0;;;;:41;;-1:-1:-1;;17906:41:0::1;::::0;;17955:22:::1;:28:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;17955:28:0;;;;;-1:-1:-1;;;;;;17955:28:0::1;::::0;;;;;17991:5:::1;;17735:269;17723:3:::0;::::1;::::0;::::1;:::i;:::-;;;;17668:342;;;;17445:570;18051:7;-1:-1:-1::0;;;;;18024:45:0::1;;18060:8;18024:45;;;;800:14:1::0;793:22;775:41;;763:2;748:18;;635:187;18024:45:0::1;;;;;;;;17246:828:::0;;:::o;13237:146::-;13312:4;13323:39;6650:10;13346:7;13355:6;13323:8;:39::i;:::-;-1:-1:-1;13374:4:0;13237:146;;;;;:::o;14451:277::-;7293:6;;-1:-1:-1;;;;;7293:6:0;6650:10;7293:22;7285:67;;;;-1:-1:-1;;;7285:67:0;;;;;;;:::i;:::-;14502:16:::1;:23:::0;;-1:-1:-1;;14502:23:0::1;14521:4;14502:23;::::0;;14540:21:::1;::::0;14502:16:::1;14540:26:::0;14536:146:::1;;14607:15;14583:21;:39:::0;14658:12:::1;14637:18;:33:::0;14536:146:::1;14691:32;::::0;14717:5:::1;::::0;14691:32;;::::1;::::0;14717:5;;14691:32:::1;14451:277::o:0;20432:251::-;7293:6;;-1:-1:-1;;;;;7293:6:0;6650:10;7293:22;7285:67;;;;-1:-1:-1;;;7285:67:0;;;;;;;:::i;:::-;20527:11:::1;;20515:8;:23:::0;20507:85:::1;;;::::0;-1:-1:-1;;;20507:85:0;;7508:2:1;20507:85:0::1;::::0;::::1;7490:21:1::0;7547:2;7527:18;;;7520:30;7586:34;7566:18;;;7559:62;-1:-1:-1;;;7637:18:1;;;7630:47;7694:19;;20507:85:0::1;7306:413:1::0;20507:85:0::1;20639:11;::::0;20602:49:::1;::::0;20629:8;;20602:49:::1;::::0;;;::::1;20656:11;:22:::0;20432:251::o;13386:292::-;13485:4;13496:36;13506:6;13514:9;13525:6;13496:9;:36::i;:::-;13537:120;13546:6;6650:10;13568:88;13606:6;13568:88;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;13568:19:0;;;;;;:11;:19;;;;;;;;6650:10;13568:33;;;;;;;;;;:37;:88::i;:::-;13537:8;:120::i;:::-;-1:-1:-1;13669:4:0;13386:292;;;;;:::o;20686:257::-;7293:6;;-1:-1:-1;;;;;7293:6:0;6650:10;7293:22;7285:67;;;;-1:-1:-1;;;7285:67:0;;;;;;;:::i;:::-;20776:15:::1;;20764:8;:27:::0;20756:93:::1;;;::::0;-1:-1:-1;;;20756:93:0;;7926:2:1;20756:93:0::1;::::0;::::1;7908:21:1::0;7965:2;7945:18;;;7938:30;8004:34;7984:18;;;7977:62;-1:-1:-1;;;8055:18:1;;;8048:51;8116:19;;20756:93:0::1;7724:417:1::0;20756:93:0::1;20891:15;::::0;20859:48:::1;::::0;20881:8;;20859:48:::1;::::0;;;::::1;20912:15;:26:::0;20686:257::o;22767:239::-;22833:7;22866;;22855;:18;;22847:83;;;;-1:-1:-1;;;22847:83:0;;8348:2:1;22847:83:0;;;8330:21:1;8387:2;8367:18;;;8360:30;8426:34;8406:18;;;8399:62;-1:-1:-1;;;8477:18:1;;;8470:50;8537:19;;22847:83:0;8146:416:1;22847:83:0;22935:19;22958:10;:8;:10::i;:::-;22935:33;-1:-1:-1;22980:21:0;22935:33;22980:7;:21;:::i;:::-;22973:28;22767:239;-1:-1:-1;;;22767:239:0:o;14731:124::-;7293:6;;-1:-1:-1;;;;;7293:6:0;6650:10;7293:22;7285:67;;;;-1:-1:-1;;;7285:67:0;;;;;;;:::i;:::-;14784:16:::1;:24:::0;;-1:-1:-1;;14784:24:0::1;::::0;;14818:32:::1;::::0;14784:24;;14803:5:::1;::::0;14818:32:::1;::::0;14803:5;;14818:32:::1;14731:124::o:0;13681:202::-;6650:10;13771:4;13811:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;13811:34:0;;;;;;;;;;13771:4;;13781:81;;13803:7;;13811:50;;13850:10;13811:38;:50::i;23009:480::-;23102:7;8302:23;23124:7;:18;;23116:72;;;;-1:-1:-1;;;23116:72:0;;9026:2:1;23116:72:0;;;9008:21:1;9065:2;9045:18;;;9038:30;9104:34;9084:18;;;9077:62;-1:-1:-1;;;9155:18:1;;;9148:39;9204:19;;23116:72:0;8824:405:1;23116:72:0;23193:19;23215:10;:8;:10::i;:::-;23193:32;-1:-1:-1;23230:15:0;23249:21;23193:32;23249:7;:21;:::i;:::-;23230:40;;23280:17;23275:210;;23312:7;-1:-1:-1;23305:14:0;;-1:-1:-1;23305:14:0;23275:210;23371:9;;23340:17;;23389:11;;23383:3;;23361:19;;-1:-1:-1;;;23371:9:0;;;;23361:7;:19;:::i;:::-;:25;;;;:::i;:::-;:39;;;;:::i;:::-;23340:60;-1:-1:-1;23406:23:0;23432:19;23340:60;23432:7;:19;:::i;:::-;23406:45;-1:-1:-1;23457:22:0;;-1:-1:-1;;;;23457:22:0;15066:328;7293:6;;-1:-1:-1;;;;;7293:6:0;6650:10;7293:22;7285:67;;;;-1:-1:-1;;;7285:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;15168:38:0;::::1;;::::0;;;:29:::1;:38;::::0;;;;;:47;::::1;;:38;::::0;;::::1;:47;;::::0;15160:118:::1;;;::::0;-1:-1:-1;;;15160:118:0;;9609:2:1;15160:118:0::1;::::0;::::1;9591:21:1::0;9648:2;9628:18;;;9621:30;9687:34;9667:18;;;9660:62;9758:28;9738:18;;;9731:56;9804:19;;15160:118:0::1;9407:422:1::0;15160:118:0::1;-1:-1:-1::0;;;;;15283:38:0;::::1;;::::0;;;:29:::1;:38;::::0;;;;;;;;:46;;-1:-1:-1;;15283:46:0::1;::::0;::::1;;::::0;;::::1;::::0;;;15339:50;;775:41:1;;;15339:50:0::1;::::0;748:18:1;15339:50:0::1;635:187:1::0;16082:212:0;7293:6;;-1:-1:-1;;;;;7293:6:0;6650:10;7293:22;7285:67;;;;-1:-1:-1;;;7285:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;16155:19:0;::::1;;::::0;;;:10:::1;:19;::::0;;;;;::::1;;16147:64;;;::::0;-1:-1:-1;;;16147:64:0;;10036:2:1;16147:64:0::1;::::0;::::1;10018:21:1::0;;;10055:18;;;10048:30;10114:34;10094:18;;;10087:62;10166:18;;16147:64:0::1;9834:356:1::0;16147:64:0::1;-1:-1:-1::0;;;;;16216:19:0;::::1;16238:5;16216:19:::0;;;:10:::1;:19;::::0;;;;;:27;;-1:-1:-1;;16216:27:0::1;::::0;;16253:36;16238:5;;16216:19;16253:36:::1;::::0;16238:5;;16253:36:::1;16082:212:::0;:::o;21896:196::-;-1:-1:-1;;;;;21980:33:0;;21962:7;21980:33;;;:24;:33;;;;;;;;21976:62;;;-1:-1:-1;;;;;;22022:16:0;;;;;:7;:16;;;;;;;21896:196::o;21976:62::-;-1:-1:-1;;;;;22070:16:0;;;;;;:7;:16;;;;;;22050:37;;:19;:37::i;7368:133::-;7293:6;;-1:-1:-1;;;;;7293:6:0;6650:10;7293:22;7285:67;;;;-1:-1:-1;;;7285:67:0;;;;;;;:::i;:::-;7469:1:::1;7453:6:::0;;7432:40:::1;::::0;-1:-1:-1;;;;;7453:6:0;;::::1;::::0;7432:40:::1;::::0;7469:1;;7432:40:::1;7494:1;7477:19:::0;;-1:-1:-1;;;;;;7477:19:0::1;::::0;;7368:133::o;16923:320::-;7293:6;;-1:-1:-1;;;;;7293:6:0;6650:10;7293:22;7285:67;;;;-1:-1:-1;;;7285:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;17022:38:0;::::1;;::::0;;;:29:::1;:38;::::0;;;;;:50;::::1;;:38;::::0;;::::1;:50;;::::0;17014:115:::1;;;;-1:-1:-1::0;;;17014:115:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;17134:38:0;::::1;;::::0;;;:29:::1;:38;::::0;;;;;;;;:49;;-1:-1:-1;;17134:49:0::1;::::0;::::1;;::::0;;::::1;::::0;;;17193:45;;775:41:1;;;17193:45:0::1;::::0;748:18:1;17193:45:0::1;635:187:1::0;15701:378:0;7293:6;;-1:-1:-1;;;;;7293:6:0;6650:10;7293:22;7285:67;;;;-1:-1:-1;;;7285:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;15773:19:0;::::1;;::::0;;;:10:::1;:19;::::0;;;;;::::1;;15772:20;15764:69;;;::::0;-1:-1:-1;;;15764:69:0;;10397:2:1;15764:69:0::1;::::0;::::1;10379:21:1::0;10436:2;10416:18;;;10409:30;10475:34;10455:18;;;10448:62;-1:-1:-1;;;10526:18:1;;;10519:34;10570:19;;15764:69:0::1;10195:400:1::0;15764:69:0::1;15842:21;::::0;:25;15838:161:::1;;9493:6;15902:21;;15884:15;:39;;;;:::i;:::-;15883:61;15875:118;;;::::0;-1:-1:-1;;;15875:118:0;;10802:2:1;15875:118:0::1;::::0;::::1;10784:21:1::0;10841:2;10821:18;;;10814:30;10880:34;10860:18;;;10853:62;-1:-1:-1;;;10931:18:1;;;10924:42;10983:19;;15875:118:0::1;10600:408:1::0;15875:118:0::1;-1:-1:-1::0;;;;;16003:19:0;::::1;;::::0;;;:10:::1;:19;::::0;;;;;:26;;-1:-1:-1;;16003:26:0::1;16025:4;16003:26:::0;;::::1;::::0;;;16039:35;;16025:4;;16003:19;16039:35:::1;::::0;::::1;15701:378:::0;:::o;18077:1182::-;7293:6;;-1:-1:-1;;;;;7293:6:0;6650:10;7293:22;7285:67;;;;-1:-1:-1;;;7285:67:0;;;;;;;:::i;:::-;18232:15:::1;::::0;-1:-1:-1;;;;;18232:37:0;;::::1;:15:::0;::::1;:37;18229:261;;-1:-1:-1::0;;;;;18285:32:0;::::1;18277:86;;;::::0;-1:-1:-1;;;18277:86:0;;11215:2:1;18277:86:0::1;::::0;::::1;11197:21:1::0;11254:2;11234:18;;;11227:30;11293:34;11273:18;;;11266:62;-1:-1:-1;;;11344:18:1;;;11337:39;11393:19;;18277:86:0::1;11013:405:1::0;18277:86:0::1;18426:15;::::0;18374:68:::1;::::0;-1:-1:-1;;;11625:30:1;;-1:-1:-1;;;;;18426:15:0;;::::1;::::0;18374:68;::::1;::::0;11680:2:1;11671:12;18374:68:0::1;::::0;;;;::::1;::::0;;;-1:-1:-1;;;;;;;;;;;18374:68:0;;;::::1;18448:15;:36:::0;;-1:-1:-1;;;;;;18448:36:0::1;-1:-1:-1::0;;;;;18448:36:0;::::1;;::::0;;18229:261:::1;18497:15;::::0;-1:-1:-1;;;;;18497:37:0;;::::1;:15:::0;::::1;:37;18494:261;;-1:-1:-1::0;;;;;18550:32:0;::::1;18542:86;;;::::0;-1:-1:-1;;;18542:86:0;;11896:2:1;18542:86:0::1;::::0;::::1;11878:21:1::0;11935:2;11915:18;;;11908:30;11974:34;11954:18;;;11947:62;-1:-1:-1;;;12025:18:1;;;12018:39;12074:19;;18542:86:0::1;11694:405:1::0;18542:86:0::1;18691:15;::::0;18639:68:::1;::::0;-1:-1:-1;;;12306:30:1;;-1:-1:-1;;;;;18691:15:0;;::::1;::::0;18639:68;::::1;::::0;12361:2:1;12352:12;18639:68:0::1;::::0;;;;::::1;::::0;;;-1:-1:-1;;;;;;;;;;;18639:68:0;;;::::1;18713:15;:36:::0;;-1:-1:-1;;;;;;18713:36:0::1;-1:-1:-1::0;;;;;18713:36:0;::::1;;::::0;;18494:261:::1;18762:13;::::0;-1:-1:-1;;;;;18762:33:0;;::::1;:13:::0;::::1;:33;18759:243;;-1:-1:-1::0;;;;;18811:30:0;::::1;18803:82;;;::::0;-1:-1:-1;;;18803:82:0;;12577:2:1;18803:82:0::1;::::0;::::1;12559:21:1::0;12616:2;12596:18;;;12589:30;12655:34;12635:18;;;12628:62;-1:-1:-1;;;12706:18:1;;;12699:37;12753:19;;18803:82:0::1;12375:403:1::0;18803:82:0::1;18944:13;::::0;18896:62:::1;::::0;-1:-1:-1;;;12985:28:1;;-1:-1:-1;;;;;18944:13:0;;::::1;::::0;18896:62;::::1;::::0;13038:2:1;13029:12;18896:62:0::1;::::0;;;;::::1;::::0;;;-1:-1:-1;;;;;;;;;;;18896:62:0;;;::::1;18964:13;:32:::0;;-1:-1:-1;;;;;;18964:32:0::1;-1:-1:-1::0;;;;;18964:32:0;::::1;;::::0;;18759:243:::1;19015:13;::::0;-1:-1:-1;;;;;19015:33:0;;::::1;:13:::0;::::1;:33;19012:243;;-1:-1:-1::0;;;;;19064:30:0;::::1;19056:82;;;::::0;-1:-1:-1;;;19056:82:0;;13254:2:1;19056:82:0::1;::::0;::::1;13236:21:1::0;13293:2;13273:18;;;13266:30;13332:34;13312:18;;;13305:62;-1:-1:-1;;;13383:18:1;;;13376:37;13430:19;;19056:82:0::1;13052:403:1::0;19056:82:0::1;19197:13;::::0;19149:62:::1;::::0;-1:-1:-1;;;13662:28:1;;-1:-1:-1;;;;;19197:13:0;;::::1;::::0;19149:62;::::1;::::0;13715:2:1;13706:12;19149:62:0::1;::::0;;;;::::1;::::0;;;-1:-1:-1;;;;;;;;;;;19149:62:0;;;::::1;19217:13;:32:::0;;-1:-1:-1;;;;;;19217:32:0::1;-1:-1:-1::0;;;;;19217:32:0;::::1;;::::0;;19012:243:::1;18077:1182:::0;;;;:::o;16583:337::-;7293:6;;-1:-1:-1;;;;;7293:6:0;6650:10;7293:22;7285:67;;;;-1:-1:-1;;;7285:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;16687:43:0;::::1;;::::0;;;:34:::1;:43;::::0;;;;;:55;::::1;;:43;::::0;;::::1;:55;;::::0;16679:120:::1;;;;-1:-1:-1::0;;;16679:120:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;16804:43:0;::::1;;::::0;;;:34:::1;:43;::::0;;;;;;;;:54;;-1:-1:-1;;16804:54:0::1;::::0;::::1;;::::0;;::::1;::::0;;;16868:47;;775:41:1;;;16868:47:0::1;::::0;748:18:1;16868:47:0::1;635:187:1::0;19262:431:0;7293:6;;-1:-1:-1;;;;;7293:6:0;6650:10;7293:22;7285:67;;;;-1:-1:-1;;;7285:67:0;;;;;;;:::i;:::-;19436:123:::1;19459:5;19466:18;19486;19506:16;19524;19542;19436:22;:123::i;:::-;19569:119;::::0;-1:-1:-1;;;13931:27:1;;13983:2;13974:12;19569:119:0::1;;::::0;;;;;::::1;::::0;;5228:4:1;5216:17;;;5198:36;;5270:17;;;5265:2;5250:18;;5243:45;5324:17;;;5304:18;;;5297:45;5378:17;;;5373:2;5358:18;;5351:45;5433:17;;5427:3;5412:19;;5405:46;19569:119:0;;;;::::1;::::0;;;;;5185:3:1;19569:119:0;;::::1;19262:431:::0;;;;;:::o;13886:253::-;13981:4;13992:126;6650:10;14014:7;14022:95;14061:15;14022:95;;;;;;;;;;;;;;;;;6650:10;14022:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;14022:34:0;;;;;;;;;;;;:38;:95::i;13080:154::-;13160:4;13171:42;6650:10;13195:9;13206:6;13171:9;:42::i;20946:306::-;7293:6;;-1:-1:-1;;;;;7293:6:0;6650:10;7293:22;7285:67;;;;-1:-1:-1;;;7285:67:0;;;;;;;:::i;:::-;21044:23:::1;;21032:8;:35:::0;21024:109:::1;;;::::0;-1:-1:-1;;;21024:109:0;;14199:2:1;21024:109:0::1;::::0;::::1;14181:21:1::0;14238:2;14218:18;;;14211:30;14277:34;14257:18;;;14250:62;14348:31;14328:18;;;14321:59;14397:19;;21024:109:0::1;13997:425:1::0;21024:109:0::1;21184:23;::::0;21143:65:::1;::::0;21174:8;;21143:65:::1;::::0;;;::::1;21213:23;:34:::0;20946:306::o;19696:448::-;7293:6;;-1:-1:-1;;;;;7293:6:0;6650:10;7293:22;7285:67;;;;-1:-1:-1;;;7285:67:0;;;;;;;:::i;:::-;19875:129:::1;19899:5;19906:19;19927;19948:17;19967;19986;19875:23;:129::i;:::-;20014:125;::::0;-1:-1:-1;;;14629:28:1;;14682:2;14673:12;20014:125:0::1;14427:264:1::0;21255:283:0;7293:6;;-1:-1:-1;;;;;7293:6:0;6650:10;7293:22;7285:67;;;;-1:-1:-1;;;7285:67:0;;;;;;;:::i;:::-;21338:21:::1;21329:6;:30;21321:91;;;::::0;-1:-1:-1;;;21321:91:0;;14898:2:1;21321:91:0::1;::::0;::::1;14880:21:1::0;14937:2;14917:18;;;14910:30;14976:34;14956:18;;;14949:62;-1:-1:-1;;;15027:18:1;;;15020:46;15083:19;;21321:91:0::1;14696:412:1::0;21321:91:0::1;21418:12;7243:6:::0;;21435:41:::1;::::0;-1:-1:-1;;;;;7243:6:0;;;;21465;;21418:12;21435:41;21418:12;21435:41;21465:6;7243;21435:41:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21417:59;;;21485:7;21481:53;;;21504:24;::::0;1846:25:1;;;21504:24:0::1;::::0;1834:2:1;1819:18;21504:24:0::1;;;;;;;21481:53;21316:222;21255:283:::0;:::o;20147:282::-;7293:6;;-1:-1:-1;;;;;7293:6:0;6650:10;7293:22;7285:67;;;;-1:-1:-1;;;7285:67:0;;;;;;;:::i;:::-;20247:15:::1;::::0;-1:-1:-1;;;;;20247:15:0;;::::1;20225:38:::0;;::::1;::::0;20217:96:::1;;;::::0;-1:-1:-1;;;20217:96:0;;15525:2:1;20217:96:0::1;::::0;::::1;15507:21:1::0;15564:2;15544:18;;;15537:30;15603:34;15583:18;;;15576:62;-1:-1:-1;;;15654:18:1;;;15647:43;15707:19;;20217:96:0::1;15323:409:1::0;20217:96:0::1;20365:15;::::0;20323:59:::1;::::0;-1:-1:-1;;;;;20365:15:0;;::::1;::::0;20323:59;::::1;::::0;::::1;::::0;20365:15:::1;::::0;20323:59:::1;20387:15;:37:::0;;-1:-1:-1;;;;;;20387:37:0::1;-1:-1:-1::0;;;;;20387:37:0;;;::::1;::::0;;;::::1;::::0;;20147:282::o;16297:283::-;7293:6;;-1:-1:-1;;;;;7293:6:0;6650:10;7293:22;7285:67;;;;-1:-1:-1;;;7285:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;16386:27:0;::::1;;::::0;;;:18:::1;:27;::::0;;;;;:39;::::1;;:27;::::0;;::::1;:39;;::::0;16378:104:::1;;;;-1:-1:-1::0;;;16378:104:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;16487:27:0;::::1;;::::0;;;:18:::1;:27;::::0;;;;;;;;:38;;-1:-1:-1;;16487:38:0::1;::::0;::::1;;::::0;;::::1;::::0;;;16535:40;;775:41:1;;;16535:40:0::1;::::0;748:18:1;16535:40:0::1;635:187:1::0;14858:202:0;7293:6;;-1:-1:-1;;;;;7293:6:0;6650:10;7293:22;7285:67;;;;-1:-1:-1;;;7285:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;14947:38:0;::::1;;::::0;;;:29:::1;:38;::::0;;;;;;;;:48;;-1:-1:-1;;14947:48:0::1;::::0;::::1;;::::0;;::::1;::::0;;;15005:50;;775:41:1;;;15005:50:0::1;::::0;748:18:1;15005:50:0::1;635:187:1::0;7506:223:0;7293:6;;-1:-1:-1;;;;;7293:6:0;6650:10;7293:22;7285:67;;;;-1:-1:-1;;;7285:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;7589:22:0;::::1;7581:73;;;::::0;-1:-1:-1;;;7581:73:0;;15939:2:1;7581:73:0::1;::::0;::::1;15921:21:1::0;15978:2;15958:18;;;15951:30;16017:34;15997:18;;;15990:62;-1:-1:-1;;;16068:18:1;;;16061:36;16114:19;;7581:73:0::1;15737:402:1::0;7581:73:0::1;7685:6;::::0;;7664:38:::1;::::0;-1:-1:-1;;;;;7664:38:0;;::::1;::::0;7685:6;::::1;::::0;7664:38:::1;::::0;::::1;7707:6;:17:::0;;-1:-1:-1;;;;;;7707:17:0::1;-1:-1:-1::0;;;;;7707:17:0;;;::::1;::::0;;;::::1;::::0;;7506:223::o;2665:123::-;2723:7;2744:39;2748:1;2751;2744:39;;;;;;;;;;;;;;;;;:3;:39::i;14142:306::-;-1:-1:-1;;;;;14227:19:0;;14219:68;;;;-1:-1:-1;;;14219:68:0;;16346:2:1;14219:68:0;;;16328:21:1;16385:2;16365:18;;;16358:30;16424:34;16404:18;;;16397:62;-1:-1:-1;;;16475:18:1;;;16468:34;16519:19;;14219:68:0;16144:400:1;14219:68:0;-1:-1:-1;;;;;14300:21:0;;14292:68;;;;-1:-1:-1;;;14292:68:0;;16751:2:1;14292:68:0;;;16733:21:1;16790:2;16770:18;;;16763:30;16829:34;16809:18;;;16802:62;-1:-1:-1;;;16880:18:1;;;16873:32;16922:19;;14292:68:0;16549:398:1;14292:68:0;-1:-1:-1;;;;;14365:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;14411:32;;1846:25:1;;;14411:32:0;;1819:18:1;14411:32:0;;;;;;;14142:306;;;:::o;23504:1615::-;-1:-1:-1;;;;;23597:18:0;;23589:68;;;;-1:-1:-1;;;23589:68:0;;17154:2:1;23589:68:0;;;17136:21:1;17193:2;17173:18;;;17166:30;17232:34;17212:18;;;17205:62;-1:-1:-1;;;17283:18:1;;;17276:35;17328:19;;23589:68:0;16952:401:1;23589:68:0;-1:-1:-1;;;;;23670:16:0;;23662:64;;;;-1:-1:-1;;;23662:64:0;;17560:2:1;23662:64:0;;;17542:21:1;17599:2;17579:18;;;17572:30;17638:34;17618:18;;;17611:62;-1:-1:-1;;;17689:18:1;;;17682:33;17732:19;;23662:64:0;17358:399:1;23662:64:0;23748:1;23739:6;:10;23731:74;;;;-1:-1:-1;;;23731:74:0;;17964:2:1;23731:74:0;;;17946:21:1;18003:2;17983:18;;;17976:30;18042:34;18022:18;;;18015:62;-1:-1:-1;;;18093:18:1;;;18086:49;18152:19;;23731:74:0;17762:415:1;23731:74:0;23828:15;23838:4;23828:9;:15::i;:::-;23818:6;:25;;23810:81;;;;-1:-1:-1;;;23810:81:0;;18384:2:1;23810:81:0;;;18366:21:1;18423:2;18403:18;;;18396:30;18462:34;18442:18;;;18435:62;-1:-1:-1;;;18513:18:1;;;18506:41;18564:19;;23810:81:0;18182:407:1;23810:81:0;-1:-1:-1;;;;;23902:35:0;;;;;;:29;:35;;;;;;;;23901:36;:74;;;;-1:-1:-1;;;;;;23942:33:0;;;;;;:29;:33;;;;;;;;23941:34;23901:74;23898:662;;;23991:16;;;;23983:69;;;;-1:-1:-1;;;23983:69:0;;18796:2:1;23983:69:0;;;18778:21:1;18835:2;18815:18;;;18808:30;18874:34;18854:18;;;18847:62;-1:-1:-1;;;18925:18:1;;;18918:38;18973:19;;23983:69:0;18594:404:1;23983:69:0;-1:-1:-1;;;;;24076:14:0;;;;;;:10;:14;;;;;;;;24075:15;24067:56;;;;-1:-1:-1;;;24067:56:0;;19205:2:1;24067:56:0;;;19187:21:1;19244:2;19224:18;;;19217:30;19283;19263:18;;;19256:58;19331:18;;24067:56:0;19003:352:1;24067:56:0;-1:-1:-1;;;;;24138:16:0;;;;;;:10;:16;;;;;;;;24137:17;24129:58;;;;-1:-1:-1;;;24129:58:0;;19205:2:1;24129:58:0;;;19187:21:1;19244:2;19224:18;;;19217:30;19283;19263:18;;;19256:58;19331:18;;24129:58:0;19003:352:1;24129:58:0;-1:-1:-1;;;;;24198:38:0;;;;;;:34;:38;;;;;;;;24197:39;:84;;;;-1:-1:-1;;;;;;24241:40:0;;;;;;:34;:40;;;;;;;;24240:41;24197:84;24193:186;;;24308:11;;24298:6;:21;;24290:82;;;;-1:-1:-1;;;24290:82:0;;19562:2:1;24290:82:0;;;19544:21:1;19601:2;19581:18;;;19574:30;19640:34;19620:18;;;19613:62;-1:-1:-1;;;19691:18:1;;;19684:46;19747:19;;24290:82:0;19360:412:1;24290:82:0;-1:-1:-1;;;;;24389:33:0;;;;;;:29;:33;;;;;;;;24384:171;;24467:15;;24456:6;24440:13;24450:2;24440:9;:13::i;:::-;:22;;;;:::i;:::-;24439:43;;24431:117;;;;-1:-1:-1;;;24431:117:0;;20109:2:1;24431:117:0;;;20091:21:1;20148:2;20128:18;;;20121:30;20187:34;20167:18;;;20160:62;20258:31;20238:18;;;20231:59;20307:19;;24431:117:0;19907:425:1;24431:117:0;-1:-1:-1;;;;;24579:31:0;;;;;;;:25;:31;;;;;;;24612:29;;;;;;;;24566:86;;24579:31;;;;;24612:29;24638:2;24605:4;24566:12;:86::i;:::-;24657:12;24700:23;;24672:24;24690:4;24672:9;:24::i;:::-;24739:16;;24672:51;-1:-1:-1;24672:51:0;;-1:-1:-1;24739:16:0;;:31;;;;;24763:7;24739:31;:49;;;;-1:-1:-1;24779:9:0;;;;24778:10;24739:49;:70;;;;-1:-1:-1;24796:9:0;;-1:-1:-1;;;24796:9:0;;;;:13;;24739:70;:107;;;;-1:-1:-1;;;;;;24817:29:0;;;;;;:25;:29;;;;;;;;24739:107;24730:196;;;24858:9;:16;;-1:-1:-1;;24858:16:0;24870:4;24858:16;;;24880:17;:15;:17::i;:::-;24903:9;:17;;-1:-1:-1;;24903:17:0;;;24730:196;24948:9;;24932:12;;24948:9;;24947:10;:30;;;;-1:-1:-1;24961:16:0;;;;24947:30;-1:-1:-1;;;;;24987:24:0;;;;;;:18;:24;;;;;;24932:45;;-1:-1:-1;24987:24:0;;;:50;;-1:-1:-1;;;;;;25015:22:0;;;;;;:18;:22;;;;;;;;24987:50;24984:81;;;-1:-1:-1;25054:5:0;24984:81;25071:41;25086:4;25092:2;25096:6;25104:7;25071:14;:41::i;:::-;23584:1535;;23504:1615;;;:::o;2073:171::-;2159:7;2189:12;2181:6;;;;2173:29;;;;-1:-1:-1;;;2173:29:0;;;;;;;;:::i;:::-;-1:-1:-1;2207:9:0;2219:5;2223:1;2219;:5;:::i;:::-;2207:17;2073:171;-1:-1:-1;;;;;2073:171:0:o;26968:149::-;27010:7;27025:15;27042;27061:19;:17;:19::i;:::-;27024:56;;-1:-1:-1;27024:56:0;-1:-1:-1;27092:20:0;27024:56;;27092:11;:20::i;:::-;27085:27;;;;26968:149;:::o;1776:160::-;1834:7;;1860:5;1864:1;1860;:5;:::i;:::-;1848:17;;1883:1;1878;:6;;1870:46;;;;-1:-1:-1;;;1870:46:0;;20539:2:1;1870:46:0;;;20521:21:1;20578:2;20558:18;;;20551:30;20617:29;20597:18;;;20590:57;20664:18;;1870:46:0;20337:351:1;30378:1282:0;30605:21;;;;:43;;;;:21;;:43;30601:215;;30661:101;;-1:-1:-1;;;20895:32:1;;20952:2;20943:12;30661:101:0;;;;;;;;30703:21;;;;30747:14;;30661:101;;30703:21;;;;;30661:101;;;;-1:-1:-1;;;;;;;;;;;30661:101:0;;;30747:14;;;30661:101;:::i;:::-;;;;;;;;30768:21;;;:42;;-1:-1:-1;;30768:42:0;;;;;;;30601:215;30824:21;;;;:43;;;;:21;;;;;:43;30820:215;;30880:101;;-1:-1:-1;;;21382:32:1;;21439:2;21430:12;30880:101:0;;;;;;;;30922:21;;;;30966:14;;30880:101;;30922:21;;;;;;;;30880:101;;;;-1:-1:-1;;;;;;;;;;;30880:101:0;;;30966:14;;;30880:101;:::i;:::-;;;;;;;;30987:21;;;:42;;-1:-1:-1;;30987:42:0;;;;;;;;;30820:215;31043:19;;;;:39;;;;-1:-1:-1;;;31043:19:0;;;;:39;31039:201;;31095:95;;-1:-1:-1;;;21655:30:1;;21710:2;21701:12;31095:95:0;;;;;;;;31135:19;;;;31175:14;;31095:95;;31135:19;-1:-1:-1;;;31135:19:0;;;;;;31095:95;;;;-1:-1:-1;;;;;;;;;;;31095:95:0;;;31175:14;;;31095:95;:::i;:::-;;;;;;;;31196:19;;;:38;;-1:-1:-1;;31196:38:0;-1:-1:-1;;;31196:38:0;;;;;;;31039:201;31254:19;;;;:39;;;;-1:-1:-1;;;31254:19:0;;;;:39;31250:201;;31306:95;;-1:-1:-1;;;21926:30:1;;21981:2;21972:12;31306:95:0;;;;;;;;31346:19;;;;31386:14;;31306:95;;31346:19;-1:-1:-1;;;31346:19:0;;;;;;31306:95;;;;-1:-1:-1;;;;;;;;;;;31306:95:0;;;31386:14;;;31306:95;:::i;:::-;;;;;;;;31407:19;;;:38;;-1:-1:-1;;31407:38:0;-1:-1:-1;;;31407:38:0;;;;;;;31250:201;31459:19;;;;:39;;;;-1:-1:-1;;;31459:19:0;;;;:39;31455:201;;31511:95;;-1:-1:-1;;;22197:30:1;;22252:2;22243:12;31511:95:0;;;;;;;;31551:19;;;;31591:14;;31511:95;;31551:19;-1:-1:-1;;;31551:19:0;;;;;;31511:95;;;;-1:-1:-1;;;;;;;;;;;31511:95:0;;;31591:14;;;31511:95;:::i;:::-;;;;;;;;31612:19;;;:38;;-1:-1:-1;;31612:38:0;-1:-1:-1;;;31612:38:0;;;;;;;31455:201;30378:1282;;;;;;:::o;29052:1323::-;29285:22;;;;:45;;;;:22;;;;;:45;29281:222;;29343:104;;-1:-1:-1;;;22468:33:1;;22526:2;22517:12;29343:104:0;;;;;;;;29386:22;;;;29432:14;;29343:104;;29386:22;;;;;;;;29343:104;;;;-1:-1:-1;;;;;;;;;;;29343:104:0;;;29432:14;;;29343:104;:::i;:::-;;;;;;;;29453:22;;;:44;;-1:-1:-1;;29453:44:0;;;;;;;;;29281:222;29511:22;;;;:45;;;;:22;;;;;:45;29507:222;;29569:104;;-1:-1:-1;;;22742:33:1;;22800:2;22791:12;29569:104:0;;;;;;;;29612:22;;;;29658:14;;29569:104;;29612:22;;;;;;;;29569:104;;;;-1:-1:-1;;;;;;;;;;;29569:104:0;;;29658:14;;;29569:104;:::i;:::-;;;;;;;;29679:22;;;:44;;-1:-1:-1;;29679:44:0;;;;;;;;;29507:222;29737:20;;;;:41;;;;-1:-1:-1;;;29737:20:0;;;;:41;29733:208;;29791:98;;-1:-1:-1;;;23016:31:1;;23072:2;23063:12;29791:98:0;;;;;;;;29832:20;;;;29874:14;;29791:98;;29832:20;-1:-1:-1;;;29832:20:0;;;;;;29791:98;;;;-1:-1:-1;;;;;;;;;;;29791:98:0;;;29874:14;;;29791:98;:::i;:::-;;;;;;;;29895:20;;;:40;;-1:-1:-1;;29895:40:0;-1:-1:-1;;;29895:40:0;;;;;;;29733:208;29955:20;;;;:41;;;;-1:-1:-1;;;29955:20:0;;;;:41;29951:208;;30009:98;;-1:-1:-1;;;23288:31:1;;23344:2;23335:12;30009:98:0;;;;;;;;30050:20;;;;30092:14;;30009:98;;30050:20;-1:-1:-1;;;30050:20:0;;;;;;30009:98;;;;-1:-1:-1;;;;;;;;;;;30009:98:0;;;30092:14;;;30009:98;:::i;:::-;;;;;;;;30113:20;;;:40;;-1:-1:-1;;30113:40:0;-1:-1:-1;;;30113:40:0;;;;;;;29951:208;30167:20;;;;:41;;;;-1:-1:-1;;;30167:20:0;;;;:41;30163:208;;30221:98;;-1:-1:-1;;;23560:31:1;;23616:2;23607:12;30221:98:0;;;;;;;;30262:20;;;;30304:14;;30221:98;;30262:20;-1:-1:-1;;;30262:20:0;;;;;;30221:98;;;;-1:-1:-1;;;;;;;;;;;30221:98:0;;;30304:14;;;30221:98;:::i;:::-;;;;;;;;30325:20;;;:40;;;;;-1:-1:-1;;;30325:40:0;-1:-1:-1;;30325:40:0;;;;;;29052:1323;;;;;;:::o;2793:251::-;2879:7;2908:12;2901:5;2893:28;;;;-1:-1:-1;;;2893:28:0;;;;;;;;:::i;:::-;-1:-1:-1;2926:9:0;2938:5;2942:1;2938;:5;:::i;27685:1364::-;27781:13;:17;;-1:-1:-1;;27889:15:0;;;27917:439;;;;27990:1;27968:18;;27953:12;:33;;;;:::i;:::-;:38;27949:402;;28012:13;:19;;-1:-1:-1;;28012:19:0;28028:3;28012:19;;;27949:402;;;28092:23;;28076:13;:39;;28092:23;;;;-1:-1:-1;;28134:39:0;;;;;;;28092:23;28150;;;;;;28134:39;;;;;;;;-1:-1:-1;;28246:35:0;-1:-1:-1;;;28206:21:0;;;;;28192:35;;;;-1:-1:-1;;28246:35:0;;-1:-1:-1;;;28260:21:0;;;;28246:35;;;-1:-1:-1;;28300:35:0;-1:-1:-1;;;28314:21:0;;;;;;;28300:35;;;;;;;27949:402;28364:10;28360:249;;;28398:24;;28382:13;:40;;28398:24;;;;;;;;-1:-1:-1;;28428:40:0;;;;;;;28444:24;;;;;;28428:40;;;;;-1:-1:-1;;28525:36:0;-1:-1:-1;;;28488:22:0;;;;28474:36;;-1:-1:-1;;28525:36:0;;-1:-1:-1;;;28539:22:0;;;;28525:36;;;;;-1:-1:-1;;28567:36:0;-1:-1:-1;;;28581:22:0;;;;-1:-1:-1;;;28567:36:0;;;;;;;28360:249;28618:10;28617:11;:27;;;;;28633:11;28632:12;28617:27;:105;;;;-1:-1:-1;;;;;;28649:35:0;;;;;;:29;:35;;;;;;;;;:72;;-1:-1:-1;;;;;;28688:33:0;;;;;;:29;:33;;;;;;;;28649:72;28613:344;;;28746:24;;28730:13;:40;;28746:24;;;;;;;;-1:-1:-1;;28776:40:0;;;;;;;28792:24;;;;;;28776:40;;;;;-1:-1:-1;;28873:36:0;-1:-1:-1;;;28836:22:0;;;;28822:36;;-1:-1:-1;;28873:36:0;;-1:-1:-1;;;28887:22:0;;;;28873:36;;;;;-1:-1:-1;;28915:36:0;-1:-1:-1;;;28929:22:0;;;;-1:-1:-1;;;28915:36:0;;;;;;;28613:344;29033:11;;;-1:-1:-1;;;29033:11:0;;;;;29019;;;;;;29005;;;;;;28973:29;;29033:11;28989:13;;;;;28973;:29;:::i;:::-;:43;;;;:::i;:::-;:57;;;;:::i;:::-;:71;;;;:::i;:::-;28961:9;;:83;;;;;;;;;;;;;;;;;;27685:1364;;;;:::o;31663:1712::-;31703:23;31729:24;31747:4;31729:9;:24::i;:::-;31836:9;;31703:50;;-1:-1:-1;31786:21:0;;31836:9;-1:-1:-1;;;31836:9:0;;;;;31876:13;;;;31836:9;31920:13;;;;;31963:11;;;;;;32009;;;;;;-1:-1:-1;;;32049:11:0;;;31758:25;31963:11;31836:9;32093:31;31876:13;31703:50;32093:31;:::i;:::-;:43;;;;:::i;:::-;:47;;;;:::i;:::-;32067:73;-1:-1:-1;32145:20:0;32168:33;32067:73;32168:15;:33;:::i;:::-;32145:56;;32208:31;32226:12;32208:17;:31::i;:::-;32246:27;32276:41;32300:17;32276:21;:41;:::i;:::-;32246:71;-1:-1:-1;32322:19:0;32387:15;32361:21;32381:1;32361:17;:21;:::i;:::-;32344:39;;:13;:39;:::i;:::-;:59;;;;:::i;:::-;32322:81;;;;32408:26;32493:1;32479:11;32459:17;32437:39;;:19;:39;;;;:::i;:::-;:53;;;;:::i;:::-;:57;;;;:::i;:::-;32408:86;-1:-1:-1;32499:26:0;32570:11;32528:39;;;;:19;:39;:::i;:::-;:53;;;;:::i;:::-;32499:82;-1:-1:-1;32586:24:0;32653:11;32613:37;;;;:19;:37;:::i;:::-;:51;;;;:::i;:::-;32586:78;-1:-1:-1;32669:24:0;32586:78;32719:39;32740:18;32719;:39;:::i;:::-;:58;;;;:::i;:::-;32696:82;;:19;:82;:::i;:::-;32811:15;;32669:109;;-1:-1:-1;32785:62:0;;-1:-1:-1;;;;;32811:15:0;32828:18;32785:17;:62::i;:::-;32884:13;;32858:58;;-1:-1:-1;;;;;32884:13:0;32899:16;32858:17;:58::i;:::-;32953:13;;32927:58;;-1:-1:-1;;;;;32953:13:0;32968:16;32927:17;:58::i;:::-;32996:19;;32992:163;;33023:50;33037:15;33054:18;33023:13;:50::i;:::-;33084:65;;;24311:25:1;;;24367:2;24352:18;;24345:34;;;24395:18;;;24388:34;;;33084:65:0;;24299:2:1;24284:18;33084:65:0;;;;;;;32992:163;33173:13;33161:9;;:25;;;;;;;;;;;;;;;;;;33207:17;33191:13;;:33;;;;;;;;;;;;;;;;;;33245:17;33229:13;;:33;;;;;;;;;;;;;;;;;;33281:15;33267:11;;:29;;;;;;;;;;;;;;;;;;33321:15;33307:11;;:29;;;;;;;;;;;;;;;;;;33355:15;33341:11;;:29;;;;;;;;;;;;;;;;;;31698:1677;;;;;;;;;;;;;;;;31663:1712::o;25122:740::-;25225:23;25249:12;25263:14;25281:29;25293:7;25302;25281:11;:29::i;:::-;25224:86;;;;;;25316:15;25333:23;25358:12;25372:14;25390:46;25402:7;25411:4;25417:6;25425:10;:8;:10::i;:::-;25390:11;:46::i;:::-;-1:-1:-1;;;;;25447:32:0;;;;;;:24;:32;;;;;;25315:121;;-1:-1:-1;25315:121:0;;-1:-1:-1;25315:121:0;-1:-1:-1;25315:121:0;-1:-1:-1;25447:32:0;;25443:93;;;-1:-1:-1;;;;;25505:15:0;;;;;;:7;:15;;;;;;:25;;25523:7;;25505:25;:::i;:::-;-1:-1:-1;;;;;25487:15:0;;;;;;:7;:15;;;;;:43;25443:93;-1:-1:-1;;;;;25544:35:0;;;;;;:24;:35;;;;;;;;25540:110;;;-1:-1:-1;;;;;25608:18:0;;;;;;:7;:18;;;;;;:36;;25629:15;;25608:36;:::i;:::-;-1:-1:-1;;;;;25587:18:0;;;;;;:7;:18;;;;;:57;25540:110;-1:-1:-1;;;;;25672:15:0;;;;;;:7;:15;;;;;;:25;;25690:7;;25672:25;:::i;:::-;-1:-1:-1;;;;;25654:15:0;;;;;;;:7;:15;;;;;;:43;;;;25723:18;;;;;;;:36;;25744:15;;25723:36;:::i;:::-;-1:-1:-1;;;;;25702:18:0;;;;;;:7;:18;;;;;:57;25764:39;25776:4;25782;25788:6;25796;25764:11;:39::i;:::-;25830:9;-1:-1:-1;;;;;25813:44:0;25822:6;-1:-1:-1;;;;;25813:44:0;;25841:15;25813:44;;;;1846:25:1;;1834:2;1819:18;;1700:177;25813:44:0;;;;;;;;25219:643;;;;;;;25122:740;;;;:::o;27120:562::-;27212:7;;27171;;;;8302:23;27171:7;27254:331;27278:22;:29;27274:33;;27254:331;;;27367:7;27330;:34;27338:22;27361:1;27338:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;27338:25:0;27330:34;;;;;;;;;;;;;:44;;:97;;;27420:7;27383;:34;27391:22;27414:1;27391:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;27391:25:0;27383:34;;;;;;;;;;;;;:44;27330:97;27320:139;;;-1:-1:-1;;27442:7:0;;;8302:23;;-1:-1:-1;27120:562:0;-1:-1:-1;;27120:562:0:o;27320:139::-;27485:7;:34;27493:22;27516:1;27493:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;27493:25:0;27485:34;;;;;;;;;;;;;27475:44;;:7;:44;:::i;:::-;27465:54;;27545:7;:34;27553:22;27576:1;27553:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;27553:25:0;27545:34;;;;;;;;;;;;;27535:44;;:7;:44;:::i;:::-;27525:54;-1:-1:-1;27309:3:0;;;;:::i;:::-;;;;27254:331;;;;8302:23;27603:7;;:17;;;;:::i;:::-;27593:7;:27;27589:58;;;-1:-1:-1;;27630:7:0;;;8302:23;;-1:-1:-1;27120:562:0;-1:-1:-1;27120:562:0:o;27589:58::-;27660:7;;27669;;-1:-1:-1;27120:562:0;-1:-1:-1;27120:562:0:o;33378:416::-;33463:16;;;33477:1;33463:16;;;;;;;;33439:21;;33463:16;;;;;;;;;;-1:-1:-1;33463:16:0;33439:40;;33502:4;33484;33489:1;33484:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;33484:23:0;;;:7;;;;;;;;;;:23;;;;33522:15;;:22;;;-1:-1:-1;;;33522:22:0;;;;:15;;;;;:20;;:22;;;;;33484:7;;33522:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33512:4;33517:1;33512:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;33512:32:0;;;:7;;;;;;;;;:32;33581:15;;33549:62;;33566:4;;33581:15;33599:11;33549:8;:62::i;:::-;33616:15;;;:173;;-1:-1:-1;;;33616:173:0;;-1:-1:-1;;;;;33616:15:0;;;;:66;;:173;;33688:11;;33740:4;;33758;;33769:15;;33616:173;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3518:322;3632:6;3607:21;:31;;3594:86;;;;-1:-1:-1;;;3594:86:0;;26008:2:1;3594:86:0;;;25990:21:1;26047:2;26027:18;;;26020:30;26086:31;26066:18;;;26059:59;26135:18;;3594:86:0;25806:353:1;3594:86:0;3688:12;3706:9;-1:-1:-1;;;;;3706:14:0;3728:6;3706:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3687:52;;;3757:7;3744:91;;;;-1:-1:-1;;;3744:91:0;;26366:2:1;3744:91:0;;;26348:21:1;26405:2;26385:18;;;26378:30;26444:34;26424:18;;;26417:62;26515:28;26495:18;;;26488:56;26561:19;;3744:91:0;26164:422:1;3744:91:0;3589:251;3518:322;;:::o;33797:348::-;33905:15;;33873:62;;33890:4;;-1:-1:-1;;;;;33905:15:0;33923:11;33873:8;:62::i;:::-;33940:15;;;34099;;33940:200;;-1:-1:-1;;;33940:200:0;;34003:4;33940:200;;;26932:34:1;26982:18;;;26975:34;;;27025:18;;;27018:34;;;27068:18;;;27061:34;;;;-1:-1:-1;;;;;34099:15:0;;;27111:19:1;;;27104:44;34120:15:0;27164:19:1;;;27157:35;33940:15:0;;:31;;33979:9;;26866:19:1;;33940:200:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;26143:417::-;26217:7;26225;26233;26251;26246:310;;-1:-1:-1;26274:7:0;;-1:-1:-1;26283:1:0;;-1:-1:-1;26283:1:0;26266:22;;26246:310;26334:11;;26309:12;;26348:3;;26324:21;;-1:-1:-1;;;26334:11:0;;;;26324:7;:21;:::i;:::-;:27;;;;:::i;:::-;26431:11;;26309:42;;-1:-1:-1;26357:14:0;;26446:3;;26431:11;;;;;;;26417;;;;;;26385:29;;26431:11;26401:13;;;;;26385;:29;:::i;:::-;:43;;;;:::i;:::-;:57;;;;:::i;:::-;26374:69;;;;:7;:69;:::i;:::-;:75;;;;:::i;:::-;26357:92;-1:-1:-1;26455:23:0;26492:13;26357:92;26492:4;:13;:::i;:::-;26481:25;;:7;:25;:::i;:::-;26455:51;-1:-1:-1;26537:4:0;;-1:-1:-1;26543:6:0;-1:-1:-1;26512:38:0;;-1:-1:-1;26512:38:0;26246:310;26143:417;;;;;:::o;26563:402::-;26692:7;;;;;26751:21;26761:11;26751:7;:21;:::i;:::-;26733:39;-1:-1:-1;26777:12:0;26792:18;26799:11;26792:4;:18;:::i;:::-;26777:33;-1:-1:-1;26815:14:0;26832:20;26841:11;26832:6;:20;:::i;:::-;26815:37;-1:-1:-1;26857:23:0;26894:13;26815:37;26894:4;:13;:::i;:::-;26883:25;;:7;:25;:::i;:::-;26921:7;;;;-1:-1:-1;26947:4:0;;-1:-1:-1;26947:4:0;-1:-1:-1;26563:402:0;;-1:-1:-1;;;;;;26563:402:0:o;25865:275::-;25970:4;25959:7;;:15;;;;;;;:::i;:::-;;;;;;;;25993:4;25979:10;;:18;;;;;;;:::i;:::-;;;;-1:-1:-1;;26047:4:0;26014:39;;;;:24;:39;;;;;;;;26010:89;;;26077:4;26061:22;;;;:7;:22;;;;;:32;;26087:6;;26061:22;:32;;26087:6;;26061:32;:::i;:::-;;;;-1:-1:-1;;26010:89:0;26119:4;26103:22;;;;:7;:22;;;;;:32;;26129:6;;26103:22;:32;;26129:6;;26103:32;:::i;:::-;;;;-1:-1:-1;;;;;;25865:275:0:o;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:548::-;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;;;1111:3;1296:1;1291:2;1282:6;1271:9;1267:22;1263:31;1256:42;1366:2;1359;1355:7;1350:2;1342:6;1338:15;1334:29;1323:9;1319:45;1315:54;1307:62;;;;827:548;;;;:::o;1380:315::-;1448:6;1456;1509:2;1497:9;1488:7;1484:23;1480:32;1477:52;;;1525:1;1522;1515:12;1477:52;1564:9;1551:23;1583:31;1608:5;1583:31;:::i;:::-;1633:5;1685:2;1670:18;;;;1657:32;;-1:-1:-1;;;1380:315:1:o;2313:180::-;2372:6;2425:2;2413:9;2404:7;2400:23;2396:32;2393:52;;;2441:1;2438;2431:12;2393:52;-1:-1:-1;2464:23:1;;2313:180;-1:-1:-1;2313:180:1:o;2498:456::-;2575:6;2583;2591;2644:2;2632:9;2623:7;2619:23;2615:32;2612:52;;;2660:1;2657;2650:12;2612:52;2699:9;2686:23;2718:31;2743:5;2718:31;:::i;:::-;2768:5;-1:-1:-1;2825:2:1;2810:18;;2797:32;2838:33;2797:32;2838:33;:::i;:::-;2498:456;;2890:7;;-1:-1:-1;;;2944:2:1;2929:18;;;;2916:32;;2498:456::o;3148:248::-;3213:6;3221;3274:2;3262:9;3253:7;3249:23;3245:32;3242:52;;;3290:1;3287;3280:12;3242:52;3326:9;3313:23;3303:33;;3355:35;3386:2;3375:9;3371:18;3355:35;:::i;3401:247::-;3460:6;3513:2;3501:9;3492:7;3488:23;3484:32;3481:52;;;3529:1;3526;3519:12;3481:52;3568:9;3555:23;3587:31;3612:5;3587:31;:::i;3653:671::-;3739:6;3747;3755;3763;3816:3;3804:9;3795:7;3791:23;3787:33;3784:53;;;3833:1;3830;3823:12;3784:53;3872:9;3859:23;3891:31;3916:5;3891:31;:::i;:::-;3941:5;-1:-1:-1;3998:2:1;3983:18;;3970:32;4011:33;3970:32;4011:33;:::i;:::-;4063:7;-1:-1:-1;4122:2:1;4107:18;;4094:32;4135:33;4094:32;4135:33;:::i;:::-;4187:7;-1:-1:-1;4246:2:1;4231:18;;4218:32;4259:33;4218:32;4259:33;:::i;:::-;3653:671;;;;-1:-1:-1;3653:671:1;;-1:-1:-1;;3653:671:1:o;4329:156::-;4395:20;;4455:4;4444:16;;4434:27;;4424:55;;4475:1;4472;4465:12;4490:464;4575:6;4583;4591;4599;4607;4660:3;4648:9;4639:7;4635:23;4631:33;4628:53;;;4677:1;4674;4667:12;4628:53;4700:27;4717:9;4700:27;:::i;:::-;4690:37;;4746:36;4778:2;4767:9;4763:18;4746:36;:::i;:::-;4736:46;;4801:36;4833:2;4822:9;4818:18;4801:36;:::i;:::-;4791:46;;4856:36;4888:2;4877:9;4873:18;4856:36;:::i;:::-;4846:46;;4911:37;4943:3;4932:9;4928:19;4911:37;:::i;:::-;4901:47;;4490:464;;;;;;;;:::o;5462:388::-;5530:6;5538;5591:2;5579:9;5570:7;5566:23;5562:32;5559:52;;;5607:1;5604;5597:12;5559:52;5646:9;5633:23;5665:31;5690:5;5665:31;:::i;:::-;5715:5;-1:-1:-1;5772:2:1;5757:18;;5744:32;5785:33;5744:32;5785:33;:::i;:::-;5837:7;5827:17;;;5462:388;;;;;:::o;5855:356::-;6057:2;6039:21;;;6076:18;;;6069:30;6135:34;6130:2;6115:18;;6108:62;6202:2;6187:18;;5855:356::o;6216:416::-;6418:2;6400:21;;;6457:2;6437:18;;;6430:30;6496:34;6491:2;6476:18;;6469:62;-1:-1:-1;;;6562:2:1;6547:18;;6540:50;6622:3;6607:19;;6216:416::o;6637:127::-;6698:10;6693:3;6689:20;6686:1;6679:31;6729:4;6726:1;6719:15;6753:4;6750:1;6743:15;6769:127;6830:10;6825:3;6821:20;6818:1;6811:31;6861:4;6858:1;6851:15;6885:4;6882:1;6875:15;6901:128;6968:9;;;6989:11;;;6986:37;;;7003:18;;:::i;7034:127::-;7095:10;7090:3;7086:20;7083:1;7076:31;7126:4;7123:1;7116:15;7150:4;7147:1;7140:15;7166:135;7205:3;7226:17;;;7223:43;;7246:18;;:::i;:::-;-1:-1:-1;7293:1:1;7282:13;;7166:135::o;8567:127::-;8628:10;8623:3;8619:20;8616:1;8609:31;8659:4;8656:1;8649:15;8683:4;8680:1;8673:15;8699:120;8739:1;8765;8755:35;;8770:18;;:::i;:::-;-1:-1:-1;8804:9:1;;8699:120::o;9234:168::-;9307:9;;;9338;;9355:15;;;9349:22;;9335:37;9325:71;;9376:18;;:::i;19777:125::-;19842:9;;;19863:10;;;19860:36;;;19876:18;;:::i;20966:209::-;-1:-1:-1;;21130:38:1;;;;21112:57;;21100:2;21085:18;;20966:209::o;23630:148::-;23718:4;23697:12;;;23711;;;23693:31;;23736:13;;23733:39;;;23752:18;;:::i;23783:165::-;23821:1;23855:4;23852:1;23848:12;23879:3;23869:37;;23886:18;;:::i;:::-;23938:3;23931:4;23928:1;23924:12;23920:22;23915:27;;;23783:165;;;;:::o;23953:151::-;24043:4;24036:12;;;24022;;;24018:31;;24061:14;;24058:40;;;24078:18;;:::i;24565:251::-;24635:6;24688:2;24676:9;24667:7;24663:23;24659:32;24656:52;;;24704:1;24701;24694:12;24656:52;24736:9;24730:16;24755:31;24780:5;24755:31;:::i;24821:980::-;25083:4;25131:3;25120:9;25116:19;25162:6;25151:9;25144:25;25188:2;25226:6;25221:2;25210:9;25206:18;25199:34;25269:3;25264:2;25253:9;25249:18;25242:31;25293:6;25328;25322:13;25359:6;25351;25344:22;25397:3;25386:9;25382:19;25375:26;;25436:2;25428:6;25424:15;25410:29;;25457:1;25467:195;25481:6;25478:1;25475:13;25467:195;;;25546:13;;-1:-1:-1;;;;;25542:39:1;25530:52;;25637:15;;;;25602:12;;;;25578:1;25496:9;25467:195;;;-1:-1:-1;;;;;;;25718:32:1;;;;25713:2;25698:18;;25691:60;-1:-1:-1;;;25782:3:1;25767:19;25760:35;25679:3;24821:980;-1:-1:-1;;;24821:980:1:o;27203:306::-;27291:6;27299;27307;27360:2;27348:9;27339:7;27335:23;27331:32;27328:52;;;27376:1;27373;27366:12;27328:52;27405:9;27399:16;27389:26;;27455:2;27444:9;27440:18;27434:25;27424:35;;27499:2;27488:9;27484:18;27478:25;27468:35;;27203:306;;;;;:::o

Swarm Source

ipfs://d4073caf4a0ce1163ab25a3589ad8df2ea0bac56aede69f3694a175c77740c18
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.