ETH Price: $3,479.74 (+7.17%)
Gas: 11 Gwei

Token

WPT Investing Corp (WPT)
 

Overview

Max Total Supply

10,000,000 WPT

Holders

481

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
7.74558760042214653 WPT

Value
$0.00
0x2aeb6fd20d387517f72daada723b00c93ae89b28
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
WPTInvestingCorpToken

Compiler Version
v0.8.15+commit.e14f2714

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-07-06
*/

// SPDX-License-Identifier: MIT

/**
 * @author Brewlabs
 * This token contract has been developed by Brewlabs.info
 */

pragma solidity 0.8.15;

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;
}

interface IERC20Metadata is IERC20 {
	function name() external view returns (string memory);
	function symbol() external view returns (string memory);
	function decimals() external view returns (uint8);
}

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;
	}
}

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 ERC20 is Context, IERC20, IERC20Metadata {
	using SafeMath for uint256;

	mapping(address => uint256) private _balances;
	mapping(address => mapping(address => uint256)) private _allowances;

	uint256 private _totalSupply;
	string private _name;
	string private _symbol;

	constructor(string memory name_, string memory symbol_) {
		_name = name_;
		_symbol = symbol_;
	}

	function name() public view virtual override returns (string memory) {
		return _name;
	}

	function symbol() public view virtual override returns (string memory) {
		return _symbol;
	}

	function decimals() public view virtual override returns (uint8) {
		return 18;
	}

	function totalSupply() public view virtual override returns (uint256) {
		return _totalSupply;
	}

	function balanceOf(address account) public view virtual override returns (uint256) {
		return _balances[account];
	}

	function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
		_transfer(_msgSender(), recipient, amount);
		return true;
	}

	function allowance(address owner, address spender) public view virtual override returns (uint256) {
		return _allowances[owner][spender];
	}

	function approve(address spender, uint256 amount) public virtual override returns (bool) {
		_approve(_msgSender(), spender, amount);
		return true;
	}

	function transferFrom(
		address sender,
		address recipient,
		uint256 amount
	) public virtual override returns (bool) {
		_transfer(sender, recipient, amount);
		_approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
		return true;
	}

	function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
		_approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
		return true;
	}

	function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
		_approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
		return true;
	}

	function _transfer(
		address sender,
		address recipient,
		uint256 amount
	) internal virtual {
		require(sender != address(0), "ERC20: transfer from the zero address");
		require(recipient != address(0), "ERC20: transfer to the zero address");
		_beforeTokenTransfer(sender, recipient, amount);
		_balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
		_balances[recipient] = _balances[recipient].add(amount);
		emit Transfer(sender, recipient, amount);
	}

	function _mint(address account, uint256 amount) internal virtual {
		require(account != address(0), "ERC20: mint to the zero address");
		_beforeTokenTransfer(address(0), account, amount);
		_totalSupply = _totalSupply.add(amount);
		_balances[account] = _balances[account].add(amount);
		emit Transfer(address(0), account, amount);
	}

	function _burn(address account, uint256 amount) internal virtual {
		require(account != address(0), "ERC20: burn from the zero address");
		_beforeTokenTransfer(account, address(0), amount);
		_balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance");
		_totalSupply = _totalSupply.sub(amount);
		emit Transfer(account, address(0), amount);
	}

	function _approve(
		address owner,
		address spender,
		uint256 amount
	) internal virtual {
		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 _beforeTokenTransfer(
		address from,
		address to,
		uint256 amount
	) internal virtual {}
}

contract WPTInvestingCorpToken is Ownable, ERC20 {
	IRouter public uniswapV2Router;
	address public immutable uniswapV2Pair;

	string private constant _name = "WPT Investing Corp";
	string private constant _symbol = "WPT";
	uint8 private constant _decimals = 18;

	bool public isTradingEnabled;

	// initialSupply
	uint256 constant initialSupply = 10000000 * (10**18);
	uint256 public maxWalletAmount = initialSupply * 2 / 100;
	uint256 public maxTxAmount = initialSupply * 1 / 100;

	bool private _swapping;
	uint256 public minimumTokensBeforeSwap = initialSupply * 25 / 100000;

	address public liquidityWallet;
	address public operationsWallet;
	address public buyBackWallet;
    address public treasuryWallet;

	struct CustomTaxPeriod {
		bytes23 periodName;
		uint8 blocksInPeriod;
		uint256 timeInPeriod;
		uint8 liquidityFeeOnBuy;
		uint8 liquidityFeeOnSell;
		uint8 operationsFeeOnBuy;
		uint8 operationsFeeOnSell;
		uint8 buyBackFeeOnBuy;
		uint8 buyBackFeeOnSell;
		uint8 treasuryFeeOnBuy;
		uint8 treasuryFeeOnSell;
	}

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

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

	uint8 private _liquidityFee;
	uint8 private _operationsFee;
	uint8 private _buyBackFee;
	uint8 private _treasuryFee;
	uint8 private _totalFee;

	event AutomatedMarketMakerPairChange(address indexed pair, bool indexed value);
	event UniswapV2RouterChange(address indexed newAddress, address indexed oldAddress);
	event WalletChange(string indexed indentifier, address indexed newWallet, address indexed oldWallet);
	event FeeChange(string indexed identifier, uint8 liquidityFee, uint8 operationsFee, uint8 buyBackFee, uint8 treasuryFee);
	event CustomTaxPeriodChange(uint256 indexed newValue, uint256 indexed oldValue, string indexed taxType, bytes23 period);
	event BlockedAccountChange(address indexed holder, bool indexed status);
    event ExcludeFromFeesChange(address indexed account, bool isExcluded);
	event AllowedWhenTradingDisabledChange(address indexed account, bool isExcluded);
	event MaxTransactionAmountChange(uint256 indexed newValue, uint256 indexed oldValue);
	event MaxWalletAmountChange(uint256 indexed newValue, uint256 indexed oldValue);
	event ExcludeFromMaxTransferChange(address indexed account, bool isExcluded);
	event ExcludeFromMaxWalletChange(address indexed account, bool isExcluded);
	event MinTokenAmountBeforeSwapChange(uint256 indexed newValue, uint256 indexed oldValue);
	event SwapAndLiquify(uint256 tokensSwapped, uint256 ethReceived,uint256 tokensIntoLiqudity);
    event ClaimETHOverflow(uint256 amount);
	event FeesApplied(uint8 liquidityFee, uint8 operationsFee, uint8 buyBackFee, uint8 treasuryFee, uint8 totalFee);

	constructor() ERC20(_name, _symbol) {
		liquidityWallet = owner();
		operationsWallet = owner();
		buyBackWallet = owner();
        treasuryWallet = 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;

		_isAllowedToTradeWhenDisabled[owner()] = true;

		_isExcludedFromMaxTransactionLimit[address(this)] = true;

		_isExcludedFromMaxWalletLimit[_uniswapV2Pair] = true;
		_isExcludedFromMaxWalletLimit[address(uniswapV2Router)] = true;
		_isExcludedFromMaxWalletLimit[address(this)] = true;
		_isExcludedFromMaxWalletLimit[owner()] = true;

		_mint(owner(), initialSupply);
	}

	receive() external payable {}

	// Setters
	function activateTrading() external onlyOwner {
		isTradingEnabled = true;
        if (_launchStartTimestamp == 0) {
            _launchStartTimestamp = block.timestamp;
            _launchBlockNumber = block.number;
        }
	}
	function deactivateTrading() external onlyOwner {
		isTradingEnabled = false;
	}
	function _setAutomatedMarketMakerPair(address pair, bool value) private {
		require(automatedMarketMakerPairs[pair] != value, "WarPigsToken: Automated market maker pair is already set to that value");
		automatedMarketMakerPairs[pair] = value;
		emit AutomatedMarketMakerPairChange(pair, value);
	}
	function allowTradingWhenDisabled(address account, bool allowed) external onlyOwner {
		_isAllowedToTradeWhenDisabled[account] = allowed;
		emit AllowedWhenTradingDisabledChange(account, allowed);
	}
	function excludeFromFees(address account, bool excluded) external onlyOwner {
		require(_isExcludedFromFee[account] != excluded, "WarPigsToken: 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, "WarPigsToken: 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, "WarPigsToken: Account is already the value of 'excluded'");
		_isExcludedFromMaxWalletLimit[account] = excluded;
		emit ExcludeFromMaxWalletChange(account, excluded);
	}
	function setWallets(address newLiquidityWallet, address newOperationsWallet, address newBuyBackWallet, address newTreasuryWallet) external onlyOwner {
		if(liquidityWallet != newLiquidityWallet) {
			require(newLiquidityWallet != address(0), "WarPigsToken: The liquidityWallet cannot be 0");
			emit WalletChange('liquidityWallet', newLiquidityWallet, liquidityWallet);
			liquidityWallet = newLiquidityWallet;
		}
		if(operationsWallet != newOperationsWallet) {
			require(newOperationsWallet != address(0), "WarPigsToken: The operationsWallet cannot be 0");
			emit WalletChange('operationsWallet', newOperationsWallet, operationsWallet);
			operationsWallet = newOperationsWallet;
		}
		if(buyBackWallet != newBuyBackWallet) {
			require(newBuyBackWallet != address(0), "WarPigsToken: The buyBackWallet cannot be 0");
			emit WalletChange('buyBackWallet', newBuyBackWallet, buyBackWallet);
			buyBackWallet = newBuyBackWallet;
		}
        if(treasuryWallet != newTreasuryWallet) {
			require(newTreasuryWallet != address(0), "WarPigsToken: The treasuryWallet cannot be 0");
			emit WalletChange('treasuryWallet', newTreasuryWallet, treasuryWallet);
			treasuryWallet = newTreasuryWallet;
		}
	}
    function blockAccount(address account) external onlyOwner {
		require(!_isBlocked[account], "WarPigsToken: Account is already blocked");
		if (_launchStartTimestamp > 0) {
			require((block.timestamp - _launchStartTimestamp) < _blockedTimeLimit, "WarPigsToken: Time to block accounts has expired");
		}
		_isBlocked[account] = true;
		emit BlockedAccountChange(account, true);
	}
	function unblockAccount(address account) external onlyOwner {
		require(_isBlocked[account], "WarPigsToken: Account is not blcoked");
		_isBlocked[account] = false;
		emit BlockedAccountChange(account, false);
	}
	// Base fees
	function setBaseFeesOnBuy(uint8 _liquidityFeeOnBuy, uint8 _operationsFeeOnBuy, uint8 _buyBackFeeOnBuy, uint8 _treasuryFeeOnBuy) external onlyOwner {
		_setCustomBuyTaxPeriod(_base, _liquidityFeeOnBuy, _operationsFeeOnBuy, _buyBackFeeOnBuy, _treasuryFeeOnBuy);
		emit FeeChange('baseFees-Buy', _liquidityFeeOnBuy, _operationsFeeOnBuy, _buyBackFeeOnBuy, _treasuryFeeOnBuy);
	}
	function setBaseFeesOnSell(uint8 _liquidityFeeOnSell, uint8 _operationsFeeOnSell, uint8 _buyBackFeeOnSell, uint8 _treasuryFeeOnSell) external onlyOwner {
		_setCustomSellTaxPeriod(_base, _liquidityFeeOnSell, _operationsFeeOnSell, _buyBackFeeOnSell, _treasuryFeeOnSell);
		emit FeeChange('baseFees-Sell', _liquidityFeeOnSell, _operationsFeeOnSell, _buyBackFeeOnSell, _treasuryFeeOnSell);
	}
	function setUniswapRouter(address newAddress) external onlyOwner {
		require(newAddress != address(uniswapV2Router), "WarPigsToken: The router already has that address");
		emit UniswapV2RouterChange(newAddress, address(uniswapV2Router));
		uniswapV2Router = IRouter(newAddress);
	}
	function setMinimumTokensBeforeSwap(uint256 newValue) external onlyOwner {
		require(newValue != minimumTokensBeforeSwap, "WarPigsToken: Cannot update minimumTokensBeforeSwap to same value");
		emit MinTokenAmountBeforeSwapChange(newValue, minimumTokensBeforeSwap);
		minimumTokensBeforeSwap = newValue;
	}
	function setMaxTransactionAmount(uint256 newValue) external onlyOwner {
        require(newValue != maxTxAmount, "WarPigsToken: Cannot update maxTxAmount to same value");
        emit MaxTransactionAmountChange(newValue, maxTxAmount);
        maxTxAmount = newValue;
	}
	function setMaxWalletAmount(uint256 newValue) external onlyOwner {
		require(newValue != maxWalletAmount, "WarPigsToken Cannot update maxWalletAmount to same value");
		emit MaxWalletAmountChange(newValue, maxWalletAmount);
		maxWalletAmount = newValue;
	}
	function claimETHOverflow(uint256 amount) external onlyOwner {
	    require(amount < address(this).balance, "WarPigsToken: Cannot send more than contract balance");
        (bool success,) = address(owner()).call{value : amount}("");
        if (success){
            emit ClaimETHOverflow(amount);
        }
	}

	// Getters
	function getBaseBuyFees() external view returns (uint8, uint8, uint8, uint8){
		return (_base.liquidityFeeOnBuy, _base.operationsFeeOnBuy, _base.buyBackFeeOnBuy, _base.treasuryFeeOnBuy);
	}
	function getBaseSellFees() external view returns (uint8, uint8, uint8, uint8){
		return (_base.liquidityFeeOnSell, _base.operationsFeeOnSell, _base.buyBackFeeOnSell, _base.treasuryFeeOnSell);
	}

	// Main
	function _transfer(
		address from,
		address to,
		uint256 amount
		) internal override {
			require(from != address(0), "ERC20: transfer from the zero address");
			require(to != address(0), "ERC20: transfer to the zero address");

			if(amount == 0) {
				super._transfer(from, to, 0);
				return;
			}

			bool isBuyFromLp = automatedMarketMakerPairs[from];
			bool isSelltoLp = automatedMarketMakerPairs[to];

			if(!_isAllowedToTradeWhenDisabled[from] && !_isAllowedToTradeWhenDisabled[to]) {
				require(isTradingEnabled, "WarPigsToken: Trading is currently disabled.");
                require(!_isBlocked[to], "WarPigsToken: Account is blocked");
			    require(!_isBlocked[from], "WarPigsToken: Account is blocked");

				if (!_isExcludedFromMaxTransactionLimit[to] && !_isExcludedFromMaxTransactionLimit[from]) {
                	require(amount <= maxTxAmount, "WarPigsToken: Amount exceeds the maxTxAmount.");
				}
				if (!_isExcludedFromMaxWalletLimit[to]) {
					require((balanceOf(to) + amount) <= maxWalletAmount, "WarPigsToken: Expected wallet amount exceeds the maxWalletAmount.");
				}
			}

			_adjustTaxes(isBuyFromLp, isSelltoLp);
			bool canSwap = balanceOf(address(this)) >= minimumTokensBeforeSwap;

			if (
				isTradingEnabled &&
				canSwap &&
				!_swapping &&
				_totalFee > 0 &&
				automatedMarketMakerPairs[to]
			) {
				_swapping = true;
				_swapAndLiquify();
				_swapping = false;
			}

			bool takeFee = !_swapping && isTradingEnabled;

			if(_isExcludedFromFee[from] || _isExcludedFromFee[to]){
				takeFee = false;
			}
			if (takeFee && _totalFee > 0) {
				uint256 fee = amount * _totalFee / 100;
				amount = amount - fee;
				super._transfer(from, address(this), fee);
			}
			super._transfer(from, to, amount);
	}
	function _adjustTaxes(bool isBuyFromLp, bool isSelltoLp) private {
		_liquidityFee = 0;
		_operationsFee = 0;
		_buyBackFee = 0;
		_treasuryFee = 0;

		if (isBuyFromLp) {
            if (block.number - _launchBlockNumber <= 5) {
                _liquidityFee = 100;
            }
			else {
                _liquidityFee = _base.liquidityFeeOnBuy;
                _operationsFee = _base.operationsFeeOnBuy;
                _buyBackFee = _base.buyBackFeeOnBuy;
                _treasuryFee = _base.treasuryFeeOnBuy;
            }
		}
	    if (isSelltoLp) {
	    	_liquidityFee = _base.liquidityFeeOnSell;
			_operationsFee = _base.operationsFeeOnSell;
			_buyBackFee = _base.buyBackFeeOnSell;
			_treasuryFee = _base.treasuryFeeOnSell;
		}
		_totalFee = _liquidityFee + _operationsFee + _buyBackFee + _treasuryFee;
		emit FeesApplied(_liquidityFee, _operationsFee, _buyBackFee, _treasuryFee, _totalFee);
	}
	function _setCustomSellTaxPeriod(CustomTaxPeriod storage map,
		uint8 _liquidityFeeOnSell,
		uint8 _operationsFeeOnSell,
		uint8 _buyBackFeeOnSell,
		uint8 _treasuryFeeOnSell
	) private {
		if (map.liquidityFeeOnSell != _liquidityFeeOnSell) {
			emit CustomTaxPeriodChange(_liquidityFeeOnSell, map.liquidityFeeOnSell, 'liquidityFeeOnSell', map.periodName);
			map.liquidityFeeOnSell = _liquidityFeeOnSell;
		}
		if (map.operationsFeeOnSell != _operationsFeeOnSell) {
			emit CustomTaxPeriodChange(_operationsFeeOnSell, map.operationsFeeOnSell, 'operationsFeeOnSell', map.periodName);
			map.operationsFeeOnSell = _operationsFeeOnSell;
		}
		if (map.buyBackFeeOnSell != _buyBackFeeOnSell) {
			emit CustomTaxPeriodChange(_buyBackFeeOnSell, map.buyBackFeeOnSell, 'buyBackFeeOnSell', map.periodName);
			map.buyBackFeeOnSell = _buyBackFeeOnSell;
		}
		if (map.treasuryFeeOnSell != _treasuryFeeOnSell) {
			emit CustomTaxPeriodChange(_treasuryFeeOnSell, map.treasuryFeeOnSell, 'treasuryFeeOnSell', map.periodName);
			map.treasuryFeeOnSell = _treasuryFeeOnSell;
		}
	}
	function _setCustomBuyTaxPeriod(CustomTaxPeriod storage map,
		uint8 _liquidityFeeOnBuy,
		uint8 _operationsFeeOnBuy,
		uint8 _buyBackFeeOnBuy,
		uint8 _treasuryFeeOnBuy
		) private {
		if (map.liquidityFeeOnBuy != _liquidityFeeOnBuy) {
			emit CustomTaxPeriodChange(_liquidityFeeOnBuy, map.liquidityFeeOnBuy, 'liquidityFeeOnBuy', map.periodName);
			map.liquidityFeeOnBuy = _liquidityFeeOnBuy;
		}
		if (map.operationsFeeOnBuy != _operationsFeeOnBuy) {
			emit CustomTaxPeriodChange(_operationsFeeOnBuy, map.operationsFeeOnBuy, 'operationsFeeOnBuy', map.periodName);
			map.operationsFeeOnBuy = _operationsFeeOnBuy;
		}
		if (map.buyBackFeeOnBuy != _buyBackFeeOnBuy) {
			emit CustomTaxPeriodChange(_buyBackFeeOnBuy, map.buyBackFeeOnBuy, 'buyBackFeeOnBuy', map.periodName);
			map.buyBackFeeOnBuy = _buyBackFeeOnBuy;
		}
		if (map.treasuryFeeOnBuy != _treasuryFeeOnBuy) {
			emit CustomTaxPeriodChange(_treasuryFeeOnBuy, map.treasuryFeeOnBuy, 'treasuryFeeOnBuy', map.periodName);
			map.treasuryFeeOnBuy = _treasuryFeeOnBuy;
		}
	}
	function _swapAndLiquify() private {
		uint256 contractBalance = balanceOf(address(this));
		uint256 initialETHBalance = address(this).balance;

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

		_swapTokensForETH(amountToSwap);

		uint256 ETHBalanceAfterSwap = address(this).balance  - initialETHBalance;
		uint256 totalETHFee = _totalFee - _liquidityFee / 2;
		uint256 amountETHLiquidity = ETHBalanceAfterSwap * _liquidityFee / totalETHFee / 2;
		uint256 amountETHBuyBack = ETHBalanceAfterSwap * _buyBackFee / totalETHFee;
		uint256 amountETHOperations = ETHBalanceAfterSwap * _operationsFee / totalETHFee;
		uint256 amountETHTreasury = ETHBalanceAfterSwap - (amountETHLiquidity + amountETHBuyBack + amountETHOperations);

		payable(buyBackWallet).transfer(amountETHBuyBack);
		payable(operationsWallet).transfer(amountETHOperations);
        payable(treasuryWallet).transfer(amountETHTreasury);

		if (amountToLiquify > 0) {
			_addLiquidity(amountToLiquify, amountETHLiquidity);
			emit SwapAndLiquify(amountToSwap, amountETHLiquidity, amountToLiquify);
        }
	}
	function _swapTokensForETH(uint256 tokenAmount) private {
		address[] memory path = new address[](2);
		path[0] = address(this);
		path[1] = uniswapV2Router.WETH();
		_approve(address(this), address(uniswapV2Router), tokenAmount);
		uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
			tokenAmount,
			0, // accept any amount of ETH
			path,
			address(this),
			block.timestamp
		);
	}
	function _addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
		_approve(address(this), address(uniswapV2Router), tokenAmount);
		uniswapV2Router.addLiquidityETH{value: ethAmount}(
			address(this),
			tokenAmount,
			0, // slippage is unavoidable
			0, // slippage is unavoidable
			liquidityWallet,
			block.timestamp
		);
	}
}

