ETH Price: $3,442.60 (-1.01%)
Gas: 4 Gwei

Token

Krypto Pets (KPETS)
 

Overview

Max Total Supply

1,000,000,000,000,000 KPETS

Holders

302

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
3,237,669,467,548 KPETS

Value
$0.00
0x63BcadF3A14E1967d66886E7249327414136B8B0
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
KryptoPets

Compiler Version
v0.8.13+commit.abaa5c0e

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-05-20
*/

// SPDX-License-Identifier: MIT

pragma solidity 0.8.13;

interface IERC20 {
	function totalSupply() external view returns (uint256);

	function balanceOf(address account) external view returns (uint256);

	function transfer(address recipient, uint256 amount)
	external
	returns (bool);

	function allowance(address owner, address spender)
	external
	view
	returns (uint256);

	function approve(address spender, uint256 amount) external returns (bool);

	function transferFrom(
		address sender,
		address recipient,
		uint256 amount
	) external returns (bool);

	event Transfer(address indexed from, address indexed to, uint256 value);

	event Approval(
		address indexed owner,
		address indexed spender,
		uint256 value
	);
}

interface IFactory {
	function createPair(address tokenA, address tokenB)
	external
	returns (address pair);

	function getPair(address tokenA, address tokenB)
	external
	view
	returns (address pair);
}

interface IRouter {
	function factory() external pure returns (address);

	function WETH() external pure returns (address);

	function addLiquidityETH(
		address token,
		uint256 amountTokenDesired,
		uint256 amountTokenMin,
		uint256 amountETHMin,
		address to,
		uint256 deadline
	)
	external
	payable
	returns (
		uint256 amountToken,
		uint256 amountETH,
		uint256 liquidity
	);

	function swapExactETHForTokensSupportingFeeOnTransferTokens(
		uint256 amountOutMin,
		address[] calldata path,
		address to,
		uint256 deadline
	) external payable;

	function swapExactTokensForETHSupportingFeeOnTransferTokens(
		uint256 amountIn,
		uint256 amountOutMin,
		address[] calldata path,
		address to,
		uint256 deadline
	) external;
}

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

interface DividendPayingTokenInterface {
	function dividendOf(address _owner) external view returns(uint256);
	function withdrawDividend() external;
	event DividendsDistributed(
		address indexed from,
		uint256 weiAmount
	);
	event DividendWithdrawn(
		address indexed to,
		uint256 weiAmount
	);
}

interface DividendPayingTokenOptionalInterface {
	function withdrawableDividendOf(address _owner) external view returns(uint256);
	function withdrawnDividendOf(address _owner) external view returns(uint256);
	function accumulativeDividendOf(address _owner) external view returns(uint256);
}

library SafeMath {
	function add(uint256 a, uint256 b) internal pure returns (uint256) {
		uint256 c = a + b;
		require(c >= a, "SafeMath: addition overflow");

		return c;
	}

	function sub(uint256 a, uint256 b) internal pure returns (uint256) {
		return sub(a, b, "SafeMath: subtraction overflow");
	}

	function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
		require(b <= a, errorMessage);
		uint256 c = a - b;

		return c;
	}

	function mul(uint256 a, uint256 b) internal pure returns (uint256) {
		// Gas optimization: this is cheaper than requiring 'a' not being zero, but the
		// benefit is lost if 'b' is also tested.
		// See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
		if (a == 0) {
			return 0;
		}

		uint256 c = a * b;
		require(c / a == b, "SafeMath: multiplication overflow");

		return c;
	}

	function div(uint256 a, uint256 b) internal pure returns (uint256) {
		return div(a, b, "SafeMath: division by zero");
	}

	function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
		require(b > 0, errorMessage);
		uint256 c = a / b;
		// assert(a == b * c + a % b); // There is no case in which this doesn't hold

		return c;
	}

	function mod(uint256 a, uint256 b) internal pure returns (uint256) {
		return mod(a, b, "SafeMath: modulo by zero");
	}

	function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
		require(b != 0, errorMessage);
		return a % b;
	}
}

library SafeMathInt {
	int256 private constant MIN_INT256 = int256(1) << 255;
	int256 private constant MAX_INT256 = ~(int256(1) << 255);

	function mul(int256 a, int256 b) internal pure returns (int256) {
		int256 c = a * b;

		// Detect overflow when multiplying MIN_INT256 with -1
		require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256));
		require((b == 0) || (c / b == a));
		return c;
	}
	function div(int256 a, int256 b) internal pure returns (int256) {
		// Prevent overflow when dividing MIN_INT256 by -1
		require(b != -1 || a != MIN_INT256);

		// Solidity already throws when dividing by 0.
		return a / b;
	}
	function sub(int256 a, int256 b) internal pure returns (int256) {
		int256 c = a - b;
		require((b >= 0 && c <= a) || (b < 0 && c > a));
		return c;
	}
	function add(int256 a, int256 b) internal pure returns (int256) {
		int256 c = a + b;
		require((b >= 0 && c >= a) || (b < 0 && c < a));
		return c;
	}
	function abs(int256 a) internal pure returns (int256) {
		require(a != MIN_INT256);
		return a < 0 ? -a : a;
	}
	function toUint256Safe(int256 a) internal pure returns (uint256) {
		require(a >= 0);
		return uint256(a);
	}
}

library SafeMathUint {
	function toInt256Safe(uint256 a) internal pure returns (int256) {
		int256 b = int256(a);
		require(b >= 0);
		return b;
	}
}

library IterableMapping {
	struct Map {
		address[] keys;
		mapping(address => uint) values;
		mapping(address => uint) indexOf;
		mapping(address => bool) inserted;
	}

	function get(Map storage map, address key) public view returns (uint) {
		return map.values[key];
	}

	function getIndexOfKey(Map storage map, address key) public view returns (int) {
		if(!map.inserted[key]) {
			return -1;
		}
		return int(map.indexOf[key]);
	}

	function getKeyAtIndex(Map storage map, uint index) public view returns (address) {
		return map.keys[index];
	}

	function size(Map storage map) public view returns (uint) {
		return map.keys.length;
	}

	function set(Map storage map, address key, uint val) public {
		if (map.inserted[key]) {
			map.values[key] = val;
		} else {
			map.inserted[key] = true;
			map.values[key] = val;
			map.indexOf[key] = map.keys.length;
			map.keys.push(key);
		}
	}

	function remove(Map storage map, address key) public {
		if (!map.inserted[key]) {
			return;
		}

		delete map.inserted[key];
		delete map.values[key];

		uint index = map.indexOf[key];
		uint lastIndex = map.keys.length - 1;
		address lastKey = map.keys[lastIndex];

		map.indexOf[lastKey] = index;
		delete map.indexOf[key];

		map.keys[index] = lastKey;
		map.keys.pop();
	}
}

abstract contract Context {
	function _msgSender() internal view virtual returns (address) {
		return msg.sender;
	}

	function _msgData() internal view virtual returns (bytes calldata) {
		this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
		return msg.data;
	}
}

contract Ownable is Context {
	address private _owner;

	event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

	constructor () {
		address msgSender = _msgSender();
		_owner = msgSender;
		emit OwnershipTransferred(address(0), msgSender);
	}

	function owner() public view returns (address) {
		return _owner;
	}

	modifier onlyOwner() {
		require(_owner == _msgSender(), "Ownable: caller is not the owner");
		_;
	}

	function renounceOwnership() public virtual onlyOwner {
		emit OwnershipTransferred(_owner, address(0));
		_owner = address(0);
	}

	function transferOwnership(address newOwner) public virtual onlyOwner {
		require(newOwner != address(0), "Ownable: new owner is the zero address");
		emit OwnershipTransferred(_owner, newOwner);
		_owner = newOwner;
	}
}

contract ERC20 is Context, IERC20, IERC20Metadata {
	using SafeMath for uint256;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	function _approve(
		address owner,
		address spender,
		uint256 amount
	) internal virtual {
		require(owner != address(0), "ERC20: approve from the zero address");
		require(spender != address(0), "ERC20: approve to the zero address");
		_allowances[owner][spender] = amount;
		emit Approval(owner, spender, amount);
	}

	function _beforeTokenTransfer(
		address from,
		address to,
		uint256 amount
	) internal virtual {}
}

