ETH Price: $2,627.64 (+0.46%)

Contract

0xa8b93D0CE5e095897c3512c6F4E2bECB8f0ADdF1
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Approve183120242023-10-09 9:29:11489 days ago1696843751IN
0xa8b93D0C...B8f0ADdF1
0 ETH0.000170636.33700943
Transfer160431392022-11-24 23:31:23807 days ago1669332683IN
0xa8b93D0C...B8f0ADdF1
0 ETH0.0009828712.1394958
Approve159449282022-11-11 6:16:59821 days ago1668147419IN
0xa8b93D0C...B8f0ADdF1
0 ETH0.0005217919.37878392
Approve159443042022-11-11 4:11:11821 days ago1668139871IN
0xa8b93D0C...B8f0ADdF1
0 ETH0.0005353319.88173897
Approve159442332022-11-11 3:56:47821 days ago1668139007IN
0xa8b93D0C...B8f0ADdF1
0 ETH0.0005193619.2886223
Approve153027752022-08-08 17:02:21915 days ago1659978141IN
0xa8b93D0C...B8f0ADdF1
0 ETH0.0020774442.21587973
Approve153027332022-08-08 16:53:26915 days ago1659977606IN
0xa8b93D0C...B8f0ADdF1
0 ETH0.0010113120.55101017
Approve152683142022-08-03 7:56:25921 days ago1659513385IN
0xa8b93D0C...B8f0ADdF1
0 ETH0.00034056.9195047
Approve152668052022-08-03 2:16:32921 days ago1659492992IN
0xa8b93D0C...B8f0ADdF1
0 ETH0.000410638.3445949
Approve152664302022-08-03 0:51:53921 days ago1659487913IN
0xa8b93D0C...B8f0ADdF1
0 ETH0.000299216.0804348
Approve152663472022-08-03 0:37:59921 days ago1659487079IN
0xa8b93D0C...B8f0ADdF1
0 ETH0.0007040814.30785356
Approve152663082022-08-03 0:27:46921 days ago1659486466IN
0xa8b93D0C...B8f0ADdF1
0 ETH0.000963719.58358682
Approve152661592022-08-02 23:53:53921 days ago1659484433IN
0xa8b93D0C...B8f0ADdF1
0 ETH0.000491689.99147768
Approve152661422022-08-02 23:49:41921 days ago1659484181IN
0xa8b93D0C...B8f0ADdF1
0 ETH0.000454129.22837608
Approve152661262022-08-02 23:45:20921 days ago1659483920IN
0xa8b93D0C...B8f0ADdF1
0 ETH0.0005327810.8267152
Approve152660982022-08-02 23:39:01921 days ago1659483541IN
0xa8b93D0C...B8f0ADdF1
0 ETH0.000378757.69660645
Approve152660952022-08-02 23:38:33921 days ago1659483513IN
0xa8b93D0C...B8f0ADdF1
0 ETH0.00042638.66291735
Approve152660952022-08-02 23:38:33921 days ago1659483513IN
0xa8b93D0C...B8f0ADdF1
0 ETH0.00042638.66291735
Approve152660792022-08-02 23:35:28921 days ago1659483328IN
0xa8b93D0C...B8f0ADdF1
0 ETH0.000408968.31058239
Approve152660762022-08-02 23:35:04921 days ago1659483304IN
0xa8b93D0C...B8f0ADdF1
0 ETH0.000417178.47753856
Approve152660742022-08-02 23:34:51921 days ago1659483291IN
0xa8b93D0C...B8f0ADdF1
0 ETH0.000487829.9131487
Approve152660682022-08-02 23:33:17921 days ago1659483197IN
0xa8b93D0C...B8f0ADdF1
0 ETH0.000411338.35880375
Approve152554752022-08-01 8:14:04923 days ago1659341644IN
0xa8b93D0C...B8f0ADdF1
0 ETH0.0007143114.51561758
Approve152554282022-08-01 8:04:55923 days ago1659341095IN
0xa8b93D0C...B8f0ADdF1
0 ETH0.0006994614.21385004
Approve152550692022-08-01 6:42:35923 days ago1659336155IN
0xa8b93D0C...B8f0ADdF1
0 ETH0.000344436.99932614
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block
From
To
153767142022-08-20 9:05:16904 days ago1660986316
0xa8b93D0C...B8f0ADdF1
0.00071598 ETH
153767142022-08-20 9:05:16904 days ago1660986316
0xa8b93D0C...B8f0ADdF1
0.00031821 ETH
153767142022-08-20 9:05:16904 days ago1660986316
0xa8b93D0C...B8f0ADdF1
0.00103419 ETH
153230722022-08-11 21:32:07912 days ago1660253527
0xa8b93D0C...B8f0ADdF1
0.00194469 ETH
153230722022-08-11 21:32:07912 days ago1660253527
0xa8b93D0C...B8f0ADdF1
0.0008643 ETH
153230722022-08-11 21:32:07912 days ago1660253527
0xa8b93D0C...B8f0ADdF1
0.002809 ETH
153118772022-08-10 2:59:24914 days ago1660100364
0xa8b93D0C...B8f0ADdF1
0.00134175 ETH
153118772022-08-10 2:59:24914 days ago1660100364
0xa8b93D0C...B8f0ADdF1
0.00059633 ETH
153118772022-08-10 2:59:24914 days ago1660100364
0xa8b93D0C...B8f0ADdF1
0.00193809 ETH
153028382022-08-08 17:17:20915 days ago1659979040
0xa8b93D0C...B8f0ADdF1
0.00232301 ETH
153028382022-08-08 17:17:20915 days ago1659979040
0xa8b93D0C...B8f0ADdF1
0.00103245 ETH
153028382022-08-08 17:17:20915 days ago1659979040
0xa8b93D0C...B8f0ADdF1
0.00335547 ETH
153027482022-08-08 16:55:37915 days ago1659977737
0xa8b93D0C...B8f0ADdF1
0.0030012 ETH
153027482022-08-08 16:55:37915 days ago1659977737
0xa8b93D0C...B8f0ADdF1
0.00133386 ETH
153027482022-08-08 16:55:37915 days ago1659977737
0xa8b93D0C...B8f0ADdF1
0.00433506 ETH
152755772022-08-04 11:18:59920 days ago1659611939
0xa8b93D0C...B8f0ADdF1
0.00148523 ETH
152755772022-08-04 11:18:59920 days ago1659611939
0xa8b93D0C...B8f0ADdF1
0.0006601 ETH
152755772022-08-04 11:18:59920 days ago1659611939
0xa8b93D0C...B8f0ADdF1
0.00214534 ETH
152686452022-08-03 9:13:58921 days ago1659518038
0xa8b93D0C...B8f0ADdF1
0.00308274 ETH
152686452022-08-03 9:13:58921 days ago1659518038
0xa8b93D0C...B8f0ADdF1
0.0013701 ETH
152686452022-08-03 9:13:58921 days ago1659518038
0xa8b93D0C...B8f0ADdF1
0.00445285 ETH
152685882022-08-03 8:59:05921 days ago1659517145
0xa8b93D0C...B8f0ADdF1
0.00070544 ETH
152685882022-08-03 8:59:05921 days ago1659517145
0xa8b93D0C...B8f0ADdF1
0.00031353 ETH
152685882022-08-03 8:59:05921 days ago1659517145
0xa8b93D0C...B8f0ADdF1
0.00101897 ETH
152683172022-08-03 7:57:24921 days ago1659513444
0xa8b93D0C...B8f0ADdF1
0.00344024 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
HIRO

Compiler Version
v0.8.15+commit.e14f2714

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

//SPDX-License-Identifier: MIT
pragma solidity 0.8.15;

interface IERC20 {
	function totalSupply() external view returns (uint256);
	function decimals() external view returns (uint8);
	function symbol() external view returns (string memory);
	function name() external view returns (string memory);
	function balanceOf(address account) external view returns (uint256);
	function transfer(address recipient, uint256 amount) external returns (bool);
	function allowance(address _owner, address spender) external view returns (uint256);
	function approve(address spender, uint256 amount) external returns (bool);
	function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
	event Transfer(address indexed from, address indexed to, uint256 value);
	event Approval(address indexed owner, address indexed spender, uint256 value);
}

abstract contract Auth {
	address internal owner;
	constructor(address _owner) { owner = _owner; }
	modifier onlyOwner() { require(msg.sender == owner, "Only contract owner can call this function"); _; }
	function transferOwnership(address payable newOwner) external onlyOwner { owner = newOwner;	emit OwnershipTransferred(newOwner); }
	event OwnershipTransferred(address owner);
}

