ERC-20
Overview
Max Total Supply
200,000,000,000 ALADDINU
Holders
193
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 9 Decimals)
Balance
218,897,419.496733195 ALADDINUValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
Aladdinu
Compiler Version
v0.8.0+commit.c7dfd78e
Contract Source Code (Solidity Multiple files format)
// SPDX-License-Identifier: NOLICENSE pragma solidity ^0.8.0; /* _ _ _ _ /\ | | | | | (_) / \ | | __ _ __| | __| |_ _ __ _ _ / /\ \ | |/ _` |/ _` |/ _` | | '_ \| | | | / ____ \| | (_| | (_| | (_| | | | | | |_| | /_/ \_\_|\__,_|\__,_|\__,_|_|_| |_|\__,_ ⭐️ The Race Starts Here! 🔸 Launch: 5Th January @ 11:30pm UTC 🔸 Launching on: Uniswap 🌍 Website: wwww.aladdinu.com. 🌍 Telegram: @Aladdinu. 🌍 Twitter: @Aladdinutoken. 🔹 Initial LP 50k USD (of ETH) 🔹 Whitepaper on website. 🔹 Huge marketing and promotion lined up. Five playable characters at launch + more characters and upgrades to be bought on the Agrabah market (NFT In game upgrade store to buy and sell). 🔸 First level video and 3D character published in Telegram group. */ import "./Ownable.sol"; import "./IERC20.sol"; import "./IUniswapV2Router02.sol"; import "./IUniswapV2Factory.sol"; import "./Address.sol"; contract Aladdinu is Context, IERC20, Ownable { using Address for address payable; mapping (address => uint256) private _rOwned; mapping (address => uint256) private _tOwned; mapping (address => mapping (address => uint256)) private _allowances; mapping (address => bool) private _isExcludedFromFee; mapping (address => bool) private _isExcluded; mapping (address => bool) private _isExcludedFromMaxWallet; mapping (address => bool) public isBot; address[] private _excluded; uint8 private constant _decimals = 9; uint256 private constant MAX = ~uint256(0); uint256 private _tTotal = 200000000000 * 10**_decimals; uint256 private _rTotal = (MAX - (MAX % _tTotal)); uint256 public maxTxAmountBuy = _tTotal/142; uint256 public maxTxAmountSell = _tTotal/200; uint256 public maxWalletAmount = _tTotal/100; //antisnipers uint256 public liqAddedBlockNumber; uint256 public blocksToWait = 2; address payable public marketingAddress; mapping (address => bool) public isAutomatedMarketMakerPair; string private constant _name = "Aladdinu"; string private constant _symbol = "ALADDINU"; bool private inSwapAndLiquify; IUniswapV2Router02 public UniswapV2Router; address public uniswapPair; bool public swapAndLiquifyEnabled = true; uint256 public numTokensSellToAddToLiquidity = _tTotal/500; struct feeRatesStruct { uint8 rfi; uint8 marketing; uint8 autolp; uint8 toSwap; } feeRatesStruct public buyRates = feeRatesStruct( { rfi: 0, marketing: 7, autolp: 4, toSwap: 11 }); feeRatesStruct public sellRates = feeRatesStruct( { rfi: 0, marketing: 24, autolp: 1, toSwap: 25 }); feeRatesStruct private appliedRates = buyRates; struct TotFeesPaidStruct{ uint256 rfi; uint256 toSwap; } TotFeesPaidStruct public totFeesPaid; struct valuesFromGetValues{ uint256 rAmount; uint256 rTransferAmount; uint256 rRfi; uint256 rToSwap; uint256 tTransferAmount; uint256 tRfi; uint256 tToSwap; } event SwapAndLiquifyEnabledUpdated(bool enabled); event SwapAndLiquify(uint256 tokensSwapped, uint256 ETHReceived, uint256 tokensIntotoSwap); event LiquidityAdded(uint256 tokenAmount, uint256 ETHAmount); event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value); event BlacklistedUser(address botAddress, bool indexed value); event MaxWalletAmountUpdated(uint256 amount); event ExcludeFromMaxWallet(address account, bool indexed isExcluded); modifier lockTheSwap { inSwapAndLiquify = true; _; inSwapAndLiquify = false; } constructor () { IUniswapV2Router02 _UniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); uniswapPair = IUniswapV2Factory(_UniswapV2Router.factory()) .createPair(address(this), _UniswapV2Router.WETH()); isAutomatedMarketMakerPair[uniswapPair] = true; emit SetAutomatedMarketMakerPair(uniswapPair, true); UniswapV2Router = _UniswapV2Router; _rOwned[owner()] = _rTotal; marketingAddress= payable(msg.sender); _isExcludedFromFee[owner()] = true; _isExcludedFromFee[marketingAddress]=true; _isExcludedFromFee[address(this)]=true; _isExcludedFromMaxWallet[owner()] = true; _isExcludedFromMaxWallet[marketingAddress]=true; _isExcludedFromMaxWallet[address(this)]=true; _isExcludedFromMaxWallet[uniswapPair] = true; emit Transfer(address(0), owner(), _tTotal); } //std ERC20: function name() public pure returns (string memory) { return _name; } function symbol() public pure returns (string memory) { return _symbol; } function decimals() public pure returns (uint8) { return _decimals; } //override ERC20: function totalSupply() public view override returns (uint256) { return _tTotal; } 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 allowance(address owner, address spender) public view override returns (uint256) { return _allowances[owner][spender]; } function approve(address spender, uint256 amount) public override returns (bool) { _approve(_msgSender(), spender, amount); return true; } function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) { _transfer(sender, recipient, amount); uint256 currentAllowance = _allowances[sender][_msgSender()]; require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance"); unchecked { _approve(sender, _msgSender(), currentAllowance - 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) { uint256 currentAllowance = _allowances[_msgSender()][spender]; require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero"); unchecked { _approve(_msgSender(), spender, currentAllowance - subtractedValue); } return true; } function isExcludedFromReward(address account) public view returns (bool) { return _isExcluded[account]; } function reflectionFromToken(uint256 tAmount, bool deductTransferRfi) public view returns(uint256) { require(tAmount <= _tTotal, "Amount must be less than supply"); if (!deductTransferRfi) { valuesFromGetValues memory s = _getValues(tAmount, true); return s.rAmount; } else { valuesFromGetValues memory s = _getValues(tAmount, true); return s.rTransferAmount; } } function tokenFromReflection(uint256 rAmount) public view returns(uint256) { require(rAmount <= _rTotal, "Amount must be less than total reflections"); uint256 currentRate = _getRate(); return rAmount/currentRate; } //@dev kept original RFI naming -> "reward" as in reflection function excludeFromReward(address account) external onlyOwner() { require(!_isExcluded[account], "Account is already excluded"); if(_rOwned[account] > 0) { _tOwned[account] = tokenFromReflection(_rOwned[account]); } _isExcluded[account] = true; _excluded.push(account); } function includeInReward(address account) external onlyOwner() { require(_isExcluded[account], "Account is not excluded"); 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 excludeFromFee(address account) external onlyOwner { _isExcludedFromFee[account] = true; } function excludeMultipleAccountsFromMaxWallet(address[] calldata accounts, bool excluded) public onlyOwner { for(uint256 i = 0; i < accounts.length; i++) { require(_isExcludedFromMaxWallet[accounts[i]] != excluded, "_isExcludedFromMaxWallet already set to that value for one wallet"); _isExcludedFromMaxWallet[accounts[i]] = excluded; emit ExcludeFromMaxWallet(accounts[i], excluded); } } function includeInFee(address account) external onlyOwner { _isExcludedFromFee[account] = false; } function isExcludedFromFee(address account) public view returns(bool) { return _isExcludedFromFee[account]; } function isExcludedFromMaxWallet(address account) public view returns(bool) { return _isExcludedFromMaxWallet[account]; } function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner { swapAndLiquifyEnabled = _enabled; emit SwapAndLiquifyEnabledUpdated(_enabled); } // @dev receive ETH from UniswapV2Router when swapping receive() external payable {} function _reflectRfi(uint256 rRfi, uint256 tRfi) private { _rTotal -= rRfi; totFeesPaid.rfi += tRfi; } function _takeToSwap(uint256 rToSwap,uint256 tToSwap) private { _rOwned[address(this)] +=rToSwap; if(_isExcluded[address(this)]) _tOwned[address(this)] += tToSwap; totFeesPaid.toSwap+=tToSwap; } function _getValues(uint256 tAmount, bool takeFee) private view returns (valuesFromGetValues memory to_return) { to_return = _getTValues(tAmount, takeFee); (to_return.rAmount, to_return.rTransferAmount, to_return.rRfi, to_return.rToSwap) = _getRValues(to_return, tAmount, takeFee, _getRate()); return to_return; } function _getTValues(uint256 tAmount, bool takeFee) private view returns (valuesFromGetValues memory s) { if(!takeFee) { s.tTransferAmount = tAmount; return s; } s.tRfi = tAmount*appliedRates.rfi/100; s.tToSwap = tAmount*appliedRates.toSwap/100; s.tTransferAmount = tAmount-s.tRfi-s.tToSwap; return s; } function _getRValues(valuesFromGetValues memory s, uint256 tAmount, bool takeFee, uint256 currentRate) private pure returns (uint256 rAmount, uint256 rTransferAmount, uint256 rRfi, uint256 rToSwap) { rAmount = tAmount*currentRate; if(!takeFee) { return(rAmount, rAmount,0,0); } rRfi = s.tRfi*currentRate; rToSwap = s.tToSwap*currentRate; rTransferAmount = rAmount-rRfi-rToSwap; return (rAmount, rTransferAmount, rRfi,rToSwap); } function _getRate() private view returns(uint256) { (uint256 rSupply, uint256 tSupply) = _getCurrentSupply(); return rSupply/tSupply; } function _getCurrentSupply() private 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 -=_rOwned[_excluded[i]]; tSupply -=_tOwned[_excluded[i]]; } if (rSupply < _rTotal/_tTotal) return (_rTotal, _tTotal); return (rSupply, tSupply); } function _approve(address owner, address spender, uint256 amount) private { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } function _transfer(address from, address to, uint256 amount) private { if(liqAddedBlockNumber==0 && isAutomatedMarketMakerPair[to] ) {liqAddedBlockNumber = block.number; } require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); require(!isBot[from], "ERC20: address blacklisted (bot)"); require(amount > 0, "Transfer amount must be greater than zero"); require(amount <= balanceOf(from),"You are trying to transfer more than your balance"); bool takeFee = !(_isExcludedFromFee[from] || _isExcludedFromFee[to]); if(takeFee) { if(isAutomatedMarketMakerPair[from]) { if(block.number<liqAddedBlockNumber+blocksToWait) { isBot[to] = true; emit BlacklistedUser(to,true); } appliedRates = buyRates; require(amount<=maxTxAmountBuy, "amount must be <= maxTxAmountBuy"); } else { appliedRates = sellRates; require(amount<=maxTxAmountSell, "amount must be <= maxTxAmountSell"); } } if (balanceOf(address(this)) >= numTokensSellToAddToLiquidity && !inSwapAndLiquify && !isAutomatedMarketMakerPair[from] && swapAndLiquifyEnabled) { //add liquidity swapAndLiquify(numTokensSellToAddToLiquidity); } _tokenTransfer(from, to, amount, takeFee); } //this method is responsible for taking all fee, if takeFee is true function _tokenTransfer(address sender, address recipient, uint256 tAmount, bool takeFee) private { valuesFromGetValues memory s = _getValues(tAmount, takeFee); if (_isExcluded[sender]) { _tOwned[sender] -= tAmount; } if (_isExcluded[recipient]) { _tOwned[recipient] += s.tTransferAmount; } _rOwned[sender] -= s.rAmount; _rOwned[recipient] += s.rTransferAmount; if(takeFee) { _reflectRfi(s.rRfi, s.tRfi); _takeToSwap(s.rToSwap,s.tToSwap); emit Transfer(sender, address(this), s.tToSwap); } require(_isExcludedFromMaxWallet[recipient] || balanceOf(recipient)<= maxWalletAmount, "Recipient cannot hold more than maxWalletAmount"); emit Transfer(sender, recipient, s.tTransferAmount); } function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap { uint256 denominator = appliedRates.toSwap*2; uint256 tokensToAddLiquidityWith = contractTokenBalance*appliedRates.autolp/denominator; uint256 toSwap = contractTokenBalance-tokensToAddLiquidityWith; uint256 initialBalance = address(this).balance; // swap tokens for ETH swapTokensForETH(toSwap); uint256 deltaBalance = address(this).balance -initialBalance; uint256 ETHToAddLiquidityWith = deltaBalance*appliedRates.autolp/ (denominator- appliedRates.autolp); // add liquidity to Uniswap addLiquidity(tokensToAddLiquidityWith, ETHToAddLiquidityWith); marketingAddress.sendValue(address(this).balance); //we give the remaining tax to marketing (5/8 of the toSwap tax) } function swapTokensForETH(uint256 tokenAmount) private { // generate the Pancakeswap pair path of token -> wETH address[] memory path = new address[](2); path[0] = address(this); path[1] = UniswapV2Router.WETH(); if(allowance(address(this), address(UniswapV2Router)) < tokenAmount) { _approve(address(this), address(UniswapV2Router), ~uint256(0)); } // make the swap UniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, address(this), block.timestamp ); } function addLiquidity(uint256 tokenAmount, uint256 ETHAmount) private { // add the liquidity UniswapV2Router.addLiquidityETH{value: ETHAmount}( address(this), tokenAmount, 0, // slippage is unavoidable 0, // slippage is unavoidable owner(), block.timestamp ); emit LiquidityAdded(tokenAmount, ETHAmount); } function setAutomatedMarketMakerPair(address _pair, bool value) external onlyOwner{ require(isAutomatedMarketMakerPair[_pair] != value, "Automated market maker pair is already set to that value"); isAutomatedMarketMakerPair[_pair] = value; if(value) { _isExcludedFromMaxWallet[_pair] = true; emit ExcludeFromMaxWallet(_pair, value); } emit SetAutomatedMarketMakerPair(_pair, value); } function setBuyFees(uint8 _rfi,uint8 _marketing,uint8 _autolp) external onlyOwner { buyRates.rfi=_rfi; buyRates.marketing=_marketing; buyRates.autolp=_autolp; buyRates.toSwap= _marketing+_autolp; } function setSellFees(uint8 _rfi,uint8 _marketing,uint8 _autolp) external onlyOwner { sellRates.rfi=_rfi; sellRates.marketing=_marketing; sellRates.autolp=_autolp; sellRates.toSwap= _marketing+_autolp; } function setMaxTransactionAmountsPerK(uint256 _maxTxAmountBuyPer10K, uint256 _maxTxAmountSellPer10K) external onlyOwner { maxTxAmountBuy = _tTotal*_maxTxAmountBuyPer10K/10000; maxTxAmountSell = _tTotal*_maxTxAmountSellPer10K/10000; } function setNumTokensSellToAddToLiq(uint256 amountTokens) external onlyOwner { numTokensSellToAddToLiquidity = amountTokens*10**_decimals; } function setMarketingAddress(address payable _marketingAddress) external onlyOwner { marketingAddress = _marketingAddress; } function manualSwapAndAddToLiq() external onlyOwner { swapAndLiquify(balanceOf(address(this))); } // Cannot BLACKLIST user manually, the only way to get into the Blacklist is to snipe, buy in block no.1. We give grace here if a genuine user can prove that they did not snipe in block 0 or 1. function unblacklistSniper(address botAddress) external onlyOwner { require(!isBot[botAddress] ,"address provided is already not blacklisted"); isBot[botAddress] = false; emit BlacklistedUser(botAddress,false); } function setMaxWalletAmount(uint256 _maxAmountWalletPer10K) external onlyOwner { maxWalletAmount = _tTotal*_maxAmountWalletPer10K/10000; emit MaxWalletAmountUpdated(maxWalletAmount); } function excludeFromMaxWallet(address account, bool excluded) external onlyOwner { require(_isExcludedFromMaxWallet[account] != excluded, "_isExcludedFromMaxWallet already set to that value"); _isExcludedFromMaxWallet[account] = excluded; emit ExcludeFromMaxWallet(account, excluded); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ 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"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { 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 assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /* * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @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/issues/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); }
// SPDX-License-Identifier: MIT pragma solidity >=0.5.0; interface IUniswapV2Factory { event PairCreated(address indexed token0, address indexed token1, address pair, uint); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint) external view returns (address pair); function allPairsLength() external view returns (uint); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; }
// SPDX-License-Identifier: MIT pragma solidity >=0.6.2; interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB); function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts); }
// SPDX-License-Identifier: MIT pragma solidity >=0.6.2; import './IUniswapV2Router01.sol'; 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; }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./Context.sol"; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _setOwner(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _setOwner(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"botAddress","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"BlacklistedUser","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromMaxWallet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokenAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ETHAmount","type":"uint256"}],"name":"LiquidityAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"MaxWalletAmountUpdated","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":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","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":"tokensIntotoSwap","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":"UniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"blocksToWait","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyRates","outputs":[{"internalType":"uint8","name":"rfi","type":"uint8"},{"internalType":"uint8","name":"marketing","type":"uint8"},{"internalType":"uint8","name":"autolp","type":"uint8"},{"internalType":"uint8","name":"toSwap","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeMultipleAccountsFromMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","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","name":"","type":"address"}],"name":"isAutomatedMarketMakerPair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isBot","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"isExcludedFromMaxWallet","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":"liqAddedBlockNumber","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualSwapAndAddToLiq","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTxAmountBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTxAmountSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"numTokensSellToAddToLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferRfi","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellRates","outputs":[{"internalType":"uint8","name":"rfi","type":"uint8"},{"internalType":"uint8","name":"marketing","type":"uint8"},{"internalType":"uint8","name":"autolp","type":"uint8"},{"internalType":"uint8","name":"toSwap","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_rfi","type":"uint8"},{"internalType":"uint8","name":"_marketing","type":"uint8"},{"internalType":"uint8","name":"_autolp","type":"uint8"}],"name":"setBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"_marketingAddress","type":"address"}],"name":"setMarketingAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxTxAmountBuyPer10K","type":"uint256"},{"internalType":"uint256","name":"_maxTxAmountSellPer10K","type":"uint256"}],"name":"setMaxTransactionAmountsPerK","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxAmountWalletPer10K","type":"uint256"}],"name":"setMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountTokens","type":"uint256"}],"name":"setNumTokensSellToAddToLiq","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_rfi","type":"uint8"},{"internalType":"uint8","name":"_marketing","type":"uint8"},{"internalType":"uint8","name":"_autolp","type":"uint8"}],"name":"setSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","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":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totFeesPaid","outputs":[{"internalType":"uint256","name":"rfi","type":"uint256"},{"internalType":"uint256","name":"toSwap","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":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"botAddress","type":"address"}],"name":"unblacklistSniper","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
6080604052620000126009600a6200065c565b6200002390642e90edd00062000747565b6009819055620000369060001962000783565b620000449060001962000769565b600a55608e600954620000589190620005f8565b600b5560c86009546200006c9190620005f8565b600c556064600954620000809190620005f8565b600d556002600f556013805460ff60a01b1916600160a01b179055600954620000ad906101f490620005f8565b601455604080516080808201835260008083526007602080850191909152600484860152600b6060948501526015805461ffff199081166107001762ff000019908116620400001763ff00000019908116630b00000017938490558851968701895294865260189386019390935260019685019690965260199390940192909252601680546201000095166118001783168517821663190000001790556017805461ff001960ff80871660ff1990931692909217166101008087048316021790931685850484169095029490941716630100000092839004919091169091021790553480156200019c57600080fd5b50620001b1620001ab62000542565b62000546565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d9050806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200020457600080fd5b505afa15801562000219573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200023f9190620005a5565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200028857600080fd5b505afa1580156200029d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002c39190620005a5565b6040518363ffffffff1660e01b8152600401620002e2929190620005d5565b602060405180830381600087803b158015620002fd57600080fd5b505af115801562000312573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003389190620005a5565b601380546001600160a01b0319166001600160a01b03928316178082558216600090815260116020526040808220805460ff1916600190811790915592549051929316917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab9190a360128054610100600160a81b0319166101006001600160a01b03841602179055600a5460016000620003d162000596565b6001600160a01b031681526020810191909152604001600090812091909155601080546001600160a01b031916331790556001906004906200041262000596565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff1996871617905560105490911681526004909252808220805484166001908117909155308352908220805490931681179092556006906200047962000596565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff199687161790556010548216815260069093528183208054851660019081179091553084528284208054861682179055601354909116835291208054909216179055620004ec62000596565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600954604051620005339190620005ef565b60405180910390a350620007c6565b3390565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000546001600160a01b031690565b600060208284031215620005b7578081fd5b81516001600160a01b0381168114620005ce578182fd5b9392505050565b6001600160a01b0392831681529116602082015260400190565b90815260200190565b6000826200060a576200060a620007b0565b500490565b80825b600180861162000623575062000653565b8187048211156200063857620006386200079a565b808616156200064657918102915b9490941c93800262000612565b94509492505050565b6000620005ce60001960ff8516846000826200067b57506001620005ce565b816200068a57506000620005ce565b8160018114620006a35760028114620006ae57620006e2565b6001915050620005ce565b60ff841115620006c257620006c26200079a565b6001841b915084821115620006db57620006db6200079a565b50620005ce565b5060208310610133831016604e8410600b84101617156200071a575081810a838111156200071457620007146200079a565b620005ce565b6200072984848460016200060f565b8086048211156200073e576200073e6200079a565b02949350505050565b60008160001904831182151516156200076457620007646200079a565b500290565b6000828210156200077e576200077e6200079a565b500390565b600082620007955762000795620007b0565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b61359980620007d66000396000f3fe6080604052600436106102cd5760003560e01c806379eb8d1d11610175578063aa4bde28116100dc578063d44e586e11610095578063dd62ed3e1161006f578063dd62ed3e14610827578063e22b62de14610847578063ea2f0b3714610867578063f2fde38b14610887576102d4565b8063d44e586e146107e8578063d6c180bf146107fd578063d8dcac4f14610812576102d4565b8063aa4bde2814610749578063bd94545b1461075e578063c49b9a801461077e578063c816841b1461079e578063d12a7688146107b3578063d2fcc001146107c8576102d4565b806395d89b411161012e57806395d89b411461069c5780639a7a23d6146106b15780639ba5e4d5146106d1578063a457c2d7146106f4578063a5ece94114610714578063a9059cbb14610729576102d4565b806379eb8d1d146105fd57806388f820201461061d5780638a0eef5a1461063d5780638da5cb5b14610652578063906e9dd014610667578063958b0f2014610687576102d4565b80633bbac579116102345780635342acb4116101ed578063713898cd116101c7578063713898cd1461058e578063715018a6146105b357806373cafdc2146105c85780637949a403146105dd576102d4565b80635342acb41461052e5780636dd3d39f1461054e57806370a082311461056e576102d4565b80633bbac57914610479578063437823ec146104995780634549b039146104b95780634a74bb02146104d957806350be7cdb146104ee57806352390c021461050e576102d4565b806323b872dd1161028657806323b872dd146103b757806327a14fc2146103d75780632d838119146103f7578063313ce567146104175780633685d419146104395780633950935114610459576102d4565b806304679780146102d9578063055add0d146102fb57806306fdde0314610326578063095ea7b31461034857806315952f541461037557806318160ddd14610395576102d4565b366102d457005b600080fd5b3480156102e557600080fd5b506102f96102f4366004612a91565b6108a7565b005b34801561030757600080fd5b5061031061090b565b60405161031d9190612b55565b60405180910390f35b34801561033257600080fd5b5061033b61091f565b60405161031d9190612baf565b34801561035457600080fd5b506103686103633660046129ce565b610941565b60405161031d9190612ba4565b34801561038157600080fd5b506102f96103903660046128ea565b61095f565b3480156103a157600080fd5b506103aa610a31565b60405161031d9190613290565b3480156103c357600080fd5b506103686103d236600461295a565b610a37565b3480156103e357600080fd5b506102f96103f2366004612a91565b610ac9565b34801561040357600080fd5b506103aa610412366004612a91565b610b61565b34801561042357600080fd5b5061042c610ba4565b60405161031d9190613317565b34801561044557600080fd5b506102f96104543660046128ea565b610ba9565b34801561046557600080fd5b506103686104743660046129ce565b610d7e565b34801561048557600080fd5b506103686104943660046128ea565b610dd2565b3480156104a557600080fd5b506102f96104b43660046128ea565b610de7565b3480156104c557600080fd5b506103aa6104d4366004612aa9565b610e4a565b3480156104e557600080fd5b50610368610ea4565b3480156104fa57600080fd5b506102f9610509366004612b19565b610eb4565b34801561051a57600080fd5b506102f96105293660046128ea565b610f53565b34801561053a57600080fd5b506103686105493660046128ea565b61108b565b34801561055a57600080fd5b506103686105693660046128ea565b6110a9565b34801561057a57600080fd5b506103aa6105893660046128ea565b6110c7565b34801561059a57600080fd5b506105a3611129565b60405161031d9493929190613325565b3480156105bf57600080fd5b506102f961114e565b3480156105d457600080fd5b506105a3611199565b3480156105e957600080fd5b506103686105f83660046128ea565b6111be565b34801561060957600080fd5b506102f9610618366004612acb565b6111d3565b34801561062957600080fd5b506103686106383660046128ea565b611253565b34801561064957600080fd5b506103aa611271565b34801561065e57600080fd5b50610310611277565b34801561067357600080fd5b506102f96106823660046128ea565b611286565b34801561069357600080fd5b506102f96112e7565b3480156106a857600080fd5b5061033b611337565b3480156106bd57600080fd5b506102f96106cc36600461299a565b611359565b3480156106dd57600080fd5b506106e66114a0565b60405161031d929190613309565b34801561070057600080fd5b5061036861070f3660046129ce565b6114a9565b34801561072057600080fd5b50610310611522565b34801561073557600080fd5b506103686107443660046129ce565b611531565b34801561075557600080fd5b506103aa611545565b34801561076a57600080fd5b506102f96107793660046129f9565b61154b565b34801561078a57600080fd5b506102f9610799366004612a77565b6116f6565b3480156107aa57600080fd5b5061031061177c565b3480156107bf57600080fd5b506103aa61178b565b3480156107d457600080fd5b506102f96107e336600461299a565b611791565b3480156107f457600080fd5b506103aa611873565b34801561080957600080fd5b506103aa611879565b34801561081e57600080fd5b506103aa61187f565b34801561083357600080fd5b506103aa610842366004612922565b611885565b34801561085357600080fd5b506102f9610862366004612b19565b6118b0565b34801561087357600080fd5b506102f96108823660046128ea565b61194f565b34801561089357600080fd5b506102f96108a23660046128ea565b6119af565b6108af611a20565b6001600160a01b03166108c0611277565b6001600160a01b0316146108ef5760405162461bcd60e51b81526004016108e6906130f5565b60405180910390fd5b6108fb6009600a6133ed565b61090590826134be565b60145550565b60125461010090046001600160a01b031681565b604080518082019091526008815267416c616464696e7560c01b602082015290565b600061095561094e611a20565b8484611a24565b5060015b92915050565b610967611a20565b6001600160a01b0316610978611277565b6001600160a01b03161461099e5760405162461bcd60e51b81526004016108e6906130f5565b6001600160a01b03811660009081526007602052604090205460ff16156109d75760405162461bcd60e51b81526004016108e69061302b565b6001600160a01b038116600090815260076020526040808220805460ff19169055517f3159dadbd8e2d720a851b412e3358e7e44bb11734c9bfd5715340e21798e8b2590610a26908490612b55565b60405180910390a250565b60095490565b6000610a44848484611ad8565b6001600160a01b038416600090815260036020526040812081610a65611a20565b6001600160a01b03166001600160a01b0316815260200190815260200160002054905082811015610aa85760405162461bcd60e51b81526004016108e6906130ad565b610abc85610ab4611a20565b858403611a24565b60019150505b9392505050565b610ad1611a20565b6001600160a01b0316610ae2611277565b6001600160a01b031614610b085760405162461bcd60e51b81526004016108e6906130f5565b61271081600954610b1991906134be565b610b239190613387565b600d8190556040517f4b39c36d20c57d220f61fd25c4349d4435cc03ef6c2a680942f15333c3c3e00191610b5691613290565b60405180910390a150565b6000600a54821115610b855760405162461bcd60e51b81526004016108e690612cfd565b6000610b8f611e19565b9050610b9b8184613387565b9150505b919050565b600990565b610bb1611a20565b6001600160a01b0316610bc2611277565b6001600160a01b031614610be85760405162461bcd60e51b81526004016108e6906130f5565b6001600160a01b03811660009081526005602052604090205460ff16610c205760405162461bcd60e51b81526004016108e690612f88565b60005b600854811015610d7a57816001600160a01b031660088281548110610c5857634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b03161415610d685760088054610c8390600190613506565b81548110610ca157634e487b7160e01b600052603260045260246000fd5b600091825260209091200154600880546001600160a01b039092169183908110610cdb57634e487b7160e01b600052603260045260246000fd5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600282526040808220829055600590925220805460ff191690556008805480610d4157634e487b7160e01b600052603160045260246000fd5b600082815260209020810160001990810180546001600160a01b0319169055019055610d7a565b80610d728161351d565b915050610c23565b5050565b6000610955610d8b611a20565b848460036000610d99611a20565b6001600160a01b03908116825260208083019390935260409182016000908120918b1681529252902054610dcd919061334a565b611a24565b60076020526000908152604090205460ff1681565b610def611a20565b6001600160a01b0316610e00611277565b6001600160a01b031614610e265760405162461bcd60e51b81526004016108e6906130f5565b6001600160a01b03166000908152600460205260409020805460ff19166001179055565b6000600954831115610e6e5760405162461bcd60e51b81526004016108e690613076565b81610e8a576000610e80846001611e3c565b5191506109599050565b6000610e97846001611e3c565b6020015191506109599050565b601354600160a01b900460ff1681565b610ebc611a20565b6001600160a01b0316610ecd611277565b6001600160a01b031614610ef35760405162461bcd60e51b81526004016108e6906130f5565b6015805460ff191660ff8581169190911761ff001916610100858316021762ff000019166201000091841691909102179055610f2f8183613362565b6015805460ff9290921663010000000263ff00000019909216919091179055505050565b610f5b611a20565b6001600160a01b0316610f6c611277565b6001600160a01b031614610f925760405162461bcd60e51b81526004016108e6906130f5565b6001600160a01b03811660009081526005602052604090205460ff1615610fcb5760405162461bcd60e51b81526004016108e690612ea2565b6001600160a01b03811660009081526001602052604090205415611025576001600160a01b03811660009081526001602052604090205461100b90610b61565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600560205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319169091179055565b6001600160a01b031660009081526004602052604090205460ff1690565b6001600160a01b031660009081526006602052604090205460ff1690565b6001600160a01b03811660009081526005602052604081205460ff161561110757506001600160a01b038116600090815260026020526040902054610b9f565b6001600160a01b03821660009081526001602052604090205461095990610b61565b60165460ff808216916101008104821691620100008204811691630100000090041684565b611156611a20565b6001600160a01b0316611167611277565b6001600160a01b03161461118d5760405162461bcd60e51b81526004016108e6906130f5565b6111976000611e7a565b565b60155460ff808216916101008104821691620100008204811691630100000090041684565b60116020526000908152604090205460ff1681565b6111db611a20565b6001600160a01b03166111ec611277565b6001600160a01b0316146112125760405162461bcd60e51b81526004016108e6906130f5565b6127108260095461122391906134be565b61122d9190613387565b600b55600954612710906112429083906134be565b61124c9190613387565b600c555050565b6001600160a01b031660009081526005602052604090205460ff1690565b600e5481565b6000546001600160a01b031690565b61128e611a20565b6001600160a01b031661129f611277565b6001600160a01b0316146112c55760405162461bcd60e51b81526004016108e6906130f5565b601080546001600160a01b0319166001600160a01b0392909216919091179055565b6112ef611a20565b6001600160a01b0316611300611277565b6001600160a01b0316146113265760405162461bcd60e51b81526004016108e6906130f5565b611197611332306110c7565b611eca565b604080518082019091526008815267414c414444494e5560c01b602082015290565b611361611a20565b6001600160a01b0316611372611277565b6001600160a01b0316146113985760405162461bcd60e51b81526004016108e6906130f5565b6001600160a01b03821660009081526011602052604090205460ff16151581151514156113d75760405162461bcd60e51b81526004016108e690612dcf565b6001600160a01b0382166000908152601160205260409020805460ff19168215801591909117909155611464576001600160a01b03821660009081526006602052604090819020805460ff1916600117905551811515907f4a8452f723db48bf05f301f94d62a2cf7a72976cde77d83e3646584858b8f4b29061145b908590612b55565b60405180910390a25b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b60185460195482565b600080600360006114b8611a20565b6001600160a01b03908116825260208083019390935260409182016000908120918816815292529020549050828110156115045760405162461bcd60e51b81526004016108e69061324b565b61151861150f611a20565b85858403611a24565b5060019392505050565b6010546001600160a01b031681565b600061095561153e611a20565b8484611ad8565b600d5481565b611553611a20565b6001600160a01b0316611564611277565b6001600160a01b03161461158a5760405162461bcd60e51b81526004016108e6906130f5565b60005b828110156116f057811515600660008686858181106115bc57634e487b7160e01b600052603260045260246000fd5b90506020020160208101906115d191906128ea565b6001600160a01b0316815260208101919091526040016000205460ff161515141561160e5760405162461bcd60e51b81526004016108e690612c45565b816006600086868581811061163357634e487b7160e01b600052603260045260246000fd5b905060200201602081019061164891906128ea565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790558115157f4a8452f723db48bf05f301f94d62a2cf7a72976cde77d83e3646584858b8f4b28585848181106116b457634e487b7160e01b600052603260045260246000fd5b90506020020160208101906116c991906128ea565b6040516116d69190612b55565b60405180910390a2806116e88161351d565b91505061158d565b50505050565b6116fe611a20565b6001600160a01b031661170f611277565b6001600160a01b0316146117355760405162461bcd60e51b81526004016108e6906130f5565b6013805460ff60a01b1916600160a01b831515021790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15990610b56908390612ba4565b6013546001600160a01b031681565b60145481565b611799611a20565b6001600160a01b03166117aa611277565b6001600160a01b0316146117d05760405162461bcd60e51b81526004016108e6906130f5565b6001600160a01b03821660009081526006602052604090205460ff161515811515141561180f5760405162461bcd60e51b81526004016108e690612ed9565b6001600160a01b03821660009081526006602052604090819020805460ff191683151590811790915590517f4a8452f723db48bf05f301f94d62a2cf7a72976cde77d83e3646584858b8f4b290611867908590612b55565b60405180910390a25050565b600c5481565b600b5481565b600f5481565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b6118b8611a20565b6001600160a01b03166118c9611277565b6001600160a01b0316146118ef5760405162461bcd60e51b81526004016108e6906130f5565b6016805460ff191660ff8581169190911761ff001916610100858316021762ff00001916620100009184169190910217905561192b8183613362565b6016805460ff9290921663010000000263ff00000019909216919091179055505050565b611957611a20565b6001600160a01b0316611968611277565b6001600160a01b03161461198e5760405162461bcd60e51b81526004016108e6906130f5565b6001600160a01b03166000908152600460205260409020805460ff19169055565b6119b7611a20565b6001600160a01b03166119c8611277565b6001600160a01b0316146119ee5760405162461bcd60e51b81526004016108e6906130f5565b6001600160a01b038116611a145760405162461bcd60e51b81526004016108e690612d47565b611a1d81611e7a565b50565b3390565b6001600160a01b038316611a4a5760405162461bcd60e51b81526004016108e690613207565b6001600160a01b038216611a705760405162461bcd60e51b81526004016108e690612d8d565b6001600160a01b0380841660008181526003602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590611acb908590613290565b60405180910390a3505050565b600e54158015611b0057506001600160a01b03821660009081526011602052604090205460ff165b15611b0a5743600e555b6001600160a01b038316611b305760405162461bcd60e51b81526004016108e6906131c2565b6001600160a01b038216611b565760405162461bcd60e51b81526004016108e690612c02565b6001600160a01b03831660009081526007602052604090205460ff1615611b8f5760405162461bcd60e51b81526004016108e690612ff6565b60008111611baf5760405162461bcd60e51b81526004016108e69061312a565b611bb8836110c7565b811115611bd75760405162461bcd60e51b81526004016108e690612cac565b6001600160a01b03831660009081526004602052604081205460ff1680611c1657506001600160a01b03831660009081526004602052604090205460ff165b1590508015611da6576001600160a01b03841660009081526011602052604090205460ff1615611d3157600f54600e54611c50919061334a565b431015611cb7576001600160a01b03831660009081526007602052604090819020805460ff1916600190811790915590517f3159dadbd8e2d720a851b412e3358e7e44bb11734c9bfd5715340e21798e8b2590611cae908690612b55565b60405180910390a25b6015546017805460ff80841660ff199092169190911761ff0019166101008085048316021762ff00001916620100008085048316021763ff000000191663010000009384900491909116909202919091179055600b54821115611d2c5760405162461bcd60e51b81526004016108e690612e6d565b611da6565b6016546017805460ff80841660ff199092169190911761ff0019166101008085048316021762ff00001916620100008085048316021763ff000000191663010000009384900491909116909202919091179055600c54821115611da65760405162461bcd60e51b81526004016108e690612e2c565b601454611db2306110c7565b10158015611dc3575060125460ff16155b8015611de857506001600160a01b03841660009081526011602052604090205460ff16155b8015611dfd5750601354600160a01b900460ff165b15611e0d57611e0d601454611eca565b6116f084848484611fb4565b6000806000611e266121e6565b9092509050611e358183613387565b9250505090565b611e4461288c565b611e4e83836123a4565b9050611e63818484611e5e611e19565b61242e565b606085015260408401526020830152815292915050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6012805460ff19166001179055601754600090611ef2906301000000900460ff1660026134dd565b60175460ff91821692506000918391611f13916201000090910416856134be565b611f1d9190613387565b90506000611f2b8285613506565b905047611f3782612499565b6000611f438247613506565b601754909150600090611f5f9062010000900460ff1687613506565b601754611f759062010000900460ff16846134be565b611f7f9190613387565b9050611f8b8582612668565b601054611fa1906001600160a01b031647612740565b50506012805460ff191690555050505050565b6000611fc08383611e3c565b6001600160a01b03861660009081526005602052604090205490915060ff1615612012576001600160a01b0385166000908152600260205260408120805485929061200c908490613506565b90915550505b6001600160a01b03841660009081526005602052604090205460ff16156120665760808101516001600160a01b0385166000908152600260205260408120805490919061206090849061334a565b90915550505b80516001600160a01b03861660009081526001602052604081208054909190612090908490613506565b90915550506020808201516001600160a01b03861660009081526001909252604082208054919290916120c490849061334a565b90915550508115612143576120e181604001518260a001516127e1565b6120f381606001518260c00151612816565b306001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360c0015160405161213a9190613290565b60405180910390a35b6001600160a01b03841660009081526006602052604090205460ff16806121745750600d54612171856110c7565b11155b6121905760405162461bcd60e51b81526004016108e690613173565b836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83608001516040516121d79190613290565b60405180910390a35050505050565b600a546009546000918291825b6008548110156123715782600160006008848154811061222357634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054118061229c575081600260006008848154811061227557634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156122b357600a54600954945094505050506123a0565b60016000600883815481106122d857634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b031683528201929092526040019020546123079084613506565b9250600260006008838154811061232e57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b0316835282019290925260400190205461235d9083613506565b9150806123698161351d565b9150506121f3565b50600954600a546123829190613387565b82101561239a57600a546009549350935050506123a0565b90925090505b9091565b6123ac61288c565b816123bd5760808101839052610959565b6017546064906123d09060ff16856134be565b6123da9190613387565b60a08201526017546064906123f9906301000000900460ff16856134be565b6124039190613387565b60c0820181905260a08201516124199085613506565b6124239190613506565b608082015292915050565b600080808061243d85886134be565b9350856124525750829150600090508061248e565b848860a0015161246291906134be565b9150848860c0015161247491906134be565b9050806124818386613506565b61248b9190613506565b92505b945094509450949050565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106124dc57634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b031681525050601260019054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561254a57600080fd5b505afa15801561255e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125829190612906565b816001815181106125a357634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201015260125483916125d091309161010090910416611885565b10156125f5576012546125f590309061010090046001600160a01b0316600019611a24565b60125460405163791ac94760e01b81526101009091046001600160a01b03169063791ac94790612632908590600090869030904290600401613299565b600060405180830381600087803b15801561264c57600080fd5b505af1158015612660573d6000803e3d6000fd5b505050505050565b60125461010090046001600160a01b031663f305d71982308560008061268c611277565b426040518863ffffffff1660e01b81526004016126ae96959493929190612b69565b6060604051808303818588803b1580156126c757600080fd5b505af11580156126db573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906127009190612aec565b5050507f38f8a0c92f4c5b0b6877f878cb4c0c8d348a47b76d716c8e78f425043df9515b8282604051612734929190613309565b60405180910390a15050565b804710156127605760405162461bcd60e51b81526004016108e690612fbf565b6000826001600160a01b03168260405161277990612b52565b60006040518083038185875af1925050503d80600081146127b6576040519150601f19603f3d011682016040523d82523d6000602084013e6127bb565b606091505b50509050806127dc5760405162461bcd60e51b81526004016108e690612f2b565b505050565b81600a60008282546127f39190613506565b90915550506018805482919060009061280d90849061334a565b90915550505050565b306000908152600160205260408120805484929061283590849061334a565b90915550503060009081526005602052604090205460ff161561287757306000908152600260205260408120805483929061287190849061334a565b90915550505b806018600101600082825461280d919061334a565b6040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b80358015158114610b9f57600080fd5b803560ff81168114610b9f57600080fd5b6000602082840312156128fb578081fd5b8135610ac28161354e565b600060208284031215612917578081fd5b8151610ac28161354e565b60008060408385031215612934578081fd5b823561293f8161354e565b9150602083013561294f8161354e565b809150509250929050565b60008060006060848603121561296e578081fd5b83356129798161354e565b925060208401356129898161354e565b929592945050506040919091013590565b600080604083850312156129ac578182fd5b82356129b78161354e565b91506129c5602084016128c9565b90509250929050565b600080604083850312156129e0578182fd5b82356129eb8161354e565b946020939093013593505050565b600080600060408486031215612a0d578283fd5b833567ffffffffffffffff80821115612a24578485fd5b818601915086601f830112612a37578485fd5b813581811115612a45578586fd5b8760208083028501011115612a58578586fd5b602092830195509350612a6e91860190506128c9565b90509250925092565b600060208284031215612a88578081fd5b610ac2826128c9565b600060208284031215612aa2578081fd5b5035919050565b60008060408385031215612abb578182fd5b823591506129c5602084016128c9565b60008060408385031215612add578182fd5b50508035926020909101359150565b600080600060608486031215612b00578283fd5b8351925060208401519150604084015190509250925092565b600080600060608486031215612b2d578283fd5b612b36846128d9565b9250612b44602085016128d9565b9150612a6e604085016128d9565b90565b6001600160a01b0391909116815260200190565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b901515815260200190565b6000602080835283518082850152825b81811015612bdb57858101830151858201604001528201612bbf565b81811115612bec5783604083870101525b50601f01601f1916929092016040019392505050565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60208082526041908201527f5f69734578636c7564656446726f6d4d617857616c6c657420616c726561647960408201527f2073657420746f20746861742076616c756520666f72206f6e652077616c6c656060820152601d60fa1b608082015260a00190565b60208082526031908201527f596f752061726520747279696e6720746f207472616e73666572206d6f7265206040820152707468616e20796f75722062616c616e636560781b606082015260800190565b6020808252602a908201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260408201526965666c656374696f6e7360b01b606082015260800190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b60208082526022908201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604082015261737360f01b606082015260800190565b60208082526038908201527f4175746f6d61746564206d61726b6574206d616b65722070616972206973206160408201527f6c72656164792073657420746f20746861742076616c75650000000000000000606082015260800190565b60208082526021908201527f616d6f756e74206d757374206265203c3d206d61785478416d6f756e7453656c6040820152601b60fa1b606082015260800190565b6020808252818101527f616d6f756e74206d757374206265203c3d206d61785478416d6f756e74427579604082015260600190565b6020808252601b908201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604082015260600190565b60208082526032908201527f5f69734578636c7564656446726f6d4d617857616c6c657420616c72656164796040820152712073657420746f20746861742076616c756560701b606082015260800190565b6020808252603a908201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260408201527f6563697069656e74206d61792068617665207265766572746564000000000000606082015260800190565b60208082526017908201527f4163636f756e74206973206e6f74206578636c75646564000000000000000000604082015260600190565b6020808252601d908201527f416464726573733a20696e73756666696369656e742062616c616e6365000000604082015260600190565b6020808252818101527f45524332303a206164647265737320626c61636b6c69737465642028626f7429604082015260600190565b6020808252602b908201527f616464726573732070726f766964656420697320616c7265616479206e6f742060408201526a189b1858dadb1a5cdd195960aa1b606082015260800190565b6020808252601f908201527f416d6f756e74206d757374206265206c657373207468616e20737570706c7900604082015260600190565b60208082526028908201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616040820152676c6c6f77616e636560c01b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526029908201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206040820152687468616e207a65726f60b81b606082015260800190565b6020808252602f908201527f526563697069656e742063616e6e6f7420686f6c64206d6f7265207468616e2060408201526e1b585e15d85b1b195d105b5bdd5b9d608a1b606082015260800190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526024908201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646040820152637265737360e01b606082015260800190565b60208082526025908201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604082015264207a65726f60d81b606082015260800190565b90815260200190565b600060a082018783526020878185015260a0604085015281875180845260c0860191508289019350845b818110156132e85784516001600160a01b0316835293830193918301916001016132c3565b50506001600160a01b03969096166060850152505050608001529392505050565b918252602082015260400190565b60ff91909116815260200190565b60ff948516815292841660208401529083166040830152909116606082015260800190565b6000821982111561335d5761335d613538565b500190565b600060ff821660ff84168060ff0382111561337f5761337f613538565b019392505050565b6000826133a257634e487b7160e01b81526012600452602481fd5b500490565b80825b60018086116133b957506133e4565b8187048211156133cb576133cb613538565b808616156133d857918102915b9490941c9380026133aa565b94509492505050565b6000610ac260001960ff85168460008261340957506001610ac2565b8161341657506000610ac2565b816001811461342c576002811461343657613463565b6001915050610ac2565b60ff84111561344757613447613538565b6001841b91508482111561345d5761345d613538565b50610ac2565b5060208310610133831016604e8410600b8410161715613496575081810a8381111561349157613491613538565b610ac2565b6134a384848460016133a7565b8086048211156134b5576134b5613538565b02949350505050565b60008160001904831182151516156134d8576134d8613538565b500290565b600060ff821660ff84168160ff04811182151516156134fe576134fe613538565b029392505050565b60008282101561351857613518613538565b500390565b600060001982141561353157613531613538565b5060010190565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b0381168114611a1d57600080fdfea2646970667358221220e4292862330b4f161c33c520f303ede3cf71a0e76206da5a46c8cb1e0457977264736f6c63430008000033
Deployed Bytecode
0x6080604052600436106102cd5760003560e01c806379eb8d1d11610175578063aa4bde28116100dc578063d44e586e11610095578063dd62ed3e1161006f578063dd62ed3e14610827578063e22b62de14610847578063ea2f0b3714610867578063f2fde38b14610887576102d4565b8063d44e586e146107e8578063d6c180bf146107fd578063d8dcac4f14610812576102d4565b8063aa4bde2814610749578063bd94545b1461075e578063c49b9a801461077e578063c816841b1461079e578063d12a7688146107b3578063d2fcc001146107c8576102d4565b806395d89b411161012e57806395d89b411461069c5780639a7a23d6146106b15780639ba5e4d5146106d1578063a457c2d7146106f4578063a5ece94114610714578063a9059cbb14610729576102d4565b806379eb8d1d146105fd57806388f820201461061d5780638a0eef5a1461063d5780638da5cb5b14610652578063906e9dd014610667578063958b0f2014610687576102d4565b80633bbac579116102345780635342acb4116101ed578063713898cd116101c7578063713898cd1461058e578063715018a6146105b357806373cafdc2146105c85780637949a403146105dd576102d4565b80635342acb41461052e5780636dd3d39f1461054e57806370a082311461056e576102d4565b80633bbac57914610479578063437823ec146104995780634549b039146104b95780634a74bb02146104d957806350be7cdb146104ee57806352390c021461050e576102d4565b806323b872dd1161028657806323b872dd146103b757806327a14fc2146103d75780632d838119146103f7578063313ce567146104175780633685d419146104395780633950935114610459576102d4565b806304679780146102d9578063055add0d146102fb57806306fdde0314610326578063095ea7b31461034857806315952f541461037557806318160ddd14610395576102d4565b366102d457005b600080fd5b3480156102e557600080fd5b506102f96102f4366004612a91565b6108a7565b005b34801561030757600080fd5b5061031061090b565b60405161031d9190612b55565b60405180910390f35b34801561033257600080fd5b5061033b61091f565b60405161031d9190612baf565b34801561035457600080fd5b506103686103633660046129ce565b610941565b60405161031d9190612ba4565b34801561038157600080fd5b506102f96103903660046128ea565b61095f565b3480156103a157600080fd5b506103aa610a31565b60405161031d9190613290565b3480156103c357600080fd5b506103686103d236600461295a565b610a37565b3480156103e357600080fd5b506102f96103f2366004612a91565b610ac9565b34801561040357600080fd5b506103aa610412366004612a91565b610b61565b34801561042357600080fd5b5061042c610ba4565b60405161031d9190613317565b34801561044557600080fd5b506102f96104543660046128ea565b610ba9565b34801561046557600080fd5b506103686104743660046129ce565b610d7e565b34801561048557600080fd5b506103686104943660046128ea565b610dd2565b3480156104a557600080fd5b506102f96104b43660046128ea565b610de7565b3480156104c557600080fd5b506103aa6104d4366004612aa9565b610e4a565b3480156104e557600080fd5b50610368610ea4565b3480156104fa57600080fd5b506102f9610509366004612b19565b610eb4565b34801561051a57600080fd5b506102f96105293660046128ea565b610f53565b34801561053a57600080fd5b506103686105493660046128ea565b61108b565b34801561055a57600080fd5b506103686105693660046128ea565b6110a9565b34801561057a57600080fd5b506103aa6105893660046128ea565b6110c7565b34801561059a57600080fd5b506105a3611129565b60405161031d9493929190613325565b3480156105bf57600080fd5b506102f961114e565b3480156105d457600080fd5b506105a3611199565b3480156105e957600080fd5b506103686105f83660046128ea565b6111be565b34801561060957600080fd5b506102f9610618366004612acb565b6111d3565b34801561062957600080fd5b506103686106383660046128ea565b611253565b34801561064957600080fd5b506103aa611271565b34801561065e57600080fd5b50610310611277565b34801561067357600080fd5b506102f96106823660046128ea565b611286565b34801561069357600080fd5b506102f96112e7565b3480156106a857600080fd5b5061033b611337565b3480156106bd57600080fd5b506102f96106cc36600461299a565b611359565b3480156106dd57600080fd5b506106e66114a0565b60405161031d929190613309565b34801561070057600080fd5b5061036861070f3660046129ce565b6114a9565b34801561072057600080fd5b50610310611522565b34801561073557600080fd5b506103686107443660046129ce565b611531565b34801561075557600080fd5b506103aa611545565b34801561076a57600080fd5b506102f96107793660046129f9565b61154b565b34801561078a57600080fd5b506102f9610799366004612a77565b6116f6565b3480156107aa57600080fd5b5061031061177c565b3480156107bf57600080fd5b506103aa61178b565b3480156107d457600080fd5b506102f96107e336600461299a565b611791565b3480156107f457600080fd5b506103aa611873565b34801561080957600080fd5b506103aa611879565b34801561081e57600080fd5b506103aa61187f565b34801561083357600080fd5b506103aa610842366004612922565b611885565b34801561085357600080fd5b506102f9610862366004612b19565b6118b0565b34801561087357600080fd5b506102f96108823660046128ea565b61194f565b34801561089357600080fd5b506102f96108a23660046128ea565b6119af565b6108af611a20565b6001600160a01b03166108c0611277565b6001600160a01b0316146108ef5760405162461bcd60e51b81526004016108e6906130f5565b60405180910390fd5b6108fb6009600a6133ed565b61090590826134be565b60145550565b60125461010090046001600160a01b031681565b604080518082019091526008815267416c616464696e7560c01b602082015290565b600061095561094e611a20565b8484611a24565b5060015b92915050565b610967611a20565b6001600160a01b0316610978611277565b6001600160a01b03161461099e5760405162461bcd60e51b81526004016108e6906130f5565b6001600160a01b03811660009081526007602052604090205460ff16156109d75760405162461bcd60e51b81526004016108e69061302b565b6001600160a01b038116600090815260076020526040808220805460ff19169055517f3159dadbd8e2d720a851b412e3358e7e44bb11734c9bfd5715340e21798e8b2590610a26908490612b55565b60405180910390a250565b60095490565b6000610a44848484611ad8565b6001600160a01b038416600090815260036020526040812081610a65611a20565b6001600160a01b03166001600160a01b0316815260200190815260200160002054905082811015610aa85760405162461bcd60e51b81526004016108e6906130ad565b610abc85610ab4611a20565b858403611a24565b60019150505b9392505050565b610ad1611a20565b6001600160a01b0316610ae2611277565b6001600160a01b031614610b085760405162461bcd60e51b81526004016108e6906130f5565b61271081600954610b1991906134be565b610b239190613387565b600d8190556040517f4b39c36d20c57d220f61fd25c4349d4435cc03ef6c2a680942f15333c3c3e00191610b5691613290565b60405180910390a150565b6000600a54821115610b855760405162461bcd60e51b81526004016108e690612cfd565b6000610b8f611e19565b9050610b9b8184613387565b9150505b919050565b600990565b610bb1611a20565b6001600160a01b0316610bc2611277565b6001600160a01b031614610be85760405162461bcd60e51b81526004016108e6906130f5565b6001600160a01b03811660009081526005602052604090205460ff16610c205760405162461bcd60e51b81526004016108e690612f88565b60005b600854811015610d7a57816001600160a01b031660088281548110610c5857634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b03161415610d685760088054610c8390600190613506565b81548110610ca157634e487b7160e01b600052603260045260246000fd5b600091825260209091200154600880546001600160a01b039092169183908110610cdb57634e487b7160e01b600052603260045260246000fd5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600282526040808220829055600590925220805460ff191690556008805480610d4157634e487b7160e01b600052603160045260246000fd5b600082815260209020810160001990810180546001600160a01b0319169055019055610d7a565b80610d728161351d565b915050610c23565b5050565b6000610955610d8b611a20565b848460036000610d99611a20565b6001600160a01b03908116825260208083019390935260409182016000908120918b1681529252902054610dcd919061334a565b611a24565b60076020526000908152604090205460ff1681565b610def611a20565b6001600160a01b0316610e00611277565b6001600160a01b031614610e265760405162461bcd60e51b81526004016108e6906130f5565b6001600160a01b03166000908152600460205260409020805460ff19166001179055565b6000600954831115610e6e5760405162461bcd60e51b81526004016108e690613076565b81610e8a576000610e80846001611e3c565b5191506109599050565b6000610e97846001611e3c565b6020015191506109599050565b601354600160a01b900460ff1681565b610ebc611a20565b6001600160a01b0316610ecd611277565b6001600160a01b031614610ef35760405162461bcd60e51b81526004016108e6906130f5565b6015805460ff191660ff8581169190911761ff001916610100858316021762ff000019166201000091841691909102179055610f2f8183613362565b6015805460ff9290921663010000000263ff00000019909216919091179055505050565b610f5b611a20565b6001600160a01b0316610f6c611277565b6001600160a01b031614610f925760405162461bcd60e51b81526004016108e6906130f5565b6001600160a01b03811660009081526005602052604090205460ff1615610fcb5760405162461bcd60e51b81526004016108e690612ea2565b6001600160a01b03811660009081526001602052604090205415611025576001600160a01b03811660009081526001602052604090205461100b90610b61565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600560205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319169091179055565b6001600160a01b031660009081526004602052604090205460ff1690565b6001600160a01b031660009081526006602052604090205460ff1690565b6001600160a01b03811660009081526005602052604081205460ff161561110757506001600160a01b038116600090815260026020526040902054610b9f565b6001600160a01b03821660009081526001602052604090205461095990610b61565b60165460ff808216916101008104821691620100008204811691630100000090041684565b611156611a20565b6001600160a01b0316611167611277565b6001600160a01b03161461118d5760405162461bcd60e51b81526004016108e6906130f5565b6111976000611e7a565b565b60155460ff808216916101008104821691620100008204811691630100000090041684565b60116020526000908152604090205460ff1681565b6111db611a20565b6001600160a01b03166111ec611277565b6001600160a01b0316146112125760405162461bcd60e51b81526004016108e6906130f5565b6127108260095461122391906134be565b61122d9190613387565b600b55600954612710906112429083906134be565b61124c9190613387565b600c555050565b6001600160a01b031660009081526005602052604090205460ff1690565b600e5481565b6000546001600160a01b031690565b61128e611a20565b6001600160a01b031661129f611277565b6001600160a01b0316146112c55760405162461bcd60e51b81526004016108e6906130f5565b601080546001600160a01b0319166001600160a01b0392909216919091179055565b6112ef611a20565b6001600160a01b0316611300611277565b6001600160a01b0316146113265760405162461bcd60e51b81526004016108e6906130f5565b611197611332306110c7565b611eca565b604080518082019091526008815267414c414444494e5560c01b602082015290565b611361611a20565b6001600160a01b0316611372611277565b6001600160a01b0316146113985760405162461bcd60e51b81526004016108e6906130f5565b6001600160a01b03821660009081526011602052604090205460ff16151581151514156113d75760405162461bcd60e51b81526004016108e690612dcf565b6001600160a01b0382166000908152601160205260409020805460ff19168215801591909117909155611464576001600160a01b03821660009081526006602052604090819020805460ff1916600117905551811515907f4a8452f723db48bf05f301f94d62a2cf7a72976cde77d83e3646584858b8f4b29061145b908590612b55565b60405180910390a25b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b60185460195482565b600080600360006114b8611a20565b6001600160a01b03908116825260208083019390935260409182016000908120918816815292529020549050828110156115045760405162461bcd60e51b81526004016108e69061324b565b61151861150f611a20565b85858403611a24565b5060019392505050565b6010546001600160a01b031681565b600061095561153e611a20565b8484611ad8565b600d5481565b611553611a20565b6001600160a01b0316611564611277565b6001600160a01b03161461158a5760405162461bcd60e51b81526004016108e6906130f5565b60005b828110156116f057811515600660008686858181106115bc57634e487b7160e01b600052603260045260246000fd5b90506020020160208101906115d191906128ea565b6001600160a01b0316815260208101919091526040016000205460ff161515141561160e5760405162461bcd60e51b81526004016108e690612c45565b816006600086868581811061163357634e487b7160e01b600052603260045260246000fd5b905060200201602081019061164891906128ea565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790558115157f4a8452f723db48bf05f301f94d62a2cf7a72976cde77d83e3646584858b8f4b28585848181106116b457634e487b7160e01b600052603260045260246000fd5b90506020020160208101906116c991906128ea565b6040516116d69190612b55565b60405180910390a2806116e88161351d565b91505061158d565b50505050565b6116fe611a20565b6001600160a01b031661170f611277565b6001600160a01b0316146117355760405162461bcd60e51b81526004016108e6906130f5565b6013805460ff60a01b1916600160a01b831515021790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15990610b56908390612ba4565b6013546001600160a01b031681565b60145481565b611799611a20565b6001600160a01b03166117aa611277565b6001600160a01b0316146117d05760405162461bcd60e51b81526004016108e6906130f5565b6001600160a01b03821660009081526006602052604090205460ff161515811515141561180f5760405162461bcd60e51b81526004016108e690612ed9565b6001600160a01b03821660009081526006602052604090819020805460ff191683151590811790915590517f4a8452f723db48bf05f301f94d62a2cf7a72976cde77d83e3646584858b8f4b290611867908590612b55565b60405180910390a25050565b600c5481565b600b5481565b600f5481565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b6118b8611a20565b6001600160a01b03166118c9611277565b6001600160a01b0316146118ef5760405162461bcd60e51b81526004016108e6906130f5565b6016805460ff191660ff8581169190911761ff001916610100858316021762ff00001916620100009184169190910217905561192b8183613362565b6016805460ff9290921663010000000263ff00000019909216919091179055505050565b611957611a20565b6001600160a01b0316611968611277565b6001600160a01b03161461198e5760405162461bcd60e51b81526004016108e6906130f5565b6001600160a01b03166000908152600460205260409020805460ff19169055565b6119b7611a20565b6001600160a01b03166119c8611277565b6001600160a01b0316146119ee5760405162461bcd60e51b81526004016108e6906130f5565b6001600160a01b038116611a145760405162461bcd60e51b81526004016108e690612d47565b611a1d81611e7a565b50565b3390565b6001600160a01b038316611a4a5760405162461bcd60e51b81526004016108e690613207565b6001600160a01b038216611a705760405162461bcd60e51b81526004016108e690612d8d565b6001600160a01b0380841660008181526003602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590611acb908590613290565b60405180910390a3505050565b600e54158015611b0057506001600160a01b03821660009081526011602052604090205460ff165b15611b0a5743600e555b6001600160a01b038316611b305760405162461bcd60e51b81526004016108e6906131c2565b6001600160a01b038216611b565760405162461bcd60e51b81526004016108e690612c02565b6001600160a01b03831660009081526007602052604090205460ff1615611b8f5760405162461bcd60e51b81526004016108e690612ff6565b60008111611baf5760405162461bcd60e51b81526004016108e69061312a565b611bb8836110c7565b811115611bd75760405162461bcd60e51b81526004016108e690612cac565b6001600160a01b03831660009081526004602052604081205460ff1680611c1657506001600160a01b03831660009081526004602052604090205460ff165b1590508015611da6576001600160a01b03841660009081526011602052604090205460ff1615611d3157600f54600e54611c50919061334a565b431015611cb7576001600160a01b03831660009081526007602052604090819020805460ff1916600190811790915590517f3159dadbd8e2d720a851b412e3358e7e44bb11734c9bfd5715340e21798e8b2590611cae908690612b55565b60405180910390a25b6015546017805460ff80841660ff199092169190911761ff0019166101008085048316021762ff00001916620100008085048316021763ff000000191663010000009384900491909116909202919091179055600b54821115611d2c5760405162461bcd60e51b81526004016108e690612e6d565b611da6565b6016546017805460ff80841660ff199092169190911761ff0019166101008085048316021762ff00001916620100008085048316021763ff000000191663010000009384900491909116909202919091179055600c54821115611da65760405162461bcd60e51b81526004016108e690612e2c565b601454611db2306110c7565b10158015611dc3575060125460ff16155b8015611de857506001600160a01b03841660009081526011602052604090205460ff16155b8015611dfd5750601354600160a01b900460ff165b15611e0d57611e0d601454611eca565b6116f084848484611fb4565b6000806000611e266121e6565b9092509050611e358183613387565b9250505090565b611e4461288c565b611e4e83836123a4565b9050611e63818484611e5e611e19565b61242e565b606085015260408401526020830152815292915050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6012805460ff19166001179055601754600090611ef2906301000000900460ff1660026134dd565b60175460ff91821692506000918391611f13916201000090910416856134be565b611f1d9190613387565b90506000611f2b8285613506565b905047611f3782612499565b6000611f438247613506565b601754909150600090611f5f9062010000900460ff1687613506565b601754611f759062010000900460ff16846134be565b611f7f9190613387565b9050611f8b8582612668565b601054611fa1906001600160a01b031647612740565b50506012805460ff191690555050505050565b6000611fc08383611e3c565b6001600160a01b03861660009081526005602052604090205490915060ff1615612012576001600160a01b0385166000908152600260205260408120805485929061200c908490613506565b90915550505b6001600160a01b03841660009081526005602052604090205460ff16156120665760808101516001600160a01b0385166000908152600260205260408120805490919061206090849061334a565b90915550505b80516001600160a01b03861660009081526001602052604081208054909190612090908490613506565b90915550506020808201516001600160a01b03861660009081526001909252604082208054919290916120c490849061334a565b90915550508115612143576120e181604001518260a001516127e1565b6120f381606001518260c00151612816565b306001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360c0015160405161213a9190613290565b60405180910390a35b6001600160a01b03841660009081526006602052604090205460ff16806121745750600d54612171856110c7565b11155b6121905760405162461bcd60e51b81526004016108e690613173565b836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83608001516040516121d79190613290565b60405180910390a35050505050565b600a546009546000918291825b6008548110156123715782600160006008848154811061222357634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054118061229c575081600260006008848154811061227557634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156122b357600a54600954945094505050506123a0565b60016000600883815481106122d857634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b031683528201929092526040019020546123079084613506565b9250600260006008838154811061232e57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b0316835282019290925260400190205461235d9083613506565b9150806123698161351d565b9150506121f3565b50600954600a546123829190613387565b82101561239a57600a546009549350935050506123a0565b90925090505b9091565b6123ac61288c565b816123bd5760808101839052610959565b6017546064906123d09060ff16856134be565b6123da9190613387565b60a08201526017546064906123f9906301000000900460ff16856134be565b6124039190613387565b60c0820181905260a08201516124199085613506565b6124239190613506565b608082015292915050565b600080808061243d85886134be565b9350856124525750829150600090508061248e565b848860a0015161246291906134be565b9150848860c0015161247491906134be565b9050806124818386613506565b61248b9190613506565b92505b945094509450949050565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106124dc57634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b031681525050601260019054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561254a57600080fd5b505afa15801561255e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125829190612906565b816001815181106125a357634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201015260125483916125d091309161010090910416611885565b10156125f5576012546125f590309061010090046001600160a01b0316600019611a24565b60125460405163791ac94760e01b81526101009091046001600160a01b03169063791ac94790612632908590600090869030904290600401613299565b600060405180830381600087803b15801561264c57600080fd5b505af1158015612660573d6000803e3d6000fd5b505050505050565b60125461010090046001600160a01b031663f305d71982308560008061268c611277565b426040518863ffffffff1660e01b81526004016126ae96959493929190612b69565b6060604051808303818588803b1580156126c757600080fd5b505af11580156126db573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906127009190612aec565b5050507f38f8a0c92f4c5b0b6877f878cb4c0c8d348a47b76d716c8e78f425043df9515b8282604051612734929190613309565b60405180910390a15050565b804710156127605760405162461bcd60e51b81526004016108e690612fbf565b6000826001600160a01b03168260405161277990612b52565b60006040518083038185875af1925050503d80600081146127b6576040519150601f19603f3d011682016040523d82523d6000602084013e6127bb565b606091505b50509050806127dc5760405162461bcd60e51b81526004016108e690612f2b565b505050565b81600a60008282546127f39190613506565b90915550506018805482919060009061280d90849061334a565b90915550505050565b306000908152600160205260408120805484929061283590849061334a565b90915550503060009081526005602052604090205460ff161561287757306000908152600260205260408120805483929061287190849061334a565b90915550505b806018600101600082825461280d919061334a565b6040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b80358015158114610b9f57600080fd5b803560ff81168114610b9f57600080fd5b6000602082840312156128fb578081fd5b8135610ac28161354e565b600060208284031215612917578081fd5b8151610ac28161354e565b60008060408385031215612934578081fd5b823561293f8161354e565b9150602083013561294f8161354e565b809150509250929050565b60008060006060848603121561296e578081fd5b83356129798161354e565b925060208401356129898161354e565b929592945050506040919091013590565b600080604083850312156129ac578182fd5b82356129b78161354e565b91506129c5602084016128c9565b90509250929050565b600080604083850312156129e0578182fd5b82356129eb8161354e565b946020939093013593505050565b600080600060408486031215612a0d578283fd5b833567ffffffffffffffff80821115612a24578485fd5b818601915086601f830112612a37578485fd5b813581811115612a45578586fd5b8760208083028501011115612a58578586fd5b602092830195509350612a6e91860190506128c9565b90509250925092565b600060208284031215612a88578081fd5b610ac2826128c9565b600060208284031215612aa2578081fd5b5035919050565b60008060408385031215612abb578182fd5b823591506129c5602084016128c9565b60008060408385031215612add578182fd5b50508035926020909101359150565b600080600060608486031215612b00578283fd5b8351925060208401519150604084015190509250925092565b600080600060608486031215612b2d578283fd5b612b36846128d9565b9250612b44602085016128d9565b9150612a6e604085016128d9565b90565b6001600160a01b0391909116815260200190565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b901515815260200190565b6000602080835283518082850152825b81811015612bdb57858101830151858201604001528201612bbf565b81811115612bec5783604083870101525b50601f01601f1916929092016040019392505050565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60208082526041908201527f5f69734578636c7564656446726f6d4d617857616c6c657420616c726561647960408201527f2073657420746f20746861742076616c756520666f72206f6e652077616c6c656060820152601d60fa1b608082015260a00190565b60208082526031908201527f596f752061726520747279696e6720746f207472616e73666572206d6f7265206040820152707468616e20796f75722062616c616e636560781b606082015260800190565b6020808252602a908201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260408201526965666c656374696f6e7360b01b606082015260800190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b60208082526022908201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604082015261737360f01b606082015260800190565b60208082526038908201527f4175746f6d61746564206d61726b6574206d616b65722070616972206973206160408201527f6c72656164792073657420746f20746861742076616c75650000000000000000606082015260800190565b60208082526021908201527f616d6f756e74206d757374206265203c3d206d61785478416d6f756e7453656c6040820152601b60fa1b606082015260800190565b6020808252818101527f616d6f756e74206d757374206265203c3d206d61785478416d6f756e74427579604082015260600190565b6020808252601b908201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604082015260600190565b60208082526032908201527f5f69734578636c7564656446726f6d4d617857616c6c657420616c72656164796040820152712073657420746f20746861742076616c756560701b606082015260800190565b6020808252603a908201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260408201527f6563697069656e74206d61792068617665207265766572746564000000000000606082015260800190565b60208082526017908201527f4163636f756e74206973206e6f74206578636c75646564000000000000000000604082015260600190565b6020808252601d908201527f416464726573733a20696e73756666696369656e742062616c616e6365000000604082015260600190565b6020808252818101527f45524332303a206164647265737320626c61636b6c69737465642028626f7429604082015260600190565b6020808252602b908201527f616464726573732070726f766964656420697320616c7265616479206e6f742060408201526a189b1858dadb1a5cdd195960aa1b606082015260800190565b6020808252601f908201527f416d6f756e74206d757374206265206c657373207468616e20737570706c7900604082015260600190565b60208082526028908201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616040820152676c6c6f77616e636560c01b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526029908201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206040820152687468616e207a65726f60b81b606082015260800190565b6020808252602f908201527f526563697069656e742063616e6e6f7420686f6c64206d6f7265207468616e2060408201526e1b585e15d85b1b195d105b5bdd5b9d608a1b606082015260800190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526024908201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646040820152637265737360e01b606082015260800190565b60208082526025908201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604082015264207a65726f60d81b606082015260800190565b90815260200190565b600060a082018783526020878185015260a0604085015281875180845260c0860191508289019350845b818110156132e85784516001600160a01b0316835293830193918301916001016132c3565b50506001600160a01b03969096166060850152505050608001529392505050565b918252602082015260400190565b60ff91909116815260200190565b60ff948516815292841660208401529083166040830152909116606082015260800190565b6000821982111561335d5761335d613538565b500190565b600060ff821660ff84168060ff0382111561337f5761337f613538565b019392505050565b6000826133a257634e487b7160e01b81526012600452602481fd5b500490565b80825b60018086116133b957506133e4565b8187048211156133cb576133cb613538565b808616156133d857918102915b9490941c9380026133aa565b94509492505050565b6000610ac260001960ff85168460008261340957506001610ac2565b8161341657506000610ac2565b816001811461342c576002811461343657613463565b6001915050610ac2565b60ff84111561344757613447613538565b6001841b91508482111561345d5761345d613538565b50610ac2565b5060208310610133831016604e8410600b8410161715613496575081810a8381111561349157613491613538565b610ac2565b6134a384848460016133a7565b8086048211156134b5576134b5613538565b02949350505050565b60008160001904831182151516156134d8576134d8613538565b500290565b600060ff821660ff84168160ff04811182151516156134fe576134fe613538565b029392505050565b60008282101561351857613518613538565b500390565b600060001982141561353157613531613538565b5060010190565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b0381168114611a1d57600080fdfea2646970667358221220e4292862330b4f161c33c520f303ede3cf71a0e76206da5a46c8cb1e0457977264736f6c63430008000033
Deployed Bytecode Sourcemap
1038:19052:1:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18654:156;;;;;;;;;;-1:-1:-1;18654:156:1;;;;;:::i;:::-;;:::i;:::-;;2304:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4949:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;5880:161::-;;;;;;;;;;-1:-1:-1;5880:161:1;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;19300:242::-;;;;;;;;;;-1:-1:-1;19300:242:1;;;;;:::i;:::-;;:::i;5245:95::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;6049:450::-;;;;;;;;;;-1:-1:-1;6049:450:1;;;;;:::i;:::-;;:::i;19550:207::-;;;;;;;;;;-1:-1:-1;19550:207:1;;;;;:::i;:::-;;:::i;7743:248::-;;;;;;;;;;-1:-1:-1;7743:248:1;;;;;:::i;:::-;;:::i;5131:83::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;8408:475::-;;;;;;;;;;-1:-1:-1;8408:475:1;;;;;:::i;:::-;;:::i;6507:213::-;;;;;;;;;;-1:-1:-1;6507:213:1;;;;;:::i;:::-;;:::i;1491:38::-;;;;;;;;;;-1:-1:-1;1491:38:1;;;;;:::i;:::-;;:::i;8891:113::-;;;;;;;;;;-1:-1:-1;8891:113:1;;;;;:::i;:::-;;:::i;7277:456::-;;;;;;;;;;-1:-1:-1;7277:456:1;;;;;:::i;:::-;;:::i;2385:40::-;;;;;;;;;;;;;:::i;17904:231::-;;;;;;;;;;-1:-1:-1;17904:231:1;;;;;:::i;:::-;;:::i;8065:335::-;;;;;;;;;;-1:-1:-1;8065:335:1;;;;;:::i;:::-;;:::i;9594:123::-;;;;;;;;;;-1:-1:-1;9594:123:1;;;;;:::i;:::-;;:::i;9723:135::-;;;;;;;;;;-1:-1:-1;9723:135:1;;;;;:::i;:::-;;:::i;5348:198::-;;;;;;;;;;-1:-1:-1;5348:198:1;;;;;:::i;:::-;;:::i;2773:142::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;1650:94:7:-;;;;;;;;;;;;;:::i;2621:143:1:-;;;;;;;;;;;;;:::i;2096:59::-;;;;;;;;;;-1:-1:-1;2096:59:1;;;;;:::i;:::-;;:::i;18387:255::-;;;;;;;;;;-1:-1:-1;18387:255:1;;;;;:::i;:::-;;:::i;7149:120::-;;;;;;;;;;-1:-1:-1;7149:120:1;;;;;:::i;:::-;;:::i;1967:34::-;;;;;;;;;;;;;:::i;999:87:7:-;;;;;;;;;;;;;:::i;18818:143:1:-;;;;;;;;;;-1:-1:-1;18818:143:1;;;;;:::i;:::-;;:::i;18969:120::-;;;;;;;;;;;;;:::i;5038:87::-;;;;;;;;;;;;;:::i;17433:463::-;;;;;;;;;;-1:-1:-1;17433:463:1;;;;;:::i;:::-;;:::i;3064:36::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;6728:413::-;;;;;;;;;;-1:-1:-1;6728:413:1;;;;;:::i;:::-;;:::i;2048:39::-;;;;;;;;;;;;;:::i;5554:167::-;;;;;;;;;;-1:-1:-1;5554:167:1;;;;;:::i;:::-;;:::i;1890:44::-;;;;;;;;;;;;;:::i;9016:450::-;;;;;;;;;;-1:-1:-1;9016:450:1;;;;;:::i;:::-;;:::i;9866:167::-;;;;;;;;;;-1:-1:-1;9866:167:1;;;;;:::i;:::-;;:::i;2352:26::-;;;;;;;;;;;;;:::i;2432:58::-;;;;;;;;;;;;;:::i;19765:320::-;;;;;;;;;;-1:-1:-1;19765:320:1;;;;;:::i;:::-;;:::i;1838:44::-;;;;;;;;;;;;;:::i;1787:43::-;;;;;;;;;;;;;:::i;2008:31::-;;;;;;;;;;;;;:::i;5729:143::-;;;;;;;;;;-1:-1:-1;5729:143:1;;;;;:::i;:::-;;:::i;18143:236::-;;;;;;;;;;-1:-1:-1;18143:236:1;;;;;:::i;:::-;;:::i;9474:112::-;;;;;;;;;;-1:-1:-1;9474:112:1;;;;;:::i;:::-;;:::i;1899:192:7:-;;;;;;;;;;-1:-1:-1;1899:192:7;;;;;:::i;:::-;;:::i;18654:156:1:-;1230:12:7;:10;:12::i;:::-;-1:-1:-1;;;;;1219:23:7;:7;:5;:7::i;:::-;-1:-1:-1;;;;;1219:23:7;;1211:68;;;;-1:-1:-1;;;1211:68:7;;;;;;;:::i;:::-;;;;;;;;;18789:13:1::1;1609:1;18789:2;:13;:::i;:::-;18776:26;::::0;:12;:26:::1;:::i;:::-;18744:29;:58:::0;-1:-1:-1;18654:156:1:o;2304:41::-;;;;;;-1:-1:-1;;;;;2304:41:1;;:::o;4949:83::-;5019:5;;;;;;;;;;;;-1:-1:-1;;;5019:5:1;;;;4949:83;:::o;5880:161::-;5955:4;5972:39;5981:12;:10;:12::i;:::-;5995:7;6004:6;5972:8;:39::i;:::-;-1:-1:-1;6029:4:1;5880:161;;;;;:::o;19300:242::-;1230:12:7;:10;:12::i;:::-;-1:-1:-1;;;;;1219:23:7;:7;:5;:7::i;:::-;-1:-1:-1;;;;;1219:23:7;;1211:68;;;;-1:-1:-1;;;1211:68:7;;;;;;;:::i;:::-;-1:-1:-1;;;;;19384:17:1;::::1;;::::0;;;:5:::1;:17;::::0;;;;;::::1;;19383:18;19375:74;;;;-1:-1:-1::0;;;19375:74:1::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;19460:17:1;::::1;19480:5;19460:17:::0;;;:5:::1;:17;::::0;;;;;:25;;-1:-1:-1;;19460:25:1::1;::::0;;19501:33;::::1;::::0;::::1;::::0;19466:10;;19501:33:::1;:::i;:::-;;;;;;;;19300:242:::0;:::o;5245:95::-;5325:7;;5245:95;:::o;6049:450::-;6147:4;6164:36;6174:6;6182:9;6193:6;6164:9;:36::i;:::-;-1:-1:-1;;;;;6240:19:1;;6213:24;6240:19;;;:11;:19;;;;;6213:24;6260:12;:10;:12::i;:::-;-1:-1:-1;;;;;6240:33:1;-1:-1:-1;;;;;6240:33:1;;;;;;;;;;;;;6213:60;;6312:6;6292:16;:26;;6284:79;;;;-1:-1:-1;;;6284:79:1;;;;;;;:::i;:::-;6399:57;6408:6;6416:12;:10;:12::i;:::-;6449:6;6430:16;:25;6399:8;:57::i;:::-;6487:4;6480:11;;;6049:450;;;;;;:::o;19550:207::-;1230:12:7;:10;:12::i;:::-;-1:-1:-1;;;;;1219:23:7;:7;:5;:7::i;:::-;-1:-1:-1;;;;;1219:23:7;;1211:68;;;;-1:-1:-1;;;1211:68:7;;;;;;;:::i;:::-;19689:5:1::1;19666:22;19658:7;;:30;;;;:::i;:::-;:36;;;;:::i;:::-;19640:15;:54:::0;;;19710:39:::1;::::0;::::1;::::0;::::1;::::0;::::1;:::i;:::-;;;;;;;;19550:207:::0;:::o;7743:248::-;7809:7;7848;;7837;:18;;7829:73;;;;-1:-1:-1;;;7829:73:1;;;;;;;:::i;:::-;7913:19;7936:10;:8;:10::i;:::-;7913:33;-1:-1:-1;7964:19:1;7913:33;7964:7;:19;:::i;:::-;7957:26;;;7743:248;;;;:::o;5131:83::-;1609:1;5131:83;:::o;8408:475::-;1230:12:7;:10;:12::i;:::-;-1:-1:-1;;;;;1219:23:7;:7;:5;:7::i;:::-;-1:-1:-1;;;;;1219:23:7;;1211:68;;;;-1:-1:-1;;;1211:68:7;;;;;;;:::i;:::-;-1:-1:-1;;;;;8490:20:1;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;8482:56;;;;-1:-1:-1::0;;;8482:56:1::1;;;;;;;:::i;:::-;8554:9;8549:327;8573:9;:16:::0;8569:20;::::1;8549:327;;;8631:7;-1:-1:-1::0;;;;;8615:23:1::1;:9;8625:1;8615:12;;;;;;-1:-1:-1::0;;;8615:12:1::1;;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;8615:12:1::1;:23;8611:254;;;8674:9;8684:16:::0;;:20:::1;::::0;8703:1:::1;::::0;8684:20:::1;:::i;:::-;8674:31;;;;;;-1:-1:-1::0;;;8674:31:1::1;;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;8659:9:::1;:12:::0;;-1:-1:-1;;;;;8674:31:1;;::::1;::::0;8669:1;;8659:12;::::1;;;-1:-1:-1::0;;;8659:12:1::1;;;;;;;;;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;8659:46:1::1;-1:-1:-1::0;;;;;8659:46:1;;::::1;;::::0;;8724:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;8763:11:::1;:20:::0;;;;:28;;-1:-1:-1;;8763:28:1::1;::::0;;8810:9:::1;:15:::0;;;::::1;;-1:-1:-1::0;;;8810:15:1::1;;;;;;;;;;::::0;;;::::1;::::0;;;;-1:-1:-1;;8810:15:1;;;;;-1:-1:-1;;;;;;8810:15:1::1;::::0;;;;;8844:5:::1;;8611:254;8591:3:::0;::::1;::::0;::::1;:::i;:::-;;;;8549:327;;;;8408:475:::0;:::o;6507:213::-;6595:4;6612:78;6621:12;:10;:12::i;:::-;6635:7;6679:10;6644:11;:25;6656:12;:10;:12::i;:::-;-1:-1:-1;;;;;6644:25:1;;;;;;;;;;;;;;;;;-1:-1:-1;6644:25:1;;;:34;;;;;;;;;;:45;;;;:::i;:::-;6612:8;:78::i;1491:38::-;;;;;;;;;;;;;;;:::o;8891:113::-;1230:12:7;:10;:12::i;:::-;-1:-1:-1;;;;;1219:23:7;:7;:5;:7::i;:::-;-1:-1:-1;;;;;1219:23:7;;1211:68;;;;-1:-1:-1;;;1211:68:7;;;;;;;:::i;:::-;-1:-1:-1;;;;;8962:27:1::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;8962:34:1::1;8992:4;8962:34;::::0;;8891:113::o;7277:456::-;7367:7;7406;;7395;:18;;7387:62;;;;-1:-1:-1;;;7387:62:1;;;;;;;:::i;:::-;7465:17;7460:266;;7499:28;7530:25;7541:7;7550:4;7530:10;:25::i;:::-;7577:9;;-1:-1:-1;7570:16:1;;-1:-1:-1;7570:16:1;7460:266;7619:28;7650:25;7661:7;7670:4;7650:10;:25::i;:::-;7697:17;;;;-1:-1:-1;7690:24:1;;-1:-1:-1;7690:24:1;2385:40;;;-1:-1:-1;;;2385:40:1;;;;;:::o;17904:231::-;1230:12:7;:10;:12::i;:::-;-1:-1:-1;;;;;1219:23:7;:7;:5;:7::i;:::-;-1:-1:-1;;;;;1219:23:7;;1211:68;;;;-1:-1:-1;;;1211:68:7;;;;;;;:::i;:::-;17999:8:1::1;:17:::0;;-1:-1:-1;;17999:17:1::1;;::::0;;::::1;::::0;;;::::1;-1:-1:-1::0;;18024:29:1::1;17999:17;18024:29:::0;;::::1;;;-1:-1:-1::0;;18061:23:1::1;::::0;;;::::1;::::0;;;::::1;;::::0;;18109:18:::1;18061:23:::0;18024:29;18109:18:::1;:::i;:::-;18092:8;:35:::0;;::::1;::::0;;;::::1;::::0;::::1;-1:-1:-1::0;;18092:35:1;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;17904:231:1:o;8065:335::-;1230:12:7;:10;:12::i;:::-;-1:-1:-1;;;;;1219:23:7;:7;:5;:7::i;:::-;-1:-1:-1;;;;;1219:23:7;;1211:68;;;;-1:-1:-1;;;1211:68:7;;;;;;;:::i;:::-;-1:-1:-1;;;;;8150:20:1;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;8149:21;8141:61;;;;-1:-1:-1::0;;;8141:61:1::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;8216:16:1;::::1;8235:1;8216:16:::0;;;:7:::1;:16;::::0;;;;;:20;8213:108:::1;;-1:-1:-1::0;;;;;8292:16:1;::::1;;::::0;;;:7:::1;:16;::::0;;;;;8272:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;8253:16:1;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;8213:108:::1;-1:-1:-1::0;;;;;8331:20:1::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;8331:27:1::1;8354:4;8331:27:::0;;::::1;::::0;;;8369:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;8369:23:1::1;::::0;;::::1;::::0;;8065:335::o;9594:123::-;-1:-1:-1;;;;;9682:27:1;9658:4;9682:27;;;:18;:27;;;;;;;;;9594:123::o;9723:135::-;-1:-1:-1;;;;;9817:33:1;9793:4;9817:33;;;:24;:33;;;;;;;;;9723:135::o;5348:198::-;-1:-1:-1;;;;;5438:20:1;;5414:7;5438:20;;;:11;:20;;;;;;;;5434:49;;;-1:-1:-1;;;;;;5467:16:1;;;;;;:7;:16;;;;;;5460:23;;5434:49;-1:-1:-1;;;;;5521:16:1;;;;;;:7;:16;;;;;;5501:37;;:19;:37::i;2773:142::-;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1650:94:7:-;1230:12;:10;:12::i;:::-;-1:-1:-1;;;;;1219:23:7;:7;:5;:7::i;:::-;-1:-1:-1;;;;;1219:23:7;;1211:68;;;;-1:-1:-1;;;1211:68:7;;;;;;;:::i;:::-;1715:21:::1;1733:1;1715:9;:21::i;:::-;1650:94::o:0;2621:143:1:-;;;;;;;;;;;;;;;;;;;;;;;;;:::o;2096:59::-;;;;;;;;;;;;;;;:::o;18387:255::-;1230:12:7;:10;:12::i;:::-;-1:-1:-1;;;;;1219:23:7;:7;:5;:7::i;:::-;-1:-1:-1;;;;;1219:23:7;;1211:68;;;;-1:-1:-1;;;1211:68:7;;;;;;;:::i;:::-;18567:5:1::1;18545:21;18537:7;;:29;;;;:::i;:::-;:35;;;;:::i;:::-;18520:14;:52:::0;18598:7:::1;::::0;18629:5:::1;::::0;18598:30:::1;::::0;18606:22;;18598:30:::1;:::i;:::-;:36;;;;:::i;:::-;18580:15;:54:::0;-1:-1:-1;;18387:255:1:o;7149:120::-;-1:-1:-1;;;;;7241:20:1;7217:4;7241:20;;;:11;:20;;;;;;;;;7149:120::o;1967:34::-;;;;:::o;999:87:7:-;1045:7;1072:6;-1:-1:-1;;;;;1072:6:7;999:87;:::o;18818:143:1:-;1230:12:7;:10;:12::i;:::-;-1:-1:-1;;;;;1219:23:7;:7;:5;:7::i;:::-;-1:-1:-1;;;;;1219:23:7;;1211:68;;;;-1:-1:-1;;;1211:68:7;;;;;;;:::i;:::-;18917:16:1::1;:36:::0;;-1:-1:-1;;;;;;18917:36:1::1;-1:-1:-1::0;;;;;18917:36:1;;;::::1;::::0;;;::::1;::::0;;18818:143::o;18969:120::-;1230:12:7;:10;:12::i;:::-;-1:-1:-1;;;;;1219:23:7;:7;:5;:7::i;:::-;-1:-1:-1;;;;;1219:23:7;;1211:68;;;;-1:-1:-1;;;1211:68:7;;;;;;;:::i;:::-;19041:40:1::1;19056:24;19074:4;19056:9;:24::i;:::-;19041:14;:40::i;5038:87::-:0;5110:7;;;;;;;;;;;;-1:-1:-1;;;5110:7:1;;;;5038:87;:::o;17433:463::-;1230:12:7;:10;:12::i;:::-;-1:-1:-1;;;;;1219:23:7;:7;:5;:7::i;:::-;-1:-1:-1;;;;;1219:23:7;;1211:68;;;;-1:-1:-1;;;1211:68:7;;;;;;;:::i;:::-;-1:-1:-1;;;;;17534:33:1;::::1;;::::0;;;:26:::1;:33;::::0;;;;;::::1;;:42;;::::0;::::1;;;;17526:111;;;;-1:-1:-1::0;;;17526:111:1::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;17648:33:1;::::1;;::::0;;;:26:::1;:33;::::0;;;;:41;;-1:-1:-1;;17648:41:1::1;::::0;::::1;::::0;::::1;::::0;;;::::1;::::0;;;17700:132:::1;;-1:-1:-1::0;;;;;17730:31:1;::::1;;::::0;;;:24:::1;:31;::::0;;;;;;:38;;-1:-1:-1;;17730:38:1::1;17764:4;17730:38;::::0;;17784:34;;::::1;;::::0;::::1;::::0;::::1;::::0;17755:5;;17784:34:::1;:::i;:::-;;;;;;;;17700:132;17847:41;::::0;;::::1;;::::0;-1:-1:-1;;;;;17847:41:1;::::1;::::0;::::1;::::0;;;::::1;17433:463:::0;;:::o;3064:36::-;;;;;;:::o;6728:413::-;6821:4;6838:24;6865:11;:25;6877:12;:10;:12::i;:::-;-1:-1:-1;;;;;6865:25:1;;;;;;;;;;;;;;;;;-1:-1:-1;6865:25:1;;;:34;;;;;;;;;;;-1:-1:-1;6918:35:1;;;;6910:85;;;;-1:-1:-1;;;6910:85:1;;;;;;;:::i;:::-;7031:67;7040:12;:10;:12::i;:::-;7054:7;7082:15;7063:16;:34;7031:8;:67::i;:::-;-1:-1:-1;7129:4:1;;6728:413;-1:-1:-1;;;6728:413:1:o;2048:39::-;;;-1:-1:-1;;;;;2048:39:1;;:::o;5554:167::-;5632:4;5649:42;5659:12;:10;:12::i;:::-;5673:9;5684:6;5649:9;:42::i;1890:44::-;;;;:::o;9016:450::-;1230:12:7;:10;:12::i;:::-;-1:-1:-1;;;;;1219:23:7;:7;:5;:7::i;:::-;-1:-1:-1;;;;;1219:23:7;;1211:68;;;;-1:-1:-1;;;1211:68:7;;;;;;;:::i;:::-;9138:9:1::1;9134:325;9153:19:::0;;::::1;9134:325;;;9243:8;9202:49;;:24;:37;9227:8;;9236:1;9227:11;;;;;-1:-1:-1::0;;;9227:11:1::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;9202:37:1::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;9202:37:1;;::::1;;:49;;;;9194:127;;;;-1:-1:-1::0;;;9194:127:1::1;;;;;;;:::i;:::-;9376:8;9336:24;:37;9361:8;;9370:1;9361:11;;;;;-1:-1:-1::0;;;9361:11:1::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;9336:37:1::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;9336:37:1;:48;;-1:-1:-1;;9336:48:1::1;::::0;::::1;;::::0;;;::::1;::::0;;9404:43;::::1;;;9425:8:::0;;9434:1;9425:11;;::::1;;;-1:-1:-1::0;;;9425:11:1::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9404:43;;;;;;:::i;:::-;;;;;;;;9174:3:::0;::::1;::::0;::::1;:::i;:::-;;;;9134:325;;;;9016:450:::0;;;:::o;9866:167::-;1230:12:7;:10;:12::i;:::-;-1:-1:-1;;;;;1219:23:7;:7;:5;:7::i;:::-;-1:-1:-1;;;;;1219:23:7;;1211:68;;;;-1:-1:-1;;;1211:68:7;;;;;;;:::i;:::-;9941:21:1::1;:32:::0;;-1:-1:-1;;;;9941:32:1::1;-1:-1:-1::0;;;9941:32:1;::::1;;;;::::0;;9987:38:::1;::::0;::::1;::::0;::::1;::::0;9941:32;;9987:38:::1;:::i;2352:26::-:0;;;-1:-1:-1;;;;;2352:26:1;;:::o;2432:58::-;;;;:::o;19765:320::-;1230:12:7;:10;:12::i;:::-;-1:-1:-1;;;;;1219:23:7;:7;:5;:7::i;:::-;-1:-1:-1;;;;;1219:23:7;;1211:68;;;;-1:-1:-1;;;1211:68:7;;;;;;;:::i;:::-;-1:-1:-1;;;;;19865:33:1;::::1;;::::0;;;:24:::1;:33;::::0;;;;;::::1;;:45;;::::0;::::1;;;;19857:108;;;;-1:-1:-1::0;;;19857:108:1::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;19976:33:1;::::1;;::::0;;;:24:::1;:33;::::0;;;;;;:44;;-1:-1:-1;;19976:44:1::1;::::0;::::1;;::::0;;::::1;::::0;;;20038:39;;::::1;::::0;::::1;::::0;19976:33;;20038:39:::1;:::i;:::-;;;;;;;;19765:320:::0;;:::o;1838:44::-;;;;:::o;1787:43::-;;;;:::o;2008:31::-;;;;:::o;5729:143::-;-1:-1:-1;;;;;5837:18:1;;;5810:7;5837:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;5729:143::o;18143:236::-;1230:12:7;:10;:12::i;:::-;-1:-1:-1;;;;;1219:23:7;:7;:5;:7::i;:::-;-1:-1:-1;;;;;1219:23:7;;1211:68;;;;-1:-1:-1;;;1211:68:7;;;;;;;:::i;:::-;18239:9:1::1;:18:::0;;-1:-1:-1;;18239:18:1::1;;::::0;;::::1;::::0;;;::::1;-1:-1:-1::0;;18265:30:1::1;18239:18;18265:30:::0;;::::1;;;-1:-1:-1::0;;18303:24:1::1;::::0;;;::::1;::::0;;;::::1;;::::0;;18353:18:::1;18303:24:::0;18265:30;18353:18:::1;:::i;:::-;18335:9;:36:::0;;::::1;::::0;;;::::1;::::0;::::1;-1:-1:-1::0;;18335:36:1;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;18143:236:1:o;9474:112::-;1230:12:7;:10;:12::i;:::-;-1:-1:-1;;;;;1219:23:7;:7;:5;:7::i;:::-;-1:-1:-1;;;;;1219:23:7;;1211:68;;;;-1:-1:-1;;;1211:68:7;;;;;;;:::i;:::-;-1:-1:-1;;;;;9543:27:1::1;9573:5;9543:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;9543:35:1::1;::::0;;9474:112::o;1899:192:7:-;1230:12;:10;:12::i;:::-;-1:-1:-1;;;;;1219:23:7;:7;:5;:7::i;:::-;-1:-1:-1;;;;;1219:23:7;;1211:68;;;;-1:-1:-1;;;1211:68:7;;;;;;;:::i;:::-;-1:-1:-1;;;;;1988:22:7;::::1;1980:73;;;;-1:-1:-1::0;;;1980:73:7::1;;;;;;;:::i;:::-;2064:19;2074:8;2064:9;:19::i;:::-;1899:192:::0;:::o;601:98:2:-;681:10;601:98;:::o;12496:335:1:-;-1:-1:-1;;;;;12589:19:1;;12581:68;;;;-1:-1:-1;;;12581:68:1;;;;;;;:::i;:::-;-1:-1:-1;;;;;12668:21:1;;12660:68;;;;-1:-1:-1;;;12660:68:1;;;;;;;:::i;:::-;-1:-1:-1;;;;;12739:18:1;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;;:36;;;12791:32;;;;;12769:6;;12791:32;:::i;:::-;;;;;;;;12496:335;;;:::o;12839:1618::-;12922:19;;:22;:56;;;;-1:-1:-1;;;;;;12948:30:1;;;;;;:26;:30;;;;;;;;12922:56;12919:118;;;13013:12;12991:19;:34;12919:118;-1:-1:-1;;;;;13057:18:1;;13049:68;;;;-1:-1:-1;;;13049:68:1;;;;;;;:::i;:::-;-1:-1:-1;;;;;13136:16:1;;13128:64;;;;-1:-1:-1;;;13128:64:1;;;;;;;:::i;:::-;-1:-1:-1;;;;;13212:11:1;;;;;;:5;:11;;;;;;;;13211:12;13203:57;;;;-1:-1:-1;;;13203:57:1;;;;;;;:::i;:::-;13288:1;13279:6;:10;13271:64;;;;-1:-1:-1;;;13271:64:1;;;;;;;:::i;:::-;13364:15;13374:4;13364:9;:15::i;:::-;13354:6;:25;;13346:86;;;;-1:-1:-1;;;13346:86:1;;;;;;;:::i;:::-;-1:-1:-1;;;;;13460:24:1;;13443:12;13460:24;;;:18;:24;;;;;;;;;:50;;-1:-1:-1;;;;;;13488:22:1;;;;;;:18;:22;;;;;;;;13460:50;13458:53;13443:68;;13527:7;13524:612;;;-1:-1:-1;;;;;13565:32:1;;;;;;:26;:32;;;;;;;;13562:563;;;13667:12;;13647:19;;:32;;;;:::i;:::-;13634:12;:45;13631:170;;;-1:-1:-1;;;;;13717:9:1;;;;;;:5;:9;;;;;;;:16;;-1:-1:-1;;13717:16:1;13729:4;13717:16;;;;;;13757:24;;;;;;13723:2;;13757:24;:::i;:::-;;;;;;;;13631:170;13836:8;13821:23;:12;:23;;;;;;-1:-1:-1;;13821:23:1;;;;;;;-1:-1:-1;;13821:23:1;;;;;;;;;-1:-1:-1;;13821:23:1;;;;;;;;;-1:-1:-1;;13821:23:1;;;;;;;;;;;;;;;;;;;13879:14;;13871:22;;;13863:67;;;;-1:-1:-1;;;13863:67:1;;;;;;;:::i;:::-;13562:563;;;14012:9;13997:24;:12;:24;;;;;;-1:-1:-1;;13997:24:1;;;;;;;-1:-1:-1;;13997:24:1;;;;;;;;;-1:-1:-1;;13997:24:1;;;;;;;;;-1:-1:-1;;13997:24:1;;;;;;;;;;;;;;;;;;;14056:15;;14048:23;;;14040:69;;;;-1:-1:-1;;;14040:69:1;;;;;;;:::i;:::-;14180:29;;14152:24;14170:4;14152:9;:24::i;:::-;:57;;:79;;;;-1:-1:-1;14215:16:1;;;;14214:17;14152:79;:116;;;;-1:-1:-1;;;;;;14236:32:1;;;;;;:26;:32;;;;;;;;14235:33;14152:116;:141;;;;-1:-1:-1;14272:21:1;;-1:-1:-1;;;14272:21:1;;;;14152:141;14148:248;;;14339:45;14354:29;;14339:14;:45::i;:::-;14408:41;14423:4;14429:2;14433:6;14441:7;14408:14;:41::i;11796:158::-;11837:7;11858:15;11875;11894:19;:17;:19::i;:::-;11857:56;;-1:-1:-1;11857:56:1;-1:-1:-1;11931:15:1;11857:56;;11931:15;:::i;:::-;11924:22;;;;11796:158;:::o;10529:345::-;10602:36;;:::i;:::-;10663:29;10675:7;10684;10663:11;:29::i;:::-;10651:41;;10787:52;10799:9;10810:7;10819;10828:10;:8;:10::i;:::-;10787:11;:52::i;:::-;10766:17;;;10703:136;10750:14;;;10703:136;10723:25;;;10703:136;;;10529:345;;;;:::o;2099:173:7:-;2155:16;2174:6;;-1:-1:-1;;;;;2191:17:7;;;-1:-1:-1;;;;;;2191:17:7;;;;;;2224:40;;2174:6;;;;;;;2224:40;;2155:16;2224:40;2099:173;;:::o;15418:876:1:-;3858:16;:23;;-1:-1:-1;;3858:23:1;3877:4;3858:23;;;15527:12:::1;:19:::0;3858:16;;15527:21:::1;::::0;:19;;::::1;3858:23:::0;15527:19:::1;15547:1;15527:21;:::i;:::-;15615:12;:19:::0;15505:43:::1;::::0;;::::1;::::0;-1:-1:-1;15559:32:1::1;::::0;15505:43;;15594:40:::1;::::0;15615:19;;;::::1;;15594:20:::0;:40:::1;:::i;:::-;:52;;;;:::i;:::-;15559:87:::0;-1:-1:-1;15657:14:1::1;15674:45;15559:87:::0;15674:20;:45:::1;:::i;:::-;15657:62:::0;-1:-1:-1;15757:21:1::1;15823:24;15657:62:::0;15823:16:::1;:24::i;:::-;15860:20;15883:37;15906:14:::0;15883:21:::1;:37;:::i;:::-;16011:12;:19:::0;15860:60;;-1:-1:-1;15931:29:1::1;::::0;15998:32:::1;::::0;16011:19;;::::1;;;15998:11:::0;:32:::1;:::i;:::-;15976:12;:19:::0;15963:32:::1;::::0;15976:19;;::::1;;;15963:12:::0;:32:::1;:::i;:::-;:68;;;;:::i;:::-;15931:100;;16090:61;16103:24;16129:21;16090:12;:61::i;:::-;16172:16;::::0;:49:::1;::::0;-1:-1:-1;;;;;16172:16:1::1;16199:21;16172:26;:49::i;:::-;-1:-1:-1::0;;3904:16:1;:24;;-1:-1:-1;;3904:24:1;;;-1:-1:-1;;;;;15418:876:1:o;14538:872::-;14657:28;14688;14699:7;14708;14688:10;:28::i;:::-;-1:-1:-1;;;;;14733:19:1;;;;;;:11;:19;;;;;;14657:59;;-1:-1:-1;14733:19:1;;14729:82;;;-1:-1:-1;;;;;14773:15:1;;;;;;:7;:15;;;;;:26;;14792:7;;14773:15;:26;;14792:7;;14773:26;:::i;:::-;;;;-1:-1:-1;;14729:82:1;-1:-1:-1;;;;;14826:22:1;;;;;;:11;:22;;;;;;;;14822:98;;;14891:17;;;;-1:-1:-1;;;;;14869:18:1;;;;;;:7;:18;;;;;:39;;:18;;;:39;;14891:17;;14869:39;:::i;:::-;;;;-1:-1:-1;;14822:98:1;14951:9;;-1:-1:-1;;;;;14932:15:1;;14951:9;14932:15;;;:7;:15;;;;;:28;;:15;;14951:9;14932:28;;14951:9;;14932:28;:::i;:::-;;;;-1:-1:-1;;14993:17:1;;;;;-1:-1:-1;;;;;14971:18:1;;;;;;:7;:18;;;;;;:39;;14993:17;;14971:18;;:39;;14993:17;;14971:39;:::i;:::-;;;;-1:-1:-1;;15021:172:1;;;;15053:27;15065:1;:6;;;15073:1;:6;;;15053:11;:27::i;:::-;15091:32;15103:1;:9;;;15113:1;:9;;;15091:11;:32::i;:::-;15164:4;-1:-1:-1;;;;;15139:42:1;15148:6;-1:-1:-1;;;;;15139:42:1;;15171:1;:9;;;15139:42;;;;;;:::i;:::-;;;;;;;;15021:172;-1:-1:-1;;;;;15211:35:1;;;;;;:24;:35;;;;;;;;;:77;;;15273:15;;15250:20;15260:9;15250;:20::i;:::-;:38;;15211:77;15203:137;;;;-1:-1:-1;;;15203:137:1;;;;;;;:::i;:::-;15373:9;-1:-1:-1;;;;;15356:46:1;15365:6;-1:-1:-1;;;;;15356:46:1;;15384:1;:17;;;15356:46;;;;;;:::i;:::-;;;;;;;;14538:872;;;;;:::o;11962:524::-;12059:7;;12095;;12012;;;;;12113:263;12137:9;:16;12133:20;;12113:263;;;12203:7;12179;:21;12187:9;12197:1;12187:12;;;;;;-1:-1:-1;;;12187:12:1;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;12187:12:1;12179:21;;;;;;;;;;;;;:31;;:66;;;12238:7;12214;:21;12222:9;12232:1;12222:12;;;;;;-1:-1:-1;;;12222:12:1;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;12222:12:1;12214:21;;;;;;;;;;;;;:31;12179:66;12175:97;;;12255:7;;12264;;12247:25;;;;;;;;;12175:97;12297:7;:21;12305:9;12315:1;12305:12;;;;;;-1:-1:-1;;;12305:12:1;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;12305:12:1;12297:21;;;;;;;;;;;;;12287:31;;;;:::i;:::-;;;12343:7;:21;12351:9;12361:1;12351:12;;;;;;-1:-1:-1;;;12351:12:1;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;12351:12:1;12343:21;;;;;;;;;;;;;12333:31;;;;:::i;:::-;;-1:-1:-1;12155:3:1;;;;:::i;:::-;;;;12113:263;;;;12408:7;;12400;;:15;;;;:::i;:::-;12390:7;:25;12386:56;;;12425:7;;12434;;12417:25;;;;;;;;12386:56;12461:7;;-1:-1:-1;12470:7:1;-1:-1:-1;11962:524:1;;;:::o;10882:386::-;10956:28;;:::i;:::-;11003:7;10999:86;;11025:17;;;:27;;;11065:8;;10999:86;11112:12;:16;11129:3;;11104:24;;11112:16;;11104:7;:24;:::i;:::-;:28;;;;:::i;:::-;11095:6;;;:37;11163:12;:19;11183:3;;11155:27;;11163:19;;;;;11155:7;:27;:::i;:::-;:31;;;;:::i;:::-;11143:9;;;:43;;;11225:6;;;;11217:14;;:7;:14;:::i;:::-;:24;;;;:::i;:::-;11197:17;;;:44;10882:386;;;;:::o;11276:512::-;11401:15;;;;11495:19;11503:11;11495:7;:19;:::i;:::-;11485:29;;11531:7;11527:66;;-1:-1:-1;11560:7:1;;-1:-1:-1;11577:1:1;;-1:-1:-1;11577:1:1;11553:28;;11527:66;11619:11;11612:1;:6;;;:18;;;;:::i;:::-;11605:25;;11661:11;11651:1;:9;;;:21;;;;:::i;:::-;11641:31;-1:-1:-1;11641:31:1;11702:12;11710:4;11702:7;:12;:::i;:::-;:20;;;;:::i;:::-;11683:39;;11276:512;;;;;;;;;;:::o;16302:688::-;16458:16;;;16472:1;16458:16;;;;;;;;16434:21;;16458:16;;;;;;;;;;-1:-1:-1;16458:16:1;16434:40;;16503:4;16485;16490:1;16485:7;;;;;;-1:-1:-1;;;16485:7:1;;;;;;;;;;;;;;:23;-1:-1:-1;;;;;16485:23:1;;;-1:-1:-1;;;;;16485:23:1;;;;;16529:15;;;;;;;;;-1:-1:-1;;;;;16529:15:1;-1:-1:-1;;;;;16529:20:1;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16519:4;16524:1;16519:7;;;;;;-1:-1:-1;;;16519:7:1;;;;;;;;;-1:-1:-1;;;;;16519:32:1;;;:7;;;;;;;;;:32;16600:15;;16620:11;;16567:50;;16585:4;;16600:15;;;;;16567:9;:50::i;:::-;:64;16564:156;;;16678:15;;16646:62;;16663:4;;16678:15;;;-1:-1:-1;;;;;16678:15:1;-1:-1:-1;;16646:8:1;:62::i;:::-;16758:15;;:224;;-1:-1:-1;;;16758:224:1;;:15;;;;-1:-1:-1;;;;;16758:15:1;;:66;;:224;;16839:11;;16865:1;;16909:4;;16936;;16956:15;;16758:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16302:688;;:::o;16998:427::-;17111:15;;;;;-1:-1:-1;;;;;17111:15:1;:31;17150:9;17183:4;17203:11;17229:1;;17315:7;:5;:7::i;:::-;17337:15;17111:252;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;17379:38;17394:11;17407:9;17379:38;;;;;;;:::i;:::-;;;;;;;;16998:427;;:::o;2065:317:0:-;2180:6;2155:21;:31;;2147:73;;;;-1:-1:-1;;;2147:73:0;;;;;;;:::i;:::-;2234:12;2252:9;-1:-1:-1;;;;;2252:14:0;2274:6;2252:33;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2233:52;;;2304:7;2296:78;;;;-1:-1:-1;;;2296:78:0;;;;;;;:::i;:::-;2065:317;;;:::o;10139:125:1:-;10218:4;10207:7;;:15;;;;;;;:::i;:::-;;;;-1:-1:-1;;10233:11:1;:23;;10252:4;;10233:11;:15;;:23;;10252:4;;10233:23;:::i;:::-;;;;-1:-1:-1;;;;10139:125:1:o;10272:249::-;10361:4;10345:22;;;;:7;:22;;;;;:32;;10370:7;;10345:22;:32;;10370:7;;10345:32;:::i;:::-;;;;-1:-1:-1;;10411:4:1;10391:26;;;;:11;:26;;;;;;;;10388:77;;;10448:4;10432:22;;;;:7;:22;;;;;:33;;10458:7;;10432:22;:33;;10458:7;;10432:33;:::i;:::-;;;;-1:-1:-1;;10388:77:1;10496:7;10476:11;:18;;;:27;;;;;;;:::i;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;14:162:8:-;81:20;;137:13;;130:21;120:32;;110:2;;166:1;163;156:12;181:158;249:20;;309:4;298:16;;288:27;;278:2;;329:1;326;319:12;344:259;;456:2;444:9;435:7;431:23;427:32;424:2;;;477:6;469;462:22;424:2;521:9;508:23;540:33;567:5;540:33;:::i;608:263::-;;731:2;719:9;710:7;706:23;702:32;699:2;;;752:6;744;737:22;699:2;789:9;783:16;808:33;835:5;808:33;:::i;1148:402::-;;;1277:2;1265:9;1256:7;1252:23;1248:32;1245:2;;;1298:6;1290;1283:22;1245:2;1342:9;1329:23;1361:33;1388:5;1361:33;:::i;:::-;1413:5;-1:-1:-1;1470:2:8;1455:18;;1442:32;1483:35;1442:32;1483:35;:::i;:::-;1537:7;1527:17;;;1235:315;;;;;:::o;1555:470::-;;;;1701:2;1689:9;1680:7;1676:23;1672:32;1669:2;;;1722:6;1714;1707:22;1669:2;1766:9;1753:23;1785:33;1812:5;1785:33;:::i;:::-;1837:5;-1:-1:-1;1894:2:8;1879:18;;1866:32;1907:35;1866:32;1907:35;:::i;:::-;1659:366;;1961:7;;-1:-1:-1;;;2015:2:8;2000:18;;;;1987:32;;1659:366::o;2030:329::-;;;2156:2;2144:9;2135:7;2131:23;2127:32;2124:2;;;2177:6;2169;2162:22;2124:2;2221:9;2208:23;2240:33;2267:5;2240:33;:::i;:::-;2292:5;-1:-1:-1;2316:37:8;2349:2;2334:18;;2316:37;:::i;:::-;2306:47;;2114:245;;;;;:::o;2364:327::-;;;2493:2;2481:9;2472:7;2468:23;2464:32;2461:2;;;2514:6;2506;2499:22;2461:2;2558:9;2545:23;2577:33;2604:5;2577:33;:::i;:::-;2629:5;2681:2;2666:18;;;;2653:32;;-1:-1:-1;;;2451:240:8:o;2696:744::-;;;;2857:2;2845:9;2836:7;2832:23;2828:32;2825:2;;;2878:6;2870;2863:22;2825:2;2923:9;2910:23;2952:18;2993:2;2985:6;2982:14;2979:2;;;3014:6;3006;2999:22;2979:2;3057:6;3046:9;3042:22;3032:32;;3102:7;3095:4;3091:2;3087:13;3083:27;3073:2;;3129:6;3121;3114:22;3073:2;3174;3161:16;3200:2;3192:6;3189:14;3186:2;;;3221:6;3213;3206:22;3186:2;3284:7;3277:4;3269;3261:6;3257:17;3253:2;3249:26;3245:37;3242:50;3239:2;;;3310:6;3302;3295:22;3239:2;3346:4;3338:13;;;;-1:-1:-1;3370:6:8;-1:-1:-1;3395:39:8;;3413:20;;;-1:-1:-1;3395:39:8;:::i;:::-;3385:49;;2815:625;;;;;:::o;3445:192::-;;3554:2;3542:9;3533:7;3529:23;3525:32;3522:2;;;3575:6;3567;3560:22;3522:2;3603:28;3621:9;3603:28;:::i;3642:190::-;;3754:2;3742:9;3733:7;3729:23;3725:32;3722:2;;;3775:6;3767;3760:22;3722:2;-1:-1:-1;3803:23:8;;3712:120;-1:-1:-1;3712:120:8:o;3837:260::-;;;3963:2;3951:9;3942:7;3938:23;3934:32;3931:2;;;3984:6;3976;3969:22;3931:2;4025:9;4012:23;4002:33;;4054:37;4087:2;4076:9;4072:18;4054:37;:::i;4102:258::-;;;4231:2;4219:9;4210:7;4206:23;4202:32;4199:2;;;4252:6;4244;4237:22;4199:2;-1:-1:-1;;4280:23:8;;;4350:2;4335:18;;;4322:32;;-1:-1:-1;4189:171:8:o;4365:316::-;;;;4522:2;4510:9;4501:7;4497:23;4493:32;4490:2;;;4543:6;4535;4528:22;4490:2;4577:9;4571:16;4561:26;;4627:2;4616:9;4612:18;4606:25;4596:35;;4671:2;4660:9;4656:18;4650:25;4640:35;;4480:201;;;;;:::o;4686:338::-;;;;4826:2;4814:9;4805:7;4801:23;4797:32;4794:2;;;4847:6;4839;4832:22;4794:2;4875:29;4894:9;4875:29;:::i;:::-;4865:39;;4923:38;4957:2;4946:9;4942:18;4923:38;:::i;:::-;4913:48;;4980:38;5014:2;5003:9;4999:18;4980:38;:::i;5029:205::-;5229:3;5220:14::o;5239:203::-;-1:-1:-1;;;;;5403:32:8;;;;5385:51;;5373:2;5358:18;;5340:102::o;5671:607::-;-1:-1:-1;;;;;6030:15:8;;;6012:34;;6077:2;6062:18;;6055:34;;;;6120:2;6105:18;;6098:34;;;;6163:2;6148:18;;6141:34;;;;6212:15;;;6206:3;6191:19;;6184:44;5992:3;6244:19;;6237:35;;;;5961:3;5946:19;;5928:350::o;6283:187::-;6448:14;;6441:22;6423:41;;6411:2;6396:18;;6378:92::o;6710:603::-;;6851:2;6880;6869:9;6862:21;6912:6;6906:13;6955:6;6950:2;6939:9;6935:18;6928:34;6980:4;6993:140;7007:6;7004:1;7001:13;6993:140;;;7102:14;;;7098:23;;7092:30;7068:17;;;7087:2;7064:26;7057:66;7022:10;;6993:140;;;7151:6;7148:1;7145:13;7142:2;;;7221:4;7216:2;7207:6;7196:9;7192:22;7188:31;7181:45;7142:2;-1:-1:-1;7297:2:8;7276:15;-1:-1:-1;;7272:29:8;7257:45;;;;7304:2;7253:54;;6831:482;-1:-1:-1;;;6831:482:8:o;7318:399::-;7520:2;7502:21;;;7559:2;7539:18;;;7532:30;7598:34;7593:2;7578:18;;7571:62;-1:-1:-1;;;7664:2:8;7649:18;;7642:33;7707:3;7692:19;;7492:225::o;7722:469::-;7924:2;7906:21;;;7963:2;7943:18;;;7936:30;8002:34;7997:2;7982:18;;7975:62;8073:34;8068:2;8053:18;;8046:62;-1:-1:-1;;;8139:3:8;8124:19;;8117:32;8181:3;8166:19;;7896:295::o;8196:413::-;8398:2;8380:21;;;8437:2;8417:18;;;8410:30;8476:34;8471:2;8456:18;;8449:62;-1:-1:-1;;;8542:2:8;8527:18;;8520:47;8599:3;8584:19;;8370:239::o;8614:406::-;8816:2;8798:21;;;8855:2;8835:18;;;8828:30;8894:34;8889:2;8874:18;;8867:62;-1:-1:-1;;;8960:2:8;8945:18;;8938:40;9010:3;8995:19;;8788:232::o;9025:402::-;9227:2;9209:21;;;9266:2;9246:18;;;9239:30;9305:34;9300:2;9285:18;;9278:62;-1:-1:-1;;;9371:2:8;9356:18;;9349:36;9417:3;9402:19;;9199:228::o;9432:398::-;9634:2;9616:21;;;9673:2;9653:18;;;9646:30;9712:34;9707:2;9692:18;;9685:62;-1:-1:-1;;;9778:2:8;9763:18;;9756:32;9820:3;9805:19;;9606:224::o;9835:420::-;10037:2;10019:21;;;10076:2;10056:18;;;10049:30;10115:34;10110:2;10095:18;;10088:62;10186:26;10181:2;10166:18;;10159:54;10245:3;10230:19;;10009:246::o;10260:397::-;10462:2;10444:21;;;10501:2;10481:18;;;10474:30;10540:34;10535:2;10520:18;;10513:62;-1:-1:-1;;;10606:2:8;10591:18;;10584:31;10647:3;10632:19;;10434:223::o;10662:356::-;10864:2;10846:21;;;10883:18;;;10876:30;10942:34;10937:2;10922:18;;10915:62;11009:2;10994:18;;10836:182::o;11023:351::-;11225:2;11207:21;;;11264:2;11244:18;;;11237:30;11303:29;11298:2;11283:18;;11276:57;11365:2;11350:18;;11197:177::o;11379:414::-;11581:2;11563:21;;;11620:2;11600:18;;;11593:30;11659:34;11654:2;11639:18;;11632:62;-1:-1:-1;;;11725:2:8;11710:18;;11703:48;11783:3;11768:19;;11553:240::o;11798:422::-;12000:2;11982:21;;;12039:2;12019:18;;;12012:30;12078:34;12073:2;12058:18;;12051:62;12149:28;12144:2;12129:18;;12122:56;12210:3;12195:19;;11972:248::o;12225:347::-;12427:2;12409:21;;;12466:2;12446:18;;;12439:30;12505:25;12500:2;12485:18;;12478:53;12563:2;12548:18;;12399:173::o;12577:353::-;12779:2;12761:21;;;12818:2;12798:18;;;12791:30;12857:31;12852:2;12837:18;;12830:59;12921:2;12906:18;;12751:179::o;12935:356::-;13137:2;13119:21;;;13156:18;;;13149:30;13215:34;13210:2;13195:18;;13188:62;13282:2;13267:18;;13109:182::o;13296:407::-;13498:2;13480:21;;;13537:2;13517:18;;;13510:30;13576:34;13571:2;13556:18;;13549:62;-1:-1:-1;;;13642:2:8;13627:18;;13620:41;13693:3;13678:19;;13470:233::o;13708:355::-;13910:2;13892:21;;;13949:2;13929:18;;;13922:30;13988:33;13983:2;13968:18;;13961:61;14054:2;14039:18;;13882:181::o;14068:404::-;14270:2;14252:21;;;14309:2;14289:18;;;14282:30;14348:34;14343:2;14328:18;;14321:62;-1:-1:-1;;;14414:2:8;14399:18;;14392:38;14462:3;14447:19;;14242:230::o;14477:356::-;14679:2;14661:21;;;14698:18;;;14691:30;14757:34;14752:2;14737:18;;14730:62;14824:2;14809:18;;14651:182::o;14838:405::-;15040:2;15022:21;;;15079:2;15059:18;;;15052:30;15118:34;15113:2;15098:18;;15091:62;-1:-1:-1;;;15184:2:8;15169:18;;15162:39;15233:3;15218:19;;15012:231::o;15248:411::-;15450:2;15432:21;;;15489:2;15469:18;;;15462:30;15528:34;15523:2;15508:18;;15501:62;-1:-1:-1;;;15594:2:8;15579:18;;15572:45;15649:3;15634:19;;15422:237::o;15664:401::-;15866:2;15848:21;;;15905:2;15885:18;;;15878:30;15944:34;15939:2;15924:18;;15917:62;-1:-1:-1;;;16010:2:8;15995:18;;15988:35;16055:3;16040:19;;15838:227::o;16070:400::-;16272:2;16254:21;;;16311:2;16291:18;;;16284:30;16350:34;16345:2;16330:18;;16323:62;-1:-1:-1;;;16416:2:8;16401:18;;16394:34;16460:3;16445:19;;16244:226::o;16475:401::-;16677:2;16659:21;;;16716:2;16696:18;;;16689:30;16755:34;16750:2;16735:18;;16728:62;-1:-1:-1;;;16821:2:8;16806:18;;16799:35;16866:3;16851:19;;16649:227::o;16881:177::-;17027:25;;;17015:2;17000:18;;16982:76::o;17063:983::-;;17373:3;17362:9;17358:19;17404:6;17393:9;17386:25;17430:2;17468:6;17463:2;17452:9;17448:18;17441:34;17511:3;17506:2;17495:9;17491:18;17484:31;17535:6;17570;17564:13;17601:6;17593;17586:22;17639:3;17628:9;17624:19;17617:26;;17678:2;17670:6;17666:15;17652:29;;17699:4;17712:195;17726:6;17723:1;17720:13;17712:195;;;17791:13;;-1:-1:-1;;;;;17787:39:8;17775:52;;17882:15;;;;17847:12;;;;17823:1;17741:9;17712:195;;;-1:-1:-1;;;;;;;17963:32:8;;;;17958:2;17943:18;;17936:60;-1:-1:-1;;;18027:3:8;18012:19;18005:35;17924:3;17334:712;-1:-1:-1;;;17334:712:8:o;18051:248::-;18225:25;;;18281:2;18266:18;;18259:34;18213:2;18198:18;;18180:119::o;18304:184::-;18476:4;18464:17;;;;18446:36;;18434:2;18419:18;;18401:87::o;18493:419::-;18738:4;18726:17;;;18708:36;;18780:17;;;18775:2;18760:18;;18753:45;18834:17;;;18829:2;18814:18;;18807:45;18888:17;;;18883:2;18868:18;;18861:45;18695:3;18680:19;;18662:250::o;18917:128::-;;18988:1;18984:6;18981:1;18978:13;18975:2;;;18994:18;;:::i;:::-;-1:-1:-1;19030:9:8;;18965:80::o;19050:204::-;;19124:4;19121:1;19117:12;19156:4;19153:1;19149:12;19191:3;19185:4;19181:14;19176:3;19173:23;19170:2;;;19199:18;;:::i;:::-;19235:13;;19096:158;-1:-1:-1;;;19096:158:8:o;19259:217::-;;19325:1;19315:2;;-1:-1:-1;;;19350:31:8;;19404:4;19401:1;19394:15;19432:4;19357:1;19422:15;19315:2;-1:-1:-1;19461:9:8;;19305:171::o;19481:453::-;19577:6;19600:5;19614:314;19663:1;19700:2;19690:8;19687:16;19677:2;;19707:5;;;19677:2;19748:4;19743:3;19739:14;19733:4;19730:24;19727:2;;;19757:18;;:::i;:::-;19807:2;19797:8;19793:17;19790:2;;;19822:16;;;;19790:2;19901:17;;;;;19861:15;;19614:314;;;19558:376;;;;;;;:::o;19939:148::-;;20026:55;-1:-1:-1;;20067:4:8;20053:19;;20047:4;20092:922;20176:8;20166:2;;-1:-1:-1;20217:1:8;20231:5;;20166:2;20265:4;20255:2;;-1:-1:-1;20302:1:8;20316:5;;20255:2;20347:4;20365:1;20360:59;;;;20433:1;20428:183;;;;20340:271;;20360:59;20390:1;20381:10;;20404:5;;;20428:183;20465:3;20455:8;20452:17;20449:2;;;20472:18;;:::i;:::-;20528:1;20518:8;20514:16;20505:25;;20556:3;20549:5;20546:14;20543:2;;;20563:18;;:::i;:::-;20596:5;;;20340:271;;20695:2;20685:8;20682:16;20676:3;20670:4;20667:13;20663:36;20657:2;20647:8;20644:16;20639:2;20633:4;20630:12;20626:35;20623:77;20620:2;;;-1:-1:-1;20732:19:8;;;20767:14;;;20764:2;;;20784:18;;:::i;:::-;20817:5;;20620:2;20864:42;20902:3;20892:8;20886:4;20883:1;20864:42;:::i;:::-;20939:6;20934:3;20930:16;20921:7;20918:29;20915:2;;;20950:18;;:::i;:::-;20988:20;;20156:858;-1:-1:-1;;;;20156:858:8:o;21019:168::-;;21125:1;21121;21117:6;21113:14;21110:1;21107:21;21102:1;21095:9;21088:17;21084:45;21081:2;;;21132:18;;:::i;:::-;-1:-1:-1;21172:9:8;;21071:116::o;21192:238::-;;21270:4;21267:1;21263:12;21302:4;21299:1;21295:12;21362:3;21356:4;21352:14;21347:3;21344:23;21337:3;21330:11;21323:19;21319:49;21316:2;;;21371:18;;:::i;:::-;21411:13;;21242:188;-1:-1:-1;;;21242:188:8:o;21435:125::-;;21503:1;21500;21497:8;21494:2;;;21508:18;;:::i;:::-;-1:-1:-1;21545:9:8;;21484:76::o;21565:135::-;;-1:-1:-1;;21625:17:8;;21622:2;;;21645:18;;:::i;:::-;-1:-1:-1;21692:1:8;21681:13;;21612:88::o;21705:127::-;21766:10;21761:3;21757:20;21754:1;21747:31;21797:4;21794:1;21787:15;21821:4;21818:1;21811:15;21837:133;-1:-1:-1;;;;;21914:31:8;;21904:42;;21894:2;;21960:1;21957;21950:12
Swarm Source
ipfs://e4292862330b4f161c33c520f303ede3cf71a0e76206da5a46c8cb1e04579772
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.