contract DividendPayingToken is ERC20, Ownable, DividendPayingTokenInterface, DividendPayingTokenOptionalInterface {
	using SafeMath for uint256;
	using SafeMathUint for uint256;
	using SafeMathInt for int256;

	uint256 constant internal magnitude = 2**128;
	uint256 internal magnifiedDividendPerShare;
	uint256 public totalDividendsDistributed;
    address public rewardToken;

	mapping(address => int256) internal magnifiedDividendCorrections;
	mapping(address => uint256) internal withdrawnDividends;

	constructor(string memory _name, string memory _symbol) ERC20(_name, _symbol) {}

	receive() external payable {}

	function distributeDividendsUsingAmount(uint256 amount) public onlyOwner {
		require(totalSupply() > 0);
		if (amount > 0) {
			magnifiedDividendPerShare = magnifiedDividendPerShare.add((amount).mul(magnitude) / totalSupply());
			emit DividendsDistributed(msg.sender, amount);
			totalDividendsDistributed = totalDividendsDistributed.add(amount);
		}
	}
	function withdrawDividend() public virtual override {
		_withdrawDividendOfUser(payable(msg.sender));
	}
	function _withdrawDividendOfUser(address payable user) internal returns (uint256) {
		uint256 _withdrawableDividend = withdrawableDividendOf(user);
		if (_withdrawableDividend > 0) {
			withdrawnDividends[user] = withdrawnDividends[user].add(_withdrawableDividend);
			emit DividendWithdrawn(user, _withdrawableDividend);
            (bool success) = IERC20(rewardToken).transfer(user, _withdrawableDividend);
            if(!success) {
                withdrawnDividends[user] = withdrawnDividends[user].sub(_withdrawableDividend);
                return 0;
            }
            return _withdrawableDividend;
		}
		return 0;
	}
	function dividendOf(address _owner) public view override returns(uint256) {
		return withdrawableDividendOf(_owner);
	}
	function withdrawableDividendOf(address _owner) public view override returns(uint256) {
		return accumulativeDividendOf(_owner).sub(withdrawnDividends[_owner]);
	}
	function withdrawnDividendOf(address _owner) public view override returns(uint256) {
		return withdrawnDividends[_owner];
	}
	function accumulativeDividendOf(address _owner) public view override returns(uint256) {
		return magnifiedDividendPerShare.mul(balanceOf(_owner)).toInt256Safe()
		.add(magnifiedDividendCorrections[_owner]).toUint256Safe() / magnitude;
	}
	function _transfer(address from, address to, uint256 value) internal virtual override {
		require(false);
		int256 _magCorrection = magnifiedDividendPerShare.mul(value).toInt256Safe();
		magnifiedDividendCorrections[from] = magnifiedDividendCorrections[from].add(_magCorrection);
		magnifiedDividendCorrections[to] = magnifiedDividendCorrections[to].sub(_magCorrection);
	}
	function _mint(address account, uint256 value) internal override {
		super._mint(account, value);
		magnifiedDividendCorrections[account] = magnifiedDividendCorrections[account]
		.sub( (magnifiedDividendPerShare.mul(value)).toInt256Safe() );
	}
	function _burn(address account, uint256 value) internal override {
		super._burn(account, value);
		magnifiedDividendCorrections[account] = magnifiedDividendCorrections[account]
		.add( (magnifiedDividendPerShare.mul(value)).toInt256Safe() );
	}
	function _setBalance(address account, uint256 newBalance) internal {
		uint256 currentBalance = balanceOf(account);
		if(newBalance > currentBalance) {
			uint256 mintAmount = newBalance.sub(currentBalance);
			_mint(account, mintAmount);
		} else if(newBalance < currentBalance) {
			uint256 burnAmount = currentBalance.sub(newBalance);
			_burn(account, burnAmount);
		}
	}
    function _setRewardToken(address token) internal onlyOwner {
		rewardToken = token;
	}
}

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

	string private constant _name = "Krypto Pets";
	string private constant _symbol = "KPETS";
	uint8 private constant _decimals = 18;

	KryptoPetsDividendTracker public dividendTracker;

	bool public isTradingEnabled;
	uint256 private _tradingPausedTimestamp;

	// initialSupply
	uint256 constant initialSupply = 1000000000000000 * (10**18);

	// max wallet is 2% of initialSupply
	uint256 public maxWalletAmount = initialSupply * 200 / 10000;

    // max tx is 1% of initialSupply
	uint256 public maxTxAmount = initialSupply * 100 / 10000;

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

	address public liquidityWallet;
	address public devWallet;
	address public buyBackWallet;
    address public gamingWallet;

	struct CustomTaxPeriod {
		bytes23 periodName;
		uint8 blocksInPeriod;
		uint256 timeInPeriod;
		uint256 liquidityFeeOnBuy;
		uint256 liquidityFeeOnSell;
		uint256 devFeeOnBuy;
		uint256 devFeeOnSell;
		uint256 buyBackFeeOnBuy;
		uint256 buyBackFeeOnSell;
        uint256 gamingFeeOnBuy;
		uint256 gamingFeeOnSell;
		uint256 holdersFeeOnBuy;
		uint256 holdersFeeOnSell;
	}

	// Launch taxes
	uint256 private _launchTimestamp;
	uint256 private _launchBlockNumber;

    // Base taxes
	CustomTaxPeriod private _base = CustomTaxPeriod('base',0,0,100,100,550,550,200,200,150,150,200,200);

    mapping (address => bool) private _isAllowedToTradeWhenDisabled;
	mapping (address => bool) private _feeOnSelectedWalletTransfers;
	mapping (address => bool) private _isExcludedFromFee;
	mapping (address => bool) private _isExcludedFromMaxWalletLimit;
    mapping (address => bool) private _isExcludedFromMaxTransactionLimit;
	mapping (address => bool) public automatedMarketMakerPairs;

	uint256 private _liquidityFee;
	uint256 private _devFee;
	uint256 private _buyBackFee;
    uint256 private _gamingFee;
	uint256 private _holdersFee;
	uint256 private _totalFee;

	event AutomatedMarketMakerPairChange(address indexed pair, bool indexed value);
	event UniswapV2RouterChange(address indexed newAddress, address indexed oldAddress);
	event WalletChange(string indexed walletIdentifier, address indexed newWallet, address indexed oldWallet);
	event FeeChange(string indexed identifier, uint256 liquidityFee, uint256 devFee, uint256 buyBackFee, uint256 gamingFee, uint256 holdersFee);
	event CustomTaxPeriodChange(uint256 indexed newValue, uint256 indexed oldValue, string indexed taxType, bytes23 period);
	event AllowedWhenTradingDisabledChange(address indexed account, bool isExcluded);
    event MinTokenAmountBeforeSwapChange(uint256 indexed newValue, uint256 indexed oldValue);
    event ExcludeFromFeesChange(address indexed account, bool isExcluded);
	event ExcludeFromMaxWalletChange(address indexed account, bool isExcluded);
    event ExcludeFromMaxTransferChange(address indexed account, bool isExcluded);
    event FeeOnSelectedWalletTransfersChange(address indexed account, bool newValue);
	event DividendsSent(uint256 tokensSwapped);
	event SwapAndLiquify(uint256 tokensSwapped, uint256 ethReceived,uint256 tokensIntoLiqudity);
    event ClaimETHOverflow(uint256 amount);
	event FeesApplied(uint256 liquidityFee, uint256 devFee, uint256 buyBackFee, uint256 gamingFee, uint256 holdersFee, uint256 totalFee);

	constructor() ERC20(_name, _symbol) {
        liquidityWallet = owner();
        devWallet = owner();
	    buyBackWallet = owner();
        gamingWallet = owner();

		dividendTracker = new KryptoPetsDividendTracker();
		dividendTracker.setRewardToken(address(this));

		IRouter _uniswapV2Router = IRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); // Mainnet
		address _uniswapV2Pair = IFactory(_uniswapV2Router.factory()).createPair(
			address(this),
			_uniswapV2Router.WETH()
		);
		uniswapV2Router = _uniswapV2Router;
		uniswapV2Pair = _uniswapV2Pair;
		_setAutomatedMarketMakerPair(_uniswapV2Pair, true);

		_isExcludedFromFee[owner()] = true;
		_isExcludedFromFee[address(this)] = true;
		_isExcludedFromFee[address(dividendTracker)] = true;

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

		dividendTracker.excludeFromDividends(address(dividendTracker));
		dividendTracker.excludeFromDividends(address(this));
		dividendTracker.excludeFromDividends(address(0x000000000000000000000000000000000000dEaD));
		dividendTracker.excludeFromDividends(owner());
		dividendTracker.excludeFromDividends(address(_uniswapV2Router));

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

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

		_mint(owner(), initialSupply);
	}

	receive() external payable {}

	// Setters
	function activateTrading() external onlyOwner {
		isTradingEnabled = true;
		if (_launchTimestamp == 0) {
			_launchTimestamp = block.timestamp;
			_launchBlockNumber = block.number;
		}
	}
	function deactivateTrading() external onlyOwner {
		isTradingEnabled = false;
	}
	function _setAutomatedMarketMakerPair(address pair, bool value) private {
		require(automatedMarketMakerPairs[pair] != value, "KryptoPets: Automated market maker pair is already set to that value");
		automatedMarketMakerPairs[pair] = value;
		if(value) {
			dividendTracker.excludeFromDividends(pair);
		}
		emit AutomatedMarketMakerPairChange(pair, value);
	}
    function allowTradingWhenDisabled(address account, bool allowed) external onlyOwner {
		_isAllowedToTradeWhenDisabled[account] = allowed;
		emit AllowedWhenTradingDisabledChange(account, allowed);
	}
	function excludeFromFees(address account, bool excluded) external onlyOwner {
		require(_isExcludedFromFee[account] != excluded, "KryptoPets: Account is already the value of 'excluded'");
		_isExcludedFromFee[account] = excluded;
		emit ExcludeFromFeesChange(account, excluded);
	}
	function excludeFromDividends(address account) external onlyOwner {
		dividendTracker.excludeFromDividends(account);
	}
	function excludeFromMaxWalletLimit(address account, bool excluded) external onlyOwner {
		require(_isExcludedFromMaxWalletLimit[account] != excluded, "KryptoPets: Account is already the value of 'excluded'");
		_isExcludedFromMaxWalletLimit[account] = excluded;
		emit ExcludeFromMaxWalletChange(account, excluded);
	}
	function excludeFromMaxTransactionLimit(address account, bool excluded) external onlyOwner {
		require(_isExcludedFromMaxTransactionLimit[account] != excluded, "KryptoPets: Account is already the value of 'excluded'");
		_isExcludedFromMaxTransactionLimit[account] = excluded;
		emit ExcludeFromMaxTransferChange(account, excluded);
	}
	function setWallets(address newLiquidityWallet, address newDevWallet, address newBuyBackWallet, address newGamingWallet) external onlyOwner {
		if(liquidityWallet != newLiquidityWallet) {
			require(newLiquidityWallet != address(0), "KryptoPets: The liquidityWallet cannot be 0");
			emit WalletChange('liquidityWallet', newLiquidityWallet, liquidityWallet);
			liquidityWallet = newLiquidityWallet;
		}
		if(devWallet != newDevWallet) {
			require(newDevWallet != address(0), "KryptoPets: The devWallet cannot be 0");
			emit WalletChange('devWallet', newDevWallet, devWallet);
			devWallet = newDevWallet;
		}
		if(buyBackWallet != newBuyBackWallet) {
			require(newBuyBackWallet != address(0), "KryptoPets: The buyBackWallet cannot be 0");
			emit WalletChange('buyBackWallet', newBuyBackWallet, buyBackWallet);
			buyBackWallet = newBuyBackWallet;
		}
        if(gamingWallet != newGamingWallet) {
			require(newGamingWallet != address(0), "KryptoPets: The gamingWallet cannot be 0");
			emit WalletChange('gamingWallet', newGamingWallet, gamingWallet);
			gamingWallet = newGamingWallet;
		}
	}
	// Base Fees
	function setBaseFeesOnBuy(uint256 _liquidityFeeOnBuy, uint256 _devFeeOnBuy, uint256 _buyBackFeeOnBuy, uint256 _gamingFeeOnBuy, uint256 _holdersFeeOnBuy) external onlyOwner {
		_setCustomBuyTaxPeriod(_base, _liquidityFeeOnBuy, _devFeeOnBuy, _buyBackFeeOnBuy, _gamingFeeOnBuy, _holdersFeeOnBuy);
		emit FeeChange('baseFees-Buy', _liquidityFeeOnBuy, _devFeeOnBuy, _buyBackFeeOnBuy, _gamingFeeOnBuy, _holdersFeeOnBuy);
	}
	function setBaseFeesOnSell(uint256 _liquidityFeeOnSell, uint256 _devFeeOnSell, uint256 _buyBackFeeOnSell, uint256 _gamingFeeOnSell, uint256 _holdersFeeOnSell) external onlyOwner {
		_setCustomSellTaxPeriod(_base, _liquidityFeeOnSell, _devFeeOnSell, _buyBackFeeOnSell, _gamingFeeOnSell, _holdersFeeOnSell);
		emit FeeChange('baseFees-Sell', _liquidityFeeOnSell, _devFeeOnSell, _buyBackFeeOnSell, _gamingFeeOnSell, _holdersFeeOnSell);
	}
	function setUniswapRouter(address newAddress) external onlyOwner {
		require(newAddress != address(uniswapV2Router), "KryptoPets: The router already has that address");
		emit UniswapV2RouterChange(newAddress, address(uniswapV2Router));
		uniswapV2Router = IRouter(newAddress);
	}
	function setMinimumTokensBeforeSwap(uint256 newValue) external onlyOwner {
		require(newValue != minimumTokensBeforeSwap, "KryptoPets: Cannot update minimumTokensBeforeSwap to same value");
		emit MinTokenAmountBeforeSwapChange(newValue, minimumTokensBeforeSwap);
		minimumTokensBeforeSwap = newValue;
	}
    function setFeeOnSelectedWalletTransfers(address account, bool value) external onlyOwner {
		require(_feeOnSelectedWalletTransfers[account] != value, "KryptoPets: The selected wallet is already set to the value ");
		_feeOnSelectedWalletTransfers[account] = value;
		emit FeeOnSelectedWalletTransfersChange(account, value);
	}
	function claim() external {
		dividendTracker.processAccount(payable(msg.sender), false);
	}
	function claimETHOverflow() external onlyOwner {
	    uint256 amount = address(this).balance;
        (bool success,) = address(owner()).call{value : amount}("");
        if (success){
            emit ClaimETHOverflow(amount);
        }
	}

	// Getters
	function getTotalDividendsDistributed() external view returns (uint256) {
		return dividendTracker.totalDividendsDistributed();
	}
	function getNumberOfDividendTokenHolders() external view returns(uint256) {
		return dividendTracker.getNumberOfTokenHolders();
	}
	function getBaseBuyFees() external view returns (uint256, uint256, uint256, uint256, uint256){
		return (_base.liquidityFeeOnBuy, _base.devFeeOnBuy, _base.buyBackFeeOnBuy, _base.gamingFeeOnBuy, _base.holdersFeeOnBuy);
	}
	function getBaseSellFees() external view returns (uint256, uint256, uint256, uint256, uint256){
		return (_base.liquidityFeeOnSell, _base.devFeeOnSell, _base.buyBackFeeOnSell, _base.gamingFeeOnSell, _base.holdersFeeOnSell);
	}

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

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

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

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

			}

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

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

			bool takeFee = !_swapping && isTradingEnabled;

			if(_isExcludedFromFee[from] || _isExcludedFromFee[to]){
				takeFee = false;
			}
			if (takeFee && _totalFee > 0) {
				uint256 fee = amount * _totalFee / 10000;
				amount = amount - fee;
				super._transfer(from, address(this), fee);
			}

			super._transfer(from, to, amount);

			try dividendTracker.setBalance(payable(from), balanceOf(from)) {} catch {}
			try dividendTracker.setBalance(payable(to), balanceOf(to)) {} catch {}
	}
	function _adjustTaxes(bool isBuyFromLp, bool isSelltoLp, address from, address to) private {
        _liquidityFee = 0;
		_devFee = 0;
		_buyBackFee = 0;
        _gamingFee = 0;
		_holdersFee = 0;

		if (isBuyFromLp) {
            if ((block.number - _launchBlockNumber) <= 5) {
				_liquidityFee = 100;
			} else {
                _liquidityFee = _base.liquidityFeeOnBuy;
                _devFee = _base.devFeeOnBuy;
                _buyBackFee = _base.buyBackFeeOnBuy;
                _gamingFee = _base.gamingFeeOnBuy;
                _holdersFee = _base.holdersFeeOnBuy;
            }
		}
	    if (isSelltoLp) {
			_liquidityFee = _base.liquidityFeeOnSell;
			_devFee = _base.devFeeOnSell;
			_buyBackFee = _base.buyBackFeeOnSell;
			_gamingFee = _base.gamingFeeOnSell;
			_holdersFee = _base.holdersFeeOnSell;
		}
        if (!isSelltoLp && !isBuyFromLp && (_feeOnSelectedWalletTransfers[from] || _feeOnSelectedWalletTransfers[to])) {
			_liquidityFee = _base.liquidityFeeOnSell;
			_devFee = _base.devFeeOnSell;
			_buyBackFee = _base.buyBackFeeOnSell;
			_gamingFee = _base.gamingFeeOnSell;
			_holdersFee = _base.holdersFeeOnSell;
		}
		_totalFee = _liquidityFee + _devFee + _buyBackFee + _gamingFee + _holdersFee;
		emit FeesApplied(_liquidityFee, _devFee, _buyBackFee, _gamingFee, _holdersFee, _totalFee);
	}
	function _setCustomSellTaxPeriod(CustomTaxPeriod storage map,
		uint256 _liquidityFeeOnSell,
		uint256 _devFeeOnSell,
		uint256 _buyBackFeeOnSell,
        uint256 _gamingFeeOnSell,
		uint256 _holdersFeeOnSell
	) private {
		if (map.liquidityFeeOnSell != _liquidityFeeOnSell) {
			emit CustomTaxPeriodChange(_liquidityFeeOnSell, map.liquidityFeeOnSell, 'liquidityFeeOnSell', map.periodName);
			map.liquidityFeeOnSell = _liquidityFeeOnSell;
		}
		if (map.devFeeOnSell != _devFeeOnSell) {
			emit CustomTaxPeriodChange(_devFeeOnSell, map.devFeeOnSell, 'devFeeOnSell', map.periodName);
			map.devFeeOnSell = _devFeeOnSell;
		}
		if (map.buyBackFeeOnSell != _buyBackFeeOnSell) {
			emit CustomTaxPeriodChange(_buyBackFeeOnSell, map.buyBackFeeOnSell, 'buyBackFeeOnSell', map.periodName);
			map.buyBackFeeOnSell = _buyBackFeeOnSell;
		}
        if (map.gamingFeeOnSell != _gamingFeeOnSell) {
			emit CustomTaxPeriodChange(_gamingFeeOnSell, map.gamingFeeOnSell, 'gamingFeeOnSell', map.periodName);
			map.gamingFeeOnSell = _gamingFeeOnSell;
		}
		if (map.holdersFeeOnSell != _holdersFeeOnSell) {
			emit CustomTaxPeriodChange(_holdersFeeOnSell, map.holdersFeeOnSell, 'holdersFeeOnSell', map.periodName);
			map.holdersFeeOnSell = _holdersFeeOnSell;
		}
	}
	function _setCustomBuyTaxPeriod(CustomTaxPeriod storage map,
		uint256 _liquidityFeeOnBuy,
		uint256 _devFeeOnBuy,
		uint256 _buyBackFeeOnBuy,
        uint256 _gamingFeeOnBuy,
		uint256 _holdersFeeOnBuy
		) private {
		if (map.liquidityFeeOnBuy != _liquidityFeeOnBuy) {
			emit CustomTaxPeriodChange(_liquidityFeeOnBuy, map.liquidityFeeOnBuy, 'liquidityFeeOnBuy', map.periodName);
			map.liquidityFeeOnBuy = _liquidityFeeOnBuy;
		}
		if (map.devFeeOnBuy != _devFeeOnBuy) {
			emit CustomTaxPeriodChange(_devFeeOnBuy, map.devFeeOnBuy, 'devFeeOnBuy', map.periodName);
			map.devFeeOnBuy = _devFeeOnBuy;
		}
		if (map.buyBackFeeOnBuy != _buyBackFeeOnBuy) {
			emit CustomTaxPeriodChange(_buyBackFeeOnBuy, map.buyBackFeeOnBuy, 'buyBackFeeOnBuy', map.periodName);
			map.buyBackFeeOnBuy = _buyBackFeeOnBuy;
		}
        if (map.gamingFeeOnBuy != _gamingFeeOnBuy) {
			emit CustomTaxPeriodChange(_gamingFeeOnBuy, map.gamingFeeOnBuy, 'gamingFeeOnBuy', map.periodName);
			map.gamingFeeOnBuy = _gamingFeeOnBuy;
		}
		if (map.holdersFeeOnBuy != _holdersFeeOnBuy) {
			emit CustomTaxPeriodChange(_holdersFeeOnBuy, map.holdersFeeOnBuy, 'holdersFeeOnBuy', map.periodName);
			map.holdersFeeOnBuy = _holdersFeeOnBuy;
		}
	}
	function _swapAndLiquify() private {
		uint256 contractBalance = balanceOf(address(this));
		uint256 initialETHBalance = address(this).balance;

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

		_swapTokensForETH(amountToSwap);

		uint256 ETHBalanceAfterSwap = address(this).balance - initialETHBalance;
		uint256 totalETHFee = _totalFee - (_liquidityFee / 2) - _holdersFee;
		uint256 amountETHLiquidity = ETHBalanceAfterSwap * _liquidityFee / totalETHFee / 2;
		uint256 amountETHDev = ETHBalanceAfterSwap * _devFee / totalETHFee;
		uint256 amountETHBuyBack = ETHBalanceAfterSwap * _buyBackFee / totalETHFee;
        uint256 amountETHGaming = ETHBalanceAfterSwap - (amountETHLiquidity + amountETHDev + amountETHBuyBack);

		payable(devWallet).transfer(amountETHDev);
		payable(buyBackWallet).transfer(amountETHBuyBack);
        payable(gamingWallet).transfer(amountETHGaming);

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

        (bool success) = IERC20(address(this)).transfer(address(dividendTracker), amountForHolders);
		if(success) {
			dividendTracker.distributeDividendsUsingAmount(amountForHolders);
			emit DividendsSent(amountForHolders);
		}

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

contract KryptoPetsDividendTracker is DividendPayingToken {
	using SafeMath for uint256;
	using SafeMathInt for int256;
	using IterableMapping for IterableMapping.Map;

	IterableMapping.Map private tokenHoldersMap;

	mapping (address => bool) public excludedFromDividends;
	mapping (address => uint256) public lastClaimTimes;
	uint256 public minimumTokenBalanceForDividends;

	event ExcludeFromDividends(address indexed account);
	event Claim(address indexed account, uint256 amount, bool indexed automatic);

	constructor() DividendPayingToken("KryptoPets_Dividend_Tracker", "KryptoPets_Dividend_Tracker") {
		minimumTokenBalanceForDividends = 0 * (10**18);
	}
    function setRewardToken(address token) external onlyOwner {
		_setRewardToken(token);
	}
	function _transfer(address, address, uint256) internal pure override {
		require(false, "KryptoPets_Dividend_Tracker: No transfers allowed");
	}
	function excludeFromDividends(address account) external onlyOwner {
		require(!excludedFromDividends[account]);
		excludedFromDividends[account] = true;
		_setBalance(account, 0);
		tokenHoldersMap.remove(account);
		emit ExcludeFromDividends(account);
	}
	function setTokenBalanceForDividends(uint256 newValue) external onlyOwner {
		require(minimumTokenBalanceForDividends != newValue, "KryptoPets_Dividend_Tracker: minimumTokenBalanceForDividends already the value of 'newValue'.");
		minimumTokenBalanceForDividends = newValue;
	}
	function getNumberOfTokenHolders() external view returns(uint256) {
		return tokenHoldersMap.keys.length;
	}
	function setBalance(address payable account, uint256 newBalance) external onlyOwner {
		if(excludedFromDividends[account]) {
			return;
		}
		if(newBalance >= minimumTokenBalanceForDividends) {
			_setBalance(account, newBalance);
			tokenHoldersMap.set(account, newBalance);
		}
		else {
			_setBalance(account, 0);
			tokenHoldersMap.remove(account);
		}
		processAccount(account, true);
	}
	function processAccount(address payable account, bool automatic) public onlyOwner returns (bool) {
		uint256 amount = _withdrawDividendOfUser(account);
		if(amount > 0) {
			lastClaimTimes[account] = block.timestamp;
			emit Claim(account, amount, automatic);
			return true;
		}
		return false;
	}
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"AllowedWhenTradingDisabledChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"AutomatedMarketMakerPairChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ClaimETHOverflow","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"oldValue","type":"uint256"},{"indexed":true,"internalType":"string","name":"taxType","type":"string"},{"indexed":false,"internalType":"bytes23","name":"period","type":"bytes23"}],"name":"CustomTaxPeriodChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"}],"name":"DividendsSent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFeesChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromMaxTransferChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromMaxWalletChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"string","name":"identifier","type":"string"},{"indexed":false,"internalType":"uint256","name":"liquidityFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"devFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"buyBackFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"gamingFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"holdersFee","type":"uint256"}],"name":"FeeChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"newValue","type":"bool"}],"name":"FeeOnSelectedWalletTransfersChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"liquidityFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"devFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"buyBackFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"gamingFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"holdersFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"totalFee","type":"uint256"}],"name":"FeesApplied","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"oldValue","type":"uint256"}],"name":"MinTokenAmountBeforeSwapChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UniswapV2RouterChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"string","name":"walletIdentifier","type":"string"},{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"WalletChange","type":"event"},{"inputs":[],"name":"activateTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"allowed","type":"bool"}],"name":"allowTradingWhenDisabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyBackWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimETHOverflow","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deactivateTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dividendTracker","outputs":[{"internalType":"contract KryptoPetsDividendTracker","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromDividends","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromMaxTransactionLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromMaxWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"gamingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBaseBuyFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBaseSellFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNumberOfDividendTokenHolders","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalDividendsDistributed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"isTradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumTokensBeforeSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityFeeOnBuy","type":"uint256"},{"internalType":"uint256","name":"_devFeeOnBuy","type":"uint256"},{"internalType":"uint256","name":"_buyBackFeeOnBuy","type":"uint256"},{"internalType":"uint256","name":"_gamingFeeOnBuy","type":"uint256"},{"internalType":"uint256","name":"_holdersFeeOnBuy","type":"uint256"}],"name":"setBaseFeesOnBuy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityFeeOnSell","type":"uint256"},{"internalType":"uint256","name":"_devFeeOnSell","type":"uint256"},{"internalType":"uint256","name":"_buyBackFeeOnSell","type":"uint256"},{"internalType":"uint256","name":"_gamingFeeOnSell","type":"uint256"},{"internalType":"uint256","name":"_holdersFeeOnSell","type":"uint256"}],"name":"setBaseFeesOnSell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setFeeOnSelectedWalletTransfers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setMinimumTokensBeforeSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"setUniswapRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newLiquidityWallet","type":"address"},{"internalType":"address","name":"newDevWallet","type":"address"},{"internalType":"address","name":"newBuyBackWallet","type":"address"},{"internalType":"address","name":"newGamingWallet","type":"address"}],"name":"setWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a0604052612710620000226d314dc6448d9338c15b0a0000000060c862000c30565b6200002e919062000c52565b6009556127106200004f6d314dc6448d9338c15b0a00000000606462000c30565b6200005b919062000c52565b600a556a14adf4b7320334b9000000600c55604080516101a081018252636261736560e01b81526000602082018190529181018290526064606082018190526080820181905261022660a0830181905260c0830181905260c860e0840181905261010084018190526096610120850181905261014085018190526101608501829052610180909401819052601380546001600160c01b031916636261736560981b179055601494909455601582905560169190915560178190556018556019829055601a829055601b819055601c55601d819055601e553480156200013f57600080fd5b50604080518082018252600b81526a4b727970746f205065747360a81b6020808301918252835180850190945260058452644b5045545360d81b908401528151919291620001909160039162000b66565b508051620001a690600490602084019062000b66565b5050506000620001bb6200088660201b60201c565b600580546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600554600d80546001600160a01b039092166001600160a01b03199283168117909155600e8054831682179055600f805483168217905560108054909216179055604051620002589062000bf5565b604051809103906000f08015801562000275573d6000803e3d6000fd5b50600780546001600160a01b0319166001600160a01b03929092169182179055604051638aee812760e01b8152306004820152638aee812790602401600060405180830381600087803b158015620002cc57600080fd5b505af1158015620002e1573d6000803e3d6000fd5b505050506000737a250d5630b4cf539739df2c5dacb4c659f2488d90506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200033f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000365919062000c75565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620003b3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003d9919062000c75565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000427573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200044d919062000c75565b600680546001600160a01b0319166001600160a01b038581169190911790915581166080529050620004818160016200088a565b6001602160006200049a6005546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff199687161790553081526021909352818320805485166001908117909155600754909116835290822080549093168117909255601f906200050a6005546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055308152601f909352918190208054909316600117909255600754915163031e79db60e41b8152911660048201819052906331e79db090602401600060405180830381600087803b1580156200058c57600080fd5b505af1158015620005a1573d6000803e3d6000fd5b505060075460405163031e79db60e41b81523060048201526001600160a01b0390911692506331e79db09150602401600060405180830381600087803b158015620005eb57600080fd5b505af115801562000600573d6000803e3d6000fd5b505060075460405163031e79db60e41b815261dead60048201526001600160a01b0390911692506331e79db09150602401600060405180830381600087803b1580156200064c57600080fd5b505af115801562000661573d6000803e3d6000fd5b50506007546001600160a01b031691506331e79db090506200068b6005546001600160a01b031690565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401600060405180830381600087803b158015620006cd57600080fd5b505af1158015620006e2573d6000803e3d6000fd5b505060075460405163031e79db60e41b81526001600160a01b03868116600483015290911692506331e79db09150602401600060405180830381600087803b1580156200072e57600080fd5b505af115801562000743573d6000803e3d6000fd5b505050506001600160a01b0381811660009081526022602081905260408083208054600160ff199182168117909255600754861685528285208054821683179055600654909516845281842080548616821790553084529083208054909416811790935590620007bb6005546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055600754909116815260239283905281812080548516600190811790915530825291812080549094168217909355916200082a6005546001600160a01b031690565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790556200087e620008696005546001600160a01b031690565b6d314dc6448d9338c15b0a0000000062000a00565b505062000cf7565b3390565b6001600160a01b03821660009081526024602052604090205481151560ff909116151503620009345760405162461bcd60e51b8152602060048201526044602482018190527f4b727970746f506574733a204175746f6d61746564206d61726b6574206d616b908201527f6572207061697220697320616c72656164792073657420746f20746861742076606482015263616c756560e01b608482015260a4015b60405180910390fd5b6001600160a01b0382166000908152602460205260409020805460ff19168215801591909117909155620009c45760075460405163031e79db60e41b81526001600160a01b038481166004830152909116906331e79db090602401600060405180830381600087803b158015620009aa57600080fd5b505af1158015620009bf573d6000803e3d6000fd5b505050505b604051811515906001600160a01b038416907fa666b9b2dc2c8f2d86fda7ba3a115be30d3a958fd84d359cbc6bc919df97990a90600090a35050565b6001600160a01b03821662000a585760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016200092b565b62000a748160025462000afc60201b620019011790919060201c565b6002556001600160a01b0382166000908152602081815260409091205462000aa79183906200190162000afc821b17901c565b6001600160a01b038316600081815260208181526040808320949094559251848152919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b60008062000b0b838562000ca0565b90508381101562000b5f5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016200092b565b9392505050565b82805462000b749062000cbb565b90600052602060002090601f01602090048101928262000b98576000855562000be3565b82601f1062000bb357805160ff191683800117855562000be3565b8280016001018555821562000be3579182015b8281111562000be357825182559160200191906001019062000bc6565b5062000bf192915062000c03565b5090565b611cba8062003f5083390190565b5b8082111562000bf1576000815560010162000c04565b634e487b7160e01b600052601160045260246000fd5b600081600019048311821515161562000c4d5762000c4d62000c1a565b500290565b60008262000c7057634e487b7160e01b600052601260045260246000fd5b500490565b60006020828403121562000c8857600080fd5b81516001600160a01b038116811462000b5f57600080fd5b6000821982111562000cb65762000cb662000c1a565b500190565b600181811c9082168062000cd057607f821691505b60208210810362000cf157634e487b7160e01b600052602260045260246000fd5b50919050565b60805161323d62000d1360003960006104c0015261323d6000f3fe6080604052600436106102765760003560e01c8063715018a61161014f578063aee50b1e116100c1578063d32215761161007a578063d322157614610776578063d469801614610796578063d4d493f4146107b6578063dd62ed3e146107d6578063f2fde38b1461081c578063fe0175351461083c57600080fd5b8063aee50b1e1461068b578063b62496f5146106ab578063bea9849e146106db578063c0246668146106fb578063cd43e2281461071b578063d2d7ad831461076057600080fd5b80638da5cb5b116101135780638da5cb5b146105e25780638ea5220f1461060057806395d89b4114610620578063a457c2d714610635578063a9059cbb14610655578063aa4bde281461067557600080fd5b8063715018a614610557578063781edb3c1461056c57806383672f3e1461058c578063880bcbc1146105ac5780638c0b5e22146105cc57600080fd5b806330bb4cff116101e857806345a42329116101ac57806345a423291461048e57806349bd5a5e146104ae5780634e71d92d146104e257806364b0f653146104f757806366164f6f1461050c57806370a082311461052157600080fd5b806330bb4cff14610408578063313ce5671461041d57806331e79db01461043957806334cf1fea14610459578063395093511461046e57600080fd5b80630e6318591161023a5780630e631859146103315780631694505e1461036957806318160ddd146103895780631cd348c0146103a857806323b872dd146103c85780632c1f5216146103e857600080fd5b8063064a59d01461028257806306fdde03146102b8578063095ea7b3146102da5780630bd05b69146102fa5780630c5cbd701461031157600080fd5b3661027d57005b600080fd5b34801561028e57600080fd5b506007546102a390600160a01b900460ff1681565b60405190151581526020015b60405180910390f35b3480156102c457600080fd5b506102cd61085d565b6040516102af9190612c49565b3480156102e657600080fd5b506102a36102f5366004612cb3565b6108ef565b34801561030657600080fd5b5061030f610905565b005b34801561031d57600080fd5b5061030f61032c366004612cdf565b610960565b34801561033d57600080fd5b50601054610351906001600160a01b031681565b6040516001600160a01b0390911681526020016102af565b34801561037557600080fd5b50600654610351906001600160a01b031681565b34801561039557600080fd5b506002545b6040519081526020016102af565b3480156103b457600080fd5b50600f54610351906001600160a01b031681565b3480156103d457600080fd5b506102a36103e3366004612d1a565b610a0f565b3480156103f457600080fd5b50600754610351906001600160a01b031681565b34801561041457600080fd5b5061039a610a78565b34801561042957600080fd5b50604051601281526020016102af565b34801561044557600080fd5b5061030f610454366004612d5b565b610aeb565b34801561046557600080fd5b5061030f610b77565b34801561047a57600080fd5b506102a3610489366004612cb3565b610bb0565b34801561049a57600080fd5b5061030f6104a9366004612d86565b610be6565b3480156104ba57600080fd5b506103517f000000000000000000000000000000000000000000000000000000000000000081565b3480156104ee57600080fd5b5061030f610d03565b34801561050357600080fd5b5061039a610d7b565b34801561051857600080fd5b5061030f610dc5565b34801561052d57600080fd5b5061039a61053c366004612d5b565b6001600160a01b031660009081526020819052604090205490565b34801561056357600080fd5b5061030f610e95565b34801561057857600080fd5b5061030f610587366004612d86565b610f09565b34801561059857600080fd5b5061030f6105a7366004612dbf565b610fcb565b3480156105b857600080fd5b5061030f6105c7366004612d86565b61137d565b3480156105d857600080fd5b5061039a600a5481565b3480156105ee57600080fd5b506005546001600160a01b0316610351565b34801561060c57600080fd5b50600e54610351906001600160a01b031681565b34801561062c57600080fd5b506102cd61143f565b34801561064157600080fd5b506102a3610650366004612cb3565b61144e565b34801561066157600080fd5b506102a3610670366004612cb3565b61149d565b34801561068157600080fd5b5061039a60095481565b34801561069757600080fd5b5061030f6106a6366004612e1b565b6114aa565b3480156106b757600080fd5b506102a36106c6366004612d5b565b60246020526000908152604090205460ff1681565b3480156106e757600080fd5b5061030f6106f6366004612d5b565b61157e565b34801561070757600080fd5b5061030f610716366004612d86565b61167b565b34801561072757600080fd5b50601554601754601954601b54601d545b604080519586526020860194909452928401919091526060830152608082015260a0016102af565b34801561076c57600080fd5b5061039a600c5481565b34801561078257600080fd5b5061030f610791366004612d86565b61173d565b3480156107a257600080fd5b50600d54610351906001600160a01b031681565b3480156107c257600080fd5b5061030f6107d1366004612cdf565b6117bf565b3480156107e257600080fd5b5061039a6107f1366004612e34565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561082857600080fd5b5061030f610837366004612d5b565b611816565b34801561084857600080fd5b50601654601854601a54601c54601e54610738565b60606003805461086c90612e62565b80601f016020809104026020016040519081016040528092919081815260200182805461089890612e62565b80156108e55780601f106108ba576101008083540402835291602001916108e5565b820191906000526020600020905b8154815290600101906020018083116108c857829003601f168201915b5050505050905090565b60006108fc338484611967565b50600192915050565b6005546001600160a01b031633146109385760405162461bcd60e51b815260040161092f90612e9c565b60405180910390fd5b6007805460ff60a01b1916600160a01b17905560115460000361095e5742601155436012555b565b6005546001600160a01b0316331461098a5760405162461bcd60e51b815260040161092f90612e9c565b61099960138686868686611a8c565b6040516b62617365466565732d42757960a01b8152600c015b60408051918290038220878352602083018790529082018590526060820184905260808201839052907f18313eafd26b263470e815300393e601ee24084135005dfe66a3bc4bbba795669060a00160405180910390a25050505050565b6000610a1c848484611cad565b610a6e8433610a698560405180606001604052806028815260200161319b602891396001600160a01b038a16600090815260016020908152604080832033845290915290205491906121d7565b611967565b5060019392505050565b600754604080516342d359d760e11b815290516000926001600160a01b0316916385a6b3ae9160048083019260209291908290030181865afa158015610ac2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ae69190612ed1565b905090565b6005546001600160a01b03163314610b155760405162461bcd60e51b815260040161092f90612e9c565b60075460405163031e79db60e41b81526001600160a01b038381166004830152909116906331e79db090602401600060405180830381600087803b158015610b5c57600080fd5b505af1158015610b70573d6000803e3d6000fd5b5050505050565b6005546001600160a01b03163314610ba15760405162461bcd60e51b815260040161092f90612e9c565b6007805460ff60a01b19169055565b3360008181526001602090815260408083206001600160a01b038716845290915281205490916108fc918590610a699086611901565b6005546001600160a01b03163314610c105760405162461bcd60e51b815260040161092f90612e9c565b6001600160a01b038216600090815260208052604090205481151560ff909116151503610ca55760405162461bcd60e51b815260206004820152603c60248201527f4b727970746f506574733a205468652073656c65637465642077616c6c65742060448201527f697320616c72656164792073657420746f207468652076616c75652000000000606482015260840161092f565b6001600160a01b03821660008181526020808052604091829020805460ff191685151590811790915591519182527fe70512a569cf898db2e20aa3b4cc3f0dd13377b82a493840d326ab5a1966687791015b60405180910390a25050565b60075460405163bc4c4b3760e01b8152336004820152600060248201526001600160a01b039091169063bc4c4b37906044016020604051808303816000875af1158015610d54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d789190612eea565b50565b600754604080516304ddf6ef60e11b815290516000926001600160a01b0316916309bbedde9160048083019260209291908290030181865afa158015610ac2573d6000803e3d6000fd5b6005546001600160a01b03163314610def5760405162461bcd60e51b815260040161092f90612e9c565b476000610e046005546001600160a01b031690565b6001600160a01b03168260405160006040518083038185875af1925050503d8060008114610e4e576040519150601f19603f3d011682016040523d82523d6000602084013e610e53565b606091505b505090508015610e91576040518281527f362ae087cf4ccfc970d45b9e8ce6520f03b4eda3f9d76a70b655dc22badcca489060200160405180910390a15b5050565b6005546001600160a01b03163314610ebf5760405162461bcd60e51b815260040161092f90612e9c565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b03163314610f335760405162461bcd60e51b815260040161092f90612e9c565b6001600160a01b03821660009081526022602052604090205481151560ff909116151503610f735760405162461bcd60e51b815260040161092f90612f07565b6001600160a01b038216600081815260226020908152604091829020805460ff191685151590811790915591519182527ff5133f371b17bf21ce0df4ae2c1b6e11ca7c2f27257eb55282edb1ccfd4ecb2e9101610cf7565b6005546001600160a01b03163314610ff55760405162461bcd60e51b815260040161092f90612e9c565b600d546001600160a01b038581169116146110db576001600160a01b0384166110745760405162461bcd60e51b815260206004820152602b60248201527f4b727970746f506574733a20546865206c697175696469747957616c6c65742060448201526a063616e6e6f7420626520360ac1b606482015260840161092f565b600d546040516e1b1a5c5d5a591a5d1e55d85b1b195d608a1b81526001600160a01b0391821691861690600f016040519081900381209060008051602061317b83398151915290600090a4600d80546001600160a01b0319166001600160a01b0386161790555b600e546001600160a01b038481169116146111b5576001600160a01b0383166111545760405162461bcd60e51b815260206004820152602560248201527f4b727970746f506574733a205468652064657657616c6c65742063616e6e6f74604482015264020626520360dc1b606482015260840161092f565b600e546040516819195d95d85b1b195d60ba1b81526001600160a01b03918216918516906009016040519081900381209060008051602061317b83398151915290600090a4600e80546001600160a01b0319166001600160a01b0385161790555b600f546001600160a01b03838116911614611297576001600160a01b0382166112325760405162461bcd60e51b815260206004820152602960248201527f4b727970746f506574733a20546865206275794261636b57616c6c657420636160448201526806e6e6f7420626520360bc1b606482015260840161092f565b600f546040516c189d5e509858dad5d85b1b195d609a1b81526001600160a01b0391821691841690600d016040519081900381209060008051602061317b83398151915290600090a4600f80546001600160a01b0319166001600160a01b0384161790555b6010546001600160a01b03828116911614611377576001600160a01b0381166113135760405162461bcd60e51b815260206004820152602860248201527f4b727970746f506574733a205468652067616d696e6757616c6c65742063616e60448201526706e6f7420626520360c41b606482015260840161092f565b6010546040516b19d85b5a5b99d5d85b1b195d60a21b81526001600160a01b0391821691831690600c016040519081900381209060008051602061317b83398151915290600090a4601080546001600160a01b0319166001600160a01b0383161790555b50505050565b6005546001600160a01b031633146113a75760405162461bcd60e51b815260040161092f90612e9c565b6001600160a01b03821660009081526023602052604090205481151560ff9091161515036113e75760405162461bcd60e51b815260040161092f90612f07565b6001600160a01b038216600081815260236020908152604091829020805460ff191685151590811790915591519182527f30098fc83ab61b1a98835d32c4e611adedccfc260eeef586bd329d48e8a40a409101610cf7565b60606004805461086c90612e62565b60006108fc3384610a69856040518060600160405280602581526020016131e3602591393360009081526001602090815260408083206001600160a01b038d16845290915290205491906121d7565b60006108fc338484611cad565b6005546001600160a01b031633146114d45760405162461bcd60e51b815260040161092f90612e9c565b600c54810361154b5760405162461bcd60e51b815260206004820152603f60248201527f4b727970746f506574733a2043616e6e6f7420757064617465206d696e696d7560448201527f6d546f6b656e734265666f72655377617020746f2073616d652076616c756500606482015260840161092f565b600c5460405182907f5b0491f767c1463bea8972339f785795be1a38784cc6483cf649cdcbb28c46b090600090a3600c55565b6005546001600160a01b031633146115a85760405162461bcd60e51b815260040161092f90612e9c565b6006546001600160a01b039081169082160361161e5760405162461bcd60e51b815260206004820152602f60248201527f4b727970746f506574733a2054686520726f7574657220616c7265616479206860448201526e61732074686174206164647265737360881b606482015260840161092f565b6006546040516001600160a01b03918216918316907f2afbff3ed601a8723765c7072d8ea8445e08f6f1874afd34a2b747a272c3ebad90600090a3600680546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146116a55760405162461bcd60e51b815260040161092f90612e9c565b6001600160a01b03821660009081526021602052604090205481151560ff9091161515036116e55760405162461bcd60e51b815260040161092f90612f07565b6001600160a01b038216600081815260216020908152604091829020805460ff191685151590811790915591519182527fa856ba9fdc54a5434b2359874c95612f520a2d7f858864ae98d15c1b2099ca8b9101610cf7565b6005546001600160a01b031633146117675760405162461bcd60e51b815260040161092f90612e9c565b6001600160a01b0382166000818152601f6020908152604091829020805460ff191685151590811790915591519182527fcb9f97b7b4b41413e5c8d418a8cf9a88db1cf34dee66b213d070faf881d9d3509101610cf7565b6005546001600160a01b031633146117e95760405162461bcd60e51b815260040161092f90612e9c565b6117f860138686868686612211565b6040516c18985cd95199595ccb54d95b1b609a1b8152600d016109b2565b6005546001600160a01b031633146118405760405162461bcd60e51b815260040161092f90612e9c565b6001600160a01b0381166118a55760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161092f565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b60008061190e8385612f73565b9050838110156119605760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015260640161092f565b9392505050565b6001600160a01b0383166119c95760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161092f565b6001600160a01b038216611a2a5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161092f565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b84866002015414611afa57604051706c69717569646974794665654f6e42757960781b8152601101604051908190038120600288015488549192909188916000805160206131c383398151915291611aea9160489190911b90612f8b565b60405180910390a4600286018590555b83866004015414611b62576040516a6465764665654f6e42757960a81b8152600b01604051908190038120600488015488549192909187916000805160206131c383398151915291611b529160489190911b90612f8b565b60405180910390a4600486018490555b82866006015414611bce576040516e6275794261636b4665654f6e42757960881b8152600f01604051908190038120600688015488549192909186916000805160206131c383398151915291611bbe9160489190911b90612f8b565b60405180910390a4600686018390555b81866008015414611c39576040516d67616d696e674665654f6e42757960901b8152600e01604051908190038120600888015488549192909185916000805160206131c383398151915291611c299160489190911b90612f8b565b60405180910390a4600886018290555b8086600a015414611ca5576040516e686f6c646572734665654f6e42757960881b8152600f01604051908190038120600a88015488549192909184916000805160206131c383398151915291611c959160489190911b90612f8b565b60405180910390a4600a86018190555b505050505050565b6001600160a01b038316611cd35760405162461bcd60e51b815260040161092f90612fa2565b6001600160a01b038216611cf95760405162461bcd60e51b815260040161092f90612fe7565b80600003611d1257611d0d83836000612436565b505050565b6001600160a01b03808416600081815260246020908152604080832054948716835280832054938352601f90915290205460ff928316929182169116158015611d7457506001600160a01b0384166000908152601f602052604090205460ff16155b15611f5c57600754600160a01b900460ff16611de55760405162461bcd60e51b815260206004820152602a60248201527f4b727970746f506574733a2054726164696e672069732063757272656e746c79604482015269103234b9b0b13632b21760b11b606482015260840161092f565b6001600160a01b03841660009081526023602052604090205460ff16158015611e2757506001600160a01b03851660009081526023602052604090205460ff16155b15611e9b57600a54831115611e9b5760405162461bcd60e51b815260206004820152603460248201527f4b727970746f506574733a205472616e7366657220616d6f756e74206578636560448201527332b239903a34329036b0bc2a3c20b6b7bab73a1760611b606482015260840161092f565b6001600160a01b03841660009081526022602052604090205460ff16611f5c5760095483611ede866001600160a01b031660009081526020819052604090205490565b611ee89190612f73565b1115611f5c5760405162461bcd60e51b815260206004820152603f60248201527f4b727970746f506574733a2045787065637465642077616c6c657420616d6f7560448201527f6e74206578636565647320746865206d617857616c6c6574416d6f756e742e00606482015260840161092f565b611f688282878761253f565b600c543060009081526020819052604090205460075491111590600160a01b900460ff168015611f955750805b8015611fa45750600b5460ff16155b8015611fb257506000602a54115b8015611fd657506001600160a01b03851660009081526024602052604090205460ff165b15611ffb57600b805460ff19166001179055611ff06126db565b600b805460ff191690555b600b5460009060ff1615801561201a5750600754600160a01b900460ff165b6001600160a01b03881660009081526021602052604090205490915060ff168061205c57506001600160a01b03861660009081526021602052604090205460ff165b15612065575060005b80801561207457506000602a54115b156120b1576000612710602a548761208c919061302a565b6120969190613049565b90506120a2818761306b565b95506120af883083612436565b505b6120bc878787612436565b6007546001600160a01b031663e30443bc886120ed816001600160a01b031660009081526020819052604090205490565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b15801561213357600080fd5b505af1925050508015612144575060015b506007546001600160a01b031663e30443bc87612176816001600160a01b031660009081526020819052604090205490565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b1580156121bc57600080fd5b505af19250505080156121cd575060015b5050505050505050565b600081848411156121fb5760405162461bcd60e51b815260040161092f9190612c49565b506000612208848661306b565b95945050505050565b8486600301541461228057604051711b1a5c5d5a591a5d1e51995953db94d95b1b60721b8152601201604051908190038120600388015488549192909188916000805160206131c3833981519152916122709160489190911b90612f8b565b60405180910390a4600386018590555b838660050154146122e9576040516b19195d91995953db94d95b1b60a21b8152600c01604051908190038120600588015488549192909187916000805160206131c3833981519152916122d99160489190911b90612f8b565b60405180910390a4600586018490555b82866007015414612356576040516f189d5e509858dad1995953db94d95b1b60821b8152601001604051908190038120600788015488549192909186916000805160206131c3833981519152916123469160489190911b90612f8b565b60405180910390a4600786018390555b818660090154146123c2576040516e19d85b5a5b99d1995953db94d95b1b608a1b8152600f01604051908190038120600988015488549192909185916000805160206131c3833981519152916123b29160489190911b90612f8b565b60405180910390a4600986018290555b8086600b015414611ca5576040516f1a1bdb19195c9cd1995953db94d95b1b60821b8152601001604051908190038120600b88015488549192909184916000805160206131c38339815191529161241f9160489190911b90612f8b565b60405180910390a4600b8601819055505050505050565b6001600160a01b03831661245c5760405162461bcd60e51b815260040161092f90612fa2565b6001600160a01b0382166124825760405162461bcd60e51b815260040161092f90612fe7565b6124bf81604051806060016040528060268152602001613155602691396001600160a01b03861660009081526020819052604090205491906121d7565b6001600160a01b0380851660009081526020819052604080822093909355908416815220546124ee9082611901565b6001600160a01b038381166000818152602081815260409182902094909455518481529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101611a7f565b60006025819055602681905560278190556028819055602955831561259c5760056012544361256e919061306b565b1161257d57606460255561259c565b601554602555601754602655601954602755601b54602855601d546029555b82156125c157601654602555601854602655601a54602755601c54602855601e546029555b821580156125cd575083155b801561261157506001600160a01b038216600090815260208052604090205460ff168061261157506001600160a01b038116600090815260208052604090205460ff165b1561263557601654602555601854602655601a54602755601c54602855601e546029555b60295460285460275460265460255461264e9190612f73565b6126589190612f73565b6126629190612f73565b61266c9190612f73565b602a819055602554602654602754602854602954604080519586526020860194909452928401919091526060830152608082015260a08101919091527f24b7b85246369f5fb87526971064f357b39a0f399bca1c50e11af8c3c8f4bbd69060c00160405180910390a150505050565b30600090815260208190526040812054602a54602554919247926002908390612704908761302a565b61270e9190613049565b6127189190613049565b90506000602a546029548661272d919061302a565b6127379190613049565b9050600081612746848861306b565b612750919061306b565b905061275b81612a4a565b6000612767864761306b565b90506000602954600260255461277d9190613049565b602a5461278a919061306b565b612794919061306b565b90506000600282602554856127a9919061302a565b6127b39190613049565b6127bd9190613049565b9050600082602654856127d0919061302a565b6127da9190613049565b9050600083602754866127ed919061302a565b6127f79190613049565b90506000816128068486612f73565b6128109190612f73565b61281a908761306b565b600e546040519192506001600160a01b03169084156108fc029085906000818181858888f19350505050158015612855573d6000803e3d6000fd5b50600f546040516001600160a01b039091169083156108fc029084906000818181858888f19350505050158015612890573d6000803e3d6000fd5b506010546040516001600160a01b039091169082156108fc029083906000818181858888f193505050501580156128cb573d6000803e3d6000fd5b50881561291e576128dc8985612b9c565b60408051888152602081018690529081018a90527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15b60075460405163a9059cbb60e01b81526001600160a01b03909116600482015260248101899052600090309063a9059cbb906044016020604051808303816000875af1158015612972573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129969190612eea565b90508015612a3657600754604051636bf5ecd560e01b8152600481018b90526001600160a01b0390911690636bf5ecd590602401600060405180830381600087803b1580156129e457600080fd5b505af11580156129f8573d6000803e3d6000fd5b505050507fa4049db804d87a845be4dd8b54ae7048131238fba985dd37234309ac8668d96989604051612a2d91815260200190565b60405180910390a15b505050602a97909755505050505050505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612a7f57612a7f613082565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612ad8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612afc9190613098565b81600181518110612b0f57612b0f613082565b6001600160a01b039283166020918202929092010152600654612b359130911684611967565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac94790612b6e9085906000908690309042906004016130b5565b600060405180830381600087803b158015612b8857600080fd5b505af1158015611ca5573d6000803e3d6000fd5b600654612bb49030906001600160a01b031684611967565b600654600d5460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af1158015612c24573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610b709190613126565b600060208083528351808285015260005b81811015612c7657858101830151858201604001528201612c5a565b81811115612c88576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114610d7857600080fd5b60008060408385031215612cc657600080fd5b8235612cd181612c9e565b946020939093013593505050565b600080600080600060a08688031215612cf757600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b600080600060608486031215612d2f57600080fd5b8335612d3a81612c9e565b92506020840135612d4a81612c9e565b929592945050506040919091013590565b600060208284031215612d6d57600080fd5b813561196081612c9e565b8015158114610d7857600080fd5b60008060408385031215612d9957600080fd5b8235612da481612c9e565b91506020830135612db481612d78565b809150509250929050565b60008060008060808587031215612dd557600080fd5b8435612de081612c9e565b93506020850135612df081612c9e565b92506040850135612e0081612c9e565b91506060850135612e1081612c9e565b939692955090935050565b600060208284031215612e2d57600080fd5b5035919050565b60008060408385031215612e4757600080fd5b8235612e5281612c9e565b91506020830135612db481612c9e565b600181811c90821680612e7657607f821691505b602082108103612e9657634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600060208284031215612ee357600080fd5b5051919050565b600060208284031215612efc57600080fd5b815161196081612d78565b60208082526036908201527f4b727970746f506574733a204163636f756e7420697320616c7265616479207460408201527568652076616c7565206f6620276578636c756465642760501b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b60008219821115612f8657612f86612f5d565b500190565b68ffffffffffffffffff1991909116815260200190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b600081600019048311821515161561304457613044612f5d565b500290565b60008261306657634e487b7160e01b600052601260045260246000fd5b500490565b60008282101561307d5761307d612f5d565b500390565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156130aa57600080fd5b815161196081612c9e565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156131055784516001600160a01b0316835293830193918301916001016130e0565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561313b57600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e63654af24be54adc5e716fbcaa3fca0ad593e28dff90dffd49487c0a33b1547c6b5245524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636500edc71549f0cbe47086c2237ce0cf874d6897fd1d7ce43ee6b65c0230d7606e45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122026410120d9d4aa68e66c09ac6fc23fd6dbd3f226995099dd881380e8e1ba93d264736f6c634300080d003360806040523480156200001157600080fd5b50604080518082018252601b8082527f4b727970746f506574735f4469766964656e645f547261636b65720000000000602080840182815285518087019096529285528401528151919291839183916200006e91600391620000f8565b50805162000084906004906020840190620000f8565b505050600062000099620000f460201b60201c565b600580546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35050600060115550620001da565b3390565b82805462000106906200019e565b90600052602060002090601f0160209004810192826200012a576000855562000175565b82601f106200014557805160ff191683800117855562000175565b8280016001018555821562000175579182015b828111156200017557825182559160200191906001019062000158565b506200018392915062000187565b5090565b5b8082111562000183576000815560010162000188565b600181811c90821680620001b357607f821691505b602082108103620001d457634e487b7160e01b600052602260045260246000fd5b50919050565b611ad080620001ea6000396000f3fe6080604052600436106101dc5760003560e01c8063715018a611610102578063a9059cbb11610095578063dd62ed3e11610064578063dd62ed3e1461057b578063e30443bc146105c1578063f2fde38b146105e1578063f7c618c11461060157600080fd5b8063a9059cbb146104ef578063aafd847a1461050f578063bc4c4b3714610545578063be10b6141461056557600080fd5b806391b89fba116100d157806391b89fba1461047a57806395d89b411461049a578063a457c2d7146104af578063a8b9d240146104cf57600080fd5b8063715018a6146103fd57806385a6b3ae146104125780638aee8127146104285780638da5cb5b1461044857600080fd5b806327ce01471161017a5780634e7b827f116101495780634e7b827f146103625780636a474002146103925780636bf5ecd5146103a757806370a08231146103c757600080fd5b806327ce0147146102e6578063313ce5671461030657806331e79db014610322578063395093511461034257600080fd5b8063163c7cef116101b6578063163c7cef1461026257806318160ddd14610284578063226cfa3d1461029957806323b872dd146102c657600080fd5b806306fdde03146101e8578063095ea7b31461021357806309bbedde1461024357600080fd5b366101e357005b600080fd5b3480156101f457600080fd5b506101fd610621565b60405161020a9190611717565b60405180910390f35b34801561021f57600080fd5b5061023361022e366004611781565b6106b3565b604051901515815260200161020a565b34801561024f57600080fd5b50600b545b60405190815260200161020a565b34801561026e57600080fd5b5061028261027d3660046117ad565b6106ca565b005b34801561029057600080fd5b50600254610254565b3480156102a557600080fd5b506102546102b43660046117c6565b60106020526000908152604090205481565b3480156102d257600080fd5b506102336102e13660046117e3565b61079f565b3480156102f257600080fd5b506102546103013660046117c6565b610808565b34801561031257600080fd5b506040516012815260200161020a565b34801561032e57600080fd5b5061028261033d3660046117c6565b610864565b34801561034e57600080fd5b5061023361035d366004611781565b61098b565b34801561036e57600080fd5b5061023361037d3660046117c6565b600f6020526000908152604090205460ff1681565b34801561039e57600080fd5b506102826109c1565b3480156103b357600080fd5b506102826103c23660046117ad565b6109cd565b3480156103d357600080fd5b506102546103e23660046117c6565b6001600160a01b031660009081526020819052604090205490565b34801561040957600080fd5b50610282610a8a565b34801561041e57600080fd5b5061025460075481565b34801561043457600080fd5b506102826104433660046117c6565b610afe565b34801561045457600080fd5b506005546001600160a01b03165b6040516001600160a01b03909116815260200161020a565b34801561048657600080fd5b506102546104953660046117c6565b610b31565b3480156104a657600080fd5b506101fd610b3c565b3480156104bb57600080fd5b506102336104ca366004611781565b610b4b565b3480156104db57600080fd5b506102546104ea3660046117c6565b610b9a565b3480156104fb57600080fd5b5061023361050a366004611781565b610bc6565b34801561051b57600080fd5b5061025461052a3660046117c6565b6001600160a01b03166000908152600a602052604090205490565b34801561055157600080fd5b50610233610560366004611832565b610bd3565b34801561057157600080fd5b5061025460115481565b34801561058757600080fd5b5061025461059636600461186b565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b3480156105cd57600080fd5b506102826105dc366004611781565b610c81565b3480156105ed57600080fd5b506102826105fc3660046117c6565b610deb565b34801561060d57600080fd5b50600854610462906001600160a01b031681565b60606003805461063090611899565b80601f016020809104026020016040519081016040528092919081815260200182805461065c90611899565b80156106a95780601f1061067e576101008083540402835291602001916106a9565b820191906000526020600020905b81548152906001019060200180831161068c57829003601f168201915b5050505050905090565b60006106c0338484610ed6565b5060015b92915050565b6005546001600160a01b031633146106fd5760405162461bcd60e51b81526004016106f4906118d3565b60405180910390fd5b806011540361079a5760405162461bcd60e51b815260206004820152605d60248201527f4b727970746f506574735f4469766964656e645f547261636b65723a206d696e60448201527f696d756d546f6b656e42616c616e6365466f724469766964656e647320616c7260648201527f65616479207468652076616c7565206f6620276e657756616c7565272e000000608482015260a4016106f4565b601155565b60006107ac848484610ffa565b6107fe84336107f985604051806060016040528060288152602001611a4e602891396001600160a01b038a166000908152600160209081526040808320338452909152902054919061105c565b610ed6565b5060019392505050565b6001600160a01b03811660009081526009602090815260408083205491839052822054600654600160801b9261085a926108559261084f9161084a9190611096565b61111f565b9061112f565b61116d565b6106c4919061191e565b6005546001600160a01b0316331461088e5760405162461bcd60e51b81526004016106f4906118d3565b6001600160a01b0381166000908152600f602052604090205460ff16156108b457600080fd5b6001600160a01b0381166000908152600f60205260408120805460ff191660011790556108e2908290611180565b60405163131836e760e21b8152600b60048201526001600160a01b03821660248201527340b9b9f5e17316717b0032d562c2d2d82e61b2f890634c60db9c9060440160006040518083038186803b15801561093c57600080fd5b505af4158015610950573d6000803e3d6000fd5b50506040516001600160a01b03841692507fa878b31040b2e6d0a9a3d3361209db3908ba62014b0dca52adbaee451d128b259150600090a250565b3360008181526001602090815260408083206001600160a01b038716845290915281205490916106c09185906107f990866111e5565b6109ca33611244565b50565b6005546001600160a01b031633146109f75760405162461bcd60e51b81526004016106f4906118d3565b6000610a0260025490565b11610a0c57600080fd5b80156109ca57610a3f610a1e60025490565b610a2c83600160801b611096565b610a36919061191e565b600654906111e5565b60065560405181815233907fa493a9229478c3fcd73f66d2cdeb7f94fd0f341da924d1054236d784541165119060200160405180910390a2600754610a8490826111e5565b60075550565b6005546001600160a01b03163314610ab45760405162461bcd60e51b81526004016106f4906118d3565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b03163314610b285760405162461bcd60e51b81526004016106f4906118d3565b6109ca816113a9565b60006106c482610b9a565b60606004805461063090611899565b60006106c033846107f985604051806060016040528060258152602001611a76602591393360009081526001602090815260408083206001600160a01b038d168452909152902054919061105c565b6001600160a01b0381166000908152600a60205260408120546106c490610bc084610808565b906113f5565b60006106c0338484610ffa565b6005546000906001600160a01b03163314610c005760405162461bcd60e51b81526004016106f4906118d3565b6000610c0b84611244565b90508015610c77576001600160a01b038416600081815260106020526040908190204290555184151591907fa2c38e2d2fb7e3e1912d937fd1ca11ed6d51864dee4cfa7a7bf02becd7acf09290610c659085815260200190565b60405180910390a360019150506106c4565b5060009392505050565b6005546001600160a01b03163314610cab5760405162461bcd60e51b81526004016106f4906118d3565b6001600160a01b0382166000908152600f602052604090205460ff16610de7576011548110610d5c57610cde8282611180565b604051632f0ad01760e21b8152600b60048201526001600160a01b0383166024820152604481018290527340b9b9f5e17316717b0032d562c2d2d82e61b2f89063bc2b405c9060640160006040518083038186803b158015610d3f57600080fd5b505af4158015610d53573d6000803e3d6000fd5b50505050610dda565b610d67826000611180565b60405163131836e760e21b8152600b60048201526001600160a01b03831660248201527340b9b9f5e17316717b0032d562c2d2d82e61b2f890634c60db9c9060440160006040518083038186803b158015610dc157600080fd5b505af4158015610dd5573d6000803e3d6000fd5b505050505b610de5826001610bd3565b505b5050565b6005546001600160a01b03163314610e155760405162461bcd60e51b81526004016106f4906118d3565b6001600160a01b038116610e7a5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016106f4565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038316610f385760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016106f4565b6001600160a01b038216610f995760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016106f4565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60405162461bcd60e51b815260206004820152603160248201527f4b727970746f506574735f4469766964656e645f547261636b65723a204e6f206044820152701d1c985b9cd9995c9cc8185b1b1bddd959607a1b60648201526084016106f4565b600081848411156110805760405162461bcd60e51b81526004016106f49190611717565b50600061108d8486611940565b95945050505050565b6000826000036110a8575060006106c4565b60006110b48385611957565b9050826110c1858361191e565b146111185760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084016106f4565b9392505050565b600081818112156106c457600080fd5b60008061113c8385611976565b90506000831215801561114f5750838112155b80611164575060008312801561116457508381125b61111857600080fd5b60008082121561117c57600080fd5b5090565b6001600160a01b038216600090815260208190526040902054808211156111bf5760006111ad83836113f5565b90506111b98482611437565b50610de5565b80821015610de55760006111d382846113f5565b90506111df848261149b565b50505050565b6000806111f283856119b7565b9050838110156111185760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016106f4565b60008061125083610b9a565b905080156113a0576001600160a01b0383166000908152600a602052604090205461127b90826111e5565b6001600160a01b0384166000818152600a6020526040908190209290925590517fee503bee2bb6a87e57bc57db795f98137327401a0e7b7ce42e37926cc1a9ca4d906112ca9084815260200190565b60405180910390a260085460405163a9059cbb60e01b81526001600160a01b03858116600483015260248201849052600092169063a9059cbb906044016020604051808303816000875af1158015611326573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061134a91906119cf565b905080611399576001600160a01b0384166000908152600a602052604090205461137490836113f5565b6001600160a01b039094166000908152600a6020526040812094909455509192915050565b5092915050565b50600092915050565b6005546001600160a01b031633146113d35760405162461bcd60e51b81526004016106f4906118d3565b600880546001600160a01b0319166001600160a01b0392909216919091179055565b600061111883836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061105c565b61144182826114df565b61147b61145c61084a8360065461109690919063ffffffff16565b6001600160a01b038416600090815260096020526040902054906115ca565b6001600160a01b0390921660009081526009602052604090209190915550565b6114a58282611607565b61147b6114c061084a8360065461109690919063ffffffff16565b6001600160a01b0384166000908152600960205260409020549061112f565b6001600160a01b0382166115355760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016106f4565b61154160008383610de5565b60025461154e90826111e5565b6002556001600160a01b03821660009081526020819052604090205461157490826111e5565b6001600160a01b038316600081815260208181526040808320949094559251848152919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91015b60405180910390a35050565b6000806115d783856119ec565b9050600083121580156115ea5750838113155b806111645750600083128015611164575083811361111857600080fd5b6001600160a01b0382166116675760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016106f4565b61167382600083610de5565b6116b081604051806060016040528060228152602001611a2c602291396001600160a01b038516600090815260208190526040902054919061105c565b6001600160a01b0383166000908152602081905260409020556002546116d690826113f5565b6002556040518181526000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016115be565b600060208083528351808285015260005b8181101561174457858101830151858201604001528201611728565b81811115611756576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b03811681146109ca57600080fd5b6000806040838503121561179457600080fd5b823561179f8161176c565b946020939093013593505050565b6000602082840312156117bf57600080fd5b5035919050565b6000602082840312156117d857600080fd5b81356111188161176c565b6000806000606084860312156117f857600080fd5b83356118038161176c565b925060208401356118138161176c565b929592945050506040919091013590565b80151581146109ca57600080fd5b6000806040838503121561184557600080fd5b82356118508161176c565b9150602083013561186081611824565b809150509250929050565b6000806040838503121561187e57600080fd5b82356118898161176c565b915060208301356118608161176c565b600181811c908216806118ad57607f821691505b6020821081036118cd57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60008261193b57634e487b7160e01b600052601260045260246000fd5b500490565b60008282101561195257611952611908565b500390565b600081600019048311821515161561197157611971611908565b500290565b600080821280156001600160ff1b038490038513161561199857611998611908565b600160ff1b83900384128116156119b1576119b1611908565b50500190565b600082198211156119ca576119ca611908565b500190565b6000602082840312156119e157600080fd5b815161111881611824565b60008083128015600160ff1b850184121615611a0a57611a0a611908565b6001600160ff1b0384018313811615611a2557611a25611908565b5050039056fe45524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220b840af986d900c869a423c0c769cdd6bd4dd6c0c330362f62d04cd99032a901764736f6c634300080d0033

