ERC-20
Overview
Max Total Supply
1,000,000,000 HONGKONG
Holders
79
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 9 Decimals)
Balance
87,912 HONGKONGValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
HongKongReal
Compiler Version
v0.8.0+commit.c7dfd78e
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-03-14 */ /** Kong of Asia 12% Buy/Sell Tax 1% Max Wallet Website: http://hongkongerc.net/ Telegram : @HongKongERC Twitter: @HongKongETH /** */ // 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; } } // File contracts/Ownable.sol pragma solidity ^0.8.0; /** * @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); } } // File contracts/IERC20.sol 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); } // File contracts/IUniswapV2Router01.sol 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); } // File contracts/IUniswapV2Router02.sol pragma solidity >=0.6.2; 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; } // File contracts/IUniswapV2Factory.sol 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; } // File contracts/Address.sol 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); } } } } // File contracts pragma solidity ^0.8.0; contract HongKongReal 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 = 1_000_000_000 * 10**_decimals; uint256 private _rTotal = (MAX - (MAX % _tTotal)); uint256 public maxTxAmountBuy = _tTotal / 100; // 1% of supply uint256 public maxTxAmountSell = _tTotal / 100; // 1% of supply uint256 public maxWalletAmount = _tTotal / 100; // 1% of supply uint256 public tokenstosell = 0; //antisnipers uint256 public liqAddedBlockNumber; uint256 public blocksToWait = 0; address payable public treasuryAddress; address payable public devAddress; mapping(address => bool) public isAutomatedMarketMakerPair; string private constant _name = "Hong Kong"; string private constant _symbol = "HONGKONG"; bool private inSwapAndLiquify; IUniswapV2Router02 public UniswapV2Router; address public uniswapPair; bool public swapAndLiquifyEnabled = true; uint256 public numTokensSellToAddToLiquidity = _tTotal / 650; struct feeRatesStruct { uint8 rfi; uint8 treasury; uint8 dev; uint8 lp; uint8 toSwap; } // Max Tax at launch to avoid snipers & bots. Changed to 4% LP 8%Marketing later feeRatesStruct public buyRates = feeRatesStruct({ rfi: 0, // 0 RFI rate, in % dev: 3, // dev team fee in % treasury: 0, // treasury fee in % lp: 96, // lp rate in % toSwap: 99 // treasury + dev + lp }); feeRatesStruct public sellRates = feeRatesStruct({ rfi: 0, // 0 RFI rate, in % dev: 3, // dev team fee in % treasury: 0, // treasury fee in % lp: 96, // lp rate in % toSwap: 99 // treasury + dev + lp }); 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 TreasuryAndDevFeesAdded(uint256 devFee, uint256 treasuryFee); 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; treasuryAddress = payable(msg.sender); devAddress = payable(msg.sender); _isExcludedFromFee[owner()] = true; _isExcludedFromFee[treasuryAddress] = true; _isExcludedFromFee[devAddress] = true; _isExcludedFromFee[address(this)] = true; _isExcludedFromMaxWallet[owner()] = true; _isExcludedFromMaxWallet[treasuryAddress] = true; _isExcludedFromMaxWallet[devAddress] = 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; } //No current rfi - Tiered Rewarding Feature Applied at APP Launch 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 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.lp) / 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.lp) / (denominator - appliedRates.lp); // add liquidity addLiquidity(tokensToAddLiquidityWith, ETHToAddLiquidityWith); // we give the remaining tax to dev & treasury wallets uint256 remainingBalance = address(this).balance; uint256 devFee = (remainingBalance * appliedRates.dev) / (denominator - appliedRates.dev); uint256 treasuryFee = (remainingBalance * appliedRates.treasury) / (denominator - appliedRates.treasury); devAddress.sendValue(devFee); treasuryAddress.sendValue(treasuryFee); } function swapTokensForETH(uint256 tokenAmount) private { // generate the pair path of token 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 devAddress, 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 _treasury, uint8 _dev, uint8 _lp ) external onlyOwner { buyRates.rfi = _rfi; buyRates.treasury = _treasury; buyRates.dev = _dev; buyRates.lp = _lp; buyRates.toSwap = _treasury + _dev + _lp; } function setSellFees( uint8 _rfi, uint8 _treasury, uint8 _dev, uint8 _lp ) external onlyOwner { sellRates.rfi = _rfi; sellRates.treasury = _treasury; sellRates.dev = _dev; sellRates.lp = _lp; sellRates.toSwap = _treasury + _dev + _lp; } function setMaxTransactionAmount( uint256 _maxTxAmountBuyPct, uint256 _maxTxAmountSellPct ) external onlyOwner { maxTxAmountBuy = _tTotal / _maxTxAmountBuyPct; // 100 = 1%, 50 = 2% etc. maxTxAmountSell = _tTotal / _maxTxAmountSellPct; // 100 = 1%, 50 = 2% etc. } function setNumTokensSellToAddToLiq(uint256 amountTokens) external onlyOwner { numTokensSellToAddToLiquidity = amountTokens * 10**_decimals; } function setTreasuryAddress(address payable _treasuryAddress) external onlyOwner { treasuryAddress = _treasuryAddress; } function setDevAddress(address payable _devAddress) external onlyOwner { devAddress = _devAddress; } function manualSwapAll() external onlyOwner { swapAndLiquify(balanceOf(address(this))); } // percent of outstanding token function manualSwapPercentage(uint256 tokenpercentage, address toAddress) external onlyOwner { tokenstosell = (balanceOf(address(this))*tokenpercentage)/1000; swapTokensForETH(tokenstosell); payable(toAddress).sendValue(address(this).balance); } //Use this in case BNB are sent to the contract by mistake function rescueBNB(uint256 weiAmount) external onlyOwner{ require(address(this).balance >= weiAmount, "insufficient BNB balance"); treasuryAddress.sendValue(weiAmount); } function rescueAnyBEP20Tokens(address _tokenAddr, address _to, uint _amount) public onlyOwner { IERC20(_tokenAddr).transfer(_to, _amount); } // Blacklist or Unblacklist bots or sniper function blacklistSniper(address botAddress, bool isban) external onlyOwner { isBot[botAddress] = isban; } function setMaxWalletAmount(uint256 _maxWalletAmountPct) external onlyOwner { maxWalletAmount = _tTotal / _maxWalletAmountPct; // 100 = 1%, 50 = 2% etc. 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); } }
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"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"devFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"treasuryFee","type":"uint256"}],"name":"TreasuryAndDevFeesAdded","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":[{"internalType":"address","name":"botAddress","type":"address"},{"internalType":"bool","name":"isban","type":"bool"}],"name":"blacklistSniper","outputs":[],"stateMutability":"nonpayable","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":"treasury","type":"uint8"},{"internalType":"uint8","name":"dev","type":"uint8"},{"internalType":"uint8","name":"lp","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":[],"name":"devAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","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":"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":"manualSwapAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenpercentage","type":"uint256"},{"internalType":"address","name":"toAddress","type":"address"}],"name":"manualSwapPercentage","outputs":[],"stateMutability":"nonpayable","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":[{"internalType":"address","name":"_tokenAddr","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"rescueAnyBEP20Tokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"weiAmount","type":"uint256"}],"name":"rescueBNB","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellRates","outputs":[{"internalType":"uint8","name":"rfi","type":"uint8"},{"internalType":"uint8","name":"treasury","type":"uint8"},{"internalType":"uint8","name":"dev","type":"uint8"},{"internalType":"uint8","name":"lp","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":"_treasury","type":"uint8"},{"internalType":"uint8","name":"_dev","type":"uint8"},{"internalType":"uint8","name":"_lp","type":"uint8"}],"name":"setBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"_devAddress","type":"address"}],"name":"setDevAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxTxAmountBuyPct","type":"uint256"},{"internalType":"uint256","name":"_maxTxAmountSellPct","type":"uint256"}],"name":"setMaxTransactionAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxWalletAmountPct","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":"_treasury","type":"uint8"},{"internalType":"uint8","name":"_dev","type":"uint8"},{"internalType":"uint8","name":"_lp","type":"uint8"}],"name":"setSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"_treasuryAddress","type":"address"}],"name":"setTreasuryAddress","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":"tokenstosell","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":[],"name":"treasuryAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
6080604052620000126009600a620006b4565b6200002290633b9aca006200079f565b60098190556200003590600019620007db565b6200004390600019620007c1565b600a55606460095462000057919062000650565b600b5560646009546200006b919062000650565b600c5560646009546200007f919062000650565b600d556000600e8190556010556015805460ff60a01b1916600160a01b179055600954620000b19061028a9062000650565b6016556040805160a080820183526000808352602080840182905260038486018190526060808601819052606360809687018190526017805462ffffff199081166203000090811763ff00000019908116636000000090811760ff60201b19908116646300000000908117968790558e519c8d018f528b8d52998c019a909a529b8a0196909652888501949094529690970152601880549095161781169095178216179091556019805462ff00001961ff001960ff80871660ff199094169390931716610100808704841602171662010000808604831602179094166301000000808504861602179091166401000000009283900493909316909102919091179055348015620001c057600080fd5b50620001d5620001cf6200059a565b6200059e565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d9050806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200022857600080fd5b505afa1580156200023d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002639190620005fd565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620002ac57600080fd5b505afa158015620002c1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002e79190620005fd565b6040518363ffffffff1660e01b8152600401620003069291906200062d565b602060405180830381600087803b1580156200032157600080fd5b505af115801562000336573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200035c9190620005fd565b601580546001600160a01b0319166001600160a01b03928316178082558216600090815260136020526040808220805460ff1916600190811790915592549051929316917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab9190a360148054610100600160a81b0319166101006001600160a01b03841602179055600a5460016000620003f5620005ee565b6001600160a01b03168152602081019190915260400160009081209190915560118054336001600160a01b0319918216811790925560128054909116909117905560019060049062000446620005ee565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff199687161790556011548216815260049093528183208054851660019081179091556012549091168352818320805485168217905530835290822080549093168117909255600690620004bf620005ee565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055601154821681526006909352818320805485166001908117909155601254821684528284208054861682179055308452828420805486168217905560155490911683529120805490921617905562000544620005ee565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6009546040516200058b919062000647565b60405180910390a3506200081e565b3390565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000546001600160a01b031690565b6000602082840312156200060f578081fd5b81516001600160a01b038116811462000626578182fd5b9392505050565b6001600160a01b0392831681529116602082015260400190565b90815260200190565b60008262000662576200066262000808565b500490565b80825b60018086116200067b5750620006ab565b818704821115620006905762000690620007f2565b808616156200069e57918102915b9490941c9380026200066a565b94509492505050565b60006200062660001960ff851684600082620006d35750600162000626565b81620006e25750600062000626565b8160018114620006fb576002811462000706576200073a565b600191505062000626565b60ff8411156200071a576200071a620007f2565b6001841b915084821115620007335762000733620007f2565b5062000626565b5060208310610133831016604e8410600b841016171562000772575081810a838111156200076c576200076c620007f2565b62000626565b62000781848484600162000667565b808604821115620007965762000796620007f2565b02949350505050565b6000816000190483118215151615620007bc57620007bc620007f2565b500290565b600082821015620007d657620007d6620007f2565b500390565b600082620007ed57620007ed62000808565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b61372b806200082e6000396000f3fe6080604052600436106103545760003560e01c806373cafdc2116101c6578063c816841b116100f7578063d8dcac4f11610095578063e2dd8ca01161006f578063e2dd8ca014610944578063ea2f0b3714610964578063f2fde38b14610984578063fc024626146109a45761035b565b8063d8dcac4f146108ef578063dcf4242414610904578063dd62ed3e146109245761035b565b8063d2fcc001116100d1578063d2fcc00114610885578063d44e586e146108a5578063d58f15b8146108ba578063d6c180bf146108da5761035b565b8063c816841b1461083b578063d0d41fe114610850578063d12a7688146108705761035b565b80639ba5e4d511610164578063aa4bde281161013e578063aa4bde28146107d1578063c08679f2146107e6578063c49b9a8014610806578063c5f956af146108265761035b565b80639ba5e4d51461076e578063a457c2d714610791578063a9059cbb146107b15761035b565b80638a0eef5a116101a05780638a0eef5a1461070f5780638da5cb5b1461072457806395d89b41146107395780639a7a23d61461074e5761035b565b806373cafdc2146106ba5780637949a403146106cf57806388f82020146106ef5761035b565b80633bbac579116102a05780635342acb41161023e5780636dd3d39f116102185780636dd3d39f1461063f57806370a082311461065f578063713898cd1461067f578063715018a6146106a55761035b565b80635342acb4146105df5780635d4db397146105ff5780636605bfda1461061f5761035b565b80634549b0391161027a5780634549b0391461056a57806347c230921461058a5780634a74bb02146105aa57806352390c02146105bf5761035b565b80633bbac5791461050a578063437823ec1461052a578063441b1d301461054a5761035b565b806327a14fc21161030d57806332454f3f116102e757806332454f3f146104a05780633685d419146104b557806339509351146104d55780633ad10ef6146104f55761035b565b806327a14fc21461043e5780632d8381191461045e578063313ce5671461047e5761035b565b80630467978014610360578063055add0d1461038257806306fdde03146103ad578063095ea7b3146103cf57806318160ddd146103fc57806323b872dd1461041e5761035b565b3661035b57005b600080fd5b34801561036c57600080fd5b5061038061037b366004612c30565b6109b9565b005b34801561038e57600080fd5b50610397610a1d565b6040516103a49190612d34565b60405180910390f35b3480156103b957600080fd5b506103c2610a31565b6040516103a49190612da7565b3480156103db57600080fd5b506103ef6103ea366004612bcd565b610a54565b6040516103a49190612d9c565b34801561040857600080fd5b50610411610a72565b6040516103a4919061340d565b34801561042a57600080fd5b506103ef610439366004612b60565b610a78565b34801561044a57600080fd5b50610380610459366004612c30565b610b0a565b34801561046a57600080fd5b50610411610479366004612c30565b610b95565b34801561048a57600080fd5b50610493610bd8565b6040516103a49190613494565b3480156104ac57600080fd5b50610380610bdd565b3480156104c157600080fd5b506103806104d0366004612af0565b610c2f565b3480156104e157600080fd5b506103ef6104f0366004612bcd565b610e04565b34801561050157600080fd5b50610397610e58565b34801561051657600080fd5b506103ef610525366004612af0565b610e67565b34801561053657600080fd5b50610380610545366004612af0565b610e7c565b34801561055657600080fd5b50610380610565366004612c30565b610edf565b34801561057657600080fd5b50610411610585366004612c6c565b610f57565b34801561059657600080fd5b506103806105a5366004612b60565b610fb1565b3480156105b657600080fd5b506103ef611076565b3480156105cb57600080fd5b506103806105da366004612af0565b611086565b3480156105eb57600080fd5b506103ef6105fa366004612af0565b6111be565b34801561060b57600080fd5b5061038061061a366004612cde565b6111dc565b34801561062b57600080fd5b5061038061063a366004612af0565b611299565b34801561064b57600080fd5b506103ef61065a366004612af0565b6112fa565b34801561066b57600080fd5b5061041161067a366004612af0565b611318565b34801561068b57600080fd5b5061069461137a565b6040516103a49594939291906134a2565b3480156106b157600080fd5b506103806113aa565b3480156106c657600080fd5b506106946113f3565b3480156106db57600080fd5b506103ef6106ea366004612af0565b611423565b3480156106fb57600080fd5b506103ef61070a366004612af0565b611438565b34801561071b57600080fd5b50610411611456565b34801561073057600080fd5b5061039761145c565b34801561074557600080fd5b506103c261146b565b34801561075a57600080fd5b50610380610769366004612ba0565b61148d565b34801561077a57600080fd5b506107836115d4565b6040516103a4929190613486565b34801561079d57600080fd5b506103ef6107ac366004612bcd565b6115dd565b3480156107bd57600080fd5b506103ef6107cc366004612bcd565b611656565b3480156107dd57600080fd5b5061041161166a565b3480156107f257600080fd5b50610380610801366004612cde565b611670565b34801561081257600080fd5b50610380610821366004612bf8565b61172d565b34801561083257600080fd5b506103976117b3565b34801561084757600080fd5b506103976117c2565b34801561085c57600080fd5b5061038061086b366004612af0565b6117d1565b34801561087c57600080fd5b50610411611832565b34801561089157600080fd5b506103806108a0366004612ba0565b611838565b3480156108b157600080fd5b5061041161191a565b3480156108c657600080fd5b506103806108d5366004612c48565b611920565b3480156108e657600080fd5b506104116119a1565b3480156108fb57600080fd5b506104116119a7565b34801561091057600080fd5b5061038061091f366004612c90565b6119ad565b34801561093057600080fd5b5061041161093f366004612b28565b611a12565b34801561095057600080fd5b5061038061095f366004612ba0565b611a3d565b34801561097057600080fd5b5061038061097f366004612af0565b611aa7565b34801561099057600080fd5b5061038061099f366004612af0565b611b07565b3480156109b057600080fd5b50610411611b75565b6109c1611b7b565b6001600160a01b03166109d261145c565b6001600160a01b031614610a015760405162461bcd60e51b81526004016109f890613272565b60405180910390fd5b610a0d6009600a613571565b610a179082613642565b60165550565b60145461010090046001600160a01b031681565b604080518082019091526009815268486f6e67204b6f6e6760b81b602082015290565b6000610a68610a61611b7b565b8484611b7f565b5060015b92915050565b60095490565b6000610a85848484611c33565b6001600160a01b038416600090815260036020526040812081610aa6611b7b565b6001600160a01b03166001600160a01b0316815260200190815260200160002054905082811015610ae95760405162461bcd60e51b81526004016109f89061322a565b610afd85610af5611b7b565b858403611b7f565b60019150505b9392505050565b610b12611b7b565b6001600160a01b0316610b2361145c565b6001600160a01b031614610b495760405162461bcd60e51b81526004016109f890613272565b80600954610b57919061350b565b600d8190556040517f4b39c36d20c57d220f61fd25c4349d4435cc03ef6c2a680942f15333c3c3e00191610b8a9161340d565b60405180910390a150565b6000600a54821115610bb95760405162461bcd60e51b81526004016109f890612e8e565b6000610bc3611f9c565b9050610bcf818461350b565b9150505b919050565b600990565b610be5611b7b565b6001600160a01b0316610bf661145c565b6001600160a01b031614610c1c5760405162461bcd60e51b81526004016109f890613272565b610c2d610c2830611318565b611fbf565b565b610c37611b7b565b6001600160a01b0316610c4861145c565b6001600160a01b031614610c6e5760405162461bcd60e51b81526004016109f890613272565b6001600160a01b03811660009081526005602052604090205460ff16610ca65760405162461bcd60e51b81526004016109f890613119565b60005b600854811015610e0057816001600160a01b031660088281548110610cde57634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b03161415610dee5760088054610d099060019061368a565b81548110610d2757634e487b7160e01b600052603260045260246000fd5b600091825260209091200154600880546001600160a01b039092169183908110610d6157634e487b7160e01b600052603260045260246000fd5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600282526040808220829055600590925220805460ff191690556008805480610dc757634e487b7160e01b600052603160045260246000fd5b600082815260209020810160001990810180546001600160a01b0319169055019055610e00565b80610df8816136a1565b915050610ca9565b5050565b6000610a68610e11611b7b565b848460036000610e1f611b7b565b6001600160a01b03908116825260208083019390935260409182016000908120918b1681529252902054610e5391906134ce565b611b7f565b6012546001600160a01b031681565b60076020526000908152604090205460ff1681565b610e84611b7b565b6001600160a01b0316610e9561145c565b6001600160a01b031614610ebb5760405162461bcd60e51b81526004016109f890613272565b6001600160a01b03166000908152600460205260409020805460ff19166001179055565b610ee7611b7b565b6001600160a01b0316610ef861145c565b6001600160a01b031614610f1e5760405162461bcd60e51b81526004016109f890613272565b80471015610f3e5760405162461bcd60e51b81526004016109f8906131f3565b601154610f54906001600160a01b03168261213d565b50565b6000600954831115610f7b5760405162461bcd60e51b81526004016109f8906131bc565b81610f97576000610f8d8460016121de565b519150610a6c9050565b6000610fa48460016121de565b602001519150610a6c9050565b610fb9611b7b565b6001600160a01b0316610fca61145c565b6001600160a01b031614610ff05760405162461bcd60e51b81526004016109f890613272565b60405163a9059cbb60e01b81526001600160a01b0384169063a9059cbb9061101e9085908590600401612d48565b602060405180830381600087803b15801561103857600080fd5b505af115801561104c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110709190612c14565b50505050565b601554600160a01b900460ff1681565b61108e611b7b565b6001600160a01b031661109f61145c565b6001600160a01b0316146110c55760405162461bcd60e51b81526004016109f890613272565b6001600160a01b03811660009081526005602052604090205460ff16156110fe5760405162461bcd60e51b81526004016109f890613033565b6001600160a01b03811660009081526001602052604090205415611158576001600160a01b03811660009081526001602052604090205461113e90610b95565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600560205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319169091179055565b6001600160a01b031660009081526004602052604090205460ff1690565b6111e4611b7b565b6001600160a01b03166111f561145c565b6001600160a01b03161461121b5760405162461bcd60e51b81526004016109f890613272565b6018805460ff191660ff8681169190911761ff001916610100868316021762ff0000191662010000858316021763ff00000019166301000000918416919091021790558061126983856134e6565b61127391906134e6565b6018805460ff92909216600160201b0264ff000000001990921691909117905550505050565b6112a1611b7b565b6001600160a01b03166112b261145c565b6001600160a01b0316146112d85760405162461bcd60e51b81526004016109f890613272565b601180546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b031660009081526006602052604090205460ff1690565b6001600160a01b03811660009081526005602052604081205460ff161561135857506001600160a01b038116600090815260026020526040902054610bd3565b6001600160a01b038216600090815260016020526040902054610a6c90610b95565b60185460ff80821691610100810482169162010000820481169163010000008104821691600160201b9091041685565b6113b2611b7b565b6001600160a01b03166113c361145c565b6001600160a01b0316146113e95760405162461bcd60e51b81526004016109f890613272565b610c2d600061221c565b60175460ff80821691610100810482169162010000820481169163010000008104821691600160201b9091041685565b60136020526000908152604090205460ff1681565b6001600160a01b031660009081526005602052604090205460ff1690565b600f5481565b6000546001600160a01b031690565b604080518082019091526008815267484f4e474b4f4e4760c01b602082015290565b611495611b7b565b6001600160a01b03166114a661145c565b6001600160a01b0316146114cc5760405162461bcd60e51b81526004016109f890613272565b6001600160a01b03821660009081526013602052604090205460ff161515811515141561150b5760405162461bcd60e51b81526004016109f890612f60565b6001600160a01b0382166000908152601360205260409020805460ff19168215801591909117909155611598576001600160a01b03821660009081526006602052604090819020805460ff1916600117905551811515907f4a8452f723db48bf05f301f94d62a2cf7a72976cde77d83e3646584858b8f4b29061158f908590612d34565b60405180910390a25b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b601a54601b5482565b600080600360006115ec611b7b565b6001600160a01b03908116825260208083019390935260409182016000908120918816815292529020549050828110156116385760405162461bcd60e51b81526004016109f8906133c8565b61164c611643611b7b565b85858403611b7f565b5060019392505050565b6000610a68611663611b7b565b8484611c33565b600d5481565b611678611b7b565b6001600160a01b031661168961145c565b6001600160a01b0316146116af5760405162461bcd60e51b81526004016109f890613272565b6017805460ff191660ff8681169190911761ff001916610100868316021762ff0000191662010000858316021763ff0000001916630100000091841691909102179055806116fd83856134e6565b61170791906134e6565b6017805460ff92909216600160201b0264ff000000001990921691909117905550505050565b611735611b7b565b6001600160a01b031661174661145c565b6001600160a01b03161461176c5760405162461bcd60e51b81526004016109f890613272565b6015805460ff60a01b1916600160a01b831515021790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15990610b8a908390612d9c565b6011546001600160a01b031681565b6015546001600160a01b031681565b6117d9611b7b565b6001600160a01b03166117ea61145c565b6001600160a01b0316146118105760405162461bcd60e51b81526004016109f890613272565b601280546001600160a01b0319166001600160a01b0392909216919091179055565b60165481565b611840611b7b565b6001600160a01b031661185161145c565b6001600160a01b0316146118775760405162461bcd60e51b81526004016109f890613272565b6001600160a01b03821660009081526006602052604090205460ff16151581151514156118b65760405162461bcd60e51b81526004016109f89061306a565b6001600160a01b03821660009081526006602052604090819020805460ff191683151590811790915590517f4a8452f723db48bf05f301f94d62a2cf7a72976cde77d83e3646584858b8f4b29061190e908590612d34565b60405180910390a25050565b600c5481565b611928611b7b565b6001600160a01b031661193961145c565b6001600160a01b03161461195f5760405162461bcd60e51b81526004016109f890613272565b6103e88261196c30611318565b6119769190613642565b611980919061350b565b600e81905561198e9061226c565b610e006001600160a01b0382164761213d565b600b5481565b60105481565b6119b5611b7b565b6001600160a01b03166119c661145c565b6001600160a01b0316146119ec5760405162461bcd60e51b81526004016109f890613272565b816009546119fa919061350b565b600b55600954611a0b90829061350b565b600c555050565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b611a45611b7b565b6001600160a01b0316611a5661145c565b6001600160a01b031614611a7c5760405162461bcd60e51b81526004016109f890613272565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b611aaf611b7b565b6001600160a01b0316611ac061145c565b6001600160a01b031614611ae65760405162461bcd60e51b81526004016109f890613272565b6001600160a01b03166000908152600460205260409020805460ff19169055565b611b0f611b7b565b6001600160a01b0316611b2061145c565b6001600160a01b031614611b465760405162461bcd60e51b81526004016109f890613272565b6001600160a01b038116611b6c5760405162461bcd60e51b81526004016109f890612ed8565b610f548161221c565b600e5481565b3390565b6001600160a01b038316611ba55760405162461bcd60e51b81526004016109f890613384565b6001600160a01b038216611bcb5760405162461bcd60e51b81526004016109f890612f1e565b6001600160a01b0380841660008181526003602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590611c2690859061340d565b60405180910390a3505050565b600f54158015611c5b57506001600160a01b03821660009081526013602052604090205460ff165b15611c655743600f555b6001600160a01b038316611c8b5760405162461bcd60e51b81526004016109f89061333f565b6001600160a01b038216611cb15760405162461bcd60e51b81526004016109f890612dfa565b6001600160a01b03831660009081526007602052604090205460ff1615611cea5760405162461bcd60e51b81526004016109f890613187565b60008111611d0a5760405162461bcd60e51b81526004016109f8906132a7565b611d1383611318565b811115611d325760405162461bcd60e51b81526004016109f890612e3d565b6001600160a01b03831660009081526004602052604081205460ff1680611d7157506001600160a01b03831660009081526004602052604090205460ff165b1590508015611f29576001600160a01b03841660009081526013602052604090205460ff1615611ea057601054600f54611dab91906134ce565b431015611e12576001600160a01b03831660009081526007602052604090819020805460ff1916600190811790915590517f3159dadbd8e2d720a851b412e3358e7e44bb11734c9bfd5715340e21798e8b2590611e09908690612d34565b60405180910390a25b6017546019805460ff80841660ff199092169190911761ff0019166101008085048316021762ff00001916620100008085048316021763ff000000191663010000008085048316021764ff000000001916600160201b9384900491909116909202919091179055600b54821115611e9b5760405162461bcd60e51b81526004016109f890612ffe565b611f29565b6018546019805460ff80841660ff199092169190911761ff0019166101008085048316021762ff00001916620100008085048316021763ff000000191663010000008085048316021764ff000000001916600160201b9384900491909116909202919091179055600c54821115611f295760405162461bcd60e51b81526004016109f890612fbd565b601654611f3530611318565b10158015611f46575060145460ff16155b8015611f6b57506001600160a01b03841660009081526013602052604090205460ff16155b8015611f805750601554600160a01b900460ff165b15611f9057611f90601654611fbf565b6110708484848461243b565b6000806000611fa961266d565b9092509050611fb8818361350b565b9250505090565b6014805460ff19166001179055601954600090611fe790600160201b900460ff166002613661565b60195460ff918216925060009183916120099163010000009091041685613642565b612013919061350b565b90506000612021828561368a565b90504761202d8261226c565b6000612039824761368a565b601954909150600090612056906301000000900460ff168761368a565b60195461206d906301000000900460ff1684613642565b612077919061350b565b9050612083858261282b565b601954479060009061209e9062010000900460ff168961368a565b6019546120b49062010000900460ff1684613642565b6120be919061350b565b6019549091506000906120d990610100900460ff168a61368a565b6019546120ee90610100900460ff1685613642565b6120f8919061350b565b601254909150612111906001600160a01b03168361213d565b601154612127906001600160a01b03168261213d565b50506014805460ff191690555050505050505050565b8047101561215d5760405162461bcd60e51b81526004016109f890613150565b6000826001600160a01b03168260405161217690612d31565b60006040518083038185875af1925050503d80600081146121b3576040519150601f19603f3d011682016040523d82523d6000602084013e6121b8565b606091505b50509050806121d95760405162461bcd60e51b81526004016109f8906130bc565b505050565b6121e6612aa2565b6121f08383612902565b9050612205818484612200611f9c565b61298c565b606085015260408401526020830152815292915050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106122af57634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b031681525050601460019054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561231d57600080fd5b505afa158015612331573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123559190612b0c565b8160018151811061237657634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201015260145483916123a391309161010090910416611a12565b10156123c8576014546123c890309061010090046001600160a01b0316600019611b7f565b60145460405163791ac94760e01b81526101009091046001600160a01b03169063791ac94790612405908590600090869030904290600401613416565b600060405180830381600087803b15801561241f57600080fd5b505af1158015612433573d6000803e3d6000fd5b505050505050565b600061244783836121de565b6001600160a01b03861660009081526005602052604090205490915060ff1615612499576001600160a01b0385166000908152600260205260408120805485929061249390849061368a565b90915550505b6001600160a01b03841660009081526005602052604090205460ff16156124ed5760808101516001600160a01b038516600090815260026020526040812080549091906124e79084906134ce565b90915550505b80516001600160a01b0386166000908152600160205260408120805490919061251790849061368a565b90915550506020808201516001600160a01b038616600090815260019092526040822080549192909161254b9084906134ce565b909155505081156125ca5761256881604001518260a001516129f7565b61257a81606001518260c00151612a2c565b306001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360c001516040516125c1919061340d565b60405180910390a35b6001600160a01b03841660009081526006602052604090205460ff16806125fb5750600d546125f885611318565b11155b6126175760405162461bcd60e51b81526004016109f8906132f0565b836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836080015160405161265e919061340d565b60405180910390a35050505050565b600a546009546000918291825b6008548110156127f8578260016000600884815481106126aa57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054118061272357508160026000600884815481106126fc57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561273a57600a5460095494509450505050612827565b600160006008838154811061275f57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b0316835282019290925260400190205461278e908461368a565b925060026000600883815481106127b557634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b031683528201929092526040019020546127e4908361368a565b9150806127f0816136a1565b91505061267a565b50600954600a54612809919061350b565b82101561282157600a54600954935093505050612827565b90925090505b9091565b60145460125460405163f305d71960e01b81526001600160a01b0361010090930483169263f305d7199285926128709230928992600092839216904290600401612d61565b6060604051808303818588803b15801561288957600080fd5b505af115801561289d573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906128c29190612cb1565b5050507f38f8a0c92f4c5b0b6877f878cb4c0c8d348a47b76d716c8e78f425043df9515b82826040516128f6929190613486565b60405180910390a15050565b61290a612aa2565b8161291b5760808101839052610a6c565b60195460649061292e9060ff1685613642565b612938919061350b565b60a082015260195460649061295790600160201b900460ff1685613642565b612961919061350b565b60c0820181905260a0820151612977908561368a565b612981919061368a565b608082015292915050565b600080808061299b8588613642565b9350856129b0575082915060009050806129ec565b848860a001516129c09190613642565b9150848860c001516129d29190613642565b9050806129df838661368a565b6129e9919061368a565b92505b945094509450949050565b81600a6000828254612a09919061368a565b9091555050601a8054829190600090612a239084906134ce565b90915550505050565b3060009081526001602052604081208054849290612a4b9084906134ce565b90915550503060009081526005602052604090205460ff1615612a8d573060009081526002602052604081208054839290612a879084906134ce565b90915550505b80601a6001016000828254612a2391906134ce565b6040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b803560ff81168114610bd357600080fd5b600060208284031215612b01578081fd5b8135610b03816136d2565b600060208284031215612b1d578081fd5b8151610b03816136d2565b60008060408385031215612b3a578081fd5b8235612b45816136d2565b91506020830135612b55816136d2565b809150509250929050565b600080600060608486031215612b74578081fd5b8335612b7f816136d2565b92506020840135612b8f816136d2565b929592945050506040919091013590565b60008060408385031215612bb2578182fd5b8235612bbd816136d2565b91506020830135612b55816136e7565b60008060408385031215612bdf578182fd5b8235612bea816136d2565b946020939093013593505050565b600060208284031215612c09578081fd5b8135610b03816136e7565b600060208284031215612c25578081fd5b8151610b03816136e7565b600060208284031215612c41578081fd5b5035919050565b60008060408385031215612c5a578182fd5b823591506020830135612b55816136d2565b60008060408385031215612c7e578182fd5b823591506020830135612b55816136e7565b60008060408385031215612ca2578182fd5b50508035926020909101359150565b600080600060608486031215612cc5578283fd5b8351925060208401519150604084015190509250925092565b60008060008060808587031215612cf3578081fd5b612cfc85612adf565b9350612d0a60208601612adf565b9250612d1860408601612adf565b9150612d2660608601612adf565b905092959194509250565b90565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b901515815260200190565b6000602080835283518082850152825b81811015612dd357858101830151858201604001528201612db7565b81811115612de45783604083870101525b50601f01601f1916929092016040019392505050565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60208082526031908201527f596f752061726520747279696e6720746f207472616e73666572206d6f7265206040820152707468616e20796f75722062616c616e636560781b606082015260800190565b6020808252602a908201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260408201526965666c656374696f6e7360b01b606082015260800190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b60208082526022908201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604082015261737360f01b606082015260800190565b60208082526038908201527f4175746f6d61746564206d61726b6574206d616b65722070616972206973206160408201527f6c72656164792073657420746f20746861742076616c75650000000000000000606082015260800190565b60208082526021908201527f616d6f756e74206d757374206265203c3d206d61785478416d6f756e7453656c6040820152601b60fa1b606082015260800190565b6020808252818101527f616d6f756e74206d757374206265203c3d206d61785478416d6f756e74427579604082015260600190565b6020808252601b908201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604082015260600190565b60208082526032908201527f5f69734578636c7564656446726f6d4d617857616c6c657420616c72656164796040820152712073657420746f20746861742076616c756560701b606082015260800190565b6020808252603a908201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260408201527f6563697069656e74206d61792068617665207265766572746564000000000000606082015260800190565b60208082526017908201527f4163636f756e74206973206e6f74206578636c75646564000000000000000000604082015260600190565b6020808252601d908201527f416464726573733a20696e73756666696369656e742062616c616e6365000000604082015260600190565b6020808252818101527f45524332303a206164647265737320626c61636b6c69737465642028626f7429604082015260600190565b6020808252601f908201527f416d6f756e74206d757374206265206c657373207468616e20737570706c7900604082015260600190565b60208082526018908201527f696e73756666696369656e7420424e422062616c616e63650000000000000000604082015260600190565b60208082526028908201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616040820152676c6c6f77616e636560c01b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526029908201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206040820152687468616e207a65726f60b81b606082015260800190565b6020808252602f908201527f526563697069656e742063616e6e6f7420686f6c64206d6f7265207468616e2060408201526e1b585e15d85b1b195d105b5bdd5b9d608a1b606082015260800190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526024908201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646040820152637265737360e01b606082015260800190565b60208082526025908201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604082015264207a65726f60d81b606082015260800190565b90815260200190565b600060a082018783526020878185015260a0604085015281875180845260c0860191508289019350845b818110156134655784516001600160a01b031683529383019391830191600101613440565b50506001600160a01b03969096166060850152505050608001529392505050565b918252602082015260400190565b60ff91909116815260200190565b60ff95861681529385166020850152918416604084015283166060830152909116608082015260a00190565b600082198211156134e1576134e16136bc565b500190565b600060ff821660ff84168060ff03821115613503576135036136bc565b019392505050565b60008261352657634e487b7160e01b81526012600452602481fd5b500490565b80825b600180861161353d5750613568565b81870482111561354f5761354f6136bc565b8086161561355c57918102915b9490941c93800261352e565b94509492505050565b6000610b0360001960ff85168460008261358d57506001610b03565b8161359a57506000610b03565b81600181146135b057600281146135ba576135e7565b6001915050610b03565b60ff8411156135cb576135cb6136bc565b6001841b9150848211156135e1576135e16136bc565b50610b03565b5060208310610133831016604e8410600b841016171561361a575081810a83811115613615576136156136bc565b610b03565b613627848484600161352b565b808604821115613639576136396136bc565b02949350505050565b600081600019048311821515161561365c5761365c6136bc565b500290565b600060ff821660ff84168160ff0481118215151615613682576136826136bc565b029392505050565b60008282101561369c5761369c6136bc565b500390565b60006000198214156136b5576136b56136bc565b5060010190565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b0381168114610f5457600080fd5b8015158114610f5457600080fdfea26469706673582212208c686757f9aeee4a1f60370b2604cac5806e678546532082e006f5058b7ce7b764736f6c63430008000033
Deployed Bytecode
0x6080604052600436106103545760003560e01c806373cafdc2116101c6578063c816841b116100f7578063d8dcac4f11610095578063e2dd8ca01161006f578063e2dd8ca014610944578063ea2f0b3714610964578063f2fde38b14610984578063fc024626146109a45761035b565b8063d8dcac4f146108ef578063dcf4242414610904578063dd62ed3e146109245761035b565b8063d2fcc001116100d1578063d2fcc00114610885578063d44e586e146108a5578063d58f15b8146108ba578063d6c180bf146108da5761035b565b8063c816841b1461083b578063d0d41fe114610850578063d12a7688146108705761035b565b80639ba5e4d511610164578063aa4bde281161013e578063aa4bde28146107d1578063c08679f2146107e6578063c49b9a8014610806578063c5f956af146108265761035b565b80639ba5e4d51461076e578063a457c2d714610791578063a9059cbb146107b15761035b565b80638a0eef5a116101a05780638a0eef5a1461070f5780638da5cb5b1461072457806395d89b41146107395780639a7a23d61461074e5761035b565b806373cafdc2146106ba5780637949a403146106cf57806388f82020146106ef5761035b565b80633bbac579116102a05780635342acb41161023e5780636dd3d39f116102185780636dd3d39f1461063f57806370a082311461065f578063713898cd1461067f578063715018a6146106a55761035b565b80635342acb4146105df5780635d4db397146105ff5780636605bfda1461061f5761035b565b80634549b0391161027a5780634549b0391461056a57806347c230921461058a5780634a74bb02146105aa57806352390c02146105bf5761035b565b80633bbac5791461050a578063437823ec1461052a578063441b1d301461054a5761035b565b806327a14fc21161030d57806332454f3f116102e757806332454f3f146104a05780633685d419146104b557806339509351146104d55780633ad10ef6146104f55761035b565b806327a14fc21461043e5780632d8381191461045e578063313ce5671461047e5761035b565b80630467978014610360578063055add0d1461038257806306fdde03146103ad578063095ea7b3146103cf57806318160ddd146103fc57806323b872dd1461041e5761035b565b3661035b57005b600080fd5b34801561036c57600080fd5b5061038061037b366004612c30565b6109b9565b005b34801561038e57600080fd5b50610397610a1d565b6040516103a49190612d34565b60405180910390f35b3480156103b957600080fd5b506103c2610a31565b6040516103a49190612da7565b3480156103db57600080fd5b506103ef6103ea366004612bcd565b610a54565b6040516103a49190612d9c565b34801561040857600080fd5b50610411610a72565b6040516103a4919061340d565b34801561042a57600080fd5b506103ef610439366004612b60565b610a78565b34801561044a57600080fd5b50610380610459366004612c30565b610b0a565b34801561046a57600080fd5b50610411610479366004612c30565b610b95565b34801561048a57600080fd5b50610493610bd8565b6040516103a49190613494565b3480156104ac57600080fd5b50610380610bdd565b3480156104c157600080fd5b506103806104d0366004612af0565b610c2f565b3480156104e157600080fd5b506103ef6104f0366004612bcd565b610e04565b34801561050157600080fd5b50610397610e58565b34801561051657600080fd5b506103ef610525366004612af0565b610e67565b34801561053657600080fd5b50610380610545366004612af0565b610e7c565b34801561055657600080fd5b50610380610565366004612c30565b610edf565b34801561057657600080fd5b50610411610585366004612c6c565b610f57565b34801561059657600080fd5b506103806105a5366004612b60565b610fb1565b3480156105b657600080fd5b506103ef611076565b3480156105cb57600080fd5b506103806105da366004612af0565b611086565b3480156105eb57600080fd5b506103ef6105fa366004612af0565b6111be565b34801561060b57600080fd5b5061038061061a366004612cde565b6111dc565b34801561062b57600080fd5b5061038061063a366004612af0565b611299565b34801561064b57600080fd5b506103ef61065a366004612af0565b6112fa565b34801561066b57600080fd5b5061041161067a366004612af0565b611318565b34801561068b57600080fd5b5061069461137a565b6040516103a49594939291906134a2565b3480156106b157600080fd5b506103806113aa565b3480156106c657600080fd5b506106946113f3565b3480156106db57600080fd5b506103ef6106ea366004612af0565b611423565b3480156106fb57600080fd5b506103ef61070a366004612af0565b611438565b34801561071b57600080fd5b50610411611456565b34801561073057600080fd5b5061039761145c565b34801561074557600080fd5b506103c261146b565b34801561075a57600080fd5b50610380610769366004612ba0565b61148d565b34801561077a57600080fd5b506107836115d4565b6040516103a4929190613486565b34801561079d57600080fd5b506103ef6107ac366004612bcd565b6115dd565b3480156107bd57600080fd5b506103ef6107cc366004612bcd565b611656565b3480156107dd57600080fd5b5061041161166a565b3480156107f257600080fd5b50610380610801366004612cde565b611670565b34801561081257600080fd5b50610380610821366004612bf8565b61172d565b34801561083257600080fd5b506103976117b3565b34801561084757600080fd5b506103976117c2565b34801561085c57600080fd5b5061038061086b366004612af0565b6117d1565b34801561087c57600080fd5b50610411611832565b34801561089157600080fd5b506103806108a0366004612ba0565b611838565b3480156108b157600080fd5b5061041161191a565b3480156108c657600080fd5b506103806108d5366004612c48565b611920565b3480156108e657600080fd5b506104116119a1565b3480156108fb57600080fd5b506104116119a7565b34801561091057600080fd5b5061038061091f366004612c90565b6119ad565b34801561093057600080fd5b5061041161093f366004612b28565b611a12565b34801561095057600080fd5b5061038061095f366004612ba0565b611a3d565b34801561097057600080fd5b5061038061097f366004612af0565b611aa7565b34801561099057600080fd5b5061038061099f366004612af0565b611b07565b3480156109b057600080fd5b50610411611b75565b6109c1611b7b565b6001600160a01b03166109d261145c565b6001600160a01b031614610a015760405162461bcd60e51b81526004016109f890613272565b60405180910390fd5b610a0d6009600a613571565b610a179082613642565b60165550565b60145461010090046001600160a01b031681565b604080518082019091526009815268486f6e67204b6f6e6760b81b602082015290565b6000610a68610a61611b7b565b8484611b7f565b5060015b92915050565b60095490565b6000610a85848484611c33565b6001600160a01b038416600090815260036020526040812081610aa6611b7b565b6001600160a01b03166001600160a01b0316815260200190815260200160002054905082811015610ae95760405162461bcd60e51b81526004016109f89061322a565b610afd85610af5611b7b565b858403611b7f565b60019150505b9392505050565b610b12611b7b565b6001600160a01b0316610b2361145c565b6001600160a01b031614610b495760405162461bcd60e51b81526004016109f890613272565b80600954610b57919061350b565b600d8190556040517f4b39c36d20c57d220f61fd25c4349d4435cc03ef6c2a680942f15333c3c3e00191610b8a9161340d565b60405180910390a150565b6000600a54821115610bb95760405162461bcd60e51b81526004016109f890612e8e565b6000610bc3611f9c565b9050610bcf818461350b565b9150505b919050565b600990565b610be5611b7b565b6001600160a01b0316610bf661145c565b6001600160a01b031614610c1c5760405162461bcd60e51b81526004016109f890613272565b610c2d610c2830611318565b611fbf565b565b610c37611b7b565b6001600160a01b0316610c4861145c565b6001600160a01b031614610c6e5760405162461bcd60e51b81526004016109f890613272565b6001600160a01b03811660009081526005602052604090205460ff16610ca65760405162461bcd60e51b81526004016109f890613119565b60005b600854811015610e0057816001600160a01b031660088281548110610cde57634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b03161415610dee5760088054610d099060019061368a565b81548110610d2757634e487b7160e01b600052603260045260246000fd5b600091825260209091200154600880546001600160a01b039092169183908110610d6157634e487b7160e01b600052603260045260246000fd5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600282526040808220829055600590925220805460ff191690556008805480610dc757634e487b7160e01b600052603160045260246000fd5b600082815260209020810160001990810180546001600160a01b0319169055019055610e00565b80610df8816136a1565b915050610ca9565b5050565b6000610a68610e11611b7b565b848460036000610e1f611b7b565b6001600160a01b03908116825260208083019390935260409182016000908120918b1681529252902054610e5391906134ce565b611b7f565b6012546001600160a01b031681565b60076020526000908152604090205460ff1681565b610e84611b7b565b6001600160a01b0316610e9561145c565b6001600160a01b031614610ebb5760405162461bcd60e51b81526004016109f890613272565b6001600160a01b03166000908152600460205260409020805460ff19166001179055565b610ee7611b7b565b6001600160a01b0316610ef861145c565b6001600160a01b031614610f1e5760405162461bcd60e51b81526004016109f890613272565b80471015610f3e5760405162461bcd60e51b81526004016109f8906131f3565b601154610f54906001600160a01b03168261213d565b50565b6000600954831115610f7b5760405162461bcd60e51b81526004016109f8906131bc565b81610f97576000610f8d8460016121de565b519150610a6c9050565b6000610fa48460016121de565b602001519150610a6c9050565b610fb9611b7b565b6001600160a01b0316610fca61145c565b6001600160a01b031614610ff05760405162461bcd60e51b81526004016109f890613272565b60405163a9059cbb60e01b81526001600160a01b0384169063a9059cbb9061101e9085908590600401612d48565b602060405180830381600087803b15801561103857600080fd5b505af115801561104c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110709190612c14565b50505050565b601554600160a01b900460ff1681565b61108e611b7b565b6001600160a01b031661109f61145c565b6001600160a01b0316146110c55760405162461bcd60e51b81526004016109f890613272565b6001600160a01b03811660009081526005602052604090205460ff16156110fe5760405162461bcd60e51b81526004016109f890613033565b6001600160a01b03811660009081526001602052604090205415611158576001600160a01b03811660009081526001602052604090205461113e90610b95565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600560205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319169091179055565b6001600160a01b031660009081526004602052604090205460ff1690565b6111e4611b7b565b6001600160a01b03166111f561145c565b6001600160a01b03161461121b5760405162461bcd60e51b81526004016109f890613272565b6018805460ff191660ff8681169190911761ff001916610100868316021762ff0000191662010000858316021763ff00000019166301000000918416919091021790558061126983856134e6565b61127391906134e6565b6018805460ff92909216600160201b0264ff000000001990921691909117905550505050565b6112a1611b7b565b6001600160a01b03166112b261145c565b6001600160a01b0316146112d85760405162461bcd60e51b81526004016109f890613272565b601180546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b031660009081526006602052604090205460ff1690565b6001600160a01b03811660009081526005602052604081205460ff161561135857506001600160a01b038116600090815260026020526040902054610bd3565b6001600160a01b038216600090815260016020526040902054610a6c90610b95565b60185460ff80821691610100810482169162010000820481169163010000008104821691600160201b9091041685565b6113b2611b7b565b6001600160a01b03166113c361145c565b6001600160a01b0316146113e95760405162461bcd60e51b81526004016109f890613272565b610c2d600061221c565b60175460ff80821691610100810482169162010000820481169163010000008104821691600160201b9091041685565b60136020526000908152604090205460ff1681565b6001600160a01b031660009081526005602052604090205460ff1690565b600f5481565b6000546001600160a01b031690565b604080518082019091526008815267484f4e474b4f4e4760c01b602082015290565b611495611b7b565b6001600160a01b03166114a661145c565b6001600160a01b0316146114cc5760405162461bcd60e51b81526004016109f890613272565b6001600160a01b03821660009081526013602052604090205460ff161515811515141561150b5760405162461bcd60e51b81526004016109f890612f60565b6001600160a01b0382166000908152601360205260409020805460ff19168215801591909117909155611598576001600160a01b03821660009081526006602052604090819020805460ff1916600117905551811515907f4a8452f723db48bf05f301f94d62a2cf7a72976cde77d83e3646584858b8f4b29061158f908590612d34565b60405180910390a25b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b601a54601b5482565b600080600360006115ec611b7b565b6001600160a01b03908116825260208083019390935260409182016000908120918816815292529020549050828110156116385760405162461bcd60e51b81526004016109f8906133c8565b61164c611643611b7b565b85858403611b7f565b5060019392505050565b6000610a68611663611b7b565b8484611c33565b600d5481565b611678611b7b565b6001600160a01b031661168961145c565b6001600160a01b0316146116af5760405162461bcd60e51b81526004016109f890613272565b6017805460ff191660ff8681169190911761ff001916610100868316021762ff0000191662010000858316021763ff0000001916630100000091841691909102179055806116fd83856134e6565b61170791906134e6565b6017805460ff92909216600160201b0264ff000000001990921691909117905550505050565b611735611b7b565b6001600160a01b031661174661145c565b6001600160a01b03161461176c5760405162461bcd60e51b81526004016109f890613272565b6015805460ff60a01b1916600160a01b831515021790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15990610b8a908390612d9c565b6011546001600160a01b031681565b6015546001600160a01b031681565b6117d9611b7b565b6001600160a01b03166117ea61145c565b6001600160a01b0316146118105760405162461bcd60e51b81526004016109f890613272565b601280546001600160a01b0319166001600160a01b0392909216919091179055565b60165481565b611840611b7b565b6001600160a01b031661185161145c565b6001600160a01b0316146118775760405162461bcd60e51b81526004016109f890613272565b6001600160a01b03821660009081526006602052604090205460ff16151581151514156118b65760405162461bcd60e51b81526004016109f89061306a565b6001600160a01b03821660009081526006602052604090819020805460ff191683151590811790915590517f4a8452f723db48bf05f301f94d62a2cf7a72976cde77d83e3646584858b8f4b29061190e908590612d34565b60405180910390a25050565b600c5481565b611928611b7b565b6001600160a01b031661193961145c565b6001600160a01b03161461195f5760405162461bcd60e51b81526004016109f890613272565b6103e88261196c30611318565b6119769190613642565b611980919061350b565b600e81905561198e9061226c565b610e006001600160a01b0382164761213d565b600b5481565b60105481565b6119b5611b7b565b6001600160a01b03166119c661145c565b6001600160a01b0316146119ec5760405162461bcd60e51b81526004016109f890613272565b816009546119fa919061350b565b600b55600954611a0b90829061350b565b600c555050565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b611a45611b7b565b6001600160a01b0316611a5661145c565b6001600160a01b031614611a7c5760405162461bcd60e51b81526004016109f890613272565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b611aaf611b7b565b6001600160a01b0316611ac061145c565b6001600160a01b031614611ae65760405162461bcd60e51b81526004016109f890613272565b6001600160a01b03166000908152600460205260409020805460ff19169055565b611b0f611b7b565b6001600160a01b0316611b2061145c565b6001600160a01b031614611b465760405162461bcd60e51b81526004016109f890613272565b6001600160a01b038116611b6c5760405162461bcd60e51b81526004016109f890612ed8565b610f548161221c565b600e5481565b3390565b6001600160a01b038316611ba55760405162461bcd60e51b81526004016109f890613384565b6001600160a01b038216611bcb5760405162461bcd60e51b81526004016109f890612f1e565b6001600160a01b0380841660008181526003602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590611c2690859061340d565b60405180910390a3505050565b600f54158015611c5b57506001600160a01b03821660009081526013602052604090205460ff165b15611c655743600f555b6001600160a01b038316611c8b5760405162461bcd60e51b81526004016109f89061333f565b6001600160a01b038216611cb15760405162461bcd60e51b81526004016109f890612dfa565b6001600160a01b03831660009081526007602052604090205460ff1615611cea5760405162461bcd60e51b81526004016109f890613187565b60008111611d0a5760405162461bcd60e51b81526004016109f8906132a7565b611d1383611318565b811115611d325760405162461bcd60e51b81526004016109f890612e3d565b6001600160a01b03831660009081526004602052604081205460ff1680611d7157506001600160a01b03831660009081526004602052604090205460ff165b1590508015611f29576001600160a01b03841660009081526013602052604090205460ff1615611ea057601054600f54611dab91906134ce565b431015611e12576001600160a01b03831660009081526007602052604090819020805460ff1916600190811790915590517f3159dadbd8e2d720a851b412e3358e7e44bb11734c9bfd5715340e21798e8b2590611e09908690612d34565b60405180910390a25b6017546019805460ff80841660ff199092169190911761ff0019166101008085048316021762ff00001916620100008085048316021763ff000000191663010000008085048316021764ff000000001916600160201b9384900491909116909202919091179055600b54821115611e9b5760405162461bcd60e51b81526004016109f890612ffe565b611f29565b6018546019805460ff80841660ff199092169190911761ff0019166101008085048316021762ff00001916620100008085048316021763ff000000191663010000008085048316021764ff000000001916600160201b9384900491909116909202919091179055600c54821115611f295760405162461bcd60e51b81526004016109f890612fbd565b601654611f3530611318565b10158015611f46575060145460ff16155b8015611f6b57506001600160a01b03841660009081526013602052604090205460ff16155b8015611f805750601554600160a01b900460ff165b15611f9057611f90601654611fbf565b6110708484848461243b565b6000806000611fa961266d565b9092509050611fb8818361350b565b9250505090565b6014805460ff19166001179055601954600090611fe790600160201b900460ff166002613661565b60195460ff918216925060009183916120099163010000009091041685613642565b612013919061350b565b90506000612021828561368a565b90504761202d8261226c565b6000612039824761368a565b601954909150600090612056906301000000900460ff168761368a565b60195461206d906301000000900460ff1684613642565b612077919061350b565b9050612083858261282b565b601954479060009061209e9062010000900460ff168961368a565b6019546120b49062010000900460ff1684613642565b6120be919061350b565b6019549091506000906120d990610100900460ff168a61368a565b6019546120ee90610100900460ff1685613642565b6120f8919061350b565b601254909150612111906001600160a01b03168361213d565b601154612127906001600160a01b03168261213d565b50506014805460ff191690555050505050505050565b8047101561215d5760405162461bcd60e51b81526004016109f890613150565b6000826001600160a01b03168260405161217690612d31565b60006040518083038185875af1925050503d80600081146121b3576040519150601f19603f3d011682016040523d82523d6000602084013e6121b8565b606091505b50509050806121d95760405162461bcd60e51b81526004016109f8906130bc565b505050565b6121e6612aa2565b6121f08383612902565b9050612205818484612200611f9c565b61298c565b606085015260408401526020830152815292915050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106122af57634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b031681525050601460019054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561231d57600080fd5b505afa158015612331573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123559190612b0c565b8160018151811061237657634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201015260145483916123a391309161010090910416611a12565b10156123c8576014546123c890309061010090046001600160a01b0316600019611b7f565b60145460405163791ac94760e01b81526101009091046001600160a01b03169063791ac94790612405908590600090869030904290600401613416565b600060405180830381600087803b15801561241f57600080fd5b505af1158015612433573d6000803e3d6000fd5b505050505050565b600061244783836121de565b6001600160a01b03861660009081526005602052604090205490915060ff1615612499576001600160a01b0385166000908152600260205260408120805485929061249390849061368a565b90915550505b6001600160a01b03841660009081526005602052604090205460ff16156124ed5760808101516001600160a01b038516600090815260026020526040812080549091906124e79084906134ce565b90915550505b80516001600160a01b0386166000908152600160205260408120805490919061251790849061368a565b90915550506020808201516001600160a01b038616600090815260019092526040822080549192909161254b9084906134ce565b909155505081156125ca5761256881604001518260a001516129f7565b61257a81606001518260c00151612a2c565b306001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360c001516040516125c1919061340d565b60405180910390a35b6001600160a01b03841660009081526006602052604090205460ff16806125fb5750600d546125f885611318565b11155b6126175760405162461bcd60e51b81526004016109f8906132f0565b836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836080015160405161265e919061340d565b60405180910390a35050505050565b600a546009546000918291825b6008548110156127f8578260016000600884815481106126aa57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054118061272357508160026000600884815481106126fc57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561273a57600a5460095494509450505050612827565b600160006008838154811061275f57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b0316835282019290925260400190205461278e908461368a565b925060026000600883815481106127b557634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b031683528201929092526040019020546127e4908361368a565b9150806127f0816136a1565b91505061267a565b50600954600a54612809919061350b565b82101561282157600a54600954935093505050612827565b90925090505b9091565b60145460125460405163f305d71960e01b81526001600160a01b0361010090930483169263f305d7199285926128709230928992600092839216904290600401612d61565b6060604051808303818588803b15801561288957600080fd5b505af115801561289d573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906128c29190612cb1565b5050507f38f8a0c92f4c5b0b6877f878cb4c0c8d348a47b76d716c8e78f425043df9515b82826040516128f6929190613486565b60405180910390a15050565b61290a612aa2565b8161291b5760808101839052610a6c565b60195460649061292e9060ff1685613642565b612938919061350b565b60a082015260195460649061295790600160201b900460ff1685613642565b612961919061350b565b60c0820181905260a0820151612977908561368a565b612981919061368a565b608082015292915050565b600080808061299b8588613642565b9350856129b0575082915060009050806129ec565b848860a001516129c09190613642565b9150848860c001516129d29190613642565b9050806129df838661368a565b6129e9919061368a565b92505b945094509450949050565b81600a6000828254612a09919061368a565b9091555050601a8054829190600090612a239084906134ce565b90915550505050565b3060009081526001602052604081208054849290612a4b9084906134ce565b90915550503060009081526005602052604090205460ff1615612a8d573060009081526002602052604081208054839290612a879084906134ce565b90915550505b80601a6001016000828254612a2391906134ce565b6040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b803560ff81168114610bd357600080fd5b600060208284031215612b01578081fd5b8135610b03816136d2565b600060208284031215612b1d578081fd5b8151610b03816136d2565b60008060408385031215612b3a578081fd5b8235612b45816136d2565b91506020830135612b55816136d2565b809150509250929050565b600080600060608486031215612b74578081fd5b8335612b7f816136d2565b92506020840135612b8f816136d2565b929592945050506040919091013590565b60008060408385031215612bb2578182fd5b8235612bbd816136d2565b91506020830135612b55816136e7565b60008060408385031215612bdf578182fd5b8235612bea816136d2565b946020939093013593505050565b600060208284031215612c09578081fd5b8135610b03816136e7565b600060208284031215612c25578081fd5b8151610b03816136e7565b600060208284031215612c41578081fd5b5035919050565b60008060408385031215612c5a578182fd5b823591506020830135612b55816136d2565b60008060408385031215612c7e578182fd5b823591506020830135612b55816136e7565b60008060408385031215612ca2578182fd5b50508035926020909101359150565b600080600060608486031215612cc5578283fd5b8351925060208401519150604084015190509250925092565b60008060008060808587031215612cf3578081fd5b612cfc85612adf565b9350612d0a60208601612adf565b9250612d1860408601612adf565b9150612d2660608601612adf565b905092959194509250565b90565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b901515815260200190565b6000602080835283518082850152825b81811015612dd357858101830151858201604001528201612db7565b81811115612de45783604083870101525b50601f01601f1916929092016040019392505050565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60208082526031908201527f596f752061726520747279696e6720746f207472616e73666572206d6f7265206040820152707468616e20796f75722062616c616e636560781b606082015260800190565b6020808252602a908201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260408201526965666c656374696f6e7360b01b606082015260800190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b60208082526022908201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604082015261737360f01b606082015260800190565b60208082526038908201527f4175746f6d61746564206d61726b6574206d616b65722070616972206973206160408201527f6c72656164792073657420746f20746861742076616c75650000000000000000606082015260800190565b60208082526021908201527f616d6f756e74206d757374206265203c3d206d61785478416d6f756e7453656c6040820152601b60fa1b606082015260800190565b6020808252818101527f616d6f756e74206d757374206265203c3d206d61785478416d6f756e74427579604082015260600190565b6020808252601b908201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604082015260600190565b60208082526032908201527f5f69734578636c7564656446726f6d4d617857616c6c657420616c72656164796040820152712073657420746f20746861742076616c756560701b606082015260800190565b6020808252603a908201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260408201527f6563697069656e74206d61792068617665207265766572746564000000000000606082015260800190565b60208082526017908201527f4163636f756e74206973206e6f74206578636c75646564000000000000000000604082015260600190565b6020808252601d908201527f416464726573733a20696e73756666696369656e742062616c616e6365000000604082015260600190565b6020808252818101527f45524332303a206164647265737320626c61636b6c69737465642028626f7429604082015260600190565b6020808252601f908201527f416d6f756e74206d757374206265206c657373207468616e20737570706c7900604082015260600190565b60208082526018908201527f696e73756666696369656e7420424e422062616c616e63650000000000000000604082015260600190565b60208082526028908201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616040820152676c6c6f77616e636560c01b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526029908201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206040820152687468616e207a65726f60b81b606082015260800190565b6020808252602f908201527f526563697069656e742063616e6e6f7420686f6c64206d6f7265207468616e2060408201526e1b585e15d85b1b195d105b5bdd5b9d608a1b606082015260800190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526024908201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646040820152637265737360e01b606082015260800190565b60208082526025908201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604082015264207a65726f60d81b606082015260800190565b90815260200190565b600060a082018783526020878185015260a0604085015281875180845260c0860191508289019350845b818110156134655784516001600160a01b031683529383019391830191600101613440565b50506001600160a01b03969096166060850152505050608001529392505050565b918252602082015260400190565b60ff91909116815260200190565b60ff95861681529385166020850152918416604084015283166060830152909116608082015260a00190565b600082198211156134e1576134e16136bc565b500190565b600060ff821660ff84168060ff03821115613503576135036136bc565b019392505050565b60008261352657634e487b7160e01b81526012600452602481fd5b500490565b80825b600180861161353d5750613568565b81870482111561354f5761354f6136bc565b8086161561355c57918102915b9490941c93800261352e565b94509492505050565b6000610b0360001960ff85168460008261358d57506001610b03565b8161359a57506000610b03565b81600181146135b057600281146135ba576135e7565b6001915050610b03565b60ff8411156135cb576135cb6136bc565b6001841b9150848211156135e1576135e16136bc565b50610b03565b5060208310610133831016604e8410600b841016171561361a575081810a83811115613615576136156136bc565b610b03565b613627848484600161352b565b808604821115613639576136396136bc565b02949350505050565b600081600019048311821515161561365c5761365c6136bc565b500290565b600060ff821660ff84168160ff0481118215151615613682576136826136bc565b029392505050565b60008282101561369c5761369c6136bc565b500390565b60006000198214156136b5576136b56136bc565b5060010190565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b0381168114610f5457600080fd5b8015158114610f5457600080fdfea26469706673582212208c686757f9aeee4a1f60370b2604cac5806e678546532082e006f5058b7ce7b764736f6c63430008000033
Deployed Bytecode Sourcemap
19877:21800:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39545:179;;;;;;;;;;-1:-1:-1;39545:179:0;;;;;:::i;:::-;;:::i;:::-;;21264:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24553:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;25561:193::-;;;;;;;;;;-1:-1:-1;25561:193:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;24853:95::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;25762:521::-;;;;;;;;;;-1:-1:-1;25762:521:0;;;;;:::i;:::-;;:::i;41063:223::-;;;;;;;;;;-1:-1:-1;41063:223:0;;;;;:::i;:::-;;:::i;27711:319::-;;;;;;;;;;-1:-1:-1;27711:319:0;;;;;:::i;:::-;;:::i;24739:83::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;40019:103::-;;;;;;;;;;;;;:::i;28451:473::-;;;;;;;;;;-1:-1:-1;28451:473:0;;;;;:::i;:::-;;:::i;26291:297::-;;;;;;;;;;-1:-1:-1;26291:297:0;;;;;:::i;:::-;;:::i;21018:33::-;;;;;;;;;;;;;:::i;20331:37::-;;;;;;;;;;-1:-1:-1;20331:37:0;;;;;:::i;:::-;;:::i;28932:113::-;;;;;;;;;;-1:-1:-1;28932:113:0;;;;;:::i;:::-;;:::i;40514:193::-;;;;;;;;;;-1:-1:-1;40514:193:0;;;;;:::i;:::-;;:::i;27214:489::-;;;;;;;;;;-1:-1:-1;27214:489:0;;;;;:::i;:::-;;:::i;40719:154::-;;;;;;;;;;-1:-1:-1;40719:154:0;;;;;:::i;:::-;;:::i;21345:40::-;;;;;;;;;;;;;:::i;28109:334::-;;;;;;;;;;-1:-1:-1;28109:334:0;;;;;:::i;:::-;;:::i;29175:124::-;;;;;;;;;;-1:-1:-1;29175:124:0;;;;;:::i;:::-;;:::i;38894:327::-;;;;;;;;;;-1:-1:-1;38894:327:0;;;;;:::i;:::-;;:::i;39732:157::-;;;;;;;;;;-1:-1:-1;39732:157:0;;;;;:::i;:::-;;:::i;29307:168::-;;;;;;;;;;-1:-1:-1;29307:168:0;;;;;:::i;:::-;;:::i;24956:198::-;;;;;;;;;;-1:-1:-1;24956:198:0;;;;;:::i;:::-;;:::i;21985:285::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;:::i;2584:94::-;;;;;;;;;;;;;:::i;21692:284::-;;;;;;;;;;;;;:::i;21058:58::-;;;;;;;;;;-1:-1:-1;21058:58:0;;;;;:::i;:::-;;:::i;27086:120::-;;;;;;;;;;-1:-1:-1;27086:120:0;;;;;:::i;:::-;;:::i;20892:34::-;;;;;;;;;;;;;:::i;1933:87::-;;;;;;;;;;;;;:::i;24644:::-;;;;;;;;;;;;;:::i;38035:522::-;;;;;;;;;;-1:-1:-1;38035:522:0;;;;;:::i;:::-;;:::i;22420:36::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;26596:482::-;;;;;;;;;;-1:-1:-1;26596:482:0;;;;;:::i;:::-;;:::i;25162:199::-;;;;;;;;;;-1:-1:-1;25162:199:0;;;;;:::i;:::-;;:::i;20764:46::-;;;;;;;;;;;;;:::i;38565:321::-;;;;;;;;;;-1:-1:-1;38565:321:0;;;;;:::i;:::-;;:::i;29483:171::-;;;;;;;;;;-1:-1:-1;29483:171:0;;;;;:::i;:::-;;:::i;20973:38::-;;;;;;;;;;;;;:::i;21312:26::-;;;;;;;;;;;;;:::i;39897:114::-;;;;;;;;;;-1:-1:-1;39897:114:0;;;;;:::i;:::-;;:::i;21392:60::-;;;;;;;;;;;;;:::i;41294:380::-;;;;;;;;;;-1:-1:-1;41294:380:0;;;;;:::i;:::-;;:::i;20695:46::-;;;;;;;;;;;;;:::i;40167:276::-;;;;;;;;;;-1:-1:-1;40167:276:0;;;;;:::i;:::-;;:::i;20627:45::-;;;;;;;;;;;;;:::i;20933:31::-;;;;;;;;;;;;;:::i;39229:308::-;;;;;;;;;;-1:-1:-1;39229:308:0;;;;;:::i;:::-;;:::i;25369:184::-;;;;;;;;;;-1:-1:-1;25369:184:0;;;;;:::i;:::-;;:::i;40929:126::-;;;;;;;;;;-1:-1:-1;40929:126:0;;;;;:::i;:::-;;:::i;29055:112::-;;;;;;;;;;-1:-1:-1;29055:112:0;;;;;:::i;:::-;;:::i;2833:192::-;;;;;;;;;;-1:-1:-1;2833:192:0;;;;;:::i;:::-;;:::i;20833:31::-;;;;;;;;;;;;;:::i;39545:179::-;2164:12;:10;:12::i;:::-;-1:-1:-1;;;;;2153:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;2153:23:0;;2145:68;;;;-1:-1:-1;;;2145:68:0;;;;;;;:::i;:::-;;;;;;;;;39703:13:::1;20448:1;39703:2;:13;:::i;:::-;39688:28;::::0;:12;:28:::1;:::i;:::-;39656:29;:60:::0;-1:-1:-1;39545:179:0:o;21264:41::-;;;;;;-1:-1:-1;;;;;21264:41:0;;:::o;24553:83::-;24623:5;;;;;;;;;;;;-1:-1:-1;;;24623:5:0;;;;24553:83;:::o;25561:193::-;25663:4;25685:39;25694:12;:10;:12::i;:::-;25708:7;25717:6;25685:8;:39::i;:::-;-1:-1:-1;25742:4:0;25561:193;;;;;:::o;24853:95::-;24933:7;;24853:95;:::o;25762:521::-;25894:4;25911:36;25921:6;25929:9;25940:6;25911:9;:36::i;:::-;-1:-1:-1;;;;;25987:19:0;;25960:24;25987:19;;;:11;:19;;;;;25960:24;26007:12;:10;:12::i;:::-;-1:-1:-1;;;;;25987:33:0;-1:-1:-1;;;;;25987:33:0;;;;;;;;;;;;;25960:60;;26073:6;26053:16;:26;;26031:116;;;;-1:-1:-1;;;26031:116:0;;;;;;;:::i;:::-;26183:57;26192:6;26200:12;:10;:12::i;:::-;26233:6;26214:16;:25;26183:8;:57::i;:::-;26271:4;26264:11;;;25762:521;;;;;;:::o;41063:223::-;2164:12;:10;:12::i;:::-;-1:-1:-1;;;;;2153:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;2153:23:0;;2145:68;;;;-1:-1:-1;;;2145:68:0;;;;;;;:::i;:::-;41178:19:::1;41168:7;;:29;;;;:::i;:::-;41150:15;:47:::0;;;41239:39:::1;::::0;::::1;::::0;::::1;::::0;::::1;:::i;:::-;;;;;;;;41063:223:::0;:::o;27711:319::-;27805:7;27863;;27852;:18;;27830:110;;;;-1:-1:-1;;;27830:110:0;;;;;;;:::i;:::-;27951:19;27973:10;:8;:10::i;:::-;27951:32;-1:-1:-1;28001:21:0;27951:32;28001:7;:21;:::i;:::-;27994:28;;;27711:319;;;;:::o;24739:83::-;20448:1;24739:83;:::o;40019:103::-;2164:12;:10;:12::i;:::-;-1:-1:-1;;;;;2153:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;2153:23:0;;2145:68;;;;-1:-1:-1;;;2145:68:0;;;;;;;:::i;:::-;40074:40:::1;40089:24;40107:4;40089:9;:24::i;:::-;40074:14;:40::i;:::-;40019:103::o:0;28451:473::-;2164:12;:10;:12::i;:::-;-1:-1:-1;;;;;2153:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;2153:23:0;;2145:68;;;;-1:-1:-1;;;2145:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;28531:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;28523:56;;;;-1:-1:-1::0;;;28523:56:0::1;;;;;;;:::i;:::-;28595:9;28590:327;28614:9;:16:::0;28610:20;::::1;28590:327;;;28672:7;-1:-1:-1::0;;;;;28656:23:0::1;:9;28666:1;28656:12;;;;;;-1:-1:-1::0;;;28656:12:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;28656:12:0::1;:23;28652:254;;;28715:9;28725:16:::0;;:20:::1;::::0;28744:1:::1;::::0;28725:20:::1;:::i;:::-;28715:31;;;;;;-1:-1:-1::0;;;28715:31:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;28700:9:::1;:12:::0;;-1:-1:-1;;;;;28715:31:0;;::::1;::::0;28710:1;;28700:12;::::1;;;-1:-1:-1::0;;;28700:12:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;28700:46:0::1;-1:-1:-1::0;;;;;28700:46:0;;::::1;;::::0;;28765:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;28804:11:::1;:20:::0;;;;:28;;-1:-1:-1;;28804:28:0::1;::::0;;28851:9:::1;:15:::0;;;::::1;;-1:-1:-1::0;;;28851:15:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;;-1:-1:-1;;28851:15:0;;;;;-1:-1:-1;;;;;;28851:15:0::1;::::0;;;;;28885:5:::1;;28652:254;28632:3:::0;::::1;::::0;::::1;:::i;:::-;;;;28590:327;;;;28451:473:::0;:::o;26291:297::-;26406:4;26428:130;26451:12;:10;:12::i;:::-;26478:7;26537:10;26500:11;:25;26512:12;:10;:12::i;:::-;-1:-1:-1;;;;;26500:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;26500:25:0;;;:34;;;;;;;;;;:47;;;;:::i;:::-;26428:8;:130::i;21018:33::-;;;-1:-1:-1;;;;;21018:33:0;;:::o;20331:37::-;;;;;;;;;;;;;;;:::o;28932:113::-;2164:12;:10;:12::i;:::-;-1:-1:-1;;;;;2153:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;2153:23:0;;2145:68;;;;-1:-1:-1;;;2145:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;29003:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;29003:34:0::1;29033:4;29003:34;::::0;;28932:113::o;40514:193::-;2164:12;:10;:12::i;:::-;-1:-1:-1;;;;;2153:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;2153:23:0;;2145:68;;;;-1:-1:-1;;;2145:68:0;;;;;;;:::i;:::-;40614:9:::1;40589:21;:34;;40581:71;;;;-1:-1:-1::0;;;40581:71:0::1;;;;;;;:::i;:::-;40663:15;::::0;:36:::1;::::0;-1:-1:-1;;;;;40663:15:0::1;40689:9:::0;40663:25:::1;:36::i;:::-;40514:193:::0;:::o;27214:489::-;27332:7;27376;;27365;:18;;27357:62;;;;-1:-1:-1;;;27357:62:0;;;;;;;:::i;:::-;27435:17;27430:266;;27469:28;27500:25;27511:7;27520:4;27500:10;:25::i;:::-;27547:9;;-1:-1:-1;27540:16:0;;-1:-1:-1;27540:16:0;27430:266;27589:28;27620:25;27631:7;27640:4;27620:10;:25::i;:::-;27667:17;;;;-1:-1:-1;27660:24:0;;-1:-1:-1;27660:24:0;40719:154;2164:12;:10;:12::i;:::-;-1:-1:-1;;;;;2153:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;2153:23:0;;2145:68;;;;-1:-1:-1;;;2145:68:0;;;;;;;:::i;:::-;40824:41:::1;::::0;-1:-1:-1;;;40824:41:0;;-1:-1:-1;;;;;40824:27:0;::::1;::::0;::::1;::::0;:41:::1;::::0;40852:3;;40857:7;;40824:41:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;40719:154:::0;;;:::o;21345:40::-;;;-1:-1:-1;;;21345:40:0;;;;;:::o;28109:334::-;2164:12;:10;:12::i;:::-;-1:-1:-1;;;;;2153:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;2153:23:0;;2145:68;;;;-1:-1:-1;;;2145:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;28192:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;28191:21;28183:61;;;;-1:-1:-1::0;;;28183:61:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;28259:16:0;::::1;28278:1;28259:16:::0;;;:7:::1;:16;::::0;;;;;:20;28255:109:::1;;-1:-1:-1::0;;;;;28335:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;28315:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;28296:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;28255:109:::1;-1:-1:-1::0;;;;;28374:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;28374:27:0::1;28397:4;28374:27:::0;;::::1;::::0;;;28412:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;28412:23:0::1;::::0;;::::1;::::0;;28109:334::o;29175:124::-;-1:-1:-1;;;;;29264:27:0;29240:4;29264:27;;;:18;:27;;;;;;;;;29175:124::o;38894:327::-;2164:12;:10;:12::i;:::-;-1:-1:-1;;;;;2153:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;2153:23:0;;2145:68;;;;-1:-1:-1;;;2145:68:0;;;;;;;:::i;:::-;39040:9:::1;:20:::0;;-1:-1:-1;;39040:20:0::1;;::::0;;::::1;::::0;;;::::1;-1:-1:-1::0;;39071:30:0::1;39040:20;39071:30:::0;;::::1;;;-1:-1:-1::0;;39112:20:0::1;::::0;;;::::1;;;-1:-1:-1::0;;39143:18:0::1;::::0;;;::::1;::::0;;;::::1;;::::0;;;39191:16:::1;39112:20:::0;39071:30;39191:16:::1;:::i;:::-;:22;;;;:::i;:::-;39172:9;:41:::0;;::::1;::::0;;;::::1;-1:-1:-1::0;;;39172:41:0::1;-1:-1:-1::0;;39172:41:0;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;;38894:327:0:o;39732:157::-;2164:12;:10;:12::i;:::-;-1:-1:-1;;;;;2153:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;2153:23:0;;2145:68;;;;-1:-1:-1;;;2145:68:0;;;;;;;:::i;:::-;39847:15:::1;:34:::0;;-1:-1:-1;;;;;;39847:34:0::1;-1:-1:-1::0;;;;;39847:34:0;;;::::1;::::0;;;::::1;::::0;;39732:157::o;29307:168::-;-1:-1:-1;;;;;29434:33:0;29405:4;29434:33;;;:24;:33;;;;;;;;;29307:168::o;24956:198::-;-1:-1:-1;;;;;25046:20:0;;25022:7;25046:20;;;:11;:20;;;;;;;;25042:49;;;-1:-1:-1;;;;;;25075:16:0;;;;;;:7;:16;;;;;;25068:23;;25042:49;-1:-1:-1;;;;;25129:16:0;;;;;;:7;:16;;;;;;25109:37;;:19;:37::i;21985:285::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;21985:285:0;;;;;:::o;2584:94::-;2164:12;:10;:12::i;:::-;-1:-1:-1;;;;;2153:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;2153:23:0;;2145:68;;;;-1:-1:-1;;;2145:68:0;;;;;;;:::i;:::-;2649:21:::1;2667:1;2649:9;:21::i;21692:284::-:0;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;21692:284:0;;;;;:::o;21058:58::-;;;;;;;;;;;;;;;:::o;27086:120::-;-1:-1:-1;;;;;27178:20:0;27154:4;27178:20;;;:11;:20;;;;;;;;;27086:120::o;20892:34::-;;;;:::o;1933:87::-;1979:7;2006:6;-1:-1:-1;;;;;2006:6:0;1933:87;:::o;24644:::-;24716:7;;;;;;;;;;;;-1:-1:-1;;;24716:7:0;;;;24644:87;:::o;38035:522::-;2164:12;:10;:12::i;:::-;-1:-1:-1;;;;;2153:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;2153:23:0;;2145:68;;;;-1:-1:-1;;;2145:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;38174:33:0;::::1;;::::0;;;:26:::1;:33;::::0;;;;;::::1;;:42;;::::0;::::1;;;;38152:148;;;;-1:-1:-1::0;;;38152:148:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;38311:33:0;::::1;;::::0;;;:26:::1;:33;::::0;;;;:41;;-1:-1:-1;;38311:41:0::1;::::0;::::1;::::0;::::1;::::0;;;::::1;::::0;;;38363:130:::1;;-1:-1:-1::0;;;;;38389:31:0;::::1;;::::0;;;:24:::1;:31;::::0;;;;;;:38;;-1:-1:-1;;38389:38:0::1;38423:4;38389:38;::::0;;38447:34;;::::1;;::::0;::::1;::::0;::::1;::::0;38414:5;;38447:34:::1;:::i;:::-;;;;;;;;38363:130;38508:41;::::0;;::::1;;::::0;-1:-1:-1;;;;;38508:41:0;::::1;::::0;::::1;::::0;;;::::1;38035:522:::0;;:::o;22420:36::-;;;;;;:::o;26596:482::-;26716:4;26738:24;26765:11;:25;26777:12;:10;:12::i;:::-;-1:-1:-1;;;;;26765:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;26765:25:0;;;:34;;;;;;;;;;;-1:-1:-1;26832:35:0;;;;26810:122;;;;-1:-1:-1;;;26810:122:0;;;;;;;:::i;:::-;26968:67;26977:12;:10;:12::i;:::-;26991:7;27019:15;27000:16;:34;26968:8;:67::i;:::-;-1:-1:-1;27066:4:0;;26596:482;-1:-1:-1;;;26596:482:0:o;25162:199::-;25267:4;25289:42;25299:12;:10;:12::i;:::-;25313:9;25324:6;25289:9;:42::i;20764:46::-;;;;:::o;38565:321::-;2164:12;:10;:12::i;:::-;-1:-1:-1;;;;;2153:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;2153:23:0;;2145:68;;;;-1:-1:-1;;;2145:68:0;;;;;;;:::i;:::-;38710:8:::1;:19:::0;;-1:-1:-1;;38710:19:0::1;;::::0;;::::1;::::0;;;::::1;-1:-1:-1::0;;38740:29:0::1;38710:19;38740:29:::0;;::::1;;;-1:-1:-1::0;;38780:19:0::1;::::0;;;::::1;;;-1:-1:-1::0;;38810:17:0::1;::::0;;;::::1;::::0;;;::::1;;::::0;;;38856:16:::1;38780:19:::0;38740:29;38856:16:::1;:::i;:::-;:22;;;;:::i;:::-;38838:8;:40:::0;;::::1;::::0;;;::::1;-1:-1:-1::0;;;38838:40:0::1;-1:-1:-1::0;;38838:40:0;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;;38565:321:0:o;29483:171::-;2164:12;:10;:12::i;:::-;-1:-1:-1;;;;;2153:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;2153:23:0;;2145:68;;;;-1:-1:-1;;;2145:68:0;;;;;;;:::i;:::-;29560:21:::1;:32:::0;;-1:-1:-1;;;;29560:32:0::1;-1:-1:-1::0;;;29560:32:0;::::1;;;;::::0;;29608:38:::1;::::0;::::1;::::0;::::1;::::0;29560:32;;29608:38:::1;:::i;20973:::-:0;;;-1:-1:-1;;;;;20973:38:0;;:::o;21312:26::-;;;-1:-1:-1;;;;;21312:26:0;;:::o;39897:114::-;2164:12;:10;:12::i;:::-;-1:-1:-1;;;;;2153:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;2153:23:0;;2145:68;;;;-1:-1:-1;;;2145:68:0;;;;;;;:::i;:::-;39979:10:::1;:24:::0;;-1:-1:-1;;;;;;39979:24:0::1;-1:-1:-1::0;;;;;39979:24:0;;;::::1;::::0;;;::::1;::::0;;39897:114::o;21392:60::-;;;;:::o;41294:380::-;2164:12;:10;:12::i;:::-;-1:-1:-1;;;;;2153:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;2153:23:0;;2145:68;;;;-1:-1:-1;;;2145:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;41431:33:0;::::1;;::::0;;;:24:::1;:33;::::0;;;;;::::1;;:45;;::::0;::::1;;;;41409:145;;;;-1:-1:-1::0;;;41409:145:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;41565:33:0;::::1;;::::0;;;:24:::1;:33;::::0;;;;;;:44;;-1:-1:-1;;41565:44:0::1;::::0;::::1;;::::0;;::::1;::::0;;;41627:39;;::::1;::::0;::::1;::::0;41565:33;;41627:39:::1;:::i;:::-;;;;;;;;41294:380:::0;;:::o;20695:46::-;;;;:::o;40167:276::-;2164:12;:10;:12::i;:::-;-1:-1:-1;;;;;2153:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;2153:23:0;;2145:68;;;;-1:-1:-1;;;2145:68:0;;;;;;;:::i;:::-;40329:4:::1;40312:15;40287:24;40305:4;40287:9;:24::i;:::-;:40;;;;:::i;:::-;40286:47;;;;:::i;:::-;40271:12;:62:::0;;;40343:30:::1;::::0;:16:::1;:30::i;:::-;40384:51;-1:-1:-1::0;;;;;40384:28:0;::::1;40413:21;40384:28;:51::i;20627:45::-:0;;;;:::o;20933:31::-;;;;:::o;39229:308::-;2164:12;:10;:12::i;:::-;-1:-1:-1;;;;;2153:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;2153:23:0;;2145:68;;;;-1:-1:-1;;;2145:68:0;;;;;;;:::i;:::-;39401:18:::1;39391:7;;:28;;;;:::i;:::-;39374:14;:45:::0;39474:7:::1;::::0;:29:::1;::::0;39484:19;;39474:29:::1;:::i;:::-;39456:15;:47:::0;-1:-1:-1;;39229:308:0:o;25369:184::-;-1:-1:-1;;;;;25518:18:0;;;25486:7;25518:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;25369:184::o;40929:126::-;2164:12;:10;:12::i;:::-;-1:-1:-1;;;;;2153:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;2153:23:0;;2145:68;;;;-1:-1:-1;;;2145:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;41022:17:0;;;::::1;;::::0;;;:5:::1;:17;::::0;;;;:25;;-1:-1:-1;;41022:25:0::1;::::0;::::1;;::::0;;;::::1;::::0;;40929:126::o;29055:112::-;2164:12;:10;:12::i;:::-;-1:-1:-1;;;;;2153:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;2153:23:0;;2145:68;;;;-1:-1:-1;;;2145:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;29124:27:0::1;29154:5;29124:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;29124:35:0::1;::::0;;29055:112::o;2833:192::-;2164:12;:10;:12::i;:::-;-1:-1:-1;;;;;2153:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;2153:23:0;;2145:68;;;;-1:-1:-1;;;2145:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;2922:22:0;::::1;2914:73;;;;-1:-1:-1::0;;;2914:73:0::1;;;;;;;:::i;:::-;2998:19;3008:8;2998:9;:19::i;20833:31::-:0;;;;:::o;747:98::-;827:10;747:98;:::o;32454:369::-;-1:-1:-1;;;;;32581:19:0;;32573:68;;;;-1:-1:-1;;;32573:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;32660:21:0;;32652:68;;;;-1:-1:-1;;;32652:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;32731:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;;:36;;;32783:32;;;;;32761:6;;32783:32;:::i;:::-;;;;;;;;32454:369;;;:::o;32831:1834::-;32949:19;;:24;:58;;;;-1:-1:-1;;;;;;32977:30:0;;;;;;:26;:30;;;;;;;;32949:58;32945:125;;;33046:12;33024:19;:34;32945:125;-1:-1:-1;;;;;33090:18:0;;33082:68;;;;-1:-1:-1;;;33082:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;33169:16:0;;33161:64;;;;-1:-1:-1;;;33161:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;33245:11:0;;;;;;:5;:11;;;;;;;;33244:12;33236:57;;;;-1:-1:-1;;;33236:57:0;;;;;;;:::i;:::-;33321:1;33312:6;:10;33304:64;;;;-1:-1:-1;;;33304:64:0;;;;;;;:::i;:::-;33411:15;33421:4;33411:9;:15::i;:::-;33401:6;:25;;33379:124;;;;-1:-1:-1;;;33379:124:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;33531:24:0;;33514:12;33531:24;;;:18;:24;;;;;;;;;:50;;-1:-1:-1;;;;;;33559:22:0;;;;;;:18;:22;;;;;;;;33531:50;33529:53;33514:68;;33599:7;33595:687;;;-1:-1:-1;;;;;33627:32:0;;;;;;:26;:32;;;;;;;;33623:648;;;33721:12;;33699:19;;:34;;;;:::i;:::-;33684:12;:49;33680:167;;;-1:-1:-1;;;;;33758:9:0;;;;;;:5;:9;;;;;;;:16;;-1:-1:-1;;33758:16:0;33770:4;33758:16;;;;;;33802:25;;;;;;33764:2;;33802:25;:::i;:::-;;;;;;;;33680:167;33882:8;33867:23;:12;:23;;;;;;-1:-1:-1;;33867:23:0;;;;;;;-1:-1:-1;;33867:23:0;;;;;;;;;-1:-1:-1;;33867:23:0;;;;;;;;;-1:-1:-1;;33867:23:0;;;;;;;;;-1:-1:-1;;33867:23:0;-1:-1:-1;;;33867:23:0;;;;;;;;;;;;;;;;;33949:14;;33939:24;;;33909:130;;;;-1:-1:-1;;;33909:130:0;;;;;;;:::i;:::-;33623:648;;;34095:9;34080:24;:12;:24;;;;;;-1:-1:-1;;34080:24:0;;;;;;;-1:-1:-1;;34080:24:0;;;;;;;;;-1:-1:-1;;34080:24:0;;;;;;;;;-1:-1:-1;;34080:24:0;;;;;;;;;-1:-1:-1;;34080:24:0;-1:-1:-1;;;34080:24:0;;;;;;;;;;;;;;;;;34163:15;;34153:25;;;34123:132;;;;-1:-1:-1;;;34123:132:0;;;;;;;:::i;:::-;34340:29;;34312:24;34330:4;34312:9;:24::i;:::-;:57;;:91;;;;-1:-1:-1;34387:16:0;;;;34386:17;34312:91;:141;;;;-1:-1:-1;;;;;;34421:32:0;;;;;;:26;:32;;;;;;;;34420:33;34312:141;:179;;;;-1:-1:-1;34470:21:0;;-1:-1:-1;;;34470:21:0;;;;34312:179;34294:310;;;34547:45;34562:29;;34547:14;:45::i;:::-;34616:41;34631:4;34637:2;34641:6;34649:7;34616:14;:41::i;31699:161::-;31741:7;31762:15;31779;31798:19;:17;:19::i;:::-;31761:56;;-1:-1:-1;31761:56:0;-1:-1:-1;31835:17:0;31761:56;;31835:17;:::i;:::-;31828:24;;;;31699:161;:::o;35710:1204::-;23338:16;:23;;-1:-1:-1;;23338:23:0;23357:4;23338:23;;;35817:12:::1;:19:::0;23338:16;;35817:23:::1;::::0;-1:-1:-1;;;35817:19:0;::::1;23338:23:::0;35817:19:::1;35839:1;35817:23;:::i;:::-;35923:12;:15:::0;35795:45:::1;::::0;;::::1;::::0;-1:-1:-1;35851:32:0::1;::::0;35795:45;;35887:51:::1;::::0;35923:15;;;::::1;;35887:20:::0;:51:::1;:::i;:::-;35886:67;;;;:::i;:::-;35851:102:::0;-1:-1:-1;35964:14:0::1;35981:47;35851:102:::0;35981:20;:47:::1;:::i;:::-;35964:64:::0;-1:-1:-1;36066:21:0::1;36132:24;35964:64:::0;36132:16:::1;:24::i;:::-;36169:20;36192:38;36216:14:::0;36192:21:::1;:38;:::i;:::-;36336:12;:15:::0;36169:61;;-1:-1:-1;36241:29:0::1;::::0;36322::::1;::::0;36336:15;;::::1;;;36322:11:::0;:29:::1;:::i;:::-;36289:12;:15:::0;36274:30:::1;::::0;36289:15;;::::1;;;36274:12:::0;:30:::1;:::i;:::-;36273:79;;;;:::i;:::-;36241:111;;36391:61;36404:24;36430:21;36391:12;:61::i;:::-;36673:12;:16:::0;36556:21:::1;::::0;36529:24:::1;::::0;36659:30:::1;::::0;36673:16;;::::1;;;36659:11:::0;:30:::1;:::i;:::-;36625:12;:16:::0;36606:35:::1;::::0;36625:16;;::::1;;;36606::::0;:35:::1;:::i;:::-;36605:85;;;;:::i;:::-;36796:12;:21:::0;36588:102;;-1:-1:-1;36701:19:0::1;::::0;36782:35:::1;::::0;36796:21:::1;::::0;::::1;;;36782:11:::0;:35:::1;:::i;:::-;36743:12;:21:::0;36724:40:::1;::::0;36743:21:::1;::::0;::::1;;;36724:16:::0;:40:::1;:::i;:::-;36723:95;;;;:::i;:::-;36829:10;::::0;36701:117;;-1:-1:-1;36829:28:0::1;::::0;-1:-1:-1;;;;;36829:10:0::1;36850:6:::0;36829:20:::1;:28::i;:::-;36868:15;::::0;:38:::1;::::0;-1:-1:-1;;;;;36868:15:0::1;36894:11:::0;36868:25:::1;:38::i;:::-;-1:-1:-1::0;;23384:16:0;:24;;-1:-1:-1;;23384:24:0;;;-1:-1:-1;;;;;;;;35710:1204:0:o;13820:317::-;13935:6;13910:21;:31;;13902:73;;;;-1:-1:-1;;;13902:73:0;;;;;;;:::i;:::-;13989:12;14007:9;-1:-1:-1;;;;;14007:14:0;14029:6;14007:33;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13988:52;;;14059:7;14051:78;;;;-1:-1:-1;;;14051:78:0;;;;;;;:::i;:::-;13820:317;;;:::o;30132:440::-;30232:36;;:::i;:::-;30298:29;30310:7;30319;30298:11;:29::i;:::-;30286:41;;30485:52;30497:9;30508:7;30517;30526:10;:8;:10::i;:::-;30485:11;:52::i;:::-;30454:17;;;30338:199;30425:14;;;30338:199;30385:25;;;30338:199;;;30132:440;;;;:::o;3033:173::-;3089:16;3108:6;;-1:-1:-1;;;;;3125:17:0;;;-1:-1:-1;;;;;;3125:17:0;;;;;;3158:40;;3108:6;;;;;;;3158:40;;3089:16;3158:40;3033:173;;:::o;36922:669::-;37056:16;;;37070:1;37056:16;;;;;;;;37032:21;;37056:16;;;;;;;;;;-1:-1:-1;37056:16:0;37032:40;;37101:4;37083;37088:1;37083:7;;;;;;-1:-1:-1;;;37083:7:0;;;;;;;;;;;;;;:23;-1:-1:-1;;;;;37083:23:0;;;-1:-1:-1;;;;;37083:23:0;;;;;37127:15;;;;;;;;;-1:-1:-1;;;;;37127:15:0;-1:-1:-1;;;;;37127:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37117:4;37122:1;37117:7;;;;;;-1:-1:-1;;;37117:7:0;;;;;;;;;-1:-1:-1;;;;;37117:32:0;;;:7;;;;;;;;;:32;37199:15;;37219:11;;37166:50;;37184:4;;37199:15;;;;;37166:9;:50::i;:::-;:64;37162:159;;;37279:15;;37247:62;;37264:4;;37279:15;;;-1:-1:-1;;;;;37279:15:0;-1:-1:-1;;37247:8:0;:62::i;:::-;37359:15;;:224;;-1:-1:-1;;;37359:224:0;;:15;;;;-1:-1:-1;;;;;37359:15:0;;:66;;:224;;37440:11;;37466:1;;37510:4;;37537;;37557:15;;37359:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36922:669;;:::o;34746:956::-;34898:28;34929;34940:7;34949;34929:10;:28::i;:::-;-1:-1:-1;;;;;34974:19:0;;;;;;:11;:19;;;;;;34898:59;;-1:-1:-1;34974:19:0;;34970:78;;;-1:-1:-1;;;;;35010:15:0;;;;;;:7;:15;;;;;:26;;35029:7;;35010:15;:26;;35029:7;;35010:26;:::i;:::-;;;;-1:-1:-1;;34970:78:0;-1:-1:-1;;;;;35062:22:0;;;;;;:11;:22;;;;;;;;35058:94;;;35123:17;;;;-1:-1:-1;;;;;35101:18:0;;;;;;:7;:18;;;;;:39;;:18;;;:39;;35123:17;;35101:39;:::i;:::-;;;;-1:-1:-1;;35058:94:0;35183:9;;-1:-1:-1;;;;;35164:15:0;;35183:9;35164:15;;;:7;:15;;;;;:28;;:15;;35183:9;35164:28;;35183:9;;35164:28;:::i;:::-;;;;-1:-1:-1;;35225:17:0;;;;;-1:-1:-1;;;;;35203:18:0;;;;;;:7;:18;;;;;;:39;;35225:17;;35203:18;;:39;;35225:17;;35203:39;:::i;:::-;;;;-1:-1:-1;;35253:177:0;;;;35281:27;35293:1;:6;;;35301:1;:6;;;35281:11;:27::i;:::-;35323:33;35335:1;:9;;;35346:1;:9;;;35323:11;:33::i;:::-;35401:4;-1:-1:-1;;;;;35376:42:0;35385:6;-1:-1:-1;;;;;35376:42:0;;35408:1;:9;;;35376:42;;;;;;:::i;:::-;;;;;;;;35253:177;-1:-1:-1;;;;;35462:35:0;;;;;;:24;:35;;;;;;;;;:95;;;35542:15;;35518:20;35528:9;35518;:20::i;:::-;:39;;35462:95;35440:192;;;;-1:-1:-1;;;35440:192:0;;;;;;;:::i;:::-;35665:9;-1:-1:-1;;;;;35648:46:0;35657:6;-1:-1:-1;;;;;35648:46:0;;35676:1;:17;;;35648:46;;;;;;:::i;:::-;;;;;;;;34746:956;;;;;:::o;31868:578::-;31966:7;;32002;;31919;;;;;32020:314;32044:9;:16;32040:20;;32020:314;;;32128:7;32104;:21;32112:9;32122:1;32112:12;;;;;;-1:-1:-1;;;32112:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;32112:12:0;32104:21;;;;;;;;;;;;;:31;;:83;;;32180:7;32156;:21;32164:9;32174:1;32164:12;;;;;;-1:-1:-1;;;32164:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;32164:12:0;32156:21;;;;;;;;;;;;;:31;32104:83;32082:146;;;32211:7;;32220;;32203:25;;;;;;;;;32082:146;32254:7;:21;32262:9;32272:1;32262:12;;;;;;-1:-1:-1;;;32262:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;32262:12:0;32254:21;;;;;;;;;;;;;32243:32;;;;:::i;:::-;;;32301:7;:21;32309:9;32319:1;32309:12;;;;;;-1:-1:-1;;;32309:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;32309:12:0;32301:21;;;;;;;;;;;;;32290:32;;;;:::i;:::-;;-1:-1:-1;32062:3:0;;;;:::i;:::-;;;;32020:314;;;;32368:7;;32358;;:17;;;;:::i;:::-;32348:7;:27;32344:58;;;32385:7;;32394;;32377:25;;;;;;;;32344:58;32421:7;;-1:-1:-1;32430:7:0;-1:-1:-1;31868:578:0;;;:::o;37599:428::-;37710:15;;37914:10;;37710:255;;-1:-1:-1;;;37710:255:0;;-1:-1:-1;;;;;37710:15:0;;;;;;;:31;;37749:9;;37710:255;;37782:4;;37802:11;;37828:1;;;;37914:10;;37939:15;;37710:255;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;37981:38;37996:11;38009:9;37981:38;;;;;;;:::i;:::-;;;;;;;;37599:428;;:::o;30580:437::-;30681:28;;:::i;:::-;30732:7;30727:91;;30756:17;;;:27;;;30798:8;;30727:91;30848:12;:16;30868:3;;30838:26;;30848:16;;30838:7;:26;:::i;:::-;30837:34;;;;:::i;:::-;30828:6;;;:43;30905:12;:19;30928:3;;30895:29;;-1:-1:-1;;;30905:19:0;;;;30895:7;:29;:::i;:::-;30894:37;;;;:::i;:::-;30882:9;;;:49;;;30972:6;;;;30962:16;;:7;:16;:::i;:::-;:28;;;;:::i;:::-;30942:17;;;:48;30580:437;;;;:::o;31025:666::-;31234:15;;;;31382:21;31392:11;31382:7;:21;:::i;:::-;31372:31;;31421:7;31416:72;;-1:-1:-1;31453:7:0;;-1:-1:-1;31471:1:0;;-1:-1:-1;31471:1:0;31445:31;;31416:72;31516:11;31507:1;:6;;;:20;;;;:::i;:::-;31500:27;;31560:11;31548:1;:9;;;:23;;;;:::i;:::-;31538:33;-1:-1:-1;31538:33:0;31600:14;31610:4;31600:7;:14;:::i;:::-;:24;;;;:::i;:::-;31582:42;;31025:666;;;;;;;;;;:::o;29760:125::-;29839:4;29828:7;;:15;;;;;;;:::i;:::-;;;;-1:-1:-1;;29854:11:0;:23;;29873:4;;29854:11;:15;;:23;;29873:4;;29854:23;:::i;:::-;;;;-1:-1:-1;;;;29760:125:0:o;29893:231::-;29983:4;29967:22;;;;:7;:22;;;;;:33;;29993:7;;29967:22;:33;;29993:7;;29967:33;:::i;:::-;;;;-1:-1:-1;;30035:4:0;30015:26;;;;:11;:26;;;;;;;;30011:65;;;30059:4;30043:22;;;;:7;:22;;;;;:33;;30069:7;;30043:22;:33;;30069:7;;30043:33;:::i;:::-;;;;-1:-1:-1;;30011:65:0;30109:7;30087:11;:18;;;:29;;;;;;;:::i;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;14:158:1:-;82:20;;142:4;131:16;;121:27;;111:2;;162:1;159;152:12;177:259;;289:2;277:9;268:7;264:23;260:32;257:2;;;310:6;302;295:22;257:2;354:9;341:23;373:33;400:5;373:33;:::i;441:263::-;;564:2;552:9;543:7;539:23;535:32;532:2;;;585:6;577;570:22;532:2;622:9;616:16;641:33;668:5;641:33;:::i;981:402::-;;;1110:2;1098:9;1089:7;1085:23;1081:32;1078:2;;;1131:6;1123;1116:22;1078:2;1175:9;1162:23;1194:33;1221:5;1194:33;:::i;:::-;1246:5;-1:-1:-1;1303:2:1;1288:18;;1275:32;1316:35;1275:32;1316:35;:::i;:::-;1370:7;1360:17;;;1068:315;;;;;:::o;1388:470::-;;;;1534:2;1522:9;1513:7;1509:23;1505:32;1502:2;;;1555:6;1547;1540:22;1502:2;1599:9;1586:23;1618:33;1645:5;1618:33;:::i;:::-;1670:5;-1:-1:-1;1727:2:1;1712:18;;1699:32;1740:35;1699:32;1740:35;:::i;:::-;1492:366;;1794:7;;-1:-1:-1;;;1848:2:1;1833:18;;;;1820:32;;1492:366::o;1863:396::-;;;1989:2;1977:9;1968:7;1964:23;1960:32;1957:2;;;2010:6;2002;1995:22;1957:2;2054:9;2041:23;2073:33;2100:5;2073:33;:::i;:::-;2125:5;-1:-1:-1;2182:2:1;2167:18;;2154:32;2195;2154;2195;:::i;2264:327::-;;;2393:2;2381:9;2372:7;2368:23;2364:32;2361:2;;;2414:6;2406;2399:22;2361:2;2458:9;2445:23;2477:33;2504:5;2477:33;:::i;:::-;2529:5;2581:2;2566:18;;;;2553:32;;-1:-1:-1;;;2351:240:1:o;2596:253::-;;2705:2;2693:9;2684:7;2680:23;2676:32;2673:2;;;2726:6;2718;2711:22;2673:2;2770:9;2757:23;2789:30;2813:5;2789:30;:::i;2854:257::-;;2974:2;2962:9;2953:7;2949:23;2945:32;2942:2;;;2995:6;2987;2980:22;2942:2;3032:9;3026:16;3051:30;3075:5;3051:30;:::i;3116:190::-;;3228:2;3216:9;3207:7;3203:23;3199:32;3196:2;;;3249:6;3241;3234:22;3196:2;-1:-1:-1;3277:23:1;;3186:120;-1:-1:-1;3186:120:1:o;3311:327::-;;;3440:2;3428:9;3419:7;3415:23;3411:32;3408:2;;;3461:6;3453;3446:22;3408:2;3502:9;3489:23;3479:33;;3562:2;3551:9;3547:18;3534:32;3575:33;3602:5;3575:33;:::i;3643:321::-;;;3769:2;3757:9;3748:7;3744:23;3740:32;3737:2;;;3790:6;3782;3775:22;3737:2;3831:9;3818:23;3808:33;;3891:2;3880:9;3876:18;3863:32;3904:30;3928:5;3904:30;:::i;3969:258::-;;;4098:2;4086:9;4077:7;4073:23;4069:32;4066:2;;;4119:6;4111;4104:22;4066:2;-1:-1:-1;;4147:23:1;;;4217:2;4202:18;;;4189:32;;-1:-1:-1;4056:171:1:o;4232:316::-;;;;4389:2;4377:9;4368:7;4364:23;4360:32;4357:2;;;4410:6;4402;4395:22;4357:2;4444:9;4438:16;4428:26;;4494:2;4483:9;4479:18;4473:25;4463:35;;4538:2;4527:9;4523:18;4517:25;4507:35;;4347:201;;;;;:::o;4553:411::-;;;;;4708:3;4696:9;4687:7;4683:23;4679:33;4676:2;;;4730:6;4722;4715:22;4676:2;4758:29;4777:9;4758:29;:::i;:::-;4748:39;;4806:38;4840:2;4829:9;4825:18;4806:38;:::i;:::-;4796:48;;4863:38;4897:2;4886:9;4882:18;4863:38;:::i;:::-;4853:48;;4920:38;4954:2;4943:9;4939:18;4920:38;:::i;:::-;4910:48;;4666:298;;;;;;;:::o;4969:205::-;5169:3;5160:14::o;5179:203::-;-1:-1:-1;;;;;5343:32:1;;;;5325:51;;5313:2;5298:18;;5280:102::o;5611:274::-;-1:-1:-1;;;;;5803:32:1;;;;5785:51;;5867:2;5852:18;;5845:34;5773:2;5758:18;;5740:145::o;5890:615::-;-1:-1:-1;;;;;6257:15:1;;;6239:34;;6304:2;6289:18;;6282:34;;;;6347:2;6332:18;;6325:34;;;;6390:2;6375:18;;6368:34;;;;6439:15;;;6433:3;6418:19;;6411:44;6219:3;6471:19;;6464:35;;;;6188:3;6173:19;;6155:350::o;6510:187::-;6675:14;;6668:22;6650:41;;6638:2;6623:18;;6605:92::o;6936:603::-;;7077:2;7106;7095:9;7088:21;7138:6;7132:13;7181:6;7176:2;7165:9;7161:18;7154:34;7206:4;7219:140;7233:6;7230:1;7227:13;7219:140;;;7328:14;;;7324:23;;7318:30;7294:17;;;7313:2;7290:26;7283:66;7248:10;;7219:140;;;7377:6;7374:1;7371:13;7368:2;;;7447:4;7442:2;7433:6;7422:9;7418:22;7414:31;7407:45;7368:2;-1:-1:-1;7523:2:1;7502:15;-1:-1:-1;;7498:29:1;7483:45;;;;7530:2;7479:54;;7057:482;-1:-1:-1;;;7057:482:1:o;7544:399::-;7746:2;7728:21;;;7785:2;7765:18;;;7758:30;7824:34;7819:2;7804:18;;7797:62;-1:-1:-1;;;7890:2:1;7875:18;;7868:33;7933:3;7918:19;;7718:225::o;7948:413::-;8150:2;8132:21;;;8189:2;8169:18;;;8162:30;8228:34;8223:2;8208:18;;8201:62;-1:-1:-1;;;8294:2:1;8279:18;;8272:47;8351:3;8336:19;;8122:239::o;8366:406::-;8568:2;8550:21;;;8607:2;8587:18;;;8580:30;8646:34;8641:2;8626:18;;8619:62;-1:-1:-1;;;8712:2:1;8697:18;;8690:40;8762:3;8747:19;;8540:232::o;8777:402::-;8979:2;8961:21;;;9018:2;8998:18;;;8991:30;9057:34;9052:2;9037:18;;9030:62;-1:-1:-1;;;9123:2:1;9108:18;;9101:36;9169:3;9154:19;;8951:228::o;9184:398::-;9386:2;9368:21;;;9425:2;9405:18;;;9398:30;9464:34;9459:2;9444:18;;9437:62;-1:-1:-1;;;9530:2:1;9515:18;;9508:32;9572:3;9557:19;;9358:224::o;9587:420::-;9789:2;9771:21;;;9828:2;9808:18;;;9801:30;9867:34;9862:2;9847:18;;9840:62;9938:26;9933:2;9918:18;;9911:54;9997:3;9982:19;;9761:246::o;10012:397::-;10214:2;10196:21;;;10253:2;10233:18;;;10226:30;10292:34;10287:2;10272:18;;10265:62;-1:-1:-1;;;10358:2:1;10343:18;;10336:31;10399:3;10384:19;;10186:223::o;10414:356::-;10616:2;10598:21;;;10635:18;;;10628:30;10694:34;10689:2;10674:18;;10667:62;10761:2;10746:18;;10588:182::o;10775:351::-;10977:2;10959:21;;;11016:2;10996:18;;;10989:30;11055:29;11050:2;11035:18;;11028:57;11117:2;11102:18;;10949:177::o;11131:414::-;11333:2;11315:21;;;11372:2;11352:18;;;11345:30;11411:34;11406:2;11391:18;;11384:62;-1:-1:-1;;;11477:2:1;11462:18;;11455:48;11535:3;11520:19;;11305:240::o;11550:422::-;11752:2;11734:21;;;11791:2;11771:18;;;11764:30;11830:34;11825:2;11810:18;;11803:62;11901:28;11896:2;11881:18;;11874:56;11962:3;11947:19;;11724:248::o;11977:347::-;12179:2;12161:21;;;12218:2;12198:18;;;12191:30;12257:25;12252:2;12237:18;;12230:53;12315:2;12300:18;;12151:173::o;12329:353::-;12531:2;12513:21;;;12570:2;12550:18;;;12543:30;12609:31;12604:2;12589:18;;12582:59;12673:2;12658:18;;12503:179::o;12687:356::-;12889:2;12871:21;;;12908:18;;;12901:30;12967:34;12962:2;12947:18;;12940:62;13034:2;13019:18;;12861:182::o;13048:355::-;13250:2;13232:21;;;13289:2;13269:18;;;13262:30;13328:33;13323:2;13308:18;;13301:61;13394:2;13379:18;;13222:181::o;13408:348::-;13610:2;13592:21;;;13649:2;13629:18;;;13622:30;13688:26;13683:2;13668:18;;13661:54;13747:2;13732:18;;13582:174::o;13761:404::-;13963:2;13945:21;;;14002:2;13982:18;;;13975:30;14041:34;14036:2;14021:18;;14014:62;-1:-1:-1;;;14107:2:1;14092:18;;14085:38;14155:3;14140:19;;13935:230::o;14170:356::-;14372:2;14354:21;;;14391:18;;;14384:30;14450:34;14445:2;14430:18;;14423:62;14517:2;14502:18;;14344:182::o;14531:405::-;14733:2;14715:21;;;14772:2;14752:18;;;14745:30;14811:34;14806:2;14791:18;;14784:62;-1:-1:-1;;;14877:2:1;14862:18;;14855:39;14926:3;14911:19;;14705:231::o;14941:411::-;15143:2;15125:21;;;15182:2;15162:18;;;15155:30;15221:34;15216:2;15201:18;;15194:62;-1:-1:-1;;;15287:2:1;15272:18;;15265:45;15342:3;15327:19;;15115:237::o;15357:401::-;15559:2;15541:21;;;15598:2;15578:18;;;15571:30;15637:34;15632:2;15617:18;;15610:62;-1:-1:-1;;;15703:2:1;15688:18;;15681:35;15748:3;15733:19;;15531:227::o;15763:400::-;15965:2;15947:21;;;16004:2;15984:18;;;15977:30;16043:34;16038:2;16023:18;;16016:62;-1:-1:-1;;;16109:2:1;16094:18;;16087:34;16153:3;16138:19;;15937:226::o;16168:401::-;16370:2;16352:21;;;16409:2;16389:18;;;16382:30;16448:34;16443:2;16428:18;;16421:62;-1:-1:-1;;;16514:2:1;16499:18;;16492:35;16559:3;16544:19;;16342:227::o;16574:177::-;16720:25;;;16708:2;16693:18;;16675:76::o;16756:983::-;;17066:3;17055:9;17051:19;17097:6;17086:9;17079:25;17123:2;17161:6;17156:2;17145:9;17141:18;17134:34;17204:3;17199:2;17188:9;17184:18;17177:31;17228:6;17263;17257:13;17294:6;17286;17279:22;17332:3;17321:9;17317:19;17310:26;;17371:2;17363:6;17359:15;17345:29;;17392:4;17405:195;17419:6;17416:1;17413:13;17405:195;;;17484:13;;-1:-1:-1;;;;;17480:39:1;17468:52;;17575:15;;;;17540:12;;;;17516:1;17434:9;17405:195;;;-1:-1:-1;;;;;;;17656:32:1;;;;17651:2;17636:18;;17629:60;-1:-1:-1;;;17720:3:1;17705:19;17698:35;17617:3;17027:712;-1:-1:-1;;;17027:712:1:o;17744:248::-;17918:25;;;17974:2;17959:18;;17952:34;17906:2;17891:18;;17873:119::o;17997:184::-;18169:4;18157:17;;;;18139:36;;18127:2;18112:18;;18094:87::o;18186:498::-;18455:4;18443:17;;;18425:36;;18497:17;;;18492:2;18477:18;;18470:45;18551:17;;;18546:2;18531:18;;18524:45;18605:17;;18600:2;18585:18;;18578:45;18660:17;;;18654:3;18639:19;;18632:46;18412:3;18397:19;;18379:305::o;18689:128::-;;18760:1;18756:6;18753:1;18750:13;18747:2;;;18766:18;;:::i;:::-;-1:-1:-1;18802:9:1;;18737:80::o;18822:204::-;;18896:4;18893:1;18889:12;18928:4;18925:1;18921:12;18963:3;18957:4;18953:14;18948:3;18945:23;18942:2;;;18971:18;;:::i;:::-;19007:13;;18868:158;-1:-1:-1;;;18868:158:1:o;19031:217::-;;19097:1;19087:2;;-1:-1:-1;;;19122:31:1;;19176:4;19173:1;19166:15;19204:4;19129:1;19194:15;19087:2;-1:-1:-1;19233:9:1;;19077:171::o;19253:453::-;19349:6;19372:5;19386:314;19435:1;19472:2;19462:8;19459:16;19449:2;;19479:5;;;19449:2;19520:4;19515:3;19511:14;19505:4;19502:24;19499:2;;;19529:18;;:::i;:::-;19579:2;19569:8;19565:17;19562:2;;;19594:16;;;;19562:2;19673:17;;;;;19633:15;;19386:314;;;19330:376;;;;;;;:::o;19711:148::-;;19798:55;-1:-1:-1;;19839:4:1;19825:19;;19819:4;19864:922;19948:8;19938:2;;-1:-1:-1;19989:1:1;20003:5;;19938:2;20037:4;20027:2;;-1:-1:-1;20074:1:1;20088:5;;20027:2;20119:4;20137:1;20132:59;;;;20205:1;20200:183;;;;20112:271;;20132:59;20162:1;20153:10;;20176:5;;;20200:183;20237:3;20227:8;20224:17;20221:2;;;20244:18;;:::i;:::-;20300:1;20290:8;20286:16;20277:25;;20328:3;20321:5;20318:14;20315:2;;;20335:18;;:::i;:::-;20368:5;;;20112:271;;20467:2;20457:8;20454:16;20448:3;20442:4;20439:13;20435:36;20429:2;20419:8;20416:16;20411:2;20405:4;20402:12;20398:35;20395:77;20392:2;;;-1:-1:-1;20504:19:1;;;20539:14;;;20536:2;;;20556:18;;:::i;:::-;20589:5;;20392:2;20636:42;20674:3;20664:8;20658:4;20655:1;20636:42;:::i;:::-;20711:6;20706:3;20702:16;20693:7;20690:29;20687:2;;;20722:18;;:::i;:::-;20760:20;;19928:858;-1:-1:-1;;;;19928:858:1:o;20791:168::-;;20897:1;20893;20889:6;20885:14;20882:1;20879:21;20874:1;20867:9;20860:17;20856:45;20853:2;;;20904:18;;:::i;:::-;-1:-1:-1;20944:9:1;;20843:116::o;20964:238::-;;21042:4;21039:1;21035:12;21074:4;21071:1;21067:12;21134:3;21128:4;21124:14;21119:3;21116:23;21109:3;21102:11;21095:19;21091:49;21088:2;;;21143:18;;:::i;:::-;21183:13;;21014:188;-1:-1:-1;;;21014:188:1:o;21207:125::-;;21275:1;21272;21269:8;21266:2;;;21280:18;;:::i;:::-;-1:-1:-1;21317:9:1;;21256:76::o;21337:135::-;;-1:-1:-1;;21397:17:1;;21394:2;;;21417:18;;:::i;:::-;-1:-1:-1;21464:1:1;21453:13;;21384:88::o;21477:127::-;21538:10;21533:3;21529:20;21526:1;21519:31;21569:4;21566:1;21559:15;21593:4;21590:1;21583:15;21609:133;-1:-1:-1;;;;;21686:31:1;;21676:42;;21666:2;;21732:1;21729;21722:12;21747:120;21835:5;21828:13;21821:21;21814:5;21811:32;21801:2;;21857:1;21854;21847:12
Swarm Source
ipfs://8c686757f9aeee4a1f60370b2604cac5806e678546532082e006f5058b7ce7b7
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.