Contract Security Audit

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":"uint256","name":"newValue","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"oldValue","type":"uint256"},{"indexed":true,"internalType":"string","name":"taxType","type":"string"},{"indexed":false,"internalType":"bytes23","name":"period","type":"bytes23"}],"name":"CustomTaxPeriodChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"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":"operationsFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"buyBackFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"treasuryFee","type":"uint8"}],"name":"FeeChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint8","name":"liquidityFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"operationsFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"buyBackFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"treasuryFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"totalFee","type":"uint8"}],"name":"FeesApplied","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"oldValue","type":"uint256"}],"name":"MaxTransactionAmountChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"oldValue","type":"uint256"}],"name":"MaxWalletAmountChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"oldValue","type":"uint256"}],"name":"MinTokenAmountBeforeSwapChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UniswapV2RouterChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"string","name":"indentifier","type":"string"},{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"WalletChange","type":"event"},{"inputs":[],"name":"activateTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"allowed","type":"bool"}],"name":"allowTradingWhenDisabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"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":"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"}],"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"}],"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":"maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumTokensBeforeSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"operationsWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_liquidityFeeOnBuy","type":"uint8"},{"internalType":"uint8","name":"_operationsFeeOnBuy","type":"uint8"},{"internalType":"uint8","name":"_buyBackFeeOnBuy","type":"uint8"},{"internalType":"uint8","name":"_treasuryFeeOnBuy","type":"uint8"}],"name":"setBaseFeesOnBuy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_liquidityFeeOnSell","type":"uint8"},{"internalType":"uint8","name":"_operationsFeeOnSell","type":"uint8"},{"internalType":"uint8","name":"_buyBackFeeOnSell","type":"uint8"},{"internalType":"uint8","name":"_treasuryFeeOnSell","type":"uint8"}],"name":"setBaseFeesOnSell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setMaxTransactionAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setMinimumTokensBeforeSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"setUniswapRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newLiquidityWallet","type":"address"},{"internalType":"address","name":"newOperationsWallet","type":"address"},{"internalType":"address","name":"newBuyBackWallet","type":"address"},{"internalType":"address","name":"newTreasuryWallet","type":"address"}],"name":"setWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"treasuryWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","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"}]

