Feature Tip: Add private address tag to any address under My Name Tag !
ERC-20
Overview
Max Total Supply
1,000,000,000,000 TheDIE
Holders
81
Total Transfers
-
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Source Code Verified (Exact Match)
Contract Name:
THEDIEPROTOCOL
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-10-20 */ /** */ // The DIE Protocol // SPDX-License-Identifier: MIT pragma solidity >=0.6.0 <0.9.0; abstract contract Context { function _msgSender() internal view returns (address payable) { return payable(msg.sender); } function _msgData() internal view returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20Upgradeable { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/od/ai/nu/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } library Address { function isContract(address account) internal view returns (bool) { // According to EIP-1052, 0x0 is the value returned for not-yet created accounts // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned // for accounts without code, i.e. `keccak256('')` bytes32 codehash; bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470; // solhint-disable-next-line no-inline-assembly assembly { codehash := extcodehash(account) } return (codehash != accountHash && codehash != 0x0); } function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (bool success, ) = recipient.call{ value: amount }(""); require(success, "Address: unable to send value, recipient may have reverted"); } function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { return _functionCallWithValue(target, data, 0, errorMessage); } function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); return _functionCallWithValue(target, data, value, errorMessage); } function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) { require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{ value: weiValue }(data); if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } interface IUniswapV2Factory { event PairCreated(address indexed token0, address indexed token1, address lpPair, uint); function getPair(address tokenA, address tokenB) external view returns (address lpPair); function createPair(address tokenA, address tokenB) external returns (address lpPair); } interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); } interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; } contract THEDIEPROTOCOL is Context, IERC20Upgradeable { // Ownership moved to in-contract for customizability. address private _owner; mapping (address => uint256) private _rOwned; mapping (address => uint256) private _tOwned; mapping (address => bool) lpPairs; uint256 private timeSinceLastPair = 0; mapping (address => mapping (address => uint256)) private _allowances; mapping (address => bool) private _isExcludedFromFee; mapping (address => bool) private _isExcluded; address[] private _excluded; mapping (address => bool) private _liquidityHolders; uint256 private startingSupply; string private _name; string private _symbol; uint256 public _reflectFee = 0; uint256 public _liquidityFee = 0; uint256 public _marketingFee =0; uint256 public _buyReflectFee = _reflectFee; uint256 public _buyLiquidityFee = _liquidityFee; uint256 public _buyMarketingFee = _marketingFee; uint256 public _sellReflectFee = 0; uint256 public _sellLiquidityFee = 0; uint256 public _sellMarketingFee = 0; uint256 public _transferReflectFee = 0; uint256 public _transferLiquidityFee = 0; uint256 public _transferMarketingFee = 0; uint256 private maxReflectFee = 1000; uint256 private maxLiquidityFee = 1000; uint256 private maxMarketingFee = 2200; uint256 public _liquidityRatio = 0; uint256 public _marketingRatio = 0; uint256 private masterTaxDivisor = 10000; uint256 public MarketShare = 1; uint256 public DevShare = 0; uint256 public ValueDivisor = 1; uint256 private constant MAX = ~uint256(0); uint8 private _decimals; uint256 private _decimalsMul; uint256 private _tTotal; uint256 private _rTotal; uint256 private _tFeeTotal; IUniswapV2Router02 public dexRouter; address public lpPair; // UNI ROUTER address public _routerAddress; address public DEAD = 0x000000000000000000000000000000000000dEaD; address public ZERO = 0x0000000000000000000000000000000000000000; address payable private _devWallet; address payable private _marketWallet; bool inSwapAndLiquify; bool public swapAndLiquifyEnabled = false; uint256 private _maxTxAmount; uint256 public maxTxAmountUI; uint256 private _maxWalletSize; uint256 public maxWalletSizeUI; uint256 private swapThreshold; uint256 private swapAmount; bool tradingEnabled = true; bool public _hasLiqBeenAdded = false; uint256 private _liqAddBlock = 0; uint256 private _liqAddStamp = 0; bool private sameBlockActive = true; mapping (address => uint256) private lastTrade; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap); event SwapAndLiquifyEnabledUpdated(bool enabled); event SwapAndLiquify( uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiqudity ); event SniperCaught(address sniperAddress); uint256 Planted; bool contractInitialized = false; modifier lockTheSwap { inSwapAndLiquify = true; _; inSwapAndLiquify = false; } modifier onlyOwner() { require(_owner == _msgSender(), "Ownable: caller is not the owner"); _; } constructor () payable { // Set the owner. _owner = msg.sender; if (block.chainid == 56) { _routerAddress = 0x10ED43C718714eb63d5aA57B78B54704E256024E; } else if (block.chainid == 97) { _routerAddress = 0x9Ac64Cc6e4415144C455BD8E4837Fea55603e5c3; } else if (block.chainid == 1 || block.chainid == 4 || block.chainid == 3) { _routerAddress = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; } else { revert(); } _isExcludedFromFee[owner()] = true; _isExcludedFromFee[address(this)] = true; _liquidityHolders[owner()] = true; _approve(_msgSender(), _routerAddress, MAX); _approve(address(this), _routerAddress, MAX); } receive() external payable {} function intializeContract(address payable setMarketWallet, address payable setDevWallet, string memory _tokenname, string memory _tokensymbol) external onlyOwner { require(!contractInitialized); _marketWallet = payable(setMarketWallet); _devWallet = payable(setDevWallet); _name = _tokenname; _symbol = _tokensymbol; startingSupply = 1_000_000_000_000; if (startingSupply < 10000000000000) { _decimals = 18; _decimalsMul = _decimals; } else { _decimals = 9; _decimalsMul = _decimals; } _tTotal = startingSupply * (10**_decimalsMul); _rTotal = (MAX - (MAX % _tTotal)); dexRouter = IUniswapV2Router02(_routerAddress); lpPair = IUniswapV2Factory(dexRouter.factory()).createPair(dexRouter.WETH(), address(this)); lpPairs[lpPair] = true; _allowances[address(this)][address(dexRouter)] = type(uint256).max; _maxTxAmount = (_tTotal * 100) / 10000; maxTxAmountUI = (startingSupply * 1000) / 100000; _maxWalletSize = (_tTotal * 200) / 10000; maxWalletSizeUI = (startingSupply * 10) / 1000; swapThreshold = (_tTotal * 5) / 10000; swapAmount = (_tTotal * 5) / 1000; approve(_routerAddress, type(uint256).max); contractInitialized = true; _rOwned[owner()] = _rTotal; emit Transfer(ZERO, owner(), _tTotal); _approve(address(this), address(dexRouter), type(uint256).max); _transfer(owner(), address(this), balanceOf(owner())); dexRouter.addLiquidityETH{value: address(this).balance}( address(this), balanceOf(address(this)), 0, 0, owner(), block.timestamp ); Planted = block.number; } //=============================================================================================================== //=============================================================================================================== //=============================================================================================================== // Ownable removed as a lib and added here to allow for custom transfers and recnouncements. // This allows for removal of ownership privelages from the owner once renounced or transferred. function owner() public view returns (address) { return _owner; } function transferOwner(address newOwner) external onlyOwner() { require(newOwner != address(0), "Call renounceOwnership to transfer owner to the zero address."); require(newOwner != DEAD, "Call renounceOwnership to transfer owner to the zero address."); setExcludedFromFee(_owner, false); setExcludedFromFee(newOwner, true); setExcludedFromReward(newOwner, true); if (_devWallet == payable(_owner)) _devWallet = payable(newOwner); _allowances[_owner][newOwner] = balanceOf(_owner); if(balanceOf(_owner) > 0) { _transfer(_owner, newOwner, balanceOf(_owner)); } _owner = newOwner; emit OwnershipTransferred(_owner, newOwner); } function renounceOwnership() public virtual onlyOwner() { setExcludedFromFee(_owner, false); _owner = address(0); emit OwnershipTransferred(_owner, address(0)); } //=============================================================================================================== //=============================================================================================================== //=============================================================================================================== function totalSupply() external view override returns (uint256) { return _tTotal; } function decimals() external view returns (uint8) { return _decimals; } function symbol() external view returns (string memory) { return _symbol; } function name() external view returns (string memory) { return _name; } function getOwner() external view returns (address) { return owner(); } function allowance(address holder, address spender) external view override returns (uint256) { return _allowances[holder][spender]; } function balanceOf(address account) public view override returns (uint256) { if (_isExcluded[account]) return _tOwned[account]; return tokenFromReflection(_rOwned[account]); } function transfer(address recipient, uint256 amount) public override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } function approve(address spender, uint256 amount) public override returns (bool) { _approve(_msgSender(), spender, amount); return true; } function approveMax(address spender) public returns (bool) { return approve(spender, type(uint256).max); } function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) { _transfer(sender, recipient, amount); _approve(sender, _msgSender(), _allowances[sender][_msgSender()] - amount); return true; } function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue); return true; } function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender] - subtractedValue); return true; } function setNewRouter(address newRouter) external onlyOwner() { IUniswapV2Router02 _newRouter = IUniswapV2Router02(newRouter); address get_pair = IUniswapV2Factory(_newRouter.factory()).getPair(address(this), _newRouter.WETH()); if (get_pair == address(0)) { lpPair = IUniswapV2Factory(_newRouter.factory()).createPair(address(this), _newRouter.WETH()); } else { lpPair = get_pair; } dexRouter = _newRouter; _approve(address(this), newRouter, MAX); } function setLpPair(address pair, bool enabled) external onlyOwner { if (enabled == false) { lpPairs[pair] = false; } else { if (timeSinceLastPair != 0) { require(block.timestamp - timeSinceLastPair > 1 weeks, "Cannot set a new pair this week!"); } lpPairs[pair] = true; timeSinceLastPair = block.timestamp; } } function isExcludedFromReward(address account) public view returns (bool) { return _isExcluded[account]; } function isExcludedFromFee(address account) public view returns(bool) { return _isExcludedFromFee[account]; } function setTaxesBuy(uint256 reflect, uint256 liquidity, uint256 marketing) external onlyOwner { require(reflect <= maxReflectFee && liquidity <= maxLiquidityFee && marketing <= maxMarketingFee ); require(reflect + liquidity + marketing <= 4900); _buyReflectFee = reflect; _buyLiquidityFee = liquidity; _buyMarketingFee = marketing; } function setTaxesSell(uint256 reflect, uint256 liquidity, uint256 marketing) external onlyOwner { require(reflect <= maxReflectFee && liquidity <= maxLiquidityFee && marketing <= maxMarketingFee ); require(reflect + liquidity + marketing <= 4900); _sellReflectFee = reflect; _sellLiquidityFee = liquidity; _sellMarketingFee = marketing; } function setTaxesTransfer(uint256 reflect, uint256 liquidity, uint256 marketing) external onlyOwner { require(reflect <= maxReflectFee && liquidity <= maxLiquidityFee && marketing <= maxMarketingFee ); require(reflect + liquidity + marketing <= 4900); _transferReflectFee = reflect; _transferLiquidityFee = liquidity; _transferMarketingFee = marketing; } function setValues(uint256 ms, uint256 ds, uint256 vd) external onlyOwner { MarketShare = ms; DevShare = ds; ValueDivisor = vd; } function setRatios(uint256 liquidity, uint256 marketing) external onlyOwner { _liquidityRatio = liquidity; _marketingRatio = marketing; } function MaxTx(uint256 percent, uint256 divisor) external onlyOwner { uint256 check = (_tTotal * percent) / divisor; require(check >= (_tTotal / 1000), "Max Transaction amt must be above 0.1% of total supply."); _maxTxAmount = check; maxTxAmountUI = (startingSupply * percent) / divisor; } function WalletSize(uint256 percent, uint256 divisor) external onlyOwner { uint256 check = (_tTotal * percent) / divisor; require(check >= (_tTotal / 1000), "Max Wallet amt must be above 0.1% of total supply."); _maxWalletSize = check; maxWalletSizeUI = (startingSupply * percent) / divisor; } function setSwapSettings(uint256 thresholdPercent, uint256 thresholdDivisor, uint256 amountPercent, uint256 amountDivisor) external onlyOwner { swapThreshold = (_tTotal * thresholdPercent) / thresholdDivisor; swapAmount = (_tTotal * amountPercent) / amountDivisor; } function NewMarketWallet(address payable newWallet) external onlyOwner { require(_marketWallet != newWallet, "Wallet already set!"); _marketWallet = payable(newWallet); } function NewDevWallet(address payable newWallet) external onlyOwner { require(_devWallet != newWallet, "Wallet already set!"); _devWallet = payable(newWallet); } function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner { swapAndLiquifyEnabled = _enabled; emit SwapAndLiquifyEnabledUpdated(_enabled); } function setExcludedFromFee(address account, bool enabled) public onlyOwner { _isExcludedFromFee[account] = enabled; } function setExcludedFromReward(address account, bool enabled) public onlyOwner { if (enabled == true) { require(!_isExcluded[account], "Account is already excluded."); if(_rOwned[account] > 0) { _tOwned[account] = tokenFromReflection(_rOwned[account]); } _isExcluded[account] = true; _excluded.push(account); } else if (enabled == false) { require(_isExcluded[account], "Account is already included."); for (uint256 i = 0; i < _excluded.length; i++) { if (_excluded[i] == account) { _excluded[i] = _excluded[_excluded.length - 1]; _tOwned[account] = 0; _isExcluded[account] = false; _excluded.pop(); break; } } } } function totalFees() public view returns (uint256) { return _tFeeTotal; } function _hasLimits(address from, address to) internal view returns (bool) { return from != owner() && to != owner() && !_liquidityHolders[to] && !_liquidityHolders[from] && to != DEAD && to != address(0) && from != address(this); } function tokenFromReflection(uint256 rAmount) public view returns(uint256) { require(rAmount <= _rTotal, "Amount must be less than total reflections"); uint256 currentRate = _getRate(); return rAmount / currentRate; } function _approve(address sender, address spender, uint256 amount) internal { require(sender != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[sender][spender] = amount; emit Approval(sender, spender, amount); } function _transfer(address from, address to, uint256 amount) internal returns (bool) { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); require(amount > 0, "Transfer amount must be greater than zero"); if(_hasLimits(from, to)) { if(!tradingEnabled) { revert("Trading not yet enabled!"); } if (sameBlockActive) { if (lpPairs[from]){ require(lastTrade[to] != block.number); lastTrade[to] = block.number; } else { require(lastTrade[from] != block.number); lastTrade[from] = block.number; } } require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount."); if(to != _routerAddress && !lpPairs[to]) { require(balanceOf(to) + amount <= _maxWalletSize, "Transfer amount exceeds the maxWalletSize."); } } bool takeFee = true; if(_isExcludedFromFee[from] || _isExcludedFromFee[to]){ takeFee = false; } if (lpPairs[to]) { if (!inSwapAndLiquify && swapAndLiquifyEnabled ) { uint256 contractTokenBalance = balanceOf(address(this)); if (contractTokenBalance >= swapThreshold) { if(contractTokenBalance >= swapAmount) { contractTokenBalance = swapAmount; } swapAndLiquify(contractTokenBalance); } } } return _finalizeTransfer(from, to, amount, takeFee); } function swapAndLiquify(uint256 contractTokenBalance) internal lockTheSwap { if (_liquidityRatio + _marketingRatio == 0) return; uint256 toLiquify = ((contractTokenBalance * _liquidityRatio) / (_liquidityRatio + _marketingRatio)) / 2; uint256 toSwapForEth = contractTokenBalance - toLiquify; address[] memory path = new address[](2); path[0] = address(this); path[1] = dexRouter.WETH(); dexRouter.swapExactTokensForETHSupportingFeeOnTransferTokens( toSwapForEth, 0, path, address(this), block.timestamp ); uint256 liquidityBalance = ((address(this).balance * _liquidityRatio) / (_liquidityRatio + _marketingRatio)) / 2; if (toLiquify > 0) { dexRouter.addLiquidityETH{value: liquidityBalance}( address(this), toLiquify, 0, 0, DEAD, block.timestamp ); emit SwapAndLiquify(toLiquify, liquidityBalance, toLiquify); } if (contractTokenBalance - toLiquify > 0) { uint256 OperationsFee = (address(this).balance); uint256 marketFee = OperationsFee/(ValueDivisor)*(MarketShare); uint256 devfeeshare = OperationsFee/(ValueDivisor)*(DevShare); _marketWallet.transfer(marketFee); _devWallet.transfer(devfeeshare); } } function _checkLiquidityAdd(address from, address to) internal { require(!_hasLiqBeenAdded, "Liquidity already added and marked."); if (!_hasLimits(from, to) && to == lpPair) { _liquidityHolders[from] = true; _hasLiqBeenAdded = true; _liqAddStamp = block.timestamp; swapAndLiquifyEnabled = true; emit SwapAndLiquifyEnabledUpdated(true); } } function enableDieProtocol() public onlyOwner { require(!tradingEnabled, "Trading already enabled!"); setExcludedFromReward(address(this), true); setExcludedFromReward(lpPair, true); tradingEnabled = true; swapAndLiquifyEnabled = true; } struct ExtraValues { uint256 tTransferAmount; uint256 tFee; uint256 tLiquidity; uint256 rTransferAmount; uint256 rAmount; uint256 rFee; } function _finalizeTransfer(address from, address to, uint256 tAmount, bool takeFee) internal returns (bool) { if (!_hasLiqBeenAdded) { _checkLiquidityAdd(from, to); if (!_hasLiqBeenAdded && _hasLimits(from, to)) { revert("Only owner can transfer at this time."); } } ExtraValues memory values = _getValues(from, to, tAmount, takeFee); _rOwned[from] = _rOwned[from] - values.rAmount; _rOwned[to] = _rOwned[to] + values.rTransferAmount; if (_isExcluded[from] && !_isExcluded[to]) { _tOwned[from] = _tOwned[from] - tAmount; } else if (!_isExcluded[from] && _isExcluded[to]) { _tOwned[to] = _tOwned[to] + values.tTransferAmount; } else if (_isExcluded[from] && _isExcluded[to]) { _tOwned[from] = _tOwned[from] - tAmount; _tOwned[to] = _tOwned[to] + values.tTransferAmount; } if (values.tLiquidity > 0) _takeLiquidity(from, values.tLiquidity); if (values.rFee > 0 || values.tFee > 0) _takeReflect(values.rFee, values.tFee); emit Transfer(from, to, values.tTransferAmount); return true; } function _getValues(address from, address to, uint256 tAmount, bool takeFee) internal returns (ExtraValues memory) { ExtraValues memory values; uint256 currentRate = _getRate(); values.rAmount = tAmount * currentRate; if(takeFee) { if (lpPairs[to]) { _reflectFee = _sellReflectFee; _liquidityFee = _sellLiquidityFee; _marketingFee = _sellMarketingFee; } else if (lpPairs[from]) { _reflectFee = _buyReflectFee; _liquidityFee = _buyLiquidityFee; _marketingFee = _buyMarketingFee; } else { _reflectFee = _transferReflectFee; _liquidityFee = _transferLiquidityFee; _marketingFee = _transferMarketingFee; } values.tFee = (tAmount * _reflectFee) / masterTaxDivisor; values.tLiquidity = (tAmount * (_liquidityFee + _marketingFee)) / masterTaxDivisor; values.tTransferAmount = tAmount - (values.tFee + values.tLiquidity); values.rFee = values.tFee * currentRate; } else { values.tFee = 0; values.tLiquidity = 0; values.tTransferAmount = tAmount; values.rFee = 0; } values.rTransferAmount = values.rAmount - (values.rFee + (values.tLiquidity * currentRate)); return values; } function _getRate() internal view returns(uint256) { (uint256 rSupply, uint256 tSupply) = _getCurrentSupply(); return rSupply / tSupply; } function _getCurrentSupply() internal view returns(uint256, uint256) { uint256 rSupply = _rTotal; uint256 tSupply = _tTotal; for (uint256 i = 0; i < _excluded.length; i++) { if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _tTotal); rSupply = rSupply - _rOwned[_excluded[i]]; tSupply = tSupply - _tOwned[_excluded[i]]; } if (rSupply < _rTotal / _tTotal) return (_rTotal, _tTotal); return (rSupply, tSupply); } function _takeReflect(uint256 rFee, uint256 tFee) internal { _rTotal = _rTotal - rFee; _tFeeTotal = _tFeeTotal + tFee; } function takeETHback() external onlyOwner { payable(owner()).transfer(address(this).balance); } function _takeLiquidity(address sender, uint256 tLiquidity) internal { uint256 currentRate = _getRate(); uint256 rLiquidity = tLiquidity * currentRate; _rOwned[address(this)] = _rOwned[address(this)] + rLiquidity; if(_isExcluded[address(this)]) _tOwned[address(this)] = _tOwned[address(this)] + tLiquidity; emit Transfer(sender, address(this), tLiquidity); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"minTokensBeforeSwap","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","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":"address","name":"sniperAddress","type":"address"}],"name":"SniperCaught","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":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","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"},{"inputs":[],"name":"DEAD","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DevShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MarketShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"},{"internalType":"uint256","name":"divisor","type":"uint256"}],"name":"MaxTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"newWallet","type":"address"}],"name":"NewDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"newWallet","type":"address"}],"name":"NewMarketWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"ValueDivisor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"},{"internalType":"uint256","name":"divisor","type":"uint256"}],"name":"WalletSize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"ZERO","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyReflectFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_hasLiqBeenAdded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityRatio","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingRatio","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_reflectFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_routerAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellReflectFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_transferLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_transferMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_transferReflectFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"approveMax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"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":"dexRouter","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableDieProtocol","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"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":[{"internalType":"address payable","name":"setMarketWallet","type":"address"},{"internalType":"address payable","name":"setDevWallet","type":"address"},{"internalType":"string","name":"_tokenname","type":"string"},{"internalType":"string","name":"_tokensymbol","type":"string"}],"name":"intializeContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTxAmountUI","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletSizeUI","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":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setExcludedFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setExcludedFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setLpPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRouter","type":"address"}],"name":"setNewRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"marketing","type":"uint256"}],"name":"setRatios","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"thresholdPercent","type":"uint256"},{"internalType":"uint256","name":"thresholdDivisor","type":"uint256"},{"internalType":"uint256","name":"amountPercent","type":"uint256"},{"internalType":"uint256","name":"amountDivisor","type":"uint256"}],"name":"setSwapSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"reflect","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"marketing","type":"uint256"}],"name":"setTaxesBuy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"reflect","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"marketing","type":"uint256"}],"name":"setTaxesSell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"reflect","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"marketing","type":"uint256"}],"name":"setTaxesTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"ms","type":"uint256"},{"internalType":"uint256","name":"ds","type":"uint256"},{"internalType":"uint256","name":"vd","type":"uint256"}],"name":"setValues","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"takeETHback","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
608060405260006004819055600d819055600e819055600f8190556010819055601181905560128190556013819055601481905560158190556016819055601781905560188190556103e86019819055601a55610898601b55601c819055601d819055612710601e556001601f81905560208290556021819055602a80546001600160a01b031990811661dead17909155602b805482169055602d805460ff60a81b191690556034805461ffff191683179055603583905560368390556037805460ff199081169093179055603a80549092169091558154163317905560384614156200011257602980546001600160a01b0319167310ed43c718714eb63d5aa57b78b54704e256024e1790556200019b565b46606114156200014857602980546001600160a01b031916739ac64cc6e4415144c455bd8e4837fea55603e5c31790556200019b565b4660011480620001585750466004145b80620001645750466003145b156200019657602980546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d1790556200019b565b600080fd5b600160066000620001b46000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff1995861617905530815260069092528120805490921660019081179092556009906200020d6000546001600160a01b031690565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905562000256620002413390565b6029546001600160a01b031660001962000278565b602954620002729030906001600160a01b031660001962000278565b620003a4565b6001600160a01b038316620002e05760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084015b60405180910390fd5b6001600160a01b038216620003435760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401620002d7565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b613ebc80620003b46000396000f3fe6080604052600436106103c75760003560e01c80636c6d9fa1116101f2578063c49b9a801161010d578063dc44b6a0116100a0578063ea08d30b1161006f578063ea08d30b14610ade578063eafb5a3c14610af4578063f6540ec714610b14578063fb78680d14610b2a57600080fd5b8063dc44b6a014610a42578063dd62ed3e14610a58578063e60624b414610a9e578063e7c281d614610abe57600080fd5b8063d038b07e116100dc578063d038b07e146109cc578063d4154e85146109e2578063d9e6646014610a02578063da4b33c714610a2257600080fd5b8063c49b9a801461096b578063c5d241891461098b578063c8607952146109a1578063c9987e98146109b757600080fd5b8063893d20e811610185578063a9059cbb11610154578063a9059cbb146108f5578063b746454c14610915578063bac3052b14610935578063bbcea6bf1461095557600080fd5b8063893d20e8146108a25780638da5cb5b146108a257806395d89b41146108c0578063a457c2d7146108d557600080fd5b806371e078d5116101c157806371e078d51461081d57806380c581d11461083357806388790a681461085357806388f820201461086957600080fd5b80636c6d9fa1146107b25780636cbdd5e3146107d257806370a08231146107e8578063715018a61461080857600080fd5b806339509351116102e25780635342acb411610275578063640384091161024457806364038409146107465780636612e66f1461075c5780636639dd931461077c5780636bc87c3a1461079c57600080fd5b80635342acb4146106ad578063571ac8b0146106e6578063575f18e51461070657806358fa63ca1461072657600080fd5b80634a74bb02116102b15780634a74bb02146106375780634ef3cce5146106585780634fb2e45d1461066e57806350a8e0161461068e57600080fd5b806339509351146105cc578063452ed4f1146105ec5780634579a31c1461060c57806345e8c85c1461062157600080fd5b806315639c1b1161035a57806323b872dd1161032957806323b872dd146105545780632d83811914610574578063313ce56714610594578063384f6b51146105b657600080fd5b806315639c1b146104fd57806317eade331461051357806318160ddd1461052957806322976e0d1461053e57600080fd5b80630e954d8e116103965780630e954d8e14610482578063111be316146104a657806313114a9d146104c857806313e46192146104dd57600080fd5b806303fd2a45146103d357806306fdde03146104105780630758d92414610432578063095ea7b31461045257600080fd5b366103ce57005b600080fd5b3480156103df57600080fd5b50602a546103f3906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561041c57600080fd5b50610425610b4a565b6040516104079190613af4565b34801561043e57600080fd5b506027546103f3906001600160a01b031681565b34801561045e57600080fd5b5061047261046d3660046139ab565b610bdc565b6040519015158152602001610407565b34801561048e57600080fd5b5061049860205481565b604051908152602001610407565b3480156104b257600080fd5b506104c66104c1366004613a2d565b610bf3565b005b3480156104d457600080fd5b50602654610498565b3480156104e957600080fd5b506104c66104f8366004613976565b610c34565b34801561050957600080fd5b50610498600d5481565b34801561051f57600080fd5b5061049860215481565b34801561053557600080fd5b50602454610498565b34801561054a57600080fd5b50610498600f5481565b34801561056057600080fd5b5061047261056f366004613935565b610f28565b34801561058057600080fd5b5061049861058f3660046139f2565b610f7b565b3480156105a057600080fd5b5060225460405160ff9091168152602001610407565b3480156105c257600080fd5b50610498601c5481565b3480156105d857600080fd5b506104726105e73660046139ab565b610fff565b3480156105f857600080fd5b506028546103f3906001600160a01b031681565b34801561061857600080fd5b506104c6611036565b34801561062d57600080fd5b5061049860165481565b34801561064357600080fd5b50602d5461047290600160a81b900460ff1681565b34801561066457600080fd5b50610498601d5481565b34801561067a57600080fd5b506104c6610689366004613839565b6110f7565b34801561069a57600080fd5b5060345461047290610100900460ff1681565b3480156106b957600080fd5b506104726106c8366004613839565b6001600160a01b031660009081526006602052604090205460ff1690565b3480156106f257600080fd5b50610472610701366004613839565b611299565b34801561071257600080fd5b506104c6610721366004613a2d565b6112a7565b34801561073257600080fd5b50602b546103f3906001600160a01b031681565b34801561075257600080fd5b50610498602f5481565b34801561076857600080fd5b506104c6610777366004613976565b61132d565b34801561078857600080fd5b506104c6610797366004613a0b565b611382565b3480156107a857600080fd5b50610498600e5481565b3480156107be57600080fd5b506104c66107cd366004613a2d565b6113b7565b3480156107de57600080fd5b5061049860185481565b3480156107f457600080fd5b50610498610803366004613839565b61143d565b34801561081457600080fd5b506104c661149c565b34801561082957600080fd5b50610498601f5481565b34801561083f57600080fd5b506104c661084e366004613976565b61151b565b34801561085f57600080fd5b5061049860145481565b34801561087557600080fd5b50610472610884366004613839565b6001600160a01b031660009081526007602052604090205460ff1690565b3480156108ae57600080fd5b506000546001600160a01b03166103f3565b3480156108cc57600080fd5b506104256115fe565b3480156108e157600080fd5b506104726108f03660046139ab565b61160d565b34801561090157600080fd5b506104726109103660046139ab565b611644565b34801561092157600080fd5b506104c6610930366004613839565b611651565b34801561094157600080fd5b506104c6610950366004613839565b6116f1565b34801561096157600080fd5b5061049860135481565b34801561097757600080fd5b506104c66109863660046139d7565b611791565b34801561099757600080fd5b5061049860125481565b3480156109ad57600080fd5b5061049860155481565b3480156109c357600080fd5b506104c6611813565b3480156109d857600080fd5b5061049860105481565b3480156109ee57600080fd5b506104c66109fd366004613a0b565b61187a565b348015610a0e57600080fd5b506029546103f3906001600160a01b031681565b348015610a2e57600080fd5b506104c6610a3d366004613a0b565b61196d565b348015610a4e57600080fd5b5061049860115481565b348015610a6457600080fd5b50610498610a733660046138fc565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b348015610aaa57600080fd5b506104c6610ab9366004613873565b611a55565b348015610aca57600080fd5b506104c6610ad9366004613a2d565b611fa0565b348015610aea57600080fd5b5061049860175481565b348015610b0057600080fd5b506104c6610b0f366004613839565b612026565b348015610b2057600080fd5b5061049860315481565b348015610b3657600080fd5b506104c6610b45366004613a87565b6123b0565b6060600b8054610b5990613d99565b80601f0160208091040260200160405190810160405280929190818152602001828054610b8590613d99565b8015610bd25780601f10610ba757610100808354040283529160200191610bd2565b820191906000526020600020905b815481529060010190602001808311610bb557829003601f168201915b5050505050905090565b6000610be9338484612419565b5060015b92915050565b6000546001600160a01b03163314610c265760405162461bcd60e51b8152600401610c1d90613b49565b60405180910390fd5b601f92909255602055602155565b6000546001600160a01b03163314610c5e5760405162461bcd60e51b8152600401610c1d90613b49565b60018115151415610d93576001600160a01b03821660009081526007602052604090205460ff1615610cd25760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c7265616479206578636c756465642e000000006044820152606401610c1d565b6001600160a01b03821660009081526001602052604090205415610d2c576001600160a01b038216600090815260016020526040902054610d1290610f7b565b6001600160a01b0383166000908152600260205260409020555b506001600160a01b03166000818152600760205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319169091179055565b80610f24576001600160a01b03821660009081526007602052604090205460ff16610e005760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c726561647920696e636c756465642e000000006044820152606401610c1d565b60005b600854811015610f2257826001600160a01b031660088281548110610e2a57610e2a613e45565b6000918252602090912001546001600160a01b03161415610f105760088054610e5590600190613d82565b81548110610e6557610e65613e45565b600091825260209091200154600880546001600160a01b039092169183908110610e9157610e91613e45565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559185168152600282526040808220829055600790925220805460ff191690556008805480610ee957610ee9613e2f565b600082815260209020810160001990810180546001600160a01b0319169055019055610f22565b80610f1a81613dd4565b915050610e03565b505b5050565b6000610f3584848461253d565b506001600160a01b038416600090815260056020908152604080832033808552925290912054610f71918691610f6c908690613d82565b612419565b5060019392505050565b6000602554821115610fe25760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610c1d565b6000610fec612969565b9050610ff88184613c64565b9392505050565b3360008181526005602090815260408083206001600160a01b03871684529091528120549091610be9918590610f6c908690613c4c565b6000546001600160a01b031633146110605760405162461bcd60e51b8152600401610c1d90613b49565b60345460ff16156110b35760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c65642100000000000000006044820152606401610c1d565b6110be306001610c34565b6028546110d5906001600160a01b03166001610c34565b6034805460ff19166001179055602d805460ff60a81b1916600160a81b179055565b6000546001600160a01b031633146111215760405162461bcd60e51b8152600401610c1d90613b49565b6001600160a01b0381166111475760405162461bcd60e51b8152600401610c1d90613b7e565b602a546001600160a01b03828116911614156111755760405162461bcd60e51b8152600401610c1d90613b7e565b6000805461118e916001600160a01b039091169061132d565b61119981600161132d565b6111a4816001610c34565b600054602c546001600160a01b03908116911614156111d957602c80546001600160a01b0319166001600160a01b0383161790555b6000546111ee906001600160a01b031661143d565b600080546001600160a01b039081168252600560209081526040808420868416855290915282209290925580549091611227911661143d565b111561124e5760005461124c906001600160a01b0316826112478261143d565b61253d565b505b600080546001600160a01b0319166001600160a01b0383169081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b6000610bed82600019610bdc565b6000546001600160a01b031633146112d15760405162461bcd60e51b8152600401610c1d90613b49565b60195483111580156112e55750601a548211155b80156112f35750601b548111155b6112fc57600080fd5b6113248161130a8486613c4c565b6113149190613c4c565b111561131f57600080fd5b601692909255601755601855565b6000546001600160a01b031633146113575760405162461bcd60e51b8152600401610c1d90613b49565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146113ac5760405162461bcd60e51b8152600401610c1d90613b49565b601c91909155601d55565b6000546001600160a01b031633146113e15760405162461bcd60e51b8152600401610c1d90613b49565b60195483111580156113f55750601a548211155b80156114035750601b548111155b61140c57600080fd5b6113248161141a8486613c4c565b6114249190613c4c565b111561142f57600080fd5b601092909255601155601255565b6001600160a01b03811660009081526007602052604081205460ff161561147a57506001600160a01b031660009081526002602052604090205490565b6001600160a01b038216600090815260016020526040902054610bed90610f7b565b6000546001600160a01b031633146114c65760405162461bcd60e51b8152600401610c1d90613b49565b600080546114df916001600160a01b039091169061132d565b600080546001600160a01b031916815560405181907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3565b6000546001600160a01b031633146115455760405162461bcd60e51b8152600401610c1d90613b49565b8061156c57506001600160a01b03166000908152600360205260409020805460ff19169055565b600454156115d35762093a80600454426115869190613d82565b116115d35760405162461bcd60e51b815260206004820181905260248201527f43616e6e6f74207365742061206e657720706169722074686973207765656b216044820152606401610c1d565b6001600160a01b0382166000908152600360205260409020805460ff19166001179055426004555050565b6060600c8054610b5990613d99565b3360008181526005602090815260408083206001600160a01b03871684529091528120549091610be9918590610f6c908690613d82565b6000610f7133848461253d565b6000546001600160a01b0316331461167b5760405162461bcd60e51b8152600401610c1d90613b49565b602d546001600160a01b03828116911614156116cf5760405162461bcd60e51b815260206004820152601360248201527257616c6c657420616c7265616479207365742160681b6044820152606401610c1d565b602d80546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331461171b5760405162461bcd60e51b8152600401610c1d90613b49565b602c546001600160a01b038281169116141561176f5760405162461bcd60e51b815260206004820152601360248201527257616c6c657420616c7265616479207365742160681b6044820152606401610c1d565b602c80546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146117bb5760405162461bcd60e51b8152600401610c1d90613b49565b602d8054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599061180890831515815260200190565b60405180910390a150565b6000546001600160a01b0316331461183d5760405162461bcd60e51b8152600401610c1d90613b49565b600080546040516001600160a01b03909116914780156108fc02929091818181858888f19350505050158015611877573d6000803e3d6000fd5b50565b6000546001600160a01b031633146118a45760405162461bcd60e51b8152600401610c1d90613b49565b600081836024546118b59190613d63565b6118bf9190613c64565b90506103e86024546118d19190613c64565b8110156119465760405162461bcd60e51b815260206004820152603760248201527f4d6178205472616e73616374696f6e20616d74206d7573742062652061626f7660448201527f6520302e3125206f6620746f74616c20737570706c792e0000000000000000006064820152608401610c1d565b602e819055600a54829061195b908590613d63565b6119659190613c64565b602f55505050565b6000546001600160a01b031633146119975760405162461bcd60e51b8152600401610c1d90613b49565b600081836024546119a89190613d63565b6119b29190613c64565b90506103e86024546119c49190613c64565b811015611a2e5760405162461bcd60e51b815260206004820152603260248201527f4d61782057616c6c657420616d74206d7573742062652061626f766520302e31604482015271129037b3103a37ba30b61039bab838363c9760711b6064820152608401610c1d565b6030819055600a548290611a43908590613d63565b611a4d9190613c64565b603155505050565b6000546001600160a01b03163314611a7f5760405162461bcd60e51b8152600401610c1d90613b49565b603a5460ff1615611a8f57600080fd5b602d80546001600160a01b038087166001600160a01b031992831617909255602c8054928616929091169190911790558151611ad290600b9060208501906136fe565b508051611ae690600c9060208401906136fe565b5064e8d4a51000600a556022805460ff19166012908117909155602355602354611b1190600a613cbb565b600a54611b1e9190613d63565b6024819055611b2f90600019613def565b611b3b90600019613d82565b602555602954602780546001600160a01b0319166001600160a01b0390921691821790556040805163c45a015560e01b8152905163c45a015591600480820192602092909190829003018186803b158015611b9557600080fd5b505afa158015611ba9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bcd9190613856565b6001600160a01b031663c9c65396602760009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611c2957600080fd5b505afa158015611c3d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c619190613856565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152306024820152604401602060405180830381600087803b158015611ca857600080fd5b505af1158015611cbc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ce09190613856565b602880546001600160a01b0319166001600160a01b039283169081179091556000908152600360209081526040808320805460ff1916600117905530835260058252808320602754909416835292905220600019905560245461271090611d48906064613d63565b611d529190613c64565b602e55600a54620186a090611d69906103e8613d63565b611d739190613c64565b602f5560245461271090611d889060c8613d63565b611d929190613c64565b603055600a80546103e891611da79190613d63565b611db19190613c64565b60315560245461271090611dc6906005613d63565b611dd09190613c64565b6032556024546103e890611de5906005613d63565b611def9190613c64565b603355602954611e0a906001600160a01b0316600019610bdc565b50603a805460ff19166001908117909155602554906000611e336000546001600160a01b031690565b6001600160a01b03168152602081019190915260400160002055611e5f6000546001600160a01b031690565b602b546024546040519081526001600160a01b0392831692909116907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3602754611ec29030906001600160a01b0316600019612419565b611eed611ed76000546001600160a01b031690565b306112476108036000546001600160a01b031690565b506027546001600160a01b031663f305d7194730611f0a8161143d565b600080611f1f6000546001600160a01b031690565b426040518863ffffffff1660e01b8152600401611f4196959493929190613ab9565b6060604051808303818588803b158015611f5a57600080fd5b505af1158015611f6e573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611f939190613a59565b5050436039555050505050565b6000546001600160a01b03163314611fca5760405162461bcd60e51b8152600401610c1d90613b49565b6019548311158015611fde5750601a548211155b8015611fec5750601b548111155b611ff557600080fd5b611324816120038486613c4c565b61200d9190613c4c565b111561201857600080fd5b601392909255601455601555565b6000546001600160a01b031633146120505760405162461bcd60e51b8152600401610c1d90613b49565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561209057600080fd5b505afa1580156120a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120c89190613856565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561211057600080fd5b505afa158015612124573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121489190613856565b6040516001600160e01b031960e085901b1681526001600160a01b0392831660048201529116602482015260440160206040518083038186803b15801561218e57600080fd5b505afa1580156121a2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121c69190613856565b90506001600160a01b03811661236c57816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561220f57600080fd5b505afa158015612223573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122479190613856565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561228f57600080fd5b505afa1580156122a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122c79190613856565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b15801561230f57600080fd5b505af1158015612323573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123479190613856565b602880546001600160a01b0319166001600160a01b0392909216919091179055612388565b602880546001600160a01b0319166001600160a01b0383161790555b602780546001600160a01b0319166001600160a01b038416179055610f223084600019612419565b6000546001600160a01b031633146123da5760405162461bcd60e51b8152600401610c1d90613b49565b82846024546123e99190613d63565b6123f39190613c64565b6032556024548190612406908490613d63565b6124109190613c64565b60335550505050565b6001600160a01b03831661247b5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610c1d565b6001600160a01b0382166124dc5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610c1d565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006001600160a01b0384166125a35760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610c1d565b6001600160a01b0383166126055760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610c1d565b600082116126675760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610c1d565b612671848461298c565b156128915760345460ff166126c85760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642100000000000000006044820152606401610c1d565b60375460ff161561277a576001600160a01b03841660009081526003602052604090205460ff1615612739576001600160a01b03831660009081526038602052604090205443141561271957600080fd5b6001600160a01b038316600090815260386020526040902043905561277a565b6001600160a01b03841660009081526038602052604090205443141561275e57600080fd5b6001600160a01b03841660009081526038602052604090204390555b602e548211156127dd5760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610c1d565b6029546001600160a01b0384811691161480159061281457506001600160a01b03831660009081526003602052604090205460ff16155b1561289157603054826128268561143d565b6128309190613c4c565b11156128915760405162461bcd60e51b815260206004820152602a60248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785760448201526930b63632ba29b4bd329760b11b6064820152608401610c1d565b6001600160a01b03841660009081526006602052604090205460019060ff16806128d357506001600160a01b03841660009081526006602052604090205460ff165b156128dc575060005b6001600160a01b03841660009081526003602052604090205460ff161561295457602d54600160a01b900460ff161580156129205750602d54600160a81b900460ff165b156129545760006129303061143d565b9050603254811061295257603354811061294957506033545b61295281612a4c565b505b61296085858584612e00565b95945050505050565b6000806000612976613181565b90925090506129858183613c64565b9250505090565b600080546001600160a01b038481169116148015906129b957506000546001600160a01b03838116911614155b80156129de57506001600160a01b03821660009081526009602052604090205460ff16155b8015612a0357506001600160a01b03831660009081526009602052604090205460ff16155b8015612a1d5750602a546001600160a01b03838116911614155b8015612a3157506001600160a01b03821615155b8015610ff857506001600160a01b0383163014159392505050565b602d805460ff60a01b1916600160a01b179055601d54601c54612a6f9190613c4c565b612a7857612df0565b60006002601d54601c54612a8c9190613c4c565b601c54612a999085613d63565b612aa39190613c64565b612aad9190613c64565b90506000612abb8284613d82565b60408051600280825260608201835292935060009290916020830190803683370190505090503081600081518110612af557612af5613e45565b6001600160a01b03928316602091820292909201810191909152602754604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b158015612b4957600080fd5b505afa158015612b5d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b819190613856565b81600181518110612b9457612b94613e45565b6001600160a01b03928316602091820292909201015260275460405163791ac94760e01b815291169063791ac94790612bda908590600090869030904290600401613bdb565b600060405180830381600087803b158015612bf457600080fd5b505af1158015612c08573d6000803e3d6000fd5b5050505060006002601d54601c54612c209190613c4c565b601c54612c2d9047613d63565b612c379190613c64565b612c419190613c64565b90508315612d2057602754602a5460405163f305d71960e01b81526001600160a01b039283169263f305d719928592612c899230928b92600092839216904290600401613ab9565b6060604051808303818588803b158015612ca257600080fd5b505af1158015612cb6573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612cdb9190613a59565b505060408051868152602081018490529081018690527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561915060600160405180910390a15b6000612d2c8587613d82565b1115612deb57601f546021544791600091612d479084613c64565b612d519190613d63565b9050600060205460215484612d669190613c64565b612d709190613d63565b602d546040519192506001600160a01b03169083156108fc029084906000818181858888f19350505050158015612dab573d6000803e3d6000fd5b50602c546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015612de6573d6000803e3d6000fd5b505050505b505050505b50602d805460ff60a01b19169055565b603454600090610100900460ff16612e9457612e1c8585613304565b603454610100900460ff16158015612e395750612e39858561298c565b15612e945760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79206f776e65722063616e207472616e736665722061742074686973206044820152643a34b6b29760d91b6064820152608401610c1d565b6000612ea28686868661341e565b60808101516001600160a01b038816600090815260016020526040902054919250612ecc91613d82565b6001600160a01b0380881660009081526001602052604080822093909355606084015191881681529190912054612f039190613c4c565b6001600160a01b0380871660009081526001602090815260408083209490945591891681526007909152205460ff168015612f5757506001600160a01b03851660009081526007602052604090205460ff16155b15612f9e576001600160a01b038616600090815260026020526040902054612f80908590613d82565b6001600160a01b0387166000908152600260205260409020556130de565b6001600160a01b03861660009081526007602052604090205460ff16158015612fdf57506001600160a01b03851660009081526007602052604090205460ff165b156130275780516001600160a01b0386166000908152600260205260409020546130099190613c4c565b6001600160a01b0386166000908152600260205260409020556130de565b6001600160a01b03861660009081526007602052604090205460ff16801561306757506001600160a01b03851660009081526007602052604090205460ff165b156130de576001600160a01b038616600090815260026020526040902054613090908590613d82565b6001600160a01b03808816600090815260026020526040808220939093558351918816815291909120546130c49190613c4c565b6001600160a01b0386166000908152600260205260409020555b6040810151156130f6576130f686826040015161360c565b60008160a00151118061310d575060008160200151115b15613124576131248160a0015182602001516136d8565b846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836000015160405161316d91815260200190565b60405180910390a350600195945050505050565b6025546024546000918291825b6008548110156132d3578260016000600884815481106131b0576131b0613e45565b60009182526020808320909101546001600160a01b03168352820192909252604001902054118061321b57508160026000600884815481106131f4576131f4613e45565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561323157602554602454945094505050509091565b600160006008838154811061324857613248613e45565b60009182526020808320909101546001600160a01b031683528201929092526040019020546132779084613d82565b9250600260006008838154811061329057613290613e45565b60009182526020808320909101546001600160a01b031683528201929092526040019020546132bf9083613d82565b9150806132cb81613dd4565b91505061318e565b506024546025546132e49190613c64565b8210156132fb576025546024549350935050509091565b90939092509050565b603454610100900460ff16156133685760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201526232b21760e91b6064820152608401610c1d565b613372828261298c565b15801561338c57506028546001600160a01b038281169116145b15610f24576001600160a01b03821660009081526009602052604090819020805460ff191660019081179091556034805461ff00191661010017905542603655602d805460ff60a81b1916600160a81b17905590517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599161341291901515815260200190565b60405180910390a15050565b6134576040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6134906040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b600061349a612969565b90506134a68186613d63565b608083015283156135b6576001600160a01b03861660009081526003602052604090205460ff16156134e957601354600d55601454600e55601554600f55613534565b6001600160a01b03871660009081526003602052604090205460ff161561352157601054600d55601154600e55601254600f55613534565b601654600d55601754600e55601854600f555b601e54600d546135449087613d63565b61354e9190613c64565b6020830152601e54600f54600e546135669190613c4c565b6135709087613d63565b61357a9190613c64565b6040830181905260208301516135909190613c4c565b61359a9086613d82565b825260208201516135ac908290613d63565b60a08301526135cf565b6000602083018190526040830181905285835260a08301525b8082604001516135df9190613d63565b8260a001516135ee9190613c4c565b82608001516135fd9190613d82565b60608301525095945050505050565b6000613616612969565b905060006136248284613d63565b30600090815260016020526040902054909150613642908290613c4c565b3060009081526001602090815260408083209390935560079052205460ff16156136925730600090815260026020526040902054613681908490613c4c565b306000908152600260205260409020555b60405183815230906001600160a01b038616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a350505050565b816025546136e69190613d82565b6025556026546136f7908290613c4c565b6026555050565b82805461370a90613d99565b90600052602060002090601f01602090048101928261372c5760008555613772565b82601f1061374557805160ff1916838001178555613772565b82800160010185558215613772579182015b82811115613772578251825591602001919060010190613757565b5061377e929150613782565b5090565b5b8082111561377e5760008155600101613783565b803580151581146137a757600080fd5b919050565b600082601f8301126137bd57600080fd5b813567ffffffffffffffff808211156137d8576137d8613e5b565b604051601f8301601f19908116603f0116810190828211818310171561380057613800613e5b565b8160405283815286602085880101111561381957600080fd5b836020870160208301376000602085830101528094505050505092915050565b60006020828403121561384b57600080fd5b8135610ff881613e71565b60006020828403121561386857600080fd5b8151610ff881613e71565b6000806000806080858703121561388957600080fd5b843561389481613e71565b935060208501356138a481613e71565b9250604085013567ffffffffffffffff808211156138c157600080fd5b6138cd888389016137ac565b935060608701359150808211156138e357600080fd5b506138f0878288016137ac565b91505092959194509250565b6000806040838503121561390f57600080fd5b823561391a81613e71565b9150602083013561392a81613e71565b809150509250929050565b60008060006060848603121561394a57600080fd5b833561395581613e71565b9250602084013561396581613e71565b929592945050506040919091013590565b6000806040838503121561398957600080fd5b823561399481613e71565b91506139a260208401613797565b90509250929050565b600080604083850312156139be57600080fd5b82356139c981613e71565b946020939093013593505050565b6000602082840312156139e957600080fd5b610ff882613797565b600060208284031215613a0457600080fd5b5035919050565b60008060408385031215613a1e57600080fd5b50508035926020909101359150565b600080600060608486031215613a4257600080fd5b505081359360208301359350604090920135919050565b600080600060608486031215613a6e57600080fd5b8351925060208401519150604084015190509250925092565b60008060008060808587031215613a9d57600080fd5b5050823594602084013594506040840135936060013592509050565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b600060208083528351808285015260005b81811015613b2157858101830151858201604001528201613b05565b81811115613b33576000604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252603d908201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660408201527f6572206f776e657220746f20746865207a65726f20616464726573732e000000606082015260800190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015613c2b5784516001600160a01b031683529383019391830191600101613c06565b50506001600160a01b03969096166060850152505050608001529392505050565b60008219821115613c5f57613c5f613e03565b500190565b600082613c7357613c73613e19565b500490565b600181815b80851115613cb3578160001904821115613c9957613c99613e03565b80851615613ca657918102915b93841c9390800290613c7d565b509250929050565b6000610ff88383600082613cd157506001610bed565b81613cde57506000610bed565b8160018114613cf45760028114613cfe57613d1a565b6001915050610bed565b60ff841115613d0f57613d0f613e03565b50506001821b610bed565b5060208310610133831016604e8410600b8410161715613d3d575081810a610bed565b613d478383613c78565b8060001904821115613d5b57613d5b613e03565b029392505050565b6000816000190483118215151615613d7d57613d7d613e03565b500290565b600082821015613d9457613d94613e03565b500390565b600181811c90821680613dad57607f821691505b60208210811415613dce57634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415613de857613de8613e03565b5060010190565b600082613dfe57613dfe613e19565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461187757600080fdfea2646970667358221220b59e11712dd84db30326bf09e49edfae5309759377e1682a6c91ab978450c67c64736f6c63430008070033
Deployed Bytecode
0x6080604052600436106103c75760003560e01c80636c6d9fa1116101f2578063c49b9a801161010d578063dc44b6a0116100a0578063ea08d30b1161006f578063ea08d30b14610ade578063eafb5a3c14610af4578063f6540ec714610b14578063fb78680d14610b2a57600080fd5b8063dc44b6a014610a42578063dd62ed3e14610a58578063e60624b414610a9e578063e7c281d614610abe57600080fd5b8063d038b07e116100dc578063d038b07e146109cc578063d4154e85146109e2578063d9e6646014610a02578063da4b33c714610a2257600080fd5b8063c49b9a801461096b578063c5d241891461098b578063c8607952146109a1578063c9987e98146109b757600080fd5b8063893d20e811610185578063a9059cbb11610154578063a9059cbb146108f5578063b746454c14610915578063bac3052b14610935578063bbcea6bf1461095557600080fd5b8063893d20e8146108a25780638da5cb5b146108a257806395d89b41146108c0578063a457c2d7146108d557600080fd5b806371e078d5116101c157806371e078d51461081d57806380c581d11461083357806388790a681461085357806388f820201461086957600080fd5b80636c6d9fa1146107b25780636cbdd5e3146107d257806370a08231146107e8578063715018a61461080857600080fd5b806339509351116102e25780635342acb411610275578063640384091161024457806364038409146107465780636612e66f1461075c5780636639dd931461077c5780636bc87c3a1461079c57600080fd5b80635342acb4146106ad578063571ac8b0146106e6578063575f18e51461070657806358fa63ca1461072657600080fd5b80634a74bb02116102b15780634a74bb02146106375780634ef3cce5146106585780634fb2e45d1461066e57806350a8e0161461068e57600080fd5b806339509351146105cc578063452ed4f1146105ec5780634579a31c1461060c57806345e8c85c1461062157600080fd5b806315639c1b1161035a57806323b872dd1161032957806323b872dd146105545780632d83811914610574578063313ce56714610594578063384f6b51146105b657600080fd5b806315639c1b146104fd57806317eade331461051357806318160ddd1461052957806322976e0d1461053e57600080fd5b80630e954d8e116103965780630e954d8e14610482578063111be316146104a657806313114a9d146104c857806313e46192146104dd57600080fd5b806303fd2a45146103d357806306fdde03146104105780630758d92414610432578063095ea7b31461045257600080fd5b366103ce57005b600080fd5b3480156103df57600080fd5b50602a546103f3906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561041c57600080fd5b50610425610b4a565b6040516104079190613af4565b34801561043e57600080fd5b506027546103f3906001600160a01b031681565b34801561045e57600080fd5b5061047261046d3660046139ab565b610bdc565b6040519015158152602001610407565b34801561048e57600080fd5b5061049860205481565b604051908152602001610407565b3480156104b257600080fd5b506104c66104c1366004613a2d565b610bf3565b005b3480156104d457600080fd5b50602654610498565b3480156104e957600080fd5b506104c66104f8366004613976565b610c34565b34801561050957600080fd5b50610498600d5481565b34801561051f57600080fd5b5061049860215481565b34801561053557600080fd5b50602454610498565b34801561054a57600080fd5b50610498600f5481565b34801561056057600080fd5b5061047261056f366004613935565b610f28565b34801561058057600080fd5b5061049861058f3660046139f2565b610f7b565b3480156105a057600080fd5b5060225460405160ff9091168152602001610407565b3480156105c257600080fd5b50610498601c5481565b3480156105d857600080fd5b506104726105e73660046139ab565b610fff565b3480156105f857600080fd5b506028546103f3906001600160a01b031681565b34801561061857600080fd5b506104c6611036565b34801561062d57600080fd5b5061049860165481565b34801561064357600080fd5b50602d5461047290600160a81b900460ff1681565b34801561066457600080fd5b50610498601d5481565b34801561067a57600080fd5b506104c6610689366004613839565b6110f7565b34801561069a57600080fd5b5060345461047290610100900460ff1681565b3480156106b957600080fd5b506104726106c8366004613839565b6001600160a01b031660009081526006602052604090205460ff1690565b3480156106f257600080fd5b50610472610701366004613839565b611299565b34801561071257600080fd5b506104c6610721366004613a2d565b6112a7565b34801561073257600080fd5b50602b546103f3906001600160a01b031681565b34801561075257600080fd5b50610498602f5481565b34801561076857600080fd5b506104c6610777366004613976565b61132d565b34801561078857600080fd5b506104c6610797366004613a0b565b611382565b3480156107a857600080fd5b50610498600e5481565b3480156107be57600080fd5b506104c66107cd366004613a2d565b6113b7565b3480156107de57600080fd5b5061049860185481565b3480156107f457600080fd5b50610498610803366004613839565b61143d565b34801561081457600080fd5b506104c661149c565b34801561082957600080fd5b50610498601f5481565b34801561083f57600080fd5b506104c661084e366004613976565b61151b565b34801561085f57600080fd5b5061049860145481565b34801561087557600080fd5b50610472610884366004613839565b6001600160a01b031660009081526007602052604090205460ff1690565b3480156108ae57600080fd5b506000546001600160a01b03166103f3565b3480156108cc57600080fd5b506104256115fe565b3480156108e157600080fd5b506104726108f03660046139ab565b61160d565b34801561090157600080fd5b506104726109103660046139ab565b611644565b34801561092157600080fd5b506104c6610930366004613839565b611651565b34801561094157600080fd5b506104c6610950366004613839565b6116f1565b34801561096157600080fd5b5061049860135481565b34801561097757600080fd5b506104c66109863660046139d7565b611791565b34801561099757600080fd5b5061049860125481565b3480156109ad57600080fd5b5061049860155481565b3480156109c357600080fd5b506104c6611813565b3480156109d857600080fd5b5061049860105481565b3480156109ee57600080fd5b506104c66109fd366004613a0b565b61187a565b348015610a0e57600080fd5b506029546103f3906001600160a01b031681565b348015610a2e57600080fd5b506104c6610a3d366004613a0b565b61196d565b348015610a4e57600080fd5b5061049860115481565b348015610a6457600080fd5b50610498610a733660046138fc565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b348015610aaa57600080fd5b506104c6610ab9366004613873565b611a55565b348015610aca57600080fd5b506104c6610ad9366004613a2d565b611fa0565b348015610aea57600080fd5b5061049860175481565b348015610b0057600080fd5b506104c6610b0f366004613839565b612026565b348015610b2057600080fd5b5061049860315481565b348015610b3657600080fd5b506104c6610b45366004613a87565b6123b0565b6060600b8054610b5990613d99565b80601f0160208091040260200160405190810160405280929190818152602001828054610b8590613d99565b8015610bd25780601f10610ba757610100808354040283529160200191610bd2565b820191906000526020600020905b815481529060010190602001808311610bb557829003601f168201915b5050505050905090565b6000610be9338484612419565b5060015b92915050565b6000546001600160a01b03163314610c265760405162461bcd60e51b8152600401610c1d90613b49565b60405180910390fd5b601f92909255602055602155565b6000546001600160a01b03163314610c5e5760405162461bcd60e51b8152600401610c1d90613b49565b60018115151415610d93576001600160a01b03821660009081526007602052604090205460ff1615610cd25760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c7265616479206578636c756465642e000000006044820152606401610c1d565b6001600160a01b03821660009081526001602052604090205415610d2c576001600160a01b038216600090815260016020526040902054610d1290610f7b565b6001600160a01b0383166000908152600260205260409020555b506001600160a01b03166000818152600760205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319169091179055565b80610f24576001600160a01b03821660009081526007602052604090205460ff16610e005760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c726561647920696e636c756465642e000000006044820152606401610c1d565b60005b600854811015610f2257826001600160a01b031660088281548110610e2a57610e2a613e45565b6000918252602090912001546001600160a01b03161415610f105760088054610e5590600190613d82565b81548110610e6557610e65613e45565b600091825260209091200154600880546001600160a01b039092169183908110610e9157610e91613e45565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559185168152600282526040808220829055600790925220805460ff191690556008805480610ee957610ee9613e2f565b600082815260209020810160001990810180546001600160a01b0319169055019055610f22565b80610f1a81613dd4565b915050610e03565b505b5050565b6000610f3584848461253d565b506001600160a01b038416600090815260056020908152604080832033808552925290912054610f71918691610f6c908690613d82565b612419565b5060019392505050565b6000602554821115610fe25760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610c1d565b6000610fec612969565b9050610ff88184613c64565b9392505050565b3360008181526005602090815260408083206001600160a01b03871684529091528120549091610be9918590610f6c908690613c4c565b6000546001600160a01b031633146110605760405162461bcd60e51b8152600401610c1d90613b49565b60345460ff16156110b35760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c65642100000000000000006044820152606401610c1d565b6110be306001610c34565b6028546110d5906001600160a01b03166001610c34565b6034805460ff19166001179055602d805460ff60a81b1916600160a81b179055565b6000546001600160a01b031633146111215760405162461bcd60e51b8152600401610c1d90613b49565b6001600160a01b0381166111475760405162461bcd60e51b8152600401610c1d90613b7e565b602a546001600160a01b03828116911614156111755760405162461bcd60e51b8152600401610c1d90613b7e565b6000805461118e916001600160a01b039091169061132d565b61119981600161132d565b6111a4816001610c34565b600054602c546001600160a01b03908116911614156111d957602c80546001600160a01b0319166001600160a01b0383161790555b6000546111ee906001600160a01b031661143d565b600080546001600160a01b039081168252600560209081526040808420868416855290915282209290925580549091611227911661143d565b111561124e5760005461124c906001600160a01b0316826112478261143d565b61253d565b505b600080546001600160a01b0319166001600160a01b0383169081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b6000610bed82600019610bdc565b6000546001600160a01b031633146112d15760405162461bcd60e51b8152600401610c1d90613b49565b60195483111580156112e55750601a548211155b80156112f35750601b548111155b6112fc57600080fd5b6113248161130a8486613c4c565b6113149190613c4c565b111561131f57600080fd5b601692909255601755601855565b6000546001600160a01b031633146113575760405162461bcd60e51b8152600401610c1d90613b49565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146113ac5760405162461bcd60e51b8152600401610c1d90613b49565b601c91909155601d55565b6000546001600160a01b031633146113e15760405162461bcd60e51b8152600401610c1d90613b49565b60195483111580156113f55750601a548211155b80156114035750601b548111155b61140c57600080fd5b6113248161141a8486613c4c565b6114249190613c4c565b111561142f57600080fd5b601092909255601155601255565b6001600160a01b03811660009081526007602052604081205460ff161561147a57506001600160a01b031660009081526002602052604090205490565b6001600160a01b038216600090815260016020526040902054610bed90610f7b565b6000546001600160a01b031633146114c65760405162461bcd60e51b8152600401610c1d90613b49565b600080546114df916001600160a01b039091169061132d565b600080546001600160a01b031916815560405181907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3565b6000546001600160a01b031633146115455760405162461bcd60e51b8152600401610c1d90613b49565b8061156c57506001600160a01b03166000908152600360205260409020805460ff19169055565b600454156115d35762093a80600454426115869190613d82565b116115d35760405162461bcd60e51b815260206004820181905260248201527f43616e6e6f74207365742061206e657720706169722074686973207765656b216044820152606401610c1d565b6001600160a01b0382166000908152600360205260409020805460ff19166001179055426004555050565b6060600c8054610b5990613d99565b3360008181526005602090815260408083206001600160a01b03871684529091528120549091610be9918590610f6c908690613d82565b6000610f7133848461253d565b6000546001600160a01b0316331461167b5760405162461bcd60e51b8152600401610c1d90613b49565b602d546001600160a01b03828116911614156116cf5760405162461bcd60e51b815260206004820152601360248201527257616c6c657420616c7265616479207365742160681b6044820152606401610c1d565b602d80546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331461171b5760405162461bcd60e51b8152600401610c1d90613b49565b602c546001600160a01b038281169116141561176f5760405162461bcd60e51b815260206004820152601360248201527257616c6c657420616c7265616479207365742160681b6044820152606401610c1d565b602c80546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146117bb5760405162461bcd60e51b8152600401610c1d90613b49565b602d8054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599061180890831515815260200190565b60405180910390a150565b6000546001600160a01b0316331461183d5760405162461bcd60e51b8152600401610c1d90613b49565b600080546040516001600160a01b03909116914780156108fc02929091818181858888f19350505050158015611877573d6000803e3d6000fd5b50565b6000546001600160a01b031633146118a45760405162461bcd60e51b8152600401610c1d90613b49565b600081836024546118b59190613d63565b6118bf9190613c64565b90506103e86024546118d19190613c64565b8110156119465760405162461bcd60e51b815260206004820152603760248201527f4d6178205472616e73616374696f6e20616d74206d7573742062652061626f7660448201527f6520302e3125206f6620746f74616c20737570706c792e0000000000000000006064820152608401610c1d565b602e819055600a54829061195b908590613d63565b6119659190613c64565b602f55505050565b6000546001600160a01b031633146119975760405162461bcd60e51b8152600401610c1d90613b49565b600081836024546119a89190613d63565b6119b29190613c64565b90506103e86024546119c49190613c64565b811015611a2e5760405162461bcd60e51b815260206004820152603260248201527f4d61782057616c6c657420616d74206d7573742062652061626f766520302e31604482015271129037b3103a37ba30b61039bab838363c9760711b6064820152608401610c1d565b6030819055600a548290611a43908590613d63565b611a4d9190613c64565b603155505050565b6000546001600160a01b03163314611a7f5760405162461bcd60e51b8152600401610c1d90613b49565b603a5460ff1615611a8f57600080fd5b602d80546001600160a01b038087166001600160a01b031992831617909255602c8054928616929091169190911790558151611ad290600b9060208501906136fe565b508051611ae690600c9060208401906136fe565b5064e8d4a51000600a556022805460ff19166012908117909155602355602354611b1190600a613cbb565b600a54611b1e9190613d63565b6024819055611b2f90600019613def565b611b3b90600019613d82565b602555602954602780546001600160a01b0319166001600160a01b0390921691821790556040805163c45a015560e01b8152905163c45a015591600480820192602092909190829003018186803b158015611b9557600080fd5b505afa158015611ba9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bcd9190613856565b6001600160a01b031663c9c65396602760009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611c2957600080fd5b505afa158015611c3d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c619190613856565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152306024820152604401602060405180830381600087803b158015611ca857600080fd5b505af1158015611cbc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ce09190613856565b602880546001600160a01b0319166001600160a01b039283169081179091556000908152600360209081526040808320805460ff1916600117905530835260058252808320602754909416835292905220600019905560245461271090611d48906064613d63565b611d529190613c64565b602e55600a54620186a090611d69906103e8613d63565b611d739190613c64565b602f5560245461271090611d889060c8613d63565b611d929190613c64565b603055600a80546103e891611da79190613d63565b611db19190613c64565b60315560245461271090611dc6906005613d63565b611dd09190613c64565b6032556024546103e890611de5906005613d63565b611def9190613c64565b603355602954611e0a906001600160a01b0316600019610bdc565b50603a805460ff19166001908117909155602554906000611e336000546001600160a01b031690565b6001600160a01b03168152602081019190915260400160002055611e5f6000546001600160a01b031690565b602b546024546040519081526001600160a01b0392831692909116907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3602754611ec29030906001600160a01b0316600019612419565b611eed611ed76000546001600160a01b031690565b306112476108036000546001600160a01b031690565b506027546001600160a01b031663f305d7194730611f0a8161143d565b600080611f1f6000546001600160a01b031690565b426040518863ffffffff1660e01b8152600401611f4196959493929190613ab9565b6060604051808303818588803b158015611f5a57600080fd5b505af1158015611f6e573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611f939190613a59565b5050436039555050505050565b6000546001600160a01b03163314611fca5760405162461bcd60e51b8152600401610c1d90613b49565b6019548311158015611fde5750601a548211155b8015611fec5750601b548111155b611ff557600080fd5b611324816120038486613c4c565b61200d9190613c4c565b111561201857600080fd5b601392909255601455601555565b6000546001600160a01b031633146120505760405162461bcd60e51b8152600401610c1d90613b49565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561209057600080fd5b505afa1580156120a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120c89190613856565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561211057600080fd5b505afa158015612124573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121489190613856565b6040516001600160e01b031960e085901b1681526001600160a01b0392831660048201529116602482015260440160206040518083038186803b15801561218e57600080fd5b505afa1580156121a2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121c69190613856565b90506001600160a01b03811661236c57816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561220f57600080fd5b505afa158015612223573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122479190613856565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561228f57600080fd5b505afa1580156122a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122c79190613856565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b15801561230f57600080fd5b505af1158015612323573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123479190613856565b602880546001600160a01b0319166001600160a01b0392909216919091179055612388565b602880546001600160a01b0319166001600160a01b0383161790555b602780546001600160a01b0319166001600160a01b038416179055610f223084600019612419565b6000546001600160a01b031633146123da5760405162461bcd60e51b8152600401610c1d90613b49565b82846024546123e99190613d63565b6123f39190613c64565b6032556024548190612406908490613d63565b6124109190613c64565b60335550505050565b6001600160a01b03831661247b5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610c1d565b6001600160a01b0382166124dc5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610c1d565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006001600160a01b0384166125a35760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610c1d565b6001600160a01b0383166126055760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610c1d565b600082116126675760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610c1d565b612671848461298c565b156128915760345460ff166126c85760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642100000000000000006044820152606401610c1d565b60375460ff161561277a576001600160a01b03841660009081526003602052604090205460ff1615612739576001600160a01b03831660009081526038602052604090205443141561271957600080fd5b6001600160a01b038316600090815260386020526040902043905561277a565b6001600160a01b03841660009081526038602052604090205443141561275e57600080fd5b6001600160a01b03841660009081526038602052604090204390555b602e548211156127dd5760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610c1d565b6029546001600160a01b0384811691161480159061281457506001600160a01b03831660009081526003602052604090205460ff16155b1561289157603054826128268561143d565b6128309190613c4c565b11156128915760405162461bcd60e51b815260206004820152602a60248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785760448201526930b63632ba29b4bd329760b11b6064820152608401610c1d565b6001600160a01b03841660009081526006602052604090205460019060ff16806128d357506001600160a01b03841660009081526006602052604090205460ff165b156128dc575060005b6001600160a01b03841660009081526003602052604090205460ff161561295457602d54600160a01b900460ff161580156129205750602d54600160a81b900460ff165b156129545760006129303061143d565b9050603254811061295257603354811061294957506033545b61295281612a4c565b505b61296085858584612e00565b95945050505050565b6000806000612976613181565b90925090506129858183613c64565b9250505090565b600080546001600160a01b038481169116148015906129b957506000546001600160a01b03838116911614155b80156129de57506001600160a01b03821660009081526009602052604090205460ff16155b8015612a0357506001600160a01b03831660009081526009602052604090205460ff16155b8015612a1d5750602a546001600160a01b03838116911614155b8015612a3157506001600160a01b03821615155b8015610ff857506001600160a01b0383163014159392505050565b602d805460ff60a01b1916600160a01b179055601d54601c54612a6f9190613c4c565b612a7857612df0565b60006002601d54601c54612a8c9190613c4c565b601c54612a999085613d63565b612aa39190613c64565b612aad9190613c64565b90506000612abb8284613d82565b60408051600280825260608201835292935060009290916020830190803683370190505090503081600081518110612af557612af5613e45565b6001600160a01b03928316602091820292909201810191909152602754604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b158015612b4957600080fd5b505afa158015612b5d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b819190613856565b81600181518110612b9457612b94613e45565b6001600160a01b03928316602091820292909201015260275460405163791ac94760e01b815291169063791ac94790612bda908590600090869030904290600401613bdb565b600060405180830381600087803b158015612bf457600080fd5b505af1158015612c08573d6000803e3d6000fd5b5050505060006002601d54601c54612c209190613c4c565b601c54612c2d9047613d63565b612c379190613c64565b612c419190613c64565b90508315612d2057602754602a5460405163f305d71960e01b81526001600160a01b039283169263f305d719928592612c899230928b92600092839216904290600401613ab9565b6060604051808303818588803b158015612ca257600080fd5b505af1158015612cb6573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612cdb9190613a59565b505060408051868152602081018490529081018690527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561915060600160405180910390a15b6000612d2c8587613d82565b1115612deb57601f546021544791600091612d479084613c64565b612d519190613d63565b9050600060205460215484612d669190613c64565b612d709190613d63565b602d546040519192506001600160a01b03169083156108fc029084906000818181858888f19350505050158015612dab573d6000803e3d6000fd5b50602c546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015612de6573d6000803e3d6000fd5b505050505b505050505b50602d805460ff60a01b19169055565b603454600090610100900460ff16612e9457612e1c8585613304565b603454610100900460ff16158015612e395750612e39858561298c565b15612e945760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79206f776e65722063616e207472616e736665722061742074686973206044820152643a34b6b29760d91b6064820152608401610c1d565b6000612ea28686868661341e565b60808101516001600160a01b038816600090815260016020526040902054919250612ecc91613d82565b6001600160a01b0380881660009081526001602052604080822093909355606084015191881681529190912054612f039190613c4c565b6001600160a01b0380871660009081526001602090815260408083209490945591891681526007909152205460ff168015612f5757506001600160a01b03851660009081526007602052604090205460ff16155b15612f9e576001600160a01b038616600090815260026020526040902054612f80908590613d82565b6001600160a01b0387166000908152600260205260409020556130de565b6001600160a01b03861660009081526007602052604090205460ff16158015612fdf57506001600160a01b03851660009081526007602052604090205460ff165b156130275780516001600160a01b0386166000908152600260205260409020546130099190613c4c565b6001600160a01b0386166000908152600260205260409020556130de565b6001600160a01b03861660009081526007602052604090205460ff16801561306757506001600160a01b03851660009081526007602052604090205460ff165b156130de576001600160a01b038616600090815260026020526040902054613090908590613d82565b6001600160a01b03808816600090815260026020526040808220939093558351918816815291909120546130c49190613c4c565b6001600160a01b0386166000908152600260205260409020555b6040810151156130f6576130f686826040015161360c565b60008160a00151118061310d575060008160200151115b15613124576131248160a0015182602001516136d8565b846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836000015160405161316d91815260200190565b60405180910390a350600195945050505050565b6025546024546000918291825b6008548110156132d3578260016000600884815481106131b0576131b0613e45565b60009182526020808320909101546001600160a01b03168352820192909252604001902054118061321b57508160026000600884815481106131f4576131f4613e45565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561323157602554602454945094505050509091565b600160006008838154811061324857613248613e45565b60009182526020808320909101546001600160a01b031683528201929092526040019020546132779084613d82565b9250600260006008838154811061329057613290613e45565b60009182526020808320909101546001600160a01b031683528201929092526040019020546132bf9083613d82565b9150806132cb81613dd4565b91505061318e565b506024546025546132e49190613c64565b8210156132fb576025546024549350935050509091565b90939092509050565b603454610100900460ff16156133685760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201526232b21760e91b6064820152608401610c1d565b613372828261298c565b15801561338c57506028546001600160a01b038281169116145b15610f24576001600160a01b03821660009081526009602052604090819020805460ff191660019081179091556034805461ff00191661010017905542603655602d805460ff60a81b1916600160a81b17905590517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599161341291901515815260200190565b60405180910390a15050565b6134576040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6134906040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b600061349a612969565b90506134a68186613d63565b608083015283156135b6576001600160a01b03861660009081526003602052604090205460ff16156134e957601354600d55601454600e55601554600f55613534565b6001600160a01b03871660009081526003602052604090205460ff161561352157601054600d55601154600e55601254600f55613534565b601654600d55601754600e55601854600f555b601e54600d546135449087613d63565b61354e9190613c64565b6020830152601e54600f54600e546135669190613c4c565b6135709087613d63565b61357a9190613c64565b6040830181905260208301516135909190613c4c565b61359a9086613d82565b825260208201516135ac908290613d63565b60a08301526135cf565b6000602083018190526040830181905285835260a08301525b8082604001516135df9190613d63565b8260a001516135ee9190613c4c565b82608001516135fd9190613d82565b60608301525095945050505050565b6000613616612969565b905060006136248284613d63565b30600090815260016020526040902054909150613642908290613c4c565b3060009081526001602090815260408083209390935560079052205460ff16156136925730600090815260026020526040902054613681908490613c4c565b306000908152600260205260409020555b60405183815230906001600160a01b038616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a350505050565b816025546136e69190613d82565b6025556026546136f7908290613c4c565b6026555050565b82805461370a90613d99565b90600052602060002090601f01602090048101928261372c5760008555613772565b82601f1061374557805160ff1916838001178555613772565b82800160010185558215613772579182015b82811115613772578251825591602001919060010190613757565b5061377e929150613782565b5090565b5b8082111561377e5760008155600101613783565b803580151581146137a757600080fd5b919050565b600082601f8301126137bd57600080fd5b813567ffffffffffffffff808211156137d8576137d8613e5b565b604051601f8301601f19908116603f0116810190828211818310171561380057613800613e5b565b8160405283815286602085880101111561381957600080fd5b836020870160208301376000602085830101528094505050505092915050565b60006020828403121561384b57600080fd5b8135610ff881613e71565b60006020828403121561386857600080fd5b8151610ff881613e71565b6000806000806080858703121561388957600080fd5b843561389481613e71565b935060208501356138a481613e71565b9250604085013567ffffffffffffffff808211156138c157600080fd5b6138cd888389016137ac565b935060608701359150808211156138e357600080fd5b506138f0878288016137ac565b91505092959194509250565b6000806040838503121561390f57600080fd5b823561391a81613e71565b9150602083013561392a81613e71565b809150509250929050565b60008060006060848603121561394a57600080fd5b833561395581613e71565b9250602084013561396581613e71565b929592945050506040919091013590565b6000806040838503121561398957600080fd5b823561399481613e71565b91506139a260208401613797565b90509250929050565b600080604083850312156139be57600080fd5b82356139c981613e71565b946020939093013593505050565b6000602082840312156139e957600080fd5b610ff882613797565b600060208284031215613a0457600080fd5b5035919050565b60008060408385031215613a1e57600080fd5b50508035926020909101359150565b600080600060608486031215613a4257600080fd5b505081359360208301359350604090920135919050565b600080600060608486031215613a6e57600080fd5b8351925060208401519150604084015190509250925092565b60008060008060808587031215613a9d57600080fd5b5050823594602084013594506040840135936060013592509050565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b600060208083528351808285015260005b81811015613b2157858101830151858201604001528201613b05565b81811115613b33576000604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252603d908201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660408201527f6572206f776e657220746f20746865207a65726f20616464726573732e000000606082015260800190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015613c2b5784516001600160a01b031683529383019391830191600101613c06565b50506001600160a01b03969096166060850152505050608001529392505050565b60008219821115613c5f57613c5f613e03565b500190565b600082613c7357613c73613e19565b500490565b600181815b80851115613cb3578160001904821115613c9957613c99613e03565b80851615613ca657918102915b93841c9390800290613c7d565b509250929050565b6000610ff88383600082613cd157506001610bed565b81613cde57506000610bed565b8160018114613cf45760028114613cfe57613d1a565b6001915050610bed565b60ff841115613d0f57613d0f613e03565b50506001821b610bed565b5060208310610133831016604e8410600b8410161715613d3d575081810a610bed565b613d478383613c78565b8060001904821115613d5b57613d5b613e03565b029392505050565b6000816000190483118215151615613d7d57613d7d613e03565b500290565b600082821015613d9457613d94613e03565b500390565b600181811c90821680613dad57607f821691505b60208210811415613dce57634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415613de857613de8613e03565b5060010190565b600082613dfe57613dfe613e19565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461187757600080fdfea2646970667358221220b59e11712dd84db30326bf09e49edfae5309759377e1682a6c91ab978450c67c64736f6c63430008070033
Deployed Bytecode Sourcemap
8237:25250:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10231:64;;;;;;;;;;-1:-1:-1;10231:64:0;;;;-1:-1:-1;;;;;10231:64:0;;;;;;-1:-1:-1;;;;;5815:32:1;;;5797:51;;5785:2;5770:18;10231:64:0;;;;;;;;16727:71;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;10102:35::-;;;;;;;;;;-1:-1:-1;10102:35:0;;;;-1:-1:-1;;;;;10102:35:0;;;17403:161;;;;;;;;;;-1:-1:-1;17403:161:0;;;;;:::i;:::-;;:::i;:::-;;;6945:14:1;;6938:22;6920:41;;6908:2;6893:18;17403:161:0;6780:187:1;9819:27:0;;;;;;;;;;;;;;;;;;;15786:25:1;;;15774:2;15759:18;9819:27:0;15640:177:1;21035:161:0;;;;;;;;;;-1:-1:-1;21035:161:0;;;;;:::i;:::-;;:::i;:::-;;23973:87;;;;;;;;;;-1:-1:-1;24042:10:0;;23973:87;;23059:906;;;;;;;;;;-1:-1:-1;23059:906:0;;;;;:::i;:::-;;:::i;8960:30::-;;;;;;;;;;;;;;;;9853:31;;;;;;;;;;;;;;;;16480:83;;;;;;;;;;-1:-1:-1;16553:7:0;;16480:83;;9036:31;;;;;;;;;;;;;;;;17700:266;;;;;;;;;;-1:-1:-1;17700:266:0;;;;;:::i;:::-;;:::i;24400:250::-;;;;;;;;;;-1:-1:-1;24400:250:0;;;;;:::i;:::-;;:::i;16569:71::-;;;;;;;;;;-1:-1:-1;16628:9:0;;16569:71;;16628:9;;;;17273:36:1;;17261:2;17246:18;16569:71:0;17131:184:1;9649:34:0;;;;;;;;;;;;;;;;17974:215;;;;;;;;;;-1:-1:-1;17974:215:0;;;;;:::i;:::-;;:::i;10144:21::-;;;;;;;;;;-1:-1:-1;10144:21:0;;;;-1:-1:-1;;;;;10144:21:0;;;28800:289;;;;;;;;;;;;;:::i;9369:38::-;;;;;;;;;;;;;;;;10492:41;;;;;;;;;;-1:-1:-1;10492:41:0;;;;-1:-1:-1;;;10492:41:0;;;;;;9690:34;;;;;;;;;;;;;;;;15130:795;;;;;;;;;;-1:-1:-1;15130:795:0;;;;;:::i;:::-;;:::i;10800:36::-;;;;;;;;;;-1:-1:-1;10800:36:0;;;;;;;;;;;19551:123;;;;;;;;;;-1:-1:-1;19551:123:0;;;;;:::i;:::-;-1:-1:-1;;;;;19639:27:0;19615:4;19639:27;;;:18;:27;;;;;;;;;19551:123;17572:120;;;;;;;;;;-1:-1:-1;17572:120:0;;;;;:::i;:::-;;:::i;20572:455::-;;;;;;;;;;-1:-1:-1;20572:455:0;;;;;:::i;:::-;;:::i;10302:64::-;;;;;;;;;;-1:-1:-1;10302:64:0;;;;-1:-1:-1;;;;;10302:64:0;;;10581:28;;;;;;;;;;;;;;;;22919:132;;;;;;;;;;-1:-1:-1;22919:132:0;;;;;:::i;:::-;;:::i;21204:160::-;;;;;;;;;;-1:-1:-1;21204:160:0;;;;;:::i;:::-;;:::i;8997:32::-;;;;;;;;;;;;;;;;19682:435;;;;;;;;;;-1:-1:-1;19682:435:0;;;;;:::i;:::-;;:::i;9461:40::-;;;;;;;;;;;;;;;;17022:198;;;;;;;;;;-1:-1:-1;17022:198:0;;;;;:::i;:::-;;:::i;15933:194::-;;;;;;;;;;;;;:::i;9782:30::-;;;;;;;;;;;;;;;;18991:424;;;;;;;;;;-1:-1:-1;18991:424:0;;;;;:::i;:::-;;:::i;9277:36::-;;;;;;;;;;;;;;;;19423:120;;;;;;;;;;-1:-1:-1;19423:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;19515:20:0;19491:4;19515:20;;;:11;:20;;;;;;;;;19423:120;16804:71;;;;;;;;;;-1:-1:-1;16847:7:0;15108:6;-1:-1:-1;;;;;15108:6:0;16804:71;;16646:75;;;;;;;;;;;;;:::i;18197:225::-;;;;;;;;;;-1:-1:-1;18197:225:0;;;;;:::i;:::-;;:::i;17228:167::-;;;;;;;;;;-1:-1:-1;17228:167:0;;;;;:::i;:::-;;:::i;22349:193::-;;;;;;;;;;-1:-1:-1;22349:193:0;;;;;:::i;:::-;;:::i;22550:184::-;;;;;;;;;;-1:-1:-1;22550:184:0;;;;;:::i;:::-;;:::i;9236:34::-;;;;;;;;;;;;;;;;22740:171;;;;;;;;;;-1:-1:-1;22740:171:0;;;;;:::i;:::-;;:::i;9180:47::-;;;;;;;;;;;;;;;;9320:36;;;;;;;;;;;;;;;;32940:109;;;;;;;;;;;;;:::i;9076:43::-;;;;;;;;;;;;;;;;21372:330;;;;;;;;;;-1:-1:-1;21372:330:0;;;;;:::i;:::-;;:::i;10193:29::-;;;;;;;;;;-1:-1:-1;10193:29:0;;;;-1:-1:-1;;;;;10193:29:0;;;21710:334;;;;;;;;;;-1:-1:-1;21710:334:0;;;;;:::i;:::-;;:::i;9126:47::-;;;;;;;;;;;;;;;;16881:133;;;;;;;;;;-1:-1:-1;16881:133:0;;;;;:::i;:::-;-1:-1:-1;;;;;16983:19:0;;;16965:7;16983:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;16881:133;12563:1927;;;;;;;;;;-1:-1:-1;12563:1927:0;;;;;:::i;:::-;;:::i;20125:439::-;;;;;;;;;;-1:-1:-1;20125:439:0;;;;;:::i;:::-;;:::i;9414:40::-;;;;;;;;;;;;;;;;18430:553;;;;;;;;;;-1:-1:-1;18430:553:0;;;;;:::i;:::-;;:::i;10655:30::-;;;;;;;;;;;;;;;;22052:289;;;;;;;;;;-1:-1:-1;22052:289:0;;;;;:::i;:::-;;:::i;16727:71::-;16766:13;16790:5;16783:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16727:71;:::o;17403:161::-;17478:4;17495:39;223:10;17518:7;17527:6;17495:8;:39::i;:::-;-1:-1:-1;17552:4:0;17403:161;;;;;:::o;21035:::-;11643:6;;-1:-1:-1;;;;;11643:6:0;223:10;11643:22;11635:67;;;;-1:-1:-1;;;11635:67:0;;;;;;;:::i;:::-;;;;;;;;;21120:11:::1;:16:::0;;;;21147:8:::1;:13:::0;21171:12:::1;:17:::0;21035:161::o;23059:906::-;11643:6;;-1:-1:-1;;;;;11643:6:0;223:10;11643:22;11635:67;;;;-1:-1:-1;;;11635:67:0;;;;;;;:::i;:::-;23164:4:::1;23153:15:::0;::::1;;;23149:809;;;-1:-1:-1::0;;;;;23194:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;23193:21;23185:62;;;::::0;-1:-1:-1;;;23185:62:0;;12300:2:1;23185:62:0::1;::::0;::::1;12282:21:1::0;12339:2;12319:18;;;12312:30;12378;12358:18;;;12351:58;12426:18;;23185:62:0::1;12098:352:1::0;23185:62:0::1;-1:-1:-1::0;;;;;23265:16:0;::::1;23284:1;23265:16:::0;;;:7:::1;:16;::::0;;;;;:20;23262:116:::1;;-1:-1:-1::0;;;;;23345:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;23325:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;23306:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;23262:116:::1;-1:-1:-1::0;;;;;;23392:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;23392:27:0::1;23415:4;23392:27:::0;;::::1;::::0;;;23434:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;23434:23:0::1;::::0;;::::1;::::0;;23059:906::o;23149:809::-:1;23479:16:::0;23475:483:::1;;-1:-1:-1::0;;;;;23520:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;23512:61;;;::::0;-1:-1:-1;;;23512:61:0;;10346:2:1;23512:61:0::1;::::0;::::1;10328:21:1::0;10385:2;10365:18;;;10358:30;10424;10404:18;;;10397:58;10472:18;;23512:61:0::1;10144:352:1::0;23512:61:0::1;23593:9;23588:359;23612:9;:16:::0;23608:20;::::1;23588:359;;;23674:7;-1:-1:-1::0;;;;;23658:23:0::1;:9;23668:1;23658:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;23658:12:0::1;:23;23654:278;;;23721:9;23731:16:::0;;:20:::1;::::0;23750:1:::1;::::0;23731:20:::1;:::i;:::-;23721:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;23706:9:::1;:12:::0;;-1:-1:-1;;;;;23721:31:0;;::::1;::::0;23716:1;;23706:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;23706:46:0::1;-1:-1:-1::0;;;;;23706:46:0;;::::1;;::::0;;23775:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;23818:11:::1;:20:::0;;;;:28;;-1:-1:-1;;23818:28:0::1;::::0;;23869:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;23869:15:0;;;;;-1:-1:-1;;;;;;23869:15:0::1;::::0;;;;;23907:5:::1;;23654:278;23630:3:::0;::::1;::::0;::::1;:::i;:::-;;;;23588:359;;;;23475:483;23059:906:::0;;:::o;17700:266::-;17798:4;17815:36;17825:6;17833:9;17844:6;17815:9;:36::i;:::-;-1:-1:-1;;;;;;17893:19:0;;;;;;:11;:19;;;;;;;;223:10;17893:33;;;;;;;;;17862:74;;17871:6;;17893:42;;17929:6;;17893:42;:::i;:::-;17862:8;:74::i;:::-;-1:-1:-1;17954:4:0;17700:266;;;;;:::o;24400:250::-;24466:7;24505;;24494;:18;;24486:73;;;;-1:-1:-1;;;24486:73:0;;8767:2:1;24486:73:0;;;8749:21:1;8806:2;8786:18;;;8779:30;8845:34;8825:18;;;8818:62;-1:-1:-1;;;8896:18:1;;;8889:40;8946:19;;24486:73:0;8565:406:1;24486:73:0;24570:19;24593:10;:8;:10::i;:::-;24570:33;-1:-1:-1;24621:21:0;24570:33;24621:7;:21;:::i;:::-;24614:28;24400:250;-1:-1:-1;;;24400:250:0:o;17974:215::-;223:10;18062:4;18111:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;18111:34:0;;;;;;;;;;18062:4;;18079:80;;18102:7;;18111:47;;18148:10;;18111:47;:::i;28800:289::-;11643:6;;-1:-1:-1;;;;;11643:6:0;223:10;11643:22;11635:67;;;;-1:-1:-1;;;11635:67:0;;;;;;;:::i;:::-;28866:14:::1;::::0;::::1;;28865:15;28857:52;;;::::0;-1:-1:-1;;;28857:52:0;;15059:2:1;28857:52:0::1;::::0;::::1;15041:21:1::0;15098:2;15078:18;;;15071:30;15137:26;15117:18;;;15110:54;15181:18;;28857:52:0::1;14857:348:1::0;28857:52:0::1;28920:42;28950:4;28957;28920:21;:42::i;:::-;28995:6;::::0;28973:35:::1;::::0;-1:-1:-1;;;;;28995:6:0::1;::::0;28973:21:::1;:35::i;:::-;29021:14;:21:::0;;-1:-1:-1;;29021:21:0::1;29038:4;29021:21;::::0;;29053::::1;:28:::0;;-1:-1:-1;;;;29053:28:0::1;-1:-1:-1::0;;;29053:28:0::1;::::0;;28800:289::o;15130:795::-;11643:6;;-1:-1:-1;;;;;11643:6:0;223:10;11643:22;11635:67;;;;-1:-1:-1;;;11635:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;15211:22:0;::::1;15203:96;;;;-1:-1:-1::0;;;15203:96:0::1;;;;;;;:::i;:::-;15330:4;::::0;-1:-1:-1;;;;;15318:16:0;;::::1;15330:4:::0;::::1;15318:16;;15310:90;;;;-1:-1:-1::0;;;15310:90:0::1;;;;;;;:::i;:::-;15430:6;::::0;;15411:33:::1;::::0;-1:-1:-1;;;;;15430:6:0;;::::1;::::0;15411:18:::1;:33::i;:::-;15455:34;15474:8;15484:4;15455:18;:34::i;:::-;15500:37;15522:8;15532:4;15500:21;:37::i;:::-;15584:6;::::0;15562:10:::1;::::0;-1:-1:-1;;;;;15562:10:0;;::::1;15584:6:::0;::::1;15562:29;15558:78;;;15606:10;:30:::0;;-1:-1:-1;;;;;;15606:30:0::1;-1:-1:-1::0;;;;;15606:30:0;::::1;;::::0;;15558:78:::1;15699:6;::::0;15689:17:::1;::::0;-1:-1:-1;;;;;15699:6:0::1;15689:9;:17::i;:::-;15657:19;15669:6:::0;;-1:-1:-1;;;;;15669:6:0;;::::1;15657:19:::0;;:11:::1;:19;::::0;;;;;;;:29;;::::1;::::0;;;;;;;:49;;;;15730:6;;15657:19;;15720:17:::1;::::0;15730:6:::1;15720:9;:17::i;:::-;:21;15717:99;;;15768:6;::::0;15758:46:::1;::::0;-1:-1:-1;;;;;15768:6:0::1;15776:8:::0;15786:17:::1;15768:6:::0;15786:9:::1;:17::i;:::-;15758:9;:46::i;:::-;;15717:99;15836:6;:17:::0;;-1:-1:-1;;;;;;15836:17:0::1;-1:-1:-1::0;;;;;15836:17:0;::::1;::::0;;::::1;::::0;;15869:38:::1;::::0;15836:17;;;;15869:38:::1;::::0;15836:6;15869:38:::1;15130:795:::0;:::o;17572:120::-;17625:4;17649:35;17657:7;-1:-1:-1;;17649:7:0;:35::i;20572:455::-;11643:6;;-1:-1:-1;;;;;11643:6:0;223:10;11643:22;11635:67;;;;-1:-1:-1;;;11635:67:0;;;;;;;:::i;:::-;20702:13:::1;;20691:7;:24;;:73;;;;;20749:15;;20736:9;:28;;20691:73;:122;;;;;20798:15;;20785:9;:28;;20691:122;20683:149;;;::::0;::::1;;20886:4;20873:9:::0;20851:19:::1;20861:9:::0;20851:7;:19:::1;:::i;:::-;:31;;;;:::i;:::-;:39;;20843:48;;;::::0;::::1;;20902:19;:29:::0;;;;20942:21:::1;:33:::0;20986:21:::1;:33:::0;20572:455::o;22919:132::-;11643:6;;-1:-1:-1;;;;;11643:6:0;223:10;11643:22;11635:67;;;;-1:-1:-1;;;11635:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23006:27:0;;;::::1;;::::0;;;:18:::1;:27;::::0;;;;:37;;-1:-1:-1;;23006:37:0::1;::::0;::::1;;::::0;;;::::1;::::0;;22919:132::o;21204:160::-;11643:6;;-1:-1:-1;;;;;11643:6:0;223:10;11643:22;11635:67;;;;-1:-1:-1;;;11635:67:0;;;;;;;:::i;:::-;21291:15:::1;:27:::0;;;;21329:15:::1;:27:::0;21204:160::o;19682:435::-;11643:6;;-1:-1:-1;;;;;11643:6:0;223:10;11643:22;11635:67;;;;-1:-1:-1;;;11635:67:0;;;;;;;:::i;:::-;19807:13:::1;;19796:7;:24;;:73;;;;;19854:15;;19841:9;:28;;19796:73;:122;;;;;19903:15;;19890:9;:28;;19796:122;19788:149;;;::::0;::::1;;19991:4;19978:9:::0;19956:19:::1;19966:9:::0;19956:7;:19:::1;:::i;:::-;:31;;;;:::i;:::-;:39;;19948:48;;;::::0;::::1;;20007:14;:24:::0;;;;20042:16:::1;:28:::0;20081:16:::1;:28:::0;19682:435::o;17022:198::-;-1:-1:-1;;;;;17112:20:0;;17088:7;17112:20;;;:11;:20;;;;;;;;17108:49;;;-1:-1:-1;;;;;;17141:16:0;;;;;:7;:16;;;;;;;17022:198::o;17108:49::-;-1:-1:-1;;;;;17195:16:0;;;;;;:7;:16;;;;;;17175:37;;:19;:37::i;15933:194::-;11643:6;;-1:-1:-1;;;;;11643:6:0;223:10;11643:22;11635:67;;;;-1:-1:-1;;;11635:67:0;;;;;;;:::i;:::-;16019:6:::1;::::0;;16000:33:::1;::::0;-1:-1:-1;;;;;16019:6:0;;::::1;::::0;16000:18:::1;:33::i;:::-;16061:1;16044:19:::0;;-1:-1:-1;;;;;;16044:19:0::1;::::0;;16079:40:::1;::::0;16061:1;;16079:40:::1;::::0;16061:1;;16079:40:::1;15933:194::o:0;18991:424::-;11643:6;;-1:-1:-1;;;;;11643:6:0;223:10;11643:22;11635:67;;;;-1:-1:-1;;;11635:67:0;;;;;;;:::i;:::-;19072:16;19068:340:::1;;-1:-1:-1::0;;;;;;19105:13:0::1;19121:5;19105:13:::0;;;:7:::1;:13;::::0;;;;:21;;-1:-1:-1;;19105:21:0::1;::::0;;23059:906::o;19068:340::-:1;19163:17;::::0;:22;19159:153:::1;;19252:7;19232:17;;19214:15;:35;;;;:::i;:::-;:45;19206:90;;;::::0;-1:-1:-1;;;19206:90:0;;9985:2:1;19206:90:0::1;::::0;::::1;9967:21:1::0;;;10004:18;;;9997:30;10063:34;10043:18;;;10036:62;10115:18;;19206:90:0::1;9783:356:1::0;19206:90:0::1;-1:-1:-1::0;;;;;19326:13:0;::::1;;::::0;;;:7:::1;:13;::::0;;;;:20;;-1:-1:-1;;19326:20:0::1;19342:4;19326:20;::::0;;19381:15:::1;19361:17;:35:::0;18991:424;;:::o;16646:75::-;16687:13;16711:7;16704:14;;;;;:::i;18197:225::-;223:10;18290:4;18339:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;18339:34:0;;;;;;;;;;18290:4;;18307:85;;18330:7;;18339:52;;18376:15;;18339:52;:::i;17228:167::-;17306:4;17323:42;223:10;17347:9;17358:6;17323:9;:42::i;22349:193::-;11643:6;;-1:-1:-1;;;;;11643:6:0;223:10;11643:22;11635:67;;;;-1:-1:-1;;;11635:67:0;;;;;;;:::i;:::-;22439:13:::1;::::0;-1:-1:-1;;;;;22439:26:0;;::::1;:13:::0;::::1;:26;;22431:58;;;::::0;-1:-1:-1;;;22431:58:0;;11952:2:1;22431:58:0::1;::::0;::::1;11934:21:1::0;11991:2;11971:18;;;11964:30;-1:-1:-1;;;12010:18:1;;;12003:49;12069:18;;22431:58:0::1;11750:343:1::0;22431:58:0::1;22500:13;:34:::0;;-1:-1:-1;;;;;;22500:34:0::1;-1:-1:-1::0;;;;;22500:34:0;;;::::1;::::0;;;::::1;::::0;;22349:193::o;22550:184::-;11643:6;;-1:-1:-1;;;;;11643:6:0;223:10;11643:22;11635:67;;;;-1:-1:-1;;;11635:67:0;;;;;;;:::i;:::-;22637:10:::1;::::0;-1:-1:-1;;;;;22637:23:0;;::::1;:10:::0;::::1;:23;;22629:55;;;::::0;-1:-1:-1;;;22629:55:0;;11952:2:1;22629:55:0::1;::::0;::::1;11934:21:1::0;11991:2;11971:18;;;11964:30;-1:-1:-1;;;12010:18:1;;;12003:49;12069:18;;22629:55:0::1;11750:343:1::0;22629:55:0::1;22695:10;:31:::0;;-1:-1:-1;;;;;;22695:31:0::1;-1:-1:-1::0;;;;;22695:31:0;;;::::1;::::0;;;::::1;::::0;;22550:184::o;22740:171::-;11643:6;;-1:-1:-1;;;;;11643:6:0;223:10;11643:22;11635:67;;;;-1:-1:-1;;;11635:67:0;;;;;;;:::i;:::-;22817:21:::1;:32:::0;;;::::1;;-1:-1:-1::0;;;22817:32:0::1;-1:-1:-1::0;;;;22817:32:0;;::::1;;::::0;;22865:38:::1;::::0;::::1;::::0;::::1;::::0;22841:8;6945:14:1;6938:22;6920:41;;6908:2;6893:18;;6780:187;22865:38:0::1;;;;;;;;22740:171:::0;:::o;32940:109::-;11643:6;;-1:-1:-1;;;;;11643:6:0;223:10;11643:22;11635:67;;;;-1:-1:-1;;;11635:67:0;;;;;;;:::i;:::-;15081:7;15108:6;;32993:48:::1;::::0;-1:-1:-1;;;;;15108:6:0;;;;33019:21:::1;32993:48:::0;::::1;;;::::0;33019:21;;32993:48;15081:7;32993:48;33019:21;15108:6;32993:48;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;32940:109::o:0;21372:330::-;11643:6;;-1:-1:-1;;;;;11643:6:0;223:10;11643:22;11635:67;;;;-1:-1:-1;;;11635:67:0;;;;;;;:::i;:::-;21451:13:::1;21489:7;21478;21468;;:17;;;;:::i;:::-;21467:29;;;;:::i;:::-;21451:45;;21535:4;21525:7;;:14;;;;:::i;:::-;21515:5;:25;;21507:93;;;::::0;-1:-1:-1;;;21507:93:0;;10703:2:1;21507:93:0::1;::::0;::::1;10685:21:1::0;10742:2;10722:18;;;10715:30;10781:34;10761:18;;;10754:62;10852:25;10832:18;;;10825:53;10895:19;;21507:93:0::1;10501:419:1::0;21507:93:0::1;21611:12;:20:::0;;;21659:14:::1;::::0;21687:7;;21659:24:::1;::::0;21676:7;;21659:24:::1;:::i;:::-;21658:36;;;;:::i;:::-;21642:13;:52:::0;-1:-1:-1;;;21372:330:0:o;21710:334::-;11643:6;;-1:-1:-1;;;;;11643:6:0;223:10;11643:22;11635:67;;;;-1:-1:-1;;;11635:67:0;;;;;;;:::i;:::-;21794:13:::1;21832:7;21821;21811;;:17;;;;:::i;:::-;21810:29;;;;:::i;:::-;21794:45;;21878:4;21868:7;;:14;;;;:::i;:::-;21858:5;:25;;21850:88;;;::::0;-1:-1:-1;;;21850:88:0;;11533:2:1;21850:88:0::1;::::0;::::1;11515:21:1::0;11572:2;11552:18;;;11545:30;11611:34;11591:18;;;11584:62;-1:-1:-1;;;11662:18:1;;;11655:48;11720:19;;21850:88:0::1;11331:414:1::0;21850:88:0::1;21949:14;:22:::0;;;22001:14:::1;::::0;22029:7;;22001:24:::1;::::0;22018:7;;22001:24:::1;:::i;:::-;22000:36;;;;:::i;:::-;21982:15;:54:::0;-1:-1:-1;;;21710:334:0:o;12563:1927::-;11643:6;;-1:-1:-1;;;;;11643:6:0;223:10;11643:22;11635:67;;;;-1:-1:-1;;;11635:67:0;;;;;;;:::i;:::-;12746:19:::1;::::0;::::1;;12745:20;12737:29;;;::::0;::::1;;12779:13;:40:::0;;-1:-1:-1;;;;;12779:40:0;;::::1;-1:-1:-1::0;;;;;;12779:40:0;;::::1;;::::0;;;12830:10:::1;:34:::0;;;;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;12877:18;;::::1;::::0;:5:::1;::::0;:18:::1;::::0;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;12906:22:0;;::::1;::::0;:7:::1;::::0;:22:::1;::::0;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;12956:17:0::1;12939:14;:34:::0;13036:9:::1;:14:::0;;-1:-1:-1;;13036:14:0::1;13048:2;13036:14:::0;;::::1;::::0;;;13065:12:::1;:24:::0;13228:12:::1;::::0;13224:16:::1;::::0;:2:::1;:16;:::i;:::-;13206:14;;:35;;;;:::i;:::-;13196:7;:45:::0;;;13270:13:::1;::::0;-1:-1:-1;;13270:13:0::1;:::i;:::-;13263:21;::::0;-1:-1:-1;;13263:21:0::1;:::i;:::-;13252:7;:33:::0;13329:14:::1;::::0;13298:9:::1;:46:::0;;-1:-1:-1;;;;;;13298:46:0::1;-1:-1:-1::0;;;;;13329:14:0;;::::1;13298:46:::0;;::::1;::::0;;13382:19:::1;::::0;;-1:-1:-1;;;13382:19:0;;;;:17:::1;::::0;:19:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;;13329:14;13382:19;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;13364:49:0::1;;13414:9;;;;;;;;;-1:-1:-1::0;;;;;13414:9:0::1;-1:-1:-1::0;;;;;13414:14:0::1;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13364:82;::::0;-1:-1:-1;;;;;;13364:82:0::1;::::0;;;;;;-1:-1:-1;;;;;6089:15:1;;;13364:82:0::1;::::0;::::1;6071:34:1::0;13440:4:0::1;6121:18:1::0;;;6114:43;6006:18;;13364:82:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13355:6;:91:::0;;-1:-1:-1;;;;;;13355:91:0::1;-1:-1:-1::0;;;;;13355:91:0;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;13457:15:0;;;:7:::1;:15;::::0;;;;;;;:22;;-1:-1:-1;;13457:22:0::1;-1:-1:-1::0;13457:22:0::1;::::0;;13510:4:::1;13490:26:::0;;:11:::1;:26:::0;;;;;13525:9:::1;::::0;;;::::1;13490:46:::0;;;;;;-1:-1:-1;;13490:66:0;;13594:7:::1;::::0;13611:5:::1;::::0;13594:13:::1;::::0;13604:3:::1;13594:13;:::i;:::-;13593:23;;;;:::i;:::-;13578:12;:38:::0;13644:14:::1;::::0;13669:6:::1;::::0;13644:21:::1;::::0;13661:4:::1;13644:21;:::i;:::-;13643:32;;;;:::i;:::-;13627:13;:48:::0;13704:7:::1;::::0;13721:5:::1;::::0;13704:13:::1;::::0;13714:3:::1;13704:13;:::i;:::-;13703:23;;;;:::i;:::-;13686:14;:40:::0;13756:14:::1;::::0;;13779:4:::1;::::0;13756:19:::1;::::0;:14;:19:::1;:::i;:::-;13755:28;;;;:::i;:::-;13737:15;:46:::0;13811:7:::1;::::0;13826:5:::1;::::0;13811:11:::1;::::0;13821:1:::1;13811:11;:::i;:::-;13810:21;;;;:::i;:::-;13794:13;:37:::0;13856:7:::1;::::0;13871:4:::1;::::0;13856:11:::1;::::0;13866:1:::1;13856:11;:::i;:::-;13855:20;;;;:::i;:::-;13842:10;:33:::0;13904:14:::1;::::0;13896:42:::1;::::0;-1:-1:-1;;;;;13904:14:0::1;-1:-1:-1::0;;13896:7:0::1;:42::i;:::-;-1:-1:-1::0;13951:19:0::1;:26:::0;;-1:-1:-1;;13951:26:0::1;13973:4;13951:26:::0;;::::1;::::0;;;14007:7:::1;::::0;;13951:19:::1;13996:7;15081::::0;15108:6;-1:-1:-1;;;;;15108:6:0;;15043:79;13996:7:::1;-1:-1:-1::0;;;;;13988:16:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;13988:16:0;:26;14045:7:::1;15081::::0;15108:6;-1:-1:-1;;;;;15108:6:0;;15043:79;14045:7:::1;14039:4;::::0;14054:7:::1;::::0;14030:32:::1;::::0;15786:25:1;;;-1:-1:-1;;;;;14030:32:0;;::::1;::::0;14039:4;;::::1;::::0;14030:32:::1;::::0;15774:2:1;15759:18;14030:32:0::1;;;;;;;14107:9;::::0;14075:62:::1;::::0;14092:4:::1;::::0;-1:-1:-1;;;;;14107:9:0::1;-1:-1:-1::0;;14075:8:0::1;:62::i;:::-;14150:53;14160:7;15081::::0;15108:6;-1:-1:-1;;;;;15108:6:0;;15043:79;14160:7:::1;14177:4;14184:18;14194:7;15081::::0;15108:6;-1:-1:-1;;;;;15108:6:0;;15043:79;14150:53:::1;-1:-1:-1::0;14230:9:0::1;::::0;-1:-1:-1;;;;;14230:9:0::1;:25;14263:21;14308:4;14328:24;14308:4:::0;14328:9:::1;:24::i;:::-;14367:1;14384::::0;14401:7:::1;15081::::0;15108:6;-1:-1:-1;;;;;15108:6:0;;15043:79;14401:7:::1;14423:15;14230:219;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;14470:12:0::1;14460:7;:22:::0;-1:-1:-1;;;;;12563:1927:0:o;20125:439::-;11643:6;;-1:-1:-1;;;;;11643:6:0;223:10;11643:22;11635:67;;;;-1:-1:-1;;;11635:67:0;;;;;;;:::i;:::-;20251:13:::1;;20240:7;:24;;:73;;;;;20298:15;;20285:9;:28;;20240:73;:122;;;;;20347:15;;20334:9;:28;;20240:122;20232:149;;;::::0;::::1;;20435:4;20422:9:::0;20400:19:::1;20410:9:::0;20400:7;:19:::1;:::i;:::-;:31;;;;:::i;:::-;:39;;20392:48;;;::::0;::::1;;20451:15;:25:::0;;;;20487:17:::1;:29:::0;20527:17:::1;:29:::0;20125:439::o;18430:553::-;11643:6;;-1:-1:-1;;;;;11643:6:0;223:10;11643:22;11635:67;;;;-1:-1:-1;;;11635:67:0;;;;;;;:::i;:::-;18503:29:::1;18554:9;18503:61;;18575:16;18612:10;-1:-1:-1::0;;;;;18612:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;18594:47:0::1;;18650:4;18657:10;-1:-1:-1::0;;;;;18657:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18594:81;::::0;-1:-1:-1;;;;;;18594:81:0::1;::::0;;;;;;-1:-1:-1;;;;;6089:15:1;;;18594:81:0::1;::::0;::::1;6071:34:1::0;6141:15;;6121:18;;;6114:43;6006:18;;18594:81:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18575:100:::0;-1:-1:-1;;;;;;18690:22:0;::::1;18686:207;;18756:10;-1:-1:-1::0;;;;;18756:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;18738:50:0::1;;18797:4;18804:10;-1:-1:-1::0;;;;;18804:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18738:84;::::0;-1:-1:-1;;;;;;18738:84:0::1;::::0;;;;;;-1:-1:-1;;;;;6089:15:1;;;18738:84:0::1;::::0;::::1;6071:34:1::0;6141:15;;6121:18;;;6114:43;6006:18;;18738:84:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18729:6;:93:::0;;-1:-1:-1;;;;;;18729:93:0::1;-1:-1:-1::0;;;;;18729:93:0;;;::::1;::::0;;;::::1;::::0;;18686:207:::1;;;18864:6;:17:::0;;-1:-1:-1;;;;;;18864:17:0::1;-1:-1:-1::0;;;;;18864:17:0;::::1;;::::0;;18686:207:::1;18903:9;:22:::0;;-1:-1:-1;;;;;;18903:22:0::1;-1:-1:-1::0;;;;;18903:22:0;::::1;;::::0;;18936:39:::1;18953:4;18960:9:::0;-1:-1:-1;;18936:8:0::1;:39::i;22052:289::-:0;11643:6;;-1:-1:-1;;;;;11643:6:0;223:10;11643:22;11635:67;;;;-1:-1:-1;;;11635:67:0;;;;;;;:::i;:::-;22252:16:::1;22232;22222:7;;:26;;;;:::i;:::-;22221:47;;;;:::i;:::-;22205:13;:63:::0;22293:7:::1;::::0;22320:13;;22293:23:::1;::::0;22303:13;;22293:23:::1;:::i;:::-;22292:41;;;;:::i;:::-;22279:10;:54:::0;-1:-1:-1;;;;22052:289:0:o;24662:342::-;-1:-1:-1;;;;;24757:20:0;;24749:69;;;;-1:-1:-1;;;24749:69:0;;14654:2:1;24749:69:0;;;14636:21:1;14693:2;14673:18;;;14666:30;14732:34;14712:18;;;14705:62;-1:-1:-1;;;14783:18:1;;;14776:34;14827:19;;24749:69:0;14452:400:1;24749:69:0;-1:-1:-1;;;;;24837:21:0;;24829:68;;;;-1:-1:-1;;;24829:68:0;;9178:2:1;24829:68:0;;;9160:21:1;9217:2;9197:18;;;9190:30;9256:34;9236:18;;;9229:62;-1:-1:-1;;;9307:18:1;;;9300:32;9349:19;;24829:68:0;8976:398:1;24829:68:0;-1:-1:-1;;;;;24910:19:0;;;;;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;:37;;;24963:33;;15786:25:1;;;24963:33:0;;15759:18:1;24963:33:0;;;;;;;24662:342;;;:::o;25012:1776::-;25091:4;-1:-1:-1;;;;;25116:18:0;;25108:68;;;;-1:-1:-1;;;25108:68:0;;14248:2:1;25108:68:0;;;14230:21:1;14287:2;14267:18;;;14260:30;14326:34;14306:18;;;14299:62;-1:-1:-1;;;14377:18:1;;;14370:35;14422:19;;25108:68:0;14046:401:1;25108:68:0;-1:-1:-1;;;;;25195:16:0;;25187:64;;;;-1:-1:-1;;;25187:64:0;;8010:2:1;25187:64:0;;;7992:21:1;8049:2;8029:18;;;8022:30;8088:34;8068:18;;;8061:62;-1:-1:-1;;;8139:18:1;;;8132:33;8182:19;;25187:64:0;7808:399:1;25187:64:0;25279:1;25270:6;:10;25262:64;;;;-1:-1:-1;;;25262:64:0;;13838:2:1;25262:64:0;;;13820:21:1;13877:2;13857:18;;;13850:30;13916:34;13896:18;;;13889:62;-1:-1:-1;;;13967:18:1;;;13960:39;14016:19;;25262:64:0;13636:405:1;25262:64:0;25340:20;25351:4;25357:2;25340:10;:20::i;:::-;25337:776;;;25381:14;;;;25377:89;;25416:34;;-1:-1:-1;;;25416:34:0;;8414:2:1;25416:34:0;;;8396:21:1;8453:2;8433:18;;;8426:30;8492:26;8472:18;;;8465:54;8536:18;;25416:34:0;8212:348:1;25377:89:0;25484:15;;;;25480:347;;;-1:-1:-1;;;;;25524:13:0;;;;;;:7;:13;;;;;;;;25520:292;;;-1:-1:-1;;;;;25569:13:0;;;;;;:9;:13;;;;;;25586:12;25569:29;;25561:38;;;;;;-1:-1:-1;;;;;25622:13:0;;;;;;:9;:13;;;;;25638:12;25622:28;;25520:292;;;-1:-1:-1;;;;;25707:15:0;;;;;;:9;:15;;;;;;25726:12;25707:31;;25699:40;;;;;;-1:-1:-1;;;;;25762:15:0;;;;;;:9;:15;;;;;25780:12;25762:30;;25520:292;25859:12;;25849:6;:22;;25841:75;;;;-1:-1:-1;;;25841:75:0;;12657:2:1;25841:75:0;;;12639:21:1;12696:2;12676:18;;;12669:30;12735:34;12715:18;;;12708:62;-1:-1:-1;;;12786:18:1;;;12779:38;12834:19;;25841:75:0;12455:404:1;25841:75:0;25940:14;;-1:-1:-1;;;;;25934:20:0;;;25940:14;;25934:20;;;;:36;;-1:-1:-1;;;;;;25959:11:0;;;;;;:7;:11;;;;;;;;25958:12;25934:36;25931:171;;;26025:14;;26015:6;25999:13;26009:2;25999:9;:13::i;:::-;:22;;;;:::i;:::-;:40;;25991:95;;;;-1:-1:-1;;;25991:95:0;;13066:2:1;25991:95:0;;;13048:21:1;13105:2;13085:18;;;13078:30;13144:34;13124:18;;;13117:62;-1:-1:-1;;;13195:18:1;;;13188:40;13245:19;;25991:95:0;12864:406:1;25991:95:0;-1:-1:-1;;;;;26156:24:0;;26123:12;26156:24;;;:18;:24;;;;;;26138:4;;26156:24;;;:50;;-1:-1:-1;;;;;;26184:22:0;;;;;;:18;:22;;;;;;;;26156:50;26153:96;;;-1:-1:-1;26232:5:0;26153:96;-1:-1:-1;;;;;26265:11:0;;;;;;:7;:11;;;;;;;;26261:457;;;26298:16;;-1:-1:-1;;;26298:16:0;;;;26297:17;:59;;;;-1:-1:-1;26335:21:0;;-1:-1:-1;;;26335:21:0;;;;26297:59;26293:408;;;26391:28;26422:24;26440:4;26422:9;:24::i;:::-;26391:55;;26493:13;;26469:20;:37;26465:221;;26558:10;;26534:20;:34;26531:77;;-1:-1:-1;26595:10:0;;26531:77;26630:36;26645:20;26630:14;:36::i;:::-;26372:329;26293:408;26736:44;26754:4;26760:2;26764:6;26772:7;26736:17;:44::i;:::-;26729:51;25012:1776;-1:-1:-1;;;;;25012:1776:0:o;32061:161::-;32103:7;32124:15;32141;32160:19;:17;:19::i;:::-;32123:56;;-1:-1:-1;32123:56:0;-1:-1:-1;32197:17:0;32123:56;;32197:17;:::i;:::-;32190:24;;;;32061:161;:::o;24068:324::-;24137:4;15108:6;;-1:-1:-1;;;;;24161:15:0;;;15108:6;;24161:15;;;;:45;;-1:-1:-1;15081:7:0;15108:6;-1:-1:-1;;;;;24193:13:0;;;15108:6;;24193:13;;24161:45;:84;;;;-1:-1:-1;;;;;;24224:21:0;;;;;;:17;:21;;;;;;;;24223:22;24161:84;:125;;;;-1:-1:-1;;;;;;24263:23:0;;;;;;:17;:23;;;;;;;;24262:24;24161:125;:152;;;;-1:-1:-1;24309:4:0;;-1:-1:-1;;;;;24303:10:0;;;24309:4;;24303:10;;24161:152;:185;;;;-1:-1:-1;;;;;;24330:16:0;;;;24161:185;:223;;;;-1:-1:-1;;;;;;24363:21:0;;24379:4;24363:21;;24154:230;24068:324;-1:-1:-1;;;24068:324:0:o;26796:1541::-;11517:16;:23;;-1:-1:-1;;;;11517:23:0;-1:-1:-1;;;11517:23:0;;;26904:15:::1;::::0;26886::::1;::::0;:33:::1;::::0;26904:15;26886:33:::1;:::i;:::-;26882:64;;26939:7;;26882:64;26956:17;27059:1;27039:15;;27021;;:33;;;;:::i;:::-;27001:15;::::0;26978:38:::1;::::0;:20;:38:::1;:::i;:::-;26977:78;;;;:::i;:::-;26976:84;;;;:::i;:::-;26956:104:::0;-1:-1:-1;27073:20:0::1;27096:32;26956:104:::0;27096:20;:32:::1;:::i;:::-;27165:16;::::0;;27179:1:::1;27165:16:::0;;;;;::::1;::::0;;27073:55;;-1:-1:-1;27141:21:0::1;::::0;27165:16;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;27165:16:0::1;27141:40;;27210:4;27192;27197:1;27192:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;27192:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;27236:9:::1;::::0;:16:::1;::::0;;-1:-1:-1;;;27236:16:0;;;;:9;;;::::1;::::0;:14:::1;::::0;:16:::1;::::0;;::::1;::::0;27192:7;;27236:16;;;;;:9;:16;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27226:4;27231:1;27226:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;27226:26:0;;::::1;:7;::::0;;::::1;::::0;;;;;:26;27265:9:::1;::::0;:191:::1;::::0;-1:-1:-1;;;27265:191:0;;:9;::::1;::::0;:60:::1;::::0;:191:::1;::::0;27340:12;;27265:9:::1;::::0;27383:4;;27410::::1;::::0;27430:15:::1;::::0;27265:191:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;27471:24;27582:1;27562:15;;27544;;:33;;;;:::i;:::-;27524:15;::::0;27500:39:::1;::::0;:21:::1;:39;:::i;:::-;27499:79;;;;:::i;:::-;27498:85;;;;:::i;:::-;27471:112:::0;-1:-1:-1;27600:13:0;;27596:344:::1;;27630:9;::::0;27801:4:::1;::::0;27630:224:::1;::::0;-1:-1:-1;;;27630:224:0;;-1:-1:-1;;;;;27630:9:0;;::::1;::::0;:25:::1;::::0;27663:16;;27630:224:::1;::::0;27707:4:::1;::::0;27731:9;;27630::::1;::::0;;;27801:4:::1;::::0;27824:15:::1;::::0;27630:224:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;27874:54:0::1;::::0;;17009:25:1;;;17065:2;17050:18;;17043:34;;;17093:18;;;17086:34;;;27874:54:0::1;::::0;-1:-1:-1;16997:2:1;16982:18;27874:54:0::1;;;;;;;27596:344;27989:1;27954:32;27977:9:::0;27954:20;:32:::1;:::i;:::-;:36;27950:380;;;28121:11;::::0;28106:12:::1;::::0;28034:21:::1;::::0;28009::::1;::::0;28091:28:::1;::::0;28034:21;28091:28:::1;:::i;:::-;:42;;;;:::i;:::-;28071:62;;28148:19;28200:8;;28185:12;;28170:13;:28;;;;:::i;:::-;:39;;;;:::i;:::-;28224:13;::::0;:33:::1;::::0;28148:61;;-1:-1:-1;;;;;;28224:13:0::1;::::0;:33;::::1;;;::::0;28247:9;;28224:13:::1;:33:::0;:13;:33;28247:9;28224:13;:33;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;28272:10:0::1;::::0;:32:::1;::::0;-1:-1:-1;;;;;28272:10:0;;::::1;::::0;:32;::::1;;;::::0;28292:11;;28272:10:::1;:32:::0;:10;:32;28292:11;28272:10;:32;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;27992:338;;;27950:380;26871:1466;;;;11551:1;-1:-1:-1::0;11563:16:0;:24;;-1:-1:-1;;;;11563:24:0;;;26796:1541::o;29303:1278::-;29431:16;;29405:4;;29431:16;;;;;29426:237;;29468:28;29487:4;29493:2;29468:18;:28::i;:::-;29520:16;;;;;;;29519:17;:41;;;;;29540:20;29551:4;29557:2;29540:10;:20::i;:::-;29515:137;;;29585:47;;-1:-1:-1;;;29585:47:0;;11127:2:1;29585:47:0;;;11109:21:1;11166:2;11146:18;;;11139:30;11205:34;11185:18;;;11178:62;-1:-1:-1;;;11256:18:1;;;11249:35;11301:19;;29585:47:0;10925:401:1;29515:137:0;29683:25;29711:38;29722:4;29728:2;29732:7;29741;29711:10;:38::i;:::-;29794:14;;;;-1:-1:-1;;;;;29778:13:0;;;;;;:7;:13;;;;;;29683:66;;-1:-1:-1;29778:30:0;;;:::i;:::-;-1:-1:-1;;;;;29762:13:0;;;;;;;:7;:13;;;;;;:46;;;;29847:22;;;;29833:11;;;;;;;;;;:36;;29847:22;29833:36;:::i;:::-;-1:-1:-1;;;;;29819:11:0;;;;;;;:7;:11;;;;;;;;:50;;;;29886:17;;;;;:11;:17;;;;;;;:37;;;;-1:-1:-1;;;;;;29908:15:0;;;;;;:11;:15;;;;;;;;29907:16;29886:37;29882:416;;;-1:-1:-1;;;;;29956:13:0;;;;;;:7;:13;;;;;;:23;;29972:7;;29956:23;:::i;:::-;-1:-1:-1;;;;;29940:13:0;;;;;;:7;:13;;;;;:39;29882:416;;;-1:-1:-1;;;;;30002:17:0;;;;;;:11;:17;;;;;;;;30001:18;:37;;;;-1:-1:-1;;;;;;30023:15:0;;;;;;:11;:15;;;;;;;;30001:37;29997:301;;;30083:22;;-1:-1:-1;;;;;30069:11:0;;30083:22;30069:11;;;:7;:11;;;;;;:36;;30083:22;30069:36;:::i;:::-;-1:-1:-1;;;;;30055:11:0;;;;;;:7;:11;;;;;:50;29997:301;;;-1:-1:-1;;;;;30129:17:0;;;;;;:11;:17;;;;;;;;:36;;;;-1:-1:-1;;;;;;30150:15:0;;;;;;:11;:15;;;;;;;;30129:36;30125:173;;;-1:-1:-1;;;;;30198:13:0;;;;;;:7;:13;;;;;;:23;;30214:7;;30198:23;:::i;:::-;-1:-1:-1;;;;;30182:13:0;;;;;;;:7;:13;;;;;;:39;;;;30264:22;;30250:11;;;;;;;;;;:36;;30264:22;30250:36;:::i;:::-;-1:-1:-1;;;;;30236:11:0;;;;;;:7;:11;;;;;:50;30125:173;30314:17;;;;:21;30310:79;;30350:39;30365:4;30371:6;:17;;;30350:14;:39::i;:::-;30418:1;30404:6;:11;;;:15;:34;;;;30437:1;30423:6;:11;;;:15;30404:34;30400:91;;;30453:38;30466:6;:11;;;30479:6;:11;;;30453:12;:38::i;:::-;30524:2;-1:-1:-1;;;;;30509:42:0;30518:4;-1:-1:-1;;;;;30509:42:0;;30528:6;:22;;;30509:42;;;;15786:25:1;;15774:2;15759:18;;15640:177;30509:42:0;;;;;;;;-1:-1:-1;30569:4:0;;29303:1278;-1:-1:-1;;;;;29303:1278:0:o;32230:547::-;32328:7;;32364;;32281;;;;;32382:283;32406:9;:16;32402:20;;32382:283;;;32472:7;32448;:21;32456:9;32466:1;32456:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;32456:12:0;32448:21;;;;;;;;;;;;;:31;;:66;;;32507:7;32483;:21;32491:9;32501:1;32491:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;32491:12:0;32483:21;;;;;;;;;;;;;:31;32448:66;32444:97;;;32524:7;;32533;;32516:25;;;;;;;32230:547;;:::o;32444:97::-;32576:7;:21;32584:9;32594:1;32584:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;32584:12:0;32576:21;;;;;;;;;;;;;32566:31;;:7;:31;:::i;:::-;32556:41;;32632:7;:21;32640:9;32650:1;32640:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;32640:12:0;32632:21;;;;;;;;;;;;;32622:31;;:7;:31;:::i;:::-;32612:41;-1:-1:-1;32424:3:0;;;;:::i;:::-;;;;32382:283;;;;32699:7;;32689;;:17;;;;:::i;:::-;32679:7;:27;32675:58;;;32716:7;;32725;;32708:25;;;;;;32230:547;;:::o;32675:58::-;32752:7;;32761;;-1:-1:-1;32230:547:0;-1:-1:-1;32230:547:0:o;28353:439::-;28436:16;;;;;;;28435:17;28427:65;;;;-1:-1:-1;;;28427:65:0;;9581:2:1;28427:65:0;;;9563:21:1;9620:2;9600:18;;;9593:30;9659:34;9639:18;;;9632:62;-1:-1:-1;;;9710:18:1;;;9703:33;9753:19;;28427:65:0;9379:399:1;28427:65:0;28508:20;28519:4;28525:2;28508:10;:20::i;:::-;28507:21;:37;;;;-1:-1:-1;28538:6:0;;-1:-1:-1;;;;;28532:12:0;;;28538:6;;28532:12;28507:37;28503:282;;;-1:-1:-1;;;;;28561:23:0;;;;;;:17;:23;;;;;;;:30;;-1:-1:-1;;28561:30:0;28587:4;28561:30;;;;;;28606:16;:23;;-1:-1:-1;;28606:23:0;28561:30;28606:23;;;28659:15;28644:12;:30;28691:21;:28;;-1:-1:-1;;;;28691:28:0;-1:-1:-1;;;28691:28:0;;;28739:34;;;;;;6945:14:1;;6938:22;6920:41;;6908:2;6893:18;;6780:187;28739:34:0;;;;;;;;28353:439;;:::o;30589:1464::-;30684:18;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30684:18:0;30715:25;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30715:25:0;30751:19;30773:10;:8;:10::i;:::-;30751:32;-1:-1:-1;30813:21:0;30751:32;30813:7;:21;:::i;:::-;30796:14;;;:38;30847:1071;;;;-1:-1:-1;;;;;30878:11:0;;;;;;:7;:11;;;;;;;;30874:561;;;30924:15;;30910:11;:29;30974:17;;30958:13;:33;31026:17;;31010:13;:33;30874:561;;;-1:-1:-1;;;;;31069:13:0;;;;;;:7;:13;;;;;;;;31065:370;;;31117:14;;31103:11;:28;31166:16;;31150:13;:32;31217:16;;31201:13;:32;31065:370;;;31288:19;;31274:11;:33;31342:21;;31326:13;:37;31398:21;;31382:13;:37;31065:370;31491:16;;31476:11;;31466:21;;:7;:21;:::i;:::-;31465:42;;;;:::i;:::-;31451:11;;;:56;31588:16;;31570:13;;31554;;:29;;31570:13;31554:29;:::i;:::-;31543:41;;:7;:41;:::i;:::-;31542:62;;;;:::i;:::-;31522:17;;;:82;;;31655:11;;;;:31;;31522:82;31655:31;:::i;:::-;31644:43;;:7;:43;:::i;:::-;31619:68;;31718:11;;;;:25;;31732:11;;31718:25;:::i;:::-;31704:11;;;:39;30847:1071;;;31790:1;31776:11;;;:15;;;31806:17;;;:21;;;31842:32;;;31891:11;;;:15;30847:1071;32008:11;31988:6;:17;;;:31;;;;:::i;:::-;31973:6;:11;;;:47;;;;:::i;:::-;31955:6;:14;;;:66;;;;:::i;:::-;31930:22;;;:91;-1:-1:-1;31930:22:0;30589:1464;-1:-1:-1;;;;;30589:1464:0:o;33061:423::-;33141:19;33164:10;:8;:10::i;:::-;33141:33;-1:-1:-1;33185:18:0;33206:24;33141:33;33206:10;:24;:::i;:::-;33282:4;33266:22;;;;:7;:22;;;;;;33185:45;;-1:-1:-1;33266:35:0;;33185:45;;33266:35;:::i;:::-;33257:4;33241:22;;;;:7;:22;;;;;;;;:60;;;;33315:11;:26;;;;;;33312:104;;;33397:4;33381:22;;;;:7;:22;;;;;;:35;;33406:10;;33381:35;:::i;:::-;33372:4;33356:22;;;;:7;:22;;;;;:60;33312:104;33432:43;;15786:25:1;;;33457:4:0;;-1:-1:-1;;;;;33432:43:0;;;;;15774:2:1;15759:18;33432:43:0;;;;;;;33130:354;;33061:423;;:::o;32789:143::-;32879:4;32869:7;;:14;;;;:::i;:::-;32859:7;:24;32907:10;;:17;;32920:4;;32907:17;:::i;:::-;32894:10;:30;-1:-1:-1;;32789:143:0:o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:160:1;79:20;;135:13;;128:21;118:32;;108:60;;164:1;161;154:12;108:60;14:160;;;:::o;179:719::-;222:5;275:3;268:4;260:6;256:17;252:27;242:55;;293:1;290;283:12;242:55;329:6;316:20;355:18;392:2;388;385:10;382:36;;;398:18;;:::i;:::-;473:2;467:9;441:2;527:13;;-1:-1:-1;;523:22:1;;;547:2;519:31;515:40;503:53;;;571:18;;;591:22;;;568:46;565:72;;;617:18;;:::i;:::-;657:10;653:2;646:22;692:2;684:6;677:18;738:3;731:4;726:2;718:6;714:15;710:26;707:35;704:55;;;755:1;752;745:12;704:55;819:2;812:4;804:6;800:17;793:4;785:6;781:17;768:54;866:1;859:4;854:2;846:6;842:15;838:26;831:37;886:6;877:15;;;;;;179:719;;;;:::o;903:247::-;962:6;1015:2;1003:9;994:7;990:23;986:32;983:52;;;1031:1;1028;1021:12;983:52;1070:9;1057:23;1089:31;1114:5;1089:31;:::i;1155:251::-;1225:6;1278:2;1266:9;1257:7;1253:23;1249:32;1246:52;;;1294:1;1291;1284:12;1246:52;1326:9;1320:16;1345:31;1370:5;1345:31;:::i;1671:836::-;1793:6;1801;1809;1817;1870:3;1858:9;1849:7;1845:23;1841:33;1838:53;;;1887:1;1884;1877:12;1838:53;1926:9;1913:23;1945:31;1970:5;1945:31;:::i;:::-;1995:5;-1:-1:-1;2052:2:1;2037:18;;2024:32;2065:33;2024:32;2065:33;:::i;:::-;2117:7;-1:-1:-1;2175:2:1;2160:18;;2147:32;2198:18;2228:14;;;2225:34;;;2255:1;2252;2245:12;2225:34;2278:50;2320:7;2311:6;2300:9;2296:22;2278:50;:::i;:::-;2268:60;;2381:2;2370:9;2366:18;2353:32;2337:48;;2410:2;2400:8;2397:16;2394:36;;;2426:1;2423;2416:12;2394:36;;2449:52;2493:7;2482:8;2471:9;2467:24;2449:52;:::i;:::-;2439:62;;;1671:836;;;;;;;:::o;2512:388::-;2580:6;2588;2641:2;2629:9;2620:7;2616:23;2612:32;2609:52;;;2657:1;2654;2647:12;2609:52;2696:9;2683:23;2715:31;2740:5;2715:31;:::i;:::-;2765:5;-1:-1:-1;2822:2:1;2807:18;;2794:32;2835:33;2794:32;2835:33;:::i;:::-;2887:7;2877:17;;;2512:388;;;;;:::o;2905:456::-;2982:6;2990;2998;3051:2;3039:9;3030:7;3026:23;3022:32;3019:52;;;3067:1;3064;3057:12;3019:52;3106:9;3093:23;3125:31;3150:5;3125:31;:::i;:::-;3175:5;-1:-1:-1;3232:2:1;3217:18;;3204:32;3245:33;3204:32;3245:33;:::i;:::-;2905:456;;3297:7;;-1:-1:-1;;;3351:2:1;3336:18;;;;3323:32;;2905:456::o;3366:315::-;3431:6;3439;3492:2;3480:9;3471:7;3467:23;3463:32;3460:52;;;3508:1;3505;3498:12;3460:52;3547:9;3534:23;3566:31;3591:5;3566:31;:::i;:::-;3616:5;-1:-1:-1;3640:35:1;3671:2;3656:18;;3640:35;:::i;:::-;3630:45;;3366:315;;;;;:::o;3686:::-;3754:6;3762;3815:2;3803:9;3794:7;3790:23;3786:32;3783:52;;;3831:1;3828;3821:12;3783:52;3870:9;3857:23;3889:31;3914:5;3889:31;:::i;:::-;3939:5;3991:2;3976:18;;;;3963:32;;-1:-1:-1;;;3686:315:1:o;4006:180::-;4062:6;4115:2;4103:9;4094:7;4090:23;4086:32;4083:52;;;4131:1;4128;4121:12;4083:52;4154:26;4170:9;4154:26;:::i;4191:180::-;4250:6;4303:2;4291:9;4282:7;4278:23;4274:32;4271:52;;;4319:1;4316;4309:12;4271:52;-1:-1:-1;4342:23:1;;4191:180;-1:-1:-1;4191:180:1:o;4376:248::-;4444:6;4452;4505:2;4493:9;4484:7;4480:23;4476:32;4473:52;;;4521:1;4518;4511:12;4473:52;-1:-1:-1;;4544:23:1;;;4614:2;4599:18;;;4586:32;;-1:-1:-1;4376:248:1:o;4629:316::-;4706:6;4714;4722;4775:2;4763:9;4754:7;4750:23;4746:32;4743:52;;;4791:1;4788;4781:12;4743:52;-1:-1:-1;;4814:23:1;;;4884:2;4869:18;;4856:32;;-1:-1:-1;4935:2:1;4920:18;;;4907:32;;4629:316;-1:-1:-1;4629:316:1:o;4950:306::-;5038:6;5046;5054;5107:2;5095:9;5086:7;5082:23;5078:32;5075:52;;;5123:1;5120;5113:12;5075:52;5152:9;5146:16;5136:26;;5202:2;5191:9;5187:18;5181:25;5171:35;;5246:2;5235:9;5231:18;5225:25;5215:35;;4950:306;;;;;:::o;5261:385::-;5347:6;5355;5363;5371;5424:3;5412:9;5403:7;5399:23;5395:33;5392:53;;;5441:1;5438;5431:12;5392:53;-1:-1:-1;;5464:23:1;;;5534:2;5519:18;;5506:32;;-1:-1:-1;5585:2:1;5570:18;;5557:32;;5636:2;5621:18;5608:32;;-1:-1:-1;5261:385:1;-1:-1:-1;5261:385:1:o;6168:607::-;-1:-1:-1;;;;;6527:15:1;;;6509:34;;6574:2;6559:18;;6552:34;;;;6617:2;6602:18;;6595:34;;;;6660:2;6645:18;;6638:34;;;;6709:15;;;6703:3;6688:19;;6681:44;6489:3;6741:19;;6734:35;;;;6458:3;6443:19;;6168:607::o;7206:597::-;7318:4;7347:2;7376;7365:9;7358:21;7408:6;7402:13;7451:6;7446:2;7435:9;7431:18;7424:34;7476:1;7486:140;7500:6;7497:1;7494:13;7486:140;;;7595:14;;;7591:23;;7585:30;7561:17;;;7580:2;7557:26;7550:66;7515:10;;7486:140;;;7644:6;7641:1;7638:13;7635:91;;;7714:1;7709:2;7700:6;7689:9;7685:22;7681:31;7674:42;7635:91;-1:-1:-1;7787:2:1;7766:15;-1:-1:-1;;7762:29:1;7747:45;;;;7794:2;7743:54;;7206:597;-1:-1:-1;;;7206:597:1:o;13275:356::-;13477:2;13459:21;;;13496:18;;;13489:30;13555:34;13550:2;13535:18;;13528:62;13622:2;13607:18;;13275:356::o;15210:425::-;15412:2;15394:21;;;15451:2;15431:18;;;15424:30;15490:34;15485:2;15470:18;;15463:62;15561:31;15556:2;15541:18;;15534:59;15625:3;15610:19;;15210:425::o;15822:980::-;16084:4;16132:3;16121:9;16117:19;16163:6;16152:9;16145:25;16189:2;16227:6;16222:2;16211:9;16207:18;16200:34;16270:3;16265:2;16254:9;16250:18;16243:31;16294:6;16329;16323:13;16360:6;16352;16345:22;16398:3;16387:9;16383:19;16376:26;;16437:2;16429:6;16425:15;16411:29;;16458:1;16468:195;16482:6;16479:1;16476:13;16468:195;;;16547:13;;-1:-1:-1;;;;;16543:39:1;16531:52;;16638:15;;;;16603:12;;;;16579:1;16497:9;16468:195;;;-1:-1:-1;;;;;;;16719:32:1;;;;16714:2;16699:18;;16692:60;-1:-1:-1;;;16783:3:1;16768:19;16761:35;16680:3;15822:980;-1:-1:-1;;;15822:980:1:o;17320:128::-;17360:3;17391:1;17387:6;17384:1;17381:13;17378:39;;;17397:18;;:::i;:::-;-1:-1:-1;17433:9:1;;17320:128::o;17453:120::-;17493:1;17519;17509:35;;17524:18;;:::i;:::-;-1:-1:-1;17558:9:1;;17453:120::o;17578:422::-;17667:1;17710:5;17667:1;17724:270;17745:7;17735:8;17732:21;17724:270;;;17804:4;17800:1;17796:6;17792:17;17786:4;17783:27;17780:53;;;17813:18;;:::i;:::-;17863:7;17853:8;17849:22;17846:55;;;17883:16;;;;17846:55;17962:22;;;;17922:15;;;;17724:270;;;17728:3;17578:422;;;;;:::o;18005:131::-;18065:5;18094:36;18121:8;18115:4;18190:5;18220:8;18210:80;;-1:-1:-1;18261:1:1;18275:5;;18210:80;18309:4;18299:76;;-1:-1:-1;18346:1:1;18360:5;;18299:76;18391:4;18409:1;18404:59;;;;18477:1;18472:130;;;;18384:218;;18404:59;18434:1;18425:10;;18448:5;;;18472:130;18509:3;18499:8;18496:17;18493:43;;;18516:18;;:::i;:::-;-1:-1:-1;;18572:1:1;18558:16;;18587:5;;18384:218;;18686:2;18676:8;18673:16;18667:3;18661:4;18658:13;18654:36;18648:2;18638:8;18635:16;18630:2;18624:4;18621:12;18617:35;18614:77;18611:159;;;-1:-1:-1;18723:19:1;;;18755:5;;18611:159;18802:34;18827:8;18821:4;18802:34;:::i;:::-;18872:6;18868:1;18864:6;18860:19;18851:7;18848:32;18845:58;;;18883:18;;:::i;:::-;18921:20;;18141:806;-1:-1:-1;;;18141:806:1:o;18952:168::-;18992:7;19058:1;19054;19050:6;19046:14;19043:1;19040:21;19035:1;19028:9;19021:17;19017:45;19014:71;;;19065:18;;:::i;:::-;-1:-1:-1;19105:9:1;;18952:168::o;19125:125::-;19165:4;19193:1;19190;19187:8;19184:34;;;19198:18;;:::i;:::-;-1:-1:-1;19235:9:1;;19125:125::o;19255:380::-;19334:1;19330:12;;;;19377;;;19398:61;;19452:4;19444:6;19440:17;19430:27;;19398:61;19505:2;19497:6;19494:14;19474:18;19471:38;19468:161;;;19551:10;19546:3;19542:20;19539:1;19532:31;19586:4;19583:1;19576:15;19614:4;19611:1;19604:15;19468:161;;19255:380;;;:::o;19640:135::-;19679:3;-1:-1:-1;;19700:17:1;;19697:43;;;19720:18;;:::i;:::-;-1:-1:-1;19767:1:1;19756:13;;19640:135::o;19780:112::-;19812:1;19838;19828:35;;19843:18;;:::i;:::-;-1:-1:-1;19877:9:1;;19780:112::o;19897:127::-;19958:10;19953:3;19949:20;19946:1;19939:31;19989:4;19986:1;19979:15;20013:4;20010:1;20003:15;20029:127;20090:10;20085:3;20081:20;20078:1;20071:31;20121:4;20118:1;20111:15;20145:4;20142:1;20135:15;20161:127;20222:10;20217:3;20213:20;20210:1;20203:31;20253:4;20250:1;20243:15;20277:4;20274:1;20267:15;20293:127;20354:10;20349:3;20345:20;20342:1;20335:31;20385:4;20382:1;20375:15;20409:4;20406:1;20399:15;20425:127;20486:10;20481:3;20477:20;20474:1;20467:31;20517:4;20514:1;20507:15;20541:4;20538:1;20531:15;20557:131;-1:-1:-1;;;;;20632:31:1;;20622:42;;20612:70;;20678:1;20675;20668:12
Swarm Source
ipfs://b59e11712dd84db30326bf09e49edfae5309759377e1682a6c91ab978450c67c
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.