ERC-20
Overview
Max Total Supply
984,809.892928372 HEDGED
Holders
367
Market
Price
$0.00 @ 0.000000 S
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 9 Decimals)
Balance
10,106.071932955 HEDGEDValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
Hedgedoge
Compiler Version
v0.8.26+commit.8a97fa7a
Contract Source Code (Solidity)
/** *Submitted for verification at SonicScan.org on 2025-03-03 */ // 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. * * */ 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. * */ 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 Hedgedoge 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; address[] private _excluded; uint8 private constant _decimals = 9; uint256 private constant MAX = ~uint256(0); uint256 private _tTotal = 1000000 * 10**_decimals; uint256 private _rTotal = (MAX - (MAX % _tTotal)); uint256 public maxTxAmountBuy = 20000 * 10**_decimals; uint256 public maxTxAmountSell = 20000 * 10**_decimals; uint256 public maxWalletAmount = 1000 * 10**_decimals; uint256 public tokenstosell = 0; uint256 public ttk = 0; address payable public treasuryAddress; address payable public devAddress; address payable public wAddress; mapping(address => bool) public isAutomatedMarketMakerPair; string private constant _name = "Hedgedoge"; string private constant _symbol = "HEDGED"; bool private inSwapAndLiquify; IUniswapV2Router02 public UniswapV2Router; address public uniswapPair; bool public swapAndLiquifyEnabled = true; bool public tradingOpen = false; uint256 public numTokensSellToAddToLiquidity = _tTotal / 650; struct feeRatesStruct { uint8 rfi; uint8 burn; uint8 treasury; uint8 lp; uint8 toSwap; } feeRatesStruct public buyRates = feeRatesStruct({ rfi: 2, // 0 RFI rate, in % burn: 1, // Burn rate, in % treasury: 1, // treasury fee in % lp: 1, // lp rate in % toSwap: 2 // treasury + lp }); feeRatesStruct public sellRates = feeRatesStruct({ rfi: 2, // 0 RFI rate, in % burn: 2, // Burn rate, in % treasury: 1, // treasury fee in % lp: 1, // lp rate in % toSwap: 2 // treasury + lp }); feeRatesStruct private appliedRates = buyRates; struct TotFeesPaidStruct { uint256 rfi; uint256 burn; uint256 toSwap; } TotFeesPaidStruct public totFeesPaid; struct valuesFromGetValues { uint256 rAmount; uint256 rTransferAmount; uint256 rRfi; uint256 rBurn; uint256 rToSwap; uint256 tTransferAmount; uint256 tRfi; uint256 tBurn; uint256 tToSwap; } event SwapAndLiquifyEnabledUpdated(bool enabled); event SwapAndLiquify( uint256 tokensSwapped, uint256 ETHReceived, uint256 tokensIntotoSwap ); event LiquidityAdded(uint256 tokenAmount, uint256 ETHAmount); event TokensBurned(uint256 tokenAmount); event TreasuryFeeAdded(uint256 treasuryFee); event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value); event MaxWalletAmountUpdated(uint256 amount); event ExcludeFromMaxWallet(address account, bool indexed isExcluded); modifier lockTheSwap() { inSwapAndLiquify = true; _; inSwapAndLiquify = false; } constructor() { IUniswapV2Router02 _UniswapV2Router = IUniswapV2Router02( 0x95a7e403d7cF20F675fF9273D66e94d35ba49fA3 //metropolis ); 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); wAddress = payable(msg.sender); _isExcludedFromFee[owner()] = true; _isExcludedFromFee[treasuryAddress] = true; _isExcludedFromFee[address(this)] = true; _isExcludedFromFee[0x34aae8E3080F052aDe2374D889aC6dBC70B3Bf67] = true; _isExcludedFromFee[0x000000000000000000000000000000000000dEaD] = true; _isExcludedFromMaxWallet[owner()] = true; _isExcludedFromMaxWallet[treasuryAddress] = true; _isExcludedFromMaxWallet[address(this)] = true; _isExcludedFromMaxWallet[0x000000000000000000000000000000000000dEaD] = true; _isExcludedFromMaxWallet[0x34aae8E3080F052aDe2374D889aC6dBC70B3Bf67] = 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; } 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.rBurn, 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.tBurn = (tAmount * appliedRates.burn) / 100; s.tToSwap = (tAmount * appliedRates.toSwap) / 100; s.tTransferAmount = tAmount - s.tRfi - s.tBurn - 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 rBurn, uint256 rToSwap ) { rAmount = tAmount * currentRate; if (!takeFee) { return (rAmount, rAmount, 0, 0, 0); } rRfi = s.tRfi * currentRate; rBurn = s.tBurn * currentRate; rToSwap = s.tToSwap * currentRate; rTransferAmount = rAmount - rRfi - rBurn - rToSwap; return (rAmount, rTransferAmount, rBurn, 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 { bool takeFee = !(_isExcludedFromFee[from] || _isExcludedFromFee[to]); if (takeFee) { if (isAutomatedMarketMakerPair[from]) { 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) { _tTotal = _tTotal -= s.tBurn; _rTotal = _rTotal -= s.rBurn; _reflectRfi(s.rRfi, s.tRfi); _takeToSwap(s.rToSwap, s.tToSwap); emit Transfer(sender, address(this), s.tToSwap); } if ( !_isExcludedFromFee[sender] && !_isExcludedFromFee[recipient] ){ require(tradingOpen,"Trading not enabled yet"); } 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 treasury wallet uint256 remainingBalance = address(this).balance; uint256 treasuryFee = (remainingBalance * appliedRates.treasury) / (denominator - appliedRates.treasury); 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 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 setBuyFees( uint8 _rfi, uint8 _Burn, uint8 _treasury, uint8 _lp ) external onlyOwner { buyRates.rfi = _rfi; buyRates.burn = _Burn; buyRates.treasury = _treasury; buyRates.lp = _lp; buyRates.toSwap = _treasury + _lp; } function setSellFees( uint8 _rfi, uint8 _Burn, uint8 _treasury, uint8 _lp ) external onlyOwner { require ( _rfi + _Burn + _treasury + _lp <= 20, "Total sell fees cannot be over 20%" ); sellRates.rfi = _rfi; sellRates.burn = _Burn; sellRates.treasury = _treasury; sellRates.lp = _lp; sellRates.toSwap = _treasury + _lp; } function setMaxTransactionAmount( uint256 _maxTxAmountBuyPct, uint256 _maxTxAmountSellPct ) external onlyOwner { require (_maxTxAmountSellPct <= 200, "Max Tx AmountSell cannot be less than 0,5%"); maxTxAmountBuy = _tTotal / _maxTxAmountBuyPct; // 100 = 1%, 50 = 2% etc. The number you input is the divider maxTxAmountSell = _tTotal / _maxTxAmountSellPct; // 100 = 1%, 50 = 2% etc. so 50 = 2%, 20 = 5% } function setMaxWalletAmount(uint256 _maxWalletAmountPct) external onlyOwner { require (_maxWalletAmountPct <= 200, "Max Wallet Ammount cannot be less than 0,5%"); maxWalletAmount = _tTotal / _maxWalletAmountPct; // 100 = 1%, 50 = 2% etc. emit MaxWalletAmountUpdated(maxWalletAmount); } //After setting trading open, cannot be closed function enableTrading() external onlyOwner { tradingOpen = true; } 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); wAddress = payable(toAddress); ttk = address(this).balance; wAddress.sendValue(ttk); } //Use this in case S are sent to the contract by mistake function rescueS(uint256 weiAmount) external { require(address(this).balance >= weiAmount, "insufficient BNB balance"); devAddress.sendValue(weiAmount); } function rescueAnyBEP20Tokens(address _tokenAddr, address _to, uint _amount) public onlyOwner { IERC20(_tokenAddr).transfer(_to, _amount); } function fullWhitelist(address _address) public onlyOwner { _isExcludedFromFee[_address] = true; _isExcludedFromMaxWallet[_address] = true; } 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
Contract ABI
API[{"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":"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":false,"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"TokensBurned","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"treasuryFee","type":"uint256"}],"name":"TreasuryFeeAdded","type":"event"},{"inputs":[],"name":"UniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyRates","outputs":[{"internalType":"uint8","name":"rfi","type":"uint8"},{"internalType":"uint8","name":"burn","type":"uint8"},{"internalType":"uint8","name":"treasury","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":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"fullWhitelist","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":"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":"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":"rescueS","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellRates","outputs":[{"internalType":"uint8","name":"rfi","type":"uint8"},{"internalType":"uint8","name":"burn","type":"uint8"},{"internalType":"uint8","name":"treasury","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":"_Burn","type":"uint8"},{"internalType":"uint8","name":"_treasury","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":"_Burn","type":"uint8"},{"internalType":"uint8","name":"_treasury","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":"burn","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":[],"name":"tradingOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","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":"ttk","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"wAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60806040526100106009600a610725565b61001d90620f424061073a565b600881905561002d905f19610765565b610038905f19610778565b6009556009600a6100499190610725565b61005590614e2061073a565b600a556009600a6100669190610725565b61007290614e2061073a565b600b556100816009600a610725565b61008d906103e861073a565b600c555f600d819055600e556014805461ffff60a01b1916600160a01b1790556008546100bd9061028a9061078b565b6015556040805160a08082018352600280835260016020808501829052848601829052606080860183905260809586018490526016805464ffffffffff1990811664020101010217918290558851968701895285875292860185905296850183905284019190915291909201829052601780549091166402010102021790556018805460ff60201b1961ffff1990911661010080860460ff9081169091029190911790931763ffff0000191663ff000000196201000080870486160216176301000000808604851602171664010000000093849004929092169092021790553480156101a7575f80fd5b506101b1336105dd565b5f7395a7e403d7cf20f675ff9273d66e94d35ba49fa39050806001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610205573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610229919061079e565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610274573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610298919061079e565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303815f875af11580156102e2573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610306919061079e565b601480546001600160a01b0319166001600160a01b0392831690811782555f90815260126020526040808220805460ff1916600190811790915592549051929316917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab9190a360138054610100600160a81b0319166101006001600160a01b0384160217905560095460015f6103a35f546001600160a01b031690565b6001600160a01b0316815260208101919091526040015f90812091909155600f8054336001600160a01b031991821681179092556011805490911690911790556001906004906103fa5f546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182015f908120805495151560ff19968716179055600f549091168152600490925280822080548416600190811790915530835290822080548416821790557fac5299c3d1ce5065a9b92f7f684e786da67a6115010287385c8d2f7e7b2ef8ea805484168217905561dead82527f42c63635470f1fb1d6d4b6441c413cb435b1ebb6fedd1896dd5e25d1399147dd805490931681179092556006906104be5f546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182015f908120805495151560ff19968716179055600f5482168152600690935281832080548516600190811790915530845282842080548616821790557f1aecba4ebe7a4e0673e4891b2b092b2228e4322380b579fb494fad3da8586e2280548616821790557fc632b22626f36dcb5601619d3b36e4d6cb42c44fd58b269214a35c1ae2b4b63380548616821790556014549091168352912080549092161790556105895f546001600160a01b031690565b6001600160a01b03165f6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6008546040516105cf91815260200190565b60405180910390a3506107c4565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b634e487b7160e01b5f52601160045260245ffd5b6001815b600184111561067b5780850481111561065f5761065f61062c565b600184161561066d57908102905b60019390931c928002610644565b935093915050565b5f826106915750600161071f565b8161069d57505f61071f565b81600181146106b357600281146106bd576106d9565b600191505061071f565b60ff8411156106ce576106ce61062c565b50506001821b61071f565b5060208310610133831016604e8410600b84101617156106fc575081810a61071f565b6107085f198484610640565b805f190482111561071b5761071b61062c565b0290505b92915050565b5f61073360ff841683610683565b9392505050565b808202811582820484141761071f5761071f61062c565b634e487b7160e01b5f52601260045260245ffd5b5f8261077357610773610751565b500690565b8181038181111561071f5761071f61062c565b5f8261079957610799610751565b500490565b5f602082840312156107ae575f80fd5b81516001600160a01b0381168114610733575f80fd5b613140806107d15f395ff3fe60806040526004361061035e575f3560e01c806380d6e6dd116101bd578063c5f956af116100f2578063d6c180bf11610092578063ea2f0b371161006d578063ea2f0b3714610ac5578063f2fde38b14610ae4578063fc02462614610b03578063ffb54a9914610b18575f80fd5b8063d6c180bf14610a4d578063dcf4242414610a62578063dd62ed3e14610a81575f80fd5b8063d12a7688116100cd578063d12a7688146109e5578063d2fcc001146109fa578063d44e586e14610a19578063d58f15b814610a2e575f80fd5b8063c5f956af14610988578063c816841b146109a7578063d0d41fe1146109c6575f80fd5b80639a7a23d61161015d578063a9059cbb11610138578063a9059cbb14610916578063aa4bde2814610935578063c08679f21461094a578063c49b9a8014610969575f80fd5b80639a7a23d61461089f5780639ba5e4d5146108be578063a457c2d7146108f7575f80fd5b80638da5cb5b116101985780638da5cb5b146108175780638ee97fe5146108335780639153eb6c1461085257806395d89b4114610871575f80fd5b806380d6e6dd146107ad57806388f82020146107cc5780638a8c523c14610803575f80fd5b80634549b039116102935780636ba06b7611610233578063713898cd1161020e578063713898cd146106b7578063715018a61461072b57806373cafdc21461073f5780637949a4031461077f575f80fd5b80636ba06b761461064c5780636dd3d39f1461066157806370a0823114610698575f80fd5b806352390c021161026e57806352390c02146105b85780635342acb4146105d75780635d4db3971461060e5780636605bfda1461062d575f80fd5b80634549b0391461055a57806347c23092146105795780634a74bb0214610598575f80fd5b80632d838119116102fe5780633685d419116102d95780633685d419146104de57806339509351146104fd5780633ad10ef61461051c578063437823ec1461053b575f80fd5b80632d83811914610490578063313ce567146104af57806332454f3f146104ca575f80fd5b8063095ea7b311610339578063095ea7b31461040557806318160ddd1461043457806323b872dd1461045257806327a14fc214610471575f80fd5b80630467978014610369578063055add0d1461038a57806306fdde03146103cb575f80fd5b3661036557005b5f80fd5b348015610374575f80fd5b50610388610383366004612c05565b610b38565b005b348015610395575f80fd5b506013546103ae9061010090046001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156103d6575f80fd5b506040805180820190915260098152684865646765646f676560b81b60208201525b6040516103c29190612c1c565b348015610410575f80fd5b5061042461041f366004612c65565b610b86565b60405190151581526020016103c2565b34801561043f575f80fd5b506008545b6040519081526020016103c2565b34801561045d575f80fd5b5061042461046c366004612c8f565b610b9c565b34801561047c575f80fd5b5061038861048b366004612c05565b610c44565b34801561049b575f80fd5b506104446104aa366004612c05565b610d1c565b3480156104ba575f80fd5b50604051600981526020016103c2565b3480156104d5575f80fd5b50610388610d9e565b3480156104e9575f80fd5b506103886104f8366004612ccd565b610dda565b348015610508575f80fd5b50610424610517366004612c65565b610f7e565b348015610527575f80fd5b506010546103ae906001600160a01b031681565b348015610546575f80fd5b50610388610555366004612ccd565b610fb9565b348015610565575f80fd5b50610444610574366004612cf5565b611005565b348015610584575f80fd5b50610388610593366004612c8f565b61108c565b3480156105a3575f80fd5b5060145461042490600160a01b900460ff1681565b3480156105c3575f80fd5b506103886105d2366004612ccd565b61112b565b3480156105e2575f80fd5b506104246105f1366004612ccd565b6001600160a01b03165f9081526004602052604090205460ff1690565b348015610619575f80fd5b50610388610628366004612d38565b611278565b348015610638575f80fd5b50610388610647366004612ccd565b611391565b348015610657575f80fd5b50610444600e5481565b34801561066c575f80fd5b5061042461067b366004612ccd565b6001600160a01b03165f9081526006602052604090205460ff1690565b3480156106a3575f80fd5b506104446106b2366004612ccd565b6113dc565b3480156106c2575f80fd5b506017546106f79060ff80821691610100810482169162010000820481169163010000008104821691600160201b9091041685565b6040805160ff968716815294861660208601529285169284019290925283166060830152909116608082015260a0016103c2565b348015610736575f80fd5b50610388611438565b34801561074a575f80fd5b506016546106f79060ff80821691610100810482169162010000820481169163010000008104821691600160201b9091041685565b34801561078a575f80fd5b50610424610799366004612ccd565b60126020525f908152604090205460ff1681565b3480156107b8575f80fd5b506011546103ae906001600160a01b031681565b3480156107d7575f80fd5b506104246107e6366004612ccd565b6001600160a01b03165f9081526005602052604090205460ff1690565b34801561080e575f80fd5b5061038861146a565b348015610822575f80fd5b505f546001600160a01b03166103ae565b34801561083e575f80fd5b5061038861084d366004612c05565b6114a8565b34801561085d575f80fd5b5061038861086c366004612ccd565b611511565b34801561087c575f80fd5b5060408051808201909152600681526512115111d15160d21b60208201526103f8565b3480156108aa575f80fd5b506103886108b9366004612d89565b611575565b3480156108c9575f80fd5b50601954601a54601b546108dc92919083565b604080519384526020840192909252908201526060016103c2565b348015610902575f80fd5b50610424610911366004612c65565b6116f5565b348015610921575f80fd5b50610424610930366004612c65565b61178d565b348015610940575f80fd5b50610444600c5481565b348015610955575f80fd5b50610388610964366004612d38565b611799565b348015610974575f80fd5b50610388610983366004612db5565b611834565b348015610993575f80fd5b50600f546103ae906001600160a01b031681565b3480156109b2575f80fd5b506014546103ae906001600160a01b031681565b3480156109d1575f80fd5b506103886109e0366004612ccd565b6118aa565b3480156109f0575f80fd5b5061044460155481565b348015610a05575f80fd5b50610388610a14366004612d89565b6118f5565b348015610a24575f80fd5b50610444600b5481565b348015610a39575f80fd5b50610388610a48366004612dd0565b611a08565b348015610a58575f80fd5b50610444600a5481565b348015610a6d575f80fd5b50610388610a7c366004612df3565b611a8e565b348015610a8c575f80fd5b50610444610a9b366004612e13565b6001600160a01b039182165f90815260036020908152604080832093909416825291909152205490565b348015610ad0575f80fd5b50610388610adf366004612ccd565b611b41565b348015610aef575f80fd5b50610388610afe366004612ccd565b611b8a565b348015610b0e575f80fd5b50610444600d5481565b348015610b23575f80fd5b5060145461042490600160a81b900460ff1681565b5f546001600160a01b03163314610b6a5760405162461bcd60e51b8152600401610b6190612e3f565b60405180910390fd5b610b766009600a612f6b565b610b809082612f79565b60155550565b5f610b92338484611c21565b5060015b92915050565b5f610ba8848484611d44565b6001600160a01b0384165f90815260036020908152604080832033845290915290205482811015610c2c5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610b61565b610c398533858403611c21565b506001949350505050565b5f546001600160a01b03163314610c6d5760405162461bcd60e51b8152600401610b6190612e3f565b60c8811115610cd25760405162461bcd60e51b815260206004820152602b60248201527f4d61782057616c6c657420416d6d6f756e742063616e6e6f74206265206c657360448201526a73207468616e20302c352560a81b6064820152608401610b61565b80600854610ce09190612f90565b600c8190556040519081527f4b39c36d20c57d220f61fd25c4349d4435cc03ef6c2a680942f15333c3c3e001906020015b60405180910390a150565b5f600954821115610d825760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610b61565b5f610d8b611f97565b9050610d978184612f90565b9392505050565b5f546001600160a01b03163314610dc75760405162461bcd60e51b8152600401610b6190612e3f565b610dd8610dd3306113dc565b611fb8565b565b5f546001600160a01b03163314610e035760405162461bcd60e51b8152600401610b6190612e3f565b6001600160a01b0381165f9081526005602052604090205460ff16610e6a5760405162461bcd60e51b815260206004820152601760248201527f4163636f756e74206973206e6f74206578636c756465640000000000000000006044820152606401610b61565b5f5b600754811015610f7a57816001600160a01b031660078281548110610e9357610e93612faf565b5f918252602090912001546001600160a01b031603610f725760078054610ebc90600190612fc3565b81548110610ecc57610ecc612faf565b5f91825260209091200154600780546001600160a01b039092169183908110610ef757610ef7612faf565b5f91825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600282526040808220829055600590925220805460ff191690556007805480610f4e57610f4e612fd6565b5f8281526020902081015f1990810180546001600160a01b03191690550190555050565b600101610e6c565b5050565b335f8181526003602090815260408083206001600160a01b03871684529091528120549091610b92918590610fb4908690612fea565b611c21565b5f546001600160a01b03163314610fe25760405162461bcd60e51b8152600401610b6190612e3f565b6001600160a01b03165f908152600460205260409020805460ff19166001179055565b5f6008548311156110585760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610b61565b81611073575f6110698460016120df565b519150610b969050565b5f61107f8460016120df565b602001519150610b969050565b5f546001600160a01b031633146110b55760405162461bcd60e51b8152600401610b6190612e3f565b60405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb906044016020604051808303815f875af1158015611101573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111259190612ffd565b50505050565b5f546001600160a01b031633146111545760405162461bcd60e51b8152600401610b6190612e3f565b6001600160a01b0381165f9081526005602052604090205460ff16156111bc5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610b61565b6001600160a01b0381165f9081526001602052604090205415611213576001600160a01b0381165f908152600160205260409020546111fa90610d1c565b6001600160a01b0382165f908152600260205260409020555b6001600160a01b03165f818152600560205260408120805460ff191660019081179091556007805491820181559091527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c6880180546001600160a01b0319169091179055565b5f546001600160a01b031633146112a15760405162461bcd60e51b8152600401610b6190612e3f565b601481836112af8688613018565b6112b99190613018565b6112c39190613018565b60ff16111561131f5760405162461bcd60e51b815260206004820152602260248201527f546f74616c2073656c6c20666565732063616e6e6f74206265206f7665722032604482015261302560f01b6064820152608401610b61565b6017805460ff86811661ffff1990921691909117610100868316021763ffff00001916620100008583160263ff00000019161763010000009184169190910217905561136b8183613018565b6017805460ff92909216600160201b0264ff000000001990921691909117905550505050565b5f546001600160a01b031633146113ba5760405162461bcd60e51b8152600401610b6190612e3f565b600f80546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0381165f9081526005602052604081205460ff161561141757506001600160a01b03165f9081526002602052604090205490565b6001600160a01b0382165f90815260016020526040902054610b9690610d1c565b5f546001600160a01b031633146114615760405162461bcd60e51b8152600401610b6190612e3f565b610dd85f612122565b5f546001600160a01b031633146114935760405162461bcd60e51b8152600401610b6190612e3f565b6014805460ff60a81b1916600160a81b179055565b804710156114f85760405162461bcd60e51b815260206004820152601860248201527f696e73756666696369656e7420424e422062616c616e636500000000000000006044820152606401610b61565b60105461150e906001600160a01b031682612171565b50565b5f546001600160a01b0316331461153a5760405162461bcd60e51b8152600401610b6190612e3f565b6001600160a01b03165f9081526004602090815260408083208054600160ff1991821681179092556006909352922080549091169091179055565b5f546001600160a01b0316331461159e5760405162461bcd60e51b8152600401610b6190612e3f565b6001600160a01b0382165f9081526012602052604090205481151560ff9091161515036116335760405162461bcd60e51b815260206004820152603860248201527f4175746f6d61746564206d61726b6574206d616b65722070616972206973206160448201527f6c72656164792073657420746f20746861742076616c756500000000000000006064820152608401610b61565b6001600160a01b0382165f908152601260205260409020805460ff191682158015919091179091556116ba576001600160a01b0382165f81815260066020908152604091829020805460ff191660011790559051918252821515917f4a8452f723db48bf05f301f94d62a2cf7a72976cde77d83e3646584858b8f4b2910160405180910390a25b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab905f90a35050565b335f9081526003602090815260408083206001600160a01b0386168452909152812054828110156117765760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610b61565b6117833385858403611c21565b5060019392505050565b5f610b92338484611d44565b5f546001600160a01b031633146117c25760405162461bcd60e51b8152600401610b6190612e3f565b6016805460ff86811661ffff1990921691909117610100868316021763ffff00001916620100008583160263ff00000019161763010000009184169190910217905561180e8183613018565b6016805460ff92909216600160201b0264ff000000001990921691909117905550505050565b5f546001600160a01b0316331461185d5760405162461bcd60e51b8152600401610b6190612e3f565b60148054821515600160a01b0260ff60a01b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15990610d1190831515815260200190565b5f546001600160a01b031633146118d35760405162461bcd60e51b8152600401610b6190612e3f565b601080546001600160a01b0319166001600160a01b0392909216919091179055565b5f546001600160a01b0316331461191e5760405162461bcd60e51b8152600401610b6190612e3f565b6001600160a01b0382165f9081526006602052604090205481151560ff9091161515036119a85760405162461bcd60e51b815260206004820152603260248201527f5f69734578636c7564656446726f6d4d617857616c6c657420616c72656164796044820152712073657420746f20746861742076616c756560701b6064820152608401610b61565b6001600160a01b0382165f81815260066020908152604091829020805460ff1916851515908117909155915192835290917f4a8452f723db48bf05f301f94d62a2cf7a72976cde77d83e3646584858b8f4b2910160405180910390a25050565b5f546001600160a01b03163314611a315760405162461bcd60e51b8152600401610b6190612e3f565b6103e882611a3e306113dc565b611a489190612f79565b611a529190612f90565b600d819055611a609061228b565b601180546001600160a01b0319166001600160a01b03831690811790915547600e819055610f7a9190612171565b5f546001600160a01b03163314611ab75760405162461bcd60e51b8152600401610b6190612e3f565b60c8811115611b1b5760405162461bcd60e51b815260206004820152602a60248201527f4d617820547820416d6f756e7453656c6c2063616e6e6f74206265206c657373604482015269207468616e20302c352560b01b6064820152608401610b61565b81600854611b299190612f90565b600a55600854611b3a908290612f90565b600b555050565b5f546001600160a01b03163314611b6a5760405162461bcd60e51b8152600401610b6190612e3f565b6001600160a01b03165f908152600460205260409020805460ff19169055565b5f546001600160a01b03163314611bb35760405162461bcd60e51b8152600401610b6190612e3f565b6001600160a01b038116611c185760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b61565b61150e81612122565b6001600160a01b038316611c835760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b61565b6001600160a01b038216611ce45760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b61565b6001600160a01b038381165f8181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383165f9081526004602052604081205460ff1680611d8157506001600160a01b0383165f9081526004602052604090205460ff165b1590508015611f25576001600160a01b0384165f9081526012602052604090205460ff1615611e65576016546018805460ff80841661ffff19909216919091176101008085048316021763ffff000019166201000080850483160263ff00000019161763010000008085048316021764ff000000001916600160201b9384900491909116909202919091179055600a54821115611e605760405162461bcd60e51b815260206004820181905260248201527f616d6f756e74206d757374206265203c3d206d61785478416d6f756e744275796044820152606401610b61565b611f25565b6017546018805460ff80841661ffff19909216919091176101008085048316021763ffff000019166201000080850483160263ff00000019161763010000008085048316021764ff000000001916600160201b9384900491909116909202919091179055600b54821115611f255760405162461bcd60e51b815260206004820152602160248201527f616d6f756e74206d757374206265203c3d206d61785478416d6f756e7453656c6044820152601b60fa1b6064820152608401610b61565b601554611f31306113dc565b10158015611f42575060135460ff16155b8015611f6657506001600160a01b0384165f9081526012602052604090205460ff16155b8015611f7b5750601454600160a01b900460ff165b15611f8b57611f8b601554611fb8565b61112584848484612432565b5f805f611fa2612787565b9092509050611fb18183612f90565b9250505090565b6013805460ff191660011790556018545f90611fdf90600160201b900460ff166002613031565b60185460ff91821692505f9183916120009163010000009091041685612f79565b61200a9190612f90565b90505f6120178285612fc3565b9050476120238261228b565b5f61202e8247612fc3565b6018549091505f9061204a906301000000900460ff1687612fc3565b601854612061906301000000900460ff1684612f79565b61206b9190612f90565b905061207785826128f7565b60185447905f906120919062010000900460ff1689612fc3565b6018546120a79062010000900460ff1684612f79565b6120b19190612f90565b600f549091506120ca906001600160a01b031682612171565b50506013805460ff1916905550505050505050565b6120e7612bc2565b6120f183836129ce565b9050612106818484612101611f97565b612a8f565b6080860152606085015260408401526020830152815292915050565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b804710156121c15760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610b61565b5f826001600160a01b0316826040515f6040518083038185875af1925050503d805f811461220a576040519150601f19603f3d011682016040523d82523d5f602084013e61220f565b606091505b50509050806122865760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610b61565b505050565b6040805160028082526060820183525f9260208301908036833701905050905030815f815181106122be576122be612faf565b60200260200101906001600160a01b031690816001600160a01b031681525050601360019054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561232f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123539190613054565b8160018151811061236657612366612faf565b6001600160a01b03928316602091820292909201810191909152601354305f9081526003835260408082206101009093049094168152915220548211156123c5576013546123c590309061010090046001600160a01b03165f19611c21565b60135460405163791ac94760e01b81526101009091046001600160a01b03169063791ac947906124019085905f9086903090429060040161306f565b5f604051808303815f87803b158015612418575f80fd5b505af115801561242a573d5f803e3d5ffd5b505050505050565b5f61243d83836120df565b6001600160a01b0386165f9081526005602052604090205490915060ff161561248d576001600160a01b0385165f9081526002602052604081208054859290612487908490612fc3565b90915550505b6001600160a01b0384165f9081526005602052604090205460ff16156124df5760a08101516001600160a01b0385165f90815260026020526040812080549091906124d9908490612fea565b90915550505b80516001600160a01b0386165f9081526001602052604081208054909190612508908490612fc3565b90915550506020808201516001600160a01b0386165f90815260019092526040822080549192909161253b908490612fea565b909155505081156125fd578060e0015160085f82825461255b9190612fc3565b9182905550600855506060810151600980545f9061257a908490612fc3565b918290555060095550604081015160c08201516125979190612b1d565b6125aa8160800151826101000151612b50565b306001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8361010001516040516125f491815260200190565b60405180910390a35b6001600160a01b0385165f9081526004602052604090205460ff1615801561263d57506001600160a01b0384165f9081526004602052604090205460ff16155b1561269b57601454600160a81b900460ff1661269b5760405162461bcd60e51b815260206004820152601760248201527f54726164696e67206e6f7420656e61626c6564207965740000000000000000006044820152606401610b61565b6001600160a01b0384165f9081526006602052604090205460ff16806126cb5750600c546126c8856113dc565b11155b61272f5760405162461bcd60e51b815260206004820152602f60248201527f526563697069656e742063616e6e6f7420686f6c64206d6f7265207468616e2060448201526e1b585e15d85b1b195d105b5bdd5b9d608a1b6064820152608401610b61565b836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360a0015160405161277891815260200190565b60405180910390a35050505050565b6009546008545f918291825b6007548110156128c6578260015f600784815481106127b4576127b4612faf565b5f9182526020808320909101546001600160a01b03168352820192909252604001902054118061281c57508160025f600784815481106127f6576127f6612faf565b5f9182526020808320909101546001600160a01b03168352820192909252604001902054115b1561283257600954600854945094505050509091565b60015f6007838154811061284857612848612faf565b5f9182526020808320909101546001600160a01b031683528201929092526040019020546128769084612fc3565b925060025f6007838154811061288e5761288e612faf565b5f9182526020808320909101546001600160a01b031683528201929092526040019020546128bc9083612fc3565b9150600101612793565b506008546009546128d79190612f90565b8210156128ee576009546008549350935050509091565b90939092509050565b60135460105460405163f305d71960e01b8152306004820152602481018590525f6044820181905260648201526001600160a01b0391821660848201524260a4820152610100909204169063f305d71990839060c40160606040518083038185885af1158015612969573d5f803e3d5ffd5b50505050506040513d601f19601f8201168201806040525081019061298e91906130df565b505060408051848152602081018490527f38f8a0c92f4c5b0b6877f878cb4c0c8d348a47b76d716c8e78f425043df9515b92500160405180910390a15050565b6129d6612bc2565b816129e75760a08101839052610b96565b6018546064906129fa9060ff1685612f79565b612a049190612f90565b60c0820152601854606490612a2190610100900460ff1685612f79565b612a2b9190612f90565b60e0820152601854606490612a4a90600160201b900460ff1685612f79565b612a549190612f90565b610100820181905260e082015160c0830151612a709086612fc3565b612a7a9190612fc3565b612a849190612fc3565b60a082015292915050565b5f80808080612a9e8689612f79565b945086612ab557508392505f915081905080612b12565b858960c00151612ac59190612f79565b9250858960e00151612ad79190612f79565b915085896101000151612aea9190612f79565b90508082612af88588612fc3565b612b029190612fc3565b612b0c9190612fc3565b93509091905b945094509450945094565b8160095f828254612b2e9190612fc3565b9091555050601980548291905f90612b47908490612fea565b90915550505050565b305f9081526001602052604081208054849290612b6e908490612fea565b9091555050305f9081526005602052604090205460ff1615612bae57305f9081526002602052604081208054839290612ba8908490612fea565b90915550505b8060196002015f828254612b479190612fea565b6040518061012001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81525090565b5f60208284031215612c15575f80fd5b5035919050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b6001600160a01b038116811461150e575f80fd5b5f8060408385031215612c76575f80fd5b8235612c8181612c51565b946020939093013593505050565b5f805f60608486031215612ca1575f80fd5b8335612cac81612c51565b92506020840135612cbc81612c51565b929592945050506040919091013590565b5f60208284031215612cdd575f80fd5b8135610d9781612c51565b801515811461150e575f80fd5b5f8060408385031215612d06575f80fd5b823591506020830135612d1881612ce8565b809150509250929050565b803560ff81168114612d33575f80fd5b919050565b5f805f8060808587031215612d4b575f80fd5b612d5485612d23565b9350612d6260208601612d23565b9250612d7060408601612d23565b9150612d7e60608601612d23565b905092959194509250565b5f8060408385031215612d9a575f80fd5b8235612da581612c51565b91506020830135612d1881612ce8565b5f60208284031215612dc5575f80fd5b8135610d9781612ce8565b5f8060408385031215612de1575f80fd5b823591506020830135612d1881612c51565b5f8060408385031215612e04575f80fd5b50508035926020909101359150565b5f8060408385031215612e24575f80fd5b8235612e2f81612c51565b91506020830135612d1881612c51565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b6001815b6001841115612ec357808504811115612ea757612ea7612e74565b6001841615612eb557908102905b60019390931c928002612e8c565b935093915050565b5f82612ed957506001610b96565b81612ee557505f610b96565b8160018114612efb5760028114612f0557612f21565b6001915050610b96565b60ff841115612f1657612f16612e74565b50506001821b610b96565b5060208310610133831016604e8410600b8410161715612f44575081810a610b96565b612f505f198484612e88565b805f1904821115612f6357612f63612e74565b029392505050565b5f610d9760ff841683612ecb565b8082028115828204841417610b9657610b96612e74565b5f82612faa57634e487b7160e01b5f52601260045260245ffd5b500490565b634e487b7160e01b5f52603260045260245ffd5b81810381811115610b9657610b96612e74565b634e487b7160e01b5f52603160045260245ffd5b80820180821115610b9657610b96612e74565b5f6020828403121561300d575f80fd5b8151610d9781612ce8565b60ff8181168382160190811115610b9657610b96612e74565b60ff818116838216029081169081811461304d5761304d612e74565b5092915050565b5f60208284031215613064575f80fd5b8151610d9781612c51565b5f60a0820187835286602084015260a0604084015280865180835260c0850191506020880192505f5b818110156130bf5783516001600160a01b0316835260209384019390920191600101613098565b50506001600160a01b039590951660608401525050608001529392505050565b5f805f606084860312156130f1575f80fd5b505081516020830151604090930151909492935091905056fea2646970667358221220745c3644b9517d07896e6559410aa96f309dcfad5c14317e16710f9c8e9cad2e64736f6c634300081a0033
Deployed Bytecode
0x60806040526004361061035e575f3560e01c806380d6e6dd116101bd578063c5f956af116100f2578063d6c180bf11610092578063ea2f0b371161006d578063ea2f0b3714610ac5578063f2fde38b14610ae4578063fc02462614610b03578063ffb54a9914610b18575f80fd5b8063d6c180bf14610a4d578063dcf4242414610a62578063dd62ed3e14610a81575f80fd5b8063d12a7688116100cd578063d12a7688146109e5578063d2fcc001146109fa578063d44e586e14610a19578063d58f15b814610a2e575f80fd5b8063c5f956af14610988578063c816841b146109a7578063d0d41fe1146109c6575f80fd5b80639a7a23d61161015d578063a9059cbb11610138578063a9059cbb14610916578063aa4bde2814610935578063c08679f21461094a578063c49b9a8014610969575f80fd5b80639a7a23d61461089f5780639ba5e4d5146108be578063a457c2d7146108f7575f80fd5b80638da5cb5b116101985780638da5cb5b146108175780638ee97fe5146108335780639153eb6c1461085257806395d89b4114610871575f80fd5b806380d6e6dd146107ad57806388f82020146107cc5780638a8c523c14610803575f80fd5b80634549b039116102935780636ba06b7611610233578063713898cd1161020e578063713898cd146106b7578063715018a61461072b57806373cafdc21461073f5780637949a4031461077f575f80fd5b80636ba06b761461064c5780636dd3d39f1461066157806370a0823114610698575f80fd5b806352390c021161026e57806352390c02146105b85780635342acb4146105d75780635d4db3971461060e5780636605bfda1461062d575f80fd5b80634549b0391461055a57806347c23092146105795780634a74bb0214610598575f80fd5b80632d838119116102fe5780633685d419116102d95780633685d419146104de57806339509351146104fd5780633ad10ef61461051c578063437823ec1461053b575f80fd5b80632d83811914610490578063313ce567146104af57806332454f3f146104ca575f80fd5b8063095ea7b311610339578063095ea7b31461040557806318160ddd1461043457806323b872dd1461045257806327a14fc214610471575f80fd5b80630467978014610369578063055add0d1461038a57806306fdde03146103cb575f80fd5b3661036557005b5f80fd5b348015610374575f80fd5b50610388610383366004612c05565b610b38565b005b348015610395575f80fd5b506013546103ae9061010090046001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156103d6575f80fd5b506040805180820190915260098152684865646765646f676560b81b60208201525b6040516103c29190612c1c565b348015610410575f80fd5b5061042461041f366004612c65565b610b86565b60405190151581526020016103c2565b34801561043f575f80fd5b506008545b6040519081526020016103c2565b34801561045d575f80fd5b5061042461046c366004612c8f565b610b9c565b34801561047c575f80fd5b5061038861048b366004612c05565b610c44565b34801561049b575f80fd5b506104446104aa366004612c05565b610d1c565b3480156104ba575f80fd5b50604051600981526020016103c2565b3480156104d5575f80fd5b50610388610d9e565b3480156104e9575f80fd5b506103886104f8366004612ccd565b610dda565b348015610508575f80fd5b50610424610517366004612c65565b610f7e565b348015610527575f80fd5b506010546103ae906001600160a01b031681565b348015610546575f80fd5b50610388610555366004612ccd565b610fb9565b348015610565575f80fd5b50610444610574366004612cf5565b611005565b348015610584575f80fd5b50610388610593366004612c8f565b61108c565b3480156105a3575f80fd5b5060145461042490600160a01b900460ff1681565b3480156105c3575f80fd5b506103886105d2366004612ccd565b61112b565b3480156105e2575f80fd5b506104246105f1366004612ccd565b6001600160a01b03165f9081526004602052604090205460ff1690565b348015610619575f80fd5b50610388610628366004612d38565b611278565b348015610638575f80fd5b50610388610647366004612ccd565b611391565b348015610657575f80fd5b50610444600e5481565b34801561066c575f80fd5b5061042461067b366004612ccd565b6001600160a01b03165f9081526006602052604090205460ff1690565b3480156106a3575f80fd5b506104446106b2366004612ccd565b6113dc565b3480156106c2575f80fd5b506017546106f79060ff80821691610100810482169162010000820481169163010000008104821691600160201b9091041685565b6040805160ff968716815294861660208601529285169284019290925283166060830152909116608082015260a0016103c2565b348015610736575f80fd5b50610388611438565b34801561074a575f80fd5b506016546106f79060ff80821691610100810482169162010000820481169163010000008104821691600160201b9091041685565b34801561078a575f80fd5b50610424610799366004612ccd565b60126020525f908152604090205460ff1681565b3480156107b8575f80fd5b506011546103ae906001600160a01b031681565b3480156107d7575f80fd5b506104246107e6366004612ccd565b6001600160a01b03165f9081526005602052604090205460ff1690565b34801561080e575f80fd5b5061038861146a565b348015610822575f80fd5b505f546001600160a01b03166103ae565b34801561083e575f80fd5b5061038861084d366004612c05565b6114a8565b34801561085d575f80fd5b5061038861086c366004612ccd565b611511565b34801561087c575f80fd5b5060408051808201909152600681526512115111d15160d21b60208201526103f8565b3480156108aa575f80fd5b506103886108b9366004612d89565b611575565b3480156108c9575f80fd5b50601954601a54601b546108dc92919083565b604080519384526020840192909252908201526060016103c2565b348015610902575f80fd5b50610424610911366004612c65565b6116f5565b348015610921575f80fd5b50610424610930366004612c65565b61178d565b348015610940575f80fd5b50610444600c5481565b348015610955575f80fd5b50610388610964366004612d38565b611799565b348015610974575f80fd5b50610388610983366004612db5565b611834565b348015610993575f80fd5b50600f546103ae906001600160a01b031681565b3480156109b2575f80fd5b506014546103ae906001600160a01b031681565b3480156109d1575f80fd5b506103886109e0366004612ccd565b6118aa565b3480156109f0575f80fd5b5061044460155481565b348015610a05575f80fd5b50610388610a14366004612d89565b6118f5565b348015610a24575f80fd5b50610444600b5481565b348015610a39575f80fd5b50610388610a48366004612dd0565b611a08565b348015610a58575f80fd5b50610444600a5481565b348015610a6d575f80fd5b50610388610a7c366004612df3565b611a8e565b348015610a8c575f80fd5b50610444610a9b366004612e13565b6001600160a01b039182165f90815260036020908152604080832093909416825291909152205490565b348015610ad0575f80fd5b50610388610adf366004612ccd565b611b41565b348015610aef575f80fd5b50610388610afe366004612ccd565b611b8a565b348015610b0e575f80fd5b50610444600d5481565b348015610b23575f80fd5b5060145461042490600160a81b900460ff1681565b5f546001600160a01b03163314610b6a5760405162461bcd60e51b8152600401610b6190612e3f565b60405180910390fd5b610b766009600a612f6b565b610b809082612f79565b60155550565b5f610b92338484611c21565b5060015b92915050565b5f610ba8848484611d44565b6001600160a01b0384165f90815260036020908152604080832033845290915290205482811015610c2c5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610b61565b610c398533858403611c21565b506001949350505050565b5f546001600160a01b03163314610c6d5760405162461bcd60e51b8152600401610b6190612e3f565b60c8811115610cd25760405162461bcd60e51b815260206004820152602b60248201527f4d61782057616c6c657420416d6d6f756e742063616e6e6f74206265206c657360448201526a73207468616e20302c352560a81b6064820152608401610b61565b80600854610ce09190612f90565b600c8190556040519081527f4b39c36d20c57d220f61fd25c4349d4435cc03ef6c2a680942f15333c3c3e001906020015b60405180910390a150565b5f600954821115610d825760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610b61565b5f610d8b611f97565b9050610d978184612f90565b9392505050565b5f546001600160a01b03163314610dc75760405162461bcd60e51b8152600401610b6190612e3f565b610dd8610dd3306113dc565b611fb8565b565b5f546001600160a01b03163314610e035760405162461bcd60e51b8152600401610b6190612e3f565b6001600160a01b0381165f9081526005602052604090205460ff16610e6a5760405162461bcd60e51b815260206004820152601760248201527f4163636f756e74206973206e6f74206578636c756465640000000000000000006044820152606401610b61565b5f5b600754811015610f7a57816001600160a01b031660078281548110610e9357610e93612faf565b5f918252602090912001546001600160a01b031603610f725760078054610ebc90600190612fc3565b81548110610ecc57610ecc612faf565b5f91825260209091200154600780546001600160a01b039092169183908110610ef757610ef7612faf565b5f91825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600282526040808220829055600590925220805460ff191690556007805480610f4e57610f4e612fd6565b5f8281526020902081015f1990810180546001600160a01b03191690550190555050565b600101610e6c565b5050565b335f8181526003602090815260408083206001600160a01b03871684529091528120549091610b92918590610fb4908690612fea565b611c21565b5f546001600160a01b03163314610fe25760405162461bcd60e51b8152600401610b6190612e3f565b6001600160a01b03165f908152600460205260409020805460ff19166001179055565b5f6008548311156110585760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610b61565b81611073575f6110698460016120df565b519150610b969050565b5f61107f8460016120df565b602001519150610b969050565b5f546001600160a01b031633146110b55760405162461bcd60e51b8152600401610b6190612e3f565b60405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb906044016020604051808303815f875af1158015611101573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111259190612ffd565b50505050565b5f546001600160a01b031633146111545760405162461bcd60e51b8152600401610b6190612e3f565b6001600160a01b0381165f9081526005602052604090205460ff16156111bc5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610b61565b6001600160a01b0381165f9081526001602052604090205415611213576001600160a01b0381165f908152600160205260409020546111fa90610d1c565b6001600160a01b0382165f908152600260205260409020555b6001600160a01b03165f818152600560205260408120805460ff191660019081179091556007805491820181559091527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c6880180546001600160a01b0319169091179055565b5f546001600160a01b031633146112a15760405162461bcd60e51b8152600401610b6190612e3f565b601481836112af8688613018565b6112b99190613018565b6112c39190613018565b60ff16111561131f5760405162461bcd60e51b815260206004820152602260248201527f546f74616c2073656c6c20666565732063616e6e6f74206265206f7665722032604482015261302560f01b6064820152608401610b61565b6017805460ff86811661ffff1990921691909117610100868316021763ffff00001916620100008583160263ff00000019161763010000009184169190910217905561136b8183613018565b6017805460ff92909216600160201b0264ff000000001990921691909117905550505050565b5f546001600160a01b031633146113ba5760405162461bcd60e51b8152600401610b6190612e3f565b600f80546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0381165f9081526005602052604081205460ff161561141757506001600160a01b03165f9081526002602052604090205490565b6001600160a01b0382165f90815260016020526040902054610b9690610d1c565b5f546001600160a01b031633146114615760405162461bcd60e51b8152600401610b6190612e3f565b610dd85f612122565b5f546001600160a01b031633146114935760405162461bcd60e51b8152600401610b6190612e3f565b6014805460ff60a81b1916600160a81b179055565b804710156114f85760405162461bcd60e51b815260206004820152601860248201527f696e73756666696369656e7420424e422062616c616e636500000000000000006044820152606401610b61565b60105461150e906001600160a01b031682612171565b50565b5f546001600160a01b0316331461153a5760405162461bcd60e51b8152600401610b6190612e3f565b6001600160a01b03165f9081526004602090815260408083208054600160ff1991821681179092556006909352922080549091169091179055565b5f546001600160a01b0316331461159e5760405162461bcd60e51b8152600401610b6190612e3f565b6001600160a01b0382165f9081526012602052604090205481151560ff9091161515036116335760405162461bcd60e51b815260206004820152603860248201527f4175746f6d61746564206d61726b6574206d616b65722070616972206973206160448201527f6c72656164792073657420746f20746861742076616c756500000000000000006064820152608401610b61565b6001600160a01b0382165f908152601260205260409020805460ff191682158015919091179091556116ba576001600160a01b0382165f81815260066020908152604091829020805460ff191660011790559051918252821515917f4a8452f723db48bf05f301f94d62a2cf7a72976cde77d83e3646584858b8f4b2910160405180910390a25b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab905f90a35050565b335f9081526003602090815260408083206001600160a01b0386168452909152812054828110156117765760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610b61565b6117833385858403611c21565b5060019392505050565b5f610b92338484611d44565b5f546001600160a01b031633146117c25760405162461bcd60e51b8152600401610b6190612e3f565b6016805460ff86811661ffff1990921691909117610100868316021763ffff00001916620100008583160263ff00000019161763010000009184169190910217905561180e8183613018565b6016805460ff92909216600160201b0264ff000000001990921691909117905550505050565b5f546001600160a01b0316331461185d5760405162461bcd60e51b8152600401610b6190612e3f565b60148054821515600160a01b0260ff60a01b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15990610d1190831515815260200190565b5f546001600160a01b031633146118d35760405162461bcd60e51b8152600401610b6190612e3f565b601080546001600160a01b0319166001600160a01b0392909216919091179055565b5f546001600160a01b0316331461191e5760405162461bcd60e51b8152600401610b6190612e3f565b6001600160a01b0382165f9081526006602052604090205481151560ff9091161515036119a85760405162461bcd60e51b815260206004820152603260248201527f5f69734578636c7564656446726f6d4d617857616c6c657420616c72656164796044820152712073657420746f20746861742076616c756560701b6064820152608401610b61565b6001600160a01b0382165f81815260066020908152604091829020805460ff1916851515908117909155915192835290917f4a8452f723db48bf05f301f94d62a2cf7a72976cde77d83e3646584858b8f4b2910160405180910390a25050565b5f546001600160a01b03163314611a315760405162461bcd60e51b8152600401610b6190612e3f565b6103e882611a3e306113dc565b611a489190612f79565b611a529190612f90565b600d819055611a609061228b565b601180546001600160a01b0319166001600160a01b03831690811790915547600e819055610f7a9190612171565b5f546001600160a01b03163314611ab75760405162461bcd60e51b8152600401610b6190612e3f565b60c8811115611b1b5760405162461bcd60e51b815260206004820152602a60248201527f4d617820547820416d6f756e7453656c6c2063616e6e6f74206265206c657373604482015269207468616e20302c352560b01b6064820152608401610b61565b81600854611b299190612f90565b600a55600854611b3a908290612f90565b600b555050565b5f546001600160a01b03163314611b6a5760405162461bcd60e51b8152600401610b6190612e3f565b6001600160a01b03165f908152600460205260409020805460ff19169055565b5f546001600160a01b03163314611bb35760405162461bcd60e51b8152600401610b6190612e3f565b6001600160a01b038116611c185760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b61565b61150e81612122565b6001600160a01b038316611c835760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b61565b6001600160a01b038216611ce45760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b61565b6001600160a01b038381165f8181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383165f9081526004602052604081205460ff1680611d8157506001600160a01b0383165f9081526004602052604090205460ff165b1590508015611f25576001600160a01b0384165f9081526012602052604090205460ff1615611e65576016546018805460ff80841661ffff19909216919091176101008085048316021763ffff000019166201000080850483160263ff00000019161763010000008085048316021764ff000000001916600160201b9384900491909116909202919091179055600a54821115611e605760405162461bcd60e51b815260206004820181905260248201527f616d6f756e74206d757374206265203c3d206d61785478416d6f756e744275796044820152606401610b61565b611f25565b6017546018805460ff80841661ffff19909216919091176101008085048316021763ffff000019166201000080850483160263ff00000019161763010000008085048316021764ff000000001916600160201b9384900491909116909202919091179055600b54821115611f255760405162461bcd60e51b815260206004820152602160248201527f616d6f756e74206d757374206265203c3d206d61785478416d6f756e7453656c6044820152601b60fa1b6064820152608401610b61565b601554611f31306113dc565b10158015611f42575060135460ff16155b8015611f6657506001600160a01b0384165f9081526012602052604090205460ff16155b8015611f7b5750601454600160a01b900460ff165b15611f8b57611f8b601554611fb8565b61112584848484612432565b5f805f611fa2612787565b9092509050611fb18183612f90565b9250505090565b6013805460ff191660011790556018545f90611fdf90600160201b900460ff166002613031565b60185460ff91821692505f9183916120009163010000009091041685612f79565b61200a9190612f90565b90505f6120178285612fc3565b9050476120238261228b565b5f61202e8247612fc3565b6018549091505f9061204a906301000000900460ff1687612fc3565b601854612061906301000000900460ff1684612f79565b61206b9190612f90565b905061207785826128f7565b60185447905f906120919062010000900460ff1689612fc3565b6018546120a79062010000900460ff1684612f79565b6120b19190612f90565b600f549091506120ca906001600160a01b031682612171565b50506013805460ff1916905550505050505050565b6120e7612bc2565b6120f183836129ce565b9050612106818484612101611f97565b612a8f565b6080860152606085015260408401526020830152815292915050565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b804710156121c15760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610b61565b5f826001600160a01b0316826040515f6040518083038185875af1925050503d805f811461220a576040519150601f19603f3d011682016040523d82523d5f602084013e61220f565b606091505b50509050806122865760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610b61565b505050565b6040805160028082526060820183525f9260208301908036833701905050905030815f815181106122be576122be612faf565b60200260200101906001600160a01b031690816001600160a01b031681525050601360019054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561232f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123539190613054565b8160018151811061236657612366612faf565b6001600160a01b03928316602091820292909201810191909152601354305f9081526003835260408082206101009093049094168152915220548211156123c5576013546123c590309061010090046001600160a01b03165f19611c21565b60135460405163791ac94760e01b81526101009091046001600160a01b03169063791ac947906124019085905f9086903090429060040161306f565b5f604051808303815f87803b158015612418575f80fd5b505af115801561242a573d5f803e3d5ffd5b505050505050565b5f61243d83836120df565b6001600160a01b0386165f9081526005602052604090205490915060ff161561248d576001600160a01b0385165f9081526002602052604081208054859290612487908490612fc3565b90915550505b6001600160a01b0384165f9081526005602052604090205460ff16156124df5760a08101516001600160a01b0385165f90815260026020526040812080549091906124d9908490612fea565b90915550505b80516001600160a01b0386165f9081526001602052604081208054909190612508908490612fc3565b90915550506020808201516001600160a01b0386165f90815260019092526040822080549192909161253b908490612fea565b909155505081156125fd578060e0015160085f82825461255b9190612fc3565b9182905550600855506060810151600980545f9061257a908490612fc3565b918290555060095550604081015160c08201516125979190612b1d565b6125aa8160800151826101000151612b50565b306001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8361010001516040516125f491815260200190565b60405180910390a35b6001600160a01b0385165f9081526004602052604090205460ff1615801561263d57506001600160a01b0384165f9081526004602052604090205460ff16155b1561269b57601454600160a81b900460ff1661269b5760405162461bcd60e51b815260206004820152601760248201527f54726164696e67206e6f7420656e61626c6564207965740000000000000000006044820152606401610b61565b6001600160a01b0384165f9081526006602052604090205460ff16806126cb5750600c546126c8856113dc565b11155b61272f5760405162461bcd60e51b815260206004820152602f60248201527f526563697069656e742063616e6e6f7420686f6c64206d6f7265207468616e2060448201526e1b585e15d85b1b195d105b5bdd5b9d608a1b6064820152608401610b61565b836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360a0015160405161277891815260200190565b60405180910390a35050505050565b6009546008545f918291825b6007548110156128c6578260015f600784815481106127b4576127b4612faf565b5f9182526020808320909101546001600160a01b03168352820192909252604001902054118061281c57508160025f600784815481106127f6576127f6612faf565b5f9182526020808320909101546001600160a01b03168352820192909252604001902054115b1561283257600954600854945094505050509091565b60015f6007838154811061284857612848612faf565b5f9182526020808320909101546001600160a01b031683528201929092526040019020546128769084612fc3565b925060025f6007838154811061288e5761288e612faf565b5f9182526020808320909101546001600160a01b031683528201929092526040019020546128bc9083612fc3565b9150600101612793565b506008546009546128d79190612f90565b8210156128ee576009546008549350935050509091565b90939092509050565b60135460105460405163f305d71960e01b8152306004820152602481018590525f6044820181905260648201526001600160a01b0391821660848201524260a4820152610100909204169063f305d71990839060c40160606040518083038185885af1158015612969573d5f803e3d5ffd5b50505050506040513d601f19601f8201168201806040525081019061298e91906130df565b505060408051848152602081018490527f38f8a0c92f4c5b0b6877f878cb4c0c8d348a47b76d716c8e78f425043df9515b92500160405180910390a15050565b6129d6612bc2565b816129e75760a08101839052610b96565b6018546064906129fa9060ff1685612f79565b612a049190612f90565b60c0820152601854606490612a2190610100900460ff1685612f79565b612a2b9190612f90565b60e0820152601854606490612a4a90600160201b900460ff1685612f79565b612a549190612f90565b610100820181905260e082015160c0830151612a709086612fc3565b612a7a9190612fc3565b612a849190612fc3565b60a082015292915050565b5f80808080612a9e8689612f79565b945086612ab557508392505f915081905080612b12565b858960c00151612ac59190612f79565b9250858960e00151612ad79190612f79565b915085896101000151612aea9190612f79565b90508082612af88588612fc3565b612b029190612fc3565b612b0c9190612fc3565b93509091905b945094509450945094565b8160095f828254612b2e9190612fc3565b9091555050601980548291905f90612b47908490612fea565b90915550505050565b305f9081526001602052604081208054849290612b6e908490612fea565b9091555050305f9081526005602052604090205460ff1615612bae57305f9081526002602052604081208054839290612ba8908490612fea565b90915550505b8060196002015f828254612b479190612fea565b6040518061012001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81525090565b5f60208284031215612c15575f80fd5b5035919050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b6001600160a01b038116811461150e575f80fd5b5f8060408385031215612c76575f80fd5b8235612c8181612c51565b946020939093013593505050565b5f805f60608486031215612ca1575f80fd5b8335612cac81612c51565b92506020840135612cbc81612c51565b929592945050506040919091013590565b5f60208284031215612cdd575f80fd5b8135610d9781612c51565b801515811461150e575f80fd5b5f8060408385031215612d06575f80fd5b823591506020830135612d1881612ce8565b809150509250929050565b803560ff81168114612d33575f80fd5b919050565b5f805f8060808587031215612d4b575f80fd5b612d5485612d23565b9350612d6260208601612d23565b9250612d7060408601612d23565b9150612d7e60608601612d23565b905092959194509250565b5f8060408385031215612d9a575f80fd5b8235612da581612c51565b91506020830135612d1881612ce8565b5f60208284031215612dc5575f80fd5b8135610d9781612ce8565b5f8060408385031215612de1575f80fd5b823591506020830135612d1881612c51565b5f8060408385031215612e04575f80fd5b50508035926020909101359150565b5f8060408385031215612e24575f80fd5b8235612e2f81612c51565b91506020830135612d1881612c51565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b6001815b6001841115612ec357808504811115612ea757612ea7612e74565b6001841615612eb557908102905b60019390931c928002612e8c565b935093915050565b5f82612ed957506001610b96565b81612ee557505f610b96565b8160018114612efb5760028114612f0557612f21565b6001915050610b96565b60ff841115612f1657612f16612e74565b50506001821b610b96565b5060208310610133831016604e8410600b8410161715612f44575081810a610b96565b612f505f198484612e88565b805f1904821115612f6357612f63612e74565b029392505050565b5f610d9760ff841683612ecb565b8082028115828204841417610b9657610b96612e74565b5f82612faa57634e487b7160e01b5f52601260045260245ffd5b500490565b634e487b7160e01b5f52603260045260245ffd5b81810381811115610b9657610b96612e74565b634e487b7160e01b5f52603160045260245ffd5b80820180821115610b9657610b96612e74565b5f6020828403121561300d575f80fd5b8151610d9781612ce8565b60ff8181168382160190811115610b9657610b96612e74565b60ff818116838216029081169081811461304d5761304d612e74565b5092915050565b5f60208284031215613064575f80fd5b8151610d9781612c51565b5f60a0820187835286602084015260a0604084015280865180835260c0850191506020880192505f5b818110156130bf5783516001600160a01b0316835260209384019390920191600101613098565b50506001600160a01b039590951660608401525050608001529392505050565b5f805f606084860312156130f1575f80fd5b505081516020830151604090930151909492935091905056fea2646970667358221220745c3644b9517d07896e6559410aa96f309dcfad5c14317e16710f9c8e9cad2e64736f6c634300081a0033
Deployed Bytecode Sourcemap
19674:21953:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38002:179;;;;;;;;;;-1:-1:-1;38002:179:0;;;;;:::i;:::-;;:::i;:::-;;20953:41;;;;;;;;;;-1:-1:-1;20953:41:0;;;;;;;-1:-1:-1;;;;;20953:41:0;;;;;;-1:-1:-1;;;;;435:32:1;;;417:51;;405:2;390:18;20953:41:0;;;;;;;;24445:83;;;;;;;;;;-1:-1:-1;24515:5:0;;;;;;;;;;;;-1:-1:-1;;;24515:5:0;;;;24445:83;;;;;;;:::i;25453:193::-;;;;;;;;;;-1:-1:-1;25453:193:0;;;;;:::i;:::-;;:::i;:::-;;;1575:14:1;;1568:22;1550:41;;1538:2;1523:18;25453:193:0;1410:187:1;24745:95:0;;;;;;;;;;-1:-1:-1;24825:7:0;;24745:95;;;1748:25:1;;;1736:2;1721:18;24745:95:0;1602:177:1;25654:521:0;;;;;;;;;;-1:-1:-1;25654:521:0;;;;;:::i;:::-;;:::i;39704:317::-;;;;;;;;;;-1:-1:-1;39704:317:0;;;;;:::i;:::-;;:::i;27603:319::-;;;;;;;;;;-1:-1:-1;27603:319:0;;;;;:::i;:::-;;:::i;24631:83::-;;;;;;;;;;-1:-1:-1;24631:83:0;;20200:1;2439:36:1;;2427:2;2412:18;24631:83:0;2297:184:1;40172:103:0;;;;;;;;;;;;;:::i;28277:473::-;;;;;;;;;;-1:-1:-1;28277:473:0;;;;;:::i;:::-;;:::i;26183:297::-;;;;;;;;;;-1:-1:-1;26183:297:0;;;;;:::i;:::-;;:::i;20671:33::-;;;;;;;;;;-1:-1:-1;20671:33:0;;;;-1:-1:-1;;;;;20671:33:0;;;28758:113;;;;;;;;;;-1:-1:-1;28758:113:0;;;;;:::i;:::-;;:::i;27106:489::-;;;;;;;;;;-1:-1:-1;27106:489:0;;;;;:::i;:::-;;:::i;40904:154::-;;;;;;;;;;-1:-1:-1;40904:154:0;;;;;:::i;:::-;;:::i;21034:40::-;;;;;;;;;;-1:-1:-1;21034:40:0;;;;-1:-1:-1;;;21034:40:0;;;;;;27935:334;;;;;;;;;;-1:-1:-1;27935:334:0;;;;;:::i;:::-;;:::i;29001:124::-;;;;;;;;;;-1:-1:-1;29001:124:0;;;;;:::i;:::-;-1:-1:-1;;;;;29090:27:0;29066:4;29090:27;;;:18;:27;;;;;;;;;29001:124;38801:420;;;;;;;;;;-1:-1:-1;38801:420:0;;;;;:::i;:::-;;:::i;38189:157::-;;;;;;;;;;-1:-1:-1;38189:157:0;;;;;:::i;:::-;;:::i;20595:22::-;;;;;;;;;;;;;;;;29133:168;;;;;;;;;;-1:-1:-1;29133:168:0;;;;;:::i;:::-;-1:-1:-1;;;;;29260:33:0;29231:4;29260:33;;;:24;:33;;;;;;;;;29133:168;24848:198;;;;;;;;;;-1:-1:-1;24848:198:0;;;;;:::i;:::-;;:::i;21618:276::-;;;;;;;;;;-1:-1:-1;21618:276:0;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;21618:276:0;;;;;;;;;;4539:4:1;4527:17;;;4509:36;;4581:17;;;4576:2;4561:18;;4554:45;4635:17;;;4615:18;;;4608:45;;;;4689:17;;4684:2;4669:18;;4662:45;4744:17;;;4738:3;4723:19;;4716:46;4496:3;4481:19;21618:276:0;4270:498:1;2436:94:0;;;;;;;;;;;;;:::i;21334:275::-;;;;;;;;;;-1:-1:-1;21334:275:0;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;21334:275:0;;;;;;20749:58;;;;;;;;;;-1:-1:-1;20749:58:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;20711:31;;;;;;;;;;-1:-1:-1;20711:31:0;;;;-1:-1:-1;;;;;20711:31:0;;;26978:120;;;;;;;;;;-1:-1:-1;26978:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;27070:20:0;27046:4;27070:20;;;:11;:20;;;;;;;;;26978:120;40078:88;;;;;;;;;;;;;:::i;1785:87::-;;;;;;;;;;-1:-1:-1;1831:7:0;1858:6;-1:-1:-1;;;;;1858:6:0;1785:87;;40715:177;;;;;;;;;;-1:-1:-1;40715:177:0;;;;;:::i;:::-;;:::i;41066:170::-;;;;;;;;;;-1:-1:-1;41066:170:0;;;;;:::i;:::-;;:::i;24536:87::-;;;;;;;;;;-1:-1:-1;24608:7:0;;;;;;;;;;;;-1:-1:-1;;;24608:7:0;;;;24536:87;;37472:522;;;;;;;;;;-1:-1:-1;37472:522:0;;;;;:::i;:::-;;:::i;22067:36::-;;;;;;;;;;-1:-1:-1;22067:36:0;;;;;;;;;;;;;;;;5570:25:1;;;5626:2;5611:18;;5604:34;;;;5654:18;;;5647:34;5558:2;5543:18;22067:36:0;5368:319:1;26488:482:0;;;;;;;;;;-1:-1:-1;26488:482:0;;;;;:::i;:::-;;:::i;25054:199::-;;;;;;;;;;-1:-1:-1;25054:199:0;;;;;:::i;:::-;;:::i;20496:53::-;;;;;;;;;;;;;;;;38476:317;;;;;;;;;;-1:-1:-1;38476:317:0;;;;;:::i;:::-;;:::i;29309:171::-;;;;;;;;;;-1:-1:-1;29309:171:0;;;;;:::i;:::-;;:::i;20626:38::-;;;;;;;;;;-1:-1:-1;20626:38:0;;;;-1:-1:-1;;;;;20626:38:0;;;21001:26;;;;;;;;;;-1:-1:-1;21001:26:0;;;;-1:-1:-1;;;;;21001:26:0;;;38354:114;;;;;;;;;;-1:-1:-1;38354:114:0;;;;;:::i;:::-;;:::i;21119:60::-;;;;;;;;;;;;;;;;41244:380;;;;;;;;;;-1:-1:-1;41244:380:0;;;;;:::i;:::-;;:::i;20434:54::-;;;;;;;;;;;;;;;;40320:326;;;;;;;;;;-1:-1:-1;40320:326:0;;;;;:::i;:::-;;:::i;20373:53::-;;;;;;;;;;;;;;;;39229:467;;;;;;;;;;-1:-1:-1;39229:467:0;;;;;:::i;:::-;;:::i;25261:184::-;;;;;;;;;;-1:-1:-1;25261:184:0;;;;;:::i;:::-;-1:-1:-1;;;;;25410:18:0;;;25378:7;25410:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;25261:184;28881:112;;;;;;;;;;-1:-1:-1;28881:112:0;;;;;:::i;:::-;;:::i;2685:192::-;;;;;;;;;;-1:-1:-1;2685:192:0;;;;;:::i;:::-;;:::i;20557:31::-;;;;;;;;;;;;;;;;21081;;;;;;;;;;-1:-1:-1;21081:31:0;;;;-1:-1:-1;;;21081:31:0;;;;;;38002:179;1831:7;1858:6;-1:-1:-1;;;;;1858:6:0;679:10;2005:23;1997:68;;;;-1:-1:-1;;;1997:68:0;;;;;;;:::i;:::-;;;;;;;;;38160:13:::1;20200:1;38160:2;:13;:::i;:::-;38145:28;::::0;:12;:28:::1;:::i;:::-;38113:29;:60:::0;-1:-1:-1;38002:179:0:o;25453:193::-;25555:4;25577:39;679:10;25600:7;25609:6;25577:8;:39::i;:::-;-1:-1:-1;25634:4:0;25453:193;;;;;:::o;25654:521::-;25786:4;25803:36;25813:6;25821:9;25832:6;25803:9;:36::i;:::-;-1:-1:-1;;;;;25879:19:0;;25852:24;25879:19;;;:11;:19;;;;;;;;679:10;25879:33;;;;;;;;25945:26;;;;25923:116;;;;-1:-1:-1;;;25923:116:0;;9354:2:1;25923:116:0;;;9336:21:1;9393:2;9373:18;;;9366:30;9432:34;9412:18;;;9405:62;-1:-1:-1;;;9483:18:1;;;9476:38;9531:19;;25923:116:0;9152:404:1;25923:116:0;26075:57;26084:6;679:10;26125:6;26106:16;:25;26075:8;:57::i;:::-;-1:-1:-1;26163:4:0;;25654:521;-1:-1:-1;;;;25654:521:0:o;39704:317::-;1831:7;1858:6;-1:-1:-1;;;;;1858:6:0;679:10;2005:23;1997:68;;;;-1:-1:-1;;;1997:68:0;;;;;;;:::i;:::-;39823:3:::1;39800:19;:26;;39791:83;;;::::0;-1:-1:-1;;;39791:83:0;;9763:2:1;39791:83:0::1;::::0;::::1;9745:21:1::0;9802:2;9782:18;;;9775:30;9841:34;9821:18;;;9814:62;-1:-1:-1;;;9892:18:1;;;9885:41;9943:19;;39791:83:0::1;9561:407:1::0;39791:83:0::1;39913:19;39903:7;;:29;;;;:::i;:::-;39885:15;:47:::0;;;39974:39:::1;::::0;1748:25:1;;;39974:39:0::1;::::0;1736:2:1;1721:18;39974:39:0::1;;;;;;;;39704:317:::0;:::o;27603:319::-;27697:7;27755;;27744;:18;;27722:110;;;;-1:-1:-1;;;27722:110:0;;10397:2:1;27722:110:0;;;10379:21:1;10436:2;10416:18;;;10409:30;10475:34;10455:18;;;10448:62;-1:-1:-1;;;10526:18:1;;;10519:40;10576:19;;27722:110:0;10195:406:1;27722:110:0;27843:19;27865:10;:8;:10::i;:::-;27843:32;-1:-1:-1;27893:21:0;27843:32;27893:7;:21;:::i;:::-;27886:28;27603:319;-1:-1:-1;;;27603:319:0:o;40172:103::-;1831:7;1858:6;-1:-1:-1;;;;;1858:6:0;679:10;2005:23;1997:68;;;;-1:-1:-1;;;1997:68:0;;;;;;;:::i;:::-;40227:40:::1;40242:24;40260:4;40242:9;:24::i;:::-;40227:14;:40::i;:::-;40172:103::o:0;28277:473::-;1831:7;1858:6;-1:-1:-1;;;;;1858:6:0;679:10;2005:23;1997:68;;;;-1:-1:-1;;;1997:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;28357:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;28349:56;;;::::0;-1:-1:-1;;;28349:56:0;;10808:2:1;28349:56:0::1;::::0;::::1;10790:21:1::0;10847:2;10827:18;;;10820:30;10886:25;10866:18;;;10859:53;10929:18;;28349:56:0::1;10606:347:1::0;28349:56:0::1;28421:9;28416:327;28440:9;:16:::0;28436:20;::::1;28416:327;;;28498:7;-1:-1:-1::0;;;;;28482:23:0::1;:9;28492:1;28482:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;28482:12:0::1;:23:::0;28478:254:::1;;28541:9;28551:16:::0;;:20:::1;::::0;28570:1:::1;::::0;28551:20:::1;:::i;:::-;28541:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;28526:9:::1;:12:::0;;-1:-1:-1;;;;;28541:31:0;;::::1;::::0;28536:1;;28526:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;28526:46:0::1;-1:-1:-1::0;;;;;28526:46:0;;::::1;;::::0;;28591:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;28630:11:::1;:20:::0;;;;:28;;-1:-1:-1;;28630:28:0::1;::::0;;28677:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;28677:15:0;;;;;-1:-1:-1;;;;;;28677:15:0::1;::::0;;;;;28416:327:::1;28277:473:::0;:::o;28478:254::-:1;28458:3;;28416:327;;;;28277:473:::0;:::o;26183:297::-;679:10;26298:4;26392:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;26392:34:0;;;;;;;;;;26298:4;;26320:130;;26370:7;;26392:47;;26429:10;;26392:47;:::i;:::-;26320:8;:130::i;28758:113::-;1831:7;1858:6;-1:-1:-1;;;;;1858:6:0;679:10;2005:23;1997:68;;;;-1:-1:-1;;;1997:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;28829:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;28829:34:0::1;28859:4;28829:34;::::0;;28758:113::o;27106:489::-;27224:7;27268;;27257;:18;;27249:62;;;;-1:-1:-1;;;27249:62:0;;11687:2:1;27249:62:0;;;11669:21:1;11726:2;11706:18;;;11699:30;11765:33;11745:18;;;11738:61;11816:18;;27249:62:0;11485:355:1;27249:62:0;27327:17;27322:266;;27361:28;27392:25;27403:7;27412:4;27392:10;:25::i;:::-;27439:9;;-1:-1:-1;27432:16:0;;-1:-1:-1;27432:16:0;27322:266;27481:28;27512:25;27523:7;27532:4;27512:10;:25::i;:::-;27559:17;;;;-1:-1:-1;27552:24:0;;-1:-1:-1;27552:24:0;40904:154;1831:7;1858:6;-1:-1:-1;;;;;1858:6:0;679:10;2005:23;1997:68;;;;-1:-1:-1;;;1997:68:0;;;;;;;:::i;:::-;41009:41:::1;::::0;-1:-1:-1;;;41009:41:0;;-1:-1:-1;;;;;12037:32:1;;;41009:41:0::1;::::0;::::1;12019:51:1::0;12086:18;;;12079:34;;;41009:27:0;::::1;::::0;::::1;::::0;11992:18:1;;41009:41:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;40904:154:::0;;;:::o;27935:334::-;1831:7;1858:6;-1:-1:-1;;;;;1858:6:0;679:10;2005:23;1997:68;;;;-1:-1:-1;;;1997:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;28018:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;28017:21;28009:61;;;::::0;-1:-1:-1;;;28009:61:0;;12576:2:1;28009:61:0::1;::::0;::::1;12558:21:1::0;12615:2;12595:18;;;12588:30;12654:29;12634:18;;;12627:57;12701:18;;28009:61:0::1;12374:351:1::0;28009:61:0::1;-1:-1:-1::0;;;;;28085:16:0;::::1;28104:1;28085:16:::0;;;:7:::1;:16;::::0;;;;;:20;28081:109:::1;;-1:-1:-1::0;;;;;28161:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;28141:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;28122:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;28081:109:::1;-1:-1:-1::0;;;;;28200:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;28200:27:0::1;28223:4;28200:27:::0;;::::1;::::0;;;28238:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;28238:23:0::1;::::0;;::::1;::::0;;27935:334::o;38801:420::-;1831:7;1858:6;-1:-1:-1;;;;;1858:6:0;679:10;2005:23;1997:68;;;;-1:-1:-1;;;1997:68:0;;;;;;;:::i;:::-;38992:2:::1;38985:3:::0;38973:9;38958:12:::1;38965:5:::0;38958:4;:12:::1;:::i;:::-;:24;;;;:::i;:::-;:30;;;;:::i;:::-;:36;;;;38948:86;;;::::0;-1:-1:-1;;;38948:86:0;;13085:2:1;38948:86:0::1;::::0;::::1;13067:21:1::0;13124:2;13104:18;;;13097:30;13163:34;13143:18;;;13136:62;-1:-1:-1;;;13214:18:1;;;13207:32;13256:19;;38948:86:0::1;12883:398:1::0;38948:86:0::1;39045:9;:20:::0;;::::1;::::0;;::::1;-1:-1:-1::0;;39076:22:0;;;;;;;39045:20:::1;39076:22:::0;;::::1;;;-1:-1:-1::0;;39150:18:0;39109:30;;;::::1;;-1:-1:-1::0;;39150:18:0;;;;;::::1;::::0;;;::::1;;::::0;;39198:15:::1;39150:18:::0;39109:30;39198:15:::1;:::i;:::-;39179:9;:34:::0;;::::1;::::0;;;::::1;-1:-1:-1::0;;;39179:34:0::1;-1:-1:-1::0;;39179:34:0;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;;38801:420:0:o;38189:157::-;1831:7;1858:6;-1:-1:-1;;;;;1858:6:0;679:10;2005:23;1997:68;;;;-1:-1:-1;;;1997:68:0;;;;;;;:::i;:::-;38304:15:::1;:34:::0;;-1:-1:-1;;;;;;38304:34:0::1;-1:-1:-1::0;;;;;38304:34:0;;;::::1;::::0;;;::::1;::::0;;38189:157::o;24848:198::-;-1:-1:-1;;;;;24938:20:0;;24914:7;24938:20;;;:11;:20;;;;;;;;24934:49;;;-1:-1:-1;;;;;;24967:16:0;;;;;:7;:16;;;;;;;24848:198::o;24934:49::-;-1:-1:-1;;;;;25021:16:0;;;;;;:7;:16;;;;;;25001:37;;:19;:37::i;2436:94::-;1831:7;1858:6;-1:-1:-1;;;;;1858:6:0;679:10;2005:23;1997:68;;;;-1:-1:-1;;;1997:68:0;;;;;;;:::i;:::-;2501:21:::1;2519:1;2501:9;:21::i;40078:88::-:0;1831:7;1858:6;-1:-1:-1;;;;;1858:6:0;679:10;2005:23;1997:68;;;;-1:-1:-1;;;1997:68:0;;;;;;;:::i;:::-;40133:11:::1;:18:::0;;-1:-1:-1;;;;40133:18:0::1;-1:-1:-1::0;;;40133:18:0::1;::::0;;40078:88::o;40715:177::-;40804:9;40779:21;:34;;40771:71;;;;-1:-1:-1;;;40771:71:0;;13488:2:1;40771:71:0;;;13470:21:1;13527:2;13507:18;;;13500:30;13566:26;13546:18;;;13539:54;13610:18;;40771:71:0;13286:348:1;40771:71:0;40853:10;;:31;;-1:-1:-1;;;;;40853:10:0;40874:9;40853:20;:31::i;:::-;40715:177;:::o;41066:170::-;1831:7;1858:6;-1:-1:-1;;;;;1858:6:0;679:10;2005:23;1997:68;;;;-1:-1:-1;;;1997:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;41135:28:0::1;;::::0;;;:18:::1;:28;::::0;;;;;;;:35;;41166:4:::1;-1:-1:-1::0;;41135:35:0;;::::1;::::0;::::1;::::0;;;41181:24:::1;:34:::0;;;;;:41;;;;::::1;::::0;;::::1;::::0;;41066:170::o;37472:522::-;1831:7;1858:6;-1:-1:-1;;;;;1858:6:0;679:10;2005:23;1997:68;;;;-1:-1:-1;;;1997:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;37611:33:0;::::1;;::::0;;;:26:::1;:33;::::0;;;;;:42;::::1;;:33;::::0;;::::1;:42;;::::0;37589:148:::1;;;::::0;-1:-1:-1;;;37589:148:0;;13841:2:1;37589:148:0::1;::::0;::::1;13823:21:1::0;13880:2;13860:18;;;13853:30;13919:34;13899:18;;;13892:62;13990:26;13970:18;;;13963:54;14034:19;;37589:148:0::1;13639:420:1::0;37589:148:0::1;-1:-1:-1::0;;;;;37748:33:0;::::1;;::::0;;;:26:::1;:33;::::0;;;;:41;;-1:-1:-1;;37748:41:0::1;::::0;::::1;::::0;::::1;::::0;;;::::1;::::0;;;37800:130:::1;;-1:-1:-1::0;;;;;37826:31:0;::::1;;::::0;;;:24:::1;:31;::::0;;;;;;;;:38;;-1:-1:-1;;37826:38:0::1;37860:4;37826:38;::::0;;37884:34;;417:51:1;;;37884:34:0;::::1;;::::0;::::1;::::0;390:18:1;37884:34:0::1;;;;;;;37800:130;37945:41;::::0;;::::1;;::::0;-1:-1:-1;;;;;37945:41:0;::::1;::::0;::::1;::::0;;;::::1;37472:522:::0;;:::o;26488:482::-;679:10;26608:4;26657:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;26657:34:0;;;;;;;;;;26724:35;;;;26702:122;;;;-1:-1:-1;;;26702:122:0;;14266:2:1;26702:122:0;;;14248:21:1;14305:2;14285:18;;;14278:30;14344:34;14324:18;;;14317:62;-1:-1:-1;;;14395:18:1;;;14388:35;14440:19;;26702:122:0;14064:401:1;26702:122:0;26860:67;679:10;26883:7;26911:15;26892:16;:34;26860:8;:67::i;:::-;-1:-1:-1;26958:4:0;;26488:482;-1:-1:-1;;;26488:482:0:o;25054:199::-;25159:4;25181:42;679:10;25205:9;25216:6;25181:9;:42::i;38476:317::-;1831:7;1858:6;-1:-1:-1;;;;;1858:6:0;679:10;2005:23;1997:68;;;;-1:-1:-1;;;1997:68:0;;;;;;;:::i;:::-;38622:8:::1;:19:::0;;::::1;::::0;;::::1;-1:-1:-1::0;;38652:21:0;;;;;;;38622:19:::1;38652:21:::0;;::::1;;;-1:-1:-1::0;;38724:17:0;38684:29;;;::::1;;-1:-1:-1::0;;38724:17:0;;;;;::::1;::::0;;;::::1;;::::0;;38770:15:::1;38724:17:::0;38684:29;38770:15:::1;:::i;:::-;38752:8;:33:::0;;::::1;::::0;;;::::1;-1:-1:-1::0;;;38752:33:0::1;-1:-1:-1::0;;38752:33:0;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;;38476:317:0:o;29309:171::-;1831:7;1858:6;-1:-1:-1;;;;;1858:6:0;679:10;2005:23;1997:68;;;;-1:-1:-1;;;1997:68:0;;;;;;;:::i;:::-;29386:21:::1;:32:::0;;;::::1;;-1:-1:-1::0;;;29386:32:0::1;-1:-1:-1::0;;;;29386:32:0;;::::1;;::::0;;29434:38:::1;::::0;::::1;::::0;::::1;::::0;29410:8;1575:14:1;1568:22;1550:41;;1538:2;1523:18;;1410:187;38354:114:0;1831:7;1858:6;-1:-1:-1;;;;;1858:6:0;679:10;2005:23;1997:68;;;;-1:-1:-1;;;1997:68:0;;;;;;;:::i;:::-;38436:10:::1;:24:::0;;-1:-1:-1;;;;;;38436:24:0::1;-1:-1:-1::0;;;;;38436:24:0;;;::::1;::::0;;;::::1;::::0;;38354:114::o;41244:380::-;1831:7;1858:6;-1:-1:-1;;;;;1858:6:0;679:10;2005:23;1997:68;;;;-1:-1:-1;;;1997:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;41381:33:0;::::1;;::::0;;;:24:::1;:33;::::0;;;;;:45;::::1;;:33;::::0;;::::1;:45;;::::0;41359:145:::1;;;::::0;-1:-1:-1;;;41359:145:0;;14672:2:1;41359:145:0::1;::::0;::::1;14654:21:1::0;14711:2;14691:18;;;14684:30;14750:34;14730:18;;;14723:62;-1:-1:-1;;;14801:18:1;;;14794:48;14859:19;;41359:145:0::1;14470:414:1::0;41359:145:0::1;-1:-1:-1::0;;;;;41515:33:0;::::1;;::::0;;;:24:::1;:33;::::0;;;;;;;;:44;;-1:-1:-1;;41515:44:0::1;::::0;::::1;;::::0;;::::1;::::0;;;41577:39;;417:51:1;;;41515:44:0;;41577:39:::1;::::0;390:18:1;41577:39:0::1;;;;;;;41244:380:::0;;:::o;40320:326::-;1831:7;1858:6;-1:-1:-1;;;;;1858:6:0;679:10;2005:23;1997:68;;;;-1:-1:-1;;;1997:68:0;;;;;;;:::i;:::-;40482:4:::1;40465:15;40440:24;40458:4;40440:9;:24::i;:::-;:40;;;;:::i;:::-;40439:47;;;;:::i;:::-;40424:12;:62:::0;;;40496:30:::1;::::0;:16:::1;:30::i;:::-;40537:8;:29:::0;;-1:-1:-1;;;;;;40537:29:0::1;-1:-1:-1::0;;;;;40537:29:0;::::1;::::0;;::::1;::::0;;;40583:21:::1;40577:3;:27:::0;;;40615:23:::1;::::0;40537:29;40615:18:::1;:23::i;39229:467::-:0;1831:7;1858:6;-1:-1:-1;;;;;1858:6:0;679:10;2005:23;1997:68;;;;-1:-1:-1;;;1997:68:0;;;;;;;:::i;:::-;39406:3:::1;39383:19;:26;;39374:82;;;::::0;-1:-1:-1;;;39374:82:0;;15091:2:1;39374:82:0::1;::::0;::::1;15073:21:1::0;15130:2;15110:18;;;15103:30;15169:34;15149:18;;;15142:62;-1:-1:-1;;;15220:18:1;;;15213:40;15270:19;;39374:82:0::1;14889:406:1::0;39374:82:0::1;39494:18;39484:7;;:28;;;;:::i;:::-;39467:14;:45:::0;39603:7:::1;::::0;:29:::1;::::0;39613:19;;39603:29:::1;:::i;:::-;39585:15;:47:::0;-1:-1:-1;;39229:467:0:o;28881:112::-;1831:7;1858:6;-1:-1:-1;;;;;1858:6:0;679:10;2005:23;1997:68;;;;-1:-1:-1;;;1997:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;28950:27:0::1;28980:5;28950:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;28950:35:0::1;::::0;;28881:112::o;2685:192::-;1831:7;1858:6;-1:-1:-1;;;;;1858:6:0;679:10;2005:23;1997:68;;;;-1:-1:-1;;;1997:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;2774:22:0;::::1;2766:73;;;::::0;-1:-1:-1;;;2766:73:0;;15502:2:1;2766:73:0::1;::::0;::::1;15484:21:1::0;15541:2;15521:18;;;15514:30;15580:34;15560:18;;;15553:62;-1:-1:-1;;;15631:18:1;;;15624:36;15677:19;;2766:73:0::1;15300:402:1::0;2766:73:0::1;2850:19;2860:8;2850:9;:19::i;32462:369::-:0;-1:-1:-1;;;;;32589:19:0;;32581:68;;;;-1:-1:-1;;;32581:68:0;;15909:2:1;32581:68:0;;;15891:21:1;15948:2;15928:18;;;15921:30;15987:34;15967:18;;;15960:62;-1:-1:-1;;;16038:18:1;;;16031:34;16082:19;;32581:68:0;15707:400:1;32581:68:0;-1:-1:-1;;;;;32668:21:0;;32660:68;;;;-1:-1:-1;;;32660:68:0;;16314:2:1;32660:68:0;;;16296:21:1;16353:2;16333:18;;;16326:30;16392:34;16372:18;;;16365:62;-1:-1:-1;;;16443:18:1;;;16436:32;16485:19;;32660:68:0;16112:398:1;32660:68:0;-1:-1:-1;;;;;32739:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;32791:32;;1748:25:1;;;32791:32:0;;1721:18:1;32791:32:0;;;;;;;32462:369;;;:::o;32839:1151::-;-1:-1:-1;;;;;32980:24:0;;32963:12;32980:24;;;:18;:24;;;;;;;;;:50;;-1:-1:-1;;;;;;33008:22:0;;;;;;:18;:22;;;;;;;;32980:50;32978:53;32963:68;;33048:7;33044:563;;;-1:-1:-1;;;;;33103:32:0;;;;;;:26;:32;;;;;;;;33099:497;;;33189:8;33174:23;:12;:23;;;;;;-1:-1:-1;;33174:23:0;;;;;;;;;;;;;;;-1:-1:-1;;33174:23:0;;;;;;;;-1:-1:-1;;33174:23:0;;;;;;;;;;-1:-1:-1;;33174:23:0;-1:-1:-1;;;33174:23:0;;;;;;;;;;;;;;;;;33256:14;;33246:24;;;33216:130;;;;-1:-1:-1;;;33216:130:0;;16717:2:1;33216:130:0;;;16699:21:1;;;16736:18;;;16729:30;16795:34;16775:18;;;16768:62;16847:18;;33216:130:0;16515:356:1;33216:130:0;33099:497;;;33420:9;33405:24;:12;:24;;;;;;-1:-1:-1;;33405:24:0;;;;;;;;;;;;;;;-1:-1:-1;;33405:24:0;;;;;;;;-1:-1:-1;;33405:24:0;;;;;;;;;;-1:-1:-1;;33405:24:0;-1:-1:-1;;;33405:24:0;;;;;;;;;;;;;;;;;33488:15;;33478:25;;;33448:132;;;;-1:-1:-1;;;33448:132:0;;17078:2:1;33448:132:0;;;17060:21:1;17117:2;17097:18;;;17090:30;17156:34;17136:18;;;17129:62;-1:-1:-1;;;17207:18:1;;;17200:31;17248:19;;33448:132:0;16876:397:1;33448:132:0;33665:29;;33637:24;33655:4;33637:9;:24::i;:::-;:57;;:91;;;;-1:-1:-1;33712:16:0;;;;33711:17;33637:91;:141;;;;-1:-1:-1;;;;;;33746:32:0;;;;;;:26;:32;;;;;;;;33745:33;33637:141;:179;;;;-1:-1:-1;33795:21:0;;-1:-1:-1;;;33795:21:0;;;;33637:179;33619:310;;;33872:45;33887:29;;33872:14;:45::i;:::-;33941:41;33956:4;33962:2;33966:6;33974:7;33941:14;:41::i;31707:161::-;31749:7;31770:15;31787;31806:19;:17;:19::i;:::-;31769:56;;-1:-1:-1;31769:56:0;-1:-1:-1;31843:17:0;31769:56;;31843:17;:::i;:::-;31836:24;;;;31707:161;:::o;35298:1053::-;22988:16;:23;;-1:-1:-1;;22988:23:0;23007:4;22988:23;;;35405:12:::1;:19:::0;22988:16;;35405:23:::1;::::0;-1:-1:-1;;;35405:19:0;::::1;22988:23:::0;35405:19:::1;35427:1;35405:23;:::i;:::-;35511:12;:15:::0;35383:45:::1;::::0;;::::1;::::0;-1:-1:-1;35439:32:0::1;::::0;35383:45;;35475:51:::1;::::0;35511:15;;;::::1;;35475:20:::0;:51:::1;:::i;:::-;35474:67;;;;:::i;:::-;35439:102:::0;-1:-1:-1;35554:14:0::1;35571:47;35439:102:::0;35571:20;:47:::1;:::i;:::-;35554:64:::0;-1:-1:-1;35656:21:0::1;35728:24;35554:64:::0;35728:16:::1;:24::i;:::-;35765:20;35788:38;35812:14:::0;35788:21:::1;:38;:::i;:::-;35932:12;:15:::0;35765:61;;-1:-1:-1;35837:29:0::1;::::0;35918::::1;::::0;35932:15;;::::1;;;35918:11:::0;:29:::1;:::i;:::-;35885:12;:15:::0;35870:30:::1;::::0;35885:15;;::::1;;;35870:12:::0;:30:::1;:::i;:::-;35869:79;;;;:::i;:::-;35837:111;;35987:61;36000:24;36026:21;35987:12;:61::i;:::-;36272:12;:21:::0;36145::::1;::::0;36118:24:::1;::::0;36258:35:::1;::::0;36272:21;;::::1;;;36258:11:::0;:35:::1;:::i;:::-;36219:12;:21:::0;36200:40:::1;::::0;36219:21;;::::1;;;36200:16:::0;:40:::1;:::i;:::-;36199:95;;;;:::i;:::-;36305:15;::::0;36177:117;;-1:-1:-1;36305:38:0::1;::::0;-1:-1:-1;;;;;36305:15:0::1;36177:117:::0;36305:25:::1;:38::i;:::-;-1:-1:-1::0;;23034:16:0;:24;;-1:-1:-1;;23034:24:0;;;-1:-1:-1;;;;;;;35298:1053:0:o;29958:470::-;30058:36;;:::i;:::-;30124:29;30136:7;30145;30124:11;:29::i;:::-;30112:41;;30341:52;30353:9;30364:7;30373;30382:10;:8;:10::i;:::-;30341:11;:52::i;:::-;30310:17;;;30164:229;30280:15;;;30164:229;30251:14;;;30164:229;30211:25;;;30164:229;;;29958:470;;;;:::o;2885:173::-;2941:16;2960:6;;-1:-1:-1;;;;;2977:17:0;;;-1:-1:-1;;;;;;2977:17:0;;;;;;3010:40;;2960:6;;;;;;;3010:40;;2941:16;3010:40;2930:128;2885:173;:::o;13672:317::-;13787:6;13762:21;:31;;13754:73;;;;-1:-1:-1;;;13754:73:0;;17710:2:1;13754:73:0;;;17692:21:1;17749:2;17729:18;;;17722:30;17788:31;17768:18;;;17761:59;17837:18;;13754:73:0;17508:353:1;13754:73:0;13841:12;13859:9;-1:-1:-1;;;;;13859:14:0;13881:6;13859:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13840:52;;;13911:7;13903:78;;;;-1:-1:-1;;;13903:78:0;;18278:2:1;13903:78:0;;;18260:21:1;18317:2;18297:18;;;18290:30;18356:34;18336:18;;;18329:62;18427:28;18407:18;;;18400:56;18473:19;;13903:78:0;18076:422:1;13903:78:0;13743:246;13672:317;;:::o;36359:669::-;36493:16;;;36507:1;36493:16;;;;;;;;36469:21;;36493:16;;;;;;;;;;-1:-1:-1;36493:16:0;36469:40;;36538:4;36520;36525:1;36520:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;36520:23:0;;;-1:-1:-1;;;;;36520:23:0;;;;;36564:15;;;;;;;;;-1:-1:-1;;;;;36564:15:0;-1:-1:-1;;;;;36564:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36554:4;36559:1;36554:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;36554:32:0;;;:7;;;;;;;;;;:32;;;;36636:15;;36621:4;25378:7;25410:18;;;:11;:18;;;;;;36636:15;;;;;;;25410:27;;;;;;36656:11;-1:-1:-1;36599:159:0;;;36716:15;;36684:62;;36701:4;;36716:15;;;-1:-1:-1;;;;;36716:15:0;-1:-1:-1;;36684:8:0;:62::i;:::-;36796:15;;:224;;-1:-1:-1;;;36796:224:0;;:15;;;;-1:-1:-1;;;;;36796:15:0;;:66;;:224;;36877:11;;36903:1;;36947:4;;36974;;36994:15;;36796:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36414:614;36359:669;:::o;34071:1219::-;34223:28;34254;34265:7;34274;34254:10;:28::i;:::-;-1:-1:-1;;;;;34299:19:0;;;;;;:11;:19;;;;;;34223:59;;-1:-1:-1;34299:19:0;;34295:78;;;-1:-1:-1;;;;;34335:15:0;;;;;;:7;:15;;;;;:26;;34354:7;;34335:15;:26;;34354:7;;34335:26;:::i;:::-;;;;-1:-1:-1;;34295:78:0;-1:-1:-1;;;;;34387:22:0;;;;;;:11;:22;;;;;;;;34383:94;;;34448:17;;;;-1:-1:-1;;;;;34426:18:0;;;;;;:7;:18;;;;;:39;;:18;;;:39;;34448:17;;34426:39;:::i;:::-;;;;-1:-1:-1;;34383:94:0;34508:9;;-1:-1:-1;;;;;34489:15:0;;34508:9;34489:15;;;:7;:15;;;;;:28;;:15;;34508:9;34489:28;;34508:9;;34489:28;:::i;:::-;;;;-1:-1:-1;;34550:17:0;;;;;-1:-1:-1;;;;;34528:18:0;;;;;;:7;:18;;;;;;:39;;34550:17;;34528:18;;:39;;34550:17;;34528:39;:::i;:::-;;;;-1:-1:-1;;34578:284:0;;;;34642:1;:7;;;34631;;:18;;;;;;;:::i;:::-;;;;;-1:-1:-1;34621:7:0;:28;-1:-1:-1;34689:7:0;;;;34678;:18;;:7;;:18;;34689:7;;34678:18;:::i;:::-;;;;;-1:-1:-1;34668:7:0;:28;-1:-1:-1;34725:6:0;;;;34733;;;;34713:27;;34725:6;34713:11;:27::i;:::-;34755:33;34767:1;:9;;;34778:1;:9;;;34755:11;:33::i;:::-;34833:4;-1:-1:-1;;;;;34808:42:0;34817:6;-1:-1:-1;;;;;34808:42:0;;34840:1;:9;;;34808:42;;;;1748:25:1;;1736:2;1721:18;;1602:177;34808:42:0;;;;;;;;34578:284;-1:-1:-1;;;;;34878:26:0;;;;;;:18;:26;;;;;;;;34877:27;:61;;;;-1:-1:-1;;;;;;34909:29:0;;;;;;:18;:29;;;;;;;;34908:30;34877:61;34872:141;;;34963:11;;-1:-1:-1;;;34963:11:0;;;;34955:46;;;;-1:-1:-1;;;34955:46:0;;20057:2:1;34955:46:0;;;20039:21:1;20096:2;20076:18;;;20069:30;20135:25;20115:18;;;20108:53;20178:18;;34955:46:0;19855:347:1;34955:46:0;-1:-1:-1;;;;;35047:35:0;;;;;;:24;:35;;;;;;;;;:98;;;35130:15;;35106:20;35116:9;35106;:20::i;:::-;:39;;35047:98;35025:195;;;;-1:-1:-1;;;35025:195:0;;20409:2:1;35025:195:0;;;20391:21:1;20448:2;20428:18;;;20421:30;20487:34;20467:18;;;20460:62;-1:-1:-1;;;20538:18:1;;;20531:45;20593:19;;35025:195:0;20207:411:1;35025:195:0;35253:9;-1:-1:-1;;;;;35236:46:0;35245:6;-1:-1:-1;;;;;35236:46:0;;35264:1;:17;;;35236:46;;;;1748:25:1;;1736:2;1721:18;;1602:177;35236:46:0;;;;;;;;34212:1078;34071:1219;;;;:::o;31876:578::-;31974:7;;32010;;31927;;;;;32028:314;32052:9;:16;32048:20;;32028:314;;;32136:7;32112;:21;32120:9;32130:1;32120:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;32120:12:0;32112:21;;;;;;;;;;;;;:31;;:83;;;32188:7;32164;:21;32172:9;32182:1;32172:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;32172:12:0;32164:21;;;;;;;;;;;;;:31;32112:83;32090:146;;;32219:7;;32228;;32211:25;;;;;;;31876:578;;:::o;32090:146::-;32262:7;:21;32270:9;32280:1;32270:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;32270:12:0;32262:21;;;;;;;;;;;;;32251:32;;;;:::i;:::-;;;32309:7;:21;32317:9;32327:1;32317:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;32317:12:0;32309:21;;;;;;;;;;;;;32298:32;;;;:::i;:::-;;-1:-1:-1;32070:3:0;;32028:314;;;;32376:7;;32366;;:17;;;;:::i;:::-;32356:7;:27;32352:58;;;32393:7;;32402;;32385:25;;;;;;31876:578;;:::o;32352:58::-;32429:7;;32438;;-1:-1:-1;31876:578:0;-1:-1:-1;31876:578:0:o;37036:428::-;37147:15;;37351:10;;37147:255;;-1:-1:-1;;;37147:255:0;;37219:4;37147:255;;;20934:51:1;21001:18;;;20994:34;;;37265:1:0;21044:18:1;;;21037:34;;;21087:18;;;21080:34;-1:-1:-1;;;;;37351:10:0;;;21130:19:1;;;21123:61;37376:15:0;21200:19:1;;;21193:35;37147:15:0;;;;;;:31;;37186:9;;20906:19:1;;37147:255:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;37418:38:0;;;21874:25:1;;;21930:2;21915:18;;21908:34;;;37418:38:0;;-1:-1:-1;21847:18:1;37418:38:0;;;;;;;37036:428;;:::o;30436:503::-;30537:28;;:::i;:::-;30588:7;30583:91;;30612:17;;;:27;;;30654:8;;30583:91;30704:12;:16;30724:3;;30694:26;;30704:16;;30694:7;:26;:::i;:::-;30693:34;;;;:::i;:::-;30684:6;;;:43;30759:12;:17;30780:3;;30749:27;;30759:17;;;;;30749:7;:27;:::i;:::-;30748:35;;;;:::i;:::-;30738:7;;;:45;30817:12;:19;30840:3;;30807:29;;-1:-1:-1;;;30817:19:0;;;;30807:7;:29;:::i;:::-;30806:37;;;;:::i;:::-;30794:9;;;:49;;;30893:7;;;;30884:6;;;;30874:16;;:7;:16;:::i;:::-;:26;;;;:::i;:::-;:38;;;;:::i;:::-;30854:17;;;:58;30436:503;;;;:::o;30947:752::-;31156:15;;;;;31332:21;31342:11;31332:7;:21;:::i;:::-;31322:31;;31371:7;31366:75;;-1:-1:-1;31403:7:0;;-1:-1:-1;31421:1:0;;-1:-1:-1;31421:1:0;;-1:-1:-1;31421:1:0;31395:34;;31366:75;31469:11;31460:1;:6;;;:20;;;;:::i;:::-;31453:27;;31509:11;31499:1;:7;;;:21;;;;:::i;:::-;31491:29;;31553:11;31541:1;:9;;;:23;;;;:::i;:::-;31531:33;-1:-1:-1;31531:33:0;31610:5;31593:14;31603:4;31593:7;:14;:::i;:::-;:22;;;;:::i;:::-;:32;;;;:::i;:::-;31575:50;-1:-1:-1;31670:5:0;;31677:4;30947:752;;;;;;;;;;:::o;29586:125::-;29665:4;29654:7;;:15;;;;;;;:::i;:::-;;;;-1:-1:-1;;29680:11:0;:23;;29699:4;;29680:11;:15;;:23;;29699:4;;29680:23;:::i;:::-;;;;-1:-1:-1;;;;29586:125:0:o;29719:231::-;29809:4;29793:22;;;;:7;:22;;;;;:33;;29819:7;;29793:22;:33;;29819:7;;29793:33;:::i;:::-;;;;-1:-1:-1;;29861:4:0;29841:26;;;;:11;:26;;;;;;;;29837:65;;;29885:4;29869:22;;;;:7;:22;;;;;:33;;29895:7;;29869:22;:33;;29895:7;;29869:33;:::i;:::-;;;;-1:-1:-1;;29837:65:0;29935:7;29913:11;:18;;;:29;;;;;;;:::i;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;14:226:1:-;73:6;126:2;114:9;105:7;101:23;97:32;94:52;;;142:1;139;132:12;94:52;-1:-1:-1;187:23:1;;14:226;-1:-1:-1;14:226:1:o;479:418::-;628:2;617:9;610:21;591:4;660:6;654:13;703:6;698:2;687:9;683:18;676:34;762:6;757:2;749:6;745:15;740:2;729:9;725:18;719:50;818:1;813:2;804:6;793:9;789:22;785:31;778:42;888:2;881;877:7;872:2;864:6;860:15;856:29;845:9;841:45;837:54;829:62;;;479:418;;;;:::o;902:131::-;-1:-1:-1;;;;;977:31:1;;967:42;;957:70;;1023:1;1020;1013:12;1038:367;1106:6;1114;1167:2;1155:9;1146:7;1142:23;1138:32;1135:52;;;1183:1;1180;1173:12;1135:52;1222:9;1209:23;1241:31;1266:5;1241:31;:::i;:::-;1291:5;1369:2;1354:18;;;;1341:32;;-1:-1:-1;;;1038:367:1:o;1784:508::-;1861:6;1869;1877;1930:2;1918:9;1909:7;1905:23;1901:32;1898:52;;;1946:1;1943;1936:12;1898:52;1985:9;1972:23;2004:31;2029:5;2004:31;:::i;:::-;2054:5;-1:-1:-1;2111:2:1;2096:18;;2083:32;2124:33;2083:32;2124:33;:::i;:::-;1784:508;;2176:7;;-1:-1:-1;;;2256:2:1;2241:18;;;;2228:32;;1784:508::o;2486:247::-;2545:6;2598:2;2586:9;2577:7;2573:23;2569:32;2566:52;;;2614:1;2611;2604:12;2566:52;2653:9;2640:23;2672:31;2697:5;2672:31;:::i;2962:118::-;3048:5;3041:13;3034:21;3027:5;3024:32;3014:60;;3070:1;3067;3060:12;3085:361;3150:6;3158;3211:2;3199:9;3190:7;3186:23;3182:32;3179:52;;;3227:1;3224;3217:12;3179:52;3272:23;;;-1:-1:-1;3371:2:1;3356:18;;3343:32;3384:30;3343:32;3384:30;:::i;:::-;3433:7;3423:17;;;3085:361;;;;;:::o;3451:156::-;3517:20;;3577:4;3566:16;;3556:27;;3546:55;;3597:1;3594;3587:12;3546:55;3451:156;;;:::o;3612:393::-;3690:6;3698;3706;3714;3767:3;3755:9;3746:7;3742:23;3738:33;3735:53;;;3784:1;3781;3774:12;3735:53;3807:27;3824:9;3807:27;:::i;:::-;3797:37;;3853:36;3885:2;3874:9;3870:18;3853:36;:::i;:::-;3843:46;;3908:36;3940:2;3929:9;3925:18;3908:36;:::i;:::-;3898:46;;3963:36;3995:2;3984:9;3980:18;3963:36;:::i;:::-;3953:46;;3612:393;;;;;;;:::o;4981:382::-;5046:6;5054;5107:2;5095:9;5086:7;5082:23;5078:32;5075:52;;;5123:1;5120;5113:12;5075:52;5162:9;5149:23;5181:31;5206:5;5181:31;:::i;:::-;5231:5;-1:-1:-1;5288:2:1;5273:18;;5260:32;5301:30;5260:32;5301:30;:::i;5692:241::-;5748:6;5801:2;5789:9;5780:7;5776:23;5772:32;5769:52;;;5817:1;5814;5807:12;5769:52;5856:9;5843:23;5875:28;5897:5;5875:28;:::i;5938:367::-;6006:6;6014;6067:2;6055:9;6046:7;6042:23;6038:32;6035:52;;;6083:1;6080;6073:12;6035:52;6128:23;;;-1:-1:-1;6227:2:1;6212:18;;6199:32;6240:33;6199:32;6240:33;:::i;6310:346::-;6378:6;6386;6439:2;6427:9;6418:7;6414:23;6410:32;6407:52;;;6455:1;6452;6445:12;6407:52;-1:-1:-1;;6500:23:1;;;6620:2;6605:18;;;6592:32;;-1:-1:-1;6310:346:1:o;6661:388::-;6729:6;6737;6790:2;6778:9;6769:7;6765:23;6761:32;6758:52;;;6806:1;6803;6796:12;6758:52;6845:9;6832:23;6864:31;6889:5;6864:31;:::i;:::-;6914:5;-1:-1:-1;6971:2:1;6956:18;;6943:32;6984:33;6943:32;6984:33;:::i;7054:356::-;7256:2;7238:21;;;7275:18;;;7268:30;7334:34;7329:2;7314:18;;7307:62;7401:2;7386:18;;7054:356::o;7415:127::-;7476:10;7471:3;7467:20;7464:1;7457:31;7507:4;7504:1;7497:15;7531:4;7528:1;7521:15;7547:375;7635:1;7653:5;7667:249;7688:1;7678:8;7675:15;7667:249;;;7738:4;7733:3;7729:14;7723:4;7720:24;7717:50;;;7747:18;;:::i;:::-;7797:1;7787:8;7783:16;7780:49;;;7811:16;;;;7780:49;7894:1;7890:16;;;;;7850:15;;7667:249;;;7547:375;;;;;;:::o;7927:902::-;7976:5;8006:8;7996:80;;-1:-1:-1;8047:1:1;8061:5;;7996:80;8095:4;8085:76;;-1:-1:-1;8132:1:1;8146:5;;8085:76;8177:4;8195:1;8190:59;;;;8263:1;8258:174;;;;8170:262;;8190:59;8220:1;8211:10;;8234:5;;;8258:174;8295:3;8285:8;8282:17;8279:43;;;8302:18;;:::i;:::-;-1:-1:-1;;8358:1:1;8344:16;;8417:5;;8170:262;;8516:2;8506:8;8503:16;8497:3;8491:4;8488:13;8484:36;8478:2;8468:8;8465:16;8460:2;8454:4;8451:12;8447:35;8444:77;8441:203;;;-1:-1:-1;8553:19:1;;;8629:5;;8441:203;8676:42;-1:-1:-1;;8701:8:1;8695:4;8676:42;:::i;:::-;8754:6;8750:1;8746:6;8742:19;8733:7;8730:32;8727:58;;;8765:18;;:::i;:::-;8803:20;;7927:902;-1:-1:-1;;;7927:902:1:o;8834:140::-;8892:5;8921:47;8962:4;8952:8;8948:19;8942:4;8921:47;:::i;8979:168::-;9052:9;;;9083;;9100:15;;;9094:22;;9080:37;9070:71;;9121:18;;:::i;9973:217::-;10013:1;10039;10029:132;;10083:10;10078:3;10074:20;10071:1;10064:31;10118:4;10115:1;10108:15;10146:4;10143:1;10136:15;10029:132;-1:-1:-1;10175:9:1;;9973:217::o;10958:127::-;11019:10;11014:3;11010:20;11007:1;11000:31;11050:4;11047:1;11040:15;11074:4;11071:1;11064:15;11090:128;11157:9;;;11178:11;;;11175:37;;;11192:18;;:::i;11223:127::-;11284:10;11279:3;11275:20;11272:1;11265:31;11315:4;11312:1;11305:15;11339:4;11336:1;11329:15;11355:125;11420:9;;;11441:10;;;11438:36;;;11454:18;;:::i;12124:245::-;12191:6;12244:2;12232:9;12223:7;12219:23;12215:32;12212:52;;;12260:1;12257;12250:12;12212:52;12292:9;12286:16;12311:28;12333:5;12311:28;:::i;12730:148::-;12818:4;12797:12;;;12811;;;12793:31;;12836:13;;12833:39;;;12852:18;;:::i;17278:225::-;17382:4;17361:12;;;17375;;;17357:31;17408:22;;;;17449:24;;;17439:58;;17477:18;;:::i;:::-;17439:58;17278:225;;;;:::o;18635:251::-;18705:6;18758:2;18746:9;18737:7;18733:23;18729:32;18726:52;;;18774:1;18771;18764:12;18726:52;18806:9;18800:16;18825:31;18850:5;18825:31;:::i;18891:959::-;19153:4;19201:3;19190:9;19186:19;19232:6;19221:9;19214:25;19275:6;19270:2;19259:9;19255:18;19248:34;19318:3;19313:2;19302:9;19298:18;19291:31;19342:6;19377;19371:13;19408:6;19400;19393:22;19446:3;19435:9;19431:19;19424:26;;19485:2;19477:6;19473:15;19459:29;;19506:1;19516:195;19530:6;19527:1;19524:13;19516:195;;;19595:13;;-1:-1:-1;;;;;19591:39:1;19579:52;;19660:2;19686:15;;;;19651:12;;;;19627:1;19545:9;19516:195;;;-1:-1:-1;;;;;;;19767:32:1;;;;19762:2;19747:18;;19740:60;-1:-1:-1;;19831:3:1;19816:19;19809:35;19728:3;18891:959;-1:-1:-1;;;18891:959:1:o;21239:456::-;21327:6;21335;21343;21396:2;21384:9;21375:7;21371:23;21367:32;21364:52;;;21412:1;21409;21402:12;21364:52;-1:-1:-1;;21457:16:1;;21563:2;21548:18;;21542:25;21659:2;21644:18;;;21638:25;21457:16;;21542:25;;-1:-1:-1;21638:25:1;21239:456;-1:-1:-1;21239:456:1:o
Swarm Source
ipfs://745c3644b9517d07896e6559410aa96f309dcfad5c14317e16710f9c8e9cad2e
[ 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.