60a060405260646200001e6a084595161401484a0000006002620007ab565b6200002a9190620007cd565b6007556064620000476a084595161401484a0000006001620007ab565b620000539190620007cd565b600855620186a0620000726a084595161401484a0000006019620007ab565b6200007e9190620007cd565b600a556040805161016081018252636261736560e01b815260006020820181905291810182905260036060820181905260808201819052600660a0830181905260c083015260e082018190526101008201819052610120820181905261014090910152600f80546001600160c01b031916636261736560981b179055601055601180546703030303060603036001600160401b03199091161790553480156200012657600080fd5b5060405180604001604052806012815260200171057505420496e76657374696e6720436f72760741b8152506040518060400160405280600381526020016215d41560ea1b8152506000620001806200051c60201b60201c565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506004620001d8838262000894565b506005620001e7828262000894565b505060008054600b80546001600160a01b039092166001600160a01b03199283168117909155600c8054831682179055600d8054831682179055600e80549092161790556040805163c45a015560e01b81529051737a250d5630b4cf539739df2c5dacb4c659f2488d9350839163c45a01559160048083019260209291908290030181865afa1580156200027f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002a5919062000960565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002f3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000319919062000960565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000367573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200038d919062000960565b600680546001600160a01b0319166001600160a01b038581169190911790915581166080529050620003c181600162000520565b600160186000620003da6000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff199586161790553081526018909252812080549092166001908117909255601790620004336000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff1996871617905530808252601585528382208054871660019081179091558784168352601695869052848320805488168217905560065490931682528382208054871684179055815291822080549094168117909355620004c36000546001600160a01b031690565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905562000514620005026000546001600160a01b031690565b6a084595161401484a0000006200061f565b5050620009a6565b3390565b6001600160a01b03821660009081526019602052604090205481151560ff909116151503620005cb5760405162461bcd60e51b815260206004820152604660248201527f57617250696773546f6b656e3a204175746f6d61746564206d61726b6574206d60448201527f616b6572207061697220697320616c72656164792073657420746f20746861746064820152652076616c756560d01b608482015260a4015b60405180910390fd5b6001600160a01b038216600081815260196020526040808220805460ff191685151590811790915590519092917fa666b9b2dc2c8f2d86fda7ba3a115be30d3a958fd84d359cbc6bc919df97990a91a35050565b6001600160a01b038216620006775760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401620005c2565b62000693816003546200072b60201b62001ab31790919060201c565b6003556001600160a01b038216600090815260016020908152604090912054620006c891839062001ab36200072b821b17901c565b6001600160a01b0383166000818152600160205260408082209390935591519091907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906200071a9085815260200190565b60405180910390a35050565b505050565b6000806200073a83856200098b565b9050838110156200078e5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401620005c2565b9392505050565b634e487b7160e01b600052601160045260246000fd5b6000816000190483118215151615620007c857620007c862000795565b500290565b600082620007eb57634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200081b57607f821691505b6020821081036200083c57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200072657600081815260208120601f850160051c810160208610156200086b5750805b601f850160051c820191505b818110156200088c5782815560010162000877565b505050505050565b81516001600160401b03811115620008b057620008b0620007f0565b620008c881620008c1845462000806565b8462000842565b602080601f831160018114620009005760008415620008e75750858301515b600019600386901b1c1916600185901b1785556200088c565b600085815260208120601f198616915b82811015620009315788860151825594840194600190910190840162000910565b5085821015620009505787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000602082840312156200097357600080fd5b81516001600160a01b03811681146200078e57600080fd5b60008219821115620009a157620009a162000795565b500190565b6080516133bc620009c2600039600061047501526133bc6000f3fe6080604052600436106102605760003560e01c80637c0a893d11610144578063b62496f5116100b6578063d32215761161007a578063d322157614610766578063d469801614610786578063dd62ed3e146107a6578063f2fde38b146107ec578063fd72e22a1461080c578063fe0175351461082c57600080fd5b8063b62496f514610681578063bea9849e146106b1578063c0246668146106d1578063cd43e228146106f1578063d2d7ad831461075057600080fd5b806395d89b411161010857806395d89b41146105d65780639d952ce9146105eb578063a457c2d71461060b578063a9059cbb1461062b578063aa4bde281461064b578063aee50b1e1461066157600080fd5b80637c0a893d1461054257806383672f3e14610562578063880bcbc1146105825780638c0b5e22146105a25780638da5cb5b146105b857600080fd5b806327a14fc2116101dd57806349bd5a5e116101a157806349bd5a5e146104635780634d78fdc61461049757806366781291146104b757806370a08231146104d7578063715018a61461050d578063781edb3c1461052257600080fd5b806327a14fc2146103d2578063313ce567146103f257806334cf1fea1461040e57806339509351146104235780634626402b1461044357600080fd5b80631694505e116102245780631694505e1461031b57806318160ddd146103535780631cd348c0146103725780631e293c101461039257806323b872dd146103b257600080fd5b8063064a59d01461026c57806306fdde03146102a2578063095ea7b3146102c4578063098df585146102e45780630bd05b691461030657600080fd5b3661026757005b600080fd5b34801561027857600080fd5b5060065461028d90600160a01b900460ff1681565b60405190151581526020015b60405180910390f35b3480156102ae57600080fd5b506102b7610867565b6040516102999190612d5c565b3480156102d057600080fd5b5061028d6102df366004612dc9565b6108f9565b3480156102f057600080fd5b506103046102ff366004612df5565b61090f565b005b34801561031257600080fd5b50610304610a43565b34801561032757600080fd5b5060065461033b906001600160a01b031681565b6040516001600160a01b039091168152602001610299565b34801561035f57600080fd5b506003545b604051908152602001610299565b34801561037e57600080fd5b50600d5461033b906001600160a01b031681565b34801561039e57600080fd5b506103046103ad366004612df5565b610a95565b3480156103be57600080fd5b5061028d6103cd366004612e0e565b610b61565b3480156103de57600080fd5b506103046103ed366004612df5565b610bca565b3480156103fe57600080fd5b5060405160128152602001610299565b34801561041a57600080fd5b50610304610c9e565b34801561042f57600080fd5b5061028d61043e366004612dc9565b610cd7565b34801561044f57600080fd5b50600e5461033b906001600160a01b031681565b34801561046f57600080fd5b5061033b7f000000000000000000000000000000000000000000000000000000000000000081565b3480156104a357600080fd5b506103046104b2366004612e4f565b610d0d565b3480156104c357600080fd5b506103046104d2366004612e82565b610df8565b3480156104e357600080fd5b506103646104f2366004612e4f565b6001600160a01b031660009081526001602052604090205490565b34801561051957600080fd5b50610304610ea6565b34801561052e57600080fd5b5061030461053d366004612ed6565b610f1a565b34801561054e57600080fd5b5061030461055d366004612e4f565b610fe4565b34801561056e57600080fd5b5061030461057d366004612f14565b61115a565b34801561058e57600080fd5b5061030461059d366004612ed6565b611526565b3480156105ae57600080fd5b5061036460085481565b3480156105c457600080fd5b506000546001600160a01b031661033b565b3480156105e257600080fd5b506102b76115e8565b3480156105f757600080fd5b50610304610606366004612e82565b6115f7565b34801561061757600080fd5b5061028d610626366004612dc9565b61164c565b34801561063757600080fd5b5061028d610646366004612dc9565b61169b565b34801561065757600080fd5b5061036460075481565b34801561066d57600080fd5b5061030461067c366004612df5565b6116a8565b34801561068d57600080fd5b5061028d61069c366004612e4f565b60196020526000908152604090205460ff1681565b3480156106bd57600080fd5b506103046106cc366004612e4f565b611786565b3480156106dd57600080fd5b506103046106ec366004612ed6565b611885565b3480156106fd57600080fd5b5060115460ff80821691620100008104821691600160201b8204811691600160301b9004165b6040805160ff95861681529385166020850152918416918301919091529091166060820152608001610299565b34801561075c57600080fd5b50610364600a5481565b34801561077257600080fd5b50610304610781366004612ed6565b611947565b34801561079257600080fd5b50600b5461033b906001600160a01b031681565b3480156107b257600080fd5b506103646107c1366004612f70565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b3480156107f857600080fd5b50610304610807366004612e4f565b6119c9565b34801561081857600080fd5b50600c5461033b906001600160a01b031681565b34801561083857600080fd5b5060115460ff610100820481169163010000008104821691600160281b8204811691600160381b900416610723565b60606004805461087690612f9e565b80601f01602080910402602001604051908101604052809291908181526020018280546108a290612f9e565b80156108ef5780601f106108c4576101008083540402835291602001916108ef565b820191906000526020600020905b8154815290600101906020018083116108d257829003601f168201915b5050505050905090565b6000610906338484611b19565b50600192915050565b6000546001600160a01b031633146109425760405162461bcd60e51b815260040161093990612fd8565b60405180910390fd5b4781106109ae5760405162461bcd60e51b815260206004820152603460248201527f57617250696773546f6b656e3a2043616e6e6f742073656e64206d6f7265207460448201527368616e20636f6e74726163742062616c616e636560601b6064820152608401610939565b600080546040516001600160a01b039091169083908381818185875af1925050503d80600081146109fb576040519150601f19603f3d011682016040523d82523d6000602084013e610a00565b606091505b505090508015610a3f576040518281527f362ae087cf4ccfc970d45b9e8ce6520f03b4eda3f9d76a70b655dc22badcca48906020015b60405180910390a15b5050565b6000546001600160a01b03163314610a6d5760405162461bcd60e51b815260040161093990612fd8565b6006805460ff60a01b1916600160a01b179055601254600003610a935742601255436013555b565b6000546001600160a01b03163314610abf5760405162461bcd60e51b815260040161093990612fd8565b6008548103610b2e5760405162461bcd60e51b815260206004820152603560248201527f57617250696773546f6b656e3a2043616e6e6f7420757064617465206d61785460448201527478416d6f756e7420746f2073616d652076616c756560581b6064820152608401610939565b60085460405182907f75f1c17bf623f0f7a2bd91ba61e89dff216960370e3e9a46b250750d03e4215e90600090a3600855565b6000610b6e848484611c3e565b610bc08433610bbb8560405180606001604052806028815260200161331a602891396001600160a01b038a1660009081526002602090815260408083203384529091529020549190612147565b611b19565b5060019392505050565b6000546001600160a01b03163314610bf45760405162461bcd60e51b815260040161093990612fd8565b6007548103610c6b5760405162461bcd60e51b815260206004820152603860248201527f57617250696773546f6b656e2043616e6e6f7420757064617465206d6178576160448201527f6c6c6574416d6f756e7420746f2073616d652076616c756500000000000000006064820152608401610939565b60075460405182907f6d3e257c59a11116c3e97bb144abf5ba1a6a9da6bd509192ecf0d48f7be1fc7690600090a3600755565b6000546001600160a01b03163314610cc85760405162461bcd60e51b815260040161093990612fd8565b6006805460ff60a01b19169055565b3360008181526002602090815260408083206001600160a01b03871684529091528120549091610906918590610bbb9086611ab3565b6000546001600160a01b03163314610d375760405162461bcd60e51b815260040161093990612fd8565b6001600160a01b03811660009081526014602052604090205460ff16610dab5760405162461bcd60e51b8152602060048201526024808201527f57617250696773546f6b656e3a204163636f756e74206973206e6f7420626c636044820152631bdad95960e21b6064820152608401610939565b6001600160a01b038116600081815260146020526040808220805460ff19169055519091907f2f092974a5a89dc001cc04aa60bc3afe575e0b7444ef2197f7bb5714b51528ba908390a350565b6000546001600160a01b03163314610e225760405162461bcd60e51b815260040161093990612fd8565b610e30600f85858585612181565b6040516c18985cd95199595ccb54d95b1b609a1b8152600d015b6040805191829003822060ff878116845286811660208501528581168484015284166060840152905190917f69848adfba904cea9fd12f8e800c6bae1d85101b0becc5910e509a93d81449e9919081900360800190a250505050565b6000546001600160a01b03163314610ed05760405162461bcd60e51b815260040161093990612fd8565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b03163314610f445760405162461bcd60e51b815260040161093990612fd8565b6001600160a01b03821660009081526016602052604090205481151560ff909116151503610f845760405162461bcd60e51b81526004016109399061300d565b6001600160a01b038216600081815260166020908152604091829020805460ff191685151590811790915591519182527ff5133f371b17bf21ce0df4ae2c1b6e11ca7c2f27257eb55282edb1ccfd4ecb2e91015b60405180910390a25050565b6000546001600160a01b0316331461100e5760405162461bcd60e51b815260040161093990612fd8565b6001600160a01b03811660009081526014602052604090205460ff16156110885760405162461bcd60e51b815260206004820152602860248201527f57617250696773546f6b656e3a204163636f756e7420697320616c726561647960448201526708189b1bd8dad95960c21b6064820152608401610939565b60125415611108576202a300601254426110a29190613080565b106111085760405162461bcd60e51b815260206004820152603060248201527f57617250696773546f6b656e3a2054696d6520746f20626c6f636b206163636f60448201526f1d5b9d1cc81a185cc8195e1c1a5c995960821b6064820152608401610939565b6001600160a01b038116600081815260146020526040808220805460ff1916600190811790915590519092917f2f092974a5a89dc001cc04aa60bc3afe575e0b7444ef2197f7bb5714b51528ba91a350565b6000546001600160a01b031633146111845760405162461bcd60e51b815260040161093990612fd8565b600b546001600160a01b0385811691161461126c576001600160a01b0384166112055760405162461bcd60e51b815260206004820152602d60248201527f57617250696773546f6b656e3a20546865206c697175696469747957616c6c6560448201526c0742063616e6e6f74206265203609c1b6064820152608401610939565b600b546040516e1b1a5c5d5a591a5d1e55d85b1b195d608a1b81526001600160a01b0391821691861690600f01604051908190038120906000805160206132fa83398151915290600090a4600b80546001600160a01b0319166001600160a01b0386161790555b600c546001600160a01b03848116911614611356576001600160a01b0383166112ee5760405162461bcd60e51b815260206004820152602e60248201527f57617250696773546f6b656e3a20546865206f7065726174696f6e7357616c6c60448201526d065742063616e6e6f7420626520360941b6064820152608401610939565b600c546040516f1bdc195c985d1a5bdb9cd5d85b1b195d60821b81526001600160a01b0391821691851690601001604051908190038120906000805160206132fa83398151915290600090a4600c80546001600160a01b0319166001600160a01b0385161790555b600d546001600160a01b0383811691161461143a576001600160a01b0382166113d55760405162461bcd60e51b815260206004820152602b60248201527f57617250696773546f6b656e3a20546865206275794261636b57616c6c65742060448201526a063616e6e6f7420626520360ac1b6064820152608401610939565b600d80546040516c189d5e509858dad5d85b1b195d609a1b81526001600160a01b03918216929185169101604051908190038120906000805160206132fa83398151915290600090a4600d80546001600160a01b0319166001600160a01b0384161790555b600e546001600160a01b03828116911614611520576001600160a01b0381166114ba5760405162461bcd60e51b815260206004820152602c60248201527f57617250696773546f6b656e3a2054686520747265617375727957616c6c657460448201526b02063616e6e6f7420626520360a41b6064820152608401610939565b600e80546040516d1d1c99585cdd5c9e55d85b1b195d60921b81526001600160a01b03918216929184169101604051908190038120906000805160206132fa83398151915290600090a4600e80546001600160a01b0319166001600160a01b0383161790555b50505050565b6000546001600160a01b031633146115505760405162461bcd60e51b815260040161093990612fd8565b6001600160a01b03821660009081526015602052604090205481151560ff9091161515036115905760405162461bcd60e51b81526004016109399061300d565b6001600160a01b038216600081815260156020908152604091829020805460ff191685151590811790915591519182527f30098fc83ab61b1a98835d32c4e611adedccfc260eeef586bd329d48e8a40a409101610fd8565b60606005805461087690612f9e565b6000546001600160a01b031633146116215760405162461bcd60e51b815260040161093990612fd8565b61162f600f858585856123e8565b6040516b62617365466565732d42757960a01b8152600c01610e4a565b60006109063384610bbb85604051806060016040528060258152602001613362602591393360009081526002602090815260408083206001600160a01b038d1684529091529020549190612147565b6000610906338484611c3e565b6000546001600160a01b031633146116d25760405162461bcd60e51b815260040161093990612fd8565b600a5481036117535760405162461bcd60e51b815260206004820152604160248201527f57617250696773546f6b656e3a2043616e6e6f7420757064617465206d696e6960448201527f6d756d546f6b656e734265666f72655377617020746f2073616d652076616c756064820152606560f81b608482015260a401610939565b600a5460405182907f5b0491f767c1463bea8972339f785795be1a38784cc6483cf649cdcbb28c46b090600090a3600a55565b6000546001600160a01b031633146117b05760405162461bcd60e51b815260040161093990612fd8565b6006546001600160a01b03908116908216036118285760405162461bcd60e51b815260206004820152603160248201527f57617250696773546f6b656e3a2054686520726f7574657220616c7265616479604482015270206861732074686174206164647265737360781b6064820152608401610939565b6006546040516001600160a01b03918216918316907f2afbff3ed601a8723765c7072d8ea8445e08f6f1874afd34a2b747a272c3ebad90600090a3600680546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146118af5760405162461bcd60e51b815260040161093990612fd8565b6001600160a01b03821660009081526018602052604090205481151560ff9091161515036118ef5760405162461bcd60e51b81526004016109399061300d565b6001600160a01b038216600081815260186020908152604091829020805460ff191685151590811790915591519182527fa856ba9fdc54a5434b2359874c95612f520a2d7f858864ae98d15c1b2099ca8b9101610fd8565b6000546001600160a01b031633146119715760405162461bcd60e51b815260040161093990612fd8565b6001600160a01b038216600081815260176020908152604091829020805460ff191685151590811790915591519182527fcb9f97b7b4b41413e5c8d418a8cf9a88db1cf34dee66b213d070faf881d9d3509101610fd8565b6000546001600160a01b031633146119f35760405162461bcd60e51b815260040161093990612fd8565b6001600160a01b038116611a585760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610939565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b600080611ac08385613097565b905083811015611b125760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610939565b9392505050565b6001600160a01b038316611b7b5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610939565b6001600160a01b038216611bdc5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610939565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b038316611c645760405162461bcd60e51b8152600401610939906130af565b6001600160a01b038216611c8a5760405162461bcd60e51b8152600401610939906130f4565b80600003611ca357611c9e83836000612637565b505050565b6001600160a01b03808416600081815260196020908152604080832054948716835280832054938352601790915290205460ff928316929182169116158015611d0557506001600160a01b03841660009081526017602052604090205460ff16155b15611fc457600654600160a01b900460ff16611d785760405162461bcd60e51b815260206004820152602c60248201527f57617250696773546f6b656e3a2054726164696e672069732063757272656e7460448201526b363c903234b9b0b13632b21760a11b6064820152608401610939565b6001600160a01b03841660009081526014602052604090205460ff1615611de15760405162461bcd60e51b815260206004820181905260248201527f57617250696773546f6b656e3a204163636f756e7420697320626c6f636b65646044820152606401610939565b6001600160a01b03851660009081526014602052604090205460ff1615611e4a5760405162461bcd60e51b815260206004820181905260248201527f57617250696773546f6b656e3a204163636f756e7420697320626c6f636b65646044820152606401610939565b6001600160a01b03841660009081526015602052604090205460ff16158015611e8c57506001600160a01b03851660009081526015602052604090205460ff16155b15611ef957600854831115611ef95760405162461bcd60e51b815260206004820152602d60248201527f57617250696773546f6b656e3a20416d6f756e7420657863656564732074686560448201526c1036b0bc2a3c20b6b7bab73a1760991b6064820152608401610939565b6001600160a01b03841660009081526016602052604090205460ff16611fc45760075483611f3c866001600160a01b031660009081526001602052604090205490565b611f469190613097565b1115611fc45760405162461bcd60e51b815260206004820152604160248201527f57617250696773546f6b656e3a2045787065637465642077616c6c657420616d60448201527f6f756e74206578636565647320746865206d617857616c6c6574416d6f756e746064820152601760f91b608482015260a401610939565b611fce8282612743565b600a543060009081526001602052604090205460065491111590600160a01b900460ff168015611ffb5750805b801561200a575060095460ff16155b80156120215750601a54600160201b900460ff1615155b801561204557506001600160a01b03851660009081526019602052604090205460ff165b1561206a576009805460ff1916600117905561205f612909565b6009805460ff191690555b60095460009060ff161580156120895750600654600160a01b900460ff165b6001600160a01b03881660009081526018602052604090205490915060ff16806120cb57506001600160a01b03861660009081526018602052604090205460ff165b156120d4575060005b8080156120ec5750601a54600160201b900460ff1615155b1561213357601a5460009060649061210e90600160201b900460ff1688613137565b612118919061316c565b90506121248187613080565b9550612131883083612637565b505b61213e878787612637565b50505050505050565b6000818484111561216b5760405162461bcd60e51b81526004016109399190612d5c565b5060006121788486613080565b95945050505050565b600285015460ff858116610100909204161461221257604051711b1a5c5d5a591a5d1e51995953db94d95b1b60721b815260120160405190819003812060028701548754919260ff61010090920482169291881691600080516020613342833981519152916121f39160481b90613180565b60405180910390a460028501805461ff00191661010060ff8716021790555b600285015460ff848116630100000090920416146122ac57604051721bdc195c985d1a5bdb9cd1995953db94d95b1b606a1b815260130160405190819003812060028701548754919260ff630100000090920482169291871691600080516020613342833981519152916122899160481b90613180565b60405180910390a460028501805463ff0000001916630100000060ff8616021790555b600285015460ff838116600160281b9092041614612345576040516f189d5e509858dad1995953db94d95b1b60821b815260100160405190819003812060028701548754919260ff600160281b90920482169291861691600080516020613342833981519152916123209160481b90613180565b60405180910390a460028501805465ff00000000001916600160281b60ff8516021790555b600285015460ff828116600160381b90920416146123e157604051701d1c99585cdd5c9e51995953db94d95b1b607a1b815260110160405190819003812060028701548754919260ff600160381b90920482169291851691600080516020613342833981519152916123ba9160481b90613180565b60405180910390a460028501805467ff000000000000001916600160381b60ff8416021790555b5050505050565b600285015460ff85811691161461246957604051706c69717569646974794665654f6e42757960781b815260110160405190819003812060028701548754919260ff91821692918816916000805160206133428339815191529161244f9160481b90613180565b60405180910390a460028501805460ff191660ff86161790555b600285015460ff8481166201000090920416146124fe57604051716f7065726174696f6e734665654f6e42757960701b815260120160405190819003812060028701548754919260ff6201000090920482169291871691600080516020613342833981519152916124dd9160481b90613180565b60405180910390a460028501805462ff000019166201000060ff8616021790555b600285015460ff838116600160201b9092041614612595576040516e6275794261636b4665654f6e42757960881b8152600f0160405190819003812060028701548754919260ff600160201b90920482169291861691600080516020613342833981519152916125719160481b90613180565b60405180910390a460028501805464ff000000001916600160201b60ff8516021790555b600285015460ff828116600160301b90920416146123e1576040516f74726561737572794665654f6e42757960801b815260100160405190819003812060028701548754919260ff600160301b90920482169291851691600080516020613342833981519152916126099160481b90613180565b60405180910390a460028501805460ff8316600160301b0266ff000000000000199091161790555050505050565b6001600160a01b03831661265d5760405162461bcd60e51b8152600401610939906130af565b6001600160a01b0382166126835760405162461bcd60e51b8152600401610939906130f4565b6126c0816040518060600160405280602681526020016132d4602691396001600160a01b0386166000908152600160205260409020549190612147565b6001600160a01b0380851660009081526001602052604080822093909355908416815220546126ef9082611ab3565b6001600160a01b0380841660008181526001602052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611c319085815260200190565b601a805463ffffffff1916905581156127da576005601354436127669190613080565b1161277d57601a805460ff191660641790556127da565b601154601a805460ff80841661ffff1990921691909117610100620100008086048416919091029190911763ffff00001916600160201b850483169190910263ff000000191617600160301b909304166301000000029190911790555b801561283d57601154601a805461010080840460ff90811661ffff199093169290921763010000008086048416929092021763ffff00001916600160281b85048316620100000263ff000000191617600160381b90940491909116029190911790555b601a5460ff6301000000820481169162010000810482169161286791610100810482169116613197565b6128719190613197565b61287b9190613197565b601a805464ff00000000198116600160201b60ff94851681029182179384905560408051938616928616929092178352610100840485166020840152620100008404851691830191909152630100000083048416606083015290910490911660808201527f6e2a5b7f71cda0b5cb7df899e2ae963197bad5b9805df7f475458f793841201c9060a001610a36565b30600090815260016020526040812054601a549091479160029060ff600160201b820481169161293a911686613137565b612944919061316c565b61294e919061316c565b9050600061295c8285613080565b905061296781612b55565b60006129738447613080565b601a5490915060009061298b9060029060ff166131bc565b601a546129a29190600160201b900460ff166131de565b601a5460ff918216925060009160029184916129bf911686613137565b6129c9919061316c565b6129d3919061316c565b601a5490915060009083906129f19062010000900460ff1686613137565b6129fb919061316c565b601a549091506000908490612a1890610100900460ff1687613137565b612a22919061316c565b9050600081612a318486613097565b612a3b9190613097565b612a459087613080565b600d546040519192506001600160a01b03169084156108fc029085906000818181858888f19350505050158015612a80573d6000803e3d6000fd5b50600c546040516001600160a01b039091169083156108fc029084906000818181858888f19350505050158015612abb573d6000803e3d6000fd5b50600e546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015612af6573d6000803e3d6000fd5b508715612b4957612b078885612caf565b60408051888152602081018690529081018990527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15b50505050505050505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612b8a57612b8a613201565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612be3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c079190613217565b81600181518110612c1a57612c1a613201565b6001600160a01b039283166020918202929092010152600654612c409130911684611b19565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac94790612c79908590600090869030904290600401613234565b600060405180830381600087803b158015612c9357600080fd5b505af1158015612ca7573d6000803e3d6000fd5b505050505050565b600654612cc79030906001600160a01b031684611b19565b600654600b5460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af1158015612d37573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906123e191906132a5565b600060208083528351808285015260005b81811015612d8957858101830151858201604001528201612d6d565b81811115612d9b576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114612dc657600080fd5b50565b60008060408385031215612ddc57600080fd5b8235612de781612db1565b946020939093013593505050565b600060208284031215612e0757600080fd5b5035919050565b600080600060608486031215612e2357600080fd5b8335612e2e81612db1565b92506020840135612e3e81612db1565b929592945050506040919091013590565b600060208284031215612e6157600080fd5b8135611b1281612db1565b803560ff81168114612e7d57600080fd5b919050565b60008060008060808587031215612e9857600080fd5b612ea185612e6c565b9350612eaf60208601612e6c565b9250612ebd60408601612e6c565b9150612ecb60608601612e6c565b905092959194509250565b60008060408385031215612ee957600080fd5b8235612ef481612db1565b915060208301358015158114612f0957600080fd5b809150509250929050565b60008060008060808587031215612f2a57600080fd5b8435612f3581612db1565b93506020850135612f4581612db1565b92506040850135612f5581612db1565b91506060850135612f6581612db1565b939692955090935050565b60008060408385031215612f8357600080fd5b8235612f8e81612db1565b91506020830135612f0981612db1565b600181811c90821680612fb257607f821691505b602082108103612fd257634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526038908201527f57617250696773546f6b656e3a204163636f756e7420697320616c726561647960408201527f207468652076616c7565206f6620276578636c75646564270000000000000000606082015260800190565b634e487b7160e01b600052601160045260246000fd5b6000828210156130925761309261306a565b500390565b600082198211156130aa576130aa61306a565b500190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60008160001904831182151516156131515761315161306a565b500290565b634e487b7160e01b600052601260045260246000fd5b60008261317b5761317b613156565b500490565b68ffffffffffffffffff1991909116815260200190565b600060ff821660ff84168060ff038211156131b4576131b461306a565b019392505050565b600060ff8316806131cf576131cf613156565b8060ff84160491505092915050565b600060ff821660ff8416808210156131f8576131f861306a565b90039392505050565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561322957600080fd5b8151611b1281612db1565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156132845784516001600160a01b03168352938301939183019160010161325f565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156132ba57600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e63654af24be54adc5e716fbcaa3fca0ad593e28dff90dffd49487c0a33b1547c6b5245524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636500edc71549f0cbe47086c2237ce0cf874d6897fd1d7ce43ee6b65c0230d7606e45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212203ac19b5c5e8b0bc424184773adf255bdaab034a8fb5f27fc9a0fcd9aa97e054764736f6c634300080f0033