interface IUniswapV2Factory { function createPair(address tokenA, address tokenB) external returns (address pair); }
interface IUniswapV2Router02 {
	function swapExactTokensForETHSupportingFeeOnTransferTokens(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external;
	function WETH() external pure returns (address);
	function factory() external pure returns (address);
	function addLiquidityETH(address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline) external payable returns (uint amountToken, uint amountETH, uint liquidity);
}

contract HIRO is IERC20, Auth {
	string constant _name = "Hiroshima"; 
	string constant _symbol = "HIRO"; 
	uint8 constant _decimals = 9;
	uint256 constant _totalSupply = 1_000_000 * 10**_decimals;
	mapping (address => uint256) _balances;
	mapping (address => mapping (address => uint256)) _allowances;
	uint256 private _tradingOpenBlock;
	mapping (address => bool) private _isLiqPool;
	uint16 private _blacklistedWallets = 0;

	uint8 private fee_taxRateMaxLimit; uint8 private fee_taxRateBuy; uint8 private fee_taxRateSell; uint8 private fee_taxRateTransfer;
	uint16 private fee_sharesAutoLP; uint16 private fee_sharesBurn; uint16 private fee_sharesDevelopment; uint16 private fee_sharesTOTAL;

	uint256 private lim_maxTxAmount; uint256 private lim_maxWalletAmount;
	uint256 private lim_taxSwapMin; uint256 private lim_taxSwapMax;

	address payable private wlt_development;
	address private _liquidityPool;

	mapping(address => bool) private exm_noFees;
	mapping(address => bool) private exm_noLimits;
	
	uint256 private _humanBlock = 0;
	mapping (address => bool) private _nonSniper;
	mapping (address => uint256) private _blacklistBlock;

	bool private _inTaxSwap = false;
	address private constant _uniswapV2RouterAddress = address(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
	address private _wethAddress = address(0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2);
	IUniswapV2Router02 private _uniswapV2Router;
	modifier lockTaxSwap { _inTaxSwap = true; _; _inTaxSwap = false; }

	event TokensBurned(address burnedFrom, uint256 tokenAmount);
	event TaxRatesChanged(uint8 taxRateBuy, uint8 taxRateSell, uint8 taxRateTransfer);
	event TaxWalletChanged(address development);
	event TaxDistributionChanged(uint16 autoLP, uint16 burn, uint16 development);
	event LimitsIncreased(uint256 maxTransaction, uint256 maxWalletSize);
	event TaxSwapSettingsChanged(uint256 taxSwapMin, uint256 taxSwapMax);
	event WalletExemptionsSet(address wallet, bool noFees, bool noLimits);


	constructor() Auth(msg.sender) {
		_tradingOpenBlock = type(uint256).max; 
		fee_taxRateMaxLimit = 8;
		lim_maxTxAmount = _totalSupply;
		lim_maxWalletAmount = _totalSupply;
		lim_taxSwapMin = _totalSupply * 1 / 10000;
		lim_taxSwapMax = _totalSupply * 50 / 10000;
		fee_sharesAutoLP = 400;
		fee_sharesBurn = 600;
		fee_sharesDevelopment = 300;
		fee_sharesTOTAL = fee_sharesAutoLP + fee_sharesBurn + fee_sharesDevelopment;
		_uniswapV2Router = IUniswapV2Router02(_uniswapV2RouterAddress);

		wlt_development = payable(0x3446B47aE8C571A25B79F7195aB331DD99b84664);

		exm_noFees[owner] = true;
		exm_noFees[address(this)] = true;
		exm_noFees[_uniswapV2RouterAddress] = true;
		exm_noFees[wlt_development] = true;

		exm_noLimits[owner] = true;
		exm_noLimits[address(this)] = true;
		exm_noLimits[_uniswapV2RouterAddress] = true;
		exm_noLimits[wlt_development] = true;

		_balances[address(this)] = _totalSupply;
		emit Transfer(address(0), address(this), _totalSupply);
	}
	
	receive() external payable {}
	
	function totalSupply() external pure override returns (uint256) { return _totalSupply; }
	function decimals() external pure override returns (uint8) { return _decimals; }
	function symbol() external pure override returns (string memory) { return _symbol; }
	function name() external pure override returns (string memory) { return _name; }
	function balanceOf(address account) public view override returns (uint256) { return _balances[account]; }
	function allowance(address holder, address spender) external view override returns (uint256) { return _allowances[holder][spender]; }

	function approve(address spender, uint256 amount) public override returns (bool) {
		if ( _humanBlock > block.number && !_nonSniper[msg.sender] ) {
			_addBlacklist(msg.sender, block.number, true);
		}

		_allowances[msg.sender][spender] = amount;
		emit Approval(msg.sender, spender, amount);
		return true;
	}

	function transfer(address recipient, uint256 amount) external override returns (bool) {
		require(_checkTradingOpen(), "Trading not open");
		return _transferFrom(msg.sender, recipient, amount);
	}

	function transferFrom(address sender, address recipient, uint256 amount) external override returns (bool) {
		require(_checkTradingOpen(), "Trading not open");
		if (_allowances[sender][msg.sender] != type(uint256).max){
			_allowances[sender][msg.sender] = _allowances[sender][msg.sender] - amount;
		}
		return _transferFrom(sender, recipient, amount);
	}

	function addLP() external onlyOwner {
		require(!_tradingOpen(), "trading already open");
		require(_liquidityPool == address(0), "LP already added");

		_nonSniper[address(this)] = true;
		_nonSniper[owner] = true;
		_nonSniper[wlt_development] = true;

		_wethAddress = _uniswapV2Router.WETH();
		_liquidityPool = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _wethAddress);

		_isLiqPool[_liquidityPool] = true;
		_nonSniper[_liquidityPool] = true;

		uint256 _contractETHBalance = address(this).balance;
		require(_contractETHBalance >= 0, "no eth");		
		uint256 _contractTokenBalance = balanceOf(address(this));
		require(_contractTokenBalance > 0, "no tokens");

		_approveRouter(_contractTokenBalance);
		_addLiquidity(_contractTokenBalance, _contractETHBalance, false);
		uint256 _blks = 14;
		_openTrading(_blks);
	}

	function _approveRouter(uint256 _tokenAmount) internal {
		if ( _allowances[address(this)][_uniswapV2RouterAddress] < _tokenAmount ) {
			_allowances[address(this)][_uniswapV2RouterAddress] = type(uint256).max;
			emit Approval(address(this), _uniswapV2RouterAddress, type(uint256).max);
		}
	}

	function _addLiquidity(uint256 _tokenAmount, uint256 _ethAmountWei, bool autoburn) internal {
		address lpTokenRecipient = address(0);
		if ( !autoburn ) { lpTokenRecipient = owner; }
		_uniswapV2Router.addLiquidityETH{value: _ethAmountWei} ( address(this), _tokenAmount, 0, 0, lpTokenRecipient, block.timestamp );
	}

	function _openTrading(uint256 blks) internal {
		lim_maxTxAmount     = 100 * _totalSupply / 10000 + 10**_decimals; 
		lim_maxWalletAmount = 100 * _totalSupply / 10000 + 10**_decimals;
		fee_taxRateBuy = 5;
		fee_taxRateSell = 8;
		fee_taxRateTransfer = 0; 
		_tradingOpenBlock = block.number + blks;
		_humanBlock = _tradingOpenBlock + 9;
	}

	function tradingOpen() external view returns (bool) {
		if (_tradingOpen() && block.number >= _humanBlock + 10) { return _tradingOpen(); }
		else { return false; }
	}

	function _transferFrom(address sender, address recipient, uint256 amount) internal returns (bool) {
		require(sender!=address(0) && recipient!=address(0), "Zero address not allowed");
		if ( _humanBlock > block.number ) {
			if ( _blacklistBlock[sender] == 0 ) { _addBlacklist(recipient, block.number, true); }
			else { _addBlacklist(recipient, _blacklistBlock[sender], false); }
		} else {
			if ( _blacklistBlock[sender] != 0 ) { _addBlacklist(recipient, _blacklistBlock[sender], false); }
		}

		if ( _tradingOpen() && _blacklistBlock[sender] != 0 && _blacklistBlock[sender] < block.number ) { revert("blacklisted"); }

		if ( !_inTaxSwap && _isLiqPool[recipient] ) { _swapTaxAndLiquify();	}

		if ( sender != address(this) && recipient != address(this) && sender != owner ) { require(_checkLimits(sender, recipient, amount), "TX exceeds limits"); }
		uint256 _taxAmount = _calculateTax(sender, recipient, amount);
		uint256 _transferAmount = amount - _taxAmount;
		_balances[sender] = _balances[sender] - amount;
		if ( _taxAmount > 0 ) { _balances[address(this)] = _balances[address(this)] + _taxAmount; }
		_balances[recipient] = _balances[recipient] + _transferAmount;
		emit Transfer(sender, recipient, amount);
		return true;
	}

	function _addBlacklist(address wallet, uint256 blackBlockNum, bool addSniper) internal {
		if ( !_nonSniper[wallet] && _blacklistBlock[wallet] == 0 ) { 
			_blacklistBlock[wallet] = blackBlockNum; 
			if ( addSniper) { _blacklistedWallets ++; }
		}
	}
	
	function _checkLimits(address sender, address recipient, uint256 transferAmount) internal view returns (bool) {
		bool limitCheckPassed = true;
		if ( _tradingOpen() && !exm_noLimits[recipient] && !exm_noLimits[sender] ) {
			if ( transferAmount > lim_maxTxAmount ) { limitCheckPassed = false; }
			else if ( !_isLiqPool[recipient] && (_balances[recipient] + transferAmount > lim_maxWalletAmount) ) { limitCheckPassed = false; }
		}
		return limitCheckPassed;
	}

	function _tradingOpen() private view returns (bool) {
		bool result = false;
		if (block.number >= _tradingOpenBlock) { result = true; }
		return result;
	}

	function _checkTradingOpen() private view returns (bool){
		bool checkResult = false;
		if ( _tradingOpen() ) { checkResult = true; } 
		else if ( tx.origin == owner ) { checkResult = true; } 
		return checkResult;
	}

	function _calculateTax(address sender, address recipient, uint256 amount) internal view returns (uint256) {
		uint256 taxAmount;
		if ( !_tradingOpen() || exm_noFees[sender] || exm_noFees[recipient] ) { taxAmount = 0; }
		else if ( _isLiqPool[sender] ) { taxAmount = amount * fee_taxRateBuy / 100; }
		else if ( _isLiqPool[recipient] ) { taxAmount = amount * fee_taxRateSell / 100; }
		else { taxAmount = amount * fee_taxRateTransfer / 100; }
		return taxAmount;
	}

	function getBlacklistStatus(address wallet) external view returns(bool isBlacklisted, uint256 blacklistBlock, uint16 totalBlacklistedWallets) {
		bool _isBlacklisted;
		if ( _blacklistBlock[wallet] != 0 ) { _isBlacklisted = true; }
		return ( _isBlacklisted, _blacklistBlock[wallet], _blacklistedWallets);	
	}

	function getExemptions(address wallet) external view returns(bool noFees, bool noLimits) {
		return (exm_noFees[wallet], exm_noLimits[wallet]);
	}

	function setExemptions(address wallet, bool noFees, bool noLimits) external onlyOwner {
		exm_noFees[wallet] = noFees;
		exm_noLimits[wallet] = noLimits;
		emit WalletExemptionsSet(wallet, noFees, noLimits);
	}

	function getFeeSettings() external view returns(uint8 taxRateMaxLimit, uint8 taxRateBuy, uint8 taxRateSell, uint8 taxRateTransfer, uint16 sharesAutoLP, uint16 sharesBurn, uint16 sharesDevelopment ) {
		return (fee_taxRateMaxLimit, fee_taxRateBuy, fee_taxRateSell, fee_taxRateTransfer, fee_sharesAutoLP, fee_sharesBurn, fee_sharesDevelopment);
	}

	function setTaxRates(uint8 newBuyTax, uint8 newSellTax, uint8 newTxTax) external onlyOwner {
		require(newBuyTax+newSellTax <= 2*fee_taxRateMaxLimit, "Avg tax too high");
		require(newTxTax <= fee_taxRateMaxLimit, "Tax too high");
		fee_taxRateBuy = newBuyTax;
		fee_taxRateSell = newSellTax;
		fee_taxRateTransfer = newTxTax;
		emit TaxRatesChanged(newBuyTax, newSellTax, newTxTax);
	}

	function setTaxDistribution(uint16 sharesAutoLP, uint16 sharesBurn, uint16 sharesDevelopment) external onlyOwner {
		fee_sharesAutoLP = sharesAutoLP;
		fee_sharesBurn = sharesBurn;
		fee_sharesDevelopment = sharesDevelopment;
		fee_sharesTOTAL = fee_sharesAutoLP + fee_sharesBurn + fee_sharesDevelopment;
		emit TaxDistributionChanged(sharesAutoLP, sharesBurn, sharesDevelopment);
	}
	
	function getWallets() external view returns(address contractOwner, address liquidityPool, address development) {
		return (owner, _liquidityPool, wlt_development);
	}

	function setTaxWallets(address newDevelopmentWallet) external onlyOwner {
		wlt_development = payable(newDevelopmentWallet);
		exm_noFees[newDevelopmentWallet] = true;
		exm_noLimits[newDevelopmentWallet] = true;
		emit TaxWalletChanged(newDevelopmentWallet);
	}

	function getLimits() external view returns(uint256 maxTxAmount, uint256 maxWalletAmount, uint256 taxSwapMin, uint256 taxSwapMax) {
		return (lim_maxTxAmount, lim_maxWalletAmount, lim_taxSwapMin, lim_taxSwapMax);
	}

	function increaseLimits(uint16 maxTxAmtPermile, uint16 maxWalletAmtPermile) external onlyOwner {
		uint256 newTxAmt = _totalSupply * maxTxAmtPermile / 1000 + 1;
		require(newTxAmt >= lim_maxTxAmount, "tx limit too low");
		lim_maxTxAmount = newTxAmt;
		uint256 newWalletAmt = _totalSupply * maxWalletAmtPermile / 1000 + 1;
		require(newWalletAmt >= lim_maxWalletAmount, "wallet limit too low");
		lim_maxWalletAmount = newWalletAmt;
		emit LimitsIncreased(lim_maxTxAmount, lim_maxWalletAmount);
	}

	function setTaxSwapLimits(uint32 minValue, uint32 minDivider, uint32 maxValue, uint32 maxDivider) external onlyOwner {
		lim_taxSwapMin = _totalSupply * minValue / minDivider;
		lim_taxSwapMax = _totalSupply * maxValue / maxDivider;
		require(lim_taxSwapMax > lim_taxSwapMin);
		emit TaxSwapSettingsChanged(lim_taxSwapMin, lim_taxSwapMax);
	}

	function _burnTokens(uint256 amount, address burnedFrom) private {
		if ( amount > 0 ) {
			_balances[burnedFrom] -= amount;
			_balances[address(0)] += amount;
			emit Transfer(burnedFrom, address(0), amount);
			emit TokensBurned(burnedFrom, amount);
		}
	}

	function _swapTaxAndLiquify() private lockTaxSwap {
		uint256 _taxTokensAvailable = balanceOf(address(this));

		if ( _taxTokensAvailable >= lim_taxSwapMin && _tradingOpen() ) {
			if ( _taxTokensAvailable >= lim_taxSwapMax ) { _taxTokensAvailable = lim_taxSwapMax; }
			
			uint256 _tokensForLP = _taxTokensAvailable * fee_sharesAutoLP / fee_sharesTOTAL / 2;
			
			uint256 _tokensToBurn = _taxTokensAvailable * fee_sharesBurn / fee_sharesTOTAL;
			_burnTokens(_tokensToBurn, address(this));

			uint256 _tokensToSwap = _taxTokensAvailable - _tokensToBurn - _tokensForLP;
			if (_tokensToSwap >= 10**_decimals) {
				uint256 _ethPreSwap = address(this).balance;
				_swapTaxTokensForEth(_tokensToSwap);
				uint256 _ethSwapped = address(this).balance - _ethPreSwap;
				if ( fee_sharesAutoLP > 0 ) {
					uint256 _ethWeiAmount = _ethSwapped * fee_sharesAutoLP / fee_sharesTOTAL ;
					_approveRouter(_tokensForLP);
					_addLiquidity(_tokensForLP, _ethWeiAmount, false);
				}
			}
			uint256 _contractETHBalance = address(this).balance;			
			if (_contractETHBalance > 0) { _distributeTaxEth(_contractETHBalance); }
		}
	}

	function _swapTaxTokensForEth(uint256 _tokenAmount) private {
		_approveRouter(_tokenAmount);
		address[] memory path = new address[](2);
		path[0] = address(this);
		path[1] = _wethAddress;
		_uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(_tokenAmount,0,path,address(this),block.timestamp);
	}

	function _distributeTaxEth(uint256 _amount) private {
		if ( fee_sharesDevelopment > 0 ) { wlt_development.transfer(_amount); }
	}

	function taxManualSwapSend(bool swapTokens, bool sendEth) external onlyOwner {
		if (swapTokens) {
			uint256 taxTokenBalance = balanceOf(address(this));
			require(taxTokenBalance > 0, "No tokens");
			_swapTaxTokensForEth(taxTokenBalance);
		}
		
		if (sendEth) {
			_distributeTaxEth(address(this).balance); 
		}
	}

	function burnTokens(uint256 amount) external {
		uint256 _tokensAvailable = balanceOf(msg.sender);
		require(amount <= _tokensAvailable, "Token balance too low");
		_burnTokens(amount, msg.sender);
	}
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"maxTransaction","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"maxWalletSize","type":"uint256"}],"name":"LimitsIncreased","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"owner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint16","name":"autoLP","type":"uint16"},{"indexed":false,"internalType":"uint16","name":"burn","type":"uint16"},{"indexed":false,"internalType":"uint16","name":"development","type":"uint16"}],"name":"TaxDistributionChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint8","name":"taxRateBuy","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"taxRateSell","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"taxRateTransfer","type":"uint8"}],"name":"TaxRatesChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"taxSwapMin","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"taxSwapMax","type":"uint256"}],"name":"TaxSwapSettingsChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"development","type":"address"}],"name":"TaxWalletChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"burnedFrom","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"TokensBurned","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"wallet","type":"address"},{"indexed":false,"internalType":"bool","name":"noFees","type":"bool"},{"indexed":false,"internalType":"bool","name":"noLimits","type":"bool"}],"name":"WalletExemptionsSet","type":"event"},{"inputs":[],"name":"addLP","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burnTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"getBlacklistStatus","outputs":[{"internalType":"bool","name":"isBlacklisted","type":"bool"},{"internalType":"uint256","name":"blacklistBlock","type":"uint256"},{"internalType":"uint16","name":"totalBlacklistedWallets","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"getExemptions","outputs":[{"internalType":"bool","name":"noFees","type":"bool"},{"internalType":"bool","name":"noLimits","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getFeeSettings","outputs":[{"internalType":"uint8","name":"taxRateMaxLimit","type":"uint8"},{"internalType":"uint8","name":"taxRateBuy","type":"uint8"},{"internalType":"uint8","name":"taxRateSell","type":"uint8"},{"internalType":"uint8","name":"taxRateTransfer","type":"uint8"},{"internalType":"uint16","name":"sharesAutoLP","type":"uint16"},{"internalType":"uint16","name":"sharesBurn","type":"uint16"},{"internalType":"uint16","name":"sharesDevelopment","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLimits","outputs":[{"internalType":"uint256","name":"maxTxAmount","type":"uint256"},{"internalType":"uint256","name":"maxWalletAmount","type":"uint256"},{"internalType":"uint256","name":"taxSwapMin","type":"uint256"},{"internalType":"uint256","name":"taxSwapMax","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getWallets","outputs":[{"internalType":"address","name":"contractOwner","type":"address"},{"internalType":"address","name":"liquidityPool","type":"address"},{"internalType":"address","name":"development","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"maxTxAmtPermile","type":"uint16"},{"internalType":"uint16","name":"maxWalletAmtPermile","type":"uint16"}],"name":"increaseLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"},{"internalType":"bool","name":"noFees","type":"bool"},{"internalType":"bool","name":"noLimits","type":"bool"}],"name":"setExemptions","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"sharesAutoLP","type":"uint16"},{"internalType":"uint16","name":"sharesBurn","type":"uint16"},{"internalType":"uint16","name":"sharesDevelopment","type":"uint16"}],"name":"setTaxDistribution","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"newBuyTax","type":"uint8"},{"internalType":"uint8","name":"newSellTax","type":"uint8"},{"internalType":"uint8","name":"newTxTax","type":"uint8"}],"name":"setTaxRates","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"minValue","type":"uint32"},{"internalType":"uint32","name":"minDivider","type":"uint32"},{"internalType":"uint32","name":"maxValue","type":"uint32"},{"internalType":"uint32","name":"maxDivider","type":"uint32"}],"name":"setTaxSwapLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newDevelopmentWallet","type":"address"}],"name":"setTaxWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"bool","name":"swapTokens","type":"bool"},{"internalType":"bool","name":"sendEth","type":"bool"}],"name":"taxManualSwapSend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"tradingOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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 payable","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526000600560006101000a81548161ffff021916908361ffff1602179055506000600e556000601160006101000a81548160ff02191690831515021790555073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2601160016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550348015620000a457600080fd5b5033806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6003819055506008600560026101000a81548160ff021916908360ff1602179055506009600a6200013a919062000962565b620f42406200014a9190620009b3565b6006819055506009600a62000160919062000962565b620f4240620001709190620009b3565b60078190555061271060016009600a6200018b919062000962565b620f42406200019b9190620009b3565b620001a79190620009b3565b620001b3919062000a43565b60088190555061271060326009600a620001ce919062000962565b620f4240620001de9190620009b3565b620001ea9190620009b3565b620001f6919062000a43565b600981905550610190600560066101000a81548161ffff021916908361ffff160217905550610258600560086101000a81548161ffff021916908361ffff16021790555061012c6005600a6101000a81548161ffff021916908361ffff1602179055506005600a9054906101000a900461ffff16600560089054906101000a900461ffff16600560069054906101000a900461ffff1662000298919062000a89565b620002a4919062000a89565b6005600c6101000a81548161ffff021916908361ffff160217905550737a250d5630b4cf539739df2c5dacb4c659f2488d601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550733446b47ae8c571a25b79f7195ab331dd99b84664600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600c60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600c60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600c6000737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600c6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600d60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600d60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600d6000737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600d6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506009600a620006e8919062000962565b620f4240620006f89190620009b3565b600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6009600a6200079b919062000962565b620f4240620007ab9190620009b3565b604051620007ba919062000ad9565b60405180910390a362000af6565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111562000856578086048111156200082e576200082d620007c8565b5b60018516156200083e5780820291505b80810290506200084e85620007f7565b94506200080e565b94509492505050565b60008262000871576001905062000944565b8162000881576000905062000944565b81600181146200089a5760028114620008a557620008db565b600191505062000944565b60ff841115620008ba57620008b9620007c8565b5b8360020a915084821115620008d457620008d3620007c8565b5b5062000944565b5060208310610133831016604e8410600b8410161715620009155782820a9050838111156200090f576200090e620007c8565b5b62000944565b62000924848484600162000804565b925090508184048111156200093e576200093d620007c8565b5b81810290505b9392505050565b6000819050919050565b600060ff82169050919050565b60006200096f826200094b565b91506200097c8362000955565b9250620009ab7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846200085f565b905092915050565b6000620009c0826200094b565b9150620009cd836200094b565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000a095762000a08620007c8565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000a50826200094b565b915062000a5d836200094b565b92508262000a705762000a6f62000a14565b5b828204905092915050565b600061ffff82169050919050565b600062000a968262000a7b565b915062000aa38362000a7b565b92508261ffff0382111562000abd5762000abc620007c8565b5b828201905092915050565b62000ad3816200094b565b82525050565b600060208201905062000af0600083018462000ac8565b92915050565b614cf98062000b066000396000f3fe60806040526004361061016a5760003560e01c80638c194bd9116100d1578063d01dc84b1161008a578063de1a356c11610064578063de1a356c14610569578063e4dbc45b14610592578063f2fde38b146105bb578063ffb54a99146105e457610171565b8063d01dc84b146104d6578063db7a4605146104ff578063dd62ed3e1461052c57610171565b80638c194bd9146103c7578063931b68ea146103f057806395d89b411461042e578063a9059cbb14610459578063b142180314610496578063bc37e1a3146104bf57610171565b80632b38400e116101235780632b38400e14610298578063313ce567146102c957806358d2b4a5146102f45780636d1b229d146103335780636f89e4091461035c57806370a082311461038a57610171565b806306fdde0314610176578063095ea7b3146101a157806309ef509f146101de57806318160ddd1461020757806318839bc31461023257806323b872dd1461025b57610171565b3661017157005b600080fd5b34801561018257600080fd5b5061018b61060f565b6040516101989190613712565b60405180910390f35b3480156101ad57600080fd5b506101c860048036038101906101c391906137cd565b61064c565b6040516101d59190613828565b60405180910390f35b3480156101ea57600080fd5b506102056004803603810190610200919061387c565b6107ab565b005b34801561021357600080fd5b5061021c610990565b60405161022991906138de565b60405180910390f35b34801561023e57600080fd5b5061025960048036038101906102549190613925565b6109b3565b005b34801561026757600080fd5b50610282600480360381019061027d9190613978565b610b2f565b60405161028f9190613828565b60405180910390f35b3480156102a457600080fd5b506102ad610d38565b6040516102c097969594939291906139f7565b60405180910390f35b3480156102d557600080fd5b506102de610dcb565b6040516102eb9190613a66565b60405180910390f35b34801561030057600080fd5b5061031b60048036038101906103169190613a81565b610dd4565b60405161032a93929190613aae565b60405180910390f35b34801561033f57600080fd5b5061035a60048036038101906103559190613ae5565b610e86565b005b34801561036857600080fd5b50610371610ee4565b6040516103819493929190613b12565b60405180910390f35b34801561039657600080fd5b506103b160048036038101906103ac9190613a81565b610f04565b6040516103be91906138de565b60405180910390f35b3480156103d357600080fd5b506103ee60048036038101906103e99190613b57565b610f4d565b005b3480156103fc57600080fd5b5061041760048036038101906104129190613a81565b611050565b604051610425929190613b97565b60405180910390f35b34801561043a57600080fd5b506104436110f6565b6040516104509190613712565b60405180910390f35b34801561046557600080fd5b50610480600480360381019061047b91906137cd565b611133565b60405161048d9190613828565b60405180910390f35b3480156104a257600080fd5b506104bd60048036038101906104b89190613bec565b61118f565b005b3480156104cb57600080fd5b506104d4611388565b005b3480156104e257600080fd5b506104fd60048036038101906104f89190613a81565b611a31565b005b34801561050b57600080fd5b50610514611be9565b60405161052393929190613c3b565b60405180910390f35b34801561053857600080fd5b50610553600480360381019061054e9190613c72565b611c61565b60405161056091906138de565b60405180910390f35b34801561057557600080fd5b50610590600480360381019061058b9190613cb2565b611ce8565b005b34801561059e57600080fd5b506105b960048036038101906105b49190613d41565b611e70565b005b3480156105c757600080fd5b506105e260048036038101906105dd9190613de6565b611fd9565b005b3480156105f057600080fd5b506105f96120e1565b6040516106069190613828565b60405180910390f35b60606040518060400160405280600981526020017f4869726f7368696d610000000000000000000000000000000000000000000000815250905090565b600043600e541180156106a95750600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156106bb576106ba33436001612121565b5b81600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161079991906138de565b60405180910390a36001905092915050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610839576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083090613e85565b60405180910390fd5b600560029054906101000a900460ff1660026108559190613ed4565b60ff1682846108649190613f0f565b60ff1611156108a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161089f90613f92565b60405180910390fd5b600560029054906101000a900460ff1660ff168160ff161115610900576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108f790613ffe565b60405180910390fd5b82600560036101000a81548160ff021916908360ff16021790555081600560046101000a81548160ff021916908360ff160217905550806005806101000a81548160ff021916908360ff1602179055507f3936da96a2d6c0884221e809bd19e72c2f0ac9e9d7e63d75e371a66e8f71144a8383836040516109839392919061401e565b60405180910390a1505050565b60006009600a6109a09190614188565b620f42406109ae91906141d3565b905090565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610a41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3890613e85565b60405180910390fd5b81600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507fd1210f82d8da3a4173d7d74f8a9f5c81b8f83b77529ac2684baff199241f4ed0838383604051610b229392919061422d565b60405180910390a1505050565b6000610b3961224b565b610b78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b6f906142b0565b60405180910390fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610d245781600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610ca391906142d0565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b610d2f8484846122c8565b90509392505050565b6000806000806000806000600560029054906101000a900460ff16600560039054906101000a900460ff16600560049054906101000a900460ff1660058054906101000a900460ff16600560069054906101000a900461ffff16600560089054906101000a900461ffff166005600a9054906101000a900461ffff16965096509650965096509650965090919293949596565b60006009905090565b6000806000806000601060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610e2657600190505b80601060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600560009054906101000a900461ffff16935093509350509193909250565b6000610e9133610f04565b905080821115610ed6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ecd90614350565b60405180910390fd5b610ee08233612960565b5050565b600080600080600654600754600854600954935093509350935090919293565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610fdb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd290613e85565b60405180910390fd5b811561103c576000610fec30610f04565b905060008111611031576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611028906143bc565b60405180910390fd5b61103a81612ab9565b505b801561104c5761104b47612c6a565b5b5050565b600080600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1691509150915091565b60606040518060400160405280600481526020017f4849524f00000000000000000000000000000000000000000000000000000000815250905090565b600061113d61224b565b61117c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611173906142b0565b60405180910390fd5b6111873384846122c8565b905092915050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461121d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121490613e85565b60405180910390fd5b600060016103e88461ffff166009600a6112379190614188565b620f424061124591906141d3565b61124f91906141d3565b611259919061440b565b611263919061443c565b90506006548110156112aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a1906144de565b60405180910390fd5b80600681905550600060016103e88461ffff166009600a6112cb9190614188565b620f42406112d991906141d3565b6112e391906141d3565b6112ed919061440b565b6112f7919061443c565b905060075481101561133e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113359061454a565b60405180910390fd5b806007819055507f72c1c0546833bfc2a43408333cd18ef1d9c882e9d46f89002a3fd40bceffe5f760065460075460405161137a92919061456a565b60405180910390a150505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611416576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140d90613e85565b60405180910390fd5b61141e612cf4565b1561145e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611455906145df565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e69061464b565b60405180910390fd5b6001600f60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600f60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600f6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116a7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116cb9190614680565b601160016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611778573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061179c9190614680565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630601160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b81526004016117f89291906146ad565b6020604051808303816000875af1158015611817573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061183b9190614680565b600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160046000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600f6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600047905060008110156119b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119af90614722565b60405180910390fd5b60006119c330610f04565b905060008111611a08576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ff9061478e565b60405180910390fd5b611a1181612d10565b611a1d81836000612efa565b6000600e9050611a2c81612fd8565b505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611abf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ab690613e85565b60405180910390fd5b80600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507ea263b61aab5ebdcff20c4c0c74c2589ea5ab52149abde19eca17ad5221789981604051611bde91906147ae565b60405180910390a150565b60008060008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16925092509250909192565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611d76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6d90613e85565b60405180910390fd5b82600560066101000a81548161ffff021916908361ffff16021790555081600560086101000a81548161ffff021916908361ffff160217905550806005600a6101000a81548161ffff021916908361ffff1602179055506005600a9054906101000a900461ffff16600560089054906101000a900461ffff16600560069054906101000a900461ffff16611e0a91906147c9565b611e1491906147c9565b6005600c6101000a81548161ffff021916908361ffff1602179055507f09d1c6e0dc7290333e3eb301ba9b06f7ec15ce885a8a1efc702befd956c1bd93838383604051611e6393929190614801565b60405180910390a1505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611efe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ef590613e85565b60405180910390fd5b8263ffffffff168463ffffffff166009600a611f1a9190614188565b620f4240611f2891906141d3565b611f3291906141d3565b611f3c919061440b565b6008819055508063ffffffff168263ffffffff166009600a611f5e9190614188565b620f4240611f6c91906141d3565b611f7691906141d3565b611f80919061440b565b60098190555060085460095411611f9657600080fd5b7f325d25781eb858cfe3b3ede984fc8a66dd8e8be0b4a349189e05d0a35e6803bb600854600954604051611fcb92919061456a565b60405180910390a150505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612067576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205e90613e85565b60405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc686163816040516120d69190614897565b60405180910390a150565b60006120eb612cf4565b80156121055750600a600e54612101919061443c565b4310155b1561211957612112612cf4565b905061211e565b600090505b90565b600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156121ba57506000601060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054145b156122465781601060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508015612245576005600081819054906101000a900461ffff1680929190612229906148b2565b91906101000a81548161ffff021916908361ffff160217905550505b5b505050565b6000806000905061225a612cf4565b1561226857600190506122c1565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16036122c057600190505b5b8091505090565b60008073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141580156123335750600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b612372576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236990614928565b60405180910390fd5b43600e541115612425576000601060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054036123d4576123cf83436001612121565b612420565b61241f83601060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546000612121565b5b6124b9565b6000601060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054146124b8576124b783601060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546000612121565b5b5b6124c1612cf4565b801561250d57506000601060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414155b8015612557575043601060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054105b15612597576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161258e90614994565b60405180910390fd5b601160009054906101000a900460ff161580156125fd5750600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561260b5761260a6130fa565b5b3073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415801561267357503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b80156126cb575060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b1561271b576126db8484846132ea565b61271a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161271190614a00565b60405180910390fd5b5b6000612728858585613479565b90506000818461273891906142d0565b905083600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461278591906142d0565b600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060008211156128605781600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461281c919061443c565b600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b80600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128ab919061443c565b600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8660405161294b91906138de565b60405180910390a36001925050509392505050565b6000821115612ab55781600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546129b891906142d0565b9250508190555081600160008073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612a0e919061443c565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612a7391906138de565b60405180910390a37ffd38818f5291bf0bb3a2a48aadc06ba8757865d1dabd804585338aab3009dcb68183604051612aac929190614a20565b60405180910390a15b5050565b612ac281612d10565b6000600267ffffffffffffffff811115612adf57612ade614a49565b5b604051908082528060200260200182016040528015612b0d5781602001602082028036833780820191505090505b5090503081600081518110612b2557612b24614a78565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600181518110612b9657612b95614a78565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612c34959493929190614ba0565b600060405180830381600087803b158015612c4e57600080fd5b505af1158015612c62573d6000803e3d6000fd5b505050505050565b60006005600a9054906101000a900461ffff1661ffff161115612cf157600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015612cef573d6000803e3d6000fd5b505b50565b600080600090506003544310612d0957600190505b8091505090565b80600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015612ef7577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9257fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff604051612eee91906138de565b60405180910390a35b50565b600081612f255760008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71984308760008087426040518863ffffffff1660e01b8152600401612f8c96959493929190614bfa565b60606040518083038185885af1158015612faa573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612fcf9190614c70565b50505050505050565b6009600a612fe69190614188565b6127106009600a612ff79190614188565b620f424061300591906141d3565b606461301191906141d3565b61301b919061440b565b613025919061443c565b6006819055506009600a6130399190614188565b6127106009600a61304a9190614188565b620f424061305891906141d3565b606461306491906141d3565b61306e919061440b565b613078919061443c565b60078190555060058060036101000a81548160ff021916908360ff1602179055506008600560046101000a81548160ff021916908360ff16021790555060006005806101000a81548160ff021916908360ff16021790555080436130dc919061443c565b60038190555060096003546130f1919061443c565b600e8190555050565b6001601160006101000a81548160ff021916908315150217905550600061312030610f04565b905060085481101580156131385750613137612cf4565b5b156132cc57600954811061314c5760095490505b600060026005600c9054906101000a900461ffff1661ffff16600560069054906101000a900461ffff1661ffff168461318591906141d3565b61318f919061440b565b613199919061440b565b905060006005600c9054906101000a900461ffff1661ffff16600560089054906101000a900461ffff1661ffff16846131d291906141d3565b6131dc919061440b565b90506131e88130612960565b60008282856131f791906142d0565b61320191906142d0565b90506009600a6132119190614188565b81106132af57600047905061322582612ab9565b6000814761323391906142d0565b90506000600560069054906101000a900461ffff1661ffff1611156132ac5760006005600c9054906101000a900461ffff1661ffff16600560069054906101000a900461ffff1661ffff168361328991906141d3565b613293919061440b565b905061329e86612d10565b6132aa86826000612efa565b505b50505b600047905060008111156132c7576132c681612c6a565b5b505050505b506000601160006101000a81548160ff021916908315150217905550565b600080600190506132f9612cf4565b801561334f5750600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156133a55750600d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561346e576006548311156133bd576000905061346d565b600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015613462575060075483600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613460919061443c565b115b1561346c57600090505b5b5b809150509392505050565b600080613484612cf4565b15806134d95750600c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b8061352d5750600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561353b576000905061366e565b600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156135be576064600560039054906101000a900460ff1660ff16846135ad91906141d3565b6135b7919061440b565b905061366d565b600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613641576064600560049054906101000a900460ff1660ff168461363091906141d3565b61363a919061440b565b905061366c565b606460058054906101000a900460ff1660ff168461365f91906141d3565b613669919061440b565b90505b5b5b809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156136b3578082015181840152602081019050613698565b838111156136c2576000848401525b50505050565b6000601f19601f8301169050919050565b60006136e482613679565b6136ee8185613684565b93506136fe818560208601613695565b613707816136c8565b840191505092915050565b6000602082019050818103600083015261372c81846136d9565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061376482613739565b9050919050565b61377481613759565b811461377f57600080fd5b50565b6000813590506137918161376b565b92915050565b6000819050919050565b6137aa81613797565b81146137b557600080fd5b50565b6000813590506137c7816137a1565b92915050565b600080604083850312156137e4576137e3613734565b5b60006137f285828601613782565b9250506020613803858286016137b8565b9150509250929050565b60008115159050919050565b6138228161380d565b82525050565b600060208201905061383d6000830184613819565b92915050565b600060ff82169050919050565b61385981613843565b811461386457600080fd5b50565b60008135905061387681613850565b92915050565b60008060006060848603121561389557613894613734565b5b60006138a386828701613867565b93505060206138b486828701613867565b92505060406138c586828701613867565b9150509250925092565b6138d881613797565b82525050565b60006020820190506138f360008301846138cf565b92915050565b6139028161380d565b811461390d57600080fd5b50565b60008135905061391f816138f9565b92915050565b60008060006060848603121561393e5761393d613734565b5b600061394c86828701613782565b935050602061395d86828701613910565b925050604061396e86828701613910565b9150509250925092565b60008060006060848603121561399157613990613734565b5b600061399f86828701613782565b93505060206139b086828701613782565b92505060406139c1868287016137b8565b9150509250925092565b6139d481613843565b82525050565b600061ffff82169050919050565b6139f1816139da565b82525050565b600060e082019050613a0c600083018a6139cb565b613a1960208301896139cb565b613a2660408301886139cb565b613a3360608301876139cb565b613a4060808301866139e8565b613a4d60a08301856139e8565b613a5a60c08301846139e8565b98975050505050505050565b6000602082019050613a7b60008301846139cb565b92915050565b600060208284031215613a9757613a96613734565b5b6000613aa584828501613782565b91505092915050565b6000606082019050613ac36000830186613819565b613ad060208301856138cf565b613add60408301846139e8565b949350505050565b600060208284031215613afb57613afa613734565b5b6000613b09848285016137b8565b91505092915050565b6000608082019050613b2760008301876138cf565b613b3460208301866138cf565b613b4160408301856138cf565b613b4e60608301846138cf565b95945050505050565b60008060408385031215613b6e57613b6d613734565b5b6000613b7c85828601613910565b9250506020613b8d85828601613910565b9150509250929050565b6000604082019050613bac6000830185613819565b613bb96020830184613819565b9392505050565b613bc9816139da565b8114613bd457600080fd5b50565b600081359050613be681613bc0565b92915050565b60008060408385031215613c0357613c02613734565b5b6000613c1185828601613bd7565b9250506020613c2285828601613bd7565b9150509250929050565b613c3581613759565b82525050565b6000606082019050613c506000830186613c2c565b613c5d6020830185613c2c565b613c6a6040830184613c2c565b949350505050565b60008060408385031215613c8957613c88613734565b5b6000613c9785828601613782565b9250506020613ca885828601613782565b9150509250929050565b600080600060608486031215613ccb57613cca613734565b5b6000613cd986828701613bd7565b9350506020613cea86828701613bd7565b9250506040613cfb86828701613bd7565b9150509250925092565b600063ffffffff82169050919050565b613d1e81613d05565b8114613d2957600080fd5b50565b600081359050613d3b81613d15565b92915050565b60008060008060808587031215613d5b57613d5a613734565b5b6000613d6987828801613d2c565b9450506020613d7a87828801613d2c565b9350506040613d8b87828801613d2c565b9250506060613d9c87828801613d2c565b91505092959194509250565b6000613db382613739565b9050919050565b613dc381613da8565b8114613dce57600080fd5b50565b600081359050613de081613dba565b92915050565b600060208284031215613dfc57613dfb613734565b5b6000613e0a84828501613dd1565b91505092915050565b7f4f6e6c7920636f6e7472616374206f776e65722063616e2063616c6c2074686960008201527f732066756e6374696f6e00000000000000000000000000000000000000000000602082015250565b6000613e6f602a83613684565b9150613e7a82613e13565b604082019050919050565b60006020820190508181036000830152613e9e81613e62565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613edf82613843565b9150613eea83613843565b92508160ff0483118215151615613f0457613f03613ea5565b5b828202905092915050565b6000613f1a82613843565b9150613f2583613843565b92508260ff03821115613f3b57613f3a613ea5565b5b828201905092915050565b7f4176672074617820746f6f206869676800000000000000000000000000000000600082015250565b6000613f7c601083613684565b9150613f8782613f46565b602082019050919050565b60006020820190508181036000830152613fab81613f6f565b9050919050565b7f54617820746f6f20686967680000000000000000000000000000000000000000600082015250565b6000613fe8600c83613684565b9150613ff382613fb2565b602082019050919050565b6000602082019050818103600083015261401781613fdb565b9050919050565b600060608201905061403360008301866139cb565b61404060208301856139cb565b61404d60408301846139cb565b949350505050565b60008160011c9050919050565b6000808291508390505b60018511156140ac5780860481111561408857614087613ea5565b5b60018516156140975780820291505b80810290506140a585614055565b945061406c565b94509492505050565b6000826140c55760019050614181565b816140d35760009050614181565b81600181146140e957600281146140f357614122565b6001915050614181565b60ff84111561410557614104613ea5565b5b8360020a91508482111561411c5761411b613ea5565b5b50614181565b5060208310610133831016604e8410600b84101617156141575782820a90508381111561415257614151613ea5565b5b614181565b6141648484846001614062565b9250905081840481111561417b5761417a613ea5565b5b81810290505b9392505050565b600061419382613797565b915061419e83613843565b92506141cb7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846140b5565b905092915050565b60006141de82613797565b91506141e983613797565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561422257614221613ea5565b5b828202905092915050565b60006060820190506142426000830186613c2c565b61424f6020830185613819565b61425c6040830184613819565b949350505050565b7f54726164696e67206e6f74206f70656e00000000000000000000000000000000600082015250565b600061429a601083613684565b91506142a582614264565b602082019050919050565b600060208201905081810360008301526142c98161428d565b9050919050565b60006142db82613797565b91506142e683613797565b9250828210156142f9576142f8613ea5565b5b828203905092915050565b7f546f6b656e2062616c616e636520746f6f206c6f770000000000000000000000600082015250565b600061433a601583613684565b915061434582614304565b602082019050919050565b600060208201905081810360008301526143698161432d565b9050919050565b7f4e6f20746f6b656e730000000000000000000000000000000000000000000000600082015250565b60006143a6600983613684565b91506143b182614370565b602082019050919050565b600060208201905081810360008301526143d581614399565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061441682613797565b915061442183613797565b925082614431576144306143dc565b5b828204905092915050565b600061444782613797565b915061445283613797565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561448757614486613ea5565b5b828201905092915050565b7f7478206c696d697420746f6f206c6f7700000000000000000000000000000000600082015250565b60006144c8601083613684565b91506144d382614492565b602082019050919050565b600060208201905081810360008301526144f7816144bb565b9050919050565b7f77616c6c6574206c696d697420746f6f206c6f77000000000000000000000000600082015250565b6000614534601483613684565b915061453f826144fe565b602082019050919050565b6000602082019050818103600083015261456381614527565b9050919050565b600060408201905061457f60008301856138cf565b61458c60208301846138cf565b9392505050565b7f74726164696e6720616c7265616479206f70656e000000000000000000000000600082015250565b60006145c9601483613684565b91506145d482614593565b602082019050919050565b600060208201905081810360008301526145f8816145bc565b9050919050565b7f4c5020616c726561647920616464656400000000000000000000000000000000600082015250565b6000614635601083613684565b9150614640826145ff565b602082019050919050565b6000602082019050818103600083015261466481614628565b9050919050565b60008151905061467a8161376b565b92915050565b60006020828403121561469657614695613734565b5b60006146a48482850161466b565b91505092915050565b60006040820190506146c26000830185613c2c565b6146cf6020830184613c2c565b9392505050565b7f6e6f206574680000000000000000000000000000000000000000000000000000600082015250565b600061470c600683613684565b9150614717826146d6565b602082019050919050565b6000602082019050818103600083015261473b816146ff565b9050919050565b7f6e6f20746f6b656e730000000000000000000000000000000000000000000000600082015250565b6000614778600983613684565b915061478382614742565b602082019050919050565b600060208201905081810360008301526147a78161476b565b9050919050565b60006020820190506147c36000830184613c2c565b92915050565b60006147d4826139da565b91506147df836139da565b92508261ffff038211156147f6576147f5613ea5565b5b828201905092915050565b600060608201905061481660008301866139e8565b61482360208301856139e8565b61483060408301846139e8565b949350505050565b6000819050919050565b600061485d61485861485384613739565b614838565b613739565b9050919050565b600061486f82614842565b9050919050565b600061488182614864565b9050919050565b61489181614876565b82525050565b60006020820190506148ac6000830184614888565b92915050565b60006148bd826139da565b915061ffff82036148d1576148d0613ea5565b5b600182019050919050565b7f5a65726f2061646472657373206e6f7420616c6c6f7765640000000000000000600082015250565b6000614912601883613684565b915061491d826148dc565b602082019050919050565b6000602082019050818103600083015261494181614905565b9050919050565b7f626c61636b6c6973746564000000000000000000000000000000000000000000600082015250565b600061497e600b83613684565b915061498982614948565b602082019050919050565b600060208201905081810360008301526149ad81614971565b9050919050565b7f54582065786365656473206c696d697473000000000000000000000000000000600082015250565b60006149ea601183613684565b91506149f5826149b4565b602082019050919050565b60006020820190508181036000830152614a19816149dd565b9050919050565b6000604082019050614a356000830185613c2c565b614a4260208301846138cf565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b6000614acc614ac7614ac284614aa7565b614838565b613797565b9050919050565b614adc81614ab1565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614b1781613759565b82525050565b6000614b298383614b0e565b60208301905092915050565b6000602082019050919050565b6000614b4d82614ae2565b614b578185614aed565b9350614b6283614afe565b8060005b83811015614b93578151614b7a8882614b1d565b9750614b8583614b35565b925050600181019050614b66565b5085935050505092915050565b600060a082019050614bb560008301886138cf565b614bc26020830187614ad3565b8181036040830152614bd48186614b42565b9050614be36060830185613c2c565b614bf060808301846138cf565b9695505050505050565b600060c082019050614c0f6000830189613c2c565b614c1c60208301886138cf565b614c296040830187614ad3565b614c366060830186614ad3565b614c436080830185613c2c565b614c5060a08301846138cf565b979650505050505050565b600081519050614c6a816137a1565b92915050565b600080600060608486031215614c8957614c88613734565b5b6000614c9786828701614c5b565b9350506020614ca886828701614c5b565b9250506040614cb986828701614c5b565b915050925092509256fea26469706673582212208521e2c1769f102104eec3e91ef8ac1607c5b8a0e16e9eced70efe24f2272dea64736f6c634300080f0033

Deployed Bytecode

0x60806040526004361061016a5760003560e01c80638c194bd9116100d1578063d01dc84b1161008a578063de1a356c11610064578063de1a356c14610569578063e4dbc45b14610592578063f2fde38b146105bb578063ffb54a99146105e457610171565b8063d01dc84b146104d6578063db7a4605146104ff578063dd62ed3e1461052c57610171565b80638c194bd9146103c7578063931b68ea146103f057806395d89b411461042e578063a9059cbb14610459578063b142180314610496578063bc37e1a3146104bf57610171565b80632b38400e116101235780632b38400e14610298578063313ce567146102c957806358d2b4a5146102f45780636d1b229d146103335780636f89e4091461035c57806370a082311461038a57610171565b806306fdde0314610176578063095ea7b3146101a157806309ef509f146101de57806318160ddd1461020757806318839bc31461023257806323b872dd1461025b57610171565b3661017157005b600080fd5b34801561018257600080fd5b5061018b61060f565b6040516101989190613712565b60405180910390f35b3480156101ad57600080fd5b506101c860048036038101906101c391906137cd565b61064c565b6040516101d59190613828565b60405180910390f35b3480156101ea57600080fd5b506102056004803603810190610200919061387c565b6107ab565b005b34801561021357600080fd5b5061021c610990565b60405161022991906138de565b60405180910390f35b34801561023e57600080fd5b5061025960048036038101906102549190613925565b6109b3565b005b34801561026757600080fd5b50610282600480360381019061027d9190613978565b610b2f565b60405161028f9190613828565b60405180910390f35b3480156102a457600080fd5b506102ad610d38565b6040516102c097969594939291906139f7565b60405180910390f35b3480156102d557600080fd5b506102de610dcb565b6040516102eb9190613a66565b60405180910390f35b34801561030057600080fd5b5061031b60048036038101906103169190613a81565b610dd4565b60405161032a93929190613aae565b60405180910390f35b34801561033f57600080fd5b5061035a60048036038101906103559190613ae5565b610e86565b005b34801561036857600080fd5b50610371610ee4565b6040516103819493929190613b12565b60405180910390f35b34801561039657600080fd5b506103b160048036038101906103ac9190613a81565b610f04565b6040516103be91906138de565b60405180910390f35b3480156103d357600080fd5b506103ee60048036038101906103e99190613b57565b610f4d565b005b3480156103fc57600080fd5b5061041760048036038101906104129190613a81565b611050565b604051610425929190613b97565b60405180910390f35b34801561043a57600080fd5b506104436110f6565b6040516104509190613712565b60405180910390f35b34801561046557600080fd5b50610480600480360381019061047b91906137cd565b611133565b60405161048d9190613828565b60405180910390f35b3480156104a257600080fd5b506104bd60048036038101906104b89190613bec565b61118f565b005b3480156104cb57600080fd5b506104d4611388565b005b3480156104e257600080fd5b506104fd60048036038101906104f89190613a81565b611a31565b005b34801561050b57600080fd5b50610514611be9565b60405161052393929190613c3b565b60405180910390f35b34801561053857600080fd5b50610553600480360381019061054e9190613c72565b611c61565b60405161056091906138de565b60405180910390f35b34801561057557600080fd5b50610590600480360381019061058b9190613cb2565b611ce8565b005b34801561059e57600080fd5b506105b960048036038101906105b49190613d41565b611e70565b005b3480156105c757600080fd5b506105e260048036038101906105dd9190613de6565b611fd9565b005b3480156105f057600080fd5b506105f96120e1565b6040516106069190613828565b60405180910390f35b60606040518060400160405280600981526020017f4869726f7368696d610000000000000000000000000000000000000000000000815250905090565b600043600e541180156106a95750600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156106bb576106ba33436001612121565b5b81600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161079991906138de565b60405180910390a36001905092915050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610839576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083090613e85565b60405180910390fd5b600560029054906101000a900460ff1660026108559190613ed4565b60ff1682846108649190613f0f565b60ff1611156108a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161089f90613f92565b60405180910390fd5b600560029054906101000a900460ff1660ff168160ff161115610900576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108f790613ffe565b60405180910390fd5b82600560036101000a81548160ff021916908360ff16021790555081600560046101000a81548160ff021916908360ff160217905550806005806101000a81548160ff021916908360ff1602179055507f3936da96a2d6c0884221e809bd19e72c2f0ac9e9d7e63d75e371a66e8f71144a8383836040516109839392919061401e565b60405180910390a1505050565b60006009600a6109a09190614188565b620f42406109ae91906141d3565b905090565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610a41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3890613e85565b60405180910390fd5b81600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507fd1210f82d8da3a4173d7d74f8a9f5c81b8f83b77529ac2684baff199241f4ed0838383604051610b229392919061422d565b60405180910390a1505050565b6000610b3961224b565b610b78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b6f906142b0565b60405180910390fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610d245781600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610ca391906142d0565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b610d2f8484846122c8565b90509392505050565b6000806000806000806000600560029054906101000a900460ff16600560039054906101000a900460ff16600560049054906101000a900460ff1660058054906101000a900460ff16600560069054906101000a900461ffff16600560089054906101000a900461ffff166005600a9054906101000a900461ffff16965096509650965096509650965090919293949596565b60006009905090565b6000806000806000601060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610e2657600190505b80601060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600560009054906101000a900461ffff16935093509350509193909250565b6000610e9133610f04565b905080821115610ed6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ecd90614350565b60405180910390fd5b610ee08233612960565b5050565b600080600080600654600754600854600954935093509350935090919293565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610fdb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd290613e85565b60405180910390fd5b811561103c576000610fec30610f04565b905060008111611031576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611028906143bc565b60405180910390fd5b61103a81612ab9565b505b801561104c5761104b47612c6a565b5b5050565b600080600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1691509150915091565b60606040518060400160405280600481526020017f4849524f00000000000000000000000000000000000000000000000000000000815250905090565b600061113d61224b565b61117c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611173906142b0565b60405180910390fd5b6111873384846122c8565b905092915050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461121d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121490613e85565b60405180910390fd5b600060016103e88461ffff166009600a6112379190614188565b620f424061124591906141d3565b61124f91906141d3565b611259919061440b565b611263919061443c565b90506006548110156112aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a1906144de565b60405180910390fd5b80600681905550600060016103e88461ffff166009600a6112cb9190614188565b620f42406112d991906141d3565b6112e391906141d3565b6112ed919061440b565b6112f7919061443c565b905060075481101561133e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113359061454a565b60405180910390fd5b806007819055507f72c1c0546833bfc2a43408333cd18ef1d9c882e9d46f89002a3fd40bceffe5f760065460075460405161137a92919061456a565b60405180910390a150505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611416576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140d90613e85565b60405180910390fd5b61141e612cf4565b1561145e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611455906145df565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e69061464b565b60405180910390fd5b6001600f60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600f60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600f6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116a7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116cb9190614680565b601160016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611778573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061179c9190614680565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630601160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b81526004016117f89291906146ad565b6020604051808303816000875af1158015611817573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061183b9190614680565b600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160046000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600f6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600047905060008110156119b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119af90614722565b60405180910390fd5b60006119c330610f04565b905060008111611a08576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ff9061478e565b60405180910390fd5b611a1181612d10565b611a1d81836000612efa565b6000600e9050611a2c81612fd8565b505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611abf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ab690613e85565b60405180910390fd5b80600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507ea263b61aab5ebdcff20c4c0c74c2589ea5ab52149abde19eca17ad5221789981604051611bde91906147ae565b60405180910390a150565b60008060008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16925092509250909192565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611d76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6d90613e85565b60405180910390fd5b82600560066101000a81548161ffff021916908361ffff16021790555081600560086101000a81548161ffff021916908361ffff160217905550806005600a6101000a81548161ffff021916908361ffff1602179055506005600a9054906101000a900461ffff16600560089054906101000a900461ffff16600560069054906101000a900461ffff16611e0a91906147c9565b611e1491906147c9565b6005600c6101000a81548161ffff021916908361ffff1602179055507f09d1c6e0dc7290333e3eb301ba9b06f7ec15ce885a8a1efc702befd956c1bd93838383604051611e6393929190614801565b60405180910390a1505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611efe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ef590613e85565b60405180910390fd5b8263ffffffff168463ffffffff166009600a611f1a9190614188565b620f4240611f2891906141d3565b611f3291906141d3565b611f3c919061440b565b6008819055508063ffffffff168263ffffffff166009600a611f5e9190614188565b620f4240611f6c91906141d3565b611f7691906141d3565b611f80919061440b565b60098190555060085460095411611f9657600080fd5b7f325d25781eb858cfe3b3ede984fc8a66dd8e8be0b4a349189e05d0a35e6803bb600854600954604051611fcb92919061456a565b60405180910390a150505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612067576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205e90613e85565b60405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc686163816040516120d69190614897565b60405180910390a150565b60006120eb612cf4565b80156121055750600a600e54612101919061443c565b4310155b1561211957612112612cf4565b905061211e565b600090505b90565b600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156121ba57506000601060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054145b156122465781601060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508015612245576005600081819054906101000a900461ffff1680929190612229906148b2565b91906101000a81548161ffff021916908361ffff160217905550505b5b505050565b6000806000905061225a612cf4565b1561226857600190506122c1565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16036122c057600190505b5b8091505090565b60008073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141580156123335750600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b612372576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236990614928565b60405180910390fd5b43600e541115612425576000601060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054036123d4576123cf83436001612121565b612420565b61241f83601060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546000612121565b5b6124b9565b6000601060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054146124b8576124b783601060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546000612121565b5b5b6124c1612cf4565b801561250d57506000601060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414155b8015612557575043601060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054105b15612597576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161258e90614994565b60405180910390fd5b601160009054906101000a900460ff161580156125fd5750600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561260b5761260a6130fa565b5b3073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415801561267357503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b80156126cb575060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b1561271b576126db8484846132ea565b61271a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161271190614a00565b60405180910390fd5b5b6000612728858585613479565b90506000818461273891906142d0565b905083600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461278591906142d0565b600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060008211156128605781600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461281c919061443c565b600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b80600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128ab919061443c565b600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8660405161294b91906138de565b60405180910390a36001925050509392505050565b6000821115612ab55781600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546129b891906142d0565b9250508190555081600160008073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612a0e919061443c565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612a7391906138de565b60405180910390a37ffd38818f5291bf0bb3a2a48aadc06ba8757865d1dabd804585338aab3009dcb68183604051612aac929190614a20565b60405180910390a15b5050565b612ac281612d10565b6000600267ffffffffffffffff811115612adf57612ade614a49565b5b604051908082528060200260200182016040528015612b0d5781602001602082028036833780820191505090505b5090503081600081518110612b2557612b24614a78565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600181518110612b9657612b95614a78565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612c34959493929190614ba0565b600060405180830381600087803b158015612c4e57600080fd5b505af1158015612c62573d6000803e3d6000fd5b505050505050565b60006005600a9054906101000a900461ffff1661ffff161115612cf157600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015612cef573d6000803e3d6000fd5b505b50565b600080600090506003544310612d0957600190505b8091505090565b80600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015612ef7577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9257fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff604051612eee91906138de565b60405180910390a35b50565b600081612f255760008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71984308760008087426040518863ffffffff1660e01b8152600401612f8c96959493929190614bfa565b60606040518083038185885af1158015612faa573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612fcf9190614c70565b50505050505050565b6009600a612fe69190614188565b6127106009600a612ff79190614188565b620f424061300591906141d3565b606461301191906141d3565b61301b919061440b565b613025919061443c565b6006819055506009600a6130399190614188565b6127106009600a61304a9190614188565b620f424061305891906141d3565b606461306491906141d3565b61306e919061440b565b613078919061443c565b60078190555060058060036101000a81548160ff021916908360ff1602179055506008600560046101000a81548160ff021916908360ff16021790555060006005806101000a81548160ff021916908360ff16021790555080436130dc919061443c565b60038190555060096003546130f1919061443c565b600e8190555050565b6001601160006101000a81548160ff021916908315150217905550600061312030610f04565b905060085481101580156131385750613137612cf4565b5b156132cc57600954811061314c5760095490505b600060026005600c9054906101000a900461ffff1661ffff16600560069054906101000a900461ffff1661ffff168461318591906141d3565b61318f919061440b565b613199919061440b565b905060006005600c9054906101000a900461ffff1661ffff16600560089054906101000a900461ffff1661ffff16846131d291906141d3565b6131dc919061440b565b90506131e88130612960565b60008282856131f791906142d0565b61320191906142d0565b90506009600a6132119190614188565b81106132af57600047905061322582612ab9565b6000814761323391906142d0565b90506000600560069054906101000a900461ffff1661ffff1611156132ac5760006005600c9054906101000a900461ffff1661ffff16600560069054906101000a900461ffff1661ffff168361328991906141d3565b613293919061440b565b905061329e86612d10565b6132aa86826000612efa565b505b50505b600047905060008111156132c7576132c681612c6a565b5b505050505b506000601160006101000a81548160ff021916908315150217905550565b600080600190506132f9612cf4565b801561334f5750600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156133a55750600d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561346e576006548311156133bd576000905061346d565b600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015613462575060075483600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613460919061443c565b115b1561346c57600090505b5b5b809150509392505050565b600080613484612cf4565b15806134d95750600c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b8061352d5750600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561353b576000905061366e565b600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156135be576064600560039054906101000a900460ff1660ff16846135ad91906141d3565b6135b7919061440b565b905061366d565b600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613641576064600560049054906101000a900460ff1660ff168461363091906141d3565b61363a919061440b565b905061366c565b606460058054906101000a900460ff1660ff168461365f91906141d3565b613669919061440b565b90505b5b5b809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156136b3578082015181840152602081019050613698565b838111156136c2576000848401525b50505050565b6000601f19601f8301169050919050565b60006136e482613679565b6136ee8185613684565b93506136fe818560208601613695565b613707816136c8565b840191505092915050565b6000602082019050818103600083015261372c81846136d9565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061376482613739565b9050919050565b61377481613759565b811461377f57600080fd5b50565b6000813590506137918161376b565b92915050565b6000819050919050565b6137aa81613797565b81146137b557600080fd5b50565b6000813590506137c7816137a1565b92915050565b600080604083850312156137e4576137e3613734565b5b60006137f285828601613782565b9250506020613803858286016137b8565b9150509250929050565b60008115159050919050565b6138228161380d565b82525050565b600060208201905061383d6000830184613819565b92915050565b600060ff82169050919050565b61385981613843565b811461386457600080fd5b50565b60008135905061387681613850565b92915050565b60008060006060848603121561389557613894613734565b5b60006138a386828701613867565b93505060206138b486828701613867565b92505060406138c586828701613867565b9150509250925092565b6138d881613797565b82525050565b60006020820190506138f360008301846138cf565b92915050565b6139028161380d565b811461390d57600080fd5b50565b60008135905061391f816138f9565b92915050565b60008060006060848603121561393e5761393d613734565b5b600061394c86828701613782565b935050602061395d86828701613910565b925050604061396e86828701613910565b9150509250925092565b60008060006060848603121561399157613990613734565b5b600061399f86828701613782565b93505060206139b086828701613782565b92505060406139c1868287016137b8565b9150509250925092565b6139d481613843565b82525050565b600061ffff82169050919050565b6139f1816139da565b82525050565b600060e082019050613a0c600083018a6139cb565b613a1960208301896139cb565b613a2660408301886139cb565b613a3360608301876139cb565b613a4060808301866139e8565b613a4d60a08301856139e8565b613a5a60c08301846139e8565b98975050505050505050565b6000602082019050613a7b60008301846139cb565b92915050565b600060208284031215613a9757613a96613734565b5b6000613aa584828501613782565b91505092915050565b6000606082019050613ac36000830186613819565b613ad060208301856138cf565b613add60408301846139e8565b949350505050565b600060208284031215613afb57613afa613734565b5b6000613b09848285016137b8565b91505092915050565b6000608082019050613b2760008301876138cf565b613b3460208301866138cf565b613b4160408301856138cf565b613b4e60608301846138cf565b95945050505050565b60008060408385031215613b6e57613b6d613734565b5b6000613b7c85828601613910565b9250506020613b8d85828601613910565b9150509250929050565b6000604082019050613bac6000830185613819565b613bb96020830184613819565b9392505050565b613bc9816139da565b8114613bd457600080fd5b50565b600081359050613be681613bc0565b92915050565b60008060408385031215613c0357613c02613734565b5b6000613c1185828601613bd7565b9250506020613c2285828601613bd7565b9150509250929050565b613c3581613759565b82525050565b6000606082019050613c506000830186613c2c565b613c5d6020830185613c2c565b613c6a6040830184613c2c565b949350505050565b60008060408385031215613c8957613c88613734565b5b6000613c9785828601613782565b9250506020613ca885828601613782565b9150509250929050565b600080600060608486031215613ccb57613cca613734565b5b6000613cd986828701613bd7565b9350506020613cea86828701613bd7565b9250506040613cfb86828701613bd7565b9150509250925092565b600063ffffffff82169050919050565b613d1e81613d05565b8114613d2957600080fd5b50565b600081359050613d3b81613d15565b92915050565b60008060008060808587031215613d5b57613d5a613734565b5b6000613d6987828801613d2c565b9450506020613d7a87828801613d2c565b9350506040613d8b87828801613d2c565b9250506060613d9c87828801613d2c565b91505092959194509250565b6000613db382613739565b9050919050565b613dc381613da8565b8114613dce57600080fd5b50565b600081359050613de081613dba565b92915050565b600060208284031215613dfc57613dfb613734565b5b6000613e0a84828501613dd1565b91505092915050565b7f4f6e6c7920636f6e7472616374206f776e65722063616e2063616c6c2074686960008201527f732066756e6374696f6e00000000000000000000000000000000000000000000602082015250565b6000613e6f602a83613684565b9150613e7a82613e13565b604082019050919050565b60006020820190508181036000830152613e9e81613e62565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613edf82613843565b9150613eea83613843565b92508160ff0483118215151615613f0457613f03613ea5565b5b828202905092915050565b6000613f1a82613843565b9150613f2583613843565b92508260ff03821115613f3b57613f3a613ea5565b5b828201905092915050565b7f4176672074617820746f6f206869676800000000000000000000000000000000600082015250565b6000613f7c601083613684565b9150613f8782613f46565b602082019050919050565b60006020820190508181036000830152613fab81613f6f565b9050919050565b7f54617820746f6f20686967680000000000000000000000000000000000000000600082015250565b6000613fe8600c83613684565b9150613ff382613fb2565b602082019050919050565b6000602082019050818103600083015261401781613fdb565b9050919050565b600060608201905061403360008301866139cb565b61404060208301856139cb565b61404d60408301846139cb565b949350505050565b60008160011c9050919050565b6000808291508390505b60018511156140ac5780860481111561408857614087613ea5565b5b60018516156140975780820291505b80810290506140a585614055565b945061406c565b94509492505050565b6000826140c55760019050614181565b816140d35760009050614181565b81600181146140e957600281146140f357614122565b6001915050614181565b60ff84111561410557614104613ea5565b5b8360020a91508482111561411c5761411b613ea5565b5b50614181565b5060208310610133831016604e8410600b84101617156141575782820a90508381111561415257614151613ea5565b5b614181565b6141648484846001614062565b9250905081840481111561417b5761417a613ea5565b5b81810290505b9392505050565b600061419382613797565b915061419e83613843565b92506141cb7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846140b5565b905092915050565b60006141de82613797565b91506141e983613797565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561422257614221613ea5565b5b828202905092915050565b60006060820190506142426000830186613c2c565b61424f6020830185613819565b61425c6040830184613819565b949350505050565b7f54726164696e67206e6f74206f70656e00000000000000000000000000000000600082015250565b600061429a601083613684565b91506142a582614264565b602082019050919050565b600060208201905081810360008301526142c98161428d565b9050919050565b60006142db82613797565b91506142e683613797565b9250828210156142f9576142f8613ea5565b5b828203905092915050565b7f546f6b656e2062616c616e636520746f6f206c6f770000000000000000000000600082015250565b600061433a601583613684565b915061434582614304565b602082019050919050565b600060208201905081810360008301526143698161432d565b9050919050565b7f4e6f20746f6b656e730000000000000000000000000000000000000000000000600082015250565b60006143a6600983613684565b91506143b182614370565b602082019050919050565b600060208201905081810360008301526143d581614399565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061441682613797565b915061442183613797565b925082614431576144306143dc565b5b828204905092915050565b600061444782613797565b915061445283613797565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561448757614486613ea5565b5b828201905092915050565b7f7478206c696d697420746f6f206c6f7700000000000000000000000000000000600082015250565b60006144c8601083613684565b91506144d382614492565b602082019050919050565b600060208201905081810360008301526144f7816144bb565b9050919050565b7f77616c6c6574206c696d697420746f6f206c6f77000000000000000000000000600082015250565b6000614534601483613684565b915061453f826144fe565b602082019050919050565b6000602082019050818103600083015261456381614527565b9050919050565b600060408201905061457f60008301856138cf565b61458c60208301846138cf565b9392505050565b7f74726164696e6720616c7265616479206f70656e000000000000000000000000600082015250565b60006145c9601483613684565b91506145d482614593565b602082019050919050565b600060208201905081810360008301526145f8816145bc565b9050919050565b7f4c5020616c726561647920616464656400000000000000000000000000000000600082015250565b6000614635601083613684565b9150614640826145ff565b602082019050919050565b6000602082019050818103600083015261466481614628565b9050919050565b60008151905061467a8161376b565b92915050565b60006020828403121561469657614695613734565b5b60006146a48482850161466b565b91505092915050565b60006040820190506146c26000830185613c2c565b6146cf6020830184613c2c565b9392505050565b7f6e6f206574680000000000000000000000000000000000000000000000000000600082015250565b600061470c600683613684565b9150614717826146d6565b602082019050919050565b6000602082019050818103600083015261473b816146ff565b9050919050565b7f6e6f20746f6b656e730000000000000000000000000000000000000000000000600082015250565b6000614778600983613684565b915061478382614742565b602082019050919050565b600060208201905081810360008301526147a78161476b565b9050919050565b60006020820190506147c36000830184613c2c565b92915050565b60006147d4826139da565b91506147df836139da565b92508261ffff038211156147f6576147f5613ea5565b5b828201905092915050565b600060608201905061481660008301866139e8565b61482360208301856139e8565b61483060408301846139e8565b949350505050565b6000819050919050565b600061485d61485861485384613739565b614838565b613739565b9050919050565b600061486f82614842565b9050919050565b600061488182614864565b9050919050565b61489181614876565b82525050565b60006020820190506148ac6000830184614888565b92915050565b60006148bd826139da565b915061ffff82036148d1576148d0613ea5565b5b600182019050919050565b7f5a65726f2061646472657373206e6f7420616c6c6f7765640000000000000000600082015250565b6000614912601883613684565b915061491d826148dc565b602082019050919050565b6000602082019050818103600083015261494181614905565b9050919050565b7f626c61636b6c6973746564000000000000000000000000000000000000000000600082015250565b600061497e600b83613684565b915061498982614948565b602082019050919050565b600060208201905081810360008301526149ad81614971565b9050919050565b7f54582065786365656473206c696d697473000000000000000000000000000000600082015250565b60006149ea601183613684565b91506149f5826149b4565b602082019050919050565b60006020820190508181036000830152614a19816149dd565b9050919050565b6000604082019050614a356000830185613c2c565b614a4260208301846138cf565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b6000614acc614ac7614ac284614aa7565b614838565b613797565b9050919050565b614adc81614ab1565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614b1781613759565b82525050565b6000614b298383614b0e565b60208301905092915050565b6000602082019050919050565b6000614b4d82614ae2565b614b578185614aed565b9350614b6283614afe565b8060005b83811015614b93578151614b7a8882614b1d565b9750614b8583614b35565b925050600181019050614b66565b5085935050505092915050565b600060a082019050614bb560008301886138cf565b614bc26020830187614ad3565b8181036040830152614bd48186614b42565b9050614be36060830185613c2c565b614bf060808301846138cf565b9695505050505050565b600060c082019050614c0f6000830189613c2c565b614c1c60208301886138cf565b614c296040830187614ad3565b614c366060830186614ad3565b614c436080830185613c2c565b614c5060a08301846138cf565b979650505050505050565b600081519050614c6a816137a1565b92915050565b600080600060608486031215614c8957614c88613734565b5b6000614c9786828701614c5b565b9350506020614ca886828701614c5b565b9250506040614cb986828701614c5b565b915050925092509256fea26469706673582212208521e2c1769f102104eec3e91ef8ac1607c5b8a0e16e9eced70efe24f2272dea64736f6c634300080f0033

Deployed Bytecode Sourcemap

1902:15238:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5217:80;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5546:319;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12391:393;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4956:88;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11820:214;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6075:363;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12039:347;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;5047:80;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11349:313;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;16933:204;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13629:216;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;5300:105;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16600:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11667:148;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;5130:84;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5870:200;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13850:505;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6443:874;;;;;;;;;;;;;:::i;:::-;;13357:267;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13184:168;;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;5408:133;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12789:389;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14360:347;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1091:130;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8306:169;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5217:80;5265:13;5289:5;;;;;;;;;;;;;;;;;5282:12;;5217:80;:::o;5546:319::-;5621:4;5651:12;5637:11;;:26;:53;;;;;5668:10;:22;5679:10;5668:22;;;;;;;;;;;;;;;;;;;;;;;;;5667:23;5637:53;5632:118;;;5699:45;5713:10;5725:12;5739:4;5699:13;:45::i;:::-;5632:118;5791:6;5756:11;:23;5768:10;5756:23;;;;;;;;;;;;;;;:32;5780:7;5756:32;;;;;;;;;;;;;;;:41;;;;5828:7;5807:37;;5816:10;5807:37;;;5837:6;5807:37;;;;;;:::i;:::-;;;;;;;;5856:4;5849:11;;5546:319;;;;:::o;12391:393::-;1030:5;;;;;;;;;;1016:19;;:10;:19;;;1008:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;12521:19:::1;;;;;;;;;;;12519:1;:21;;;;:::i;:::-;12495:45;;12505:10;12495:9;:20;;;;:::i;:::-;:45;;;;12487:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;12586:19;;;;;;;;;;;12574:31;;:8;:31;;;;12566:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;12644:9;12627:14;;:26;;;;;;;;;;;;;;;;;;12676:10;12658:15;;:28;;;;;;;;;;;;;;;;;;12713:8;12691:19;::::0;:30:::1;;;;;;;;;;;;;;;;;;12731:48;12747:9;12758:10;12770:8;12731:48;;;;;;;;:::i;:::-;;;;;;;;12391:393:::0;;;:::o;4956:88::-;5011:7;2040:1;2089:2;:13;;;;:::i;:::-;2077:9;:25;;;;:::i;:::-;5022:19;;4956:88;:::o;11820:214::-;1030:5;;;;;;;;;;1016:19;;:10;:19;;;1008:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;11932:6:::1;11911:10;:18;11922:6;11911:18;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;11966:8;11943:12;:20;11956:6;11943:20;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;11984:45;12004:6;12012;12020:8;11984:45;;;;;;;;:::i;:::-;;;;;;;;11820:214:::0;;;:::o;6075:363::-;6175:4;6194:19;:17;:19::i;:::-;6186:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;6278:17;6243:11;:19;6255:6;6243:19;;;;;;;;;;;;;;;:31;6263:10;6243:31;;;;;;;;;;;;;;;;:52;6239:143;;6370:6;6336:11;:19;6348:6;6336:19;;;;;;;;;;;;;;;:31;6356:10;6336:31;;;;;;;;;;;;;;;;:40;;;;:::i;:::-;6302:11;:19;6314:6;6302:19;;;;;;;;;;;;;;;:31;6322:10;6302:31;;;;;;;;;;;;;;;:74;;;;6239:143;6393:40;6407:6;6415:9;6426:6;6393:13;:40::i;:::-;6386:47;;6075:363;;;;;:::o;12039:347::-;12087:21;12110:16;12128:17;12147:21;12170:19;12191:17;12210:24;12250:19;;;;;;;;;;;12271:14;;;;;;;;;;;12287:15;;;;;;;;;;;12304:19;;;;;;;;;;12325:16;;;;;;;;;;;12343:14;;;;;;;;;;;12359:21;;;;;;;;;;;12242:139;;;;;;;;;;;;;;12039:347;;;;;;;:::o;5047:80::-;5099:5;2040:1;5108:16;;5047:80;:::o;11349:313::-;11415:18;11435:22;11459:30;11496:19;11552:1;11525:15;:23;11541:6;11525:23;;;;;;;;;;;;;;;;:28;11520:62;;11575:4;11558:21;;11520:62;11595:14;11611:15;:23;11627:6;11611:23;;;;;;;;;;;;;;;;11636:19;;;;;;;;;;;11586:70;;;;;;;11349:313;;;;;:::o;16933:204::-;16983:24;17010:21;17020:10;17010:9;:21::i;:::-;16983:48;;17054:16;17044:6;:26;;17036:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;17101:31;17113:6;17121:10;17101:11;:31::i;:::-;16978:159;16933:204;:::o;13629:216::-;13672:19;13693:23;13718:18;13738;13771:15;;13788:19;;13809:14;;13825;;13763:77;;;;;;;;13629:216;;;;:::o;5300:105::-;5366:7;5384:9;:18;5394:7;5384:18;;;;;;;;;;;;;;;;5377:25;;5300:105;;;:::o;16600:328::-;1030:5;;;;;;;;;;1016:19;;:10;:19;;;1008:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;16686:10:::1;16682:168;;;16704:23;16730:24;16748:4;16730:9;:24::i;:::-;16704:50;;16786:1;16768:15;:19;16760:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;16807:37;16828:15;16807:20;:37::i;:::-;16698:152;16682:168;16862:7;16858:66;;;16877:40;16895:21;16877:17;:40::i;:::-;16858:66;16600:328:::0;;:::o;11667:148::-;11728:11;11741:13;11769:10;:18;11780:6;11769:18;;;;;;;;;;;;;;;;;;;;;;;;;11789:12;:20;11802:6;11789:20;;;;;;;;;;;;;;;;;;;;;;;;;11761:49;;;;11667:148;;;:::o;5130:84::-;5180:13;5204:7;;;;;;;;;;;;;;;;;5197:14;;5130:84;:::o;5870:200::-;5950:4;5969:19;:17;:19::i;:::-;5961:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;6021:44;6035:10;6047:9;6058:6;6021:13;:44::i;:::-;6014:51;;5870:200;;;;:::o;13850:505::-;1030:5;;;;;;;;;;1016:19;;:10;:19;;;1008:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;13950:16:::1;14009:1;14002:4;13984:15;13969:30;;2040:1;2089:2;:13;;;;:::i;:::-;2077:9;:25;;;;:::i;:::-;13969:30;;;;:::i;:::-;:37;;;;:::i;:::-;:41;;;;:::i;:::-;13950:60;;14035:15;;14023:8;:27;;14015:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;14094:8;14076:15;:26;;;;14107:20;14174:1;14167:4;14145:19;14130:34;;2040:1;2089:2;:13;;;;:::i;:::-;2077:9;:25;;;;:::i;:::-;14130:34;;;;:::i;:::-;:41;;;;:::i;:::-;:45;;;;:::i;:::-;14107:68;;14204:19;;14188:12;:35;;14180:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14275:12;14253:19;:34;;;;14297:53;14313:15;;14330:19;;14297:53;;;;;;;:::i;:::-;;;;;;;;13945:410;;13850:505:::0;;:::o;6443:874::-;1030:5;;;;;;;;;;1016:19;;:10;:19;;;1008:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;6493:14:::1;:12;:14::i;:::-;6492:15;6484:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;6571:1;6545:28;;:14;;;;;;;;;;;:28;;;6537:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;6629:4;6601:10;:25;6620:4;6601:25;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;6658:4;6638:10;:17;6649:5:::0;::::1;;;;;;;;;;6638:17;;;;;;;;;;;;;;;;:24;;;;;;;;;;;;;;;;;;6697:4;6667:10;:27;6678:15;;;;;;;;;;;6667:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;6723:16;;;;;;;;;;;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6708:12;;:38;;;;;;;;;;;;;;;;;;6786:16;;;;;;;;;;;:24;;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6768:56;;;6833:4;6840:12;;;;;;;;;;;6768:85;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6751:14;;:102;;;;;;;;;;;;;;;;;;6889:4;6860:10;:26;6871:14;;;;;;;;;;;6860:26;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;6927:4;6898:10;:26;6909:14;;;;;;;;;;;6898:26;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;6938:27;6968:21;6938:51;;7025:1;7002:19;:24;;6994:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;7044:29;7076:24;7094:4;7076:9;:24::i;:::-;7044:56;;7137:1;7113:21;:25;7105:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;7159:37;7174:21;7159:14;:37::i;:::-;7201:64;7215:21;7238:19;7259:5;7201:13;:64::i;:::-;7270:13;7286:2;7270:18;;7293:19;7306:5;7293:12;:19::i;:::-;6479:838;;;6443:874::o:0;13357:267::-;1030:5;;;;;;;;;;1016:19;;:10;:19;;;1008:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;13460:20:::1;13434:15;;:47;;;;;;;;;;;;;;;;;;13521:4;13486:10;:32;13497:20;13486:32;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;13567:4;13530:12;:34;13543:20;13530:34;;;;;;;;;;;;;;;;:41;;;;;;;;;;;;;;;;;;13581:38;13598:20;13581:38;;;;;;:::i;:::-;;;;;;;;13357:267:::0;:::o;13184:168::-;13228:21;13251;13274:19;13308:5;;;;;;;;;;;13315:14;;;;;;;;;;;13331:15;;;;;;;;;;;13300:47;;;;;;13184:168;;;:::o;5408:133::-;5492:7;5510:11;:19;5522:6;5510:19;;;;;;;;;;;;;;;:28;5530:7;5510:28;;;;;;;;;;;;;;;;5503:35;;5408:133;;;;:::o;12789:389::-;1030:5;;;;;;;;;;1016:19;;:10;:19;;;1008:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;12926:12:::1;12907:16;;:31;;;;;;;;;;;;;;;;;;12960:10;12943:14;;:27;;;;;;;;;;;;;;;;;;12999:17;12975:21;;:41;;;;;;;;;;;;;;;;;;13075:21;;;;;;;;;;;13058:14;;;;;;;;;;;13039:16;;;;;;;;;;;:33;;;;:::i;:::-;:57;;;;:::i;:::-;13021:15;;:75;;;;;;;;;;;;;;;;;;13106:67;13129:12;13143:10;13155:17;13106:67;;;;;;;;:::i;:::-;;;;;;;;12789:389:::0;;;:::o;14360:347::-;1030:5;;;;;;;;;;1016:19;;:10;:19;;;1008:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;14525:10:::1;14499:36;;14514:8;14499:23;;2040:1;2089:2;:13;;;;:::i;:::-;2077:9;:25;;;;:::i;:::-;14499:23;;;;:::i;:::-;:36;;;;:::i;:::-;14482:14;:53;;;;14583:10;14557:36;;14572:8;14557:23;;2040:1;2089:2;:13;;;;:::i;:::-;2077:9;:25;;;;:::i;:::-;14557:23;;;;:::i;:::-;:36;;;;:::i;:::-;14540:14;:53;;;;14623:14;;14606;;:31;14598:40;;;::::0;::::1;;14648:54;14671:14;;14687;;14648:54;;;;;;;:::i;:::-;;;;;;;;14360:347:::0;;;;:::o;1091:130::-;1030:5;;;;;;;;;;1016:19;;:10;:19;;;1008:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;1173:8:::1;1165:5;::::0;:16:::1;;;;;;;;;;;;;;;;;;1188:30;1209:8;1188:30;;;;;;:::i;:::-;;;;;;;;1091:130:::0;:::o;8306:169::-;8352:4;8367:14;:12;:14::i;:::-;:50;;;;;8415:2;8401:11;;:16;;;;:::i;:::-;8385:12;:32;;8367:50;8363:108;;;8428:14;:12;:14::i;:::-;8421:21;;;;8363:108;8463:5;8456:12;;8306:169;;:::o;9744:256::-;9842:10;:18;9853:6;9842:18;;;;;;;;;;;;;;;;;;;;;;;;;9841:19;:51;;;;;9891:1;9864:15;:23;9880:6;9864:23;;;;;;;;;;;;;;;;:28;9841:51;9836:160;;;9928:13;9902:15;:23;9918:6;9902:23;;;;;;;;;;;;;;;:39;;;;9953:9;9948:43;;;9966:19;;:22;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;9948:43;9836:160;9744:256;;;:::o;10645:222::-;10696:4;10706:16;10725:5;10706:24;;10740:14;:12;:14::i;:::-;10735:104;;;10773:4;10759:18;;10735:104;;;10808:5;;;;;;;;;;10795:18;;:9;:18;;;10790:49;;10832:4;10818:18;;10790:49;10735:104;10851:11;10844:18;;;10645:222;:::o;8480:1259::-;8572:4;8607:1;8591:18;;:6;:18;;;;:43;;;;;8632:1;8613:21;;:9;:21;;;;8591:43;8583:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;8687:12;8673:11;;:26;8668:315;;;8740:1;8713:15;:23;8729:6;8713:23;;;;;;;;;;;;;;;;:28;8708:156;;8746:44;8760:9;8771:12;8785:4;8746:13;:44::i;:::-;8708:156;;;8805:56;8819:9;8830:15;:23;8846:6;8830:23;;;;;;;;;;;;;;;;8855:5;8805:13;:56::i;:::-;8708:156;8668:315;;;8913:1;8886:15;:23;8902:6;8886:23;;;;;;;;;;;;;;;;:28;8881:97;;8919:56;8933:9;8944:15;:23;8960:6;8944:23;;;;;;;;;;;;;;;;8969:5;8919:13;:56::i;:::-;8881:97;8668:315;8994:14;:12;:14::i;:::-;:46;;;;;9039:1;9012:15;:23;9028:6;9012:23;;;;;;;;;;;;;;;;:28;;8994:46;:88;;;;;9070:12;9044:15;:23;9060:6;9044:23;;;;;;;;;;;;;;;;:38;8994:88;8989:122;;;9087:21;;;;;;;;;;:::i;:::-;;;;;;;;8989:122;9123:10;;;;;;;;;;;9122:11;:36;;;;;9137:10;:21;9148:9;9137:21;;;;;;;;;;;;;;;;;;;;;;;;;9122:36;9117:69;;;9163:20;:18;:20::i;:::-;9117:69;9215:4;9197:23;;:6;:23;;;;:53;;;;;9245:4;9224:26;;:9;:26;;;;9197:53;:72;;;;;9264:5;;;;;;;;;;9254:15;;:6;:15;;;;9197:72;9192:154;;;9282:39;9295:6;9303:9;9314:6;9282:12;:39::i;:::-;9274:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;9192:154;9350:18;9371:40;9385:6;9393:9;9404:6;9371:13;:40::i;:::-;9350:61;;9416:23;9451:10;9442:6;:19;;;;:::i;:::-;9416:45;;9506:6;9486:9;:17;9496:6;9486:17;;;;;;;;;;;;;;;;:26;;;;:::i;:::-;9466:9;:17;9476:6;9466:17;;;;;;;;;;;;;;;:46;;;;9535:1;9522:10;:14;9517:91;;;9595:10;9568:9;:24;9586:4;9568:24;;;;;;;;;;;;;;;;:37;;;;:::i;:::-;9541:9;:24;9559:4;9541:24;;;;;;;;;;;;;;;:64;;;;9517:91;9658:15;9635:9;:20;9645:9;9635:20;;;;;;;;;;;;;;;;:38;;;;:::i;:::-;9612:9;:20;9622:9;9612:20;;;;;;;;;;;;;;;:61;;;;9700:9;9683:35;;9692:6;9683:35;;;9711:6;9683:35;;;;;;:::i;:::-;;;;;;;;9730:4;9723:11;;;;8480:1259;;;;;:::o;14712:266::-;14796:1;14787:6;:10;14782:192;;;14831:6;14806:9;:21;14816:10;14806:21;;;;;;;;;;;;;;;;:31;;;;;;;:::i;:::-;;;;;;;;14868:6;14843:9;:21;14861:1;14843:21;;;;;;;;;;;;;;;;:31;;;;;;;:::i;:::-;;;;;;;;14914:1;14885:40;;14894:10;14885:40;;;14918:6;14885:40;;;;;;:::i;:::-;;;;;;;;14936:32;14949:10;14961:6;14936:32;;;;;;;:::i;:::-;;;;;;;;14782:192;14712:266;;:::o;16137:321::-;16202:28;16217:12;16202:14;:28::i;:::-;16235:21;16273:1;16259:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16235:40;;16298:4;16280;16285:1;16280:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;16318:12;;;;;;;;;;;16308:4;16313:1;16308:7;;;;;;;;:::i;:::-;;;;;;;:22;;;;;;;;;;;16335:16;;;;;;;;;;;:67;;;16403:12;16416:1;16418:4;16431;16437:15;16335:118;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16197:261;16137:321;:::o;16463:132::-;16549:1;16525:21;;;;;;;;;;;:25;;;16520:71;;;16555:15;;;;;;;;;;;:24;;:33;16580:7;16555:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16520:71;16463:132;:::o;10480:160::-;10526:4;10537:11;10551:5;10537:19;;10581:17;;10565:12;:33;10561:57;;10611:4;10602:13;;10561:57;10629:6;10622:13;;;10480:160;:::o;7322:299::-;7441:12;7387:11;:26;7407:4;7387:26;;;;;;;;;;;;;;;:51;3166:42;7387:51;;;;;;;;;;;;;;;;:66;7382:235;;;7516:17;7462:11;:26;7482:4;7462:26;;;;;;;;;;;;;;;:51;3166:42;7462:51;;;;;;;;;;;;;;;:71;;;;3166:42;7544:67;;7561:4;7544:67;;;7593:17;7544:67;;;;;;:::i;:::-;;;;;;;;7382:235;7322:299;:::o;7626:321::-;7723:24;7771:8;7765:46;;7803:5;;;;;;;;;;7784:24;;7765:46;7815:16;;;;;;;;;;;:32;;;7855:13;7880:4;7887:12;7901:1;7904;7907:16;7925:15;7815:127;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;7718:229;7626:321;;;:::o;7952:349::-;2040:1;8053:2;:13;;;;:::i;:::-;8045:5;2040:1;2089:2;:13;;;;:::i;:::-;2077:9;:25;;;;:::i;:::-;8024:3;:18;;;;:::i;:::-;:26;;;;:::i;:::-;:42;;;;:::i;:::-;8002:15;:64;;;;2040:1;8123:2;:13;;;;:::i;:::-;8115:5;2040:1;2089:2;:13;;;;:::i;:::-;2077:9;:25;;;;:::i;:::-;8094:3;:18;;;;:::i;:::-;:26;;;;:::i;:::-;:42;;;;:::i;:::-;8072:19;:64;;;;8158:1;8141:14;;:18;;;;;;;;;;;;;;;;;;8182:1;8164:15;;:19;;;;;;;;;;;;;;;;;;8210:1;8188:19;;:23;;;;;;;;;;;;;;;;;;8252:4;8237:12;:19;;;;:::i;:::-;8217:17;:39;;;;8295:1;8275:17;;:21;;;;:::i;:::-;8261:11;:35;;;;7952:349;:::o;14983:1149::-;3382:4;3369:10;;:17;;;;;;;;;;;;;;;;;;15038:27:::1;15068:24;15086:4;15068:9;:24::i;:::-;15038:54;;15127:14;;15104:19;:37;;:55;;;;;15145:14;:12;:14::i;:::-;15104:55;15099:1029;;;15196:14;;15173:19;:37;15168:86;;15237:14;;15215:36;;15168:86;15264:20;15346:1;15328:15;;;;;;;;;;;15287:56;;15309:16;;;;;;;;;;;15287:38;;:19;:38;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;15264:83;;15358:21;15421:15;;;;;;;;;;;15382:54;;15404:14;;;;;;;;;;;15382:36;;:19;:36;;;;:::i;:::-;:54;;;;:::i;:::-;15358:78;;15442:41;15454:13;15477:4;15442:11;:41::i;:::-;15491:21;15553:12;15537:13;15515:19;:35;;;;:::i;:::-;:50;;;;:::i;:::-;15491:74;;2040:1;15592:2;:13;;;;:::i;:::-;15575;:30;15571:415;;15614:19;15636:21;15614:43;;15664:35;15685:13;15664:20;:35::i;:::-;15706:19;15752:11;15728:21;:35;;;;:::i;:::-;15706:57;;15794:1;15775:16;;;;;;;;;;;:20;;;15770:210;;;15806:21;15863:15;;;;;;;;;;;15830:48;;15844:16;;;;;;;;;;;15830:30;;:11;:30;;;;:::i;:::-;:48;;;;:::i;:::-;15806:72;;15887:28;15902:12;15887:14;:28::i;:::-;15923:49;15937:12;15951:13;15966:5;15923:13;:49::i;:::-;15798:182;15770:210;15607:379;;15571:415;15991:27;16021:21;15991:51;;16077:1;16055:19;:23;16051:72;;;16082:38;16100:19;16082:17;:38::i;:::-;16051:72;15162:966;;;;15099:1029;15033:1099;3404:5:::0;3391:10;;:18;;;;;;;;;;;;;;;;;;14983:1149::o;10006:469::-;10110:4;10121:21;10145:4;10121:28;;10159:14;:12;:14::i;:::-;:42;;;;;10178:12;:23;10191:9;10178:23;;;;;;;;;;;;;;;;;;;;;;;;;10177:24;10159:42;:67;;;;;10206:12;:20;10219:6;10206:20;;;;;;;;;;;;;;;;;;;;;;;;;10205:21;10159:67;10154:289;;;10257:15;;10240:14;:32;10235:203;;;10296:5;10277:24;;10235:203;;;10320:10;:21;10331:9;10320:21;;;;;;;;;;;;;;;;;;;;;;;;;10319:22;:87;;;;;10386:19;;10369:14;10346:9;:20;10356:9;10346:20;;;;;;;;;;;;;;;;:37;;;;:::i;:::-;:59;10319:87;10314:124;;;10430:5;10411:24;;10314:124;10235:203;10154:289;10454:16;10447:23;;;10006:469;;;;;:::o;10872:472::-;10969:7;10983:17;11011:14;:12;:14::i;:::-;11010:15;:37;;;;11029:10;:18;11040:6;11029:18;;;;;;;;;;;;;;;;;;;;;;;;;11010:37;:62;;;;11051:10;:21;11062:9;11051:21;;;;;;;;;;;;;;;;;;;;;;;;;11010:62;11005:314;;;11089:1;11077:13;;11005:314;;;11107:10;:18;11118:6;11107:18;;;;;;;;;;;;;;;;;;;;;;;;;11102:217;;;11168:3;11151:14;;;;;;;;;;;11142:23;;:6;:23;;;;:::i;:::-;:29;;;;:::i;:::-;11130:41;;11102:217;;;11188:10;:21;11199:9;11188:21;;;;;;;;;;;;;;;;;;;;;;;;;11183:136;;;11253:3;11235:15;;;;;;;;;;;11226:24;;:6;:24;;;;:::i;:::-;:30;;;;:::i;:::-;11214:42;;11183:136;;;11313:3;11291:19;;;;;;;;;;11282:28;;:6;:28;;;;:::i;:::-;:34;;;;:::i;:::-;11270:46;;11183:136;11102:217;11005:314;11330:9;11323:16;;;10872:472;;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:307::-;355:1;365:113;379:6;376:1;373:13;365:113;;;464:1;459:3;455:11;449:18;445:1;440:3;436:11;429:39;401:2;398:1;394:10;389:15;;365:113;;;496:6;493:1;490:13;487:101;;;576:1;567:6;562:3;558:16;551:27;487:101;336:258;287:307;;;:::o;600:102::-;641:6;692:2;688:7;683:2;676:5;672:14;668:28;658:38;;600:102;;;:::o;708:364::-;796:3;824:39;857:5;824:39;:::i;:::-;879:71;943:6;938:3;879:71;:::i;:::-;872:78;;959:52;1004:6;999:3;992:4;985:5;981:16;959:52;:::i;:::-;1036:29;1058:6;1036:29;:::i;:::-;1031:3;1027:39;1020:46;;800:272;708:364;;;;:::o;1078:313::-;1191:4;1229:2;1218:9;1214:18;1206:26;;1278:9;1272:4;1268:20;1264:1;1253:9;1249:17;1242:47;1306:78;1379:4;1370:6;1306:78;:::i;:::-;1298:86;;1078:313;;;;:::o;1478:117::-;1587:1;1584;1577:12;1724:126;1761:7;1801:42;1794:5;1790:54;1779:65;;1724:126;;;:::o;1856:96::-;1893:7;1922:24;1940:5;1922:24;:::i;:::-;1911:35;;1856:96;;;:::o;1958:122::-;2031:24;2049:5;2031:24;:::i;:::-;2024:5;2021:35;2011:63;;2070:1;2067;2060:12;2011:63;1958:122;:::o;2086:139::-;2132:5;2170:6;2157:20;2148:29;;2186:33;2213:5;2186:33;:::i;:::-;2086:139;;;;:::o;2231:77::-;2268:7;2297:5;2286:16;;2231:77;;;:::o;2314:122::-;2387:24;2405:5;2387:24;:::i;:::-;2380:5;2377:35;2367:63;;2426:1;2423;2416:12;2367:63;2314:122;:::o;2442:139::-;2488:5;2526:6;2513:20;2504:29;;2542:33;2569:5;2542:33;:::i;:::-;2442:139;;;;:::o;2587:474::-;2655:6;2663;2712:2;2700:9;2691:7;2687:23;2683:32;2680:119;;;2718:79;;:::i;:::-;2680:119;2838:1;2863:53;2908:7;2899:6;2888:9;2884:22;2863:53;:::i;:::-;2853:63;;2809:117;2965:2;2991:53;3036:7;3027:6;3016:9;3012:22;2991:53;:::i;:::-;2981:63;;2936:118;2587:474;;;;;:::o;3067:90::-;3101:7;3144:5;3137:13;3130:21;3119:32;;3067:90;;;:::o;3163:109::-;3244:21;3259:5;3244:21;:::i;:::-;3239:3;3232:34;3163:109;;:::o;3278:210::-;3365:4;3403:2;3392:9;3388:18;3380:26;;3416:65;3478:1;3467:9;3463:17;3454:6;3416:65;:::i;:::-;3278:210;;;;:::o;3494:86::-;3529:7;3569:4;3562:5;3558:16;3547:27;;3494:86;;;:::o;3586:118::-;3657:22;3673:5;3657:22;:::i;:::-;3650:5;3647:33;3637:61;;3694:1;3691;3684:12;3637:61;3586:118;:::o;3710:135::-;3754:5;3792:6;3779:20;3770:29;;3808:31;3833:5;3808:31;:::i;:::-;3710:135;;;;:::o;3851:607::-;3922:6;3930;3938;3987:2;3975:9;3966:7;3962:23;3958:32;3955:119;;;3993:79;;:::i;:::-;3955:119;4113:1;4138:51;4181:7;4172:6;4161:9;4157:22;4138:51;:::i;:::-;4128:61;;4084:115;4238:2;4264:51;4307:7;4298:6;4287:9;4283:22;4264:51;:::i;:::-;4254:61;;4209:116;4364:2;4390:51;4433:7;4424:6;4413:9;4409:22;4390:51;:::i;:::-;4380:61;;4335:116;3851:607;;;;;:::o;4464:118::-;4551:24;4569:5;4551:24;:::i;:::-;4546:3;4539:37;4464:118;;:::o;4588:222::-;4681:4;4719:2;4708:9;4704:18;4696:26;;4732:71;4800:1;4789:9;4785:17;4776:6;4732:71;:::i;:::-;4588:222;;;;:::o;4816:116::-;4886:21;4901:5;4886:21;:::i;:::-;4879:5;4876:32;4866:60;;4922:1;4919;4912:12;4866:60;4816:116;:::o;4938:133::-;4981:5;5019:6;5006:20;4997:29;;5035:30;5059:5;5035:30;:::i;:::-;4938:133;;;;:::o;5077:607::-;5148:6;5156;5164;5213:2;5201:9;5192:7;5188:23;5184:32;5181:119;;;5219:79;;:::i;:::-;5181:119;5339:1;5364:53;5409:7;5400:6;5389:9;5385:22;5364:53;:::i;:::-;5354:63;;5310:117;5466:2;5492:50;5534:7;5525:6;5514:9;5510:22;5492:50;:::i;:::-;5482:60;;5437:115;5591:2;5617:50;5659:7;5650:6;5639:9;5635:22;5617:50;:::i;:::-;5607:60;;5562:115;5077:607;;;;;:::o;5690:619::-;5767:6;5775;5783;5832:2;5820:9;5811:7;5807:23;5803:32;5800:119;;;5838:79;;:::i;:::-;5800:119;5958:1;5983:53;6028:7;6019:6;6008:9;6004:22;5983:53;:::i;:::-;5973:63;;5929:117;6085:2;6111:53;6156:7;6147:6;6136:9;6132:22;6111:53;:::i;:::-;6101:63;;6056:118;6213:2;6239:53;6284:7;6275:6;6264:9;6260:22;6239:53;:::i;:::-;6229:63;;6184:118;5690:619;;;;;:::o;6315:112::-;6398:22;6414:5;6398:22;:::i;:::-;6393:3;6386:35;6315:112;;:::o;6433:89::-;6469:7;6509:6;6502:5;6498:18;6487:29;;6433:89;;;:::o;6528:115::-;6613:23;6630:5;6613:23;:::i;:::-;6608:3;6601:36;6528:115;;:::o;6649:842::-;6888:4;6926:3;6915:9;6911:19;6903:27;;6940:67;7004:1;6993:9;6989:17;6980:6;6940:67;:::i;:::-;7017:68;7081:2;7070:9;7066:18;7057:6;7017:68;:::i;:::-;7095;7159:2;7148:9;7144:18;7135:6;7095:68;:::i;:::-;7173;7237:2;7226:9;7222:18;7213:6;7173:68;:::i;:::-;7251:71;7317:3;7306:9;7302:19;7293:6;7251:71;:::i;:::-;7332;7398:3;7387:9;7383:19;7374:6;7332:71;:::i;:::-;7413;7479:3;7468:9;7464:19;7455:6;7413:71;:::i;:::-;6649:842;;;;;;;;;;:::o;7497:214::-;7586:4;7624:2;7613:9;7609:18;7601:26;;7637:67;7701:1;7690:9;7686:17;7677:6;7637:67;:::i;:::-;7497:214;;;;:::o;7717:329::-;7776:6;7825:2;7813:9;7804:7;7800:23;7796:32;7793:119;;;7831:79;;:::i;:::-;7793:119;7951:1;7976:53;8021:7;8012:6;8001:9;7997:22;7976:53;:::i;:::-;7966:63;;7922:117;7717:329;;;;:::o;8052:426::-;8193:4;8231:2;8220:9;8216:18;8208:26;;8244:65;8306:1;8295:9;8291:17;8282:6;8244:65;:::i;:::-;8319:72;8387:2;8376:9;8372:18;8363:6;8319:72;:::i;:::-;8401:70;8467:2;8456:9;8452:18;8443:6;8401:70;:::i;:::-;8052:426;;;;;;:::o;8484:329::-;8543:6;8592:2;8580:9;8571:7;8567:23;8563:32;8560:119;;;8598:79;;:::i;:::-;8560:119;8718:1;8743:53;8788:7;8779:6;8768:9;8764:22;8743:53;:::i;:::-;8733:63;;8689:117;8484:329;;;;:::o;8819:553::-;8996:4;9034:3;9023:9;9019:19;9011:27;;9048:71;9116:1;9105:9;9101:17;9092:6;9048:71;:::i;:::-;9129:72;9197:2;9186:9;9182:18;9173:6;9129:72;:::i;:::-;9211;9279:2;9268:9;9264:18;9255:6;9211:72;:::i;:::-;9293;9361:2;9350:9;9346:18;9337:6;9293:72;:::i;:::-;8819:553;;;;;;;:::o;9378:462::-;9440:6;9448;9497:2;9485:9;9476:7;9472:23;9468:32;9465:119;;;9503:79;;:::i;:::-;9465:119;9623:1;9648:50;9690:7;9681:6;9670:9;9666:22;9648:50;:::i;:::-;9638:60;;9594:114;9747:2;9773:50;9815:7;9806:6;9795:9;9791:22;9773:50;:::i;:::-;9763:60;;9718:115;9378:462;;;;;:::o;9846:308::-;9955:4;9993:2;9982:9;9978:18;9970:26;;10006:65;10068:1;10057:9;10053:17;10044:6;10006:65;:::i;:::-;10081:66;10143:2;10132:9;10128:18;10119:6;10081:66;:::i;:::-;9846:308;;;;;:::o;10160:120::-;10232:23;10249:5;10232:23;:::i;:::-;10225:5;10222:34;10212:62;;10270:1;10267;10260:12;10212:62;10160:120;:::o;10286:137::-;10331:5;10369:6;10356:20;10347:29;;10385:32;10411:5;10385:32;:::i;:::-;10286:137;;;;:::o;10429:470::-;10495:6;10503;10552:2;10540:9;10531:7;10527:23;10523:32;10520:119;;;10558:79;;:::i;:::-;10520:119;10678:1;10703:52;10747:7;10738:6;10727:9;10723:22;10703:52;:::i;:::-;10693:62;;10649:116;10804:2;10830:52;10874:7;10865:6;10854:9;10850:22;10830:52;:::i;:::-;10820:62;;10775:117;10429:470;;;;;:::o;10905:118::-;10992:24;11010:5;10992:24;:::i;:::-;10987:3;10980:37;10905:118;;:::o;11029:442::-;11178:4;11216:2;11205:9;11201:18;11193:26;;11229:71;11297:1;11286:9;11282:17;11273:6;11229:71;:::i;:::-;11310:72;11378:2;11367:9;11363:18;11354:6;11310:72;:::i;:::-;11392;11460:2;11449:9;11445:18;11436:6;11392:72;:::i;:::-;11029:442;;;;;;:::o;11477:474::-;11545:6;11553;11602:2;11590:9;11581:7;11577:23;11573:32;11570:119;;;11608:79;;:::i;:::-;11570:119;11728:1;11753:53;11798:7;11789:6;11778:9;11774:22;11753:53;:::i;:::-;11743:63;;11699:117;11855:2;11881:53;11926:7;11917:6;11906:9;11902:22;11881:53;:::i;:::-;11871:63;;11826:118;11477:474;;;;;:::o;11957:613::-;12031:6;12039;12047;12096:2;12084:9;12075:7;12071:23;12067:32;12064:119;;;12102:79;;:::i;:::-;12064:119;12222:1;12247:52;12291:7;12282:6;12271:9;12267:22;12247:52;:::i;:::-;12237:62;;12193:116;12348:2;12374:52;12418:7;12409:6;12398:9;12394:22;12374:52;:::i;:::-;12364:62;;12319:117;12475:2;12501:52;12545:7;12536:6;12525:9;12521:22;12501:52;:::i;:::-;12491:62;;12446:117;11957:613;;;;;:::o;12576:93::-;12612:7;12652:10;12645:5;12641:22;12630:33;;12576:93;;;:::o;12675:120::-;12747:23;12764:5;12747:23;:::i;:::-;12740:5;12737:34;12727:62;;12785:1;12782;12775:12;12727:62;12675:120;:::o;12801:137::-;12846:5;12884:6;12871:20;12862:29;;12900:32;12926:5;12900:32;:::i;:::-;12801:137;;;;:::o;12944:757::-;13026:6;13034;13042;13050;13099:3;13087:9;13078:7;13074:23;13070:33;13067:120;;;13106:79;;:::i;:::-;13067:120;13226:1;13251:52;13295:7;13286:6;13275:9;13271:22;13251:52;:::i;:::-;13241:62;;13197:116;13352:2;13378:52;13422:7;13413:6;13402:9;13398:22;13378:52;:::i;:::-;13368:62;;13323:117;13479:2;13505:52;13549:7;13540:6;13529:9;13525:22;13505:52;:::i;:::-;13495:62;;13450:117;13606:2;13632:52;13676:7;13667:6;13656:9;13652:22;13632:52;:::i;:::-;13622:62;;13577:117;12944:757;;;;;;;:::o;13707:104::-;13752:7;13781:24;13799:5;13781:24;:::i;:::-;13770:35;;13707:104;;;:::o;13817:138::-;13898:32;13924:5;13898:32;:::i;:::-;13891:5;13888:43;13878:71;;13945:1;13942;13935:12;13878:71;13817:138;:::o;13961:155::-;14015:5;14053:6;14040:20;14031:29;;14069:41;14104:5;14069:41;:::i;:::-;13961:155;;;;:::o;14122:345::-;14189:6;14238:2;14226:9;14217:7;14213:23;14209:32;14206:119;;;14244:79;;:::i;:::-;14206:119;14364:1;14389:61;14442:7;14433:6;14422:9;14418:22;14389:61;:::i;:::-;14379:71;;14335:125;14122:345;;;;:::o;14473:229::-;14613:34;14609:1;14601:6;14597:14;14590:58;14682:12;14677:2;14669:6;14665:15;14658:37;14473:229;:::o;14708:366::-;14850:3;14871:67;14935:2;14930:3;14871:67;:::i;:::-;14864:74;;14947:93;15036:3;14947:93;:::i;:::-;15065:2;15060:3;15056:12;15049:19;;14708:366;;;:::o;15080:419::-;15246:4;15284:2;15273:9;15269:18;15261:26;;15333:9;15327:4;15323:20;15319:1;15308:9;15304:17;15297:47;15361:131;15487:4;15361:131;:::i;:::-;15353:139;;15080:419;;;:::o;15505:180::-;15553:77;15550:1;15543:88;15650:4;15647:1;15640:15;15674:4;15671:1;15664:15;15691:280;15729:7;15752:18;15768:1;15752:18;:::i;:::-;15747:23;;15784:18;15800:1;15784:18;:::i;:::-;15779:23;;15908:1;15902:4;15898:12;15895:1;15892:19;15887:1;15880:9;15873:17;15869:43;15866:69;;;15915:18;;:::i;:::-;15866:69;15963:1;15960;15956:9;15945:20;;15691:280;;;;:::o;15977:237::-;16015:3;16034:18;16050:1;16034:18;:::i;:::-;16029:23;;16066:18;16082:1;16066:18;:::i;:::-;16061:23;;16156:1;16150:4;16146:12;16143:1;16140:19;16137:45;;;16162:18;;:::i;:::-;16137:45;16206:1;16203;16199:9;16192:16;;15977:237;;;;:::o;16220:166::-;16360:18;16356:1;16348:6;16344:14;16337:42;16220:166;:::o;16392:366::-;16534:3;16555:67;16619:2;16614:3;16555:67;:::i;:::-;16548:74;;16631:93;16720:3;16631:93;:::i;:::-;16749:2;16744:3;16740:12;16733:19;;16392:366;;;:::o;16764:419::-;16930:4;16968:2;16957:9;16953:18;16945:26;;17017:9;17011:4;17007:20;17003:1;16992:9;16988:17;16981:47;17045:131;17171:4;17045:131;:::i;:::-;17037:139;;16764:419;;;:::o;17189:162::-;17329:14;17325:1;17317:6;17313:14;17306:38;17189:162;:::o;17357:366::-;17499:3;17520:67;17584:2;17579:3;17520:67;:::i;:::-;17513:74;;17596:93;17685:3;17596:93;:::i;:::-;17714:2;17709:3;17705:12;17698:19;;17357:366;;;:::o;17729:419::-;17895:4;17933:2;17922:9;17918:18;17910:26;;17982:9;17976:4;17972:20;17968:1;17957:9;17953:17;17946:47;18010:131;18136:4;18010:131;:::i;:::-;18002:139;;17729:419;;;:::o;18154:418::-;18291:4;18329:2;18318:9;18314:18;18306:26;;18342:67;18406:1;18395:9;18391:17;18382:6;18342:67;:::i;:::-;18419:68;18483:2;18472:9;18468:18;18459:6;18419:68;:::i;:::-;18497;18561:2;18550:9;18546:18;18537:6;18497:68;:::i;:::-;18154:418;;;;;;:::o;18578:102::-;18620:8;18667:5;18664:1;18660:13;18639:34;;18578:102;;;:::o;18686:848::-;18747:5;18754:4;18778:6;18769:15;;18802:5;18793:14;;18816:712;18837:1;18827:8;18824:15;18816:712;;;18932:4;18927:3;18923:14;18917:4;18914:24;18911:50;;;18941:18;;:::i;:::-;18911:50;18991:1;18981:8;18977:16;18974:451;;;19406:4;19399:5;19395:16;19386:25;;18974:451;19456:4;19450;19446:15;19438:23;;19486:32;19509:8;19486:32;:::i;:::-;19474:44;;18816:712;;;18686:848;;;;;;;:::o;19540:1073::-;19594:5;19785:8;19775:40;;19806:1;19797:10;;19808:5;;19775:40;19834:4;19824:36;;19851:1;19842:10;;19853:5;;19824:36;19920:4;19968:1;19963:27;;;;20004:1;19999:191;;;;19913:277;;19963:27;19981:1;19972:10;;19983:5;;;19999:191;20044:3;20034:8;20031:17;20028:43;;;20051:18;;:::i;:::-;20028:43;20100:8;20097:1;20093:16;20084:25;;20135:3;20128:5;20125:14;20122:40;;;20142:18;;:::i;:::-;20122:40;20175:5;;;19913:277;;20299:2;20289:8;20286:16;20280:3;20274:4;20271:13;20267:36;20249:2;20239:8;20236:16;20231:2;20225:4;20222:12;20218:35;20202:111;20199:246;;;20355:8;20349:4;20345:19;20336:28;;20390:3;20383:5;20380:14;20377:40;;;20397:18;;:::i;:::-;20377:40;20430:5;;20199:246;20470:42;20508:3;20498:8;20492:4;20489:1;20470:42;:::i;:::-;20455:57;;;;20544:4;20539:3;20535:14;20528:5;20525:25;20522:51;;;20553:18;;:::i;:::-;20522:51;20602:4;20595:5;20591:16;20582:25;;19540:1073;;;;;;:::o;20619:281::-;20677:5;20701:23;20719:4;20701:23;:::i;:::-;20693:31;;20745:25;20761:8;20745:25;:::i;:::-;20733:37;;20789:104;20826:66;20816:8;20810:4;20789:104;:::i;:::-;20780:113;;20619:281;;;;:::o;20906:348::-;20946:7;20969:20;20987:1;20969:20;:::i;:::-;20964:25;;21003:20;21021:1;21003:20;:::i;:::-;20998:25;;21191:1;21123:66;21119:74;21116:1;21113:81;21108:1;21101:9;21094:17;21090:105;21087:131;;;21198:18;;:::i;:::-;21087:131;21246:1;21243;21239:9;21228:20;;20906:348;;;;:::o;21260:418::-;21397:4;21435:2;21424:9;21420:18;21412:26;;21448:71;21516:1;21505:9;21501:17;21492:6;21448:71;:::i;:::-;21529:66;21591:2;21580:9;21576:18;21567:6;21529:66;:::i;:::-;21605;21667:2;21656:9;21652:18;21643:6;21605:66;:::i;:::-;21260:418;;;;;;:::o;21684:166::-;21824:18;21820:1;21812:6;21808:14;21801:42;21684:166;:::o;21856:366::-;21998:3;22019:67;22083:2;22078:3;22019:67;:::i;:::-;22012:74;;22095:93;22184:3;22095:93;:::i;:::-;22213:2;22208:3;22204:12;22197:19;;21856:366;;;:::o;22228:419::-;22394:4;22432:2;22421:9;22417:18;22409:26;;22481:9;22475:4;22471:20;22467:1;22456:9;22452:17;22445:47;22509:131;22635:4;22509:131;:::i;:::-;22501:139;;22228:419;;;:::o;22653:191::-;22693:4;22713:20;22731:1;22713:20;:::i;:::-;22708:25;;22747:20;22765:1;22747:20;:::i;:::-;22742:25;;22786:1;22783;22780:8;22777:34;;;22791:18;;:::i;:::-;22777:34;22836:1;22833;22829:9;22821:17;;22653:191;;;;:::o;22850:171::-;22990:23;22986:1;22978:6;22974:14;22967:47;22850:171;:::o;23027:366::-;23169:3;23190:67;23254:2;23249:3;23190:67;:::i;:::-;23183:74;;23266:93;23355:3;23266:93;:::i;:::-;23384:2;23379:3;23375:12;23368:19;;23027:366;;;:::o;23399:419::-;23565:4;23603:2;23592:9;23588:18;23580:26;;23652:9;23646:4;23642:20;23638:1;23627:9;23623:17;23616:47;23680:131;23806:4;23680:131;:::i;:::-;23672:139;;23399:419;;;:::o;23824:159::-;23964:11;23960:1;23952:6;23948:14;23941:35;23824:159;:::o;23989:365::-;24131:3;24152:66;24216:1;24211:3;24152:66;:::i;:::-;24145:73;;24227:93;24316:3;24227:93;:::i;:::-;24345:2;24340:3;24336:12;24329:19;;23989:365;;;:::o;24360:419::-;24526:4;24564:2;24553:9;24549:18;24541:26;;24613:9;24607:4;24603:20;24599:1;24588:9;24584:17;24577:47;24641:131;24767:4;24641:131;:::i;:::-;24633:139;;24360:419;;;:::o;24785:180::-;24833:77;24830:1;24823:88;24930:4;24927:1;24920:15;24954:4;24951:1;24944:15;24971:185;25011:1;25028:20;25046:1;25028:20;:::i;:::-;25023:25;;25062:20;25080:1;25062:20;:::i;:::-;25057:25;;25101:1;25091:35;;25106:18;;:::i;:::-;25091:35;25148:1;25145;25141:9;25136:14;;24971:185;;;;:::o;25162:305::-;25202:3;25221:20;25239:1;25221:20;:::i;:::-;25216:25;;25255:20;25273:1;25255:20;:::i;:::-;25250:25;;25409:1;25341:66;25337:74;25334:1;25331:81;25328:107;;;25415:18;;:::i;:::-;25328:107;25459:1;25456;25452:9;25445:16;;25162:305;;;;:::o;25473:166::-;25613:18;25609:1;25601:6;25597:14;25590:42;25473:166;:::o;25645:366::-;25787:3;25808:67;25872:2;25867:3;25808:67;:::i;:::-;25801:74;;25884:93;25973:3;25884:93;:::i;:::-;26002:2;25997:3;25993:12;25986:19;;25645:366;;;:::o;26017:419::-;26183:4;26221:2;26210:9;26206:18;26198:26;;26270:9;26264:4;26260:20;26256:1;26245:9;26241:17;26234:47;26298:131;26424:4;26298:131;:::i;:::-;26290:139;;26017:419;;;:::o;26442:170::-;26582:22;26578:1;26570:6;26566:14;26559:46;26442:170;:::o;26618:366::-;26760:3;26781:67;26845:2;26840:3;26781:67;:::i;:::-;26774:74;;26857:93;26946:3;26857:93;:::i;:::-;26975:2;26970:3;26966:12;26959:19;;26618:366;;;:::o;26990:419::-;27156:4;27194:2;27183:9;27179:18;27171:26;;27243:9;27237:4;27233:20;27229:1;27218:9;27214:17;27207:47;27271:131;27397:4;27271:131;:::i;:::-;27263:139;;26990:419;;;:::o;27415:332::-;27536:4;27574:2;27563:9;27559:18;27551:26;;27587:71;27655:1;27644:9;27640:17;27631:6;27587:71;:::i;:::-;27668:72;27736:2;27725:9;27721:18;27712:6;27668:72;:::i;:::-;27415:332;;;;;:::o;27753:170::-;27893:22;27889:1;27881:6;27877:14;27870:46;27753:170;:::o;27929:366::-;28071:3;28092:67;28156:2;28151:3;28092:67;:::i;:::-;28085:74;;28168:93;28257:3;28168:93;:::i;:::-;28286:2;28281:3;28277:12;28270:19;;27929:366;;;:::o;28301:419::-;28467:4;28505:2;28494:9;28490:18;28482:26;;28554:9;28548:4;28544:20;28540:1;28529:9;28525:17;28518:47;28582:131;28708:4;28582:131;:::i;:::-;28574:139;;28301:419;;;:::o;28726:166::-;28866:18;28862:1;28854:6;28850:14;28843:42;28726:166;:::o;28898:366::-;29040:3;29061:67;29125:2;29120:3;29061:67;:::i;:::-;29054:74;;29137:93;29226:3;29137:93;:::i;:::-;29255:2;29250:3;29246:12;29239:19;;28898:366;;;:::o;29270:419::-;29436:4;29474:2;29463:9;29459:18;29451:26;;29523:9;29517:4;29513:20;29509:1;29498:9;29494:17;29487:47;29551:131;29677:4;29551:131;:::i;:::-;29543:139;;29270:419;;;:::o;29695:143::-;29752:5;29783:6;29777:13;29768:22;;29799:33;29826:5;29799:33;:::i;:::-;29695:143;;;;:::o;29844:351::-;29914:6;29963:2;29951:9;29942:7;29938:23;29934:32;29931:119;;;29969:79;;:::i;:::-;29931:119;30089:1;30114:64;30170:7;30161:6;30150:9;30146:22;30114:64;:::i;:::-;30104:74;;30060:128;29844:351;;;;:::o;30201:332::-;30322:4;30360:2;30349:9;30345:18;30337:26;;30373:71;30441:1;30430:9;30426:17;30417:6;30373:71;:::i;:::-;30454:72;30522:2;30511:9;30507:18;30498:6;30454:72;:::i;:::-;30201:332;;;;;:::o;30539:156::-;30679:8;30675:1;30667:6;30663:14;30656:32;30539:156;:::o;30701:365::-;30843:3;30864:66;30928:1;30923:3;30864:66;:::i;:::-;30857:73;;30939:93;31028:3;30939:93;:::i;:::-;31057:2;31052:3;31048:12;31041:19;;30701:365;;;:::o;31072:419::-;31238:4;31276:2;31265:9;31261:18;31253:26;;31325:9;31319:4;31315:20;31311:1;31300:9;31296:17;31289:47;31353:131;31479:4;31353:131;:::i;:::-;31345:139;;31072:419;;;:::o;31497:159::-;31637:11;31633:1;31625:6;31621:14;31614:35;31497:159;:::o;31662:365::-;31804:3;31825:66;31889:1;31884:3;31825:66;:::i;:::-;31818:73;;31900:93;31989:3;31900:93;:::i;:::-;32018:2;32013:3;32009:12;32002:19;;31662:365;;;:::o;32033:419::-;32199:4;32237:2;32226:9;32222:18;32214:26;;32286:9;32280:4;32276:20;32272:1;32261:9;32257:17;32250:47;32314:131;32440:4;32314:131;:::i;:::-;32306:139;;32033:419;;;:::o;32458:222::-;32551:4;32589:2;32578:9;32574:18;32566:26;;32602:71;32670:1;32659:9;32655:17;32646:6;32602:71;:::i;:::-;32458:222;;;;:::o;32686:242::-;32725:3;32744:19;32761:1;32744:19;:::i;:::-;32739:24;;32777:19;32794:1;32777:19;:::i;:::-;32772:24;;32870:1;32862:6;32858:14;32855:1;32852:21;32849:47;;;32876:18;;:::i;:::-;32849:47;32920:1;32917;32913:9;32906:16;;32686:242;;;;:::o;32934:430::-;33077:4;33115:2;33104:9;33100:18;33092:26;;33128:69;33194:1;33183:9;33179:17;33170:6;33128:69;:::i;:::-;33207:70;33273:2;33262:9;33258:18;33249:6;33207:70;:::i;:::-;33287;33353:2;33342:9;33338:18;33329:6;33287:70;:::i;:::-;32934:430;;;;;;:::o;33370:60::-;33398:3;33419:5;33412:12;;33370:60;;;:::o;33436:142::-;33486:9;33519:53;33537:34;33546:24;33564:5;33546:24;:::i;:::-;33537:34;:::i;:::-;33519:53;:::i;:::-;33506:66;;33436:142;;;:::o;33584:126::-;33634:9;33667:37;33698:5;33667:37;:::i;:::-;33654:50;;33584:126;;;:::o;33716:134::-;33774:9;33807:37;33838:5;33807:37;:::i;:::-;33794:50;;33716:134;;;:::o;33856:147::-;33951:45;33990:5;33951:45;:::i;:::-;33946:3;33939:58;33856:147;;:::o;34009:238::-;34110:4;34148:2;34137:9;34133:18;34125:26;;34161:79;34237:1;34226:9;34222:17;34213:6;34161:79;:::i;:::-;34009:238;;;;:::o;34253:171::-;34291:3;34314:23;34331:5;34314:23;:::i;:::-;34305:32;;34359:6;34352:5;34349:17;34346:43;;34369:18;;:::i;:::-;34346:43;34416:1;34409:5;34405:13;34398:20;;34253:171;;;:::o;34430:174::-;34570:26;34566:1;34558:6;34554:14;34547:50;34430:174;:::o;34610:366::-;34752:3;34773:67;34837:2;34832:3;34773:67;:::i;:::-;34766:74;;34849:93;34938:3;34849:93;:::i;:::-;34967:2;34962:3;34958:12;34951:19;;34610:366;;;:::o;34982:419::-;35148:4;35186:2;35175:9;35171:18;35163:26;;35235:9;35229:4;35225:20;35221:1;35210:9;35206:17;35199:47;35263:131;35389:4;35263:131;:::i;:::-;35255:139;;34982:419;;;:::o;35407:161::-;35547:13;35543:1;35535:6;35531:14;35524:37;35407:161;:::o;35574:366::-;35716:3;35737:67;35801:2;35796:3;35737:67;:::i;:::-;35730:74;;35813:93;35902:3;35813:93;:::i;:::-;35931:2;35926:3;35922:12;35915:19;;35574:366;;;:::o;35946:419::-;36112:4;36150:2;36139:9;36135:18;36127:26;;36199:9;36193:4;36189:20;36185:1;36174:9;36170:17;36163:47;36227:131;36353:4;36227:131;:::i;:::-;36219:139;;35946:419;;;:::o;36371:167::-;36511:19;36507:1;36499:6;36495:14;36488:43;36371:167;:::o;36544:366::-;36686:3;36707:67;36771:2;36766:3;36707:67;:::i;:::-;36700:74;;36783:93;36872:3;36783:93;:::i;:::-;36901:2;36896:3;36892:12;36885:19;;36544:366;;;:::o;36916:419::-;37082:4;37120:2;37109:9;37105:18;37097:26;;37169:9;37163:4;37159:20;37155:1;37144:9;37140:17;37133:47;37197:131;37323:4;37197:131;:::i;:::-;37189:139;;36916:419;;;:::o;37341:332::-;37462:4;37500:2;37489:9;37485:18;37477:26;;37513:71;37581:1;37570:9;37566:17;37557:6;37513:71;:::i;:::-;37594:72;37662:2;37651:9;37647:18;37638:6;37594:72;:::i;:::-;37341:332;;;;;:::o;37679:180::-;37727:77;37724:1;37717:88;37824:4;37821:1;37814:15;37848:4;37845:1;37838:15;37865:180;37913:77;37910:1;37903:88;38010:4;38007:1;38000:15;38034:4;38031:1;38024:15;38051:85;38096:7;38125:5;38114:16;;38051:85;;;:::o;38142:158::-;38200:9;38233:61;38251:42;38260:32;38286:5;38260:32;:::i;:::-;38251:42;:::i;:::-;38233:61;:::i;:::-;38220:74;;38142:158;;;:::o;38306:147::-;38401:45;38440:5;38401:45;:::i;:::-;38396:3;38389:58;38306:147;;:::o;38459:114::-;38526:6;38560:5;38554:12;38544:22;;38459:114;;;:::o;38579:184::-;38678:11;38712:6;38707:3;38700:19;38752:4;38747:3;38743:14;38728:29;;38579:184;;;;:::o;38769:132::-;38836:4;38859:3;38851:11;;38889:4;38884:3;38880:14;38872:22;;38769:132;;;:::o;38907:108::-;38984:24;39002:5;38984:24;:::i;:::-;38979:3;38972:37;38907:108;;:::o;39021:179::-;39090:10;39111:46;39153:3;39145:6;39111:46;:::i;:::-;39189:4;39184:3;39180:14;39166:28;;39021:179;;;;:::o;39206:113::-;39276:4;39308;39303:3;39299:14;39291:22;;39206:113;;;:::o;39355:732::-;39474:3;39503:54;39551:5;39503:54;:::i;:::-;39573:86;39652:6;39647:3;39573:86;:::i;:::-;39566:93;;39683:56;39733:5;39683:56;:::i;:::-;39762:7;39793:1;39778:284;39803:6;39800:1;39797:13;39778:284;;;39879:6;39873:13;39906:63;39965:3;39950:13;39906:63;:::i;:::-;39899:70;;39992:60;40045:6;39992:60;:::i;:::-;39982:70;;39838:224;39825:1;39822;39818:9;39813:14;;39778:284;;;39782:14;40078:3;40071:10;;39479:608;;;39355:732;;;;:::o;40093:831::-;40356:4;40394:3;40383:9;40379:19;40371:27;;40408:71;40476:1;40465:9;40461:17;40452:6;40408:71;:::i;:::-;40489:80;40565:2;40554:9;40550:18;40541:6;40489:80;:::i;:::-;40616:9;40610:4;40606:20;40601:2;40590:9;40586:18;40579:48;40644:108;40747:4;40738:6;40644:108;:::i;:::-;40636:116;;40762:72;40830:2;40819:9;40815:18;40806:6;40762:72;:::i;:::-;40844:73;40912:3;40901:9;40897:19;40888:6;40844:73;:::i;:::-;40093:831;;;;;;;;:::o;40930:807::-;41179:4;41217:3;41206:9;41202:19;41194:27;;41231:71;41299:1;41288:9;41284:17;41275:6;41231:71;:::i;:::-;41312:72;41380:2;41369:9;41365:18;41356:6;41312:72;:::i;:::-;41394:80;41470:2;41459:9;41455:18;41446:6;41394:80;:::i;:::-;41484;41560:2;41549:9;41545:18;41536:6;41484:80;:::i;:::-;41574:73;41642:3;41631:9;41627:19;41618:6;41574:73;:::i;:::-;41657;41725:3;41714:9;41710:19;41701:6;41657:73;:::i;:::-;40930:807;;;;;;;;;:::o;41743:143::-;41800:5;41831:6;41825:13;41816:22;;41847:33;41874:5;41847:33;:::i;:::-;41743:143;;;;:::o;41892:663::-;41980:6;41988;41996;42045:2;42033:9;42024:7;42020:23;42016:32;42013:119;;;42051:79;;:::i;:::-;42013:119;42171:1;42196:64;42252:7;42243:6;42232:9;42228:22;42196:64;:::i;:::-;42186:74;;42142:128;42309:2;42335:64;42391:7;42382:6;42371:9;42367:22;42335:64;:::i;:::-;42325:74;;42280:129;42448:2;42474:64;42530:7;42521:6;42510:9;42506:22;42474:64;:::i;:::-;42464:74;;42419:129;41892:663;;;;;:::o

Swarm Source

ipfs://8521e2c1769f102104eec3e91ef8ac1607c5b8a0e16e9eced70efe24f2272dea

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.