Deployed Bytecode

0x6080604052600436106102765760003560e01c8063715018a61161014f578063aee50b1e116100c1578063d32215761161007a578063d322157614610776578063d469801614610796578063d4d493f4146107b6578063dd62ed3e146107d6578063f2fde38b1461081c578063fe0175351461083c57600080fd5b8063aee50b1e1461068b578063b62496f5146106ab578063bea9849e146106db578063c0246668146106fb578063cd43e2281461071b578063d2d7ad831461076057600080fd5b80638da5cb5b116101135780638da5cb5b146105e25780638ea5220f1461060057806395d89b4114610620578063a457c2d714610635578063a9059cbb14610655578063aa4bde281461067557600080fd5b8063715018a614610557578063781edb3c1461056c57806383672f3e1461058c578063880bcbc1146105ac5780638c0b5e22146105cc57600080fd5b806330bb4cff116101e857806345a42329116101ac57806345a423291461048e57806349bd5a5e146104ae5780634e71d92d146104e257806364b0f653146104f757806366164f6f1461050c57806370a082311461052157600080fd5b806330bb4cff14610408578063313ce5671461041d57806331e79db01461043957806334cf1fea14610459578063395093511461046e57600080fd5b80630e6318591161023a5780630e631859146103315780631694505e1461036957806318160ddd146103895780631cd348c0146103a857806323b872dd146103c85780632c1f5216146103e857600080fd5b8063064a59d01461028257806306fdde03146102b8578063095ea7b3146102da5780630bd05b69146102fa5780630c5cbd701461031157600080fd5b3661027d57005b600080fd5b34801561028e57600080fd5b506007546102a390600160a01b900460ff1681565b60405190151581526020015b60405180910390f35b3480156102c457600080fd5b506102cd61085d565b6040516102af9190612c49565b3480156102e657600080fd5b506102a36102f5366004612cb3565b6108ef565b34801561030657600080fd5b5061030f610905565b005b34801561031d57600080fd5b5061030f61032c366004612cdf565b610960565b34801561033d57600080fd5b50601054610351906001600160a01b031681565b6040516001600160a01b0390911681526020016102af565b34801561037557600080fd5b50600654610351906001600160a01b031681565b34801561039557600080fd5b506002545b6040519081526020016102af565b3480156103b457600080fd5b50600f54610351906001600160a01b031681565b3480156103d457600080fd5b506102a36103e3366004612d1a565b610a0f565b3480156103f457600080fd5b50600754610351906001600160a01b031681565b34801561041457600080fd5b5061039a610a78565b34801561042957600080fd5b50604051601281526020016102af565b34801561044557600080fd5b5061030f610454366004612d5b565b610aeb565b34801561046557600080fd5b5061030f610b77565b34801561047a57600080fd5b506102a3610489366004612cb3565b610bb0565b34801561049a57600080fd5b5061030f6104a9366004612d86565b610be6565b3480156104ba57600080fd5b506103517f00000000000000000000000081ebb1575f6f28f1110b41c0d242c9f1ecffd79181565b3480156104ee57600080fd5b5061030f610d03565b34801561050357600080fd5b5061039a610d7b565b34801561051857600080fd5b5061030f610dc5565b34801561052d57600080fd5b5061039a61053c366004612d5b565b6001600160a01b031660009081526020819052604090205490565b34801561056357600080fd5b5061030f610e95565b34801561057857600080fd5b5061030f610587366004612d86565b610f09565b34801561059857600080fd5b5061030f6105a7366004612dbf565b610fcb565b3480156105b857600080fd5b5061030f6105c7366004612d86565b61137d565b3480156105d857600080fd5b5061039a600a5481565b3480156105ee57600080fd5b506005546001600160a01b0316610351565b34801561060c57600080fd5b50600e54610351906001600160a01b031681565b34801561062c57600080fd5b506102cd61143f565b34801561064157600080fd5b506102a3610650366004612cb3565b61144e565b34801561066157600080fd5b506102a3610670366004612cb3565b61149d565b34801561068157600080fd5b5061039a60095481565b34801561069757600080fd5b5061030f6106a6366004612e1b565b6114aa565b3480156106b757600080fd5b506102a36106c6366004612d5b565b60246020526000908152604090205460ff1681565b3480156106e757600080fd5b5061030f6106f6366004612d5b565b61157e565b34801561070757600080fd5b5061030f610716366004612d86565b61167b565b34801561072757600080fd5b50601554601754601954601b54601d545b604080519586526020860194909452928401919091526060830152608082015260a0016102af565b34801561076c57600080fd5b5061039a600c5481565b34801561078257600080fd5b5061030f610791366004612d86565b61173d565b3480156107a257600080fd5b50600d54610351906001600160a01b031681565b3480156107c257600080fd5b5061030f6107d1366004612cdf565b6117bf565b3480156107e257600080fd5b5061039a6107f1366004612e34565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561082857600080fd5b5061030f610837366004612d5b565b611816565b34801561084857600080fd5b50601654601854601a54601c54601e54610738565b60606003805461086c90612e62565b80601f016020809104026020016040519081016040528092919081815260200182805461089890612e62565b80156108e55780601f106108ba576101008083540402835291602001916108e5565b820191906000526020600020905b8154815290600101906020018083116108c857829003601f168201915b5050505050905090565b60006108fc338484611967565b50600192915050565b6005546001600160a01b031633146109385760405162461bcd60e51b815260040161092f90612e9c565b60405180910390fd5b6007805460ff60a01b1916600160a01b17905560115460000361095e5742601155436012555b565b6005546001600160a01b0316331461098a5760405162461bcd60e51b815260040161092f90612e9c565b61099960138686868686611a8c565b6040516b62617365466565732d42757960a01b8152600c015b60408051918290038220878352602083018790529082018590526060820184905260808201839052907f18313eafd26b263470e815300393e601ee24084135005dfe66a3bc4bbba795669060a00160405180910390a25050505050565b6000610a1c848484611cad565b610a6e8433610a698560405180606001604052806028815260200161319b602891396001600160a01b038a16600090815260016020908152604080832033845290915290205491906121d7565b611967565b5060019392505050565b600754604080516342d359d760e11b815290516000926001600160a01b0316916385a6b3ae9160048083019260209291908290030181865afa158015610ac2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ae69190612ed1565b905090565b6005546001600160a01b03163314610b155760405162461bcd60e51b815260040161092f90612e9c565b60075460405163031e79db60e41b81526001600160a01b038381166004830152909116906331e79db090602401600060405180830381600087803b158015610b5c57600080fd5b505af1158015610b70573d6000803e3d6000fd5b5050505050565b6005546001600160a01b03163314610ba15760405162461bcd60e51b815260040161092f90612e9c565b6007805460ff60a01b19169055565b3360008181526001602090815260408083206001600160a01b038716845290915281205490916108fc918590610a699086611901565b6005546001600160a01b03163314610c105760405162461bcd60e51b815260040161092f90612e9c565b6001600160a01b038216600090815260208052604090205481151560ff909116151503610ca55760405162461bcd60e51b815260206004820152603c60248201527f4b727970746f506574733a205468652073656c65637465642077616c6c65742060448201527f697320616c72656164792073657420746f207468652076616c75652000000000606482015260840161092f565b6001600160a01b03821660008181526020808052604091829020805460ff191685151590811790915591519182527fe70512a569cf898db2e20aa3b4cc3f0dd13377b82a493840d326ab5a1966687791015b60405180910390a25050565b60075460405163bc4c4b3760e01b8152336004820152600060248201526001600160a01b039091169063bc4c4b37906044016020604051808303816000875af1158015610d54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d789190612eea565b50565b600754604080516304ddf6ef60e11b815290516000926001600160a01b0316916309bbedde9160048083019260209291908290030181865afa158015610ac2573d6000803e3d6000fd5b6005546001600160a01b03163314610def5760405162461bcd60e51b815260040161092f90612e9c565b476000610e046005546001600160a01b031690565b6001600160a01b03168260405160006040518083038185875af1925050503d8060008114610e4e576040519150601f19603f3d011682016040523d82523d6000602084013e610e53565b606091505b505090508015610e91576040518281527f362ae087cf4ccfc970d45b9e8ce6520f03b4eda3f9d76a70b655dc22badcca489060200160405180910390a15b5050565b6005546001600160a01b03163314610ebf5760405162461bcd60e51b815260040161092f90612e9c565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b03163314610f335760405162461bcd60e51b815260040161092f90612e9c565b6001600160a01b03821660009081526022602052604090205481151560ff909116151503610f735760405162461bcd60e51b815260040161092f90612f07565b6001600160a01b038216600081815260226020908152604091829020805460ff191685151590811790915591519182527ff5133f371b17bf21ce0df4ae2c1b6e11ca7c2f27257eb55282edb1ccfd4ecb2e9101610cf7565b6005546001600160a01b03163314610ff55760405162461bcd60e51b815260040161092f90612e9c565b600d546001600160a01b038581169116146110db576001600160a01b0384166110745760405162461bcd60e51b815260206004820152602b60248201527f4b727970746f506574733a20546865206c697175696469747957616c6c65742060448201526a063616e6e6f7420626520360ac1b606482015260840161092f565b600d546040516e1b1a5c5d5a591a5d1e55d85b1b195d608a1b81526001600160a01b0391821691861690600f016040519081900381209060008051602061317b83398151915290600090a4600d80546001600160a01b0319166001600160a01b0386161790555b600e546001600160a01b038481169116146111b5576001600160a01b0383166111545760405162461bcd60e51b815260206004820152602560248201527f4b727970746f506574733a205468652064657657616c6c65742063616e6e6f74604482015264020626520360dc1b606482015260840161092f565b600e546040516819195d95d85b1b195d60ba1b81526001600160a01b03918216918516906009016040519081900381209060008051602061317b83398151915290600090a4600e80546001600160a01b0319166001600160a01b0385161790555b600f546001600160a01b03838116911614611297576001600160a01b0382166112325760405162461bcd60e51b815260206004820152602960248201527f4b727970746f506574733a20546865206275794261636b57616c6c657420636160448201526806e6e6f7420626520360bc1b606482015260840161092f565b600f546040516c189d5e509858dad5d85b1b195d609a1b81526001600160a01b0391821691841690600d016040519081900381209060008051602061317b83398151915290600090a4600f80546001600160a01b0319166001600160a01b0384161790555b6010546001600160a01b03828116911614611377576001600160a01b0381166113135760405162461bcd60e51b815260206004820152602860248201527f4b727970746f506574733a205468652067616d696e6757616c6c65742063616e60448201526706e6f7420626520360c41b606482015260840161092f565b6010546040516b19d85b5a5b99d5d85b1b195d60a21b81526001600160a01b0391821691831690600c016040519081900381209060008051602061317b83398151915290600090a4601080546001600160a01b0319166001600160a01b0383161790555b50505050565b6005546001600160a01b031633146113a75760405162461bcd60e51b815260040161092f90612e9c565b6001600160a01b03821660009081526023602052604090205481151560ff9091161515036113e75760405162461bcd60e51b815260040161092f90612f07565b6001600160a01b038216600081815260236020908152604091829020805460ff191685151590811790915591519182527f30098fc83ab61b1a98835d32c4e611adedccfc260eeef586bd329d48e8a40a409101610cf7565b60606004805461086c90612e62565b60006108fc3384610a69856040518060600160405280602581526020016131e3602591393360009081526001602090815260408083206001600160a01b038d16845290915290205491906121d7565b60006108fc338484611cad565b6005546001600160a01b031633146114d45760405162461bcd60e51b815260040161092f90612e9c565b600c54810361154b5760405162461bcd60e51b815260206004820152603f60248201527f4b727970746f506574733a2043616e6e6f7420757064617465206d696e696d7560448201527f6d546f6b656e734265666f72655377617020746f2073616d652076616c756500606482015260840161092f565b600c5460405182907f5b0491f767c1463bea8972339f785795be1a38784cc6483cf649cdcbb28c46b090600090a3600c55565b6005546001600160a01b031633146115a85760405162461bcd60e51b815260040161092f90612e9c565b6006546001600160a01b039081169082160361161e5760405162461bcd60e51b815260206004820152602f60248201527f4b727970746f506574733a2054686520726f7574657220616c7265616479206860448201526e61732074686174206164647265737360881b606482015260840161092f565b6006546040516001600160a01b03918216918316907f2afbff3ed601a8723765c7072d8ea8445e08f6f1874afd34a2b747a272c3ebad90600090a3600680546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146116a55760405162461bcd60e51b815260040161092f90612e9c565b6001600160a01b03821660009081526021602052604090205481151560ff9091161515036116e55760405162461bcd60e51b815260040161092f90612f07565b6001600160a01b038216600081815260216020908152604091829020805460ff191685151590811790915591519182527fa856ba9fdc54a5434b2359874c95612f520a2d7f858864ae98d15c1b2099ca8b9101610cf7565b6005546001600160a01b031633146117675760405162461bcd60e51b815260040161092f90612e9c565b6001600160a01b0382166000818152601f6020908152604091829020805460ff191685151590811790915591519182527fcb9f97b7b4b41413e5c8d418a8cf9a88db1cf34dee66b213d070faf881d9d3509101610cf7565b6005546001600160a01b031633146117e95760405162461bcd60e51b815260040161092f90612e9c565b6117f860138686868686612211565b6040516c18985cd95199595ccb54d95b1b609a1b8152600d016109b2565b6005546001600160a01b031633146118405760405162461bcd60e51b815260040161092f90612e9c565b6001600160a01b0381166118a55760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161092f565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b60008061190e8385612f73565b9050838110156119605760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015260640161092f565b9392505050565b6001600160a01b0383166119c95760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161092f565b6001600160a01b038216611a2a5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161092f565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b84866002015414611afa57604051706c69717569646974794665654f6e42757960781b8152601101604051908190038120600288015488549192909188916000805160206131c383398151915291611aea9160489190911b90612f8b565b60405180910390a4600286018590555b83866004015414611b62576040516a6465764665654f6e42757960a81b8152600b01604051908190038120600488015488549192909187916000805160206131c383398151915291611b529160489190911b90612f8b565b60405180910390a4600486018490555b82866006015414611bce576040516e6275794261636b4665654f6e42757960881b8152600f01604051908190038120600688015488549192909186916000805160206131c383398151915291611bbe9160489190911b90612f8b565b60405180910390a4600686018390555b81866008015414611c39576040516d67616d696e674665654f6e42757960901b8152600e01604051908190038120600888015488549192909185916000805160206131c383398151915291611c299160489190911b90612f8b565b60405180910390a4600886018290555b8086600a015414611ca5576040516e686f6c646572734665654f6e42757960881b8152600f01604051908190038120600a88015488549192909184916000805160206131c383398151915291611c959160489190911b90612f8b565b60405180910390a4600a86018190555b505050505050565b6001600160a01b038316611cd35760405162461bcd60e51b815260040161092f90612fa2565b6001600160a01b038216611cf95760405162461bcd60e51b815260040161092f90612fe7565b80600003611d1257611d0d83836000612436565b505050565b6001600160a01b03808416600081815260246020908152604080832054948716835280832054938352601f90915290205460ff928316929182169116158015611d7457506001600160a01b0384166000908152601f602052604090205460ff16155b15611f5c57600754600160a01b900460ff16611de55760405162461bcd60e51b815260206004820152602a60248201527f4b727970746f506574733a2054726164696e672069732063757272656e746c79604482015269103234b9b0b13632b21760b11b606482015260840161092f565b6001600160a01b03841660009081526023602052604090205460ff16158015611e2757506001600160a01b03851660009081526023602052604090205460ff16155b15611e9b57600a54831115611e9b5760405162461bcd60e51b815260206004820152603460248201527f4b727970746f506574733a205472616e7366657220616d6f756e74206578636560448201527332b239903a34329036b0bc2a3c20b6b7bab73a1760611b606482015260840161092f565b6001600160a01b03841660009081526022602052604090205460ff16611f5c5760095483611ede866001600160a01b031660009081526020819052604090205490565b611ee89190612f73565b1115611f5c5760405162461bcd60e51b815260206004820152603f60248201527f4b727970746f506574733a2045787065637465642077616c6c657420616d6f7560448201527f6e74206578636565647320746865206d617857616c6c6574416d6f756e742e00606482015260840161092f565b611f688282878761253f565b600c543060009081526020819052604090205460075491111590600160a01b900460ff168015611f955750805b8015611fa45750600b5460ff16155b8015611fb257506000602a54115b8015611fd657506001600160a01b03851660009081526024602052604090205460ff165b15611ffb57600b805460ff19166001179055611ff06126db565b600b805460ff191690555b600b5460009060ff1615801561201a5750600754600160a01b900460ff165b6001600160a01b03881660009081526021602052604090205490915060ff168061205c57506001600160a01b03861660009081526021602052604090205460ff165b15612065575060005b80801561207457506000602a54115b156120b1576000612710602a548761208c919061302a565b6120969190613049565b90506120a2818761306b565b95506120af883083612436565b505b6120bc878787612436565b6007546001600160a01b031663e30443bc886120ed816001600160a01b031660009081526020819052604090205490565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b15801561213357600080fd5b505af1925050508015612144575060015b506007546001600160a01b031663e30443bc87612176816001600160a01b031660009081526020819052604090205490565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b1580156121bc57600080fd5b505af19250505080156121cd575060015b5050505050505050565b600081848411156121fb5760405162461bcd60e51b815260040161092f9190612c49565b506000612208848661306b565b95945050505050565b8486600301541461228057604051711b1a5c5d5a591a5d1e51995953db94d95b1b60721b8152601201604051908190038120600388015488549192909188916000805160206131c3833981519152916122709160489190911b90612f8b565b60405180910390a4600386018590555b838660050154146122e9576040516b19195d91995953db94d95b1b60a21b8152600c01604051908190038120600588015488549192909187916000805160206131c3833981519152916122d99160489190911b90612f8b565b60405180910390a4600586018490555b82866007015414612356576040516f189d5e509858dad1995953db94d95b1b60821b8152601001604051908190038120600788015488549192909186916000805160206131c3833981519152916123469160489190911b90612f8b565b60405180910390a4600786018390555b818660090154146123c2576040516e19d85b5a5b99d1995953db94d95b1b608a1b8152600f01604051908190038120600988015488549192909185916000805160206131c3833981519152916123b29160489190911b90612f8b565b60405180910390a4600986018290555b8086600b015414611ca5576040516f1a1bdb19195c9cd1995953db94d95b1b60821b8152601001604051908190038120600b88015488549192909184916000805160206131c38339815191529161241f9160489190911b90612f8b565b60405180910390a4600b8601819055505050505050565b6001600160a01b03831661245c5760405162461bcd60e51b815260040161092f90612fa2565b6001600160a01b0382166124825760405162461bcd60e51b815260040161092f90612fe7565b6124bf81604051806060016040528060268152602001613155602691396001600160a01b03861660009081526020819052604090205491906121d7565b6001600160a01b0380851660009081526020819052604080822093909355908416815220546124ee9082611901565b6001600160a01b038381166000818152602081815260409182902094909455518481529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101611a7f565b60006025819055602681905560278190556028819055602955831561259c5760056012544361256e919061306b565b1161257d57606460255561259c565b601554602555601754602655601954602755601b54602855601d546029555b82156125c157601654602555601854602655601a54602755601c54602855601e546029555b821580156125cd575083155b801561261157506001600160a01b038216600090815260208052604090205460ff168061261157506001600160a01b038116600090815260208052604090205460ff165b1561263557601654602555601854602655601a54602755601c54602855601e546029555b60295460285460275460265460255461264e9190612f73565b6126589190612f73565b6126629190612f73565b61266c9190612f73565b602a819055602554602654602754602854602954604080519586526020860194909452928401919091526060830152608082015260a08101919091527f24b7b85246369f5fb87526971064f357b39a0f399bca1c50e11af8c3c8f4bbd69060c00160405180910390a150505050565b30600090815260208190526040812054602a54602554919247926002908390612704908761302a565b61270e9190613049565b6127189190613049565b90506000602a546029548661272d919061302a565b6127379190613049565b9050600081612746848861306b565b612750919061306b565b905061275b81612a4a565b6000612767864761306b565b90506000602954600260255461277d9190613049565b602a5461278a919061306b565b612794919061306b565b90506000600282602554856127a9919061302a565b6127b39190613049565b6127bd9190613049565b9050600082602654856127d0919061302a565b6127da9190613049565b9050600083602754866127ed919061302a565b6127f79190613049565b90506000816128068486612f73565b6128109190612f73565b61281a908761306b565b600e546040519192506001600160a01b03169084156108fc029085906000818181858888f19350505050158015612855573d6000803e3d6000fd5b50600f546040516001600160a01b039091169083156108fc029084906000818181858888f19350505050158015612890573d6000803e3d6000fd5b506010546040516001600160a01b039091169082156108fc029083906000818181858888f193505050501580156128cb573d6000803e3d6000fd5b50881561291e576128dc8985612b9c565b60408051888152602081018690529081018a90527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15b60075460405163a9059cbb60e01b81526001600160a01b03909116600482015260248101899052600090309063a9059cbb906044016020604051808303816000875af1158015612972573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129969190612eea565b90508015612a3657600754604051636bf5ecd560e01b8152600481018b90526001600160a01b0390911690636bf5ecd590602401600060405180830381600087803b1580156129e457600080fd5b505af11580156129f8573d6000803e3d6000fd5b505050507fa4049db804d87a845be4dd8b54ae7048131238fba985dd37234309ac8668d96989604051612a2d91815260200190565b60405180910390a15b505050602a97909755505050505050505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612a7f57612a7f613082565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612ad8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612afc9190613098565b81600181518110612b0f57612b0f613082565b6001600160a01b039283166020918202929092010152600654612b359130911684611967565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac94790612b6e9085906000908690309042906004016130b5565b600060405180830381600087803b158015612b8857600080fd5b505af1158015611ca5573d6000803e3d6000fd5b600654612bb49030906001600160a01b031684611967565b600654600d5460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af1158015612c24573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610b709190613126565b600060208083528351808285015260005b81811015612c7657858101830151858201604001528201612c5a565b81811115612c88576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114610d7857600080fd5b60008060408385031215612cc657600080fd5b8235612cd181612c9e565b946020939093013593505050565b600080600080600060a08688031215612cf757600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b600080600060608486031215612d2f57600080fd5b8335612d3a81612c9e565b92506020840135612d4a81612c9e565b929592945050506040919091013590565b600060208284031215612d6d57600080fd5b813561196081612c9e565b8015158114610d7857600080fd5b60008060408385031215612d9957600080fd5b8235612da481612c9e565b91506020830135612db481612d78565b809150509250929050565b60008060008060808587031215612dd557600080fd5b8435612de081612c9e565b93506020850135612df081612c9e565b92506040850135612e0081612c9e565b91506060850135612e1081612c9e565b939692955090935050565b600060208284031215612e2d57600080fd5b5035919050565b60008060408385031215612e4757600080fd5b8235612e5281612c9e565b91506020830135612db481612c9e565b600181811c90821680612e7657607f821691505b602082108103612e9657634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600060208284031215612ee357600080fd5b5051919050565b600060208284031215612efc57600080fd5b815161196081612d78565b60208082526036908201527f4b727970746f506574733a204163636f756e7420697320616c7265616479207460408201527568652076616c7565206f6620276578636c756465642760501b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b60008219821115612f8657612f86612f5d565b500190565b68ffffffffffffffffff1991909116815260200190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b600081600019048311821515161561304457613044612f5d565b500290565b60008261306657634e487b7160e01b600052601260045260246000fd5b500490565b60008282101561307d5761307d612f5d565b500390565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156130aa57600080fd5b815161196081612c9e565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156131055784516001600160a01b0316835293830193918301916001016130e0565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561313b57600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e63654af24be54adc5e716fbcaa3fca0ad593e28dff90dffd49487c0a33b1547c6b5245524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636500edc71549f0cbe47086c2237ce0cf874d6897fd1d7ce43ee6b65c0230d7606e45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122026410120d9d4aa68e66c09ac6fc23fd6dbd3f226995099dd881380e8e1ba93d264736f6c634300080d0033