Deployed Bytecode

0x6080604052600436106102605760003560e01c80637c0a893d11610144578063b62496f5116100b6578063d32215761161007a578063d322157614610766578063d469801614610786578063dd62ed3e146107a6578063f2fde38b146107ec578063fd72e22a1461080c578063fe0175351461082c57600080fd5b8063b62496f514610681578063bea9849e146106b1578063c0246668146106d1578063cd43e228146106f1578063d2d7ad831461075057600080fd5b806395d89b411161010857806395d89b41146105d65780639d952ce9146105eb578063a457c2d71461060b578063a9059cbb1461062b578063aa4bde281461064b578063aee50b1e1461066157600080fd5b80637c0a893d1461054257806383672f3e14610562578063880bcbc1146105825780638c0b5e22146105a25780638da5cb5b146105b857600080fd5b806327a14fc2116101dd57806349bd5a5e116101a157806349bd5a5e146104635780634d78fdc61461049757806366781291146104b757806370a08231146104d7578063715018a61461050d578063781edb3c1461052257600080fd5b806327a14fc2146103d2578063313ce567146103f257806334cf1fea1461040e57806339509351146104235780634626402b1461044357600080fd5b80631694505e116102245780631694505e1461031b57806318160ddd146103535780631cd348c0146103725780631e293c101461039257806323b872dd146103b257600080fd5b8063064a59d01461026c57806306fdde03146102a2578063095ea7b3146102c4578063098df585146102e45780630bd05b691461030657600080fd5b3661026757005b600080fd5b34801561027857600080fd5b5060065461028d90600160a01b900460ff1681565b60405190151581526020015b60405180910390f35b3480156102ae57600080fd5b506102b7610867565b6040516102999190612d5c565b3480156102d057600080fd5b5061028d6102df366004612dc9565b6108f9565b3480156102f057600080fd5b506103046102ff366004612df5565b61090f565b005b34801561031257600080fd5b50610304610a43565b34801561032757600080fd5b5060065461033b906001600160a01b031681565b6040516001600160a01b039091168152602001610299565b34801561035f57600080fd5b506003545b604051908152602001610299565b34801561037e57600080fd5b50600d5461033b906001600160a01b031681565b34801561039e57600080fd5b506103046103ad366004612df5565b610a95565b3480156103be57600080fd5b5061028d6103cd366004612e0e565b610b61565b3480156103de57600080fd5b506103046103ed366004612df5565b610bca565b3480156103fe57600080fd5b5060405160128152602001610299565b34801561041a57600080fd5b50610304610c9e565b34801561042f57600080fd5b5061028d61043e366004612dc9565b610cd7565b34801561044f57600080fd5b50600e5461033b906001600160a01b031681565b34801561046f57600080fd5b5061033b7f000000000000000000000000638996a1327ac6fc0770d543374e0055effa2b1d81565b3480156104a357600080fd5b506103046104b2366004612e4f565b610d0d565b3480156104c357600080fd5b506103046104d2366004612e82565b610df8565b3480156104e357600080fd5b506103646104f2366004612e4f565b6001600160a01b031660009081526001602052604090205490565b34801561051957600080fd5b50610304610ea6565b34801561052e57600080fd5b5061030461053d366004612ed6565b610f1a565b34801561054e57600080fd5b5061030461055d366004612e4f565b610fe4565b34801561056e57600080fd5b5061030461057d366004612f14565b61115a565b34801561058e57600080fd5b5061030461059d366004612ed6565b611526565b3480156105ae57600080fd5b5061036460085481565b3480156105c457600080fd5b506000546001600160a01b031661033b565b3480156105e257600080fd5b506102b76115e8565b3480156105f757600080fd5b50610304610606366004612e82565b6115f7565b34801561061757600080fd5b5061028d610626366004612dc9565b61164c565b34801561063757600080fd5b5061028d610646366004612dc9565b61169b565b34801561065757600080fd5b5061036460075481565b34801561066d57600080fd5b5061030461067c366004612df5565b6116a8565b34801561068d57600080fd5b5061028d61069c366004612e4f565b60196020526000908152604090205460ff1681565b3480156106bd57600080fd5b506103046106cc366004612e4f565b611786565b3480156106dd57600080fd5b506103046106ec366004612ed6565b611885565b3480156106fd57600080fd5b5060115460ff80821691620100008104821691600160201b8204811691600160301b9004165b6040805160ff95861681529385166020850152918416918301919091529091166060820152608001610299565b34801561075c57600080fd5b50610364600a5481565b34801561077257600080fd5b50610304610781366004612ed6565b611947565b34801561079257600080fd5b50600b5461033b906001600160a01b031681565b3480156107b257600080fd5b506103646107c1366004612f70565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b3480156107f857600080fd5b50610304610807366004612e4f565b6119c9565b34801561081857600080fd5b50600c5461033b906001600160a01b031681565b34801561083857600080fd5b5060115460ff610100820481169163010000008104821691600160281b8204811691600160381b900416610723565b60606004805461087690612f9e565b80601f01602080910402602001604051908101604052809291908181526020018280546108a290612f9e565b80156108ef5780601f106108c4576101008083540402835291602001916108ef565b820191906000526020600020905b8154815290600101906020018083116108d257829003601f168201915b5050505050905090565b6000610906338484611b19565b50600192915050565b6000546001600160a01b031633146109425760405162461bcd60e51b815260040161093990612fd8565b60405180910390fd5b4781106109ae5760405162461bcd60e51b815260206004820152603460248201527f57617250696773546f6b656e3a2043616e6e6f742073656e64206d6f7265207460448201527368616e20636f6e74726163742062616c616e636560601b6064820152608401610939565b600080546040516001600160a01b039091169083908381818185875af1925050503d80600081146109fb576040519150601f19603f3d011682016040523d82523d6000602084013e610a00565b606091505b505090508015610a3f576040518281527f362ae087cf4ccfc970d45b9e8ce6520f03b4eda3f9d76a70b655dc22badcca48906020015b60405180910390a15b5050565b6000546001600160a01b03163314610a6d5760405162461bcd60e51b815260040161093990612fd8565b6006805460ff60a01b1916600160a01b179055601254600003610a935742601255436013555b565b6000546001600160a01b03163314610abf5760405162461bcd60e51b815260040161093990612fd8565b6008548103610b2e5760405162461bcd60e51b815260206004820152603560248201527f57617250696773546f6b656e3a2043616e6e6f7420757064617465206d61785460448201527478416d6f756e7420746f2073616d652076616c756560581b6064820152608401610939565b60085460405182907f75f1c17bf623f0f7a2bd91ba61e89dff216960370e3e9a46b250750d03e4215e90600090a3600855565b6000610b6e848484611c3e565b610bc08433610bbb8560405180606001604052806028815260200161331a602891396001600160a01b038a1660009081526002602090815260408083203384529091529020549190612147565b611b19565b5060019392505050565b6000546001600160a01b03163314610bf45760405162461bcd60e51b815260040161093990612fd8565b6007548103610c6b5760405162461bcd60e51b815260206004820152603860248201527f57617250696773546f6b656e2043616e6e6f7420757064617465206d6178576160448201527f6c6c6574416d6f756e7420746f2073616d652076616c756500000000000000006064820152608401610939565b60075460405182907f6d3e257c59a11116c3e97bb144abf5ba1a6a9da6bd509192ecf0d48f7be1fc7690600090a3600755565b6000546001600160a01b03163314610cc85760405162461bcd60e51b815260040161093990612fd8565b6006805460ff60a01b19169055565b3360008181526002602090815260408083206001600160a01b03871684529091528120549091610906918590610bbb9086611ab3565b6000546001600160a01b03163314610d375760405162461bcd60e51b815260040161093990612fd8565b6001600160a01b03811660009081526014602052604090205460ff16610dab5760405162461bcd60e51b8152602060048201526024808201527f57617250696773546f6b656e3a204163636f756e74206973206e6f7420626c636044820152631bdad95960e21b6064820152608401610939565b6001600160a01b038116600081815260146020526040808220805460ff19169055519091907f2f092974a5a89dc001cc04aa60bc3afe575e0b7444ef2197f7bb5714b51528ba908390a350565b6000546001600160a01b03163314610e225760405162461bcd60e51b815260040161093990612fd8565b610e30600f85858585612181565b6040516c18985cd95199595ccb54d95b1b609a1b8152600d015b6040805191829003822060ff878116845286811660208501528581168484015284166060840152905190917f69848adfba904cea9fd12f8e800c6bae1d85101b0becc5910e509a93d81449e9919081900360800190a250505050565b6000546001600160a01b03163314610ed05760405162461bcd60e51b815260040161093990612fd8565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b03163314610f445760405162461bcd60e51b815260040161093990612fd8565b6001600160a01b03821660009081526016602052604090205481151560ff909116151503610f845760405162461bcd60e51b81526004016109399061300d565b6001600160a01b038216600081815260166020908152604091829020805460ff191685151590811790915591519182527ff5133f371b17bf21ce0df4ae2c1b6e11ca7c2f27257eb55282edb1ccfd4ecb2e91015b60405180910390a25050565b6000546001600160a01b0316331461100e5760405162461bcd60e51b815260040161093990612fd8565b6001600160a01b03811660009081526014602052604090205460ff16156110885760405162461bcd60e51b815260206004820152602860248201527f57617250696773546f6b656e3a204163636f756e7420697320616c726561647960448201526708189b1bd8dad95960c21b6064820152608401610939565b60125415611108576202a300601254426110a29190613080565b106111085760405162461bcd60e51b815260206004820152603060248201527f57617250696773546f6b656e3a2054696d6520746f20626c6f636b206163636f60448201526f1d5b9d1cc81a185cc8195e1c1a5c995960821b6064820152608401610939565b6001600160a01b038116600081815260146020526040808220805460ff1916600190811790915590519092917f2f092974a5a89dc001cc04aa60bc3afe575e0b7444ef2197f7bb5714b51528ba91a350565b6000546001600160a01b031633146111845760405162461bcd60e51b815260040161093990612fd8565b600b546001600160a01b0385811691161461126c576001600160a01b0384166112055760405162461bcd60e51b815260206004820152602d60248201527f57617250696773546f6b656e3a20546865206c697175696469747957616c6c6560448201526c0742063616e6e6f74206265203609c1b6064820152608401610939565b600b546040516e1b1a5c5d5a591a5d1e55d85b1b195d608a1b81526001600160a01b0391821691861690600f01604051908190038120906000805160206132fa83398151915290600090a4600b80546001600160a01b0319166001600160a01b0386161790555b600c546001600160a01b03848116911614611356576001600160a01b0383166112ee5760405162461bcd60e51b815260206004820152602e60248201527f57617250696773546f6b656e3a20546865206f7065726174696f6e7357616c6c60448201526d065742063616e6e6f7420626520360941b6064820152608401610939565b600c546040516f1bdc195c985d1a5bdb9cd5d85b1b195d60821b81526001600160a01b0391821691851690601001604051908190038120906000805160206132fa83398151915290600090a4600c80546001600160a01b0319166001600160a01b0385161790555b600d546001600160a01b0383811691161461143a576001600160a01b0382166113d55760405162461bcd60e51b815260206004820152602b60248201527f57617250696773546f6b656e3a20546865206275794261636b57616c6c65742060448201526a063616e6e6f7420626520360ac1b6064820152608401610939565b600d80546040516c189d5e509858dad5d85b1b195d609a1b81526001600160a01b03918216929185169101604051908190038120906000805160206132fa83398151915290600090a4600d80546001600160a01b0319166001600160a01b0384161790555b600e546001600160a01b03828116911614611520576001600160a01b0381166114ba5760405162461bcd60e51b815260206004820152602c60248201527f57617250696773546f6b656e3a2054686520747265617375727957616c6c657460448201526b02063616e6e6f7420626520360a41b6064820152608401610939565b600e80546040516d1d1c99585cdd5c9e55d85b1b195d60921b81526001600160a01b03918216929184169101604051908190038120906000805160206132fa83398151915290600090a4600e80546001600160a01b0319166001600160a01b0383161790555b50505050565b6000546001600160a01b031633146115505760405162461bcd60e51b815260040161093990612fd8565b6001600160a01b03821660009081526015602052604090205481151560ff9091161515036115905760405162461bcd60e51b81526004016109399061300d565b6001600160a01b038216600081815260156020908152604091829020805460ff191685151590811790915591519182527f30098fc83ab61b1a98835d32c4e611adedccfc260eeef586bd329d48e8a40a409101610fd8565b60606005805461087690612f9e565b6000546001600160a01b031633146116215760405162461bcd60e51b815260040161093990612fd8565b61162f600f858585856123e8565b6040516b62617365466565732d42757960a01b8152600c01610e4a565b60006109063384610bbb85604051806060016040528060258152602001613362602591393360009081526002602090815260408083206001600160a01b038d1684529091529020549190612147565b6000610906338484611c3e565b6000546001600160a01b031633146116d25760405162461bcd60e51b815260040161093990612fd8565b600a5481036117535760405162461bcd60e51b815260206004820152604160248201527f57617250696773546f6b656e3a2043616e6e6f7420757064617465206d696e6960448201527f6d756d546f6b656e734265666f72655377617020746f2073616d652076616c756064820152606560f81b608482015260a401610939565b600a5460405182907f5b0491f767c1463bea8972339f785795be1a38784cc6483cf649cdcbb28c46b090600090a3600a55565b6000546001600160a01b031633146117b05760405162461bcd60e51b815260040161093990612fd8565b6006546001600160a01b03908116908216036118285760405162461bcd60e51b815260206004820152603160248201527f57617250696773546f6b656e3a2054686520726f7574657220616c7265616479604482015270206861732074686174206164647265737360781b6064820152608401610939565b6006546040516001600160a01b03918216918316907f2afbff3ed601a8723765c7072d8ea8445e08f6f1874afd34a2b747a272c3ebad90600090a3600680546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146118af5760405162461bcd60e51b815260040161093990612fd8565b6001600160a01b03821660009081526018602052604090205481151560ff9091161515036118ef5760405162461bcd60e51b81526004016109399061300d565b6001600160a01b038216600081815260186020908152604091829020805460ff191685151590811790915591519182527fa856ba9fdc54a5434b2359874c95612f520a2d7f858864ae98d15c1b2099ca8b9101610fd8565b6000546001600160a01b031633146119715760405162461bcd60e51b815260040161093990612fd8565b6001600160a01b038216600081815260176020908152604091829020805460ff191685151590811790915591519182527fcb9f97b7b4b41413e5c8d418a8cf9a88db1cf34dee66b213d070faf881d9d3509101610fd8565b6000546001600160a01b031633146119f35760405162461bcd60e51b815260040161093990612fd8565b6001600160a01b038116611a585760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610939565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b600080611ac08385613097565b905083811015611b125760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610939565b9392505050565b6001600160a01b038316611b7b5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610939565b6001600160a01b038216611bdc5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610939565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b038316611c645760405162461bcd60e51b8152600401610939906130af565b6001600160a01b038216611c8a5760405162461bcd60e51b8152600401610939906130f4565b80600003611ca357611c9e83836000612637565b505050565b6001600160a01b03808416600081815260196020908152604080832054948716835280832054938352601790915290205460ff928316929182169116158015611d0557506001600160a01b03841660009081526017602052604090205460ff16155b15611fc457600654600160a01b900460ff16611d785760405162461bcd60e51b815260206004820152602c60248201527f57617250696773546f6b656e3a2054726164696e672069732063757272656e7460448201526b363c903234b9b0b13632b21760a11b6064820152608401610939565b6001600160a01b03841660009081526014602052604090205460ff1615611de15760405162461bcd60e51b815260206004820181905260248201527f57617250696773546f6b656e3a204163636f756e7420697320626c6f636b65646044820152606401610939565b6001600160a01b03851660009081526014602052604090205460ff1615611e4a5760405162461bcd60e51b815260206004820181905260248201527f57617250696773546f6b656e3a204163636f756e7420697320626c6f636b65646044820152606401610939565b6001600160a01b03841660009081526015602052604090205460ff16158015611e8c57506001600160a01b03851660009081526015602052604090205460ff16155b15611ef957600854831115611ef95760405162461bcd60e51b815260206004820152602d60248201527f57617250696773546f6b656e3a20416d6f756e7420657863656564732074686560448201526c1036b0bc2a3c20b6b7bab73a1760991b6064820152608401610939565b6001600160a01b03841660009081526016602052604090205460ff16611fc45760075483611f3c866001600160a01b031660009081526001602052604090205490565b611f469190613097565b1115611fc45760405162461bcd60e51b815260206004820152604160248201527f57617250696773546f6b656e3a2045787065637465642077616c6c657420616d60448201527f6f756e74206578636565647320746865206d617857616c6c6574416d6f756e746064820152601760f91b608482015260a401610939565b611fce8282612743565b600a543060009081526001602052604090205460065491111590600160a01b900460ff168015611ffb5750805b801561200a575060095460ff16155b80156120215750601a54600160201b900460ff1615155b801561204557506001600160a01b03851660009081526019602052604090205460ff165b1561206a576009805460ff1916600117905561205f612909565b6009805460ff191690555b60095460009060ff161580156120895750600654600160a01b900460ff165b6001600160a01b03881660009081526018602052604090205490915060ff16806120cb57506001600160a01b03861660009081526018602052604090205460ff165b156120d4575060005b8080156120ec5750601a54600160201b900460ff1615155b1561213357601a5460009060649061210e90600160201b900460ff1688613137565b612118919061316c565b90506121248187613080565b9550612131883083612637565b505b61213e878787612637565b50505050505050565b6000818484111561216b5760405162461bcd60e51b81526004016109399190612d5c565b5060006121788486613080565b95945050505050565b600285015460ff858116610100909204161461221257604051711b1a5c5d5a591a5d1e51995953db94d95b1b60721b815260120160405190819003812060028701548754919260ff61010090920482169291881691600080516020613342833981519152916121f39160481b90613180565b60405180910390a460028501805461ff00191661010060ff8716021790555b600285015460ff848116630100000090920416146122ac57604051721bdc195c985d1a5bdb9cd1995953db94d95b1b606a1b815260130160405190819003812060028701548754919260ff630100000090920482169291871691600080516020613342833981519152916122899160481b90613180565b60405180910390a460028501805463ff0000001916630100000060ff8616021790555b600285015460ff838116600160281b9092041614612345576040516f189d5e509858dad1995953db94d95b1b60821b815260100160405190819003812060028701548754919260ff600160281b90920482169291861691600080516020613342833981519152916123209160481b90613180565b60405180910390a460028501805465ff00000000001916600160281b60ff8516021790555b600285015460ff828116600160381b90920416146123e157604051701d1c99585cdd5c9e51995953db94d95b1b607a1b815260110160405190819003812060028701548754919260ff600160381b90920482169291851691600080516020613342833981519152916123ba9160481b90613180565b60405180910390a460028501805467ff000000000000001916600160381b60ff8416021790555b5050505050565b600285015460ff85811691161461246957604051706c69717569646974794665654f6e42757960781b815260110160405190819003812060028701548754919260ff91821692918816916000805160206133428339815191529161244f9160481b90613180565b60405180910390a460028501805460ff191660ff86161790555b600285015460ff8481166201000090920416146124fe57604051716f7065726174696f6e734665654f6e42757960701b815260120160405190819003812060028701548754919260ff6201000090920482169291871691600080516020613342833981519152916124dd9160481b90613180565b60405180910390a460028501805462ff000019166201000060ff8616021790555b600285015460ff838116600160201b9092041614612595576040516e6275794261636b4665654f6e42757960881b8152600f0160405190819003812060028701548754919260ff600160201b90920482169291861691600080516020613342833981519152916125719160481b90613180565b60405180910390a460028501805464ff000000001916600160201b60ff8516021790555b600285015460ff828116600160301b90920416146123e1576040516f74726561737572794665654f6e42757960801b815260100160405190819003812060028701548754919260ff600160301b90920482169291851691600080516020613342833981519152916126099160481b90613180565b60405180910390a460028501805460ff8316600160301b0266ff000000000000199091161790555050505050565b6001600160a01b03831661265d5760405162461bcd60e51b8152600401610939906130af565b6001600160a01b0382166126835760405162461bcd60e51b8152600401610939906130f4565b6126c0816040518060600160405280602681526020016132d4602691396001600160a01b0386166000908152600160205260409020549190612147565b6001600160a01b0380851660009081526001602052604080822093909355908416815220546126ef9082611ab3565b6001600160a01b0380841660008181526001602052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611c319085815260200190565b601a805463ffffffff1916905581156127da576005601354436127669190613080565b1161277d57601a805460ff191660641790556127da565b601154601a805460ff80841661ffff1990921691909117610100620100008086048416919091029190911763ffff00001916600160201b850483169190910263ff000000191617600160301b909304166301000000029190911790555b801561283d57601154601a805461010080840460ff90811661ffff199093169290921763010000008086048416929092021763ffff00001916600160281b85048316620100000263ff000000191617600160381b90940491909116029190911790555b601a5460ff6301000000820481169162010000810482169161286791610100810482169116613197565b6128719190613197565b61287b9190613197565b601a805464ff00000000198116600160201b60ff94851681029182179384905560408051938616928616929092178352610100840485166020840152620100008404851691830191909152630100000083048416606083015290910490911660808201527f6e2a5b7f71cda0b5cb7df899e2ae963197bad5b9805df7f475458f793841201c9060a001610a36565b30600090815260016020526040812054601a549091479160029060ff600160201b820481169161293a911686613137565b612944919061316c565b61294e919061316c565b9050600061295c8285613080565b905061296781612b55565b60006129738447613080565b601a5490915060009061298b9060029060ff166131bc565b601a546129a29190600160201b900460ff166131de565b601a5460ff918216925060009160029184916129bf911686613137565b6129c9919061316c565b6129d3919061316c565b601a5490915060009083906129f19062010000900460ff1686613137565b6129fb919061316c565b601a549091506000908490612a1890610100900460ff1687613137565b612a22919061316c565b9050600081612a318486613097565b612a3b9190613097565b612a459087613080565b600d546040519192506001600160a01b03169084156108fc029085906000818181858888f19350505050158015612a80573d6000803e3d6000fd5b50600c546040516001600160a01b039091169083156108fc029084906000818181858888f19350505050158015612abb573d6000803e3d6000fd5b50600e546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015612af6573d6000803e3d6000fd5b508715612b4957612b078885612caf565b60408051888152602081018690529081018990527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15b50505050505050505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612b8a57612b8a613201565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612be3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c079190613217565b81600181518110612c1a57612c1a613201565b6001600160a01b039283166020918202929092010152600654612c409130911684611b19565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac94790612c79908590600090869030904290600401613234565b600060405180830381600087803b158015612c9357600080fd5b505af1158015612ca7573d6000803e3d6000fd5b505050505050565b600654612cc79030906001600160a01b031684611b19565b600654600b5460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af1158015612d37573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906123e191906132a5565b600060208083528351808285015260005b81811015612d8957858101830151858201604001528201612d6d565b81811115612d9b576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114612dc657600080fd5b50565b60008060408385031215612ddc57600080fd5b8235612de781612db1565b946020939093013593505050565b600060208284031215612e0757600080fd5b5035919050565b600080600060608486031215612e2357600080fd5b8335612e2e81612db1565b92506020840135612e3e81612db1565b929592945050506040919091013590565b600060208284031215612e6157600080fd5b8135611b1281612db1565b803560ff81168114612e7d57600080fd5b919050565b60008060008060808587031215612e9857600080fd5b612ea185612e6c565b9350612eaf60208601612e6c565b9250612ebd60408601612e6c565b9150612ecb60608601612e6c565b905092959194509250565b60008060408385031215612ee957600080fd5b8235612ef481612db1565b915060208301358015158114612f0957600080fd5b809150509250929050565b60008060008060808587031215612f2a57600080fd5b8435612f3581612db1565b93506020850135612f4581612db1565b92506040850135612f5581612db1565b91506060850135612f6581612db1565b939692955090935050565b60008060408385031215612f8357600080fd5b8235612f8e81612db1565b91506020830135612f0981612db1565b600181811c90821680612fb257607f821691505b602082108103612fd257634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526038908201527f57617250696773546f6b656e3a204163636f756e7420697320616c726561647960408201527f207468652076616c7565206f6620276578636c75646564270000000000000000606082015260800190565b634e487b7160e01b600052601160045260246000fd5b6000828210156130925761309261306a565b500390565b600082198211156130aa576130aa61306a565b500190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60008160001904831182151516156131515761315161306a565b500290565b634e487b7160e01b600052601260045260246000fd5b60008261317b5761317b613156565b500490565b68ffffffffffffffffff1991909116815260200190565b600060ff821660ff84168060ff038211156131b4576131b461306a565b019392505050565b600060ff8316806131cf576131cf613156565b8060ff84160491505092915050565b600060ff821660ff8416808210156131f8576131f861306a565b90039392505050565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561322957600080fd5b8151611b1281612db1565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156132845784516001600160a01b03168352938301939183019160010161325f565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156132ba57600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e63654af24be54adc5e716fbcaa3fca0ad593e28dff90dffd49487c0a33b1547c6b5245524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636500edc71549f0cbe47086c2237ce0cf874d6897fd1d7ce43ee6b65c0230d7606e45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212203ac19b5c5e8b0bc424184773adf255bdaab034a8fb5f27fc9a0fcd9aa97e054764736f6c634300080f0033

