Feature Tip: Add private address tag to any address under My Name Tag !
ERC-20
Overview
Max Total Supply
100,000,000,000,000 CBDAO
Holders
109
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 9 Decimals)
Balance
209,566,223,694.92854558 CBDAOValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
CoinbaseDAO
Compiler Version
v0.8.9+commit.e5eed63a
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-12-30 */ /* https://t.me/CoinbaseDAO https://twitter.com/CoinbaseDAO_ https://www.coinbasedao.faith/ */ // SPDX-License-Identifier: Unlicensed pragma solidity ^0.8.9; interface IERC20 { 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 ); } /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } abstract contract Context { //function _msgSender() internal view virtual returns (address payable) { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } /** * @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) { // According to EIP-1052, 0x0 is the value returned for not-yet created accounts // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned // for accounts without code, i.e. `keccak256('')` bytes32 codehash; bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470; // solhint-disable-next-line no-inline-assembly assembly { codehash := extcodehash(account) } return (codehash != accountHash && codehash != 0x0); } /** * @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" ); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (bool success, ) = recipient.call{value: amount}(""); require( success, "Address: unable to send value, recipient may have reverted" ); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain`call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return _functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue( target, data, value, "Address: low-level call with value failed" ); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require( address(this).balance >= value, "Address: insufficient balance for call" ); return _functionCallWithValue(target, data, value, errorMessage); } function _functionCallWithValue( address target, bytes memory data, uint256 weiValue, string memory errorMessage ) private returns (bytes memory) { require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{value: weiValue}( data ); if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } /** * @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. */ contract Ownable is Context { address private _owner; address private _previousOwner; uint256 private _lockTime; event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view 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 { emit OwnershipTransferred(_owner, address(0)); _owner = 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" ); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } function geUnlockTime() public view returns (uint256) { return _lockTime; } //Locks the contract for owner for the amount of time provided function lock(uint256 time) public virtual onlyOwner { _previousOwner = _owner; _owner = address(0); _lockTime = block.timestamp + time; emit OwnershipTransferred(_owner, address(0)); } //Unlocks the contract for owner when _lockTime is exceeds function unlock() public virtual { require( _previousOwner == msg.sender, "You don't have permission to unlock" ); require(block.timestamp > _lockTime, "Contract is locked until 7 days"); emit OwnershipTransferred(_owner, _previousOwner); _owner = _previousOwner; } } interface IUniswapV2Factory { event PairCreated( address indexed token0, address indexed token1, address pair, uint256 ); 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(uint256) external view returns (address pair); function allPairsLength() external view returns (uint256); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } interface IUniswapV2Pair { event Approval( address indexed owner, address indexed spender, uint256 value ); event Transfer(address indexed from, address indexed to, uint256 value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint256); function balanceOf(address owner) external view returns (uint256); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 value) external returns (bool); function transfer(address to, uint256 value) external returns (bool); function transferFrom( address from, address to, uint256 value ) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint256); function permit( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) external; event Mint(address indexed sender, uint256 amount0, uint256 amount1); event Burn( address indexed sender, uint256 amount0, uint256 amount1, address indexed to ); event Swap( address indexed sender, uint256 amount0In, uint256 amount1In, uint256 amount0Out, uint256 amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint256); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns ( uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast ); function price0CumulativeLast() external view returns (uint256); function price1CumulativeLast() external view returns (uint256); function kLast() external view returns (uint256); function mint(address to) external returns (uint256 liquidity); function burn(address to) external returns (uint256 amount0, uint256 amount1); function swap( uint256 amount0Out, uint256 amount1Out, address to, bytes calldata data ) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint256 amountADesired, uint256 amountBDesired, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns ( uint256 amountA, uint256 amountB, uint256 liquidity ); function addLiquidityETH( address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external payable returns ( uint256 amountToken, uint256 amountETH, uint256 liquidity ); function removeLiquidity( address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns (uint256 amountA, uint256 amountB); function removeLiquidityETH( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external returns (uint256 amountToken, uint256 amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountA, uint256 amountB); function removeLiquidityETHWithPermit( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountToken, uint256 amountETH); function swapExactTokensForTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapTokensForExactTokens( uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapExactETHForTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable returns (uint256[] memory amounts); function swapTokensForExactETH( uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapExactTokensForETH( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapETHForExactTokens( uint256 amountOut, address[] calldata path, address to, uint256 deadline ) external payable returns (uint256[] memory amounts); function quote( uint256 amountA, uint256 reserveA, uint256 reserveB ) external pure returns (uint256 amountB); function getAmountOut( uint256 amountIn, uint256 reserveIn, uint256 reserveOut ) external pure returns (uint256 amountOut); function getAmountIn( uint256 amountOut, uint256 reserveIn, uint256 reserveOut ) external pure returns (uint256 amountIn); function getAmountsOut(uint256 amountIn, address[] calldata path) external view returns (uint256[] memory amounts); function getAmountsIn(uint256 amountOut, address[] calldata path) external view returns (uint256[] memory amounts); } interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external returns (uint256 amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; } contract CoinbaseDAO is Context, IERC20, Ownable { using SafeMath for uint256; using Address for address; 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; address[] private _excluded; bool public canTrade = false; uint256 private constant MAX = ~uint256(0); uint256 private _tTotal = 100000000000000 * 10**9; uint256 private _rTotal = (MAX - (MAX % _tTotal)); uint256 private _tFeeTotal; address public marketingWallet; string private _name = "CoinbaseDAO"; string private _symbol = "CBDAO"; uint8 private _decimals = 9; uint256 public _taxFee = 2; uint256 private _previousTaxFee = _taxFee; uint256 public _liquidityFee = 10; uint256 private _previousLiquidityFee = _liquidityFee; IUniswapV2Router02 public immutable uniswapV2Router; address public immutable uniswapV2Pair; bool inSwapAndLiquify; bool public swapAndLiquifyEnabled = true; uint256 public _maxTxAmount = 500000000000 * 10**9; uint256 public numTokensSellToAddToLiquidity = 1000000000000 * 10**9; event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap); event SwapAndLiquifyEnabledUpdated(bool enabled); event SwapAndLiquify( uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiqudity ); modifier lockTheSwap() { inSwapAndLiquify = true; _; inSwapAndLiquify = false; } constructor() { _rOwned[_msgSender()] = _rTotal; IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02( 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D ); //Mainnet & Testnet ETH // Create a uniswap pair for this new token uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()) .createPair(address(this), _uniswapV2Router.WETH()); // set the rest of the contract variables uniswapV2Router = _uniswapV2Router; //exclude owner and this contract from fee _isExcludedFromFee[owner()] = true; _isExcludedFromFee[address(this)] = true; emit Transfer(address(0), _msgSender(), _tTotal); } function name() public view returns (string memory) { return _name; } function symbol() public view returns (string memory) { return _symbol; } function decimals() public view returns (uint8) { return _decimals; } 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); _approve( sender, _msgSender(), _allowances[sender][_msgSender()].sub( amount, "ERC20: transfer amount exceeds allowance" ) ); return true; } function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve( _msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue) ); return true; } function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { _approve( _msgSender(), spender, _allowances[_msgSender()][spender].sub( subtractedValue, "ERC20: decreased allowance below zero" ) ); return true; } function isExcludedFromReward(address account) public view returns (bool) { return _isExcluded[account]; } function totalFees() public view returns (uint256) { return _tFeeTotal; } function deliver(uint256 tAmount) public { address sender = _msgSender(); require( !_isExcluded[sender], "Excluded addresses cannot call this function" ); (uint256 rAmount, , , , , ) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rTotal = _rTotal.sub(rAmount); _tFeeTotal = _tFeeTotal.add(tAmount); } function reflectionFromToken(uint256 tAmount, bool deductTransferFee) public view returns (uint256) { require(tAmount <= _tTotal, "Amount must be less than supply"); if (!deductTransferFee) { (uint256 rAmount, , , , , ) = _getValues(tAmount); return rAmount; } else { (, uint256 rTransferAmount, , , , ) = _getValues(tAmount); return rTransferAmount; } } function tokenFromReflection(uint256 rAmount) public view returns (uint256) { require( rAmount <= _rTotal, "Amount must be less than total reflections" ); uint256 currentRate = _getRate(); return rAmount.div(currentRate); } function excludeFromReward(address account) public onlyOwner { // require(account != 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D, 'We can not exclude Uniswap router.'); 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 already 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 _transferBothExcluded( address sender, address recipient, uint256 tAmount ) private { ( uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity ) = _getValues(tAmount); _tOwned[sender] = _tOwned[sender].sub(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function excludeFromFee(address account) public onlyOwner { _isExcludedFromFee[account] = true; } function includeInFee(address account) public onlyOwner { _isExcludedFromFee[account] = false; } function setMarketingWallet(address walletAddress) public onlyOwner { marketingWallet = walletAddress; } function upliftTxAmount(uint256 maxTxAmount_) external onlyOwner { _maxTxAmount = uint256(maxTxAmount_) * 10**9; } function setSwapThresholdAmount(uint256 SwapThresholdAmount) external onlyOwner { require( SwapThresholdAmount > 1000000000000, "Swap Threshold Amount cannot be less than 1000000000000" ); numTokensSellToAddToLiquidity = SwapThresholdAmount * 10**9; } function claimTokens() public onlyOwner { payable(marketingWallet).transfer(address(this).balance); } function claimOtherTokens(IERC20 tokenAddress, address walletaddress) external onlyOwner { tokenAddress.transfer( walletaddress, tokenAddress.balanceOf(address(this)) ); } function clearStuckBalance(address payable walletaddress) external onlyOwner { walletaddress.transfer(address(this).balance); } function allowtrading() external onlyOwner { canTrade = true; } function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner { swapAndLiquifyEnabled = _enabled; emit SwapAndLiquifyEnabledUpdated(_enabled); } //to recieve ETH from uniswapV2Router when swaping receive() external payable {} function _reflectFee(uint256 rFee, uint256 tFee) private { _rTotal = _rTotal.sub(rFee); _tFeeTotal = _tFeeTotal.add(tFee); } function _getValues(uint256 tAmount) private view returns ( uint256, uint256, uint256, uint256, uint256, uint256 ) { ( uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity ) = _getTValues(tAmount); (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues( tAmount, tFee, tLiquidity, _getRate() ); return ( rAmount, rTransferAmount, rFee, tTransferAmount, tFee, tLiquidity ); } function _getTValues(uint256 tAmount) private view returns ( uint256, uint256, uint256 ) { uint256 tFee = calculateTaxFee(tAmount); uint256 tLiquidity = calculateLiquidityFee(tAmount); uint256 tTransferAmount = tAmount.sub(tFee).sub(tLiquidity); return (tTransferAmount, tFee, tLiquidity); } function _getRValues( uint256 tAmount, uint256 tFee, uint256 tLiquidity, uint256 currentRate ) private pure returns ( uint256, uint256, uint256 ) { uint256 rAmount = tAmount.mul(currentRate); uint256 rFee = tFee.mul(currentRate); uint256 rLiquidity = tLiquidity.mul(currentRate); uint256 rTransferAmount = rAmount.sub(rFee).sub(rLiquidity); return (rAmount, rTransferAmount, rFee); } function _getRate() private view returns (uint256) { (uint256 rSupply, uint256 tSupply) = _getCurrentSupply(); return rSupply.div(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 = rSupply.sub(_rOwned[_excluded[i]]); tSupply = tSupply.sub(_tOwned[_excluded[i]]); } if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal); return (rSupply, tSupply); } function _takeLiquidity(uint256 tLiquidity) private { uint256 currentRate = _getRate(); uint256 rLiquidity = tLiquidity.mul(currentRate); _rOwned[address(this)] = _rOwned[address(this)].add(rLiquidity); if (_isExcluded[address(this)]) _tOwned[address(this)] = _tOwned[address(this)].add(tLiquidity); } function calculateTaxFee(uint256 _amount) private view returns (uint256) { return _amount.mul(_taxFee).div(10**2); } function calculateLiquidityFee(uint256 _amount) private view returns (uint256) { return _amount.mul(_liquidityFee).div(10**2); } function removeAllFee() private { if (_taxFee == 0 && _liquidityFee == 0) return; _previousTaxFee = _taxFee; _previousLiquidityFee = _liquidityFee; _taxFee = 0; _liquidityFee = 0; } function restoreAllFee() private { _taxFee = _previousTaxFee; _liquidityFee = _previousLiquidityFee; } function isExcludedFromFee(address account) public view returns (bool) { return _isExcludedFromFee[account]; } 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 { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); require(amount > 0, "Transfer amount must be greater than zero"); if (from != owner() && to != owner()) require( amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount." ); // is the token balance of this contract address over the min number of // tokens that we need to initiate a swap + liquidity lock? // also, don't get caught in a circular liquidity event. // also, don't swap & liquify if sender is uniswap pair. uint256 contractTokenBalance = balanceOf(address(this)); if (contractTokenBalance >= _maxTxAmount) { contractTokenBalance = _maxTxAmount; } bool overMinTokenBalance = contractTokenBalance >= numTokensSellToAddToLiquidity; if ( overMinTokenBalance && !inSwapAndLiquify && from != uniswapV2Pair && swapAndLiquifyEnabled ) { contractTokenBalance = numTokensSellToAddToLiquidity; //add liquidity swapAndLiquify(contractTokenBalance); } //indicates if fee should be deducted from transfer bool takeFee = true; //if any account belongs to _isExcludedFromFee account then remove the fee if (_isExcludedFromFee[from] || _isExcludedFromFee[to]) { takeFee = false; } //transfer amount, it will take tax, burn, liquidity fee _tokenTransfer(from, to, amount, takeFee); } function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap { // split the contract balance into halves // add the marketing wallet uint256 half = contractTokenBalance.div(2); uint256 otherHalf = contractTokenBalance.sub(half); // capture the contract's current ETH balance. // this is so that we can capture exactly the amount of ETH that the // swap creates, and not make the liquidity event include any ETH that // has been manually sent to the contract uint256 initialBalance = address(this).balance; // swap tokens for ETH swapTokensForEth(half); // <- this breaks the ETH -> HATE swap when swap+liquify is triggered // how much ETH did we just swap into? uint256 newBalance = address(this).balance.sub(initialBalance); uint256 marketingshare = newBalance.mul(80).div(100); payable(marketingWallet).transfer(marketingshare); newBalance -= marketingshare; // add liquidity to uniswap addLiquidity(otherHalf, newBalance); emit SwapAndLiquify(half, newBalance, otherHalf); } function swapTokensForEth(uint256 tokenAmount) private { // generate the uniswap pair path of token -> weth address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); _approve(address(this), address(uniswapV2Router), tokenAmount); // make the swap uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, address(this), block.timestamp ); } function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private { // approve token transfer to cover all possible scenarios _approve(address(this), address(uniswapV2Router), tokenAmount); // add the liquidity uniswapV2Router.addLiquidityETH{value: ethAmount}( address(this), tokenAmount, 0, // slippage is unavoidable 0, // slippage is unavoidable owner(), block.timestamp ); } //this method is responsible for taking all fee, if takeFee is true function _tokenTransfer( address sender, address recipient, uint256 amount, bool takeFee ) private { if (!canTrade) { require(sender == owner()); // only owner allowed to trade or add liquidity } if (!takeFee) removeAllFee(); if (_isExcluded[sender] && !_isExcluded[recipient]) { _transferFromExcluded(sender, recipient, amount); } else if (!_isExcluded[sender] && _isExcluded[recipient]) { _transferToExcluded(sender, recipient, amount); } else if (!_isExcluded[sender] && !_isExcluded[recipient]) { _transferStandard(sender, recipient, amount); } else if (_isExcluded[sender] && _isExcluded[recipient]) { _transferBothExcluded(sender, recipient, amount); } else { _transferStandard(sender, recipient, amount); } if (!takeFee) restoreAllFee(); } function _transferStandard( address sender, address recipient, uint256 tAmount ) private { ( uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity ) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function _transferToExcluded( address sender, address recipient, uint256 tAmount ) private { ( uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity ) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function _transferFromExcluded( address sender, address recipient, uint256 tAmount ) private { ( uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity ) = _getValues(tAmount); _tOwned[sender] = _tOwned[sender].sub(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"minTokensBeforeSwap","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[],"name":"allowtrading","outputs":[],"stateMutability":"nonpayable","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":"canTrade","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"tokenAddress","type":"address"},{"internalType":"address","name":"walletaddress","type":"address"}],"name":"claimOtherTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"walletaddress","type":"address"}],"name":"clearStuckBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","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"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"geUnlockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"time","type":"uint256"}],"name":"lock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","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":"deductTransferFee","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":"walletAddress","type":"address"}],"name":"setMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"SwapThresholdAmount","type":"uint256"}],"name":"setSwapThresholdAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxAmount_","type":"uint256"}],"name":"upliftTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60c06040526009805460ff1916905569152d02c7e14af6800000600a8190556200002c9060001962000451565b6200003a9060001962000474565b600b908155604080518082019091528181526a436f696e6261736544414f60a81b60209091019081526200007291600e9190620003ab565b5060408051808201909152600580825264434244414f60d81b6020909201918252620000a191600f91620003ab565b506010805460ff1916600917905560026011819055601255600a60138190556014556015805461ff001916610100179055681b1ae4d6e2ef500000601655683635c9adc5dea00000601755348015620000f957600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600b543360009081526003602090815260409182902092909255805163c45a015560e01b81529051737a250d5630b4cf539739df2c5dacb4c659f2488d92839263c45a01559260048083019392829003018186803b1580156200019d57600080fd5b505afa158015620001b2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001d891906200049a565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200022157600080fd5b505afa15801562000236573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200025c91906200049a565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b158015620002a557600080fd5b505af1158015620002ba573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002e091906200049a565b6001600160a01b0390811660a05281166080526001600660006200030c6000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff199586161790553081526006909252902080549091166001179055620003543390565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600a546040516200039c91815260200190565b60405180910390a35062000509565b828054620003b990620004cc565b90600052602060002090601f016020900481019282620003dd576000855562000428565b82601f10620003f857805160ff191683800117855562000428565b8280016001018555821562000428579182015b82811115620004285782518255916020019190600101906200040b565b50620004369291506200043a565b5090565b5b808211156200043657600081556001016200043b565b6000826200046f57634e487b7160e01b600052601260045260246000fd5b500690565b6000828210156200049557634e487b7160e01b600052601160045260246000fd5b500390565b600060208284031215620004ad57600080fd5b81516001600160a01b0381168114620004c557600080fd5b9392505050565b600181811c90821680620004e157607f821691505b602082108114156200050357634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a051612c3a620005596000396000818161050d01526119b401526000818161032501528181612136015281816121fe0152818161223a0152818161232b01526123520152612c3a6000f3fe60806040526004361061026b5760003560e01c80635342acb411610144578063a457c2d7116100b6578063c49b9a801161007a578063c49b9a8014610753578063d12a768814610773578063dd46706414610789578063dd62ed3e146107a9578063ea2f0b37146107ef578063f2fde38b1461080f57600080fd5b8063a457c2d7146106d4578063a6334231146106f4578063a69df4b514610709578063a9059cbb1461071e578063b6c523241461073e57600080fd5b806375f0a8741161010857806375f0a87414610612578063764d72bf146106325780637d1db4a51461065257806388f82020146106685780638da5cb5b146106a157806395d89b41146106bf57600080fd5b80635342acb41461056e5780635d098b38146105a75780636bc87c3a146105c757806370a08231146105dd578063715018a6146105fd57600080fd5b80633685d419116101dd578063437823ec116101a1578063437823ec146104a65780634549b039146104c657806348c54b9d146104e657806349bd5a5e146104fb5780634a74bb021461052f57806352390c021461054e57600080fd5b80633685d4191461041057806339509351146104305780633ae7dc20146104505780633b124fe7146104705780633bd5d1731461048657600080fd5b806318160ddd1161022f57806318160ddd1461035f57806323b872dd1461037457806329e04b4a146103945780632d838119146103b45780632f05205c146103d4578063313ce567146103ee57600080fd5b806306fdde031461027757806307c69be5146102a2578063095ea7b3146102c457806313114a9d146102f45780631694505e1461031357600080fd5b3661027257005b600080fd5b34801561028357600080fd5b5061028c61082f565b60405161029991906127d2565b60405180910390f35b3480156102ae57600080fd5b506102c26102bd366004612827565b6108c1565b005b3480156102d057600080fd5b506102e46102df366004612855565b610908565b6040519015158152602001610299565b34801561030057600080fd5b50600c545b604051908152602001610299565b34801561031f57600080fd5b506103477f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610299565b34801561036b57600080fd5b50600a54610305565b34801561038057600080fd5b506102e461038f366004612881565b61091f565b3480156103a057600080fd5b506102c26103af366004612827565b610988565b3480156103c057600080fd5b506103056103cf366004612827565b610a40565b3480156103e057600080fd5b506009546102e49060ff1681565b3480156103fa57600080fd5b5060105460405160ff9091168152602001610299565b34801561041c57600080fd5b506102c261042b3660046128c2565b610ac4565b34801561043c57600080fd5b506102e461044b366004612855565b610c7b565b34801561045c57600080fd5b506102c261046b3660046128df565b610cb1565b34801561047c57600080fd5b5061030560115481565b34801561049257600080fd5b506102c26104a1366004612827565b610ddf565b3480156104b257600080fd5b506102c26104c13660046128c2565b610ec9565b3480156104d257600080fd5b506103056104e1366004612926565b610f17565b3480156104f257600080fd5b506102c2610fa4565b34801561050757600080fd5b506103477f000000000000000000000000000000000000000000000000000000000000000081565b34801561053b57600080fd5b506015546102e490610100900460ff1681565b34801561055a57600080fd5b506102c26105693660046128c2565b61100a565b34801561057a57600080fd5b506102e46105893660046128c2565b6001600160a01b031660009081526006602052604090205460ff1690565b3480156105b357600080fd5b506102c26105c23660046128c2565b61115d565b3480156105d357600080fd5b5061030560135481565b3480156105e957600080fd5b506103056105f83660046128c2565b6111a9565b34801561060957600080fd5b506102c2611208565b34801561061e57600080fd5b50600d54610347906001600160a01b031681565b34801561063e57600080fd5b506102c261064d3660046128c2565b61126a565b34801561065e57600080fd5b5061030560165481565b34801561067457600080fd5b506102e46106833660046128c2565b6001600160a01b031660009081526007602052604090205460ff1690565b3480156106ad57600080fd5b506000546001600160a01b0316610347565b3480156106cb57600080fd5b5061028c6112c9565b3480156106e057600080fd5b506102e46106ef366004612855565b6112d8565b34801561070057600080fd5b506102c2611327565b34801561071557600080fd5b506102c2611360565b34801561072a57600080fd5b506102e4610739366004612855565b611466565b34801561074a57600080fd5b50600254610305565b34801561075f57600080fd5b506102c261076e36600461294b565b611473565b34801561077f57600080fd5b5061030560175481565b34801561079557600080fd5b506102c26107a4366004612827565b6114f1565b3480156107b557600080fd5b506103056107c43660046128df565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b3480156107fb57600080fd5b506102c261080a3660046128c2565b611576565b34801561081b57600080fd5b506102c261082a3660046128c2565b6115c1565b6060600e805461083e90612968565b80601f016020809104026020016040519081016040528092919081815260200182805461086a90612968565b80156108b75780601f1061088c576101008083540402835291602001916108b7565b820191906000526020600020905b81548152906001019060200180831161089a57829003601f168201915b5050505050905090565b6000546001600160a01b031633146108f45760405162461bcd60e51b81526004016108eb906129a3565b60405180910390fd5b61090281633b9aca006129ee565b60165550565b6000610915338484611699565b5060015b92915050565b600061092c8484846117bd565b61097e843361097985604051806060016040528060288152602001612b98602891396001600160a01b038a1660009081526005602090815260408083203384529091529020549190611a6e565b611699565b5060019392505050565b6000546001600160a01b031633146109b25760405162461bcd60e51b81526004016108eb906129a3565b64e8d4a510008111610a2c5760405162461bcd60e51b815260206004820152603760248201527f53776170205468726573686f6c6420416d6f756e742063616e6e6f742062652060448201527f6c657373207468616e203130303030303030303030303000000000000000000060648201526084016108eb565b610a3a81633b9aca006129ee565b60175550565b6000600b54821115610aa75760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b60648201526084016108eb565b6000610ab1611aa8565b9050610abd8382611acb565b9392505050565b6000546001600160a01b03163314610aee5760405162461bcd60e51b81526004016108eb906129a3565b6001600160a01b03811660009081526007602052604090205460ff16610b565760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c75646564000000000060448201526064016108eb565b60005b600854811015610c7757816001600160a01b031660088281548110610b8057610b80612a0d565b6000918252602090912001546001600160a01b03161415610c655760088054610bab90600190612a23565b81548110610bbb57610bbb612a0d565b600091825260209091200154600880546001600160a01b039092169183908110610be757610be7612a0d565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600482526040808220829055600790925220805460ff191690556008805480610c3f57610c3f612a3a565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80610c6f81612a50565b915050610b59565b5050565b3360008181526005602090815260408083206001600160a01b038716845290915281205490916109159185906109799086611b0d565b6000546001600160a01b03163314610cdb5760405162461bcd60e51b81526004016108eb906129a3565b6040516370a0823160e01b81523060048201526001600160a01b0383169063a9059cbb90839083906370a082319060240160206040518083038186803b158015610d2457600080fd5b505afa158015610d38573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d5c9190612a6b565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381600087803b158015610da257600080fd5b505af1158015610db6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dda9190612a84565b505050565b3360008181526007602052604090205460ff1615610e545760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b60648201526084016108eb565b6000610e5f83611b6c565b505050506001600160a01b038416600090815260036020526040902054919250610e8b91905082611bbb565b6001600160a01b038316600090815260036020526040902055600b54610eb19082611bbb565b600b55600c54610ec19084611b0d565b600c55505050565b6000546001600160a01b03163314610ef35760405162461bcd60e51b81526004016108eb906129a3565b6001600160a01b03166000908152600660205260409020805460ff19166001179055565b6000600a54831115610f6b5760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c790060448201526064016108eb565b81610f8a576000610f7b84611b6c565b50939550610919945050505050565b6000610f9584611b6c565b50929550610919945050505050565b6000546001600160a01b03163314610fce5760405162461bcd60e51b81526004016108eb906129a3565b600d546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015611007573d6000803e3d6000fd5b50565b6000546001600160a01b031633146110345760405162461bcd60e51b81526004016108eb906129a3565b6001600160a01b03811660009081526007602052604090205460ff161561109d5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c75646564000000000060448201526064016108eb565b6001600160a01b038116600090815260036020526040902054156110f7576001600160a01b0381166000908152600360205260409020546110dd90610a40565b6001600160a01b0382166000908152600460205260409020555b6001600160a01b03166000818152600760205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319169091179055565b6000546001600160a01b031633146111875760405162461bcd60e51b81526004016108eb906129a3565b600d80546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03811660009081526007602052604081205460ff16156111e657506001600160a01b031660009081526004602052604090205490565b6001600160a01b03821660009081526003602052604090205461091990610a40565b6000546001600160a01b031633146112325760405162461bcd60e51b81526004016108eb906129a3565b600080546040516001600160a01b0390911690600080516020612bc0833981519152908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146112945760405162461bcd60e51b81526004016108eb906129a3565b6040516001600160a01b038216904780156108fc02916000818181858888f19350505050158015610c77573d6000803e3d6000fd5b6060600f805461083e90612968565b6000610915338461097985604051806060016040528060258152602001612be0602591393360009081526005602090815260408083206001600160a01b038d1684529091529020549190611a6e565b6000546001600160a01b031633146113515760405162461bcd60e51b81526004016108eb906129a3565b6009805460ff19166001179055565b6001546001600160a01b031633146113c65760405162461bcd60e51b815260206004820152602360248201527f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c6044820152626f636b60e81b60648201526084016108eb565b60025442116114175760405162461bcd60e51b815260206004820152601f60248201527f436f6e7472616374206973206c6f636b656420756e74696c203720646179730060448201526064016108eb565b600154600080546040516001600160a01b039384169390911691600080516020612bc083398151915291a3600154600080546001600160a01b0319166001600160a01b03909216919091179055565b60006109153384846117bd565b6000546001600160a01b0316331461149d5760405162461bcd60e51b81526004016108eb906129a3565b601580548215156101000261ff00199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159906114e690831515815260200190565b60405180910390a150565b6000546001600160a01b0316331461151b5760405162461bcd60e51b81526004016108eb906129a3565b60008054600180546001600160a01b03199081166001600160a01b0384161790915516905561154a8142612aa1565b600255600080546040516001600160a01b0390911690600080516020612bc0833981519152908390a350565b6000546001600160a01b031633146115a05760405162461bcd60e51b81526004016108eb906129a3565b6001600160a01b03166000908152600660205260409020805460ff19169055565b6000546001600160a01b031633146115eb5760405162461bcd60e51b81526004016108eb906129a3565b6001600160a01b0381166116505760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016108eb565b600080546040516001600160a01b0380851693921691600080516020612bc083398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0383166116fb5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016108eb565b6001600160a01b03821661175c5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016108eb565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166118215760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016108eb565b6001600160a01b0382166118835760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016108eb565b600081116118e55760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b60648201526084016108eb565b6000546001600160a01b0384811691161480159061191157506000546001600160a01b03838116911614155b15611979576016548111156119795760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b60648201526084016108eb565b6000611984306111a9565b9050601654811061199457506016545b601754811080159081906119ab575060155460ff16155b80156119e957507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b031614155b80156119fc5750601554610100900460ff165b15611a0f576017549150611a0f82611bfd565b6001600160a01b03851660009081526006602052604090205460019060ff1680611a5157506001600160a01b03851660009081526006602052604090205460ff165b15611a5a575060005b611a6686868684611cfc565b505050505050565b60008184841115611a925760405162461bcd60e51b81526004016108eb91906127d2565b506000611a9f8486612a23565b95945050505050565b6000806000611ab5611e9d565b9092509050611ac48282611acb565b9250505090565b6000610abd83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061201f565b600080611b1a8385612aa1565b905083811015610abd5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016108eb565b6000806000806000806000806000611b838a61204d565b9250925092506000806000611ba18d8686611b9c611aa8565b61208f565b919f909e50909c50959a5093985091965092945050505050565b6000610abd83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611a6e565b6015805460ff191660011790556000611c17826002611acb565b90506000611c258383611bbb565b905047611c31836120df565b6000611c3d4783611bbb565b90506000611c576064611c518460506122a6565b90611acb565b600d546040519192506001600160a01b03169082156108fc029083906000818181858888f19350505050158015611c92573d6000803e3d6000fd5b50611c9d8183612a23565b9150611ca98483612325565b60408051868152602081018490529081018590527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a150506015805460ff1916905550505050565b60095460ff16611d20576000546001600160a01b03858116911614611d2057600080fd5b80611d2d57611d2d61243a565b6001600160a01b03841660009081526007602052604090205460ff168015611d6e57506001600160a01b03831660009081526007602052604090205460ff16155b15611d8357611d7e848484612468565b611e81565b6001600160a01b03841660009081526007602052604090205460ff16158015611dc457506001600160a01b03831660009081526007602052604090205460ff165b15611dd457611d7e84848461258e565b6001600160a01b03841660009081526007602052604090205460ff16158015611e1657506001600160a01b03831660009081526007602052604090205460ff16155b15611e2657611d7e848484612637565b6001600160a01b03841660009081526007602052604090205460ff168015611e6657506001600160a01b03831660009081526007602052604090205460ff165b15611e7657611d7e84848461267b565b611e81848484612637565b80611e9757611e97601254601155601454601355565b50505050565b600b54600a546000918291825b600854811015611fef57826003600060088481548110611ecc57611ecc612a0d565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180611f375750816004600060088481548110611f1057611f10612a0d565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15611f4d57600b54600a54945094505050509091565b611f936003600060088481548110611f6757611f67612a0d565b60009182526020808320909101546001600160a01b031683528201929092526040019020548490611bbb565b9250611fdb6004600060088481548110611faf57611faf612a0d565b60009182526020808320909101546001600160a01b031683528201929092526040019020548390611bbb565b915080611fe781612a50565b915050611eaa565b50600a54600b54611fff91611acb565b82101561201657600b54600a549350935050509091565b90939092509050565b600081836120405760405162461bcd60e51b81526004016108eb91906127d2565b506000611a9f8486612ab9565b60008060008061205c856126ee565b905060006120698661270a565b905060006120818261207b8986611bbb565b90611bbb565b979296509094509092505050565b600080808061209e88866122a6565b905060006120ac88876122a6565b905060006120ba88886122a6565b905060006120cc8261207b8686611bbb565b939b939a50919850919650505050505050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061211457612114612a0d565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561218d57600080fd5b505afa1580156121a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121c59190612adb565b816001815181106121d8576121d8612a0d565b60200260200101906001600160a01b031690816001600160a01b031681525050612223307f000000000000000000000000000000000000000000000000000000000000000084611699565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac94790612278908590600090869030904290600401612af8565b600060405180830381600087803b15801561229257600080fd5b505af1158015611a66573d6000803e3d6000fd5b6000826122b557506000610919565b60006122c183856129ee565b9050826122ce8583612ab9565b14610abd5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084016108eb565b612350307f000000000000000000000000000000000000000000000000000000000000000084611699565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663f305d7198230856000806123976000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c4016060604051808303818588803b1580156123fa57600080fd5b505af115801561240e573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906124339190612b69565b5050505050565b60115415801561244a5750601354155b1561245157565b601180546012556013805460145560009182905555565b60008060008060008061247a87611b6c565b6001600160a01b038f16600090815260046020526040902054959b509399509197509550935091506124ac9088611bbb565b6001600160a01b038a166000908152600460209081526040808320939093556003905220546124db9087611bbb565b6001600160a01b03808b1660009081526003602052604080822093909355908a168152205461250a9086611b0d565b6001600160a01b03891660009081526003602052604090205561252c81612726565b61253684836127ae565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161257b91815260200190565b60405180910390a3505050505050505050565b6000806000806000806125a087611b6c565b6001600160a01b038f16600090815260036020526040902054959b509399509197509550935091506125d29087611bbb565b6001600160a01b03808b16600090815260036020908152604080832094909455918b168152600490915220546126089084611b0d565b6001600160a01b03891660009081526004602090815260408083209390935560039052205461250a9086611b0d565b60008060008060008061264987611b6c565b6001600160a01b038f16600090815260036020526040902054959b509399509197509550935091506124db9087611bbb565b60008060008060008061268d87611b6c565b6001600160a01b038f16600090815260046020526040902054959b509399509197509550935091506126bf9088611bbb565b6001600160a01b038a166000908152600460209081526040808320939093556003905220546125d29087611bbb565b60006109196064611c51601154856122a690919063ffffffff16565b60006109196064611c51601354856122a690919063ffffffff16565b6000612730611aa8565b9050600061273e83836122a6565b3060009081526003602052604090205490915061275b9082611b0d565b3060009081526003602090815260408083209390935560079052205460ff1615610dda57306000908152600460205260409020546127999084611b0d565b30600090815260046020526040902055505050565b600b546127bb9083611bbb565b600b55600c546127cb9082611b0d565b600c555050565b600060208083528351808285015260005b818110156127ff578581018301518582016040015282016127e3565b81811115612811576000604083870101525b50601f01601f1916929092016040019392505050565b60006020828403121561283957600080fd5b5035919050565b6001600160a01b038116811461100757600080fd5b6000806040838503121561286857600080fd5b823561287381612840565b946020939093013593505050565b60008060006060848603121561289657600080fd5b83356128a181612840565b925060208401356128b181612840565b929592945050506040919091013590565b6000602082840312156128d457600080fd5b8135610abd81612840565b600080604083850312156128f257600080fd5b82356128fd81612840565b9150602083013561290d81612840565b809150509250929050565b801515811461100757600080fd5b6000806040838503121561293957600080fd5b82359150602083013561290d81612918565b60006020828403121561295d57600080fd5b8135610abd81612918565b600181811c9082168061297c57607f821691505b6020821081141561299d57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b6000816000190483118215151615612a0857612a086129d8565b500290565b634e487b7160e01b600052603260045260246000fd5b600082821015612a3557612a356129d8565b500390565b634e487b7160e01b600052603160045260246000fd5b6000600019821415612a6457612a646129d8565b5060010190565b600060208284031215612a7d57600080fd5b5051919050565b600060208284031215612a9657600080fd5b8151610abd81612918565b60008219821115612ab457612ab46129d8565b500190565b600082612ad657634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215612aed57600080fd5b8151610abd81612840565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612b485784516001600160a01b031683529383019391830191600101612b23565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215612b7e57600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63658be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e045524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212202a8113f3f2090545366a71539305074488587f76812b8149536d170cbcf3e08264736f6c63430008090033
Deployed Bytecode
0x60806040526004361061026b5760003560e01c80635342acb411610144578063a457c2d7116100b6578063c49b9a801161007a578063c49b9a8014610753578063d12a768814610773578063dd46706414610789578063dd62ed3e146107a9578063ea2f0b37146107ef578063f2fde38b1461080f57600080fd5b8063a457c2d7146106d4578063a6334231146106f4578063a69df4b514610709578063a9059cbb1461071e578063b6c523241461073e57600080fd5b806375f0a8741161010857806375f0a87414610612578063764d72bf146106325780637d1db4a51461065257806388f82020146106685780638da5cb5b146106a157806395d89b41146106bf57600080fd5b80635342acb41461056e5780635d098b38146105a75780636bc87c3a146105c757806370a08231146105dd578063715018a6146105fd57600080fd5b80633685d419116101dd578063437823ec116101a1578063437823ec146104a65780634549b039146104c657806348c54b9d146104e657806349bd5a5e146104fb5780634a74bb021461052f57806352390c021461054e57600080fd5b80633685d4191461041057806339509351146104305780633ae7dc20146104505780633b124fe7146104705780633bd5d1731461048657600080fd5b806318160ddd1161022f57806318160ddd1461035f57806323b872dd1461037457806329e04b4a146103945780632d838119146103b45780632f05205c146103d4578063313ce567146103ee57600080fd5b806306fdde031461027757806307c69be5146102a2578063095ea7b3146102c457806313114a9d146102f45780631694505e1461031357600080fd5b3661027257005b600080fd5b34801561028357600080fd5b5061028c61082f565b60405161029991906127d2565b60405180910390f35b3480156102ae57600080fd5b506102c26102bd366004612827565b6108c1565b005b3480156102d057600080fd5b506102e46102df366004612855565b610908565b6040519015158152602001610299565b34801561030057600080fd5b50600c545b604051908152602001610299565b34801561031f57600080fd5b506103477f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b039091168152602001610299565b34801561036b57600080fd5b50600a54610305565b34801561038057600080fd5b506102e461038f366004612881565b61091f565b3480156103a057600080fd5b506102c26103af366004612827565b610988565b3480156103c057600080fd5b506103056103cf366004612827565b610a40565b3480156103e057600080fd5b506009546102e49060ff1681565b3480156103fa57600080fd5b5060105460405160ff9091168152602001610299565b34801561041c57600080fd5b506102c261042b3660046128c2565b610ac4565b34801561043c57600080fd5b506102e461044b366004612855565b610c7b565b34801561045c57600080fd5b506102c261046b3660046128df565b610cb1565b34801561047c57600080fd5b5061030560115481565b34801561049257600080fd5b506102c26104a1366004612827565b610ddf565b3480156104b257600080fd5b506102c26104c13660046128c2565b610ec9565b3480156104d257600080fd5b506103056104e1366004612926565b610f17565b3480156104f257600080fd5b506102c2610fa4565b34801561050757600080fd5b506103477f0000000000000000000000006bb1121db62b5131b02ed7e1a92657ce9ce1317e81565b34801561053b57600080fd5b506015546102e490610100900460ff1681565b34801561055a57600080fd5b506102c26105693660046128c2565b61100a565b34801561057a57600080fd5b506102e46105893660046128c2565b6001600160a01b031660009081526006602052604090205460ff1690565b3480156105b357600080fd5b506102c26105c23660046128c2565b61115d565b3480156105d357600080fd5b5061030560135481565b3480156105e957600080fd5b506103056105f83660046128c2565b6111a9565b34801561060957600080fd5b506102c2611208565b34801561061e57600080fd5b50600d54610347906001600160a01b031681565b34801561063e57600080fd5b506102c261064d3660046128c2565b61126a565b34801561065e57600080fd5b5061030560165481565b34801561067457600080fd5b506102e46106833660046128c2565b6001600160a01b031660009081526007602052604090205460ff1690565b3480156106ad57600080fd5b506000546001600160a01b0316610347565b3480156106cb57600080fd5b5061028c6112c9565b3480156106e057600080fd5b506102e46106ef366004612855565b6112d8565b34801561070057600080fd5b506102c2611327565b34801561071557600080fd5b506102c2611360565b34801561072a57600080fd5b506102e4610739366004612855565b611466565b34801561074a57600080fd5b50600254610305565b34801561075f57600080fd5b506102c261076e36600461294b565b611473565b34801561077f57600080fd5b5061030560175481565b34801561079557600080fd5b506102c26107a4366004612827565b6114f1565b3480156107b557600080fd5b506103056107c43660046128df565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b3480156107fb57600080fd5b506102c261080a3660046128c2565b611576565b34801561081b57600080fd5b506102c261082a3660046128c2565b6115c1565b6060600e805461083e90612968565b80601f016020809104026020016040519081016040528092919081815260200182805461086a90612968565b80156108b75780601f1061088c576101008083540402835291602001916108b7565b820191906000526020600020905b81548152906001019060200180831161089a57829003601f168201915b5050505050905090565b6000546001600160a01b031633146108f45760405162461bcd60e51b81526004016108eb906129a3565b60405180910390fd5b61090281633b9aca006129ee565b60165550565b6000610915338484611699565b5060015b92915050565b600061092c8484846117bd565b61097e843361097985604051806060016040528060288152602001612b98602891396001600160a01b038a1660009081526005602090815260408083203384529091529020549190611a6e565b611699565b5060019392505050565b6000546001600160a01b031633146109b25760405162461bcd60e51b81526004016108eb906129a3565b64e8d4a510008111610a2c5760405162461bcd60e51b815260206004820152603760248201527f53776170205468726573686f6c6420416d6f756e742063616e6e6f742062652060448201527f6c657373207468616e203130303030303030303030303000000000000000000060648201526084016108eb565b610a3a81633b9aca006129ee565b60175550565b6000600b54821115610aa75760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b60648201526084016108eb565b6000610ab1611aa8565b9050610abd8382611acb565b9392505050565b6000546001600160a01b03163314610aee5760405162461bcd60e51b81526004016108eb906129a3565b6001600160a01b03811660009081526007602052604090205460ff16610b565760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c75646564000000000060448201526064016108eb565b60005b600854811015610c7757816001600160a01b031660088281548110610b8057610b80612a0d565b6000918252602090912001546001600160a01b03161415610c655760088054610bab90600190612a23565b81548110610bbb57610bbb612a0d565b600091825260209091200154600880546001600160a01b039092169183908110610be757610be7612a0d565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600482526040808220829055600790925220805460ff191690556008805480610c3f57610c3f612a3a565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80610c6f81612a50565b915050610b59565b5050565b3360008181526005602090815260408083206001600160a01b038716845290915281205490916109159185906109799086611b0d565b6000546001600160a01b03163314610cdb5760405162461bcd60e51b81526004016108eb906129a3565b6040516370a0823160e01b81523060048201526001600160a01b0383169063a9059cbb90839083906370a082319060240160206040518083038186803b158015610d2457600080fd5b505afa158015610d38573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d5c9190612a6b565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381600087803b158015610da257600080fd5b505af1158015610db6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dda9190612a84565b505050565b3360008181526007602052604090205460ff1615610e545760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b60648201526084016108eb565b6000610e5f83611b6c565b505050506001600160a01b038416600090815260036020526040902054919250610e8b91905082611bbb565b6001600160a01b038316600090815260036020526040902055600b54610eb19082611bbb565b600b55600c54610ec19084611b0d565b600c55505050565b6000546001600160a01b03163314610ef35760405162461bcd60e51b81526004016108eb906129a3565b6001600160a01b03166000908152600660205260409020805460ff19166001179055565b6000600a54831115610f6b5760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c790060448201526064016108eb565b81610f8a576000610f7b84611b6c565b50939550610919945050505050565b6000610f9584611b6c565b50929550610919945050505050565b6000546001600160a01b03163314610fce5760405162461bcd60e51b81526004016108eb906129a3565b600d546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015611007573d6000803e3d6000fd5b50565b6000546001600160a01b031633146110345760405162461bcd60e51b81526004016108eb906129a3565b6001600160a01b03811660009081526007602052604090205460ff161561109d5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c75646564000000000060448201526064016108eb565b6001600160a01b038116600090815260036020526040902054156110f7576001600160a01b0381166000908152600360205260409020546110dd90610a40565b6001600160a01b0382166000908152600460205260409020555b6001600160a01b03166000818152600760205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319169091179055565b6000546001600160a01b031633146111875760405162461bcd60e51b81526004016108eb906129a3565b600d80546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03811660009081526007602052604081205460ff16156111e657506001600160a01b031660009081526004602052604090205490565b6001600160a01b03821660009081526003602052604090205461091990610a40565b6000546001600160a01b031633146112325760405162461bcd60e51b81526004016108eb906129a3565b600080546040516001600160a01b0390911690600080516020612bc0833981519152908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146112945760405162461bcd60e51b81526004016108eb906129a3565b6040516001600160a01b038216904780156108fc02916000818181858888f19350505050158015610c77573d6000803e3d6000fd5b6060600f805461083e90612968565b6000610915338461097985604051806060016040528060258152602001612be0602591393360009081526005602090815260408083206001600160a01b038d1684529091529020549190611a6e565b6000546001600160a01b031633146113515760405162461bcd60e51b81526004016108eb906129a3565b6009805460ff19166001179055565b6001546001600160a01b031633146113c65760405162461bcd60e51b815260206004820152602360248201527f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c6044820152626f636b60e81b60648201526084016108eb565b60025442116114175760405162461bcd60e51b815260206004820152601f60248201527f436f6e7472616374206973206c6f636b656420756e74696c203720646179730060448201526064016108eb565b600154600080546040516001600160a01b039384169390911691600080516020612bc083398151915291a3600154600080546001600160a01b0319166001600160a01b03909216919091179055565b60006109153384846117bd565b6000546001600160a01b0316331461149d5760405162461bcd60e51b81526004016108eb906129a3565b601580548215156101000261ff00199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159906114e690831515815260200190565b60405180910390a150565b6000546001600160a01b0316331461151b5760405162461bcd60e51b81526004016108eb906129a3565b60008054600180546001600160a01b03199081166001600160a01b0384161790915516905561154a8142612aa1565b600255600080546040516001600160a01b0390911690600080516020612bc0833981519152908390a350565b6000546001600160a01b031633146115a05760405162461bcd60e51b81526004016108eb906129a3565b6001600160a01b03166000908152600660205260409020805460ff19169055565b6000546001600160a01b031633146115eb5760405162461bcd60e51b81526004016108eb906129a3565b6001600160a01b0381166116505760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016108eb565b600080546040516001600160a01b0380851693921691600080516020612bc083398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0383166116fb5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016108eb565b6001600160a01b03821661175c5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016108eb565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166118215760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016108eb565b6001600160a01b0382166118835760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016108eb565b600081116118e55760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b60648201526084016108eb565b6000546001600160a01b0384811691161480159061191157506000546001600160a01b03838116911614155b15611979576016548111156119795760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b60648201526084016108eb565b6000611984306111a9565b9050601654811061199457506016545b601754811080159081906119ab575060155460ff16155b80156119e957507f0000000000000000000000006bb1121db62b5131b02ed7e1a92657ce9ce1317e6001600160a01b0316856001600160a01b031614155b80156119fc5750601554610100900460ff165b15611a0f576017549150611a0f82611bfd565b6001600160a01b03851660009081526006602052604090205460019060ff1680611a5157506001600160a01b03851660009081526006602052604090205460ff165b15611a5a575060005b611a6686868684611cfc565b505050505050565b60008184841115611a925760405162461bcd60e51b81526004016108eb91906127d2565b506000611a9f8486612a23565b95945050505050565b6000806000611ab5611e9d565b9092509050611ac48282611acb565b9250505090565b6000610abd83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061201f565b600080611b1a8385612aa1565b905083811015610abd5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016108eb565b6000806000806000806000806000611b838a61204d565b9250925092506000806000611ba18d8686611b9c611aa8565b61208f565b919f909e50909c50959a5093985091965092945050505050565b6000610abd83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611a6e565b6015805460ff191660011790556000611c17826002611acb565b90506000611c258383611bbb565b905047611c31836120df565b6000611c3d4783611bbb565b90506000611c576064611c518460506122a6565b90611acb565b600d546040519192506001600160a01b03169082156108fc029083906000818181858888f19350505050158015611c92573d6000803e3d6000fd5b50611c9d8183612a23565b9150611ca98483612325565b60408051868152602081018490529081018590527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a150506015805460ff1916905550505050565b60095460ff16611d20576000546001600160a01b03858116911614611d2057600080fd5b80611d2d57611d2d61243a565b6001600160a01b03841660009081526007602052604090205460ff168015611d6e57506001600160a01b03831660009081526007602052604090205460ff16155b15611d8357611d7e848484612468565b611e81565b6001600160a01b03841660009081526007602052604090205460ff16158015611dc457506001600160a01b03831660009081526007602052604090205460ff165b15611dd457611d7e84848461258e565b6001600160a01b03841660009081526007602052604090205460ff16158015611e1657506001600160a01b03831660009081526007602052604090205460ff16155b15611e2657611d7e848484612637565b6001600160a01b03841660009081526007602052604090205460ff168015611e6657506001600160a01b03831660009081526007602052604090205460ff165b15611e7657611d7e84848461267b565b611e81848484612637565b80611e9757611e97601254601155601454601355565b50505050565b600b54600a546000918291825b600854811015611fef57826003600060088481548110611ecc57611ecc612a0d565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180611f375750816004600060088481548110611f1057611f10612a0d565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15611f4d57600b54600a54945094505050509091565b611f936003600060088481548110611f6757611f67612a0d565b60009182526020808320909101546001600160a01b031683528201929092526040019020548490611bbb565b9250611fdb6004600060088481548110611faf57611faf612a0d565b60009182526020808320909101546001600160a01b031683528201929092526040019020548390611bbb565b915080611fe781612a50565b915050611eaa565b50600a54600b54611fff91611acb565b82101561201657600b54600a549350935050509091565b90939092509050565b600081836120405760405162461bcd60e51b81526004016108eb91906127d2565b506000611a9f8486612ab9565b60008060008061205c856126ee565b905060006120698661270a565b905060006120818261207b8986611bbb565b90611bbb565b979296509094509092505050565b600080808061209e88866122a6565b905060006120ac88876122a6565b905060006120ba88886122a6565b905060006120cc8261207b8686611bbb565b939b939a50919850919650505050505050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061211457612114612a0d565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561218d57600080fd5b505afa1580156121a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121c59190612adb565b816001815181106121d8576121d8612a0d565b60200260200101906001600160a01b031690816001600160a01b031681525050612223307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611699565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac94790612278908590600090869030904290600401612af8565b600060405180830381600087803b15801561229257600080fd5b505af1158015611a66573d6000803e3d6000fd5b6000826122b557506000610919565b60006122c183856129ee565b9050826122ce8583612ab9565b14610abd5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084016108eb565b612350307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611699565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663f305d7198230856000806123976000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c4016060604051808303818588803b1580156123fa57600080fd5b505af115801561240e573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906124339190612b69565b5050505050565b60115415801561244a5750601354155b1561245157565b601180546012556013805460145560009182905555565b60008060008060008061247a87611b6c565b6001600160a01b038f16600090815260046020526040902054959b509399509197509550935091506124ac9088611bbb565b6001600160a01b038a166000908152600460209081526040808320939093556003905220546124db9087611bbb565b6001600160a01b03808b1660009081526003602052604080822093909355908a168152205461250a9086611b0d565b6001600160a01b03891660009081526003602052604090205561252c81612726565b61253684836127ae565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161257b91815260200190565b60405180910390a3505050505050505050565b6000806000806000806125a087611b6c565b6001600160a01b038f16600090815260036020526040902054959b509399509197509550935091506125d29087611bbb565b6001600160a01b03808b16600090815260036020908152604080832094909455918b168152600490915220546126089084611b0d565b6001600160a01b03891660009081526004602090815260408083209390935560039052205461250a9086611b0d565b60008060008060008061264987611b6c565b6001600160a01b038f16600090815260036020526040902054959b509399509197509550935091506124db9087611bbb565b60008060008060008061268d87611b6c565b6001600160a01b038f16600090815260046020526040902054959b509399509197509550935091506126bf9088611bbb565b6001600160a01b038a166000908152600460209081526040808320939093556003905220546125d29087611bbb565b60006109196064611c51601154856122a690919063ffffffff16565b60006109196064611c51601354856122a690919063ffffffff16565b6000612730611aa8565b9050600061273e83836122a6565b3060009081526003602052604090205490915061275b9082611b0d565b3060009081526003602090815260408083209390935560079052205460ff1615610dda57306000908152600460205260409020546127999084611b0d565b30600090815260046020526040902055505050565b600b546127bb9083611bbb565b600b55600c546127cb9082611b0d565b600c555050565b600060208083528351808285015260005b818110156127ff578581018301518582016040015282016127e3565b81811115612811576000604083870101525b50601f01601f1916929092016040019392505050565b60006020828403121561283957600080fd5b5035919050565b6001600160a01b038116811461100757600080fd5b6000806040838503121561286857600080fd5b823561287381612840565b946020939093013593505050565b60008060006060848603121561289657600080fd5b83356128a181612840565b925060208401356128b181612840565b929592945050506040919091013590565b6000602082840312156128d457600080fd5b8135610abd81612840565b600080604083850312156128f257600080fd5b82356128fd81612840565b9150602083013561290d81612840565b809150509250929050565b801515811461100757600080fd5b6000806040838503121561293957600080fd5b82359150602083013561290d81612918565b60006020828403121561295d57600080fd5b8135610abd81612918565b600181811c9082168061297c57607f821691505b6020821081141561299d57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b6000816000190483118215151615612a0857612a086129d8565b500290565b634e487b7160e01b600052603260045260246000fd5b600082821015612a3557612a356129d8565b500390565b634e487b7160e01b600052603160045260246000fd5b6000600019821415612a6457612a646129d8565b5060010190565b600060208284031215612a7d57600080fd5b5051919050565b600060208284031215612a9657600080fd5b8151610abd81612918565b60008219821115612ab457612ab46129d8565b500190565b600082612ad657634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215612aed57600080fd5b8151610abd81612840565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612b485784516001600160a01b031683529383019391830191600101612b23565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215612b7e57600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63658be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e045524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212202a8113f3f2090545366a71539305074488587f76812b8149536d170cbcf3e08264736f6c63430008090033
Deployed Bytecode Sourcemap
27790:21183:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30244:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36134:128;;;;;;;;;;-1:-1:-1;36134:128:0;;;;;:::i;:::-;;:::i;:::-;;31229:193;;;;;;;;;;-1:-1:-1;31229:193:0;;;;;:::i;:::-;;:::i;:::-;;;1422:14:1;;1415:22;1397:41;;1385:2;1370:18;31229:193:0;1257:187:1;32728:87:0;;;;;;;;;;-1:-1:-1;32797:10:0;;32728:87;;;1595:25:1;;;1583:2;1568:18;32728:87:0;1449:177:1;28809:51:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1822:32:1;;;1804:51;;1792:2;1777:18;28809:51:0;1631:230:1;30521:95:0;;;;;;;;;;-1:-1:-1;30601:7:0;;30521:95;;31430:446;;;;;;;;;;-1:-1:-1;31430:446:0;;;;;:::i;:::-;;:::i;36270:332::-;;;;;;;;;;-1:-1:-1;36270:332:0;;;;;:::i;:::-;;:::i;33737:322::-;;;;;;;;;;-1:-1:-1;33737:322:0;;;;;:::i;:::-;;:::i;28236:28::-;;;;;;;;;;-1:-1:-1;28236:28:0;;;;;;;;30430:83;;;;;;;;;;-1:-1:-1;30496:9:0;;30430:83;;30496:9;;;;2469:36:1;;2457:2;2442:18;30430:83:0;2327:184:1;34521:477:0;;;;;;;;;;-1:-1:-1;34521:477:0;;;;;:::i;:::-;;:::i;31884:300::-;;;;;;;;;;-1:-1:-1;31884:300:0;;;;;:::i;:::-;;:::i;36733:243::-;;;;;;;;;;-1:-1:-1;36733:243:0;;;;;:::i;:::-;;:::i;28624:26::-;;;;;;;;;;;;;;;;32823:419;;;;;;;;;;-1:-1:-1;32823:419:0;;;;;:::i;:::-;;:::i;35771:111::-;;;;;;;;;;-1:-1:-1;35771:111:0;;;;;:::i;:::-;;:::i;33250:479::-;;;;;;;;;;-1:-1:-1;33250:479:0;;;;;:::i;:::-;;:::i;36610:115::-;;;;;;;;;;;;;:::i;28867:38::-;;;;;;;;;;;;;;;28942:40;;;;;;;;;;-1:-1:-1;28942:40:0;;;;;;;;;;;34067:446;;;;;;;;;;-1:-1:-1;34067:446:0;;;;;:::i;:::-;;:::i;41244:124::-;;;;;;;;;;-1:-1:-1;41244:124:0;;;;;:::i;:::-;-1:-1:-1;;;;;41333:27:0;41309:4;41333:27;;;:18;:27;;;;;;;;;41244:124;36008:118;;;;;;;;;;-1:-1:-1;36008:118:0;;;;;:::i;:::-;;:::i;28707:33::-;;;;;;;;;;;;;;;;30624:198;;;;;;;;;;-1:-1:-1;30624:198:0;;;;;:::i;:::-;;:::i;17044:148::-;;;;;;;;;;;;;:::i;28467:30::-;;;;;;;;;;-1:-1:-1;28467:30:0;;;;-1:-1:-1;;;;;28467:30:0;;;36984:164;;;;;;;;;;-1:-1:-1;36984:164:0;;;;;:::i;:::-;;:::i;28991:50::-;;;;;;;;;;;;;;;;32600:120;;;;;;;;;;-1:-1:-1;32600:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;32692:20:0;32668:4;32692:20;;;:11;:20;;;;;;;;;32600:120;16402:79;;;;;;;;;;-1:-1:-1;16440:7:0;16467:6;-1:-1:-1;;;;;16467:6:0;16402:79;;30335:87;;;;;;;;;;;;;:::i;32192:400::-;;;;;;;;;;-1:-1:-1;32192:400:0;;;;;:::i;:::-;;:::i;37156:77::-;;;;;;;;;;;;;:::i;18099:341::-;;;;;;;;;;;;;:::i;30830:199::-;;;;;;;;;;-1:-1:-1;30830:199:0;;;;;:::i;:::-;;:::i;17636:89::-;;;;;;;;;;-1:-1:-1;17708:9:0;;17636:89;;37241:171;;;;;;;;;;-1:-1:-1;37241:171:0;;;;;:::i;:::-;;:::i;29048:77::-;;;;;;;;;;;;;;;;17801:226;;;;;;;;;;-1:-1:-1;17801:226:0;;;;;:::i;:::-;;:::i;31037:184::-;;;;;;;;;;-1:-1:-1;31037:184:0;;;;;:::i;:::-;-1:-1:-1;;;;;31186:18:0;;;31154:7;31186:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;31037:184;35890:110;;;;;;;;;;-1:-1:-1;35890:110:0;;;;;:::i;:::-;;:::i;17347:281::-;;;;;;;;;;-1:-1:-1;17347:281:0;;;;;:::i;:::-;;:::i;30244:83::-;30281:13;30314:5;30307:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30244:83;:::o;36134:128::-;16614:6;;-1:-1:-1;;;;;16614:6:0;8457:10;16614:22;16606:67;;;;-1:-1:-1;;;16606:67:0;;;;;;;:::i;:::-;;;;;;;;;36225:29:::1;36233:12:::0;36249:5:::1;36225:29;:::i;:::-;36210:12;:44:::0;-1:-1:-1;36134:128:0:o;31229:193::-;31331:4;31353:39;8457:10;31376:7;31385:6;31353:8;:39::i;:::-;-1:-1:-1;31410:4:0;31229:193;;;;;:::o;31430:446::-;31562:4;31579:36;31589:6;31597:9;31608:6;31579:9;:36::i;:::-;31626:220;31649:6;8457:10;31697:138;31753:6;31697:138;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;31697:19:0;;;;;;:11;:19;;;;;;;;8457:10;31697:33;;;;;;;;;;:37;:138::i;:::-;31626:8;:220::i;:::-;-1:-1:-1;31864:4:0;31430:446;;;;;:::o;36270:332::-;16614:6;;-1:-1:-1;;;;;16614:6:0;8457:10;16614:22;16606:67;;;;-1:-1:-1;;;16606:67:0;;;;;;;:::i;:::-;36428:13:::1;36406:19;:35;36384:140;;;::::0;-1:-1:-1;;;36384:140:0;;5971:2:1;36384:140:0::1;::::0;::::1;5953:21:1::0;6010:2;5990:18;;;5983:30;6049:34;6029:18;;;6022:62;6120:25;6100:18;;;6093:53;6163:19;;36384:140:0::1;5769:419:1::0;36384:140:0::1;36567:27;:19:::0;36589:5:::1;36567:27;:::i;:::-;36535:29;:59:::0;-1:-1:-1;36270:332:0:o;33737:322::-;33831:7;33889;;33878;:18;;33856:110;;;;-1:-1:-1;;;33856:110:0;;6395:2:1;33856:110:0;;;6377:21:1;6434:2;6414:18;;;6407:30;6473:34;6453:18;;;6446:62;-1:-1:-1;;;6524:18:1;;;6517:40;6574:19;;33856:110:0;6193:406:1;33856:110:0;33977:19;33999:10;:8;:10::i;:::-;33977:32;-1:-1:-1;34027:24:0;:7;33977:32;34027:11;:24::i;:::-;34020:31;33737:322;-1:-1:-1;;;33737:322:0:o;34521:477::-;16614:6;;-1:-1:-1;;;;;16614:6:0;8457:10;16614:22;16606:67;;;;-1:-1:-1;;;16606:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;34601:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;34593:60;;;::::0;-1:-1:-1;;;34593:60:0;;6806:2:1;34593:60:0::1;::::0;::::1;6788:21:1::0;6845:2;6825:18;;;6818:30;6884:29;6864:18;;;6857:57;6931:18;;34593:60:0::1;6604:351:1::0;34593:60:0::1;34669:9;34664:327;34688:9;:16:::0;34684:20;::::1;34664:327;;;34746:7;-1:-1:-1::0;;;;;34730:23:0::1;:9;34740:1;34730:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;34730:12:0::1;:23;34726:254;;;34789:9;34799:16:::0;;:20:::1;::::0;34818:1:::1;::::0;34799:20:::1;:::i;:::-;34789:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;34774:9:::1;:12:::0;;-1:-1:-1;;;;;34789:31:0;;::::1;::::0;34784:1;;34774:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;34774:46:0::1;-1:-1:-1::0;;;;;34774:46:0;;::::1;;::::0;;34839:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;34878:11:::1;:20:::0;;;;:28;;-1:-1:-1;;34878:28:0::1;::::0;;34925:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;34925:15:0;;;;;-1:-1:-1;;;;;;34925:15:0::1;::::0;;;;;34664:327:::1;34521:477:::0;:::o;34726:254::-:1;34706:3:::0;::::1;::::0;::::1;:::i;:::-;;;;34664:327;;;;34521:477:::0;:::o;31884:300::-;8457:10;31999:4;32093:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;32093:34:0;;;;;;;;;;31999:4;;32021:133;;32071:7;;32093:50;;32132:10;32093:38;:50::i;36733:243::-;16614:6;;-1:-1:-1;;;;;16614:6:0;8457:10;16614:22;16606:67;;;;-1:-1:-1;;;16606:67:0;;;;;;;:::i;:::-;36920:37:::1;::::0;-1:-1:-1;;;36920:37:0;;36951:4:::1;36920:37;::::0;::::1;1804:51:1::0;-1:-1:-1;;;;;36856:21:0;::::1;::::0;::::1;::::0;36892:13;;36856:21;;36920:22:::1;::::0;1777:18:1;;36920:37:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36856:112;::::0;-1:-1:-1;;;;;;36856:112:0::1;::::0;;;;;;-1:-1:-1;;;;;7875:32:1;;;36856:112:0::1;::::0;::::1;7857:51:1::0;7924:18;;;7917:34;7830:18;;36856:112:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;36733:243:::0;;:::o;32823:419::-;8457:10;32875:14;32938:19;;;:11;:19;;;;;;;;32937:20;32915:114;;;;-1:-1:-1;;;32915:114:0;;8414:2:1;32915:114:0;;;8396:21:1;8453:2;8433:18;;;8426:30;8492:34;8472:18;;;8465:62;-1:-1:-1;;;8543:18:1;;;8536:42;8595:19;;32915:114:0;8212:408:1;32915:114:0;33041:15;33070:19;33081:7;33070:10;:19::i;:::-;-1:-1:-1;;;;;;;;;33118:15:0;;;;;;:7;:15;;;;;;33040:49;;-1:-1:-1;33118:28:0;;:15;-1:-1:-1;33040:49:0;33118:19;:28::i;:::-;-1:-1:-1;;;;;33100:15:0;;;;;;:7;:15;;;;;:46;33167:7;;:20;;33179:7;33167:11;:20::i;:::-;33157:7;:30;33211:10;;:23;;33226:7;33211:14;:23::i;:::-;33198:10;:36;-1:-1:-1;;;32823:419:0:o;35771:111::-;16614:6;;-1:-1:-1;;;;;16614:6:0;8457:10;16614:22;16606:67;;;;-1:-1:-1;;;16606:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;35840:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;35840:34:0::1;35870:4;35840:34;::::0;;35771:111::o;33250:479::-;33368:7;33412;;33401;:18;;33393:62;;;;-1:-1:-1;;;33393:62:0;;8827:2:1;33393:62:0;;;8809:21:1;8866:2;8846:18;;;8839:30;8905:33;8885:18;;;8878:61;8956:18;;33393:62:0;8625:355:1;33393:62:0;33471:17;33466:256;;33506:15;33535:19;33546:7;33535:10;:19::i;:::-;-1:-1:-1;33505:49:0;;-1:-1:-1;33569:14:0;;-1:-1:-1;;;;;33569:14:0;33466:256;33619:23;33654:19;33665:7;33654:10;:19::i;:::-;-1:-1:-1;33616:57:0;;-1:-1:-1;33688:22:0;;-1:-1:-1;;;;;33688:22:0;36610:115;16614:6;;-1:-1:-1;;;;;16614:6:0;8457:10;16614:22;16606:67;;;;-1:-1:-1;;;16606:67:0;;;;;;;:::i;:::-;36669:15:::1;::::0;36661:56:::1;::::0;-1:-1:-1;;;;;36669:15:0;;::::1;::::0;36695:21:::1;36661:56:::0;::::1;;;::::0;36669:15:::1;36661:56:::0;36669:15;36661:56;36695:21;36669:15;36661:56;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;36610:115::o:0;34067:446::-;16614:6;;-1:-1:-1;;;;;16614:6:0;8457:10;16614:22;16606:67;;;;-1:-1:-1;;;16606:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;34262:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;34261:21;34253:61;;;::::0;-1:-1:-1;;;34253:61:0;;6806:2:1;34253:61:0::1;::::0;::::1;6788:21:1::0;6845:2;6825:18;;;6818:30;6884:29;6864:18;;;6857:57;6931:18;;34253:61:0::1;6604:351:1::0;34253:61:0::1;-1:-1:-1::0;;;;;34329:16:0;::::1;34348:1;34329:16:::0;;;:7:::1;:16;::::0;;;;;:20;34325:109:::1;;-1:-1:-1::0;;;;;34405:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;34385:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;34366:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;34325:109:::1;-1:-1:-1::0;;;;;34444:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;34444:27:0::1;34467:4;34444:27:::0;;::::1;::::0;;;34482:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;34482:23:0::1;::::0;;::::1;::::0;;34067:446::o;36008:118::-;16614:6;;-1:-1:-1;;;;;16614:6:0;8457:10;16614:22;16606:67;;;;-1:-1:-1;;;16606:67:0;;;;;;;:::i;:::-;36087:15:::1;:31:::0;;-1:-1:-1;;;;;;36087:31:0::1;-1:-1:-1::0;;;;;36087:31:0;;;::::1;::::0;;;::::1;::::0;;36008:118::o;30624:198::-;-1:-1:-1;;;;;30714:20:0;;30690:7;30714:20;;;:11;:20;;;;;;;;30710:49;;;-1:-1:-1;;;;;;30743:16:0;;;;;:7;:16;;;;;;;30624:198::o;30710:49::-;-1:-1:-1;;;;;30797:16:0;;;;;;:7;:16;;;;;;30777:37;;:19;:37::i;17044:148::-;16614:6;;-1:-1:-1;;;;;16614:6:0;8457:10;16614:22;16606:67;;;;-1:-1:-1;;;16606:67:0;;;;;;;:::i;:::-;17151:1:::1;17135:6:::0;;17114:40:::1;::::0;-1:-1:-1;;;;;17135:6:0;;::::1;::::0;-1:-1:-1;;;;;;;;;;;17114:40:0;17151:1;;17114:40:::1;17182:1;17165:19:::0;;-1:-1:-1;;;;;;17165:19:0::1;::::0;;17044:148::o;36984:164::-;16614:6;;-1:-1:-1;;;;;16614:6:0;8457:10;16614:22;16606:67;;;;-1:-1:-1;;;16606:67:0;;;;;;;:::i;:::-;37095:45:::1;::::0;-1:-1:-1;;;;;37095:22:0;::::1;::::0;37118:21:::1;37095:45:::0;::::1;;;::::0;::::1;::::0;;;37118:21;37095:22;:45;::::1;;;;;;;;;;;;;::::0;::::1;;;;30335:87:::0;30374:13;30407:7;30400:14;;;;;:::i;32192:400::-;32312:4;32334:228;8457:10;32384:7;32406:145;32463:15;32406:145;;;;;;;;;;;;;;;;;8457:10;32406:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;32406:34:0;;;;;;;;;;;;:38;:145::i;37156:77::-;16614:6;;-1:-1:-1;;;;;16614:6:0;8457:10;16614:22;16606:67;;;;-1:-1:-1;;;16606:67:0;;;;;;;:::i;:::-;37210:8:::1;:15:::0;;-1:-1:-1;;37210:15:0::1;37221:4;37210:15;::::0;;37156:77::o;18099:341::-;18165:14;;-1:-1:-1;;;;;18165:14:0;18183:10;18165:28;18143:113;;;;-1:-1:-1;;;18143:113:0;;9187:2:1;18143:113:0;;;9169:21:1;9226:2;9206:18;;;9199:30;9265:34;9245:18;;;9238:62;-1:-1:-1;;;9316:18:1;;;9309:33;9359:19;;18143:113:0;8985:399:1;18143:113:0;18293:9;;18275:15;:27;18267:71;;;;-1:-1:-1;;;18267:71:0;;9591:2:1;18267:71:0;;;9573:21:1;9630:2;9610:18;;;9603:30;9669:33;9649:18;;;9642:61;9720:18;;18267:71:0;9389:355:1;18267:71:0;18383:14;;;18375:6;;18354:44;;-1:-1:-1;;;;;18383:14:0;;;;18375:6;;;;-1:-1:-1;;;;;;;;;;;18354:44:0;;18418:14;;;18409:23;;-1:-1:-1;;;;;;18409:23:0;-1:-1:-1;;;;;18418:14:0;;;18409:23;;;;;;18099:341::o;30830:199::-;30935:4;30957:42;8457:10;30981:9;30992:6;30957:9;:42::i;37241:171::-;16614:6;;-1:-1:-1;;;;;16614:6:0;8457:10;16614:22;16606:67;;;;-1:-1:-1;;;16606:67:0;;;;;;;:::i;:::-;37318:21:::1;:32:::0;;;::::1;;;;-1:-1:-1::0;;37318:32:0;;::::1;;::::0;;37366:38:::1;::::0;::::1;::::0;::::1;::::0;37342:8;1422:14:1;1415:22;1397:41;;1385:2;1370:18;;1257:187;37366:38:0::1;;;;;;;;37241:171:::0;:::o;17801:226::-;16614:6;;-1:-1:-1;;;;;16614:6:0;8457:10;16614:22;16606:67;;;;-1:-1:-1;;;16606:67:0;;;;;;;:::i;:::-;17882:6:::1;::::0;;;17865:23;;-1:-1:-1;;;;;;17865:23:0;;::::1;-1:-1:-1::0;;;;;17882:6:0;::::1;17865:23;::::0;;;17899:19:::1;::::0;;17941:22:::1;17959:4:::0;17941:15:::1;:22;:::i;:::-;17929:9;:34:::0;18016:1:::1;18000:6:::0;;17979:40:::1;::::0;-1:-1:-1;;;;;18000:6:0;;::::1;::::0;-1:-1:-1;;;;;;;;;;;17979:40:0;18016:1;;17979:40:::1;17801:226:::0;:::o;35890:110::-;16614:6;;-1:-1:-1;;;;;16614:6:0;8457:10;16614:22;16606:67;;;;-1:-1:-1;;;16606:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;35957:27:0::1;35987:5;35957:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;35957:35:0::1;::::0;;35890:110::o;17347:281::-;16614:6;;-1:-1:-1;;;;;16614:6:0;8457:10;16614:22;16606:67;;;;-1:-1:-1;;;16606:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;17450:22:0;::::1;17428:110;;;::::0;-1:-1:-1;;;17428:110:0;;10084:2:1;17428:110:0::1;::::0;::::1;10066:21:1::0;10123:2;10103:18;;;10096:30;10162:34;10142:18;;;10135:62;-1:-1:-1;;;10213:18:1;;;10206:36;10259:19;;17428:110:0::1;9882:402:1::0;17428:110:0::1;17575:6;::::0;;17554:38:::1;::::0;-1:-1:-1;;;;;17554:38:0;;::::1;::::0;17575:6;::::1;::::0;-1:-1:-1;;;;;;;;;;;17554:38:0;::::1;17603:6;:17:::0;;-1:-1:-1;;;;;;17603:17:0::1;-1:-1:-1::0;;;;;17603:17:0;;;::::1;::::0;;;::::1;::::0;;17347:281::o;41376:371::-;-1:-1:-1;;;;;41503:19:0;;41495:68;;;;-1:-1:-1;;;41495:68:0;;10491:2:1;41495:68:0;;;10473:21:1;10530:2;10510:18;;;10503:30;10569:34;10549:18;;;10542:62;-1:-1:-1;;;10620:18:1;;;10613:34;10664:19;;41495:68:0;10289:400:1;41495:68:0;-1:-1:-1;;;;;41582:21:0;;41574:68;;;;-1:-1:-1;;;41574:68:0;;10896:2:1;41574:68:0;;;10878:21:1;10935:2;10915:18;;;10908:30;10974:34;10954:18;;;10947:62;-1:-1:-1;;;11025:18:1;;;11018:32;11067:19;;41574:68:0;10694:398:1;41574:68:0;-1:-1:-1;;;;;41655:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;41707:32;;1595:25:1;;;41707:32:0;;1568:18:1;41707:32:0;;;;;;;41376:371;;;:::o;41755:1833::-;-1:-1:-1;;;;;41877:18:0;;41869:68;;;;-1:-1:-1;;;41869:68:0;;11299:2:1;41869:68:0;;;11281:21:1;11338:2;11318:18;;;11311:30;11377:34;11357:18;;;11350:62;-1:-1:-1;;;11428:18:1;;;11421:35;11473:19;;41869:68:0;11097:401:1;41869:68:0;-1:-1:-1;;;;;41956:16:0;;41948:64;;;;-1:-1:-1;;;41948:64:0;;11705:2:1;41948:64:0;;;11687:21:1;11744:2;11724:18;;;11717:30;11783:34;11763:18;;;11756:62;-1:-1:-1;;;11834:18:1;;;11827:33;11877:19;;41948:64:0;11503:399:1;41948:64:0;42040:1;42031:6;:10;42023:64;;;;-1:-1:-1;;;42023:64:0;;12109:2:1;42023:64:0;;;12091:21:1;12148:2;12128:18;;;12121:30;12187:34;12167:18;;;12160:62;-1:-1:-1;;;12238:18:1;;;12231:39;12287:19;;42023:64:0;11907:405:1;42023:64:0;16440:7;16467:6;-1:-1:-1;;;;;42102:15:0;;;16467:6;;42102:15;;;;:32;;-1:-1:-1;16440:7:0;16467:6;-1:-1:-1;;;;;42121:13:0;;;16467:6;;42121:13;;42102:32;42098:175;;;42185:12;;42175:6;:22;;42149:124;;;;-1:-1:-1;;;42149:124:0;;12519:2:1;42149:124:0;;;12501:21:1;12558:2;12538:18;;;12531:30;12597:34;12577:18;;;12570:62;-1:-1:-1;;;12648:18:1;;;12641:38;12696:19;;42149:124:0;12317:404:1;42149:124:0;42568:28;42599:24;42617:4;42599:9;:24::i;:::-;42568:55;;42664:12;;42640:20;:36;42636:104;;-1:-1:-1;42716:12:0;;42636:104;42816:29;;42779:66;;;;;;;42874:53;;-1:-1:-1;42911:16:0;;;;42910:17;42874:53;:91;;;;;42952:13;-1:-1:-1;;;;;42944:21:0;:4;-1:-1:-1;;;;;42944:21:0;;;42874:91;:129;;;;-1:-1:-1;42982:21:0;;;;;;;42874:129;42856:318;;;43053:29;;43030:52;;43126:36;43141:20;43126:14;:36::i;:::-;-1:-1:-1;;;;;43367:24:0;;43247:12;43367:24;;;:18;:24;;;;;;43262:4;;43367:24;;;:50;;-1:-1:-1;;;;;;43395:22:0;;;;;;:18;:22;;;;;;;;43367:50;43363:98;;;-1:-1:-1;43444:5:0;43363:98;43539:41;43554:4;43560:2;43564:6;43572:7;43539:14;:41::i;:::-;41858:1730;;;41755:1833;;;:::o;4606:226::-;4726:7;4762:12;4754:6;;;;4746:29;;;;-1:-1:-1;;;4746:29:0;;;;;;;;:::i;:::-;-1:-1:-1;4786:9:0;4798:5;4802:1;4798;:5;:::i;:::-;4786:17;4606:226;-1:-1:-1;;;;;4606:226:0:o;39400:164::-;39442:7;39463:15;39480;39499:19;:17;:19::i;:::-;39462:56;;-1:-1:-1;39462:56:0;-1:-1:-1;39536:20:0;39462:56;;39536:11;:20::i;:::-;39529:27;;;;39400:164;:::o;6038:132::-;6096:7;6123:39;6127:1;6130;6123:39;;;;;;;;;;;;;;;;;:3;:39::i;3703:181::-;3761:7;;3793:5;3797:1;3793;:5;:::i;:::-;3781:17;;3822:1;3817;:6;;3809:46;;;;-1:-1:-1;;;3809:46:0;;12928:2:1;3809:46:0;;;12910:21:1;12967:2;12947:18;;;12940:30;13006:29;12986:18;;;12979:57;13053:18;;3809:46:0;12726:351:1;37668:742:0;37768:7;37790;37812;37834;37856;37878;37928:23;37966:12;37993:18;38025:20;38037:7;38025:11;:20::i;:::-;37913:132;;;;;;38057:15;38074:23;38099:12;38115:113;38141:7;38163:4;38182:10;38207;:8;:10::i;:::-;38115:11;:113::i;:::-;38056:172;;;;-1:-1:-1;38056:172:0;;-1:-1:-1;38332:15:0;;-1:-1:-1;38362:4:0;;-1:-1:-1;38381:10:0;;-1:-1:-1;37668:742:0;;-1:-1:-1;;;;;37668:742:0:o;4167:136::-;4225:7;4252:43;4256:1;4259;4252:43;;;;;;;;;;;;;;;;;:3;:43::i;43596:1174::-;29426:16;:23;;-1:-1:-1;;29426:23:0;29445:4;29426:23;;;:16;43784:27:::1;:20:::0;43809:1:::1;43784:24;:27::i;:::-;43769:42:::0;-1:-1:-1;43822:17:0::1;43842:30;:20:::0;43769:42;43842:24:::1;:30::i;:::-;43822:50:::0;-1:-1:-1;44175:21:0::1;44241:22;44258:4:::0;44241:16:::1;:22::i;:::-;44394:18;44415:41;:21;44441:14:::0;44415:25:::1;:41::i;:::-;44394:62:::0;-1:-1:-1;44467:22:0::1;44492:27;44515:3;44492:18;44394:62:::0;44507:2:::1;44492:14;:18::i;:::-;:22:::0;::::1;:27::i;:::-;44538:15;::::0;44530:49:::1;::::0;44467:52;;-1:-1:-1;;;;;;44538:15:0::1;::::0;44530:49;::::1;;;::::0;44467:52;;44538:15:::1;44530:49:::0;44538:15;44530:49;44467:52;44538:15;44530:49;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;44590:28:0::1;44604:14:::0;44590:28;::::1;:::i;:::-;;;44666:35;44679:9;44690:10;44666:12;:35::i;:::-;44719:43;::::0;;13284:25:1;;;13340:2;13325:18;;13318:34;;;13368:18;;;13361:34;;;44719:43:0::1;::::0;13272:2:1;13257:18;44719:43:0::1;;;;;;;-1:-1:-1::0;;29472:16:0;:24;;-1:-1:-1;;29472:24:0;;;-1:-1:-1;;;;43596:1174:0:o;45969:968::-;46125:8;;;;46120:116;;16440:7;16467:6;-1:-1:-1;;;;;46158:17:0;;;16467:6;;46158:17;46150:26;;;;;;46255:7;46250:28;;46264:14;:12;:14::i;:::-;-1:-1:-1;;;;;46295:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;46319:22:0;;;;;;:11;:22;;;;;;;;46318:23;46295:46;46291:597;;;46358:48;46380:6;46388:9;46399:6;46358:21;:48::i;:::-;46291:597;;;-1:-1:-1;;;;;46429:19:0;;;;;;:11;:19;;;;;;;;46428:20;:46;;;;-1:-1:-1;;;;;;46452:22:0;;;;;;:11;:22;;;;;;;;46428:46;46424:464;;;46491:46;46511:6;46519:9;46530:6;46491:19;:46::i;46424:464::-;-1:-1:-1;;;;;46560:19:0;;;;;;:11;:19;;;;;;;;46559:20;:47;;;;-1:-1:-1;;;;;;46584:22:0;;;;;;:11;:22;;;;;;;;46583:23;46559:47;46555:333;;;46623:44;46641:6;46649:9;46660:6;46623:17;:44::i;46555:333::-;-1:-1:-1;;;;;46689:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;46712:22:0;;;;;;:11;:22;;;;;;;;46689:45;46685:203;;;46751:48;46773:6;46781:9;46792:6;46751:21;:48::i;46685:203::-;46832:44;46850:6;46858:9;46869:6;46832:17;:44::i;:::-;46905:7;46900:29;;46914:15;41165;;41155:7;:25;41207:21;;41191:13;:37;41111:125;46914:15;45969:968;;;;:::o;39572:605::-;39670:7;;39706;;39623;;;;;39724:338;39748:9;:16;39744:20;;39724:338;;;39832:7;39808;:21;39816:9;39826:1;39816:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;39816:12:0;39808:21;;;;;;;;;;;;;:31;;:83;;;39884:7;39860;:21;39868:9;39878:1;39868:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;39868:12:0;39860:21;;;;;;;;;;;;;:31;39808:83;39786:146;;;39915:7;;39924;;39907:25;;;;;;;39572:605;;:::o;39786:146::-;39957:34;39969:7;:21;39977:9;39987:1;39977:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;39977:12:0;39969:21;;;;;;;;;;;;;39957:7;;:11;:34::i;:::-;39947:44;;40016:34;40028:7;:21;40036:9;40046:1;40036:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;40036:12:0;40028:21;;;;;;;;;;;;;40016:7;;:11;:34::i;:::-;40006:44;-1:-1:-1;39766:3:0;;;;:::i;:::-;;;;39724:338;;;-1:-1:-1;40098:7:0;;40086;;:20;;:11;:20::i;:::-;40076:7;:30;40072:61;;;40116:7;;40125;;40108:25;;;;;;39572:605;;:::o;40072:61::-;40152:7;;40161;;-1:-1:-1;39572:605:0;-1:-1:-1;39572:605:0:o;6666:312::-;6786:7;6821:12;6814:5;6806:28;;;;-1:-1:-1;;;6806:28:0;;;;;;;;:::i;:::-;-1:-1:-1;6845:9:0;6857:5;6861:1;6857;:5;:::i;38418:412::-;38519:7;38541;38563;38598:12;38613:24;38629:7;38613:15;:24::i;:::-;38598:39;;38648:18;38669:30;38691:7;38669:21;:30::i;:::-;38648:51;-1:-1:-1;38710:23:0;38736:33;38648:51;38736:17;:7;38748:4;38736:11;:17::i;:::-;:21;;:33::i;:::-;38710:59;38805:4;;-1:-1:-1;38811:10:0;;-1:-1:-1;38418:412:0;;-1:-1:-1;;;38418:412:0:o;38838:554::-;39037:7;;;;39134:24;:7;39146:11;39134;:24::i;:::-;39116:42;-1:-1:-1;39169:12:0;39184:21;:4;39193:11;39184:8;:21::i;:::-;39169:36;-1:-1:-1;39216:18:0;39237:27;:10;39252:11;39237:14;:27::i;:::-;39216:48;-1:-1:-1;39275:23:0;39301:33;39216:48;39301:17;:7;39313:4;39301:11;:17::i;:33::-;39353:7;;;;-1:-1:-1;39379:4:0;;-1:-1:-1;38838:554:0;;-1:-1:-1;;;;;;;38838:554:0:o;44778:589::-;44928:16;;;44942:1;44928:16;;;;;;;;44904:21;;44928:16;;;;;;;;;;-1:-1:-1;44928:16:0;44904:40;;44973:4;44955;44960:1;44955:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;44955:23:0;;;-1:-1:-1;;;;;44955:23:0;;;;;44999:15;-1:-1:-1;;;;;44999:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;44989:4;44994:1;44989:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;44989:32:0;;;-1:-1:-1;;;;;44989:32:0;;;;;45034:62;45051:4;45066:15;45084:11;45034:8;:62::i;:::-;45135:224;;-1:-1:-1;;;45135:224:0;;-1:-1:-1;;;;;45135:15:0;:66;;;;:224;;45216:11;;45242:1;;45286:4;;45313;;45333:15;;45135:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5091:471;5149:7;5394:6;5390:47;;-1:-1:-1;5424:1:0;5417:8;;5390:47;5449:9;5461:5;5465:1;5461;:5;:::i;:::-;5449:17;-1:-1:-1;5494:1:0;5485:5;5489:1;5449:17;5485:5;:::i;:::-;:10;5477:56;;;;-1:-1:-1;;;5477:56:0;;15203:2:1;5477:56:0;;;15185:21:1;15242:2;15222:18;;;15215:30;15281:34;15261:18;;;15254:62;-1:-1:-1;;;15332:18:1;;;15325:31;15373:19;;5477:56:0;15001:397:1;45375:513:0;45523:62;45540:4;45555:15;45573:11;45523:8;:62::i;:::-;45628:15;-1:-1:-1;;;;;45628:31:0;;45667:9;45700:4;45720:11;45746:1;45789;45832:7;16440;16467:6;-1:-1:-1;;;;;16467:6:0;;16402:79;45832:7;45628:252;;;;;;-1:-1:-1;;;;;;45628:252:0;;;-1:-1:-1;;;;;15762:15:1;;;45628:252:0;;;15744:34:1;15794:18;;;15787:34;;;;15837:18;;;15830:34;;;;15880:18;;;15873:34;15944:15;;;15923:19;;;15916:44;45854:15:0;15976:19:1;;;15969:35;15678:19;;45628:252:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;45375:513;;:::o;40868:235::-;40915:7;;:12;:34;;;;-1:-1:-1;40931:13:0;;:18;40915:34;40911:47;;;40868:235::o;40911:47::-;40988:7;;;40970:15;:25;41030:13;;;41006:21;:37;-1:-1:-1;41056:11:0;;;;41078:17;40868:235::o;48284:686::-;48435:15;48465:23;48503:12;48530:23;48568:12;48595:18;48627:19;48638:7;48627:10;:19::i;:::-;-1:-1:-1;;;;;48675:15:0;;;;;;:7;:15;;;;;;48420:226;;-1:-1:-1;48420:226:0;;-1:-1:-1;48420:226:0;;-1:-1:-1;48420:226:0;-1:-1:-1;48420:226:0;-1:-1:-1;48420:226:0;-1:-1:-1;48675:28:0;;48695:7;48675:19;:28::i;:::-;-1:-1:-1;;;;;48657:15:0;;;;;;:7;:15;;;;;;;;:46;;;;48732:7;:15;;;;:28;;48752:7;48732:19;:28::i;:::-;-1:-1:-1;;;;;48714:15:0;;;;;;;:7;:15;;;;;;:46;;;;48792:18;;;;;;;:39;;48815:15;48792:22;:39::i;:::-;-1:-1:-1;;;;;48771:18:0;;;;;;:7;:18;;;;;:60;48842:26;48857:10;48842:14;:26::i;:::-;48879:23;48891:4;48897;48879:11;:23::i;:::-;48935:9;-1:-1:-1;;;;;48918:44:0;48927:6;-1:-1:-1;;;;;48918:44:0;;48946:15;48918:44;;;;1595:25:1;;1583:2;1568:18;;1449:177;48918:44:0;;;;;;;;48409:561;;;;;;48284:686;;;:::o;47578:698::-;47727:15;47757:23;47795:12;47822:23;47860:12;47887:18;47919:19;47930:7;47919:10;:19::i;:::-;-1:-1:-1;;;;;47967:15:0;;;;;;:7;:15;;;;;;47712:226;;-1:-1:-1;47712:226:0;;-1:-1:-1;47712:226:0;;-1:-1:-1;47712:226:0;-1:-1:-1;47712:226:0;-1:-1:-1;47712:226:0;-1:-1:-1;47967:28:0;;47712:226;47967:19;:28::i;:::-;-1:-1:-1;;;;;47949:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;48027:18;;;;;:7;:18;;;;;:39;;48050:15;48027:22;:39::i;:::-;-1:-1:-1;;;;;48006:18:0;;;;;;:7;:18;;;;;;;;:60;;;;48098:7;:18;;;;:39;;48121:15;48098:22;:39::i;46945:625::-;47092:15;47122:23;47160:12;47187:23;47225:12;47252:18;47284:19;47295:7;47284:10;:19::i;:::-;-1:-1:-1;;;;;47332:15:0;;;;;;:7;:15;;;;;;47077:226;;-1:-1:-1;47077:226:0;;-1:-1:-1;47077:226:0;;-1:-1:-1;47077:226:0;-1:-1:-1;47077:226:0;-1:-1:-1;47077:226:0;-1:-1:-1;47332:28:0;;47077:226;47332:19;:28::i;35006:757::-;35157:15;35187:23;35225:12;35252:23;35290:12;35317:18;35349:19;35360:7;35349:10;:19::i;:::-;-1:-1:-1;;;;;35397:15:0;;;;;;:7;:15;;;;;;35142:226;;-1:-1:-1;35142:226:0;;-1:-1:-1;35142:226:0;;-1:-1:-1;35142:226:0;-1:-1:-1;35142:226:0;-1:-1:-1;35142:226:0;-1:-1:-1;35397:28:0;;35417:7;35397:19;:28::i;:::-;-1:-1:-1;;;;;35379:15:0;;;;;;:7;:15;;;;;;;;:46;;;;35454:7;:15;;;;:28;;35474:7;35454:19;:28::i;40548:130::-;40612:7;40639:31;40664:5;40639:20;40651:7;;40639;:11;;:20;;;;:::i;40686:174::-;40783:7;40815:37;40846:5;40815:26;40827:13;;40815:7;:11;;:26;;;;:::i;40185:355::-;40248:19;40270:10;:8;:10::i;:::-;40248:32;-1:-1:-1;40291:18:0;40312:27;:10;40248:32;40312:14;:27::i;:::-;40391:4;40375:22;;;;:7;:22;;;;;;40291:48;;-1:-1:-1;40375:38:0;;40291:48;40375:26;:38::i;:::-;40366:4;40350:22;;;;:7;:22;;;;;;;;:63;;;;40428:11;:26;;;;;;40424:108;;;40510:4;40494:22;;;;:7;:22;;;;;;:38;;40521:10;40494:26;:38::i;:::-;40485:4;40469:22;;;;:7;:22;;;;;:63;40237:303;;40185:355;:::o;37513:147::-;37591:7;;:17;;37603:4;37591:11;:17::i;:::-;37581:7;:27;37632:10;;:20;;37647:4;37632:14;:20::i;:::-;37619:10;:33;-1:-1:-1;;37513:147:0:o;14:597:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;452:6;449:1;446:13;443:91;;;522:1;517:2;508:6;497:9;493:22;489:31;482:42;443:91;-1:-1:-1;595:2:1;574:15;-1:-1:-1;;570:29:1;555:45;;;;602:2;551:54;;14:597;-1:-1:-1;;;14:597:1:o;616:180::-;675:6;728:2;716:9;707:7;703:23;699:32;696:52;;;744:1;741;734:12;696:52;-1:-1:-1;767:23:1;;616:180;-1:-1:-1;616:180:1:o;801:131::-;-1:-1:-1;;;;;876:31:1;;866:42;;856:70;;922:1;919;912:12;937:315;1005:6;1013;1066:2;1054:9;1045:7;1041:23;1037:32;1034:52;;;1082:1;1079;1072:12;1034:52;1121:9;1108:23;1140:31;1165:5;1140:31;:::i;:::-;1190:5;1242:2;1227:18;;;;1214:32;;-1:-1:-1;;;937:315:1:o;1866:456::-;1943:6;1951;1959;2012:2;2000:9;1991:7;1987:23;1983:32;1980:52;;;2028:1;2025;2018:12;1980:52;2067:9;2054:23;2086:31;2111:5;2086:31;:::i;:::-;2136:5;-1:-1:-1;2193:2:1;2178:18;;2165:32;2206:33;2165:32;2206:33;:::i;:::-;1866:456;;2258:7;;-1:-1:-1;;;2312:2:1;2297:18;;;;2284:32;;1866:456::o;2516:247::-;2575:6;2628:2;2616:9;2607:7;2603:23;2599:32;2596:52;;;2644:1;2641;2634:12;2596:52;2683:9;2670:23;2702:31;2727:5;2702:31;:::i;2768:401::-;2849:6;2857;2910:2;2898:9;2889:7;2885:23;2881:32;2878:52;;;2926:1;2923;2916:12;2878:52;2965:9;2952:23;2984:31;3009:5;2984:31;:::i;:::-;3034:5;-1:-1:-1;3091:2:1;3076:18;;3063:32;3104:33;3063:32;3104:33;:::i;:::-;3156:7;3146:17;;;2768:401;;;;;:::o;3174:118::-;3260:5;3253:13;3246:21;3239:5;3236:32;3226:60;;3282:1;3279;3272:12;3297:309;3362:6;3370;3423:2;3411:9;3402:7;3398:23;3394:32;3391:52;;;3439:1;3436;3429:12;3391:52;3475:9;3462:23;3452:33;;3535:2;3524:9;3520:18;3507:32;3548:28;3570:5;3548:28;:::i;4079:241::-;4135:6;4188:2;4176:9;4167:7;4163:23;4159:32;4156:52;;;4204:1;4201;4194:12;4156:52;4243:9;4230:23;4262:28;4284:5;4262:28;:::i;4718:380::-;4797:1;4793:12;;;;4840;;;4861:61;;4915:4;4907:6;4903:17;4893:27;;4861:61;4968:2;4960:6;4957:14;4937:18;4934:38;4931:161;;;5014:10;5009:3;5005:20;5002:1;4995:31;5049:4;5046:1;5039:15;5077:4;5074:1;5067:15;4931:161;;4718:380;;;:::o;5103:356::-;5305:2;5287:21;;;5324:18;;;5317:30;5383:34;5378:2;5363:18;;5356:62;5450:2;5435:18;;5103:356::o;5464:127::-;5525:10;5520:3;5516:20;5513:1;5506:31;5556:4;5553:1;5546:15;5580:4;5577:1;5570:15;5596:168;5636:7;5702:1;5698;5694:6;5690:14;5687:1;5684:21;5679:1;5672:9;5665:17;5661:45;5658:71;;;5709:18;;:::i;:::-;-1:-1:-1;5749:9:1;;5596:168::o;6960:127::-;7021:10;7016:3;7012:20;7009:1;7002:31;7052:4;7049:1;7042:15;7076:4;7073:1;7066:15;7092:125;7132:4;7160:1;7157;7154:8;7151:34;;;7165:18;;:::i;:::-;-1:-1:-1;7202:9:1;;7092:125::o;7222:127::-;7283:10;7278:3;7274:20;7271:1;7264:31;7314:4;7311:1;7304:15;7338:4;7335:1;7328:15;7354:135;7393:3;-1:-1:-1;;7414:17:1;;7411:43;;;7434:18;;:::i;:::-;-1:-1:-1;7481:1:1;7470:13;;7354:135::o;7494:184::-;7564:6;7617:2;7605:9;7596:7;7592:23;7588:32;7585:52;;;7633:1;7630;7623:12;7585:52;-1:-1:-1;7656:16:1;;7494:184;-1:-1:-1;7494:184:1:o;7962:245::-;8029:6;8082:2;8070:9;8061:7;8057:23;8053:32;8050:52;;;8098:1;8095;8088:12;8050:52;8130:9;8124:16;8149:28;8171:5;8149:28;:::i;9749:128::-;9789:3;9820:1;9816:6;9813:1;9810:13;9807:39;;;9826:18;;:::i;:::-;-1:-1:-1;9862:9:1;;9749:128::o;13406:217::-;13446:1;13472;13462:132;;13516:10;13511:3;13507:20;13504:1;13497:31;13551:4;13548:1;13541:15;13579:4;13576:1;13569:15;13462:132;-1:-1:-1;13608:9:1;;13406:217::o;13760:251::-;13830:6;13883:2;13871:9;13862:7;13858:23;13854:32;13851:52;;;13899:1;13896;13889:12;13851:52;13931:9;13925:16;13950:31;13975:5;13950:31;:::i;14016:980::-;14278:4;14326:3;14315:9;14311:19;14357:6;14346:9;14339:25;14383:2;14421:6;14416:2;14405:9;14401:18;14394:34;14464:3;14459:2;14448:9;14444:18;14437:31;14488:6;14523;14517:13;14554:6;14546;14539:22;14592:3;14581:9;14577:19;14570:26;;14631:2;14623:6;14619:15;14605:29;;14652:1;14662:195;14676:6;14673:1;14670:13;14662:195;;;14741:13;;-1:-1:-1;;;;;14737:39:1;14725:52;;14832:15;;;;14797:12;;;;14773:1;14691:9;14662:195;;;-1:-1:-1;;;;;;;14913:32:1;;;;14908:2;14893:18;;14886:60;-1:-1:-1;;;14977:3:1;14962:19;14955:35;14874:3;14016:980;-1:-1:-1;;;14016:980:1:o;16015:306::-;16103:6;16111;16119;16172:2;16160:9;16151:7;16147:23;16143:32;16140:52;;;16188:1;16185;16178:12;16140:52;16217:9;16211:16;16201:26;;16267:2;16256:9;16252:18;16246:25;16236:35;;16311:2;16300:9;16296:18;16290:25;16280:35;;16015:306;;;;;:::o
Swarm Source
ipfs://2a8113f3f2090545366a71539305074488587f76812b8149536d170cbcf3e082
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.