Libraries Used


Deployed Bytecode Sourcemap

15692:19298:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16003:28;;;;;;;;;;-1:-1:-1;16003:28:0;;;;-1:-1:-1;;;16003:28:0;;;;;;;;;179:14:1;;172:22;154:41;;142:2;127:18;16003:28:0;;;;;;;;8438:91;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;9262:154::-;;;;;;;;;;-1:-1:-1;9262:154:0;;;;;:::i;:::-;;:::i;20959:195::-;;;;;;;;;;;;;:::i;:::-;;24038:420;;;;;;;;;;-1:-1:-1;24038:420:0;;;;;:::i;:::-;;:::i;16559:27::-;;;;;;;;;;-1:-1:-1;16559:27:0;;;;-1:-1:-1;;;;;16559:27:0;;;;;;-1:-1:-1;;;;;1887:32:1;;;1869:51;;1857:2;1842:18;16559:27:0;1723:203:1;15734:30:0;;;;;;;;;;-1:-1:-1;15734:30:0;;;;-1:-1:-1;;;;;15734:30:0;;;8723:99;;;;;;;;;;-1:-1:-1;8805:12:0;;8723:99;;;2300:25:1;;;2288:2;2273:18;8723:99:0;2154:177:1;16524:28:0;;;;;;;;;;-1:-1:-1;16524:28:0;;;;-1:-1:-1;;;;;16524:28:0;;;9421:313;;;;;;;;;;-1:-1:-1;9421:313:0;;;;;:::i;:::-;;:::i;15949:48::-;;;;;;;;;;-1:-1:-1;15949:48:0;;;;-1:-1:-1;;;;;15949:48:0;;;26197:132;;;;;;;;;;;;;:::i;8634:84::-;;;;;;;;;;-1:-1:-1;8634:84:0;;8711:2;3189:36:1;;3177:2;3162:18;8634:84:0;3047:184:1;22109:121:0;;;;;;;;;;-1:-1:-1;22109:121:0;;;;;:::i;:::-;;:::i;21157:82::-;;;;;;;;;;;;;:::i;9739:203::-;;;;;;;;;;-1:-1:-1;9739:203:0;;;;;:::i;:::-;;:::i;25503:330::-;;;;;;;;;;-1:-1:-1;25503:330:0;;;;;:::i;:::-;;:::i;15768:38::-;;;;;;;;;;;;;;;25836:94;;;;;;;;;;;;;:::i;26332:132::-;;;;;;;;;;;;;:::i;25933:246::-;;;;;;;;;;;;;:::i;8827:118::-;;;;;;;;;;-1:-1:-1;8827:118:0;;;;;:::i;:::-;-1:-1:-1;;;;;8922:18:0;8901:7;8922:18;;;;;;;;;;;;8827:118;7672:133;;;;;;;;;;;;;:::i;22233:322::-;;;;;;;;;;-1:-1:-1;22233:322:0;;;;;:::i;:::-;;:::i;22900:1120::-;;;;;;;;;;-1:-1:-1;22900:1120:0;;;;;:::i;:::-;;:::i;22558:339::-;;;;;;;;;;-1:-1:-1;22558:339:0;;;;;:::i;:::-;;:::i;16308:56::-;;;;;;;;;;;;;;;;7488:70;;;;;;;;;;-1:-1:-1;7547:6:0;;-1:-1:-1;;;;;7547:6:0;7488:70;;16496:24;;;;;;;;;;-1:-1:-1;16496:24:0;;;;-1:-1:-1;;;;;16496:24:0;;;8534:95;;;;;;;;;;;;;:::i;9947:254::-;;;;;;;;;;-1:-1:-1;9947:254:0;;;;;:::i;:::-;;:::i;8950:160::-;;;;;;;;;;-1:-1:-1;8950:160:0;;;;;:::i;:::-;;:::i;16204:60::-;;;;;;;;;;;;;;;;25189:308;;;;;;;;;;-1:-1:-1;25189:308:0;;;;;:::i;:::-;;:::i;17536:58::-;;;;;;;;;;-1:-1:-1;17536:58:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;24902:284;;;;;;;;;;-1:-1:-1;24902:284:0;;;;;:::i;:::-;;:::i;21821:285::-;;;;;;;;;;-1:-1:-1;21821:285:0;;;;;:::i;:::-;;:::i;26467:222::-;;;;;;;;;;-1:-1:-1;26573:23:0;;26598:17;;26617:21;;26640:20;;26662:21;;26467:222;;;;5118:25:1;;;5174:2;5159:18;;5152:34;;;;5202:18;;;5195:34;;;;5260:2;5245:18;;5238:34;5303:3;5288:19;;5281:35;5105:3;5090:19;26467:222:0;4859:463:1;16396:60:0;;;;;;;;;;;;;;;;21616:202;;;;;;;;;;-1:-1:-1;21616:202:0;;;;;:::i;:::-;;:::i;16462:30::-;;;;;;;;;;-1:-1:-1;16462:30:0;;;;-1:-1:-1;;;;;16462:30:0;;;24461:438;;;;;;;;;;-1:-1:-1;24461:438:0;;;;;:::i;:::-;;:::i;9115:142::-;;;;;;;;;;-1:-1:-1;9115:142:0;;;;;:::i;:::-;-1:-1:-1;;;;;9225:18:0;;;9204:7;9225:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;9115:142;7810:223;;;;;;;;;;-1:-1:-1;7810:223:0;;;;;:::i;:::-;;:::i;26692:228::-;;;;;;;;;;-1:-1:-1;26799:24:0;;26825:18;;26845:22;;26869:21;;26892:22;;26692:228;;8438:91;8492:13;8519:5;8512:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8438:91;:::o;9262:154::-;9345:4;9356:39;6954:10;9379:7;9388:6;9356:8;:39::i;:::-;-1:-1:-1;9407:4:0;9262:154;;;;:::o;20959:195::-;7597:6;;-1:-1:-1;;;;;7597:6:0;6954:10;7597:22;7589:67;;;;-1:-1:-1;;;7589:67:0;;;;;;;:::i;:::-;;;;;;;;;21010:16:::1;:23:::0;;-1:-1:-1;;;;21010:23:0::1;-1:-1:-1::0;;;21010:23:0::1;::::0;;21042:16:::1;::::0;21010:23;21042:21;21038:112:::1;;21090:15;21071:16;:34:::0;21132:12:::1;21111:18;:33:::0;21038:112:::1;20959:195::o:0;24038:420::-;7597:6;;-1:-1:-1;;;;;7597:6:0;6954:10;7597:22;7589:67;;;;-1:-1:-1;;;7589:67:0;;;;;;;:::i;:::-;24215:116:::1;24238:5;24245:18;24265:12;24279:16;24297:15;24314:16;24215:22;:116::i;:::-;24341:112;::::0;-1:-1:-1;;;6668:27:1;;6720:2;6711:12;24341:112:0::1;;::::0;;;;;::::1;::::0;;5118:25:1;;;5174:2;5159:18;;5152:34;;;5202:18;;;5195:34;;;5260:2;5245:18;;5238:34;;;5303:3;5288:19;;5281:35;;;24341:112:0;::::1;::::0;5105:3:1;5090:19;24341:112:0::1;;;;;;;24038:420:::0;;;;;:::o;9421:313::-;9540:4;9551:36;9561:6;9569:9;9580:6;9551:9;:36::i;:::-;9592:121;9601:6;6954:10;9623:89;9661:6;9623:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;9623:19:0;;;;;;:11;:19;;;;;;;;6954:10;9623:33;;;;;;;;;;:37;:89::i;:::-;9592:8;:121::i;:::-;-1:-1:-1;9725:4:0;9421:313;;;;;:::o;26197:132::-;26281:15;;:43;;;-1:-1:-1;;;26281:43:0;;;;26260:7;;-1:-1:-1;;;;;26281:15:0;;:41;;:43;;;;;;;;;;;;;;:15;:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26274:50;;26197:132;:::o;22109:121::-;7597:6;;-1:-1:-1;;;;;7597:6:0;6954:10;7597:22;7589:67;;;;-1:-1:-1;;;7589:67:0;;;;;;;:::i;:::-;22180:15:::1;::::0;:45:::1;::::0;-1:-1:-1;;;22180:45:0;;-1:-1:-1;;;;;1887:32:1;;;22180:45:0::1;::::0;::::1;1869:51:1::0;22180:15:0;;::::1;::::0;:36:::1;::::0;1842:18:1;;22180:45:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;22109:121:::0;:::o;21157:82::-;7597:6;;-1:-1:-1;;;;;7597:6:0;6954:10;7597:22;7589:67;;;;-1:-1:-1;;;7589:67:0;;;;;;;:::i;:::-;21210:16:::1;:24:::0;;-1:-1:-1;;;;21210:24:0::1;::::0;;21157:82::o;9739:203::-;6954:10;9827:4;9870:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;9870:34:0;;;;;;;;;;9827:4;;9838:83;;9861:7;;9870:50;;9909:10;9870:38;:50::i;25503:330::-;7597:6;;-1:-1:-1;;;;;7597:6:0;6954:10;7597:22;7589:67;;;;-1:-1:-1;;;7589:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25605:38:0;::::1;;::::0;;;:29:::1;:38:::0;;;;;;:47;::::1;;:38;::::0;;::::1;:47;;::::0;25597:120:::1;;;::::0;-1:-1:-1;;;25597:120:0;;7125:2:1;25597:120:0::1;::::0;::::1;7107:21:1::0;7164:2;7144:18;;;7137:30;7203:34;7183:18;;;7176:62;7274:30;7254:18;;;7247:58;7322:19;;25597:120:0::1;6923:424:1::0;25597:120:0::1;-1:-1:-1::0;;;;;25722:38:0;::::1;;::::0;;;:29:::1;:38:::0;;;;;;;;:46;;-1:-1:-1;;25722:46:0::1;::::0;::::1;;::::0;;::::1;::::0;;;25778:50;;154:41:1;;;25778:50:0::1;::::0;127:18:1;25778:50:0::1;;;;;;;;25503:330:::0;;:::o;25836:94::-;25867:15;;:58;;-1:-1:-1;;;25867:58:0;;25906:10;25867:58;;;7536:51:1;25867:15:0;7603:18:1;;;7596:50;-1:-1:-1;;;;;25867:15:0;;;;:30;;7509:18:1;;25867:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;25836:94::o;26332:132::-;26418:15;;:41;;;-1:-1:-1;;;26418:41:0;;;;26397:7;;-1:-1:-1;;;;;26418:15:0;;:39;;:41;;;;;;;;;;;;;;:15;:41;;;;;;;;;;;;;;25933:246;7597:6;;-1:-1:-1;;;;;7597:6:0;6954:10;7597:22;7589:67;;;;-1:-1:-1;;;7589:67:0;;;;;;;:::i;:::-;26005:21:::1;25988:14;26063:7;7547:6:::0;;-1:-1:-1;;;;;7547:6:0;;7488:70;26063:7:::1;-1:-1:-1::0;;;;;26055:21:0::1;26085:6;26055:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26037:59;;;26111:7;26107:68;;;26139:24;::::0;2300:25:1;;;26139:24:0::1;::::0;2288:2:1;2273:18;26139:24:0::1;;;;;;;26107:68;25980:199;;25933:246::o:0;7672:133::-;7597:6;;-1:-1:-1;;;;;7597:6:0;6954:10;7597:22;7589:67;;;;-1:-1:-1;;;7589:67:0;;;;;;;:::i;:::-;7757:6:::1;::::0;7736:40:::1;::::0;7773:1:::1;::::0;-1:-1:-1;;;;;7757:6:0::1;::::0;7736:40:::1;::::0;7773:1;;7736:40:::1;7781:6;:19:::0;;-1:-1:-1;;;;;;7781:19:0::1;::::0;;7672:133::o;22233:322::-;7597:6;;-1:-1:-1;;;;;7597:6:0;6954:10;7597:22;7589:67;;;;-1:-1:-1;;;7589:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22332:38:0;::::1;;::::0;;;:29:::1;:38;::::0;;;;;:50;::::1;;:38;::::0;;::::1;:50;;::::0;22324:117:::1;;;;-1:-1:-1::0;;;22324:117:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;22446:38:0;::::1;;::::0;;;:29:::1;:38;::::0;;;;;;;;:49;;-1:-1:-1;;22446:49:0::1;::::0;::::1;;::::0;;::::1;::::0;;;22505:45;;154:41:1;;;22505:45:0::1;::::0;127:18:1;22505:45:0::1;14:187:1::0;22900:1120:0;7597:6;;-1:-1:-1;;;;;7597:6:0;6954:10;7597:22;7589:67;;;;-1:-1:-1;;;7589:67:0;;;;;;;:::i;:::-;23048:15:::1;::::0;-1:-1:-1;;;;;23048:37:0;;::::1;:15:::0;::::1;:37;23045:263;;-1:-1:-1::0;;;;;23101:32:0;::::1;23093:88;;;::::0;-1:-1:-1;;;23093:88:0;;8742:2:1;23093:88:0::1;::::0;::::1;8724:21:1::0;8781:2;8761:18;;;8754:30;8820:34;8800:18;;;8793:62;-1:-1:-1;;;8871:18:1;;;8864:41;8922:19;;23093:88:0::1;8540:407:1::0;23093:88:0::1;23244:15;::::0;23192:68:::1;::::0;-1:-1:-1;;;9154:30:1;;-1:-1:-1;;;;;23244:15:0;;::::1;::::0;23192:68;::::1;::::0;9209:2:1;9200:12;23192:68:0::1;::::0;;;;::::1;::::0;;;-1:-1:-1;;;;;;;;;;;23192:68:0;;;::::1;23266:15;:36:::0;;-1:-1:-1;;;;;;23266:36:0::1;-1:-1:-1::0;;;;;23266:36:0;::::1;;::::0;;23045:263:::1;23315:9;::::0;-1:-1:-1;;;;;23315:25:0;;::::1;:9:::0;::::1;:25;23312:209;;-1:-1:-1::0;;;;;23356:26:0;::::1;23348:76;;;::::0;-1:-1:-1;;;23348:76:0;;9425:2:1;23348:76:0::1;::::0;::::1;9407:21:1::0;9464:2;9444:18;;;9437:30;9503:34;9483:18;;;9476:62;-1:-1:-1;;;9554:18:1;;;9547:35;9599:19;;23348:76:0::1;9223:401:1::0;23348:76:0::1;23475:9;::::0;23435:50:::1;::::0;-1:-1:-1;;;9831:24:1;;-1:-1:-1;;;;;23475:9:0;;::::1;::::0;23435:50;::::1;::::0;9880:1:1;9871:11;23435:50:0::1;::::0;;;;::::1;::::0;;;-1:-1:-1;;;;;;;;;;;23435:50:0;;;::::1;23491:9;:24:::0;;-1:-1:-1;;;;;;23491:24:0::1;-1:-1:-1::0;;;;;23491:24:0;::::1;;::::0;;23312:209:::1;23528:13;::::0;-1:-1:-1;;;;;23528:33:0;;::::1;:13:::0;::::1;:33;23525:245;;-1:-1:-1::0;;;;;23577:30:0;::::1;23569:84;;;::::0;-1:-1:-1;;;23569:84:0;;10095:2:1;23569:84:0::1;::::0;::::1;10077:21:1::0;10134:2;10114:18;;;10107:30;10173:34;10153:18;;;10146:62;-1:-1:-1;;;10224:18:1;;;10217:39;10273:19;;23569:84:0::1;9893:405:1::0;23569:84:0::1;23712:13;::::0;23664:62:::1;::::0;-1:-1:-1;;;10505:28:1;;-1:-1:-1;;;;;23712:13:0;;::::1;::::0;23664:62;::::1;::::0;10558:2:1;10549:12;23664:62:0::1;::::0;;;;::::1;::::0;;;-1:-1:-1;;;;;;;;;;;23664:62:0;;;::::1;23732:13;:32:::0;;-1:-1:-1;;;;;;23732:32:0::1;-1:-1:-1::0;;;;;23732:32:0;::::1;;::::0;;23525:245:::1;23783:12;::::0;-1:-1:-1;;;;;23783:31:0;;::::1;:12:::0;::::1;:31;23780:236;;-1:-1:-1::0;;;;;23830:29:0;::::1;23822:82;;;::::0;-1:-1:-1;;;23822:82:0;;10774:2:1;23822:82:0::1;::::0;::::1;10756:21:1::0;10813:2;10793:18;;;10786:30;10852:34;10832:18;;;10825:62;-1:-1:-1;;;10903:18:1;;;10896:38;10951:19;;23822:82:0::1;10572:404:1::0;23822:82:0::1;23961:12;::::0;23915:59:::1;::::0;-1:-1:-1;;;11183:27:1;;-1:-1:-1;;;;;23961:12:0;;::::1;::::0;23915:59;::::1;::::0;11235:2:1;11226:12;23915:59:0::1;::::0;;;;::::1;::::0;;;-1:-1:-1;;;;;;;;;;;23915:59:0;;;::::1;23980:12;:30:::0;;-1:-1:-1;;;;;;23980:30:0::1;-1:-1:-1::0;;;;;23980:30:0;::::1;;::::0;;23780:236:::1;22900:1120:::0;;;;:::o;22558:339::-;7597:6;;-1:-1:-1;;;;;7597:6:0;6954:10;7597:22;7589:67;;;;-1:-1:-1;;;7589:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22662:43:0;::::1;;::::0;;;:34:::1;:43;::::0;;;;;:55;::::1;;:43;::::0;;::::1;:55;;::::0;22654:122:::1;;;;-1:-1:-1::0;;;22654:122:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;22781:43:0;::::1;;::::0;;;:34:::1;:43;::::0;;;;;;;;:54;;-1:-1:-1;;22781:54:0::1;::::0;::::1;;::::0;;::::1;::::0;;;22845:47;;154:41:1;;;22845:47:0::1;::::0;127:18:1;22845:47:0::1;14:187:1::0;8534:95:0;8590:13;8617:7;8610:14;;;;;:::i;9947:254::-;10040:4;10051:129;6954:10;10074:7;10083:96;10122:15;10083:96;;;;;;;;;;;;;;;;;6954:10;10083:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;10083:34:0;;;;;;;;;;;;:38;:96::i;8950:160::-;9036:4;9047:42;6954:10;9071:9;9082:6;9047:9;:42::i;25189:308::-;7597:6;;-1:-1:-1;;;;;7597:6:0;6954:10;7597:22;7589:67;;;;-1:-1:-1;;;7589:67:0;;;;;;;:::i;:::-;25287:23:::1;;25275:8;:35:::0;25267:111:::1;;;::::0;-1:-1:-1;;;25267:111:0;;11451:2:1;25267:111:0::1;::::0;::::1;11433:21:1::0;11490:2;11470:18;;;11463:30;11529:34;11509:18;;;11502:62;11600:33;11580:18;;;11573:61;11651:19;;25267:111:0::1;11249:427:1::0;25267:111:0::1;25429:23;::::0;25388:65:::1;::::0;25419:8;;25388:65:::1;::::0;;;::::1;25458:23;:34:::0;25189:308::o;24902:284::-;7597:6;;-1:-1:-1;;;;;7597:6:0;6954:10;7597:22;7589:67;;;;-1:-1:-1;;;7589:67:0;;;;;;;:::i;:::-;25002:15:::1;::::0;-1:-1:-1;;;;;25002:15:0;;::::1;24980:38:::0;;::::1;::::0;24972:98:::1;;;::::0;-1:-1:-1;;;24972:98:0;;11883:2:1;24972:98:0::1;::::0;::::1;11865:21:1::0;11922:2;11902:18;;;11895:30;11961:34;11941:18;;;11934:62;-1:-1:-1;;;12012:18:1;;;12005:45;12067:19;;24972:98:0::1;11681:411:1::0;24972:98:0::1;25122:15;::::0;25080:59:::1;::::0;-1:-1:-1;;;;;25122:15:0;;::::1;::::0;25080:59;::::1;::::0;::::1;::::0;25122:15:::1;::::0;25080:59:::1;25144:15;:37:::0;;-1:-1:-1;;;;;;25144:37:0::1;-1:-1:-1::0;;;;;25144:37:0;;;::::1;::::0;;;::::1;::::0;;24902:284::o;21821:285::-;7597:6;;-1:-1:-1;;;;;7597:6:0;6954:10;7597:22;7589:67;;;;-1:-1:-1;;;7589:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;21910:27:0;::::1;;::::0;;;:18:::1;:27;::::0;;;;;:39;::::1;;:27;::::0;;::::1;:39;;::::0;21902:106:::1;;;;-1:-1:-1::0;;;21902:106:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;22013:27:0;::::1;;::::0;;;:18:::1;:27;::::0;;;;;;;;:38;;-1:-1:-1;;22013:38:0::1;::::0;::::1;;::::0;;::::1;::::0;;;22061:40;;154:41:1;;;22061:40:0::1;::::0;127:18:1;22061:40:0::1;14:187:1::0;21616:202:0;7597:6;;-1:-1:-1;;;;;7597:6:0;6954:10;7597:22;7589:67;;;;-1:-1:-1;;;7589:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;21705:38:0;::::1;;::::0;;;:29:::1;:38;::::0;;;;;;;;:48;;-1:-1:-1;;21705:48:0::1;::::0;::::1;;::::0;;::::1;::::0;;;21763:50;;154:41:1;;;21763:50:0::1;::::0;127:18:1;21763:50:0::1;14:187:1::0;24461:438:0;7597:6;;-1:-1:-1;;;;;7597:6:0;6954:10;7597:22;7589:67;;;;-1:-1:-1;;;7589:67:0;;;;;;;:::i;:::-;24644:122:::1;24668:5;24675:19;24696:13;24711:17;24730:16;24748:17;24644:23;:122::i;:::-;24776:118;::::0;-1:-1:-1;;;12299:28:1;;12352:2;12343:12;24776:118:0::1;12097:264:1::0;7810:223:0;7597:6;;-1:-1:-1;;;;;7597:6:0;6954:10;7597:22;7589:67;;;;-1:-1:-1;;;7589:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;7893:22:0;::::1;7885:73;;;::::0;-1:-1:-1;;;7885:73:0;;12568:2:1;7885:73:0::1;::::0;::::1;12550:21:1::0;12607:2;12587:18;;;12580:30;12646:34;12626:18;;;12619:62;-1:-1:-1;;;12697:18:1;;;12690:36;12743:19;;7885:73:0::1;12366:402:1::0;7885:73:0::1;7989:6;::::0;7968:38:::1;::::0;-1:-1:-1;;;;;7968:38:0;;::::1;::::0;7989:6:::1;::::0;7968:38:::1;::::0;7989:6:::1;::::0;7968:38:::1;8011:6;:17:::0;;-1:-1:-1;;;;;;8011:17:0::1;-1:-1:-1::0;;;;;8011:17:0;;;::::1;::::0;;;::::1;::::0;;7810:223::o;2596:160::-;2654:7;;2680:5;2684:1;2680;:5;:::i;:::-;2668:17;;2703:1;2698;:6;;2690:46;;;;-1:-1:-1;;;2690:46:0;;13240:2:1;2690:46:0;;;13222:21:1;13279:2;13259:18;;;13252:30;13318:29;13298:18;;;13291:57;13365:18;;2690:46:0;13038:351:1;2690:46:0;2750:1;2596:160;-1:-1:-1;;;2596:160:0:o;11452:330::-;-1:-1:-1;;;;;11561:19:0;;11553:68;;;;-1:-1:-1;;;11553:68:0;;13596:2:1;11553:68:0;;;13578:21:1;13635:2;13615:18;;;13608:30;13674:34;13654:18;;;13647:62;-1:-1:-1;;;13725:18:1;;;13718:34;13769:19;;11553:68:0;13394:400:1;11553:68:0;-1:-1:-1;;;;;11634:21:0;;11626:68;;;;-1:-1:-1;;;11626:68:0;;14001:2:1;11626:68:0;;;13983:21:1;14040:2;14020:18;;;14013:30;14079:34;14059:18;;;14052:62;-1:-1:-1;;;14130:18:1;;;14123:32;14172:19;;11626:68:0;13799:398:1;11626:68:0;-1:-1:-1;;;;;11699:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;11745:32;;2300:25:1;;;11745:32:0;;2273:18:1;11745:32:0;;;;;;;;11452:330;;;:::o;31415:1236::-;31670:18;31645:3;:21;;;:43;31641:215;;31701:101;;-1:-1:-1;;;14404:32:1;;14461:2;14452:12;31701:101:0;;;;;;;;31743:21;;;;31787:14;;31701:101;;31743:21;;31723:18;;-1:-1:-1;;;;;;;;;;;31701:101:0;;;31787:14;;;;;;31701:101;:::i;:::-;;;;;;;;31808:21;;;:42;;;31641:215;31883:12;31864:3;:15;;;:31;31860:173;;31908:83;;-1:-1:-1;;;14891:26:1;;14942:2;14933:12;31908:83:0;;;;;;;;31944:15;;;;31976:14;;31908:83;;31944:15;;31930:12;;-1:-1:-1;;;;;;;;;;;31908:83:0;;;31976:14;;;;;;31908:83;:::i;:::-;;;;;;;;31997:15;;;:30;;;31860:173;32064:16;32041:3;:19;;;:39;32037:201;;32093:95;;-1:-1:-1;;;15158:30:1;;15213:2;15204:12;32093:95:0;;;;;;;;32133:19;;;;32173:14;;32093:95;;32133:19;;32115:16;;-1:-1:-1;;;;;;;;;;;32093:95:0;;;32173:14;;;;;;32093:95;:::i;:::-;;;;;;;;32194:19;;;:38;;;32037:201;32274:15;32252:3;:18;;;:37;32248:194;;32302:92;;-1:-1:-1;;;15429:29:1;;15483:2;15474:12;32302:92:0;;;;;;;;32341:18;;;;32379:14;;32302:92;;32341:18;;32324:15;;-1:-1:-1;;;;;;;;;;;32302:92:0;;;32379:14;;;;;;32302:92;:::i;:::-;;;;;;;;32400:18;;;:36;;;32248:194;32473:16;32450:3;:19;;;:39;32446:201;;32502:95;;-1:-1:-1;;;15699:30:1;;15754:2;15745:12;32502:95:0;;;;;;;;32542:19;;;;32582:14;;32502:95;;32542:19;;32524:16;;-1:-1:-1;;;;;;;;;;;32502:95:0;;;32582:14;;;;;;32502:95;:::i;:::-;;;;;;;;32603:19;;;:38;;;32446:201;31415:1236;;;;;;:::o;26935:1843::-;-1:-1:-1;;;;;27042:18:0;;27034:68;;;;-1:-1:-1;;;27034:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27116:16:0;;27108:64;;;;-1:-1:-1;;;27108:64:0;;;;;;;:::i;:::-;27183:6;27193:1;27183:11;27180:71;;27203:28;27219:4;27225:2;27229:1;27203:15;:28::i;:::-;26935:1843;;;:::o;27180:71::-;-1:-1:-1;;;;;27277:31:0;;;27258:16;27277:31;;;:25;:31;;;;;;;;;27332:29;;;;;;;;;27376:35;;;:29;:35;;;;;;27277:31;;;;;27332:29;;;;27376:35;27375:36;:74;;;;-1:-1:-1;;;;;;27416:33:0;;;;;;:29;:33;;;;;;;;27415:34;27375:74;27372:557;;;27466:16;;-1:-1:-1;;;27466:16:0;;;;27458:71;;;;-1:-1:-1;;;27458:71:0;;16780:2:1;27458:71:0;;;16762:21:1;16819:2;16799:18;;;16792:30;16858:34;16838:18;;;16831:62;-1:-1:-1;;;16909:18:1;;;16902:40;16959:19;;27458:71:0;16578:406:1;27458:71:0;-1:-1:-1;;;;;27553:38:0;;;;;;:34;:38;;;;;;;;27552:39;:84;;;;-1:-1:-1;;;;;;27596:40:0;;;;;;:34;:40;;;;;;;;27595:41;27552:84;27548:192;;;27664:11;;27654:6;:21;;27646:86;;;;-1:-1:-1;;;27646:86:0;;17191:2:1;27646:86:0;;;17173:21:1;17230:2;17210:18;;;17203:30;17269:34;17249:18;;;17242:62;-1:-1:-1;;;17320:18:1;;;17313:50;17380:19;;27646:86:0;16989:416:1;27646:86:0;-1:-1:-1;;;;;27751:33:0;;;;;;:29;:33;;;;;;;;27746:175;;27830:15;;27819:6;27803:13;27813:2;-1:-1:-1;;;;;8922:18:0;8901:7;8922:18;;;;;;;;;;;;8827:118;27803:13;:22;;;;:::i;:::-;27802:43;;27794:119;;;;-1:-1:-1;;;27794:119:0;;17612:2:1;27794:119:0;;;17594:21:1;17651:2;17631:18;;;17624:30;17690:34;17670:18;;;17663:62;17761:33;17741:18;;;17734:61;17812:19;;27794:119:0;17410:427:1;27794:119:0;27936:47;27949:11;27962:10;27974:4;27980:2;27936:12;:47::i;:::-;28032:23;;28022:4;27989:12;8922:18;;;;;;;;;;;28073:16;;-1:-1:-1;;28004:51:0;;-1:-1:-1;;;28073:16:0;;;;:32;;;;;28098:7;28073:32;:51;;;;-1:-1:-1;28115:9:0;;;;28114:10;28073:51;:73;;;;;28145:1;28133:9;;:13;28073:73;:111;;;;-1:-1:-1;;;;;;28155:29:0;;;;;;:25;:29;;;;;;;;28073:111;28063:206;;;28198:9;:16;;-1:-1:-1;;28198:16:0;28210:4;28198:16;;;28221:17;:15;:17::i;:::-;28245:9;:17;;-1:-1:-1;;28245:17:0;;;28063:206;28292:9;;28276:12;;28292:9;;28291:10;:30;;;;-1:-1:-1;28305:16:0;;-1:-1:-1;;;28305:16:0;;;;28291:30;-1:-1:-1;;;;;28332:24:0;;;;;;:18;:24;;;;;;28276:45;;-1:-1:-1;28332:24:0;;;:50;;-1:-1:-1;;;;;;28360:22:0;;;;;;:18;:22;;;;;;;;28332:50;28329:83;;;-1:-1:-1;28400:5:0;28329:83;28421:7;:24;;;;;28444:1;28432:9;;:13;28421:24;28417:160;;;28454:11;28489:5;28477:9;;28468:6;:18;;;;:::i;:::-;:26;;;;:::i;:::-;28454:40;-1:-1:-1;28510:12:0;28454:40;28510:6;:12;:::i;:::-;28501:21;;28529:41;28545:4;28559;28566:3;28529:15;:41::i;:::-;28447:130;28417:160;28584:33;28600:4;28606:2;28610:6;28584:15;:33::i;:::-;28629:15;;-1:-1:-1;;;;;28629:15:0;:26;28664:4;28671:15;28664:4;-1:-1:-1;;;;;8922:18:0;8901:7;8922:18;;;;;;;;;;;;8827:118;28671:15;28629:58;;-1:-1:-1;;;;;;28629:58:0;;;;;;;-1:-1:-1;;;;;18575:32:1;;;28629:58:0;;;18557:51:1;18624:18;;;18617:34;18530:18;;28629:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28625:74;28708:15;;-1:-1:-1;;;;;28708:15:0;:26;28743:2;28748:13;28743:2;-1:-1:-1;;;;;8922:18:0;8901:7;8922:18;;;;;;;;;;;;8827:118;28748:13;28708:54;;-1:-1:-1;;;;;;28708:54:0;;;;;;;-1:-1:-1;;;;;18575:32:1;;;28708:54:0;;;18557:51:1;18624:18;;;18617:34;18530:18;;28708:54:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28704:70;27028:1750;;;;26935:1843;;;:::o;2893:171::-;2979:7;3009:12;3001:6;;;;2993:29;;;;-1:-1:-1;;;2993:29:0;;;;;;;;:::i;:::-;-1:-1:-1;3027:9:0;3039:5;3043:1;3039;:5;:::i;:::-;3027:17;2893:171;-1:-1:-1;;;;;2893:171:0:o;30136:1276::-;30397:19;30371:3;:22;;;:45;30367:222;;30429:104;;-1:-1:-1;;;18864:33:1;;18922:2;18913:12;30429:104:0;;;;;;;;30472:22;;;;30518:14;;30429:104;;30472:22;;30451:19;;-1:-1:-1;;;;;;;;;;;30429:104:0;;;30518:14;;;;;;30429:104;:::i;:::-;;;;;;;;30539:22;;;:44;;;30367:222;30617:13;30597:3;:16;;;:33;30593:180;;30643:86;;-1:-1:-1;;;19138:27:1;;19190:2;19181:12;30643:86:0;;;;;;;;30680:16;;;;30714:14;;30643:86;;30680:16;;30665:13;;-1:-1:-1;;;;;;;;;;;30643:86:0;;;30714:14;;;;;;30643:86;:::i;:::-;;;;;;;;30735:16;;;:32;;;30593:180;30805:17;30781:3;:20;;;:41;30777:208;;30835:98;;-1:-1:-1;;;19406:31:1;;19462:2;19453:12;30835:98:0;;;;;;;;30876:20;;;;30918:14;;30835:98;;30876:20;;30857:17;;-1:-1:-1;;;;;;;;;;;30835:98:0;;;30918:14;;;;;;30835:98;:::i;:::-;;;;;;;;30939:20;;;:40;;;30777:208;31022:16;30999:3;:19;;;:39;30995:201;;31051:95;;-1:-1:-1;;;19678:30:1;;19733:2;19724:12;31051:95:0;;;;;;;;31091:19;;;;31131:14;;31051:95;;31091:19;;31073:16;;-1:-1:-1;;;;;;;;;;;31051:95:0;;;31131:14;;;;;;31051:95;:::i;:::-;;;;;;;;31152:19;;;:38;;;30995:201;31228:17;31204:3;:20;;;:41;31200:208;;31258:98;;-1:-1:-1;;;19949:31:1;;20005:2;19996:12;31258:98:0;;;;;;;;31299:20;;;;31341:14;;31258:98;;31299:20;;31280:17;;-1:-1:-1;;;;;;;;;;;31258:98:0;;;31341:14;;;;;;31258:98;:::i;:::-;;;;;;;;31362:20;;;:40;;;30136:1276;;;;;;:::o;10206:509::-;-1:-1:-1;;;;;10319:20:0;;10311:70;;;;-1:-1:-1;;;10311:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;10394:23:0;;10386:71;;;;-1:-1:-1;;;10386:71:0;;;;;;;:::i;:::-;10534;10556:6;10534:71;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10534:17:0;;:9;:17;;;;;;;;;;;;:71;:21;:71::i;:::-;-1:-1:-1;;;;;10514:17:0;;;:9;:17;;;;;;;;;;;:91;;;;10633:20;;;;;;;:32;;10658:6;10633:24;:32::i;:::-;-1:-1:-1;;;;;10610:20:0;;;:9;:20;;;;;;;;;;;;:55;;;;10675:35;2300:25:1;;;10610:20:0;;10675:35;;;;;;2273:18:1;10675:35:0;2154:177:1;28781:1352:0;28899:1;28883:13;:17;;;28905:7;:11;;;28921;:15;;;28947:10;:14;;;28966:11;:15;28988:402;;;;29063:1;29040:18;;29025:12;:33;;;;:::i;:::-;29024:40;29020:365;;29089:3;29073:13;:19;29020:365;;;29140:23;;29124:13;:39;29192:17;;29182:7;:27;29242:21;;29228:11;:35;29295:20;;29282:10;:33;29348:21;;29334:11;:35;29020:365;29401:10;29397:226;;;29435:24;;29419:13;:40;29475:18;;29465:7;:28;29513:22;;29499:11;:36;29554:21;;29541:10;:34;29595:22;;29581:11;:36;29397:226;29638:10;29637:11;:27;;;;;29653:11;29652:12;29637:27;:105;;;;-1:-1:-1;;;;;;29669:35:0;;;;;;:29;:35;;;;;;;;;:72;;-1:-1:-1;;;;;;29708:33:0;;;;;;:29;:33;;;;;;;;29669:72;29633:321;;;29766:24;;29750:13;:40;29806:18;;29796:7;:28;29844:22;;29830:11;:36;29885:21;;29872:10;:34;29926:22;;29912:11;:36;29633:321;30023:11;;30010:10;;29996:11;;29986:7;;29970:13;;:23;;;;:::i;:::-;:37;;;;:::i;:::-;:50;;;;:::i;:::-;:64;;;;:::i;:::-;29958:9;:76;;;30056:13;;30071:7;;30080:11;;30093:10;;30105:11;;30044:84;;;20306:25:1;;;20362:2;20347:18;;20340:34;;;;20390:18;;;20383:34;;;;20448:2;20433:18;;20426:34;20491:3;20476:19;;20469:35;20535:3;20520:19;;20513:35;;;;30044:84:0;;20293:3:1;20278:19;30044:84:0;;;;;;;28781:1352;;;;:::o;32654:1563::-;32738:4;32694:23;8922:18;;;;;;;;;;;32829:9;;32887:13;;8922:18;;32777:21;;32915:1;;32829:9;;32869:31;;8922:18;32869:31;:::i;:::-;:43;;;;:::i;:::-;:47;;;;:::i;:::-;32843:73;;32927:24;32986:9;;32972:11;;32954:15;:29;;;;:::i;:::-;:41;;;;:::i;:::-;32927:68;-1:-1:-1;33000:20:0;32927:68;33023:33;33041:15;33023;:33;:::i;:::-;:52;;;;:::i;:::-;33000:75;;33082:31;33100:12;33082:17;:31::i;:::-;33120:27;33150:41;33174:17;33150:21;:41;:::i;:::-;33120:71;;33196:19;33252:11;;33247:1;33231:13;;:17;;;;:::i;:::-;33218:9;;:31;;;;:::i;:::-;:45;;;;:::i;:::-;33196:67;;33268:26;33349:1;33335:11;33319:13;;33297:19;:35;;;;:::i;:::-;:49;;;;:::i;:::-;:53;;;;:::i;:::-;33268:82;;33355:20;33410:11;33400:7;;33378:19;:29;;;;:::i;:::-;:43;;;;:::i;:::-;33355:66;;33426:24;33489:11;33475;;33453:19;:33;;;;:::i;:::-;:47;;;;:::i;:::-;33426:74;-1:-1:-1;33511:23:0;33426:74;33560:33;33581:12;33560:18;:33;:::i;:::-;:52;;;;:::i;:::-;33537:76;;:19;:76;:::i;:::-;33628:9;;33620:41;;33511:102;;-1:-1:-1;;;;;;33628:9:0;;33620:41;;;;;33648:12;;33628:9;33620:41;33628:9;33620:41;33648:12;33628:9;33620:41;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33674:13:0;;33666:49;;-1:-1:-1;;;;;33674:13:0;;;;33666:49;;;;;33698:16;;33674:13;33666:49;33674:13;33666:49;33698:16;33674:13;33666:49;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33734:12:0;;33726:47;;-1:-1:-1;;;;;33734:12:0;;;;33726:47;;;;;33757:15;;33734:12;33726:47;33734:12;33726:47;33757:15;33734:12;33726:47;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33784:19:0;;33780:163;;33811:50;33825:15;33842:18;33811:13;:50::i;:::-;33872:65;;;20761:25:1;;;20817:2;20802:18;;20795:34;;;20845:18;;;20838:34;;;33872:65:0;;20749:2:1;20734:18;33872:65:0;;;;;;;33780:163;34011:15;;33972:74;;-1:-1:-1;;;33972:74:0;;-1:-1:-1;;;;;34011:15:0;;;33972:74;;;18557:51:1;18624:18;;;18617:34;;;33956:12:0;;33987:4;;33972:30;;18530:18:1;;33972:74:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33955:91;;34054:7;34051:130;;;34069:15;;:64;;-1:-1:-1;;;34069:64:0;;;;;2300:25:1;;;-1:-1:-1;;;;;34069:15:0;;;;:46;;2273:18:1;;34069:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34144:31;34158:16;34144:31;;;;2300:25:1;;2288:2;2273:18;;2154:177;34144:31:0;;;;;;;;34051:130;-1:-1:-1;;;34187:9:0;:25;;;;-1:-1:-1;;;;;;;;;32654:1563:0:o;34220:416::-;34305:16;;;34319:1;34305:16;;;;;;;;34281:21;;34305:16;;;;;;;;;;-1:-1:-1;34305:16:0;34281:40;;34344:4;34326;34331:1;34326:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;34326:23:0;;;:7;;;;;;;;;;:23;;;;34364:15;;:22;;;-1:-1:-1;;;34364:22:0;;;;:15;;;;;:20;;:22;;;;;34326:7;;34364:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34354:4;34359:1;34354:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;34354:32:0;;;:7;;;;;;;;;:32;34423:15;;34391:62;;34408:4;;34423:15;34441:11;34391:8;:62::i;:::-;34458:15;;:173;;-1:-1:-1;;;34458:173:0;;-1:-1:-1;;;;;34458:15:0;;;;:66;;:173;;34530:11;;34458:15;;34582:4;;34600;;34611:15;;34458:173;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34639:348;34747:15;;34715:62;;34732:4;;-1:-1:-1;;;;;34747:15:0;34765:11;34715:8;:62::i;:::-;34782:15;;34941;;34782:200;;-1:-1:-1;;;34782:200:0;;34845:4;34782:200;;;23008:34:1;23058:18;;;23051:34;;;34782:15:0;23101:18:1;;;23094:34;;;23144:18;;;23137:34;-1:-1:-1;;;;;34941:15:0;;;23187:19:1;;;23180:44;34962:15:0;23240:19:1;;;23233:35;34782:15:0;;;:31;;34821:9;;22942:19:1;;34782:200:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;206:597:1:-;318:4;347:2;376;365:9;358:21;408:6;402:13;451:6;446:2;435:9;431:18;424:34;476:1;486:140;500:6;497:1;494:13;486:140;;;595:14;;;591:23;;585:30;561:17;;;580:2;557:26;550:66;515:10;;486:140;;;644:6;641:1;638:13;635:91;;;714:1;709:2;700:6;689:9;685:22;681:31;674:42;635:91;-1:-1:-1;787:2:1;766:15;-1:-1:-1;;762:29:1;747:45;;;;794:2;743:54;;206:597;-1:-1:-1;;;206:597:1:o;808:131::-;-1:-1:-1;;;;;883:31:1;;873:42;;863:70;;929:1;926;919:12;944:315;1012:6;1020;1073:2;1061:9;1052:7;1048:23;1044:32;1041:52;;;1089:1;1086;1079:12;1041:52;1128:9;1115:23;1147:31;1172:5;1147:31;:::i;:::-;1197:5;1249:2;1234:18;;;;1221:32;;-1:-1:-1;;;944:315:1:o;1264:454::-;1359:6;1367;1375;1383;1391;1444:3;1432:9;1423:7;1419:23;1415:33;1412:53;;;1461:1;1458;1451:12;1412:53;-1:-1:-1;;1484:23:1;;;1554:2;1539:18;;1526:32;;-1:-1:-1;1605:2:1;1590:18;;1577:32;;1656:2;1641:18;;1628:32;;-1:-1:-1;1707:3:1;1692:19;1679:33;;-1:-1:-1;1264:454:1;-1:-1:-1;1264:454:1:o;2336:456::-;2413:6;2421;2429;2482:2;2470:9;2461:7;2457:23;2453:32;2450:52;;;2498:1;2495;2488:12;2450:52;2537:9;2524:23;2556:31;2581:5;2556:31;:::i;:::-;2606:5;-1:-1:-1;2663:2:1;2648:18;;2635:32;2676:33;2635:32;2676:33;:::i;:::-;2336:456;;2728:7;;-1:-1:-1;;;2782:2:1;2767:18;;;;2754:32;;2336:456::o;3236:247::-;3295:6;3348:2;3336:9;3327:7;3323:23;3319:32;3316:52;;;3364:1;3361;3354:12;3316:52;3403:9;3390:23;3422:31;3447:5;3422:31;:::i;3488:118::-;3574:5;3567:13;3560:21;3553:5;3550:32;3540:60;;3596:1;3593;3586:12;3611:382;3676:6;3684;3737:2;3725:9;3716:7;3712:23;3708:32;3705:52;;;3753:1;3750;3743:12;3705:52;3792:9;3779:23;3811:31;3836:5;3811:31;:::i;:::-;3861:5;-1:-1:-1;3918:2:1;3903:18;;3890:32;3931:30;3890:32;3931:30;:::i;:::-;3980:7;3970:17;;;3611:382;;;;;:::o;3998:671::-;4084:6;4092;4100;4108;4161:3;4149:9;4140:7;4136:23;4132:33;4129:53;;;4178:1;4175;4168:12;4129:53;4217:9;4204:23;4236:31;4261:5;4236:31;:::i;:::-;4286:5;-1:-1:-1;4343:2:1;4328:18;;4315:32;4356:33;4315:32;4356:33;:::i;:::-;4408:7;-1:-1:-1;4467:2:1;4452:18;;4439:32;4480:33;4439:32;4480:33;:::i;:::-;4532:7;-1:-1:-1;4591:2:1;4576:18;;4563:32;4604:33;4563:32;4604:33;:::i;:::-;3998:671;;;;-1:-1:-1;3998:671:1;;-1:-1:-1;;3998:671:1:o;4674:180::-;4733:6;4786:2;4774:9;4765:7;4761:23;4757:32;4754:52;;;4802:1;4799;4792:12;4754:52;-1:-1:-1;4825:23:1;;4674:180;-1:-1:-1;4674:180:1:o;5327:388::-;5395:6;5403;5456:2;5444:9;5435:7;5431:23;5427:32;5424:52;;;5472:1;5469;5462:12;5424:52;5511:9;5498:23;5530:31;5555:5;5530:31;:::i;:::-;5580:5;-1:-1:-1;5637:2:1;5622:18;;5609:32;5650:33;5609:32;5650:33;:::i;5720:380::-;5799:1;5795:12;;;;5842;;;5863:61;;5917:4;5909:6;5905:17;5895:27;;5863:61;5970:2;5962:6;5959:14;5939:18;5936:38;5933:161;;6016:10;6011:3;6007:20;6004:1;5997:31;6051:4;6048:1;6041:15;6079:4;6076:1;6069:15;5933:161;;5720:380;;;:::o;6105:356::-;6307:2;6289:21;;;6326:18;;;6319:30;6385:34;6380:2;6365:18;;6358:62;6452:2;6437:18;;6105:356::o;6734:184::-;6804:6;6857:2;6845:9;6836:7;6832:23;6828:32;6825:52;;;6873:1;6870;6863:12;6825:52;-1:-1:-1;6896:16:1;;6734:184;-1:-1:-1;6734:184:1:o;7657:245::-;7724:6;7777:2;7765:9;7756:7;7752:23;7748:32;7745:52;;;7793:1;7790;7783:12;7745:52;7825:9;7819:16;7844:28;7866:5;7844:28;:::i;8117:418::-;8319:2;8301:21;;;8358:2;8338:18;;;8331:30;8397:34;8392:2;8377:18;;8370:62;-1:-1:-1;;;8463:2:1;8448:18;;8441:52;8525:3;8510:19;;8117:418::o;12773:127::-;12834:10;12829:3;12825:20;12822:1;12815:31;12865:4;12862:1;12855:15;12889:4;12886:1;12879:15;12905:128;12945:3;12976:1;12972:6;12969:1;12966:13;12963:39;;;12982:18;;:::i;:::-;-1:-1:-1;13018:9:1;;12905:128::o;14475:209::-;-1:-1:-1;;14639:38:1;;;;14621:57;;14609:2;14594:18;;14475:209::o;15768:401::-;15970:2;15952:21;;;16009:2;15989:18;;;15982:30;16048:34;16043:2;16028:18;;16021:62;-1:-1:-1;;;16114:2:1;16099:18;;16092:35;16159:3;16144:19;;15768:401::o;16174:399::-;16376:2;16358:21;;;16415:2;16395:18;;;16388:30;16454:34;16449:2;16434:18;;16427:62;-1:-1:-1;;;16520:2:1;16505:18;;16498:33;16563:3;16548:19;;16174:399::o;17842:168::-;17882:7;17948:1;17944;17940:6;17936:14;17933:1;17930:21;17925:1;17918:9;17911:17;17907:45;17904:71;;;17955:18;;:::i;:::-;-1:-1:-1;17995:9:1;;17842:168::o;18015:217::-;18055:1;18081;18071:132;;18125:10;18120:3;18116:20;18113:1;18106:31;18160:4;18157:1;18150:15;18188:4;18185:1;18178:15;18071:132;-1:-1:-1;18217:9:1;;18015:217::o;18237:125::-;18277:4;18305:1;18302;18299:8;18296:34;;;18310:18;;:::i;:::-;-1:-1:-1;18347:9:1;;18237:125::o;21294:127::-;21355:10;21350:3;21346:20;21343:1;21336:31;21386:4;21383:1;21376:15;21410:4;21407:1;21400:15;21426:251;21496:6;21549:2;21537:9;21528:7;21524:23;21520:32;21517:52;;;21565:1;21562;21555:12;21517:52;21597:9;21591:16;21616:31;21641:5;21616:31;:::i;21682:980::-;21944:4;21992:3;21981:9;21977:19;22023:6;22012:9;22005:25;22049:2;22087:6;22082:2;22071:9;22067:18;22060:34;22130:3;22125:2;22114:9;22110:18;22103:31;22154:6;22189;22183:13;22220:6;22212;22205:22;22258:3;22247:9;22243:19;22236:26;;22297:2;22289:6;22285:15;22271:29;;22318:1;22328:195;22342:6;22339:1;22336:13;22328:195;;;22407:13;;-1:-1:-1;;;;;22403:39:1;22391:52;;22498:15;;;;22463:12;;;;22439:1;22357:9;22328:195;;;-1:-1:-1;;;;;;;22579:32:1;;;;22574:2;22559:18;;22552:60;-1:-1:-1;;;22643:3:1;22628:19;22621:35;22540:3;21682:980;-1:-1:-1;;;21682:980:1:o;23279:306::-;23367:6;23375;23383;23436:2;23424:9;23415:7;23411:23;23407:32;23404:52;;;23452:1;23449;23442:12;23404:52;23481:9;23475:16;23465:26;;23531:2;23520:9;23516:18;23510:25;23500:35;;23575:2;23564:9;23560:18;23554:25;23544:35;;23279:306;;;;;:::o

Swarm Source

ipfs://b840af986d900c869a423c0c769cdd6bd4dd6c0c330362f62d04cd99032a9017
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.