Deployed Bytecode Sourcemap

8684:17436:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8957:28;;;;;;;;;;-1:-1:-1;8957:28:0;;;;-1:-1:-1;;;8957:28:0;;;;;;;;;179:14:1;;172:22;154:41;;142:2;127:18;8957:28:0;;;;;;;;5224:91;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;6048:154::-;;;;;;;;;;-1:-1:-1;6048:154:0;;;;;:::i;:::-;;:::i;18525:317::-;;;;;;;;;;-1:-1:-1;18525:317:0;;;;;:::i;:::-;;:::i;:::-;;12968:235;;;;;;;;;;;;;:::i;8737:30::-;;;;;;;;;;-1:-1:-1;8737:30:0;;;;-1:-1:-1;;;;;8737:30:0;;;;;;-1:-1:-1;;;;;1628:32:1;;;1610:51;;1598:2;1583:18;8737:30:0;1449:218:1;5509:99:0;;;;;;;;;;-1:-1:-1;5591:12:0;;5509:99;;;1818:25:1;;;1806:2;1791:18;5509:99:0;1672:177:1;9353:28:0;;;;;;;;;;-1:-1:-1;9353:28:0;;;;-1:-1:-1;;;;;9353:28:0;;;17986:273;;;;;;;;;;-1:-1:-1;17986:273:0;;;;;:::i;:::-;;:::i;6207:313::-;;;;;;;;;;-1:-1:-1;6207:313:0;;;;;:::i;:::-;;:::i;18262:260::-;;;;;;;;;;-1:-1:-1;18262:260:0;;;;;:::i;:::-;;:::i;5420:84::-;;;;;;;;;;-1:-1:-1;5420:84:0;;5497:2;2665:36:1;;2653:2;2638:18;5420:84:0;2523:184:1;13206:82:0;;;;;;;;;;;;;:::i;6525:203::-;;;;;;;;;;-1:-1:-1;6525:203:0;;;;;:::i;:::-;;:::i;9388:29::-;;;;;;;;;;-1:-1:-1;9388:29:0;;;;-1:-1:-1;;;;;9388:29:0;;;8771:38;;;;;;;;;;;;;;;16375:216;;;;;;;;;;-1:-1:-1;16375:216:0;;;;;:::i;:::-;;:::i;16989:392::-;;;;;;;;;;-1:-1:-1;16989:392:0;;;;;:::i;:::-;;:::i;5613:118::-;;;;;;;;;;-1:-1:-1;5613:118:0;;;;;:::i;:::-;-1:-1:-1;;;;;5708:18:0;5687:7;5708:18;;;:9;:18;;;;;;;5613:118;4458:133;;;;;;;;;;;;;:::i;14435:324::-;;;;;;;;;;-1:-1:-1;14435:324:0;;;;;:::i;:::-;;:::i;15986:386::-;;;;;;;;;;-1:-1:-1;15986:386:0;;;;;:::i;:::-;;:::i;14762:1218::-;;;;;;;;;;-1:-1:-1;14762:1218:0;;;;;:::i;:::-;;:::i;14091:341::-;;;;;;;;;;-1:-1:-1;14091:341:0;;;;;:::i;:::-;;:::i;9126:52::-;;;;;;;;;;;;;;;;4274:70;;;;;;;;;;-1:-1:-1;4312:7:0;4333:6;-1:-1:-1;;;;;4333:6:0;4274:70;;5320:95;;;;;;;;;;;;;:::i;16609:377::-;;;;;;;;;;-1:-1:-1;16609:377:0;;;;;:::i;:::-;;:::i;6733:254::-;;;;;;;;;;-1:-1:-1;6733:254:0;;;;;:::i;:::-;;:::i;5736:160::-;;;;;;;;;;-1:-1:-1;5736:160:0;;;;;:::i;:::-;;:::i;9066:56::-;;;;;;;;;;;;;;;;17673:310;;;;;;;;;;-1:-1:-1;17673:310:0;;;;;:::i;:::-;;:::i;10303:58::-;;;;;;;;;;-1:-1:-1;10303:58:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;17384:286;;;;;;;;;;-1:-1:-1;17384:286:0;;;;;:::i;:::-;;:::i;13801:287::-;;;;;;;;;;-1:-1:-1;13801:287:0;;;;;:::i;:::-;;:::i;18860:191::-;;;;;;;;;;-1:-1:-1;18949:23:0;;;;;;;18974:24;;;;;;-1:-1:-1;;;19000:21:0;;;;;-1:-1:-1;;;19023:22:0;;;18860:191;;;;4865:4:1;4853:17;;;4835:36;;4907:17;;;4902:2;4887:18;;4880:45;4961:17;;;4941:18;;;4934:45;;;;5015:17;;;5010:2;4995:18;;4988:45;4822:3;4807:19;18860:191:0;4620:419:1;9210:68:0;;;;;;;;;;;;;;;;13596:202;;;;;;;;;;-1:-1:-1;13596:202:0;;;;;:::i;:::-;;:::i;9284:30::-;;;;;;;;;;-1:-1:-1;9284:30:0;;;;-1:-1:-1;;;;;9284:30:0;;;5901:142;;;;;;;;;;-1:-1:-1;5901:142:0;;;;;:::i;:::-;-1:-1:-1;;;;;6011:18:0;;;5990:7;6011:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;5901:142;4596:223;;;;;;;;;;-1:-1:-1;4596:223:0;;;;;:::i;:::-;;:::i;9318:31::-;;;;;;;;;;-1:-1:-1;9318:31:0;;;;-1:-1:-1;;;;;9318:31:0;;;19054:196;;;;;;;;;;-1:-1:-1;19144:24:0;;;;;;;;;19170:25;;;;;;-1:-1:-1;;;19197:22:0;;;;;-1:-1:-1;;;19221:23:0;;;19054:196;;5224:91;5278:13;5305:5;5298:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5224:91;:::o;6048:154::-;6131:4;6142:39;3740:10;6165:7;6174:6;6142:8;:39::i;:::-;-1:-1:-1;6193:4:0;6048:154;;;;:::o;18525:317::-;4383:6;;-1:-1:-1;;;;;4383:6:0;3740:10;4383:22;4375:67;;;;-1:-1:-1;;;4375:67:0;;;;;;;:::i;:::-;;;;;;;;;18611:21:::1;18602:6;:30;18594:95;;;::::0;-1:-1:-1;;;18594:95:0;;6385:2:1;18594:95:0::1;::::0;::::1;6367:21:1::0;6424:2;6404:18;;;6397:30;6463:34;6443:18;;;6436:62;-1:-1:-1;;;6514:18:1;;;6507:50;6574:19;;18594:95:0::1;6183:416:1::0;18594:95:0::1;18701:12;4333:6:::0;;18718:41:::1;::::0;-1:-1:-1;;;;;4333:6:0;;;;18748;;18701:12;18718:41;18701:12;18718:41;18748:6;4333;18718:41:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18700:59;;;18774:7;18770:68;;;18802:24;::::0;1818:25:1;;;18802:24:0::1;::::0;1806:2:1;1791:18;18802:24:0::1;;;;;;;;18770:68;18586:256;18525:317:::0;:::o;12968:235::-;4383:6;;-1:-1:-1;;;;;4383:6:0;3740:10;4383:22;4375:67;;;;-1:-1:-1;;;4375:67:0;;;;;;;:::i;:::-;13019:16:::1;:23:::0;;-1:-1:-1;;;;13019:23:0::1;-1:-1:-1::0;;;13019:23:0::1;::::0;;13057:21:::1;::::0;13019:23;13057:26;13053:146:::1;;13124:15;13100:21;:39:::0;13175:12:::1;13154:18;:33:::0;13053:146:::1;12968:235::o:0;17986:273::-;4383:6;;-1:-1:-1;;;;;4383:6:0;3740:10;4383:22;4375:67;;;;-1:-1:-1;;;4375:67:0;;;;;;;:::i;:::-;18087:11:::1;;18075:8;:23:::0;18067:89:::1;;;::::0;-1:-1:-1;;;18067:89:0;;7016:2:1;18067:89:0::1;::::0;::::1;6998:21:1::0;7055:2;7035:18;;;7028:30;7094:34;7074:18;;;7067:62;-1:-1:-1;;;7145:18:1;;;7138:51;7206:19;;18067:89:0::1;6814:417:1::0;18067:89:0::1;18209:11;::::0;18172:49:::1;::::0;18199:8;;18172:49:::1;::::0;;;::::1;18232:11;:22:::0;17986:273::o;6207:313::-;6326:4;6337:36;6347:6;6355:9;6366:6;6337:9;:36::i;:::-;6378:121;6387:6;3740:10;6409:89;6447:6;6409:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;6409:19:0;;;;;;:11;:19;;;;;;;;3740:10;6409:33;;;;;;;;;;:37;:89::i;:::-;6378:8;:121::i;:::-;-1:-1:-1;6511:4:0;6207:313;;;;;:::o;18262:260::-;4383:6;;-1:-1:-1;;;;;4383:6:0;3740:10;4383:22;4375:67;;;;-1:-1:-1;;;4375:67:0;;;;;;;:::i;:::-;18352:15:::1;;18340:8;:27:::0;18332:96:::1;;;::::0;-1:-1:-1;;;18332:96:0;;7438:2:1;18332:96:0::1;::::0;::::1;7420:21:1::0;7477:2;7457:18;;;7450:30;7516:34;7496:18;;;7489:62;7587:26;7567:18;;;7560:54;7631:19;;18332:96:0::1;7236:420:1::0;18332:96:0::1;18470:15;::::0;18438:48:::1;::::0;18460:8;;18438:48:::1;::::0;;;::::1;18491:15;:26:::0;18262:260::o;13206:82::-;4383:6;;-1:-1:-1;;;;;4383:6:0;3740:10;4383:22;4375:67;;;;-1:-1:-1;;;4375:67:0;;;;;;;:::i;:::-;13259:16:::1;:24:::0;;-1:-1:-1;;;;13259:24:0::1;::::0;;13206:82::o;6525:203::-;3740:10;6613:4;6656:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;6656:34:0;;;;;;;;;;6613:4;;6624:83;;6647:7;;6656:50;;6695:10;6656:38;:50::i;16375:216::-;4383:6;;-1:-1:-1;;;;;4383:6:0;3740:10;4383:22;4375:67;;;;-1:-1:-1;;;4375:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;16448:19:0;::::1;;::::0;;;:10:::1;:19;::::0;;;;;::::1;;16440:68;;;::::0;-1:-1:-1;;;16440:68:0;;7863:2:1;16440:68:0::1;::::0;::::1;7845:21:1::0;7902:2;7882:18;;;7875:30;7941:34;7921:18;;;7914:62;-1:-1:-1;;;7992:18:1;;;7985:34;8036:19;;16440:68:0::1;7661:400:1::0;16440:68:0::1;-1:-1:-1::0;;;;;16513:19:0;::::1;16535:5;16513:19:::0;;;:10:::1;:19;::::0;;;;;:27;;-1:-1:-1;;16513:27:0::1;::::0;;16550:36;16535:5;;16513:19;16550:36:::1;::::0;16535:5;;16550:36:::1;16375:216:::0;:::o;16989:392::-;4383:6;;-1:-1:-1;;;;;4383:6:0;3740:10;4383:22;4375:67;;;;-1:-1:-1;;;4375:67:0;;;;;;;:::i;:::-;17146:112:::1;17170:5;17177:19;17198:20;17220:17;17239:18;17146:23;:112::i;:::-;17268:108;::::0;-1:-1:-1;;;8268:28:1;;8321:2;8312:12;17268:108:0::1;;::::0;;;;;::::1;::::0;;4865:4:1;4853:17;;;4835:36;;4907:17;;;4902:2;4887:18;;4880:45;4961:17;;;4941:18;;;4934:45;5015:17;;5010:2;4995:18;;4988:45;17268:108:0;;;;::::1;::::0;;;;;4822:3:1;17268:108:0;;::::1;16989:392:::0;;;;:::o;4458:133::-;4383:6;;-1:-1:-1;;;;;4383:6:0;3740:10;4383:22;4375:67;;;;-1:-1:-1;;;4375:67:0;;;;;;;:::i;:::-;4559:1:::1;4543:6:::0;;4522:40:::1;::::0;-1:-1:-1;;;;;4543:6:0;;::::1;::::0;4522:40:::1;::::0;4559:1;;4522:40:::1;4584:1;4567:19:::0;;-1:-1:-1;;;;;;4567:19:0::1;::::0;;4458:133::o;14435:324::-;4383:6;;-1:-1:-1;;;;;4383:6:0;3740:10;4383:22;4375:67;;;;-1:-1:-1;;;4375:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;14534:38:0;::::1;;::::0;;;:29:::1;:38;::::0;;;;;:50;::::1;;:38;::::0;;::::1;:50;;::::0;14526:119:::1;;;;-1:-1:-1::0;;;14526:119:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;14650:38:0;::::1;;::::0;;;:29:::1;:38;::::0;;;;;;;;:49;;-1:-1:-1;;14650:49:0::1;::::0;::::1;;::::0;;::::1;::::0;;;14709:45;;154:41:1;;;14709:45:0::1;::::0;127:18:1;14709:45:0::1;;;;;;;;14435:324:::0;;:::o;15986:386::-;4383:6;;-1:-1:-1;;;;;4383:6:0;3740:10;4383:22;4375:67;;;;-1:-1:-1;;;4375:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;16058:19:0;::::1;;::::0;;;:10:::1;:19;::::0;;;;;::::1;;16057:20;16049:73;;;::::0;-1:-1:-1;;;16049:73:0;;8962:2:1;16049:73:0::1;::::0;::::1;8944:21:1::0;9001:2;8981:18;;;8974:30;9040:34;9020:18;;;9013:62;-1:-1:-1;;;9091:18:1;;;9084:38;9139:19;;16049:73:0::1;8760:404:1::0;16049:73:0::1;16131:21;::::0;:25;16127:165:::1;;9980:6;16191:21;;16173:15;:39;;;;:::i;:::-;16172:61;16164:122;;;::::0;-1:-1:-1;;;16164:122:0;;9633:2:1;16164:122:0::1;::::0;::::1;9615:21:1::0;9672:2;9652:18;;;9645:30;9711:34;9691:18;;;9684:62;-1:-1:-1;;;9762:18:1;;;9755:46;9818:19;;16164:122:0::1;9431:412:1::0;16164:122:0::1;-1:-1:-1::0;;;;;16296:19:0;::::1;;::::0;;;:10:::1;:19;::::0;;;;;:26;;-1:-1:-1;;16296:26:0::1;16318:4;16296:26:::0;;::::1;::::0;;;16332:35;;16318:4;;16296:19;16332:35:::1;::::0;::::1;15986:386:::0;:::o;14762:1218::-;4383:6;;-1:-1:-1;;;;;4383:6:0;3740:10;4383:22;4375:67;;;;-1:-1:-1;;;4375:67:0;;;;;;;:::i;:::-;14919:15:::1;::::0;-1:-1:-1;;;;;14919:37:0;;::::1;:15:::0;::::1;:37;14916:265;;-1:-1:-1::0;;;;;14972:32:0;::::1;14964:90;;;::::0;-1:-1:-1;;;14964:90:0;;10050:2:1;14964:90:0::1;::::0;::::1;10032:21:1::0;10089:2;10069:18;;;10062:30;10128:34;10108:18;;;10101:62;-1:-1:-1;;;10179:18:1;;;10172:43;10232:19;;14964:90:0::1;9848:409:1::0;14964:90:0::1;15117:15;::::0;15065:68:::1;::::0;-1:-1:-1;;;10464:30:1;;-1:-1:-1;;;;;15117:15:0;;::::1;::::0;15065:68;::::1;::::0;10519:2:1;10510:12;15065:68:0::1;::::0;;;;::::1;::::0;;;-1:-1:-1;;;;;;;;;;;15065:68:0;;;::::1;15139:15;:36:::0;;-1:-1:-1;;;;;;15139:36:0::1;-1:-1:-1::0;;;;;15139:36:0;::::1;;::::0;;14916:265:::1;15188:16;::::0;-1:-1:-1;;;;;15188:39:0;;::::1;:16:::0;::::1;:39;15185:274;;-1:-1:-1::0;;;;;15243:33:0;::::1;15235:92;;;::::0;-1:-1:-1;;;15235:92:0;;10735:2:1;15235:92:0::1;::::0;::::1;10717:21:1::0;10774:2;10754:18;;;10747:30;10813:34;10793:18;;;10786:62;-1:-1:-1;;;10864:18:1;;;10857:44;10918:19;;15235:92:0::1;10533:410:1::0;15235:92:0::1;15392:16;::::0;15338:71:::1;::::0;-1:-1:-1;;;11150:31:1;;-1:-1:-1;;;;;15392:16:0;;::::1;::::0;15338:71;::::1;::::0;11206:2:1;11197:12;15338:71:0::1;::::0;;;;::::1;::::0;;;-1:-1:-1;;;;;;;;;;;15338:71:0;;;::::1;15415:16;:38:::0;;-1:-1:-1;;;;;;15415:38:0::1;-1:-1:-1::0;;;;;15415:38:0;::::1;;::::0;;15185:274:::1;15466:13;::::0;-1:-1:-1;;;;;15466:33:0;;::::1;:13:::0;::::1;:33;15463:247;;-1:-1:-1::0;;;;;15515:30:0;::::1;15507:86;;;::::0;-1:-1:-1;;;15507:86:0;;11422:2:1;15507:86:0::1;::::0;::::1;11404:21:1::0;11461:2;11441:18;;;11434:30;11500:34;11480:18;;;11473:62;-1:-1:-1;;;11551:18:1;;;11544:41;11602:19;;15507:86:0::1;11220:407:1::0;15507:86:0::1;15652:13;::::0;;15604:62:::1;::::0;-1:-1:-1;;;11834:28:1;;-1:-1:-1;;;;;15652:13:0;;::::1;::::0;15604:62;;::::1;::::0;11878:12:1;15604:62:0::1;::::0;;;;::::1;::::0;;;-1:-1:-1;;;;;;;;;;;15604:62:0;;;::::1;15672:13;:32:::0;;-1:-1:-1;;;;;;15672:32:0::1;-1:-1:-1::0;;;;;15672:32:0;::::1;;::::0;;15463:247:::1;15723:14;::::0;-1:-1:-1;;;;;15723:35:0;;::::1;:14:::0;::::1;:35;15720:256;;-1:-1:-1::0;;;;;15774:31:0;::::1;15766:88;;;::::0;-1:-1:-1;;;15766:88:0;;12103:2:1;15766:88:0::1;::::0;::::1;12085:21:1::0;12142:2;12122:18;;;12115:30;12181:34;12161:18;;;12154:62;-1:-1:-1;;;12232:18:1;;;12225:42;12284:19;;15766:88:0::1;11901:408:1::0;15766:88:0::1;15915:14;::::0;;15865:65:::1;::::0;-1:-1:-1;;;12516:29:1;;-1:-1:-1;;;;;15915:14:0;;::::1;::::0;15865:65;;::::1;::::0;12561:12:1;15865:65:0::1;::::0;;;;::::1;::::0;;;-1:-1:-1;;;;;;;;;;;15865:65:0;;;::::1;15936:14;:34:::0;;-1:-1:-1;;;;;;15936:34:0::1;-1:-1:-1::0;;;;;15936:34:0;::::1;;::::0;;15720:256:::1;14762:1218:::0;;;;:::o;14091:341::-;4383:6;;-1:-1:-1;;;;;4383:6:0;3740:10;4383:22;4375:67;;;;-1:-1:-1;;;4375:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;14195:43:0;::::1;;::::0;;;:34:::1;:43;::::0;;;;;:55;::::1;;:43;::::0;;::::1;:55;;::::0;14187:124:::1;;;;-1:-1:-1::0;;;14187:124:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;14316:43:0;::::1;;::::0;;;:34:::1;:43;::::0;;;;;;;;:54;;-1:-1:-1;;14316:54:0::1;::::0;::::1;;::::0;;::::1;::::0;;;14380:47;;154:41:1;;;14380:47:0::1;::::0;127:18:1;14380:47:0::1;14:187:1::0;5320:95:0;5376:13;5403:7;5396:14;;;;;:::i;16609:377::-;4383:6;;-1:-1:-1;;;;;4383:6:0;3740:10;4383:22;4375:67;;;;-1:-1:-1;;;4375:67:0;;;;;;;:::i;:::-;16761:107:::1;16784:5;16791:18;16811:19;16832:16;16850:17;16761:22;:107::i;:::-;16878:103;::::0;-1:-1:-1;;;12786:27:1;;12838:2;12829:12;16878:103:0::1;12584:263:1::0;6733:254:0;6826:4;6837:129;3740:10;6860:7;6869:96;6908:15;6869:96;;;;;;;;;;;;;;;;;3740:10;6869:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;6869:34:0;;;;;;;;;;;;:38;:96::i;5736:160::-;5822:4;5833:42;3740:10;5857:9;5868:6;5833:9;:42::i;17673:310::-;4383:6;;-1:-1:-1;;;;;4383:6:0;3740:10;4383:22;4375:67;;;;-1:-1:-1;;;4375:67:0;;;;;;;:::i;:::-;17771:23:::1;;17759:8;:35:::0;17751:113:::1;;;::::0;-1:-1:-1;;;17751:113:0;;13054:2:1;17751:113:0::1;::::0;::::1;13036:21:1::0;13093:2;13073:18;;;13066:30;13132:34;13112:18;;;13105:62;13203:34;13183:18;;;13176:62;-1:-1:-1;;;13254:19:1;;;13247:32;13296:19;;17751:113:0::1;12852:469:1::0;17751:113:0::1;17915:23;::::0;17874:65:::1;::::0;17905:8;;17874:65:::1;::::0;;;::::1;17944:23;:34:::0;17673:310::o;17384:286::-;4383:6;;-1:-1:-1;;;;;4383:6:0;3740:10;4383:22;4375:67;;;;-1:-1:-1;;;4375:67:0;;;;;;;:::i;:::-;17484:15:::1;::::0;-1:-1:-1;;;;;17484:15:0;;::::1;17462:38:::0;;::::1;::::0;17454:100:::1;;;::::0;-1:-1:-1;;;17454:100:0;;13528:2:1;17454:100:0::1;::::0;::::1;13510:21:1::0;13567:2;13547:18;;;13540:30;13606:34;13586:18;;;13579:62;-1:-1:-1;;;13657:18:1;;;13650:47;13714:19;;17454:100:0::1;13326:413:1::0;17454:100:0::1;17606:15;::::0;17564:59:::1;::::0;-1:-1:-1;;;;;17606:15:0;;::::1;::::0;17564:59;::::1;::::0;::::1;::::0;17606:15:::1;::::0;17564:59:::1;17628:15;:37:::0;;-1:-1:-1;;;;;;17628:37:0::1;-1:-1:-1::0;;;;;17628:37:0;;;::::1;::::0;;;::::1;::::0;;17384:286::o;13801:287::-;4383:6;;-1:-1:-1;;;;;4383:6:0;3740:10;4383:22;4375:67;;;;-1:-1:-1;;;4375:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;13890:27:0;::::1;;::::0;;;:18:::1;:27;::::0;;;;;:39;::::1;;:27;::::0;;::::1;:39;;::::0;13882:108:::1;;;;-1:-1:-1::0;;;13882:108:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;13995:27:0;::::1;;::::0;;;:18:::1;:27;::::0;;;;;;;;:38;;-1:-1:-1;;13995:38:0::1;::::0;::::1;;::::0;;::::1;::::0;;;14043:40;;154:41:1;;;14043:40:0::1;::::0;127:18:1;14043:40:0::1;14:187:1::0;13596:202:0;4383:6;;-1:-1:-1;;;;;4383:6:0;3740:10;4383:22;4375:67;;;;-1:-1:-1;;;4375:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;13685:38:0;::::1;;::::0;;;:29:::1;:38;::::0;;;;;;;;:48;;-1:-1:-1;;13685:48:0::1;::::0;::::1;;::::0;;::::1;::::0;;;13743:50;;154:41:1;;;13743:50:0::1;::::0;127:18:1;13743:50:0::1;14:187:1::0;4596:223:0;4383:6;;-1:-1:-1;;;;;4383:6:0;3740:10;4383:22;4375:67;;;;-1:-1:-1;;;4375:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;4679:22:0;::::1;4671:73;;;::::0;-1:-1:-1;;;4671:73:0;;13946:2:1;4671:73:0::1;::::0;::::1;13928:21:1::0;13985:2;13965:18;;;13958:30;14024:34;14004:18;;;13997:62;-1:-1:-1;;;14075:18:1;;;14068:36;14121:19;;4671:73:0::1;13744:402:1::0;4671:73:0::1;4775:6;::::0;;4754:38:::1;::::0;-1:-1:-1;;;;;4754:38:0;;::::1;::::0;4775:6;::::1;::::0;4754:38:::1;::::0;::::1;4797:6;:17:::0;;-1:-1:-1;;;;;;4797:17:0::1;-1:-1:-1::0;;;;;4797:17:0;;;::::1;::::0;;;::::1;::::0;;4596:223::o;2079:160::-;2137:7;;2163:5;2167:1;2163;:5;:::i;:::-;2151:17;;2186:1;2181;:6;;2173:46;;;;-1:-1:-1;;;2173:46:0;;14486:2:1;2173:46:0;;;14468:21:1;14525:2;14505:18;;;14498:30;14564:29;14544:18;;;14537:57;14611:18;;2173:46:0;14284:351:1;2173:46:0;2233:1;2079:160;-1:-1:-1;;;2079:160:0:o;8238:330::-;-1:-1:-1;;;;;8347:19:0;;8339:68;;;;-1:-1:-1;;;8339:68:0;;14842:2:1;8339:68:0;;;14824:21:1;14881:2;14861:18;;;14854:30;14920:34;14900:18;;;14893:62;-1:-1:-1;;;14971:18:1;;;14964:34;15015:19;;8339:68:0;14640:400:1;8339:68:0;-1:-1:-1;;;;;8420:21:0;;8412:68;;;;-1:-1:-1;;;8412:68:0;;15247:2:1;8412:68:0;;;15229:21:1;15286:2;15266:18;;;15259:30;15325:34;15305:18;;;15298:62;-1:-1:-1;;;15376:18:1;;;15369:32;15418:19;;8412:68:0;15045:398:1;8412:68:0;-1:-1:-1;;;;;8485:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;8531:32;;1818:25:1;;;8531:32:0;;1791:18:1;8531:32:0;;;;;;;;8238:330;;;:::o;19265:1818::-;-1:-1:-1;;;;;19372:18:0;;19364:68;;;;-1:-1:-1;;;19364:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19446:16:0;;19438:64;;;;-1:-1:-1;;;19438:64:0;;;;;;;:::i;:::-;19513:6;19523:1;19513:11;19510:71;;19533:28;19549:4;19555:2;19559:1;19533:15;:28::i;:::-;19265:1818;;;:::o;19510:71::-;-1:-1:-1;;;;;19607:31:0;;;19588:16;19607:31;;;:25;:31;;;;;;;;;19662:29;;;;;;;;;19703:35;;;:29;:35;;;;;;19607:31;;;;;19662:29;;;;19703:35;19702:36;:74;;;;-1:-1:-1;;;;;;19743:33:0;;;;;;:29;:33;;;;;;;;19742:34;19702:74;19699:705;;;19793:16;;-1:-1:-1;;;19793:16:0;;;;19785:73;;;;-1:-1:-1;;;19785:73:0;;16460:2:1;19785:73:0;;;16442:21:1;16499:2;16479:18;;;16472:30;16538:34;16518:18;;;16511:62;-1:-1:-1;;;16589:18:1;;;16582:42;16641:19;;19785:73:0;16258:408:1;19785:73:0;-1:-1:-1;;;;;19886:14:0;;;;;;:10;:14;;;;;;;;19885:15;19877:60;;;;-1:-1:-1;;;19877:60:0;;16873:2:1;19877:60:0;;;16855:21:1;;;16892:18;;;16885:30;16951:34;16931:18;;;16924:62;17003:18;;19877:60:0;16671:356:1;19877:60:0;-1:-1:-1;;;;;19956:16:0;;;;;;:10;:16;;;;;;;;19955:17;19947:62;;;;-1:-1:-1;;;19947:62:0;;16873:2:1;19947:62:0;;;16855:21:1;;;16892:18;;;16885:30;16951:34;16931:18;;;16924:62;17003:18;;19947:62:0;16671:356:1;19947:62:0;-1:-1:-1;;;;;20023:38:0;;;;;;:34;:38;;;;;;;;20022:39;:84;;;;-1:-1:-1;;;;;;20066:40:0;;;;;;:34;:40;;;;;;;;20065:41;20022:84;20018:197;;;20146:11;;20136:6;:21;;20128:79;;;;-1:-1:-1;;;20128:79:0;;17234:2:1;20128:79:0;;;17216:21:1;17273:2;17253:18;;;17246:30;17312:34;17292:18;;;17285:62;-1:-1:-1;;;17363:18:1;;;17356:43;17416:19;;20128:79:0;17032:409:1;20128:79:0;-1:-1:-1;;;;;20226:33:0;;;;;;:29;:33;;;;;;;;20221:177;;20305:15;;20294:6;20278:13;20288:2;-1:-1:-1;;;;;5708:18:0;5687:7;5708:18;;;:9;:18;;;;;;;5613:118;20278:13;:22;;;;:::i;:::-;20277:43;;20269:121;;;;-1:-1:-1;;;20269:121:0;;17648:2:1;20269:121:0;;;17630:21:1;17687:2;17667:18;;;17660:30;17726:34;17706:18;;;17699:62;17797:34;17777:18;;;17770:62;-1:-1:-1;;;17848:19:1;;;17841:32;17890:19;;20269:121:0;17446:469:1;20269:121:0;20411:37;20424:11;20437:10;20411:12;:37::i;:::-;20497:23;;20487:4;20454:12;5708:18;;;:9;:18;;;;;;20538:16;;-1:-1:-1;;20469:51:0;;-1:-1:-1;;;20538:16:0;;;;:32;;;;;20563:7;20538:32;:51;;;;-1:-1:-1;20580:9:0;;;;20579:10;20538:51;:73;;;;-1:-1:-1;20598:9:0;;-1:-1:-1;;;20598:9:0;;;;:13;;20538:73;:111;;;;-1:-1:-1;;;;;;20620:29:0;;;;;;:25;:29;;;;;;;;20538:111;20528:206;;;20663:9;:16;;-1:-1:-1;;20663:16:0;20675:4;20663:16;;;20686:17;:15;:17::i;:::-;20710:9;:17;;-1:-1:-1;;20710:17:0;;;20528:206;20757:9;;20741:12;;20757:9;;20756:10;:30;;;;-1:-1:-1;20770:16:0;;-1:-1:-1;;;20770:16:0;;;;20756:30;-1:-1:-1;;;;;20797:24:0;;;;;;:18;:24;;;;;;20741:45;;-1:-1:-1;20797:24:0;;;:50;;-1:-1:-1;;;;;;20825:22:0;;;;;;:18;:22;;;;;;;;20797:50;20794:83;;;-1:-1:-1;20865:5:0;20794:83;20886:7;:24;;;;-1:-1:-1;20897:9:0;;-1:-1:-1;;;20897:9:0;;;;:13;;20886:24;20882:158;;;20942:9;;20919:11;;20954:3;;20933:18;;-1:-1:-1;;;20942:9:0;;;;20933:6;:18;:::i;:::-;:24;;;;:::i;:::-;20919:38;-1:-1:-1;20973:12:0;20919:38;20973:6;:12;:::i;:::-;20964:21;;20992:41;21008:4;21022;21029:3;20992:15;:41::i;:::-;20912:128;20882:158;21045:33;21061:4;21067:2;21071:6;21045:15;:33::i;:::-;19358:1725;;;;19265:1818;;;:::o;2376:171::-;2462:7;2492:12;2484:6;;;;2476:29;;;;-1:-1:-1;;;2476:29:0;;;;;;;;:::i;:::-;-1:-1:-1;2510:9:0;2522:5;2526:1;2522;:5;:::i;:::-;2510:17;2376:171;-1:-1:-1;;;;;2376:171:0:o;22018:1086::-;22218:22;;;;:45;;;;:22;;;;;:45;22214:222;;22276:104;;-1:-1:-1;;;18552:33:1;;18610:2;18601:12;22276:104:0;;;;;;;;22319:22;;;;22365:14;;22276:104;;22319:22;;;;;;;;22276:104;;;;-1:-1:-1;;;;;;;;;;;22276:104:0;;;22365:14;;;22276:104;:::i;:::-;;;;;;;;22386:22;;;:44;;-1:-1:-1;;22386:44:0;;;;;;;;;22214:222;22444:23;;;;:47;;;;:23;;;;;:47;22440:229;;22504:107;;-1:-1:-1;;;19040:34:1;;19099:2;19090:12;22504:107:0;;;;;;;;22548:23;;;;22596:14;;22504:107;;22548:23;;;;;;;;22504:107;;;;-1:-1:-1;;;;;;;;;;;22504:107:0;;;22596:14;;;22504:107;:::i;:::-;;;;;;;;22617:23;;;:46;;-1:-1:-1;;22617:46:0;;;;;;;;;22440:229;22677:20;;;;:41;;;;-1:-1:-1;;;22677:20:0;;;;:41;22673:208;;22731:98;;-1:-1:-1;;;19315:31:1;;19371:2;19362:12;22731:98:0;;;;;;;;22772:20;;;;22814:14;;22731:98;;22772:20;-1:-1:-1;;;22772:20:0;;;;;;22731:98;;;;-1:-1:-1;;;;;;;;;;;22731:98:0;;;22814:14;;;22731:98;:::i;:::-;;;;;;;;22835:20;;;:40;;-1:-1:-1;;22835:40:0;-1:-1:-1;;;22835:40:0;;;;;;;22673:208;22889:21;;;;:43;;;;-1:-1:-1;;;22889:21:0;;;;:43;22885:215;;22945:101;;-1:-1:-1;;;19587:32:1;;19644:2;19635:12;22945:101:0;;;;;;;;22987:21;;;;23031:14;;22945:101;;22987:21;-1:-1:-1;;;22987:21:0;;;;;;22945:101;;;;-1:-1:-1;;;;;;;;;;;22945:101:0;;;23031:14;;;22945:101;:::i;:::-;;;;;;;;23052:21;;;:42;;-1:-1:-1;;23052:42:0;-1:-1:-1;;;23052:42:0;;;;;;;22885:215;22018:1086;;;;;:::o;23107:1054::-;23303:21;;;;:43;;;;:21;;:43;23299:215;;23359:101;;-1:-1:-1;;;19860:32:1;;19917:2;19908:12;23359:101:0;;;;;;;;23401:21;;;;23445:14;;23359:101;;23401:21;;;;;23359:101;;;;-1:-1:-1;;;;;;;;;;;23359:101:0;;;23445:14;;;23359:101;:::i;:::-;;;;;;;;23466:21;;;:42;;-1:-1:-1;;23466:42:0;;;;;;;23299:215;23522:22;;;;:45;;;;:22;;;;;:45;23518:222;;23580:104;;-1:-1:-1;;;20133:33:1;;20191:2;20182:12;23580:104:0;;;;;;;;23623:22;;;;23669:14;;23580:104;;23623:22;;;;;;;;23580:104;;;;-1:-1:-1;;;;;;;;;;;23580:104:0;;;23669:14;;;23580:104;:::i;:::-;;;;;;;;23690:22;;;:44;;-1:-1:-1;;23690:44:0;;;;;;;;;23518:222;23748:19;;;;:39;;;;-1:-1:-1;;;23748:19:0;;;;:39;23744:201;;23800:95;;-1:-1:-1;;;20407:30:1;;20462:2;20453:12;23800:95:0;;;;;;;;23840:19;;;;23880:14;;23800:95;;23840:19;-1:-1:-1;;;23840:19:0;;;;;;23800:95;;;;-1:-1:-1;;;;;;;;;;;23800:95:0;;;23880:14;;;23800:95;:::i;:::-;;;;;;;;23901:19;;;:38;;-1:-1:-1;;23901:38:0;-1:-1:-1;;;23901:38:0;;;;;;;23744:201;23953:20;;;;:41;;;;-1:-1:-1;;;23953:20:0;;;;:41;23949:208;;24007:98;;-1:-1:-1;;;20678:31:1;;20734:2;20725:12;24007:98:0;;;;;;;;24048:20;;;;24090:14;;24007:98;;24048:20;-1:-1:-1;;;24048:20:0;;;;;;24007:98;;;;-1:-1:-1;;;;;;;;;;;24007:98:0;;;24090:14;;;24007:98;:::i;:::-;;;;;;;;24111:20;;;:40;;;;;-1:-1:-1;;;24111:40:0;-1:-1:-1;;24111:40:0;;;;;;23107:1054;;;;;:::o;6992:509::-;-1:-1:-1;;;;;7105:20:0;;7097:70;;;;-1:-1:-1;;;7097:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;7180:23:0;;7172:71;;;;-1:-1:-1;;;7172:71:0;;;;;;;:::i;:::-;7320;7342:6;7320:71;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;7320:17:0;;;;;;:9;:17;;;;;;;:71;:21;:71::i;:::-;-1:-1:-1;;;;;7300:17:0;;;;;;;:9;:17;;;;;;:91;;;;7419:20;;;;;;;:32;;7444:6;7419:24;:32::i;:::-;-1:-1:-1;;;;;7396:20:0;;;;;;;:9;:20;;;;;;;:55;;;;7461:35;;;;;;;;;;7489:6;1818:25:1;;1806:2;1791:18;;1672:177;21086:929:0;21156:13;:17;;-1:-1:-1;;21221:16:0;;;21244:389;;;;21317:1;21295:18;;21280:12;:33;;;;:::i;:::-;:38;21276:352;;21339:13;:19;;-1:-1:-1;;21339:19:0;21355:3;21339:19;;;21276:352;;;21419:23;;21403:13;:39;;21419:23;;;;-1:-1:-1;;21461:41:0;;;;;;;21419:23;21478:24;;;;;;21461:41;;;;;;;;-1:-1:-1;;21575:37:0;-1:-1:-1;;;21535:21:0;;;;21521:35;;;;-1:-1:-1;;21575:37:0;;-1:-1:-1;;;21590:22:0;;;;21575:37;;;;;;;;21276:352;21644:10;21640:205;;;21681:24;;21665:13;:40;;21681:24;;;;;;;;-1:-1:-1;;21711:42:0;;;;;;;21728:25;;;;;;21711:42;;;;;-1:-1:-1;;21801:38:0;-1:-1:-1;;;21773:22:0;;;;21759:36;;-1:-1:-1;;21801:38:0;;-1:-1:-1;;;21816:23:0;;;;;;;21801:38;;;;;;;21640:205;21908:12;;;;;;;;;21894:11;;;;;;21861:30;;21908:12;21877:14;;;;;21861:13;:30;:::i;:::-;:44;;;;:::i;:::-;:59;;;;:::i;:::-;21849:9;:71;;-1:-1:-1;;21849:71:0;;-1:-1:-1;;;21849:71:0;;;;;;;;;;;;;21930:80;;;21942:13;;;;;;;;;;21196:36:1;;21849:71:0;21957:14;;;;21263:2:1;21248:18;;21241:45;21973:11:0;;;;;21302:18:1;;;21295:45;;;;21986:12:0;;;;;21371:2:1;21356:18;;21349:45;22000:9:0;;;;;;21425:3:1;21410:19;;21403:46;21930:80:0;;21183:3:1;21168:19;21930:80:0;20957:498:1;24164:1183:0;24248:4;24204:23;5708:18;;;:9;:18;;;;;;24375:9;;5708:18;;24287:21;;24387:1;;24375:9;-1:-1:-1;;;24375:9:0;;;;;24341:31;;24359:13;5708:18;24341:31;:::i;:::-;:43;;;;:::i;:::-;:47;;;;:::i;:::-;24315:73;-1:-1:-1;24393:20:0;24416:33;24315:73;24416:15;:33;:::i;:::-;24393:56;;24456:31;24474:12;24456:17;:31::i;:::-;24494:27;24524:42;24549:17;24524:21;:42;:::i;:::-;24605:13;;24494:72;;-1:-1:-1;24571:19:0;;24605:17;;24621:1;;24605:13;;:17;:::i;:::-;24593:9;;:29;;;-1:-1:-1;;;24593:9:0;;;;:29;:::i;:::-;24678:13;;24571:51;;;;;-1:-1:-1;24627:26:0;;24708:1;;24571:51;;24656:35;;24678:13;24656:19;:35;:::i;:::-;:49;;;;:::i;:::-;:53;;;;:::i;:::-;24763:11;;24627:82;;-1:-1:-1;24714:24:0;;24777:11;;24741:33;;24763:11;;;;;24741:19;:33;:::i;:::-;:47;;;;:::i;:::-;24845:14;;24714:74;;-1:-1:-1;24793:27:0;;24862:11;;24823:36;;24845:14;;;;;24823:19;:36;:::i;:::-;:50;;;;:::i;:::-;24793:80;-1:-1:-1;24878:25:0;24793:80;24929:37;24950:16;24929:18;:37;:::i;:::-;:59;;;;:::i;:::-;24906:83;;:19;:83;:::i;:::-;25004:13;;24996:49;;24878:111;;-1:-1:-1;;;;;;25004:13:0;;24996:49;;;;;25028:16;;25004:13;24996:49;25004:13;24996:49;25028:16;25004:13;24996:49;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25058:16:0;;25050:55;;-1:-1:-1;;;;;25058:16:0;;;;25050:55;;;;;25085:19;;25058:16;25050:55;25058:16;25050:55;25085:19;25058:16;25050:55;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25124:14:0;;25116:51;;-1:-1:-1;;;;;25124:14:0;;;;25116:51;;;;;25149:17;;25124:14;25116:51;25124:14;25116:51;25149:17;25124:14;25116:51;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25178:19:0;;25174:169;;25205:50;25219:15;25236:18;25205:13;:50::i;:::-;25266:65;;;22032:25:1;;;22088:2;22073:18;;22066:34;;;22116:18;;;22109:34;;;25266:65:0;;22020:2:1;22005:18;25266:65:0;;;;;;;25174:169;24199:1148;;;;;;;;;;24164:1183::o;25350:416::-;25435:16;;;25449:1;25435:16;;;;;;;;25411:21;;25435:16;;;;;;;;;;-1:-1:-1;25435:16:0;25411:40;;25474:4;25456;25461:1;25456:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;25456:23:0;;;:7;;;;;;;;;;:23;;;;25494:15;;:22;;;-1:-1:-1;;;25494:22:0;;;;:15;;;;;:20;;:22;;;;;25456:7;;25494:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25484:4;25489:1;25484:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;25484:32:0;;;:7;;;;;;;;;:32;25553:15;;25521:62;;25538:4;;25553:15;25571:11;25521:8;:62::i;:::-;25588:15;;:173;;-1:-1:-1;;;25588:173:0;;-1:-1:-1;;;;;25588:15:0;;;;:66;;:173;;25660:11;;25588:15;;25712:4;;25730;;25741:15;;25588:173;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25406:360;25350:416;:::o;25769:348::-;25877:15;;25845:62;;25862:4;;-1:-1:-1;;;;;25877:15:0;25895:11;25845:8;:62::i;:::-;25912:15;;26071;;25912:200;;-1:-1:-1;;;25912:200:0;;25975:4;25912:200;;;24000:34:1;24050:18;;;24043:34;;;25912:15:0;24093:18:1;;;24086:34;;;24136:18;;;24129:34;-1:-1:-1;;;;;26071:15:0;;;24179:19:1;;;24172:44;26092:15:0;24232:19:1;;;24225:35;25912:15:0;;;:31;;25951:9;;23934:19:1;;25912:200:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;206:597:1:-;318:4;347:2;376;365:9;358:21;408:6;402:13;451:6;446:2;435:9;431:18;424:34;476:1;486:140;500:6;497:1;494:13;486:140;;;595:14;;;591:23;;585:30;561:17;;;580:2;557:26;550:66;515:10;;486:140;;;644:6;641:1;638:13;635:91;;;714:1;709:2;700:6;689:9;685:22;681:31;674:42;635:91;-1:-1:-1;787:2:1;766:15;-1:-1:-1;;762:29:1;747:45;;;;794:2;743:54;;206:597;-1:-1:-1;;;206:597:1:o;808:131::-;-1:-1:-1;;;;;883:31:1;;873:42;;863:70;;929:1;926;919:12;863:70;808:131;:::o;944:315::-;1012:6;1020;1073:2;1061:9;1052:7;1048:23;1044:32;1041:52;;;1089:1;1086;1079:12;1041:52;1128:9;1115:23;1147:31;1172:5;1147:31;:::i;:::-;1197:5;1249:2;1234:18;;;;1221:32;;-1:-1:-1;;;944:315:1:o;1264:180::-;1323:6;1376:2;1364:9;1355:7;1351:23;1347:32;1344:52;;;1392:1;1389;1382:12;1344:52;-1:-1:-1;1415:23:1;;1264:180;-1:-1:-1;1264:180:1:o;2062:456::-;2139:6;2147;2155;2208:2;2196:9;2187:7;2183:23;2179:32;2176:52;;;2224:1;2221;2214:12;2176:52;2263:9;2250:23;2282:31;2307:5;2282:31;:::i;:::-;2332:5;-1:-1:-1;2389:2:1;2374:18;;2361:32;2402:33;2361:32;2402:33;:::i;:::-;2062:456;;2454:7;;-1:-1:-1;;;2508:2:1;2493:18;;;;2480:32;;2062:456::o;2712:247::-;2771:6;2824:2;2812:9;2803:7;2799:23;2795:32;2792:52;;;2840:1;2837;2830:12;2792:52;2879:9;2866:23;2898:31;2923:5;2898:31;:::i;2964:156::-;3030:20;;3090:4;3079:16;;3069:27;;3059:55;;3110:1;3107;3100:12;3059:55;2964:156;;;:::o;3125:393::-;3203:6;3211;3219;3227;3280:3;3268:9;3259:7;3255:23;3251:33;3248:53;;;3297:1;3294;3287:12;3248:53;3320:27;3337:9;3320:27;:::i;:::-;3310:37;;3366:36;3398:2;3387:9;3383:18;3366:36;:::i;:::-;3356:46;;3421:36;3453:2;3442:9;3438:18;3421:36;:::i;:::-;3411:46;;3476:36;3508:2;3497:9;3493:18;3476:36;:::i;:::-;3466:46;;3125:393;;;;;;;:::o;3523:416::-;3588:6;3596;3649:2;3637:9;3628:7;3624:23;3620:32;3617:52;;;3665:1;3662;3655:12;3617:52;3704:9;3691:23;3723:31;3748:5;3723:31;:::i;:::-;3773:5;-1:-1:-1;3830:2:1;3815:18;;3802:32;3872:15;;3865:23;3853:36;;3843:64;;3903:1;3900;3893:12;3843:64;3926:7;3916:17;;;3523:416;;;;;:::o;3944:671::-;4030:6;4038;4046;4054;4107:3;4095:9;4086:7;4082:23;4078:33;4075:53;;;4124:1;4121;4114:12;4075:53;4163:9;4150:23;4182:31;4207:5;4182:31;:::i;:::-;4232:5;-1:-1:-1;4289:2:1;4274:18;;4261:32;4302:33;4261:32;4302:33;:::i;:::-;4354:7;-1:-1:-1;4413:2:1;4398:18;;4385:32;4426:33;4385:32;4426:33;:::i;:::-;4478:7;-1:-1:-1;4537:2:1;4522:18;;4509:32;4550:33;4509:32;4550:33;:::i;:::-;3944:671;;;;-1:-1:-1;3944:671:1;;-1:-1:-1;;3944:671:1:o;5044:388::-;5112:6;5120;5173:2;5161:9;5152:7;5148:23;5144:32;5141:52;;;5189:1;5186;5179:12;5141:52;5228:9;5215:23;5247:31;5272:5;5247:31;:::i;:::-;5297:5;-1:-1:-1;5354:2:1;5339:18;;5326:32;5367:33;5326:32;5367:33;:::i;5437:380::-;5516:1;5512:12;;;;5559;;;5580:61;;5634:4;5626:6;5622:17;5612:27;;5580:61;5687:2;5679:6;5676:14;5656:18;5653:38;5650:161;;5733:10;5728:3;5724:20;5721:1;5714:31;5768:4;5765:1;5758:15;5796:4;5793:1;5786:15;5650:161;;5437:380;;;:::o;5822:356::-;6024:2;6006:21;;;6043:18;;;6036:30;6102:34;6097:2;6082:18;;6075:62;6169:2;6154:18;;5822:356::o;8335:420::-;8537:2;8519:21;;;8576:2;8556:18;;;8549:30;8615:34;8610:2;8595:18;;8588:62;8686:26;8681:2;8666:18;;8659:54;8745:3;8730:19;;8335:420::o;9169:127::-;9230:10;9225:3;9221:20;9218:1;9211:31;9261:4;9258:1;9251:15;9285:4;9282:1;9275:15;9301:125;9341:4;9369:1;9366;9363:8;9360:34;;;9374:18;;:::i;:::-;-1:-1:-1;9411:9:1;;9301:125::o;14151:128::-;14191:3;14222:1;14218:6;14215:1;14212:13;14209:39;;;14228:18;;:::i;:::-;-1:-1:-1;14264:9:1;;14151:128::o;15448:401::-;15650:2;15632:21;;;15689:2;15669:18;;;15662:30;15728:34;15723:2;15708:18;;15701:62;-1:-1:-1;;;15794:2:1;15779:18;;15772:35;15839:3;15824:19;;15448:401::o;15854:399::-;16056:2;16038:21;;;16095:2;16075:18;;;16068:30;16134:34;16129:2;16114:18;;16107:62;-1:-1:-1;;;16200:2:1;16185:18;;16178:33;16243:3;16228:19;;15854:399::o;17920:168::-;17960:7;18026:1;18022;18018:6;18014:14;18011:1;18008:21;18003:1;17996:9;17989:17;17985:45;17982:71;;;18033:18;;:::i;:::-;-1:-1:-1;18073:9:1;;17920:168::o;18093:127::-;18154:10;18149:3;18145:20;18142:1;18135:31;18185:4;18182:1;18175:15;18209:4;18206:1;18199:15;18225:120;18265:1;18291;18281:35;;18296:18;;:::i;:::-;-1:-1:-1;18330:9:1;;18225:120::o;18624:209::-;-1:-1:-1;;18788:38:1;;;;18770:57;;18758:2;18743:18;;18624:209::o;20748:204::-;20786:3;20822:4;20819:1;20815:12;20854:4;20851:1;20847:12;20889:3;20883:4;20879:14;20874:3;20871:23;20868:49;;;20897:18;;:::i;:::-;20933:13;;20748:204;-1:-1:-1;;;20748:204:1:o;21460:165::-;21498:1;21532:4;21529:1;21525:12;21556:3;21546:37;;21563:18;;:::i;:::-;21615:3;21608:4;21605:1;21601:12;21597:22;21592:27;;;21460:165;;;;:::o;21630:195::-;21668:4;21705;21702:1;21698:12;21737:4;21734:1;21730:12;21762:3;21757;21754:12;21751:38;;;21769:18;;:::i;:::-;21806:13;;;21630:195;-1:-1:-1;;;21630:195:1:o;22286:127::-;22347:10;22342:3;22338:20;22335:1;22328:31;22378:4;22375:1;22368:15;22402:4;22399:1;22392:15;22418:251;22488:6;22541:2;22529:9;22520:7;22516:23;22512:32;22509:52;;;22557:1;22554;22547:12;22509:52;22589:9;22583:16;22608:31;22633:5;22608:31;:::i;22674:980::-;22936:4;22984:3;22973:9;22969:19;23015:6;23004:9;22997:25;23041:2;23079:6;23074:2;23063:9;23059:18;23052:34;23122:3;23117:2;23106:9;23102:18;23095:31;23146:6;23181;23175:13;23212:6;23204;23197:22;23250:3;23239:9;23235:19;23228:26;;23289:2;23281:6;23277:15;23263:29;;23310:1;23320:195;23334:6;23331:1;23328:13;23320:195;;;23399:13;;-1:-1:-1;;;;;23395:39:1;23383:52;;23490:15;;;;23455:12;;;;23431:1;23349:9;23320:195;;;-1:-1:-1;;;;;;;23571:32:1;;;;23566:2;23551:18;;23544:60;-1:-1:-1;;;23635:3:1;23620:19;23613:35;23532:3;22674:980;-1:-1:-1;;;22674:980:1:o;24271:306::-;24359:6;24367;24375;24428:2;24416:9;24407:7;24403:23;24399:32;24396:52;;;24444:1;24441;24434:12;24396:52;24473:9;24467:16;24457:26;;24523:2;24512:9;24508:18;24502:25;24492:35;;24567:2;24556:9;24552:18;24546:25;24536:35;;24271:306;;;;;:::o

Swarm Source

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