// SPDX-License-Identifier: UNLICENSED
pragma solidity 0.8.36;
import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol";
import {Ownable2Step} from "@openzeppelin/contracts/access/Ownable2Step.sol";
import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol";
import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
import {SafeERC20} from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";
import {IERC721Receiver} from "@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol";
import {ReentrancyGuardTransient} from "@openzeppelin/contracts/utils/ReentrancyGuardTransient.sol";
import {Create2} from "@openzeppelin/contracts/utils/Create2.sol";
import {Math} from "@openzeppelin/contracts/utils/math/Math.sol";
import {ISushiLaunchpad} from "./interfaces/ISushiLaunchpad.sol";
import {IChainlinkAggregatorV3} from "./interfaces/IChainlinkAggregatorV3.sol";
import {
INonfungiblePositionManager,
ISushiV3Factory,
ISushiV3Pool,
IWETH
} from "./interfaces/ISushiV3.sol";
import {TickMath} from "./libraries/TickMath.sol";
import {
TOKEN_DECIMALS,
TOKEN_TOTAL_SUPPLY
} from "./libraries/TokenConstants.sol";
import {SushiLaunchpadToken} from "./SushiLaunchpadToken.sol";
/// @title SushiLaunchpad
/// @notice Creates fixed-supply tokens and permanently custodies their SushiSwap V3 positions.
contract SushiLaunchpad is
ISushiLaunchpad,
Ownable2Step,
ReentrancyGuardTransient,
IERC721Receiver
{
using SafeERC20 for IERC20;
/// @dev Values snapshotted before collecting a token's positions so one
/// distribution cannot mix recipients or fee splits.
struct FeeDistributionCache {
address creator;
address sushiRecipient;
address pool;
address quoteToken;
uint16 bps;
uint256 quoteToCreator;
uint256 tokenToCreator;
}
/// @dev Working state for an atomic launch. Mutable protocol settings are
/// copied here before any external V3 calls are made.
struct LaunchCache {
address token;
address quoteToken;
address pool;
bool tokenIs0;
uint16 reserveBps;
uint16 sushiFeeBps;
uint256 reserveAmount;
uint256 liquidityAllocation;
uint256 tokenUsed;
int24 startTick;
}
/// @dev Canonical token ordering and deadline for a launch position.
struct MintContext {
address token;
address pool;
address token0;
address token1;
bool tokenIs0;
uint64 deadline;
}
/// @dev Position data retained until the canonical parent launch event has
/// been emitted.
struct MintResult {
uint256 positionId;
int24 tickLower;
int24 tickUpper;
uint256 tokenDesired;
uint256 tokenUsed;
uint128 liquidity;
}
/// @dev The only pool and payer accepted during an active initial-buy
/// callback. This state is populated immediately around the pool swap.
struct SwapCallbackCache {
address pool;
address payer;
address quoteToken;
bool quoteIs0;
bool payFromContract;
uint256 amountIn;
}
/// @dev SushiSwap V3's 1% fee tier, expressed in hundredths of a basis point.
uint24 internal constant POOL_FEE = 10_000;
/// @dev Required tick spacing for the 1% SushiSwap V3 fee tier.
int24 internal constant TICK_SPACING = 200;
/// @dev Lowest valid tick aligned to the configured tick spacing.
int24 internal constant MIN_USABLE_TICK =
(TickMath.MIN_TICK / TICK_SPACING) * TICK_SPACING;
/// @dev Highest valid tick aligned to the configured tick spacing.
int24 internal constant MAX_USABLE_TICK =
(TickMath.MAX_TICK / TICK_SPACING) * TICK_SPACING;
/// @dev Denominator used for reserve and trading-fee basis points.
uint16 internal constant BPS_DENOMINATOR = 10_000;
/// @dev USD FDV targeted by every launch before tick-spacing alignment.
uint256 public constant INITIAL_FDV_USD = 5_000;
/// @dev Largest supported ERC-20 or Chainlink decimal count.
uint8 internal constant MAX_PRICE_DECIMALS = 18;
/// @dev Maximum accepted age of a quote-token/USD answer. The 72-hour
/// window accommodates 24/5 equity feeds across market-closed weekends.
uint256 public constant MAX_PRICE_AGE = 3 days;
/// @dev Maximum protocol reserve for future launches: 10% of supply.
uint16 internal constant MAX_PROTOCOL_RESERVE_BPS = 1_000;
/// @dev Time each launch's protocol reserve remains locked.
uint256 internal constant RESERVE_LOCK_DURATION = 365 days;
/// @dev Maximum CREATE2 token addresses checked when avoiding poisoned pools.
uint256 internal constant MAX_ADDRESS_ATTEMPTS = 8;
/// @dev Maximum UTF-8 byte length accepted for a token name.
uint256 internal constant MAX_NAME_LENGTH = 64;
/// @dev Maximum UTF-8 byte length accepted for a token symbol.
uint256 internal constant MAX_SYMBOL_LENGTH = 16;
/// @notice SushiSwap V3 factory used to create and validate launch pools.
ISushiV3Factory public immutable v3Factory;
/// @notice Position manager used to mint launch NFTs owned by this contract.
INonfungiblePositionManager public immutable positionManager;
/// @notice Canonical wrapped native token reported by the position manager.
address public immutable override WETH;
/// @notice Current recipient of Sushi-owned fees and unlocked reserves.
address public override protocolRecipient;
/// @notice Reserve share copied into each future launch; initially 3%.
uint16 public override protocolReserveBps = 300;
/// @notice Sushi fee share copied into each future launch; initially 30%.
uint16 public override defaultSushiFeeBps = 3_000;
/// @notice Minimum native currency payment required to launch a token.
uint256 public override launchFee = 0.0005 ether;
/// @dev Number of completed launches, mixed into CREATE2 salts. Historical
/// launch counts are indexed from TokenLaunched events.
uint256 private _launchNonce;
// Minimal state needed by live protocol behavior. Historical discovery and
// attribution are reconstructed from canonical events.
mapping(address token => LaunchInfo info) private _launches;
mapping(address token => uint16 bps) private _tokenSushiFeeBps;
mapping(address token => uint256 positionId) private _positionId;
mapping(address quoteToken => address priceFeed)
public
override quoteTokenPriceFeed;
/// @dev Restricts ERC-721 callbacks to NFTs minted during the active V3 call.
bool private _acceptingPositionNft;
/// @dev Nonzero only while the freshly created pool is executing the
/// optional initial purchase.
SwapCallbackCache private _swapCallback;
/// @param initialOwner Initial two-step protocol owner.
/// @param initialProtocolRecipient Initial recipient of Sushi-owned assets.
/// @param factory_ SushiSwap V3 factory for the deployment chain.
/// @param positionManager_ SushiSwap V3 non-fungible position manager.
constructor(
address initialOwner,
address initialProtocolRecipient,
address factory_,
address positionManager_
) Ownable(initialOwner) {
if (
initialOwner == address(0) ||
initialProtocolRecipient == address(0) ||
factory_ == address(0) ||
positionManager_ == address(0)
) revert ZeroAddress();
address managerFactory;
try INonfungiblePositionManager(positionManager_).factory() returns (
address value
) {
managerFactory = value;
} catch {
revert InvalidPositionManager();
}
if (managerFactory != factory_) revert InvalidPositionManager();
address weth;
try INonfungiblePositionManager(positionManager_).WETH9() returns (
address value
) {
weth = value;
} catch {
revert InvalidPositionManager();
}
if (weth == address(0) || weth.code.length == 0)
revert InvalidPositionManager();
int24 actualTickSpacing;
try ISushiV3Factory(factory_).feeAmountTickSpacing(POOL_FEE) returns (
int24 value
) {
actualTickSpacing = value;
} catch {
revert InvalidTickSpacing(0);
}
if (actualTickSpacing != TICK_SPACING)
revert InvalidTickSpacing(actualTickSpacing);
protocolRecipient = initialProtocolRecipient;
v3Factory = ISushiV3Factory(factory_);
positionManager = INonfungiblePositionManager(positionManager_);
WETH = weth;
}
function launch(
TokenConfig calldata tokenConfig,
address quoteToken,
uint64 deadline
)
external
payable
override
nonReentrant
returns (address token, address pool, uint256 positionId)
{
return _launch(tokenConfig, quoteToken, deadline, msg.sender);
}
function launchAndBuy(
TokenConfig calldata tokenConfig,
address quoteToken,
uint64 deadline,
InitialBuy calldata initialBuy
)
external
payable
override
nonReentrant
returns (
address token,
address pool,
uint256 positionId,
uint256 amountOut
)
{
_validateInitialBuy(initialBuy);
(token, pool, positionId) = _launch(
tokenConfig,
quoteToken,
deadline,
msg.sender
);
amountOut = _executeInitialBuy(
token,
quoteToken,
pool,
msg.sender,
initialBuy,
false
);
}
function launchAndBuyNative(
TokenConfig calldata tokenConfig,
uint64 deadline,
InitialBuy calldata initialBuy
)
external
payable
override
nonReentrant
returns (
address token,
address pool,
uint256 positionId,
uint256 amountOut
)
{
_validateInitialBuy(initialBuy);
uint256 minimumValue = launchFee + initialBuy.amountIn;
if (msg.value < minimumValue) {
revert InvalidNativeValue(minimumValue, msg.value);
}
IWETH(WETH).deposit{value: initialBuy.amountIn}();
(token, pool, positionId) = _launch(
tokenConfig,
WETH,
deadline,
msg.sender
);
amountOut = _executeInitialBuy(
token,
WETH,
pool,
msg.sender,
initialBuy,
true
);
}
function _launch(
TokenConfig calldata tokenConfig,
address quoteToken,
uint64 deadline,
address creator
) private returns (address token, address pool, uint256 positionId) {
LaunchCache memory cache;
cache.quoteToken = quoteToken;
cache.reserveBps = protocolReserveBps;
cache.sushiFeeBps = defaultSushiFeeBps;
(cache.reserveAmount, cache.liquidityAllocation) = _validateLaunch(
tokenConfig,
cache.quoteToken,
deadline,
cache.reserveBps
);
cache.startTick = _calculateStartTick(cache.quoteToken);
cache.token = _deployCleanToken(
tokenConfig,
cache.quoteToken,
deadline,
creator
);
cache.tokenIs0 = cache.token < cache.quoteToken;
cache.pool = _createAndInitializePool(
cache.token,
cache.quoteToken,
cache.tokenIs0,
cache.startTick
);
IERC20 launchToken = IERC20(cache.token);
launchToken.forceApprove(
address(positionManager),
cache.liquidityAllocation
);
MintResult memory mintResult = _mintLaunchPosition(
cache.token,
cache.quoteToken,
cache.pool,
cache.tokenIs0,
cache.startTick,
cache.liquidityAllocation,
deadline
);
positionId = mintResult.positionId;
cache.tokenUsed = mintResult.tokenUsed;
launchToken.forceApprove(address(positionManager), 0);
uint256 expectedBalance = TOKEN_TOTAL_SUPPLY - cache.tokenUsed;
uint256 actualBalance = launchToken.balanceOf(address(this));
if (actualBalance != expectedBalance) {
revert SupplyReconciliationFailure(expectedBalance, actualBalance);
}
_registerLaunch(
cache.token,
cache.quoteToken,
cache.pool,
cache.reserveAmount,
cache.sushiFeeBps,
creator
);
_emitTokenLaunched(
cache.token,
cache.pool,
tokenConfig,
cache.reserveBps,
creator,
cache.startTick
);
_emitPositionCreated(cache.token, cache.pool, mintResult);
return (cache.token, cache.pool, positionId);
}
function uniswapV3SwapCallback(
int256 amount0Delta,
int256 amount1Delta,
bytes calldata
) external {
SwapCallbackCache memory cache = _swapCallback;
if (msg.sender != cache.pool) revert InvalidSwapCallback(msg.sender);
uint256 amountToPay;
if (cache.quoteIs0) {
if (amount0Delta <= 0 || amount1Delta >= 0) {
revert InvalidSwapDeltas(amount0Delta, amount1Delta);
}
amountToPay = uint256(amount0Delta);
} else {
if (amount1Delta <= 0 || amount0Delta >= 0) {
revert InvalidSwapDeltas(amount0Delta, amount1Delta);
}
amountToPay = uint256(amount1Delta);
}
if (amountToPay > cache.amountIn) {
revert ExcessiveInitialBuyInput(cache.amountIn, amountToPay);
}
delete _swapCallback;
if (cache.payFromContract) {
IERC20(cache.quoteToken).safeTransfer(msg.sender, amountToPay);
} else {
IERC20(cache.quoteToken).safeTransferFrom(
cache.payer,
msg.sender,
amountToPay
);
}
}
function distributeFees(
address token
)
external
override
nonReentrant
returns (
uint256 quoteCollected,
uint256 tokenCollected,
uint256 quoteToSushi,
uint256 tokenToSushi
)
{
_requireToken(token);
FeeDistributionCache memory cache;
cache.creator = _launches[token].creator;
cache.sushiRecipient = protocolRecipient;
cache.pool = _launches[token].pool;
cache.quoteToken = _launches[token].quoteToken;
cache.bps = _tokenSushiFeeBps[token];
(uint256 amount0, uint256 amount1) = positionManager.collect(
INonfungiblePositionManager.CollectParams({
tokenId: _positionId[token],
recipient: address(this),
amount0Max: type(uint128).max,
amount1Max: type(uint128).max
})
);
if (token < cache.quoteToken) {
tokenCollected = amount0;
quoteCollected = amount1;
} else {
quoteCollected = amount0;
tokenCollected = amount1;
}
quoteToSushi = Math.mulDiv(quoteCollected, cache.bps, BPS_DENOMINATOR);
tokenToSushi = Math.mulDiv(tokenCollected, cache.bps, BPS_DENOMINATOR);
cache.quoteToCreator = quoteCollected - quoteToSushi;
cache.tokenToCreator = tokenCollected - tokenToSushi;
_transferIfNonzero(
IERC20(cache.quoteToken),
cache.sushiRecipient,
quoteToSushi
);
_transferIfNonzero(IERC20(token), cache.sushiRecipient, tokenToSushi);
_transferIfNonzero(
IERC20(cache.quoteToken),
cache.creator,
cache.quoteToCreator
);
_transferIfNonzero(IERC20(token), cache.creator, cache.tokenToCreator);
emit FeesDistributed(
msg.sender,
token,
cache.pool,
cache.creator,
cache.sushiRecipient,
cache.bps,
quoteCollected,
tokenCollected,
quoteToSushi,
tokenToSushi,
cache.quoteToCreator,
cache.tokenToCreator
);
}
function transferCreator(
address token,
address newCreator
) external override {
_requireToken(token);
LaunchInfo storage info = _launches[token];
address previousCreator = info.creator;
if (msg.sender != previousCreator)
revert UnauthorizedCreator(msg.sender);
if (newCreator == address(0)) revert ZeroAddress();
info.creator = newCreator;
emit CreatorTransferred(token, previousCreator, newCreator);
}
function setProtocolRecipient(
address newRecipient
) external override onlyOwner {
if (newRecipient == address(0)) revert ZeroAddress();
address previousRecipient = protocolRecipient;
protocolRecipient = newRecipient;
emit ProtocolRecipientUpdated(previousRecipient, newRecipient);
}
function setProtocolReserveBps(
uint16 newReserveBps
) external override onlyOwner {
if (newReserveBps > MAX_PROTOCOL_RESERVE_BPS)
revert InvalidReserveBps(newReserveBps);
uint16 previousBps = protocolReserveBps;
protocolReserveBps = newReserveBps;
emit ProtocolReserveBpsUpdated(previousBps, newReserveBps);
}
function setDefaultSushiFeeBps(
uint16 newSushiFeeBps
) external override onlyOwner {
_validateFeeBps(newSushiFeeBps);
uint16 previousBps = defaultSushiFeeBps;
defaultSushiFeeBps = newSushiFeeBps;
emit DefaultSushiFeeBpsUpdated(previousBps, newSushiFeeBps);
}
function setLaunchFee(uint256 newLaunchFee) external override onlyOwner {
uint256 previousFee = launchFee;
launchFee = newLaunchFee;
emit LaunchFeeUpdated(previousFee, newLaunchFee);
}
function setQuoteTokenPriceFeed(
address quoteToken,
address priceFeed
) external override onlyOwner {
if (quoteToken == address(0)) revert ZeroAddress();
if (priceFeed != address(0)) {
if (quoteToken.code.length == 0)
revert InvalidQuoteToken(quoteToken);
if (priceFeed.code.length == 0) revert InvalidPriceFeed(priceFeed);
_quoteTokenDecimals(quoteToken);
_priceFeedDecimals(priceFeed);
}
address previousPriceFeed = quoteTokenPriceFeed[quoteToken];
quoteTokenPriceFeed[quoteToken] = priceFeed;
emit QuoteTokenPriceFeedUpdated(
quoteToken,
previousPriceFeed,
priceFeed
);
}
function setSushiFeeBps(
address token,
uint16 newSushiFeeBps
) external override onlyOwner {
_requireToken(token);
_validateFeeBps(newSushiFeeBps);
uint16 previousBps = _tokenSushiFeeBps[token];
_tokenSushiFeeBps[token] = newSushiFeeBps;
emit SushiFeeBpsUpdated(token, previousBps, newSushiFeeBps);
}
function withdrawProtocolReserve(
address token
) external override onlyOwner nonReentrant {
_requireToken(token);
LaunchInfo storage info = _launches[token];
if (info.reserveWithdrawn) revert ReserveAlreadyWithdrawn(token);
if (block.timestamp < info.reserveUnlockAt)
revert ReserveStillLocked(info.reserveUnlockAt);
info.reserveWithdrawn = true;
address recipient = protocolRecipient;
uint256 amount = info.reserveAmount;
_transferIfNonzero(IERC20(token), recipient, amount);
emit ProtocolReserveWithdrawn(token, recipient, amount);
}
function withdrawLaunchFees() external override onlyOwner nonReentrant {
uint256 amount = address(this).balance;
if (amount == 0) revert NothingToWithdraw();
address recipient = protocolRecipient;
(bool success, ) = payable(recipient).call{value: amount}("");
if (!success) revert NativeTransferFailed();
emit LaunchFeesWithdrawn(recipient, amount);
}
function renounceOwnership() public view override onlyOwner {
revert OwnershipRenunciationDisabled();
}
function launchInfo(
address token
) external view override returns (LaunchInfo memory info) {
_requireToken(token);
return _launches[token];
}
function sushiFeeBps(
address token
) external view override returns (uint16) {
_requireToken(token);
return _tokenSushiFeeBps[token];
}
function calculateStartTick(
address quoteToken
) external view override returns (int24 startTick) {
return _calculateStartTick(quoteToken);
}
function onERC721Received(
address operator,
address from,
uint256,
bytes calldata
) external view override returns (bytes4) {
if (
msg.sender != address(positionManager) ||
!_acceptingPositionNft ||
operator != address(this) ||
from != address(0)
) revert UnexpectedNft(msg.sender, operator, from);
return IERC721Receiver.onERC721Received.selector;
}
function _validateLaunch(
TokenConfig calldata tokenConfig,
address quoteToken,
uint64 deadline,
uint16 reserveBps
)
private
view
returns (uint256 reserveAmount, uint256 liquidityAllocation)
{
if (msg.value < launchFee)
revert InsufficientLaunchFee(launchFee, msg.value);
if (block.timestamp > deadline) revert DeadlineExpired(deadline);
if (quoteToken == address(0)) revert ZeroAddress();
if (quoteToken.code.length == 0) revert InvalidQuoteToken(quoteToken);
if (quoteTokenPriceFeed[quoteToken] == address(0))
revert UnsupportedQuoteToken(quoteToken);
if (bytes(tokenConfig.name).length == 0) revert EmptyName();
if (bytes(tokenConfig.symbol).length == 0) revert EmptySymbol();
if (bytes(tokenConfig.name).length > MAX_NAME_LENGTH)
revert NameTooLong(bytes(tokenConfig.name).length);
if (bytes(tokenConfig.symbol).length > MAX_SYMBOL_LENGTH)
revert SymbolTooLong(bytes(tokenConfig.symbol).length);
reserveAmount = Math.mulDiv(
TOKEN_TOTAL_SUPPLY,
reserveBps,
BPS_DENOMINATOR
);
liquidityAllocation = TOKEN_TOTAL_SUPPLY - reserveAmount;
}
function _calculateStartTick(
address quoteToken
) private view returns (int24 startTick) {
address priceFeed = quoteTokenPriceFeed[quoteToken];
if (priceFeed == address(0)) revert UnsupportedQuoteToken(quoteToken);
uint8 quoteDecimals = _quoteTokenDecimals(quoteToken);
uint8 feedDecimals = _priceFeedDecimals(priceFeed);
uint80 roundId;
int256 answer;
uint256 updatedAt;
uint80 answeredInRound;
try IChainlinkAggregatorV3(priceFeed).latestRoundData() returns (
uint80 roundId_,
int256 answer_,
uint256,
uint256 updatedAt_,
uint80 answeredInRound_
) {
roundId = roundId_;
answer = answer_;
updatedAt = updatedAt_;
answeredInRound = answeredInRound_;
} catch {
revert InvalidPriceFeed(priceFeed);
}
if (answer <= 0) revert InvalidPriceFeedAnswer(answer);
if (
updatedAt == 0 ||
updatedAt > block.timestamp ||
answeredInRound < roundId
) {
revert IncompletePriceFeedRound(
roundId,
answeredInRound,
updatedAt
);
}
if (block.timestamp - updatedAt > MAX_PRICE_AGE) {
revert StalePriceFeedRound(
updatedAt,
block.timestamp,
MAX_PRICE_AGE
);
}
uint256 unsignedAnswer = uint256(answer);
if (unsignedAnswer > type(uint256).max / TOKEN_TOTAL_SUPPLY)
revert InvalidPriceFeedAnswer(answer);
uint256 numerator =
INITIAL_FDV_USD *
(10 ** uint256(uint16(feedDecimals) + uint16(quoteDecimals)));
uint256 denominator = unsignedAnswer * TOKEN_TOTAL_SUPPLY;
uint256 ratioX192 = Math.mulDiv(
numerator,
uint256(1) << 192,
denominator
);
uint160 sqrtPriceX96 = uint160(Math.sqrt(ratioX192));
if (
sqrtPriceX96 < TickMath.MIN_SQRT_RATIO ||
sqrtPriceX96 >= TickMath.MAX_SQRT_RATIO
) revert InitialPriceOutOfBounds(sqrtPriceX96);
int24 rawTick = TickMath.getTickAtSqrtRatio(sqrtPriceX96);
startTick = (rawTick / TICK_SPACING) * TICK_SPACING;
if (rawTick < 0 && rawTick % TICK_SPACING != 0) {
startTick -= TICK_SPACING;
}
if (startTick < MIN_USABLE_TICK || startTick >= MAX_USABLE_TICK)
revert InitialPriceOutOfBounds(sqrtPriceX96);
}
function _quoteTokenDecimals(
address quoteToken
) private view returns (uint8 decimals_) {
try IERC20Metadata(quoteToken).decimals() returns (uint8 value) {
decimals_ = value;
} catch {
revert InvalidQuoteToken(quoteToken);
}
if (decimals_ > MAX_PRICE_DECIMALS)
revert InvalidQuoteTokenDecimals(decimals_);
}
function _priceFeedDecimals(
address priceFeed
) private view returns (uint8 decimals_) {
try IChainlinkAggregatorV3(priceFeed).decimals() returns (uint8 value) {
decimals_ = value;
} catch {
revert InvalidPriceFeed(priceFeed);
}
if (decimals_ > MAX_PRICE_DECIMALS)
revert InvalidPriceFeedDecimals(decimals_);
}
function _validateInitialBuy(InitialBuy calldata initialBuy) private view {
if (initialBuy.amountIn == 0) revert ZeroInitialBuyAmount();
if (initialBuy.amountIn > uint256(type(int256).max)) {
revert InitialBuyAmountTooLarge(initialBuy.amountIn);
}
if (initialBuy.recipient == address(0)) revert ZeroAddress();
if (initialBuy.recipient == address(this)) {
revert InvalidInitialBuyRecipient(initialBuy.recipient);
}
}
function _deployCleanToken(
TokenConfig calldata tokenConfig,
address quoteToken,
uint64 deadline,
address creator
) private returns (address token) {
bytes32 initCodeHash = keccak256(
abi.encodePacked(
type(SushiLaunchpadToken).creationCode,
abi.encode(tokenConfig.name, tokenConfig.symbol, address(this))
)
);
bytes32 parameterHash = keccak256(
abi.encode(tokenConfig, quoteToken, deadline)
);
uint256 nonce = _launchNonce;
for (uint256 i; i < MAX_ADDRESS_ATTEMPTS; ++i) {
bytes32 salt = keccak256(
abi.encode(
creator,
nonce,
parameterHash,
block.prevrandao,
block.number,
i
)
);
address candidate = Create2.computeAddress(salt, initCodeHash);
if (
candidate.code.length != 0 ||
v3Factory.getPool(candidate, quoteToken, POOL_FEE) != address(0)
) continue;
token = _deployToken(salt, tokenConfig);
break;
}
if (token == address(0)) revert NoCleanTokenAddress();
address existingPool = v3Factory.getPool(token, quoteToken, POOL_FEE);
if (existingPool != address(0))
revert UnexpectedExistingPool(token, existingPool);
}
function _deployToken(
bytes32 salt,
TokenConfig calldata tokenConfig
) private returns (address) {
return
address(
new SushiLaunchpadToken{salt: salt}(
tokenConfig.name,
tokenConfig.symbol,
address(this)
)
);
}
function _createAndInitializePool(
address token,
address quoteToken,
bool tokenIs0,
int24 firstStartTick
) private returns (address pool) {
pool = v3Factory.createPool(token, quoteToken, POOL_FEE);
address registeredPool = v3Factory.getPool(token, quoteToken, POOL_FEE);
if (pool == address(0) || registeredPool != pool)
revert PoolCreationMismatch(pool, registeredPool);
ISushiV3Pool sushiPool = ISushiV3Pool(pool);
address token0 = tokenIs0 ? token : quoteToken;
address token1 = tokenIs0 ? quoteToken : token;
if (
sushiPool.token0() != token0 ||
sushiPool.token1() != token1 ||
sushiPool.fee() != POOL_FEE ||
sushiPool.tickSpacing() != TICK_SPACING
) revert PoolConfigurationMismatch(pool);
int24 initialTick = tokenIs0 ? firstStartTick : -firstStartTick;
uint160 expectedSqrtPriceX96 = TickMath.getSqrtRatioAtTick(initialTick);
sushiPool.initialize(expectedSqrtPriceX96);
(uint160 actualSqrtPriceX96, , , , , , ) = sushiPool.slot0();
if (actualSqrtPriceX96 != expectedSqrtPriceX96) {
revert PoolInitializationMismatch(
expectedSqrtPriceX96,
actualSqrtPriceX96
);
}
}
function _mintLaunchPosition(
address token,
address quoteToken,
address pool,
bool tokenIs0,
int24 startTick,
uint256 liquidityAllocation,
uint64 deadline
) private returns (MintResult memory result) {
MintContext memory context = MintContext({
token: token,
pool: pool,
token0: tokenIs0 ? token : quoteToken,
token1: tokenIs0 ? quoteToken : token,
tokenIs0: tokenIs0,
deadline: deadline
});
(result.tickLower, result.tickUpper) =
context.tokenIs0
? (startTick, MAX_USABLE_TICK)
: (MIN_USABLE_TICK, -startTick);
uint256 amount0;
uint256 amount1;
(result.positionId, result.liquidity, amount0, amount1) = _mintPosition(
context.token0,
context.token1,
result.tickLower,
result.tickUpper,
liquidityAllocation,
context.tokenIs0,
context.deadline
);
result.tokenDesired = liquidityAllocation;
result.tokenUsed = context.tokenIs0 ? amount0 : amount1;
uint256 quoteTokenUsed = context.tokenIs0 ? amount1 : amount0;
if (result.liquidity == 0) revert ZeroLiquidity();
if (quoteTokenUsed != 0) revert NonzeroQuoteTokenUsed(quoteTokenUsed);
if (result.tokenUsed > liquidityAllocation)
revert ExcessTokenConsumption(
result.tokenUsed,
liquidityAllocation
);
_validatePosition(
result.positionId,
context.token0,
context.token1,
result.tickLower,
result.tickUpper,
result.liquidity
);
_positionId[context.token] = result.positionId;
}
function _emitPositionCreated(
address token,
address pool,
MintResult memory result
) private {
emit PositionCreated(
token,
pool,
result.positionId,
result.tickLower,
result.tickUpper,
result.tokenDesired,
result.tokenUsed,
result.liquidity
);
}
function _mintPosition(
address token0,
address token1,
int24 tickLower,
int24 tickUpper,
uint256 tokenDesired,
bool tokenIs0,
uint64 deadline
)
private
returns (
uint256 positionId,
uint128 liquidity,
uint256 amount0,
uint256 amount1
)
{
_acceptingPositionNft = true;
(positionId, liquidity, amount0, amount1) = positionManager.mint(
INonfungiblePositionManager.MintParams({
token0: token0,
token1: token1,
fee: POOL_FEE,
tickLower: tickLower,
tickUpper: tickUpper,
amount0Desired: tokenIs0 ? tokenDesired : 0,
amount1Desired: tokenIs0 ? 0 : tokenDesired,
amount0Min: 0,
amount1Min: 0,
recipient: address(this),
deadline: deadline
})
);
_acceptingPositionNft = false;
}
function _validatePosition(
uint256 positionId,
address expectedToken0,
address expectedToken1,
int24 expectedTickLower,
int24 expectedTickUpper,
uint128 expectedLiquidity
) private view {
(
,
,
address actualToken0,
address actualToken1,
uint24 actualFee,
int24 actualTickLower,
int24 actualTickUpper,
uint128 actualLiquidity,
,
,
,
) = positionManager.positions(positionId);
if (
positionManager.ownerOf(positionId) != address(this) ||
actualToken0 != expectedToken0 ||
actualToken1 != expectedToken1 ||
actualFee != POOL_FEE ||
actualTickLower != expectedTickLower ||
actualTickUpper != expectedTickUpper ||
actualLiquidity != expectedLiquidity
) revert PositionConfigurationMismatch(positionId);
}
function _executeInitialBuy(
address token,
address quoteToken,
address pool,
address payer,
InitialBuy calldata initialBuy,
bool payFromContract
) private returns (uint256 amountOut) {
if (initialBuy.recipient == pool) {
revert InvalidInitialBuyRecipient(initialBuy.recipient);
}
bool zeroForOne = quoteToken < token;
_swapCallback = SwapCallbackCache({
pool: pool,
payer: payer,
quoteToken: quoteToken,
amountIn: initialBuy.amountIn,
quoteIs0: zeroForOne,
payFromContract: payFromContract
});
(int256 amount0, int256 amount1) = ISushiV3Pool(pool).swap(
initialBuy.recipient,
zeroForOne,
int256(initialBuy.amountIn),
zeroForOne
? TickMath.MIN_SQRT_RATIO + 1
: TickMath.MAX_SQRT_RATIO - 1,
""
);
if (_swapCallback.pool != address(0)) {
revert SwapCallbackNotConsumed(pool);
}
int256 inputDelta = zeroForOne ? amount0 : amount1;
int256 outputDelta = zeroForOne ? amount1 : amount0;
if (inputDelta <= 0 || outputDelta >= 0) {
revert InvalidSwapDeltas(amount0, amount1);
}
uint256 amountConsumed = uint256(inputDelta);
if (amountConsumed != initialBuy.amountIn) {
revert PartialInitialBuy(initialBuy.amountIn, amountConsumed);
}
amountOut = uint256(-outputDelta);
if (amountOut < initialBuy.amountOutMinimum) {
revert InsufficientInitialBuyOutput(
initialBuy.amountOutMinimum,
amountOut
);
}
emit InitialBuyExecuted(
payer,
token,
pool,
initialBuy.recipient,
quoteToken,
amountConsumed,
amountOut
);
}
function _registerLaunch(
address token,
address quoteToken,
address pool,
uint256 reserveAmount,
uint16 initialSushiFeeBps,
address creator
) private {
uint64 reserveUnlockAt =
uint64(block.timestamp) + uint64(RESERVE_LOCK_DURATION);
_launches[token] = LaunchInfo({
creator: creator,
quoteToken: quoteToken,
pool: pool,
reserveUnlockAt: reserveUnlockAt,
reserveWithdrawn: false,
reserveAmount: reserveAmount
});
_tokenSushiFeeBps[token] = initialSushiFeeBps;
++_launchNonce;
}
function _emitTokenLaunched(
address token,
address pool,
TokenConfig calldata tokenConfig,
uint16 reserveBps,
address creator,
int24 startTick
) private {
LaunchInfo storage info = _launches[token];
emit TokenLaunched(
creator,
token,
pool,
info.quoteToken,
startTick,
tokenConfig.name,
tokenConfig.symbol,
reserveBps,
info.reserveAmount,
info.reserveUnlockAt,
_tokenSushiFeeBps[token]
);
}
function _requireToken(address token) private view {
if (_launches[token].pool == address(0)) revert UnknownToken(token);
}
function _validateFeeBps(uint16 bps) private pure {
if (bps > BPS_DENOMINATOR) revert InvalidFeeBps(bps);
}
function _transferIfNonzero(
IERC20 token,
address recipient,
uint256 amount
) private {
if (amount != 0) token.safeTransfer(recipient, amount);
}
}[
{
"type": "constructor",
"inputs": [
{
"name": "initialOwner",
"type": "address",
"internalType": "address"
},
{
"name": "initialProtocolRecipient",
"type": "address",
"internalType": "address"
},
{
"name": "factory_",
"type": "address",
"internalType": "address"
},
{
"name": "positionManager_",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "nonpayable"
},
{
"name": "DeadlineExpired",
"type": "error",
"inputs": [
{
"name": "deadline",
"type": "uint64",
"internalType": "uint64"
}
]
},
{
"name": "EmptyName",
"type": "error",
"inputs": []
},
{
"name": "EmptySymbol",
"type": "error",
"inputs": []
},
{
"name": "ExcessTokenConsumption",
"type": "error",
"inputs": [
{
"name": "used",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "desired",
"type": "uint256",
"internalType": "uint256"
}
]
},
{
"name": "ExcessiveInitialBuyInput",
"type": "error",
"inputs": [
{
"name": "maximum",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "required",
"type": "uint256",
"internalType": "uint256"
}
]
},
{
"name": "IncompletePriceFeedRound",
"type": "error",
"inputs": [
{
"name": "roundId",
"type": "uint80",
"internalType": "uint80"
},
{
"name": "answeredInRound",
"type": "uint80",
"internalType": "uint80"
},
{
"name": "updatedAt",
"type": "uint256",
"internalType": "uint256"
}
]
},
{
"name": "InitialBuyAmountTooLarge",
"type": "error",
"inputs": [
{
"name": "amount",
"type": "uint256",
"internalType": "uint256"
}
]
},
{
"name": "InitialPriceOutOfBounds",
"type": "error",
"inputs": [
{
"name": "sqrtPriceX96",
"type": "uint160",
"internalType": "uint160"
}
]
},
{
"name": "InsufficientInitialBuyOutput",
"type": "error",
"inputs": [
{
"name": "minimum",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "actual",
"type": "uint256",
"internalType": "uint256"
}
]
},
{
"name": "InsufficientLaunchFee",
"type": "error",
"inputs": [
{
"name": "required",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "supplied",
"type": "uint256",
"internalType": "uint256"
}
]
},
{
"name": "InvalidFeeBps",
"type": "error",
"inputs": [
{
"name": "bps",
"type": "uint16",
"internalType": "uint16"
}
]
},
{
"name": "InvalidInitialBuyRecipient",
"type": "error",
"inputs": [
{
"name": "recipient",
"type": "address",
"internalType": "address"
}
]
},
{
"name": "InvalidNativeValue",
"type": "error",
"inputs": [
{
"name": "required",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "supplied",
"type": "uint256",
"internalType": "uint256"
}
]
},
{
"name": "InvalidPositionManager",
"type": "error",
"inputs": []
},
{
"name": "InvalidPriceFeed",
"type": "error",
"inputs": [
{
"name": "priceFeed",
"type": "address",
"internalType": "address"
}
]
},
{
"name": "InvalidPriceFeedAnswer",
"type": "error",
"inputs": [
{
"name": "answer",
"type": "int256",
"internalType": "int256"
}
]
},
{
"name": "InvalidPriceFeedDecimals",
"type": "error",
"inputs": [
{
"name": "decimals",
"type": "uint8",
"internalType": "uint8"
}
]
},
{
"name": "InvalidQuoteToken",
"type": "error",
"inputs": [
{
"name": "quoteToken",
"type": "address",
"internalType": "address"
}
]
},
{
"name": "InvalidQuoteTokenDecimals",
"type": "error",
"inputs": [
{
"name": "decimals",
"type": "uint8",
"internalType": "uint8"
}
]
},
{
"name": "InvalidReserveBps",
"type": "error",
"inputs": [
{
"name": "bps",
"type": "uint16",
"internalType": "uint16"
}
]
},
{
"name": "InvalidSwapCallback",
"type": "error",
"inputs": [
{
"name": "caller",
"type": "address",
"internalType": "address"
}
]
},
{
"name": "InvalidSwapDeltas",
"type": "error",
"inputs": [
{
"name": "amount0Delta",
"type": "int256",
"internalType": "int256"
},
{
"name": "amount1Delta",
"type": "int256",
"internalType": "int256"
}
]
},
{
"name": "InvalidTickSpacing",
"type": "error",
"inputs": [
{
"name": "actualTickSpacing",
"type": "int24",
"internalType": "int24"
}
]
},
{
"name": "NameTooLong",
"type": "error",
"inputs": [
{
"name": "length",
"type": "uint256",
"internalType": "uint256"
}
]
},
{
"name": "NativeTransferFailed",
"type": "error",
"inputs": []
},
{
"name": "NoCleanTokenAddress",
"type": "error",
"inputs": []
},
{
"name": "NonzeroQuoteTokenUsed",
"type": "error",
"inputs": [
{
"name": "amount",
"type": "uint256",
"internalType": "uint256"
}
]
},
{
"name": "NothingToWithdraw",
"type": "error",
"inputs": []
},
{
"name": "OwnableInvalidOwner",
"type": "error",
"inputs": [
{
"name": "owner",
"type": "address",
"internalType": "address"
}
]
},
{
"name": "OwnableUnauthorizedAccount",
"type": "error",
"inputs": [
{
"name": "account",
"type": "address",
"internalType": "address"
}
]
},
{
"name": "OwnershipRenunciationDisabled",
"type": "error",
"inputs": []
},
{
"name": "PartialInitialBuy",
"type": "error",
"inputs": [
{
"name": "requested",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "consumed",
"type": "uint256",
"internalType": "uint256"
}
]
},
{
"name": "PoolConfigurationMismatch",
"type": "error",
"inputs": [
{
"name": "pool",
"type": "address",
"internalType": "address"
}
]
},
{
"name": "PoolCreationMismatch",
"type": "error",
"inputs": [
{
"name": "expected",
"type": "address",
"internalType": "address"
},
{
"name": "actual",
"type": "address",
"internalType": "address"
}
]
},
{
"name": "PoolInitializationMismatch",
"type": "error",
"inputs": [
{
"name": "expected",
"type": "uint160",
"internalType": "uint160"
},
{
"name": "actual",
"type": "uint160",
"internalType": "uint160"
}
]
},
{
"name": "PositionConfigurationMismatch",
"type": "error",
"inputs": [
{
"name": "positionId",
"type": "uint256",
"internalType": "uint256"
}
]
},
{
"name": "ReentrancyGuardReentrantCall",
"type": "error",
"inputs": []
},
{
"name": "ReserveAlreadyWithdrawn",
"type": "error",
"inputs": [
{
"name": "token",
"type": "address",
"internalType": "address"
}
]
},
{
"name": "ReserveStillLocked",
"type": "error",
"inputs": [
{
"name": "unlockAt",
"type": "uint64",
"internalType": "uint64"
}
]
},
{
"name": "SafeERC20FailedOperation",
"type": "error",
"inputs": [
{
"name": "token",
"type": "address",
"internalType": "address"
}
]
},
{
"name": "StalePriceFeedRound",
"type": "error",
"inputs": [
{
"name": "updatedAt",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "currentTimestamp",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "maximumAge",
"type": "uint256",
"internalType": "uint256"
}
]
},
{
"name": "SupplyReconciliationFailure",
"type": "error",
"inputs": [
{
"name": "expected",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "accounted",
"type": "uint256",
"internalType": "uint256"
}
]
},
{
"name": "SwapCallbackNotConsumed",
"type": "error",
"inputs": [
{
"name": "pool",
"type": "address",
"internalType": "address"
}
]
},
{
"name": "SymbolTooLong",
"type": "error",
"inputs": [
{
"name": "length",
"type": "uint256",
"internalType": "uint256"
}
]
},
{
"name": "UnauthorizedCreator",
"type": "error",
"inputs": [
{
"name": "caller",
"type": "address",
"internalType": "address"
}
]
},
{
"name": "UnexpectedExistingPool",
"type": "error",
"inputs": [
{
"name": "token",
"type": "address",
"internalType": "address"
},
{
"name": "pool",
"type": "address",
"internalType": "address"
}
]
},
{
"name": "UnexpectedNft",
"type": "error",
"inputs": [
{
"name": "collection",
"type": "address",
"internalType": "address"
},
{
"name": "operator",
"type": "address",
"internalType": "address"
},
{
"name": "from",
"type": "address",
"internalType": "address"
}
]
},
{
"name": "UnknownToken",
"type": "error",
"inputs": [
{
"name": "token",
"type": "address",
"internalType": "address"
}
]
},
{
"name": "UnsupportedQuoteToken",
"type": "error",
"inputs": [
{
"name": "quoteToken",
"type": "address",
"internalType": "address"
}
]
},
{
"name": "ZeroAddress",
"type": "error",
"inputs": []
},
{
"name": "ZeroInitialBuyAmount",
"type": "error",
"inputs": []
},
{
"name": "ZeroLiquidity",
"type": "error",
"inputs": []
},
{
"name": "CreatorTransferred",
"type": "event",
"inputs": [
{
"name": "token",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "previousCreator",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "newCreator",
"type": "address",
"indexed": true,
"internalType": "address"
}
],
"anonymous": false
},
{
"name": "DefaultSushiFeeBpsUpdated",
"type": "event",
"inputs": [
{
"name": "previousBps",
"type": "uint16",
"indexed": false,
"internalType": "uint16"
},
{
"name": "newBps",
"type": "uint16",
"indexed": false,
"internalType": "uint16"
}
],
"anonymous": false
},
{
"name": "FeesDistributed",
"type": "event",
"inputs": [
{
"name": "caller",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "token",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "pool",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "creator",
"type": "address",
"indexed": false,
"internalType": "address"
},
{
"name": "protocolRecipient",
"type": "address",
"indexed": false,
"internalType": "address"
},
{
"name": "sushiFeeBps",
"type": "uint16",
"indexed": false,
"internalType": "uint16"
},
{
"name": "quoteCollected",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
},
{
"name": "tokenCollected",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
},
{
"name": "quoteToSushi",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
},
{
"name": "tokenToSushi",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
},
{
"name": "quoteToCreator",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
},
{
"name": "tokenToCreator",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "InitialBuyExecuted",
"type": "event",
"inputs": [
{
"name": "creator",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "token",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "pool",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "recipient",
"type": "address",
"indexed": false,
"internalType": "address"
},
{
"name": "quoteToken",
"type": "address",
"indexed": false,
"internalType": "address"
},
{
"name": "amountIn",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
},
{
"name": "amountOut",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "LaunchFeeUpdated",
"type": "event",
"inputs": [
{
"name": "previousFee",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
},
{
"name": "newFee",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "LaunchFeesWithdrawn",
"type": "event",
"inputs": [
{
"name": "recipient",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "amount",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "OwnershipTransferStarted",
"type": "event",
"inputs": [
{
"name": "previousOwner",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "newOwner",
"type": "address",
"indexed": true,
"internalType": "address"
}
],
"anonymous": false
},
{
"name": "OwnershipTransferred",
"type": "event",
"inputs": [
{
"name": "previousOwner",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "newOwner",
"type": "address",
"indexed": true,
"internalType": "address"
}
],
"anonymous": false
},
{
"name": "PositionCreated",
"type": "event",
"inputs": [
{
"name": "token",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "pool",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "positionId",
"type": "uint256",
"indexed": true,
"internalType": "uint256"
},
{
"name": "tickLower",
"type": "int24",
"indexed": false,
"internalType": "int24"
},
{
"name": "tickUpper",
"type": "int24",
"indexed": false,
"internalType": "int24"
},
{
"name": "tokenDesired",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
},
{
"name": "tokenUsed",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
},
{
"name": "liquidity",
"type": "uint128",
"indexed": false,
"internalType": "uint128"
}
],
"anonymous": false
},
{
"name": "ProtocolRecipientUpdated",
"type": "event",
"inputs": [
{
"name": "previousRecipient",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "newRecipient",
"type": "address",
"indexed": true,
"internalType": "address"
}
],
"anonymous": false
},
{
"name": "ProtocolReserveBpsUpdated",
"type": "event",
"inputs": [
{
"name": "previousBps",
"type": "uint16",
"indexed": false,
"internalType": "uint16"
},
{
"name": "newBps",
"type": "uint16",
"indexed": false,
"internalType": "uint16"
}
],
"anonymous": false
},
{
"name": "ProtocolReserveWithdrawn",
"type": "event",
"inputs": [
{
"name": "token",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "recipient",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "amount",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "QuoteTokenPriceFeedUpdated",
"type": "event",
"inputs": [
{
"name": "quoteToken",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "previousPriceFeed",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "newPriceFeed",
"type": "address",
"indexed": true,
"internalType": "address"
}
],
"anonymous": false
},
{
"name": "SushiFeeBpsUpdated",
"type": "event",
"inputs": [
{
"name": "token",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "previousSushiFeeBps",
"type": "uint16",
"indexed": false,
"internalType": "uint16"
},
{
"name": "newSushiFeeBps",
"type": "uint16",
"indexed": false,
"internalType": "uint16"
}
],
"anonymous": false
},
{
"name": "TokenLaunched",
"type": "event",
"inputs": [
{
"name": "creator",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "token",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "pool",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "quoteToken",
"type": "address",
"indexed": false,
"internalType": "address"
},
{
"name": "startTick",
"type": "int24",
"indexed": false,
"internalType": "int24"
},
{
"name": "name",
"type": "string",
"indexed": false,
"internalType": "string"
},
{
"name": "symbol",
"type": "string",
"indexed": false,
"internalType": "string"
},
{
"name": "reserveBps",
"type": "uint16",
"indexed": false,
"internalType": "uint16"
},
{
"name": "reserveAmount",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
},
{
"name": "reserveUnlockAt",
"type": "uint64",
"indexed": false,
"internalType": "uint64"
},
{
"name": "initialSushiFeeBps",
"type": "uint16",
"indexed": false,
"internalType": "uint16"
}
],
"anonymous": false
},
{
"name": "INITIAL_FDV_USD",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "MAX_PRICE_AGE",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "WETH",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
},
{
"name": "acceptOwnership",
"type": "function",
"inputs": [],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "calculateStartTick",
"type": "function",
"inputs": [
{
"name": "quoteToken",
"type": "address",
"internalType": "address"
}
],
"outputs": [
{
"name": "startTick",
"type": "int24",
"internalType": "int24"
}
],
"stateMutability": "view"
},
{
"name": "defaultSushiFeeBps",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint16",
"internalType": "uint16"
}
],
"stateMutability": "view"
},
{
"name": "distributeFees",
"type": "function",
"inputs": [
{
"name": "token",
"type": "address",
"internalType": "address"
}
],
"outputs": [
{
"name": "quoteCollected",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "tokenCollected",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "quoteToSushi",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "tokenToSushi",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "nonpayable"
},
{
"name": "launch",
"type": "function",
"inputs": [
{
"name": "tokenConfig",
"type": "tuple",
"components": [
{
"name": "name",
"type": "string",
"internalType": "string"
},
{
"name": "symbol",
"type": "string",
"internalType": "string"
}
],
"internalType": "struct ISushiLaunchpad.TokenConfig"
},
{
"name": "quoteToken",
"type": "address",
"internalType": "address"
},
{
"name": "deadline",
"type": "uint64",
"internalType": "uint64"
}
],
"outputs": [
{
"name": "token",
"type": "address",
"internalType": "address"
},
{
"name": "pool",
"type": "address",
"internalType": "address"
},
{
"name": "positionId",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "payable"
},
{
"name": "launchAndBuy",
"type": "function",
"inputs": [
{
"name": "tokenConfig",
"type": "tuple",
"components": [
{
"name": "name",
"type": "string",
"internalType": "string"
},
{
"name": "symbol",
"type": "string",
"internalType": "string"
}
],
"internalType": "struct ISushiLaunchpad.TokenConfig"
},
{
"name": "quoteToken",
"type": "address",
"internalType": "address"
},
{
"name": "deadline",
"type": "uint64",
"internalType": "uint64"
},
{
"name": "initialBuy",
"type": "tuple",
"components": [
{
"name": "amountIn",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "amountOutMinimum",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "recipient",
"type": "address",
"internalType": "address"
}
],
"internalType": "struct ISushiLaunchpad.InitialBuy"
}
],
"outputs": [
{
"name": "token",
"type": "address",
"internalType": "address"
},
{
"name": "pool",
"type": "address",
"internalType": "address"
},
{
"name": "positionId",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "amountOut",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "payable"
},
{
"name": "launchAndBuyNative",
"type": "function",
"inputs": [
{
"name": "tokenConfig",
"type": "tuple",
"components": [
{
"name": "name",
"type": "string",
"internalType": "string"
},
{
"name": "symbol",
"type": "string",
"internalType": "string"
}
],
"internalType": "struct ISushiLaunchpad.TokenConfig"
},
{
"name": "deadline",
"type": "uint64",
"internalType": "uint64"
},
{
"name": "initialBuy",
"type": "tuple",
"components": [
{
"name": "amountIn",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "amountOutMinimum",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "recipient",
"type": "address",
"internalType": "address"
}
],
"internalType": "struct ISushiLaunchpad.InitialBuy"
}
],
"outputs": [
{
"name": "token",
"type": "address",
"internalType": "address"
},
{
"name": "pool",
"type": "address",
"internalType": "address"
},
{
"name": "positionId",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "amountOut",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "payable"
},
{
"name": "launchFee",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "launchInfo",
"type": "function",
"inputs": [
{
"name": "token",
"type": "address",
"internalType": "address"
}
],
"outputs": [
{
"name": "info",
"type": "tuple",
"components": [
{
"name": "creator",
"type": "address",
"internalType": "address"
},
{
"name": "quoteToken",
"type": "address",
"internalType": "address"
},
{
"name": "pool",
"type": "address",
"internalType": "address"
},
{
"name": "reserveUnlockAt",
"type": "uint64",
"internalType": "uint64"
},
{
"name": "reserveWithdrawn",
"type": "bool",
"internalType": "bool"
},
{
"name": "reserveAmount",
"type": "uint256",
"internalType": "uint256"
}
],
"internalType": "struct ISushiLaunchpad.LaunchInfo"
}
],
"stateMutability": "view"
},
{
"name": "onERC721Received",
"type": "function",
"inputs": [
{
"name": "operator",
"type": "address",
"internalType": "address"
},
{
"name": "from",
"type": "address",
"internalType": "address"
},
{
"name": "",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "",
"type": "bytes",
"internalType": "bytes"
}
],
"outputs": [
{
"name": "",
"type": "bytes4",
"internalType": "bytes4"
}
],
"stateMutability": "view"
},
{
"name": "owner",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
},
{
"name": "pendingOwner",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
},
{
"name": "positionManager",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "contract INonfungiblePositionManager"
}
],
"stateMutability": "view"
},
{
"name": "protocolRecipient",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
},
{
"name": "protocolReserveBps",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint16",
"internalType": "uint16"
}
],
"stateMutability": "view"
},
{
"name": "quoteTokenPriceFeed",
"type": "function",
"inputs": [
{
"name": "quoteToken",
"type": "address",
"internalType": "address"
}
],
"outputs": [
{
"name": "priceFeed",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
},
{
"name": "renounceOwnership",
"type": "function",
"inputs": [],
"outputs": [],
"stateMutability": "view"
},
{
"name": "setDefaultSushiFeeBps",
"type": "function",
"inputs": [
{
"name": "newSushiFeeBps",
"type": "uint16",
"internalType": "uint16"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "setLaunchFee",
"type": "function",
"inputs": [
{
"name": "newLaunchFee",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "setProtocolRecipient",
"type": "function",
"inputs": [
{
"name": "newRecipient",
"type": "address",
"internalType": "address"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "setProtocolReserveBps",
"type": "function",
"inputs": [
{
"name": "newReserveBps",
"type": "uint16",
"internalType": "uint16"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "setQuoteTokenPriceFeed",
"type": "function",
"inputs": [
{
"name": "quoteToken",
"type": "address",
"internalType": "address"
},
{
"name": "priceFeed",
"type": "address",
"internalType": "address"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "setSushiFeeBps",
"type": "function",
"inputs": [
{
"name": "token",
"type": "address",
"internalType": "address"
},
{
"name": "newSushiFeeBps",
"type": "uint16",
"internalType": "uint16"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "sushiFeeBps",
"type": "function",
"inputs": [
{
"name": "token",
"type": "address",
"internalType": "address"
}
],
"outputs": [
{
"name": "",
"type": "uint16",
"internalType": "uint16"
}
],
"stateMutability": "view"
},
{
"name": "transferCreator",
"type": "function",
"inputs": [
{
"name": "token",
"type": "address",
"internalType": "address"
},
{
"name": "newCreator",
"type": "address",
"internalType": "address"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "transferOwnership",
"type": "function",
"inputs": [
{
"name": "newOwner",
"type": "address",
"internalType": "address"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "uniswapV3SwapCallback",
"type": "function",
"inputs": [
{
"name": "amount0Delta",
"type": "int256",
"internalType": "int256"
},
{
"name": "amount1Delta",
"type": "int256",
"internalType": "int256"
},
{
"name": "",
"type": "bytes",
"internalType": "bytes"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "v3Factory",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "contract ISushiV3Factory"
}
],
"stateMutability": "view"
},
{
"name": "withdrawLaunchFees",
"type": "function",
"inputs": [],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "withdrawProtocolReserve",
"type": "function",
"inputs": [
{
"name": "token",
"type": "address",
"internalType": "address"
}
],
"outputs": [],
"stateMutability": "nonpayable"
}
]0x60e080604052346102d257608081615600803803809161001f82856103b2565b8339810103126102d257610032816103e9565b61003e602083016103e9565b916100576060610050604084016103e9565b92016103e9565b6001600160a01b0390921691821561039f57600180546001600160a01b03199081169091555f80549182168517815560405194916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09080a36002805463ffffffff60a01b1981166302ee004b60a21b179091556601c6bf52634000600355936001600160a01b0316908115801561038e575b801561037d575b61036e5763c45a015560e01b84526001600160a01b031692602081600481875afa5f9181610332575b506101375763ed5f09f160e01b5f5260045ffd5b6001600160a01b0392831692168290036102de576040516312a9293f60e21b8152602081600481875afa5f91816102f6575b5061017d5763ed5f09f160e01b5f5260045ffd5b936001600160a01b0385161580156102ed575b6102de576040516322afcccb60e01b81526127106004820152602081602481875afa5f918161029c575b506101d25763b9178e0160e01b5f525f60045260245ffd5b60020b60c8810361028a57506001600160c01b031916176302ee004b60a21b1760025560805260a05260c05260405161520290816103fe8239608051818181610e5501528181611fe301526132be015260a0518181816109ca01528181610f1a0152818161171b015281816121fc015281816124450152818161253f0152818161259a0152818161265601528181612a5301528181612a8f01528181612d5d0152612d96015260c0518181816106db01526111820152f35b63b9178e0160e01b5f5260045260245ffd5b9091506020813d6020116102d6575b816102b8602093836103b2565b810103126102d257518060020b81036102d257905f6101ba565b5f80fd5b3d91506102ab565b63ed5f09f160e01b5f5260045ffd5b50843b15610190565b9091506020813d60201161032a575b81610312602093836103b2565b810103126102d257610323906103e9565b905f610169565b3d9150610305565b9091506020813d602011610366575b8161034e602093836103b2565b810103126102d25761035f906103e9565b905f610123565b3d9150610341565b63d92e233d60e01b5f5260045ffd5b506001600160a01b038116156100fa565b506001600160a01b038316156100f3565b631e4fbdf760e01b5f525f60045260245ffd5b601f909101601f19168101906001600160401b038211908210176103d557604052565b634e487b7160e01b5f52604160045260245ffd5b51906001600160a01b03821682036102d25756fe60a06040526004361015610011575f80fd5b5f5f3560e01c806307a459d41461183d57806307ba8a54146117ca578063150b7a02146116d55780631df80669146115e9578063341bc63914611549578063447e94c6146110d95780635313be2c146110835780635a51fb5514610ff85780635c78744c14610fb3578063689ad6b714610f96578063715018a614610f6e57806371d5f9b814610f49578063791b98bc14610f0457806379ba509714610e845780637c887c5914610e3f5780638025bf9a14610d4f5780638da5cb5b14610d28578063905d3a1614610c205780639413f25c14610864578063941f5d251461083b5780639d7f7e861461081d578063a1ce44241461070a578063ad5c4648146106c5578063cf3cf573146106a7578063d2843a291461061a578063e14a3b7d146105d9578063e30c3978146105b0578063eaf1b8c014610581578063f1fcc00d146104db578063f2fde38b1461046e578063f82e9b9d146103b3578063fa461e33146101ac5763fd40060c14610185575f80fd5b346101a957806003193601126101a957602061ffff60025460a01c16604051908152f35b80fd5b50346101a95760603660031901126101a9576004356024356044356001600160401b0381116103af576101e3903690600401611c0a565b5050604051906101f282611c48565b60018060a01b03600a54169081835260018060a01b03600b54169360208401948552600c5491604085019360018060a01b0384168552606086019060ff8560a01c161515825260ff608088019560a81c161515855260a0600d549701968752330361039c5751156103665786821380159061035c575b6103445750925b5180841161032d575084600a5584600b5584600c5584600d555115155f146102aa57516102a7925033906001600160a01b0316613df0565b80f35b5191516040516323b872dd60e01b85526001600160a01b03918216600452336024526044929092529091169060208360648180865af190600184511482161561030c575b604052156102fa575080f35b635274afe760e01b8252600452602490fd5b90600181151661032457823b15153d151616906102ee565b503d83823e3d90fd5b63b197041f60e01b86526004526024839052604485fd5b630b27ab6560e21b8752600491909152602452604485fd5b5086811215610268565b90868213801590610392575b61037d57509261026f565b630b27ab6560e21b8752600452602452604485fd5b5086811215610372565b63b09dab4b60e01b885233600452602488fd5b8380fd5b50346101a95760403660031901126101a9576103cd611bb4565b6103d5611b9e565b906103df8161341b565b6001600160a01b03908116808452600560205260408420805490939216913383900361045b576001600160a01b031692831561044c5780546001600160a01b031916841790557ff51df37c442fa56bb69ae31113b6baba4153182940542bc965ee52d668e2e7ea8480a480f35b63d92e233d60e01b8552600485fd5b63029d46c560e51b855233600452602485fd5b50346101a95760203660031901126101a957610488611bb4565b6104906133f5565b600180546001600160a01b0319166001600160a01b0392831690811790915582549091167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e227008380a380f35b50346101a95760203660031901126101a9576104f5611c37565b6104fd6133f5565b61ffff81166103e8811161056f57506002805461ffff60a01b60a084811b9190911661ffff60a01b198316179092556040805161ffff9290931c82168352921660208201527f0efaf523f05a0a239157b767d9d711fe5ee48b5e0b1df2e5c627e094ba0baa1a91819081015b0390a180f35b633d8ca59760e21b8352600452602482fd5b50346101a95760203660031901126101a95760206105a56105a0611bb4565b6137e0565b6040519060020b8152f35b50346101a957806003193601126101a9576001546040516001600160a01b039091168152602090f35b50346101a95760203660031901126101a9576020906001600160a01b036105fe611bb4565b16815260088252604060018060a01b0391205416604051908152f35b50346101a95760203660031901126101a9577f8ea1b4b670dd24a028ee2e5ec632ccc09703f357854a12f7daee6b21fbbd0d9861ffff610658611c37565b6106606133f5565b61066981613454565b610569600254918360b01b8160b01b168460b01b1984161760025560405193849360b01c168390929161ffff60209181604085019616845216910152565b50346101a957806003193601126101a9576020600354604051908152f35b50346101a957806003193601126101a9576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b50346101a95760203660031901126101a957610724611bb4565b61072c6133f5565b610734611cce565b61073d8161341b565b6001600160a01b031680825260056020526040822060028101805491929160e081901c60ff16610809576001600160401b038160a01c168042106107f7575060ff60e01b1916600160e01b179055600254600392909201546001600160a01b0392909216917ff00d3483685ace3e730f52760f7c004e774f510116aa6330c49c8a9b6a528ae390602090806107e7575b604051908152a3805f5160206151ad5f395f51905f525d80f35b6107f2818686613df0565b6107cd565b630255930d60e51b8652600452602485fd5b63df59d84760e01b85526004839052602485fd5b50346101a957806003193601126101a95760206040516203f4808152f35b50346101a957806003193601126101a9576002546040516001600160a01b039091168152602090f35b50346101a95760203660031901126101a95761087e611bb4565b610886611cce565b61088f8161341b565b6040519060e082018281106001600160401b03821117610c0c576040908152838352602080840185815284830186815260608601878152608080880189815260a089018a815260c08a018b81526001600160a01b03998a16808d526005808a528a8e20548c168d52600280548d168a52828f52818b528b8f2001548c168852818e528952898d2060010154909a168552898c5260068852888c205461ffff168352898c526007909752878b2054975194999398949793969495949193919290919088016001600160401b03811189821017610bf857604090815290885230602089019081526001600160801b0389830181815260608b01828152845163fc6f786560e01b81529b5160048d015292516001600160a01b0390811660248d01529051821660448c015291511660648a0152889060849082908e907f0000000000000000000000000000000000000000000000000000000000000000165af1968715610bed578a908b98610bad575b509160809a95939161ffff9a999897959360018060a01b038a511686105f14610ba557979a8b9a5b610a31828651168d6135e8565b9a610a4a8c610a448d868a5116906135e8565b9e611cc1565b8452610a568d8c611cc1565b8552805187516001600160a01b03918216918e911681610b94575b505087516001600160a01b031690508d80610b83575b505051885184516001600160a01b039283169290911681610b72575b50505060018060a01b03885116845180610b61575b505060018060a01b039051169660018060a01b039051169460018060a01b03905116935116905191519260405194855260208501526040840152896060840152868b8401528760a08401528860c084015260e08301526101008201527f782d3af70ec15a46782fe1810af1f1a48f8732707c8fc0ff6ae54dad091d68b66101203392a45f5160206151ad5f395f51905f525d604051938452602084015260408301526060820152f35b610b6b9189613df0565b5f80610ab8565b610b7b92613df0565b5f8080610aa3565b610b8d918a613df0565b5f8d610a87565b610b9d92613df0565b5f8c81610a71565b9a8b9a610a24565b9750506040873d604011610be5575b81610bc960409383611c63565b81010312610be15786516020909701519660806109fc565b8980fd5b3d9150610bbc565b6040513d8c823e3d90fd5b634e487b7160e01b8c52604160045260248cfd5b634e487b7160e01b84526041600452602484fd5b50346101a95760403660031901126101a957610c3a611bb4565b610c42611b9e565b610c4a6133f5565b6001600160a01b038216908115610d19576001600160a01b0381169283610cc8575b50508083526008602081815260408086205484875292909152842080546001600160a01b031916841790556001600160a01b0316907fbf78d87ad6d051f3aa7ed800d2b5186ee3ba61451554cc4a0eb076026c78497e8480a480f35b803b15610d0557813b15610cf15790610ce3610ce992613484565b50613527565b505f80610c6c565b636ade937960e11b85526004849052602485fd5b63b8b6ff7760e01b85526004839052602485fd5b63d92e233d60e01b8452600484fd5b50346101a957806003193601126101a957546040516001600160a01b039091168152602090f35b50346101a95760203660031901126101a957604060c091610d6e611bb4565b610d76611c91565b50610d808161341b565b6001600160a01b03168152600560205220604051610d9d81611c48565b60018060a01b03825416918282526001600160401b0360018060a01b036001830154169160208401928352600281015492604085019060018060a01b038516825260a0600360608801948688841c16865260ff60808a019860e01c16151588520154960195865260405196875260018060a01b03905116602087015260018060a01b0390511660408601525116606084015251151560808301525160a0820152f35b50346101a957806003193601126101a9576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b50346101a957806003193601126101a957600154336001600160a01b03821603610ef1576001600160a01b0319908116600155815433918116821783556001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08380a380f35b63118cdaa760e01b825233600452602482fd5b50346101a957806003193601126101a9576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b50346101a957806003193601126101a957602061ffff60025460b01c16604051908152f35b50346101a957806003193601126101a957600490610f8a6133f5565b6310e83c2760e21b8152fd5b50346101a957806003193601126101a95760206040516113888152f35b50346101a95760203660031901126101a95761ffff6040602092610fd5611bb4565b610fde8161341b565b6001600160a01b0316815260068452205460405191168152f35b5060603660031901126101a9576004356001600160401b03811161107f576040600319823603011261107f579061104e606092611033611b9e565b61103b611bca565b90611044611cce565b3392600401611d03565b91925f5160206151ad5f395f51905f525d604080516001600160a01b03948516815291909316602082015291820152f35b5080fd5b50346101a95760203660031901126101a9577f0fd958ac60db1437ae35514054402c4e597e81881e4b6dd47a6509bd8912142860406004356110c36133f5565b600354908060035582519182526020820152a180f35b5060a03660031901126114eb57600435906001600160401b0382116114eb57604060031983360301126114eb576024356001600160401b03811681036114eb5760603660431901126114eb5761112d611cce565b60443592831561153a576001600160ff1b038411611527576084356001600160a01b038116939092908484036114eb578415611518575f953086146115055761117881600354611c84565b8034106114ef57507f0000000000000000000000000000000000000000000000000000000000000000936001600160a01b03851693843b156114eb57604051630d0e30db60e41b81525f81600481878a5af180156114e0576114c6575b50906111e691863392600401611d03565b9491969097896114c2576001600160a01b038916938185146114ae5760a09a6112926001808e1b038b1695838782109e8f6040519061122482611c48565b8b8252336020830152604082018590526060820152600160808201520152600a80546001600160a01b0319166001600160a01b038a161790555b600b80546001600160a01b0319163317905560018060a01b03166bffffffffffffffffffffffff60a01b600c541617600c55565b600c805461ffff60a01b191660a08e901b60ff60a01b1617600160a81b179055600d82905561147d578a15611494576401000276a45b60405192630251596160e31b845260048401528b602484015281604484015260018060a01b0316606483015260a060848301528560a483015260408260c48189895af18015611489578692879161144c575b50600a546001600160a01b0316611438578b1561143157829b5b1561142b5780925b878d13801590611421575b61140c575050808b036113f55750600160ff1b81146113e1578403956064358088106113ca57506113c69798997fce8f7c5c51d5a918a2395410ffb37f8b14040e9b3a5e1acb8f2f6bde49119ff7916113a889604051938493339785611be0565b0390a45f5160206151ad5f395f51905f525d60405194859485611be0565b0390f35b63295b510960e21b86526004526024879052604485fd5b634e487b7160e01b85526011600452602485fd5b63056c8f8760e01b865260045260248a9052604485fd5b630b27ab6560e21b8852600452602452604486fd5b5087841215611347565b8261133c565b809b611334565b6366bda26960e11b87526004869052602487fd5b9250506040823d604011611481575b8161146860409383611c63565b8101031261147d57602082519201515f61131a565b8580fd5b3d915061145b565b6040513d88823e3d90fd5b73fffd8963efd1fc6a506488495d951d5263988d256112c8565b63f3d5e83b60e01b86526004829052602486fd5b8480fd5b6111e6929194505f6114d791611c63565b5f9390916111d5565b6040513d5f823e3d90fd5b5f80fd5b631fa0ca3360e01b5f526004523460245260445ffd5b8563f3d5e83b60e01b5f5260045260245ffd5b63d92e233d60e01b5f5260045ffd5b836317269b6b60e31b5f5260045260245ffd5b636d4d4f6960e11b5f5260045ffd5b346114eb5760403660031901126114eb57611562611bb4565b6024359061ffff821682036114eb577fc133360f709dd155be1c233be5c482044d7d833c2417fc1a09fc11b2fc774f709061159b6133f5565b6115a48161341b565b6115ad83613454565b6001600160a01b03165f81815260066020908152604091829020805461ffff96871661ffff1982168117909255835196168652908501529092a2005b346114eb575f3660031901126114eb576116016133f5565b611609611cce565b4780156116c6576002546001600160a01b0316905f80808084865af13d156116c1573d6001600160401b0381116116ad5760405190611652601f8201601f191660200183611c63565b81525f60203d92013e5b1561169e5760207f465fdd04e8f1c250735b4c77e26b79dc6321f231c1eb2e6d1370f4f3a222627791604051908152a25f5f5160206151ad5f395f51905f525d005b633d2cec6f60e21b5f5260045ffd5b634e487b7160e01b5f52604160045260245ffd5b61165c565b630686827b60e51b5f5260045ffd5b346114eb5760803660031901126114eb576116ee611bb4565b6116f6611b9e565b906064356001600160401b0381116114eb57611716903690600401611c0a565b5050337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316148015906117bd575b80156117aa575b8015611798575b61177057604051630a85bd0160e11b8152602090f35b63da0c0e8160e01b5f908152336004526001600160a01b039182166024529116604452606490fd5b506001600160a01b038216151561175a565b506001600160a01b038116301415611753565b5060ff600954161561174c565b346114eb5760203660031901126114eb576117e3611bb4565b6117eb6133f5565b6001600160a01b0316801561151857600280546001600160a01b0319811683179091556001600160a01b03167fb6786947bf0d8255fffa029533e9771866865022ae66c39389f4e35233701ebb5f80a3005b60c03660031901126114eb576004356001600160401b0381116114eb57604060031982360301126114eb57611870611b9e565b611878611bca565b9160603660631901126114eb5761188d611cce565b60643591821561153a576001600160ff1b038311611b8b5760a4356001600160a01b038116949093908585036114eb578515611518575f93308714611b78576118db91843392600401611d03565b9291949095816114eb576001600160a01b03871692888414611b65576040516001600160a01b038881169088168181109b91959193926119629190849060a0908f61192582611c48565b8b82523360208301526040820185905260608201525f60808201520152600a80546001600160a01b0319166001600160a01b038a1617905561125e565b600c805461ffff60a01b191660a08d901b60ff60a01b16179055600d8290556114eb578915611b4b576401000276a45b60405192630251596160e31b845260048401528a602484015281604484015260018060a01b0316606483015260a060848301525f60a483015260408260c4815f895af180156114e0575f925f91611b12575b50600a546001600160a01b0316611aff578a15611af857829a5b15611af25780925b5f8c13801590611ae8575b611ad3575050808a03611abc5750600160ff1b8114611aa8575f0394608435808710611a9157506113c69697987fce8f7c5c51d5a918a2395410ffb37f8b14040e9b3a5e1acb8f2f6bde49119ff791611a7288604051938493339785611be0565b0390a45f5f5160206151ad5f395f51905f525d60405194859485611be0565b869063295b510960e21b5f5260045260245260445ffd5b634e487b7160e01b5f52601160045260245ffd5b899063056c8f8760e01b5f5260045260245260445ffd5b630b27ab6560e21b5f5260045260245260445ffd5b505f841215611a11565b82611a06565b809a6119fe565b856366bda26960e11b5f5260045260245ffd5b9250506040823d604011611b43575b81611b2e60409383611c63565b810103126114eb57602082519201518b6119e4565b3d9150611b21565b73fffd8963efd1fc6a506488495d951d5263988d25611992565b8863f3d5e83b60e01b5f5260045260245ffd5b8663f3d5e83b60e01b5f5260045260245ffd5b826317269b6b60e31b5f5260045260245ffd5b602435906001600160a01b03821682036114eb57565b600435906001600160a01b03821682036114eb57565b604435906001600160401b03821682036114eb57565b6001600160a01b039182168152911660208201526040810191909152606081019190915260800190565b9181601f840112156114eb578235916001600160401b0383116114eb57602083818601950101116114eb57565b6004359061ffff821682036114eb57565b60c081019081106001600160401b038211176116ad57604052565b90601f801991011681019081106001600160401b038211176116ad57604052565b91908201809211611aa857565b60405190611c9e82611c48565b5f60a0838281528260208201528260408201528260608201528260808201520152565b91908203918211611aa857565b5f5160206151ad5f395f51905f525c611cf45760015f5160206151ad5f395f51905f525d565b633ee5aeb560e01b5f5260045ffd5b92939190935f6080526040519461014086018681106001600160401b038211176116ad576040525f86525f60408701525f60608701525f60c08701525f60e08701525f6101008701525f61012087015260018060a01b03168060208701526002549061ffff808360a01c16928360808a015260b01c1660a08801526003548034106133df57506001600160401b03841642116133c357801561151857803b156133b1575f818152600860205260409020546001600160a01b03161561339f5750611dcd8580613e71565b90501561339057611de16020860186613e71565b905015613381576040611df48680613e71565b905011613363576010611e0a6020870187613e71565b90501161334257611e1a9061366c565b80676765c793fa10079d601b1b03676765c793fa10079d601b1b8111611aa85760e087015260c08601526020850151611e5b906001600160a01b03166137e0565b60020b61012086015260018060a01b036020860151165f90610a5d604051611e866020830182611c63565b81815261475090611ecf611f0e8a6020611eba611edd8287019389898639611eae8180613e71565b93909185810190613e71565b97909160405198899387850196309388613ec3565b03601f198101875286611c63565b60405194859383850197518091895e840190838201905f8252519283915e01015f815203601f198101835282611c63565b51902091604051602081019060608252611f8781611f648d611f52611f47611f368380613efe565b6040608088015260c0870191613ea3565b916020810190613efe565b848303607f190160a086015290613ea3565b8860408301526001600160401b038c16606083015203601f198101835282611c63565b51902092600454935f945b60088610613189575b5050506001600160a01b038516939250508215905061317a57604051630b4c774160e11b81526001600160a01b039384166004820152908316602482015261271060448201527f000000000000000000000000000000000000000000000000000000000000000090921691602081606481865afa9081156114e0575f91613140575b506001600160a01b03168061312a57508087526020808801516001600160a01b0390811680841060608b018190526101208b015160405163a167129560e01b8152938616600485015260248401839052612710604485015260020b949093909290816064815f8a5af19081156114e0575f916130f0575b50604051630b4c774160e11b81526001600160a01b03848116600483015283166024820152612710604482015295602090879060649082905afa9586156114e0575f966130b4575b506001600160a01b031694851580156130a1575b6130835750821561307c57815b83156130745750905b604051630dfe168160e01b815290602082600481895afa9182156114e0575f92613038575b506001600160a01b0391821691161480159190612fc0575b508015612f49575b8015612edd575b612eca57612165919015612ebc57614092565b813b156114eb5760405163f637731d60e01b81526001600160a01b0390911660048201819052905f8160248183875af180156114e057612ea8575b50604051633850c7bd60e01b815260e081600481865afa908115612a415760805191612e16575b506001600160a01b031690808203612dfd5750506040860152845160e08601516001600160a01b0391821695916122229082907f0000000000000000000000000000000000000000000000000000000000000000168861464f565b15612d58575b5085516020870151604088015160608901516101208a015160e08b01516001600160a01b039485169895851695909460029290920b93921515926001600160401b039216612274611c91565b998415612d525787905b8515612d4a57915b604051986122938a611c48565b895260208901526001600160a01b039081166040890152166060870152608086018390521660a085015215612d2f576122cd6111546137b8565b905b8160020b60408801528060020b602088015260018060a01b036040850151169160018060a01b036060860151169060808601511515926001600160401b0360a08801511693600160ff19600954161760095560805150805f14612d265786905b15612d1f57608051905b60405196876101608101106001600160401b036101608a011117612d0757610160880160405287526020870194855260408701936127108552606088019360020b8452608088019060020b815260a0880191825260c0880192835260e0880193608051855262ffffff6101008a019660805188526101208b0198308a526101408c019a8b526040519b634418b22b60e11b8d5260018060a01b0390511660048d015260018060a01b0390511660248c0152511660448a01525160020b60648901525160020b60848801525160a48701525160c48601525160e48501525161010484015260018060a01b039051166101248301525161014482015260808161016481835160018060a01b037f0000000000000000000000000000000000000000000000000000000000000000165af18015612a415760805190819081908190612cac575b6009805460ff191690556001600160801b0384811660a08c0152908a5260608a0186905260808701519394509215612ca657805b60808a81019190915286015115612c9e5750915b1615612c8b5780612c7557506080850151818111612c5c575050835160018060a01b0360408301511660018060a01b0360608401511690602087015160020b90604088015160020b6001600160801b0360a08a015116926040519063133f757160e31b82528660048301526101808260248160018060a01b037f0000000000000000000000000000000000000000000000000000000000000000165afa938415612a415760805196879586948593849392849290612b92575b506040516331a9108f60e11b8152600481018d90526020816024817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa908115612a415760805191612b58575b506001600160a01b0316301480159b90612b44575b50508915612b30575b50508715612b1e575b508615612b10575b50508415612b02575b50508215612aee575b5050612ad8575083519060018060a01b0390511660805152600760205260406080512055825194608084015161010088015261267c60805160018060a01b037f0000000000000000000000000000000000000000000000000000000000000000168361464f565b15612a4e575b610100870151676765c793fa10079d601b1b03676765c793fa10079d601b1b81116129d6576020602492604051938480926370a0823160e01b82523060048301525afa918215612a415760805192612a07575b508082036129ee57505085516020870151604088015160c089015160a08a015161ffff16936001600160a01b0390811693426001600160401b039081166301e1338001949183169392919091169084116129d6576003926040519461273986611c48565b6001600160a01b038a81168752602080880193845260408089019586526001600160401b03939093166060890190815260808051818b0190815260a08b8101998a5282518d90526005855282518781209c518d546001600160a01b0319908116918916919091178e55985160018e018054909a1690881617909855975160028c018054945192516001600160e81b03199095169190961617971b67ffffffffffffffff60a01b169690961790151560e01b60ff60e01b1617909155935194909501939093559390915260069052905120805461ffff191661ffff929092169190911790556004545f1981146129d65760010160045560018060a01b03865116907feb75611adf556ff88e68373468e6f6459cdc23d2032f4b2d8e83207d84dacda560018060a01b036040890151169361ffff60808a015116926101208a015160020b91856080515260056020526128b86040608051209260018060a01b03600185015416936129166128ab8380613e71565b9490936020810190613e71565b6129086001600160401b036002600387015496015460a01c16958d60805152600660205261ffff6040608051205416976040519b8c9b8c5260208c015261010060408c01526101008b0191613ea3565b9188830360608a0152613ea3565b608086019890985260a085015260c084015260e08301526001600160a01b0316930390a460018060a01b0384511660018060a01b03604086015116907f4e9374aa2e904229d2cc95c70fe50a384897733e7225488a46bd86b12cf3698660a0845194602081015160020b90604081015160020b9060608101516001600160801b0385608084015193015116926040519485526020850152604084015260608301526080820152a482516040909301516001600160a01b0393841693169190565b634e487b7160e01b6080515260116004526024608051fd5b6303cbae4560e11b608051526004526024526044608051fd5b9091506020813d602011612a39575b81612a2360209383611c63565b81010312612a335751905f6126d5565b60805180fd5b3d9150612a16565b6040513d608051823e3d90fd5b612a817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168261469c565b15612ac257608051612abd907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031683614700565b612682575b635274afe760e01b608051526004526024608051fd5b63f3b1727f60e01b608051526004526024608051fd5b6001600160801b0316141590505f80612615565b60020b141592505f8061260c565b60020b141594505f80612603565b62ffffff16612710141596505f6125fb565b6001600160a01b0316141597505f806125f2565b6001600160a01b0316141599505f806125e9565b90506020813d602011612b8a575b81612b7360209383611c63565b81010312612a3357612b8490613f2f565b5f6125d4565b3d9150612b66565b965097505097505050610180823d8211612c54575b81612bb56101809383611c63565b81010312612a335781516bffffffffffffffffffffffff811603612a3357612bdf60208301613f2f565b50612bec60408301613f2f565b612bf860608401613f2f565b96612c0560808501613f43565b90612c1260a08601613f53565b91612c1f60c08701613f53565b93612c47610160612c3260e08a0161473b565b98612c40610140820161473b565b500161473b565b509990929395975f61257d565b3d9150612ba7565b63f7bc591560e01b608051526004526024526044608051fd5b63204ad11760e21b608051526004526024608051fd5b630200e8a960e31b608051526004608051fd5b9050916124c4565b816124b0565b505050506080813d608011612cff575b81612cc960809383611c63565b81010312612a33576001600160801b038151612ce76020840161473b565b9060606040850151940151909193909184935061247c565b3d9150612cbc565b634e487b7160e01b6080515260416004526024608051fd5b8690612339565b6080519061232f565b612d44612d3e611153196137b8565b916137cd565b906122cf565b508791612286565b8061227e565b612d8b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168761469c565b15612de657612dc4907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031687614700565b15612dcf575f612228565b84635274afe760e01b608051526004526024608051fd5b85635274afe760e01b608051526004526024608051fd5b630175991f60e01b608051526004526024526044608051fd5b905060e0813d60e011612ea0575b81612e3160e09383611c63565b81010312612a33578051906001600160a01b0382168203612a335780612e5b602060c09301613f53565b50612e6860408201613f61565b50612e7560608201613f61565b50612e8260808201613f61565b50612e8f60a08201613476565b50015180151503612a33575f6121c7565b3d9150612e24565b5f612eb291611c63565b5f6080525f6121a0565b612ec5906137cd565b614092565b826379fff0fd60e01b5f5260045260245ffd5b506040516334324e9f60e21b8152602081600481875afa80156114e0575f90612f0f575b60c8915060020b1415612152565b506020813d602011612f41575b81612f2960209383611c63565b810103126114eb57612f3c60c891613f53565b612f01565b3d9150612f1c565b5060405163ddca3f4360e01b8152602081600481875afa9081156114e0575f91612f7e575b5062ffffff16612710141561214b565b90506020813d602011612fb8575b81612f9960209383611c63565b810103126114eb5762ffffff612fb161271092613f43565b9150612f6e565b3d9150612f8c565b60405163d21220a760e01b81529150602082600481885afa9182156114e0575f92612ffc575b506001600160a01b03918216911614155f612143565b9091506020813d602011613030575b8161301860209383611c63565b810103126114eb5761302990613f2f565b905f612fe6565b3d915061300b565b9091506020813d60201161306c575b8161305460209383611c63565b810103126114eb5761306590613f2f565b905f61212b565b3d9150613047565b905090612106565b80916120fd565b856326a1a1eb60e21b5f5260045260018060a01b031660245260445ffd5b506001600160a01b0381168614156120f0565b9095506020813d6020116130e8575b816130d060209383611c63565b810103126114eb576130e190613f2f565b945f6120dc565b3d91506130c3565b90506020813d602011613122575b8161310b60209383611c63565b810103126114eb5761311c90613f2f565b5f612094565b3d91506130fe565b90633f808ca960e01b5f5260045260245260445ffd5b90506020813d602011613172575b8161315b60209383611c63565b810103126114eb5761316c90613f2f565b5f61201d565b3d915061314e565b63bd61005f60e01b5f5260045ffd5b604097939495969751602081019060018060a01b038b1682528260408201528360608201524460808201524360a08201528860c082015260c081526131cf60e082611c63565b51902096600b6040518560408201528960208201523081520160ff8153605590206001600160a01b0316803b158015918b91613284575b505061327357505050505061321b8880613e71565b929061322a60208b018b613e71565b9060405195858701938785106001600160401b038611176116ad5787966132549688393094613ec3565b03905ff580156114e0576001600160a01b0316905f8080808080611f9b565b939796506001909301949392611f92565b604051630b4c774160e11b81526001600160a01b0391821660048201529116602482015261271060448201529050602081806064810103817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa9081156114e0575f91613309575b506001600160a01b03161515895f613206565b90506020813d821161333a575b8161332360209383611c63565b810103126114eb5761333490613f2f565b5f6132f6565b3d9150613316565b61334f6020860186613e71565b905063eb6409bb60e01b5f5260045260245ffd5b61336d8580613e71565b9050630585ca3d60e21b5f5260045260245ffd5b630cc613fb60e11b5f5260045ffd5b632ef1310560e01b5f5260045ffd5b631bdf902f60e01b5f5260045260245ffd5b63b8b6ff7760e01b5f5260045260245ffd5b6001600160401b038463044d7a6f60e41b5f521660045260245ffd5b6364ab6ed160e11b5f526004523460245260445ffd5b5f546001600160a01b0316330361340857565b63118cdaa760e01b5f523360045260245ffd5b6001600160a01b039081165f81815260056020526040902060020154909116156134425750565b6340d1d8df60e11b5f5260045260245ffd5b61ffff1661271081116134645750565b632b0caee160e01b5f5260045260245ffd5b519060ff821682036114eb57565b60405163313ce56760e01b81526001600160a01b03919091169190602081600481865afa5f91816134eb575b506134c8578263b8b6ff7760e01b5f5260045260245ffd5b915060ff8216601281116134d95750565b630655f72160e51b5f5260045260245ffd5b9091506020813d60201161351f575b8161350760209383611c63565b810103126114eb5761351890613476565b905f6134b0565b3d91506134fa565b60405163313ce56760e01b81526001600160a01b03919091169190602081600481865afa5f918161358e575b5061356b5782636ade937960e11b5f5260045260245ffd5b915060ff82166012811161357c5750565b63ec18ce9b60e01b5f5260045260245ffd5b9091506020813d6020116135c2575b816135aa60209383611c63565b810103126114eb576135bb90613476565b905f613553565b3d915061359d565b81156135d4570490565b634e487b7160e01b5f52601260045260245ffd5b9091905f905f19848209908481029283808410930392808403931461365f5782612710111561364d57507fbc01a36e2eb1c432ca57a786c226809d495182a9930be0ded288ce703afb7e919394612710910990828211900360fc1b910360041c170290565b634e487b71905260116020526024601cfd5b5050506127109192500490565b905f5f1983676765c793fa10079d601b1b0983676765c793fa10079d601b1b02918280831092039180830392146136ee5781612710111561364d57506127107fbc01a36e2eb1c432ca57a786c226809d495182a9930be0ded288ce703afb7e919394676765c793fa10079d601b1b0990828211900360fc1b910360041c170290565b505061271090049150565b5f19600160c01b8209918160c01b91828085109403938085039414613792578382111561377a578190600160c01b9009815f0382168092046002816003021880820260020302808202600203028082026002030280820260020302808202600203028091026002030293600183805f03040190848311900302920304170290565b50634e487b715f52156003026011186020526024601cfd5b509061379e92506135ca565b90565b519069ffffffffffffffffffff821682036114eb57565b60c89060020b02908160020b918203611aa857565b60020b627fffff198114611aa8575f0390565b6001600160a01b038082165f81815260086020526040902054909116929190831561339f575061380f90613484565b61381883613527565b604051633fabe5a360e21b81529160a083600481885afa5f5f90825f965f94613d96575b506138545787636ade937960e11b5f5260045260245ffd5b95965094929391925f861315613d835782158015613d7a575b8015613d59575b613d315750506203f4806138888242611cc1565b11613d145750744f3a68dbc8f03f243baf513267aa9a3ee524f8e0288311613d015760ff80911691160161ffff8111611aa85761ffff16604d8111611aa857600a0a806113880290611388820403611aa857676765c793fa10079d601b1b820291808304676765c793fa10079d601b1b1490151715611aa8576139139161390e916136f9565b613f70565b6001600160a01b03811691906401000276a3831080159081613ce3575b613cd05780613cb3575b156114eb57640100000000600160c01b039060201b16806001600160801b03811160071b90811c6001600160401b03811160061b90811c63ffffffff811160051b90811c61ffff811160041b90811c9060ff821160031b91821c92600f841160021b93841c94600160038711811b96871c1196171717171717179060808210155f14613ca157607e198201828111611aa8571c5b607f198201918213600116611aa857800280607f1c8160ff1c1c800280607f1c8160ff1c1c800280607f1c8160ff1c1c800280607f1c8160ff1c1c800280607f1c8160ff1c1c800280607f1c8160ff1c1c80029081607f1c8260ff1c1c80029283607f1c8460ff1c1c80029485607f1c8660ff1c1c80029687607f1c8860ff1c1c80029889607f1c8a60ff1c1c80029a8b607f1c8c60ff1c1c80029c8d80607f1c9060ff1c1c800260cd1c6604000000000000169d60cc1c6608000000000000169c60cb1c6610000000000000169b60ca1c6620000000000000169a60c91c6640000000000000169960c81c6680000000000000169860c71c670100000000000000169760c61c670200000000000000169660c51c670400000000000000169560c41c670800000000000000169460c31c671000000000000000169360c21c672000000000000000169260c11c674000000000000000169160c01c678000000000000000169060401b1717171717171717171717171717693627a301d71055774c85810290808205693627a301d71055774c851490151715611aa8576f028f6481ab7f045a5af012a19d003aa9198101600182821316611aa85760801d60020b906fdb2df09e81959a81455e260799a0632f8101905f6fdb2df09e81959a81455e260799a0632f83129112908015821691151617611aa85760801d60020b818103613c795750915b613be560c88460020b056137b8565b9260020b5f81129081613c69575b50613c49575b613c05611153196137b8565b60020b8360020b908112908115613c31575b50613c1f5750565b63b534457f60e01b5f5260045260245ffd5b9050613c3e6111546137b8565b60020b13155f613c17565b9160020b60c71901627fffff198112627fffff821317611aa85791613bf9565b60c891500760020b15155f613bf3565b90836001600160a01b03613c8c84614092565b1611613c9a57505b91613bd6565b9050613c94565b81607f03607f8111611aa8571b6139ce565b5073fffd8963efd1fc6a506488495d951d5263988d26831061393a565b8363b534457f60e01b5f5260045260245ffd5b5073fffd8963efd1fc6a506488495d951d5263988d26841015613930565b82632abc708d60e01b5f5260045260245ffd5b6366c3172360e01b5f52600452426024526203f48060445260645ffd5b9069ffffffffffffffffffff809263156dd37960e11b5f52166004521660245260445260645ffd5b5069ffffffffffffffffffff811669ffffffffffffffffffff831610613874565b5042831161386d565b85632abc708d60e01b5f5260045260245ffd5b96509250505060a0843d60a011613de8575b81613db560a09383611c63565b810103126114eb57613dc6846137a1565b936020810151613ddd6080606084015193016137a1565b95909195925f61383c565b3d9150613da8565b916040519163a9059cbb60e01b5f5260018060a01b031660045260245260205f60448180865af19060015f5114821615613e50575b60405215613e305750565b635274afe760e01b5f9081526001600160a01b0391909116600452602490fd5b906001811516613e6857823b15153d15161690613e25565b503d5f823e3d90fd5b903590601e19813603018212156114eb57018035906001600160401b0382116114eb576020019181360383136114eb57565b908060209392818452848401375f828201840152601f01601f1916010190565b93613ee060409492613eee94989798606088526060880191613ea3565b918583036020870152613ea3565b6001600160a01b03909416910152565b9035601e19823603018112156114eb5701602081359101916001600160401b0382116114eb5781360383136114eb57565b51906001600160a01b03821682036114eb57565b519062ffffff821682036114eb57565b51908160020b82036114eb57565b519061ffff821682036114eb57565b600181111561379e57806001600160801b821015614081575b600482600160401b614033941015614074575b640100000000811015614067575b6201000081101561405a575b61010081101561404e575b6010811015614042575b101561403a575b60030260011c613fe281846135ca565b0160011c613ff081846135ca565b0160011c613ffe81846135ca565b0160011c61400c81846135ca565b0160011c61401a81846135ca565b0160011c61402881846135ca565b0160011c80926135ca565b8111900390565b60011b613fd2565b811c9160021b91613fcb565b60081c91811b91613fc1565b60101c9160081b91613fb6565b60201c9160101b91613faa565b60401c9160201b91613f9c565b5050608081901c600160401b613f89565b62ffffff8160020b915f83125f14614648576140ad906137cd565b16905b620d89e882116114eb576001821615614636576001600160881b036ffffcb933bd6fad37aa2d162d1a5940015b1691600281166145fb575b600481166145c0575b60088116614585575b6010811661454a575b6020811661450f575b604081166144d4575b60808116614499575b610100811661445e575b6102008116614423575b61040081166143e8575b61080081166143ad575b6110008116614372575b6120008116614337575b61400081166142fc575b61800081166142c1575b620100008116614286575b62020000811661424d575b620400008116614216575b62080000166141e3575b5f126141d5575b63ffffffff81166141ca576141c65f915b6001600160a01b039260ff169060201c611c84565b1690565b6141c66001916141b1565b80156135d4575f19046141a0565b906b048a170391f7dc42444e8fa28102908082046b048a170391f7dc42444e8fa21490151715611aa85760801c90614199565b916d2216e584f5fa1ea926041bedfe988102908082046d2216e584f5fa1ea926041bedfe981490151715611aa85760801c9161418f565b916e5d6af8dedb81196699c329225ee6048102908082046e5d6af8dedb81196699c329225ee6041490151715611aa85760801c91614184565b916f09aa508b5b7a84e1c677de54f3e99bc98102908082046f09aa508b5b7a84e1c677de54f3e99bc91490151715611aa85760801c91614179565b916f31be135f97d08fd981231505542fcfa68102908082046f31be135f97d08fd981231505542fcfa61490151715611aa85760801c9161416e565b916f70d869a156d2a1b890bb3df62baf32f78102908082046f70d869a156d2a1b890bb3df62baf32f71490151715611aa85760801c91614164565b916fa9f746462d870fdf8a65dc1f90e061e58102908082046fa9f746462d870fdf8a65dc1f90e061e51490151715611aa85760801c9161415a565b916fd097f3bdfd2022b8845ad8f792aa58258102908082046fd097f3bdfd2022b8845ad8f792aa58251490151715611aa85760801c91614150565b916fe7159475a2c29b7443b29c7fa6e889d98102908082046fe7159475a2c29b7443b29c7fa6e889d91490151715611aa85760801c91614146565b916ff3392b0822b70005940c7a398e4b70f38102908082046ff3392b0822b70005940c7a398e4b70f31490151715611aa85760801c9161413c565b916ff987a7253ac413176f2b074cf7815e548102908082046ff987a7253ac413176f2b074cf7815e541490151715611aa85760801c91614132565b916ffcbe86c7900a88aedcffc83b479aa3a48102908082046ffcbe86c7900a88aedcffc83b479aa3a41490151715611aa85760801c91614128565b916ffe5dee046a99a2a811c461f1969c30538102908082046ffe5dee046a99a2a811c461f1969c30531490151715611aa85760801c9161411e565b916fff2ea16466c96a3843ec78b326b528618102908082046fff2ea16466c96a3843ec78b326b528611490151715611aa85760801c91614115565b916fff973b41fa98c081472e6896dfb254c08102908082046fff973b41fa98c081472e6896dfb254c01490151715611aa85760801c9161410c565b916fffcb9843d60f6159c9db58835c9266448102908082046fffcb9843d60f6159c9db58835c9266441490151715611aa85760801c91614103565b916fffe5caca7e10e4e61c3624eaa0941cd08102908082046fffe5caca7e10e4e61c3624eaa0941cd01490151715611aa85760801c916140fa565b916ffff2e50f5f656932ef12357cf3c7fdcc8102908082046ffff2e50f5f656932ef12357cf3c7fdcc1490151715611aa85760801c916140f1565b916ffff97272373d413259a46990580e213a8102908082046ffff97272373d413259a46990580e213a1490151715611aa85760801c916140e8565b6001600160881b03600160801b6140dd565b16906140b0565b92916040519163095ea7b360e01b5f5260018060a01b031660045260245260205f60448180875af19260015f511484161561468b575b50604052565b3d15903b151516909216915f614685565b60405163095ea7b360e01b5f9081526001600160a01b03909316600452602483905290929160209060448180875af19260015f51148416156146de5750604052565b600184929415166146f7573b15153d151616915f614685565b833d5f823e3d90fd5b92916040519163095ea7b360e01b5f5260018060a01b031660045260245260205f60448180875af19260015f51148416156146de5750604052565b51906001600160801b03821682036114eb5756fe6080604052346103db57610a5d80380380610019816103df565b9283398101906060818303126103db5780516001600160401b0381116103db5782610045918301610404565b60208201519092906001600160401b0381116103db57604091610069918401610404565b9101516001600160a01b038116908190036103db5782516001600160401b0381116102e157600354600181811c911680156103d1575b60208210146102c357601f8111610363575b506020601f821160011461030057819293945f926102f5575b50508160011b915f199060031b1c1916176003555b81516001600160401b0381116102e157600454600181811c911680156102d7575b60208210146102c357601f8111610255575b50602092601f82116001146101f457928192935f926101e9575b50508160011b915f199060031b1c1916176004555b80156101da576002546b033b2e3c9fd0803ce800000081018091116101c657600255805f525f60205260405f206b033b2e3c9fd0803ce800000081540190555f7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60206040516b033b2e3c9fd0803ce80000008152a360405161060790816104568239f35b634e487b7160e01b5f52601160045260245ffd5b63d92e233d60e01b5f5260045ffd5b015190505f8061012c565b601f1982169360045f52805f20915f5b86811061023d5750836001959610610225575b505050811b01600455610141565b01515f1960f88460031b161c191690555f8080610217565b91926020600181928685015181550194019201610204565b818111156101125760045f52601f820160051c7f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b602084106102bb575b81601f9101920160051c03905f5b8281106102ae575050610112565b5f828201556001016102a0565b5f9150610292565b634e487b7160e01b5f52602260045260245ffd5b90607f1690610100565b634e487b7160e01b5f52604160045260245ffd5b015190505f806100ca565b601f1982169060035f52805f20915f5b81811061034b57509583600195969710610333575b505050811b016003556100df565b01515f1960f88460031b161c191690555f8080610325565b9192602060018192868b015181550194019201610310565b818111156100b15760035f52601f820160051c7fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b602084106103c9575b81601f9101920160051c03905f5b8281106103bc5750506100b1565b5f828201556001016103ae565b5f91506103a0565b90607f169061009f565b5f80fd5b6040519190601f01601f191682016001600160401b038111838210176102e157604052565b81601f820112156103db578051906001600160401b0382116102e157610433601f8301601f19166020016103df565b92828452602083830101116103db57815f9260208093018386015e830101529056fe6080806040526004361015610012575f80fd5b5f3560e01c90816306fdde03146103ef57508063095ea7b31461036d57806318160ddd1461035057806323b872dd14610271578063313ce5671461025657806370a082311461021f57806395d89b4114610104578063a9059cbb146100d35763dd62ed3e1461007f575f80fd5b346100cf5760403660031901126100cf576100986104e8565b6100a06104fe565b6001600160a01b039182165f908152600160209081526040808320949093168252928352819020549051908152f35b5f80fd5b346100cf5760403660031901126100cf576100f96100ef6104e8565b6024359033610514565b602060405160018152f35b346100cf575f3660031901126100cf576040515f6004548060011c90600181168015610215575b602083108114610201578285529081156101e55750600114610190575b50819003601f01601f191681019067ffffffffffffffff82118183101761017c57610178829182604052826104be565b0390f35b634e487b7160e01b5f52604160045260245ffd5b905060045f527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b5f905b8282106101cf57506020915082010182610148565b60018160209254838588010152019101906101ba565b90506020925060ff191682840152151560051b82010182610148565b634e487b7160e01b5f52602260045260245ffd5b91607f169161012b565b346100cf5760203660031901126100cf576001600160a01b036102406104e8565b165f525f602052602060405f2054604051908152f35b346100cf575f3660031901126100cf57602060405160128152f35b346100cf5760603660031901126100cf5761028a6104e8565b6102926104fe565b6001600160a01b0382165f818152600160209081526040808320338452909152902054909260443592915f1981106102d0575b506100f99350610514565b83811061033557841561032257331561030f576100f9945f52600160205260405f2060018060a01b0333165f526020528360405f2091039055846102c5565b634a1406b160e11b5f525f60045260245ffd5b63e602df0560e01b5f525f60045260245ffd5b8390637dc7a0d960e11b5f523360045260245260445260645ffd5b346100cf575f3660031901126100cf576020600254604051908152f35b346100cf5760403660031901126100cf576103866104e8565b602435903315610322576001600160a01b031690811561030f57335f52600160205260405f20825f526020528060405f20556040519081527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560203392a3602060405160018152f35b346100cf575f3660031901126100cf575f6003548060011c906001811680156104b4575b602083108114610201578285529081156101e5575060011461045f5750819003601f01601f191681019067ffffffffffffffff82118183101761017c57610178829182604052826104be565b905060035f527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b5f905b82821061049e57506020915082010182610148565b6001816020925483858801015201910190610489565b91607f1691610413565b602060409281835280519182918282860152018484015e5f828201840152601f01601f1916010190565b600435906001600160a01b03821682036100cf57565b602435906001600160a01b03821682036100cf57565b6001600160a01b03169081156105be576001600160a01b03169182156105ab57815f525f60205260405f205481811061059257817fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92602092855f525f84520360405f2055845f525f825260405f20818154019055604051908152a3565b8263391434e360e21b5f5260045260245260445260645ffd5b63ec442f0560e01b5f525f60045260245ffd5b634b637e8f60e11b5f525f60045260245ffdfea2646970667358221220b318165acfbe55659c3d6735810c7c60e1d8c7014522e038d9097e67823c424764736f6c634300082400339b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00a26469706673582212201e08624580d2d85dc76056607ddcc84a6c197a800e52d0cab0d16a44685a375464736f6c63430008240033000000000000000000000000104cf4b0631b88a242fec0161055a7437708c223000000000000000000000000104cf4b0631b88a242fec0161055a7437708c223000000000000000000000000e51960f1b45f1c9fb6d166e6a884f866fc70433b00000000000000000000000051d0e5188afe12d502e29d982d20c190e7816107
0x60a06040526004361015610011575f80fd5b5f5f3560e01c806307a459d41461183d57806307ba8a54146117ca578063150b7a02146116d55780631df80669146115e9578063341bc63914611549578063447e94c6146110d95780635313be2c146110835780635a51fb5514610ff85780635c78744c14610fb3578063689ad6b714610f96578063715018a614610f6e57806371d5f9b814610f49578063791b98bc14610f0457806379ba509714610e845780637c887c5914610e3f5780638025bf9a14610d4f5780638da5cb5b14610d28578063905d3a1614610c205780639413f25c14610864578063941f5d251461083b5780639d7f7e861461081d578063a1ce44241461070a578063ad5c4648146106c5578063cf3cf573146106a7578063d2843a291461061a578063e14a3b7d146105d9578063e30c3978146105b0578063eaf1b8c014610581578063f1fcc00d146104db578063f2fde38b1461046e578063f82e9b9d146103b3578063fa461e33146101ac5763fd40060c14610185575f80fd5b346101a957806003193601126101a957602061ffff60025460a01c16604051908152f35b80fd5b50346101a95760603660031901126101a9576004356024356044356001600160401b0381116103af576101e3903690600401611c0a565b5050604051906101f282611c48565b60018060a01b03600a54169081835260018060a01b03600b54169360208401948552600c5491604085019360018060a01b0384168552606086019060ff8560a01c161515825260ff608088019560a81c161515855260a0600d549701968752330361039c5751156103665786821380159061035c575b6103445750925b5180841161032d575084600a5584600b5584600c5584600d555115155f146102aa57516102a7925033906001600160a01b0316613df0565b80f35b5191516040516323b872dd60e01b85526001600160a01b03918216600452336024526044929092529091169060208360648180865af190600184511482161561030c575b604052156102fa575080f35b635274afe760e01b8252600452602490fd5b90600181151661032457823b15153d151616906102ee565b503d83823e3d90fd5b63b197041f60e01b86526004526024839052604485fd5b630b27ab6560e21b8752600491909152602452604485fd5b5086811215610268565b90868213801590610392575b61037d57509261026f565b630b27ab6560e21b8752600452602452604485fd5b5086811215610372565b63b09dab4b60e01b885233600452602488fd5b8380fd5b50346101a95760403660031901126101a9576103cd611bb4565b6103d5611b9e565b906103df8161341b565b6001600160a01b03908116808452600560205260408420805490939216913383900361045b576001600160a01b031692831561044c5780546001600160a01b031916841790557ff51df37c442fa56bb69ae31113b6baba4153182940542bc965ee52d668e2e7ea8480a480f35b63d92e233d60e01b8552600485fd5b63029d46c560e51b855233600452602485fd5b50346101a95760203660031901126101a957610488611bb4565b6104906133f5565b600180546001600160a01b0319166001600160a01b0392831690811790915582549091167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e227008380a380f35b50346101a95760203660031901126101a9576104f5611c37565b6104fd6133f5565b61ffff81166103e8811161056f57506002805461ffff60a01b60a084811b9190911661ffff60a01b198316179092556040805161ffff9290931c82168352921660208201527f0efaf523f05a0a239157b767d9d711fe5ee48b5e0b1df2e5c627e094ba0baa1a91819081015b0390a180f35b633d8ca59760e21b8352600452602482fd5b50346101a95760203660031901126101a95760206105a56105a0611bb4565b6137e0565b6040519060020b8152f35b50346101a957806003193601126101a9576001546040516001600160a01b039091168152602090f35b50346101a95760203660031901126101a9576020906001600160a01b036105fe611bb4565b16815260088252604060018060a01b0391205416604051908152f35b50346101a95760203660031901126101a9577f8ea1b4b670dd24a028ee2e5ec632ccc09703f357854a12f7daee6b21fbbd0d9861ffff610658611c37565b6106606133f5565b61066981613454565b610569600254918360b01b8160b01b168460b01b1984161760025560405193849360b01c168390929161ffff60209181604085019616845216910152565b50346101a957806003193601126101a9576020600354604051908152f35b50346101a957806003193601126101a9576040517f0000000000000000000000000bd7d308f8e1639fab988df18a8011f41eacad736001600160a01b03168152602090f35b50346101a95760203660031901126101a957610724611bb4565b61072c6133f5565b610734611cce565b61073d8161341b565b6001600160a01b031680825260056020526040822060028101805491929160e081901c60ff16610809576001600160401b038160a01c168042106107f7575060ff60e01b1916600160e01b179055600254600392909201546001600160a01b0392909216917ff00d3483685ace3e730f52760f7c004e774f510116aa6330c49c8a9b6a528ae390602090806107e7575b604051908152a3805f5160206151ad5f395f51905f525d80f35b6107f2818686613df0565b6107cd565b630255930d60e51b8652600452602485fd5b63df59d84760e01b85526004839052602485fd5b50346101a957806003193601126101a95760206040516203f4808152f35b50346101a957806003193601126101a9576002546040516001600160a01b039091168152602090f35b50346101a95760203660031901126101a95761087e611bb4565b610886611cce565b61088f8161341b565b6040519060e082018281106001600160401b03821117610c0c576040908152838352602080840185815284830186815260608601878152608080880189815260a089018a815260c08a018b81526001600160a01b03998a16808d526005808a528a8e20548c168d52600280548d168a52828f52818b528b8f2001548c168852818e528952898d2060010154909a168552898c5260068852888c205461ffff168352898c526007909752878b2054975194999398949793969495949193919290919088016001600160401b03811189821017610bf857604090815290885230602089019081526001600160801b0389830181815260608b01828152845163fc6f786560e01b81529b5160048d015292516001600160a01b0390811660248d01529051821660448c015291511660648a0152889060849082908e907f00000000000000000000000051d0e5188afe12d502e29d982d20c190e7816107165af1968715610bed578a908b98610bad575b509160809a95939161ffff9a999897959360018060a01b038a511686105f14610ba557979a8b9a5b610a31828651168d6135e8565b9a610a4a8c610a448d868a5116906135e8565b9e611cc1565b8452610a568d8c611cc1565b8552805187516001600160a01b03918216918e911681610b94575b505087516001600160a01b031690508d80610b83575b505051885184516001600160a01b039283169290911681610b72575b50505060018060a01b03885116845180610b61575b505060018060a01b039051169660018060a01b039051169460018060a01b03905116935116905191519260405194855260208501526040840152896060840152868b8401528760a08401528860c084015260e08301526101008201527f782d3af70ec15a46782fe1810af1f1a48f8732707c8fc0ff6ae54dad091d68b66101203392a45f5160206151ad5f395f51905f525d604051938452602084015260408301526060820152f35b610b6b9189613df0565b5f80610ab8565b610b7b92613df0565b5f8080610aa3565b610b8d918a613df0565b5f8d610a87565b610b9d92613df0565b5f8c81610a71565b9a8b9a610a24565b9750506040873d604011610be5575b81610bc960409383611c63565b81010312610be15786516020909701519660806109fc565b8980fd5b3d9150610bbc565b6040513d8c823e3d90fd5b634e487b7160e01b8c52604160045260248cfd5b634e487b7160e01b84526041600452602484fd5b50346101a95760403660031901126101a957610c3a611bb4565b610c42611b9e565b610c4a6133f5565b6001600160a01b038216908115610d19576001600160a01b0381169283610cc8575b50508083526008602081815260408086205484875292909152842080546001600160a01b031916841790556001600160a01b0316907fbf78d87ad6d051f3aa7ed800d2b5186ee3ba61451554cc4a0eb076026c78497e8480a480f35b803b15610d0557813b15610cf15790610ce3610ce992613484565b50613527565b505f80610c6c565b636ade937960e11b85526004849052602485fd5b63b8b6ff7760e01b85526004839052602485fd5b63d92e233d60e01b8452600484fd5b50346101a957806003193601126101a957546040516001600160a01b039091168152602090f35b50346101a95760203660031901126101a957604060c091610d6e611bb4565b610d76611c91565b50610d808161341b565b6001600160a01b03168152600560205220604051610d9d81611c48565b60018060a01b03825416918282526001600160401b0360018060a01b036001830154169160208401928352600281015492604085019060018060a01b038516825260a0600360608801948688841c16865260ff60808a019860e01c16151588520154960195865260405196875260018060a01b03905116602087015260018060a01b0390511660408601525116606084015251151560808301525160a0820152f35b50346101a957806003193601126101a9576040517f000000000000000000000000e51960f1b45f1c9fb6d166e6a884f866fc70433b6001600160a01b03168152602090f35b50346101a957806003193601126101a957600154336001600160a01b03821603610ef1576001600160a01b0319908116600155815433918116821783556001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08380a380f35b63118cdaa760e01b825233600452602482fd5b50346101a957806003193601126101a9576040517f00000000000000000000000051d0e5188afe12d502e29d982d20c190e78161076001600160a01b03168152602090f35b50346101a957806003193601126101a957602061ffff60025460b01c16604051908152f35b50346101a957806003193601126101a957600490610f8a6133f5565b6310e83c2760e21b8152fd5b50346101a957806003193601126101a95760206040516113888152f35b50346101a95760203660031901126101a95761ffff6040602092610fd5611bb4565b610fde8161341b565b6001600160a01b0316815260068452205460405191168152f35b5060603660031901126101a9576004356001600160401b03811161107f576040600319823603011261107f579061104e606092611033611b9e565b61103b611bca565b90611044611cce565b3392600401611d03565b91925f5160206151ad5f395f51905f525d604080516001600160a01b03948516815291909316602082015291820152f35b5080fd5b50346101a95760203660031901126101a9577f0fd958ac60db1437ae35514054402c4e597e81881e4b6dd47a6509bd8912142860406004356110c36133f5565b600354908060035582519182526020820152a180f35b5060a03660031901126114eb57600435906001600160401b0382116114eb57604060031983360301126114eb576024356001600160401b03811681036114eb5760603660431901126114eb5761112d611cce565b60443592831561153a576001600160ff1b038411611527576084356001600160a01b038116939092908484036114eb578415611518575f953086146115055761117881600354611c84565b8034106114ef57507f0000000000000000000000000bd7d308f8e1639fab988df18a8011f41eacad73936001600160a01b03851693843b156114eb57604051630d0e30db60e41b81525f81600481878a5af180156114e0576114c6575b50906111e691863392600401611d03565b9491969097896114c2576001600160a01b038916938185146114ae5760a09a6112926001808e1b038b1695838782109e8f6040519061122482611c48565b8b8252336020830152604082018590526060820152600160808201520152600a80546001600160a01b0319166001600160a01b038a161790555b600b80546001600160a01b0319163317905560018060a01b03166bffffffffffffffffffffffff60a01b600c541617600c55565b600c805461ffff60a01b191660a08e901b60ff60a01b1617600160a81b179055600d82905561147d578a15611494576401000276a45b60405192630251596160e31b845260048401528b602484015281604484015260018060a01b0316606483015260a060848301528560a483015260408260c48189895af18015611489578692879161144c575b50600a546001600160a01b0316611438578b1561143157829b5b1561142b5780925b878d13801590611421575b61140c575050808b036113f55750600160ff1b81146113e1578403956064358088106113ca57506113c69798997fce8f7c5c51d5a918a2395410ffb37f8b14040e9b3a5e1acb8f2f6bde49119ff7916113a889604051938493339785611be0565b0390a45f5160206151ad5f395f51905f525d60405194859485611be0565b0390f35b63295b510960e21b86526004526024879052604485fd5b634e487b7160e01b85526011600452602485fd5b63056c8f8760e01b865260045260248a9052604485fd5b630b27ab6560e21b8852600452602452604486fd5b5087841215611347565b8261133c565b809b611334565b6366bda26960e11b87526004869052602487fd5b9250506040823d604011611481575b8161146860409383611c63565b8101031261147d57602082519201515f61131a565b8580fd5b3d915061145b565b6040513d88823e3d90fd5b73fffd8963efd1fc6a506488495d951d5263988d256112c8565b63f3d5e83b60e01b86526004829052602486fd5b8480fd5b6111e6929194505f6114d791611c63565b5f9390916111d5565b6040513d5f823e3d90fd5b5f80fd5b631fa0ca3360e01b5f526004523460245260445ffd5b8563f3d5e83b60e01b5f5260045260245ffd5b63d92e233d60e01b5f5260045ffd5b836317269b6b60e31b5f5260045260245ffd5b636d4d4f6960e11b5f5260045ffd5b346114eb5760403660031901126114eb57611562611bb4565b6024359061ffff821682036114eb577fc133360f709dd155be1c233be5c482044d7d833c2417fc1a09fc11b2fc774f709061159b6133f5565b6115a48161341b565b6115ad83613454565b6001600160a01b03165f81815260066020908152604091829020805461ffff96871661ffff1982168117909255835196168652908501529092a2005b346114eb575f3660031901126114eb576116016133f5565b611609611cce565b4780156116c6576002546001600160a01b0316905f80808084865af13d156116c1573d6001600160401b0381116116ad5760405190611652601f8201601f191660200183611c63565b81525f60203d92013e5b1561169e5760207f465fdd04e8f1c250735b4c77e26b79dc6321f231c1eb2e6d1370f4f3a222627791604051908152a25f5f5160206151ad5f395f51905f525d005b633d2cec6f60e21b5f5260045ffd5b634e487b7160e01b5f52604160045260245ffd5b61165c565b630686827b60e51b5f5260045ffd5b346114eb5760803660031901126114eb576116ee611bb4565b6116f6611b9e565b906064356001600160401b0381116114eb57611716903690600401611c0a565b5050337f00000000000000000000000051d0e5188afe12d502e29d982d20c190e78161076001600160a01b0316148015906117bd575b80156117aa575b8015611798575b61177057604051630a85bd0160e11b8152602090f35b63da0c0e8160e01b5f908152336004526001600160a01b039182166024529116604452606490fd5b506001600160a01b038216151561175a565b506001600160a01b038116301415611753565b5060ff600954161561174c565b346114eb5760203660031901126114eb576117e3611bb4565b6117eb6133f5565b6001600160a01b0316801561151857600280546001600160a01b0319811683179091556001600160a01b03167fb6786947bf0d8255fffa029533e9771866865022ae66c39389f4e35233701ebb5f80a3005b60c03660031901126114eb576004356001600160401b0381116114eb57604060031982360301126114eb57611870611b9e565b611878611bca565b9160603660631901126114eb5761188d611cce565b60643591821561153a576001600160ff1b038311611b8b5760a4356001600160a01b038116949093908585036114eb578515611518575f93308714611b78576118db91843392600401611d03565b9291949095816114eb576001600160a01b03871692888414611b65576040516001600160a01b038881169088168181109b91959193926119629190849060a0908f61192582611c48565b8b82523360208301526040820185905260608201525f60808201520152600a80546001600160a01b0319166001600160a01b038a1617905561125e565b600c805461ffff60a01b191660a08d901b60ff60a01b16179055600d8290556114eb578915611b4b576401000276a45b60405192630251596160e31b845260048401528a602484015281604484015260018060a01b0316606483015260a060848301525f60a483015260408260c4815f895af180156114e0575f925f91611b12575b50600a546001600160a01b0316611aff578a15611af857829a5b15611af25780925b5f8c13801590611ae8575b611ad3575050808a03611abc5750600160ff1b8114611aa8575f0394608435808710611a9157506113c69697987fce8f7c5c51d5a918a2395410ffb37f8b14040e9b3a5e1acb8f2f6bde49119ff791611a7288604051938493339785611be0565b0390a45f5f5160206151ad5f395f51905f525d60405194859485611be0565b869063295b510960e21b5f5260045260245260445ffd5b634e487b7160e01b5f52601160045260245ffd5b899063056c8f8760e01b5f5260045260245260445ffd5b630b27ab6560e21b5f5260045260245260445ffd5b505f841215611a11565b82611a06565b809a6119fe565b856366bda26960e11b5f5260045260245ffd5b9250506040823d604011611b43575b81611b2e60409383611c63565b810103126114eb57602082519201518b6119e4565b3d9150611b21565b73fffd8963efd1fc6a506488495d951d5263988d25611992565b8863f3d5e83b60e01b5f5260045260245ffd5b8663f3d5e83b60e01b5f5260045260245ffd5b826317269b6b60e31b5f5260045260245ffd5b602435906001600160a01b03821682036114eb57565b600435906001600160a01b03821682036114eb57565b604435906001600160401b03821682036114eb57565b6001600160a01b039182168152911660208201526040810191909152606081019190915260800190565b9181601f840112156114eb578235916001600160401b0383116114eb57602083818601950101116114eb57565b6004359061ffff821682036114eb57565b60c081019081106001600160401b038211176116ad57604052565b90601f801991011681019081106001600160401b038211176116ad57604052565b91908201809211611aa857565b60405190611c9e82611c48565b5f60a0838281528260208201528260408201528260608201528260808201520152565b91908203918211611aa857565b5f5160206151ad5f395f51905f525c611cf45760015f5160206151ad5f395f51905f525d565b633ee5aeb560e01b5f5260045ffd5b92939190935f6080526040519461014086018681106001600160401b038211176116ad576040525f86525f60408701525f60608701525f60c08701525f60e08701525f6101008701525f61012087015260018060a01b03168060208701526002549061ffff808360a01c16928360808a015260b01c1660a08801526003548034106133df57506001600160401b03841642116133c357801561151857803b156133b1575f818152600860205260409020546001600160a01b03161561339f5750611dcd8580613e71565b90501561339057611de16020860186613e71565b905015613381576040611df48680613e71565b905011613363576010611e0a6020870187613e71565b90501161334257611e1a9061366c565b80676765c793fa10079d601b1b03676765c793fa10079d601b1b8111611aa85760e087015260c08601526020850151611e5b906001600160a01b03166137e0565b60020b61012086015260018060a01b036020860151165f90610a5d604051611e866020830182611c63565b81815261475090611ecf611f0e8a6020611eba611edd8287019389898639611eae8180613e71565b93909185810190613e71565b97909160405198899387850196309388613ec3565b03601f198101875286611c63565b60405194859383850197518091895e840190838201905f8252519283915e01015f815203601f198101835282611c63565b51902091604051602081019060608252611f8781611f648d611f52611f47611f368380613efe565b6040608088015260c0870191613ea3565b916020810190613efe565b848303607f190160a086015290613ea3565b8860408301526001600160401b038c16606083015203601f198101835282611c63565b51902092600454935f945b60088610613189575b5050506001600160a01b038516939250508215905061317a57604051630b4c774160e11b81526001600160a01b039384166004820152908316602482015261271060448201527f000000000000000000000000e51960f1b45f1c9fb6d166e6a884f866fc70433b90921691602081606481865afa9081156114e0575f91613140575b506001600160a01b03168061312a57508087526020808801516001600160a01b0390811680841060608b018190526101208b015160405163a167129560e01b8152938616600485015260248401839052612710604485015260020b949093909290816064815f8a5af19081156114e0575f916130f0575b50604051630b4c774160e11b81526001600160a01b03848116600483015283166024820152612710604482015295602090879060649082905afa9586156114e0575f966130b4575b506001600160a01b031694851580156130a1575b6130835750821561307c57815b83156130745750905b604051630dfe168160e01b815290602082600481895afa9182156114e0575f92613038575b506001600160a01b0391821691161480159190612fc0575b508015612f49575b8015612edd575b612eca57612165919015612ebc57614092565b813b156114eb5760405163f637731d60e01b81526001600160a01b0390911660048201819052905f8160248183875af180156114e057612ea8575b50604051633850c7bd60e01b815260e081600481865afa908115612a415760805191612e16575b506001600160a01b031690808203612dfd5750506040860152845160e08601516001600160a01b0391821695916122229082907f00000000000000000000000051d0e5188afe12d502e29d982d20c190e7816107168861464f565b15612d58575b5085516020870151604088015160608901516101208a015160e08b01516001600160a01b039485169895851695909460029290920b93921515926001600160401b039216612274611c91565b998415612d525787905b8515612d4a57915b604051986122938a611c48565b895260208901526001600160a01b039081166040890152166060870152608086018390521660a085015215612d2f576122cd6111546137b8565b905b8160020b60408801528060020b602088015260018060a01b036040850151169160018060a01b036060860151169060808601511515926001600160401b0360a08801511693600160ff19600954161760095560805150805f14612d265786905b15612d1f57608051905b60405196876101608101106001600160401b036101608a011117612d0757610160880160405287526020870194855260408701936127108552606088019360020b8452608088019060020b815260a0880191825260c0880192835260e0880193608051855262ffffff6101008a019660805188526101208b0198308a526101408c019a8b526040519b634418b22b60e11b8d5260018060a01b0390511660048d015260018060a01b0390511660248c0152511660448a01525160020b60648901525160020b60848801525160a48701525160c48601525160e48501525161010484015260018060a01b039051166101248301525161014482015260808161016481835160018060a01b037f00000000000000000000000051d0e5188afe12d502e29d982d20c190e7816107165af18015612a415760805190819081908190612cac575b6009805460ff191690556001600160801b0384811660a08c0152908a5260608a0186905260808701519394509215612ca657805b60808a81019190915286015115612c9e5750915b1615612c8b5780612c7557506080850151818111612c5c575050835160018060a01b0360408301511660018060a01b0360608401511690602087015160020b90604088015160020b6001600160801b0360a08a015116926040519063133f757160e31b82528660048301526101808260248160018060a01b037f00000000000000000000000051d0e5188afe12d502e29d982d20c190e7816107165afa938415612a415760805196879586948593849392849290612b92575b506040516331a9108f60e11b8152600481018d90526020816024817f00000000000000000000000051d0e5188afe12d502e29d982d20c190e78161076001600160a01b03165afa908115612a415760805191612b58575b506001600160a01b0316301480159b90612b44575b50508915612b30575b50508715612b1e575b508615612b10575b50508415612b02575b50508215612aee575b5050612ad8575083519060018060a01b0390511660805152600760205260406080512055825194608084015161010088015261267c60805160018060a01b037f00000000000000000000000051d0e5188afe12d502e29d982d20c190e7816107168361464f565b15612a4e575b610100870151676765c793fa10079d601b1b03676765c793fa10079d601b1b81116129d6576020602492604051938480926370a0823160e01b82523060048301525afa918215612a415760805192612a07575b508082036129ee57505085516020870151604088015160c089015160a08a015161ffff16936001600160a01b0390811693426001600160401b039081166301e1338001949183169392919091169084116129d6576003926040519461273986611c48565b6001600160a01b038a81168752602080880193845260408089019586526001600160401b03939093166060890190815260808051818b0190815260a08b8101998a5282518d90526005855282518781209c518d546001600160a01b0319908116918916919091178e55985160018e018054909a1690881617909855975160028c018054945192516001600160e81b03199095169190961617971b67ffffffffffffffff60a01b169690961790151560e01b60ff60e01b1617909155935194909501939093559390915260069052905120805461ffff191661ffff929092169190911790556004545f1981146129d65760010160045560018060a01b03865116907feb75611adf556ff88e68373468e6f6459cdc23d2032f4b2d8e83207d84dacda560018060a01b036040890151169361ffff60808a015116926101208a015160020b91856080515260056020526128b86040608051209260018060a01b03600185015416936129166128ab8380613e71565b9490936020810190613e71565b6129086001600160401b036002600387015496015460a01c16958d60805152600660205261ffff6040608051205416976040519b8c9b8c5260208c015261010060408c01526101008b0191613ea3565b9188830360608a0152613ea3565b608086019890985260a085015260c084015260e08301526001600160a01b0316930390a460018060a01b0384511660018060a01b03604086015116907f4e9374aa2e904229d2cc95c70fe50a384897733e7225488a46bd86b12cf3698660a0845194602081015160020b90604081015160020b9060608101516001600160801b0385608084015193015116926040519485526020850152604084015260608301526080820152a482516040909301516001600160a01b0393841693169190565b634e487b7160e01b6080515260116004526024608051fd5b6303cbae4560e11b608051526004526024526044608051fd5b9091506020813d602011612a39575b81612a2360209383611c63565b81010312612a335751905f6126d5565b60805180fd5b3d9150612a16565b6040513d608051823e3d90fd5b612a817f00000000000000000000000051d0e5188afe12d502e29d982d20c190e78161076001600160a01b03168261469c565b15612ac257608051612abd907f00000000000000000000000051d0e5188afe12d502e29d982d20c190e78161076001600160a01b031683614700565b612682575b635274afe760e01b608051526004526024608051fd5b63f3b1727f60e01b608051526004526024608051fd5b6001600160801b0316141590505f80612615565b60020b141592505f8061260c565b60020b141594505f80612603565b62ffffff16612710141596505f6125fb565b6001600160a01b0316141597505f806125f2565b6001600160a01b0316141599505f806125e9565b90506020813d602011612b8a575b81612b7360209383611c63565b81010312612a3357612b8490613f2f565b5f6125d4565b3d9150612b66565b965097505097505050610180823d8211612c54575b81612bb56101809383611c63565b81010312612a335781516bffffffffffffffffffffffff811603612a3357612bdf60208301613f2f565b50612bec60408301613f2f565b612bf860608401613f2f565b96612c0560808501613f43565b90612c1260a08601613f53565b91612c1f60c08701613f53565b93612c47610160612c3260e08a0161473b565b98612c40610140820161473b565b500161473b565b509990929395975f61257d565b3d9150612ba7565b63f7bc591560e01b608051526004526024526044608051fd5b63204ad11760e21b608051526004526024608051fd5b630200e8a960e31b608051526004608051fd5b9050916124c4565b816124b0565b505050506080813d608011612cff575b81612cc960809383611c63565b81010312612a33576001600160801b038151612ce76020840161473b565b9060606040850151940151909193909184935061247c565b3d9150612cbc565b634e487b7160e01b6080515260416004526024608051fd5b8690612339565b6080519061232f565b612d44612d3e611153196137b8565b916137cd565b906122cf565b508791612286565b8061227e565b612d8b7f00000000000000000000000051d0e5188afe12d502e29d982d20c190e78161076001600160a01b03168761469c565b15612de657612dc4907f00000000000000000000000051d0e5188afe12d502e29d982d20c190e78161076001600160a01b031687614700565b15612dcf575f612228565b84635274afe760e01b608051526004526024608051fd5b85635274afe760e01b608051526004526024608051fd5b630175991f60e01b608051526004526024526044608051fd5b905060e0813d60e011612ea0575b81612e3160e09383611c63565b81010312612a33578051906001600160a01b0382168203612a335780612e5b602060c09301613f53565b50612e6860408201613f61565b50612e7560608201613f61565b50612e8260808201613f61565b50612e8f60a08201613476565b50015180151503612a33575f6121c7565b3d9150612e24565b5f612eb291611c63565b5f6080525f6121a0565b612ec5906137cd565b614092565b826379fff0fd60e01b5f5260045260245ffd5b506040516334324e9f60e21b8152602081600481875afa80156114e0575f90612f0f575b60c8915060020b1415612152565b506020813d602011612f41575b81612f2960209383611c63565b810103126114eb57612f3c60c891613f53565b612f01565b3d9150612f1c565b5060405163ddca3f4360e01b8152602081600481875afa9081156114e0575f91612f7e575b5062ffffff16612710141561214b565b90506020813d602011612fb8575b81612f9960209383611c63565b810103126114eb5762ffffff612fb161271092613f43565b9150612f6e565b3d9150612f8c565b60405163d21220a760e01b81529150602082600481885afa9182156114e0575f92612ffc575b506001600160a01b03918216911614155f612143565b9091506020813d602011613030575b8161301860209383611c63565b810103126114eb5761302990613f2f565b905f612fe6565b3d915061300b565b9091506020813d60201161306c575b8161305460209383611c63565b810103126114eb5761306590613f2f565b905f61212b565b3d9150613047565b905090612106565b80916120fd565b856326a1a1eb60e21b5f5260045260018060a01b031660245260445ffd5b506001600160a01b0381168614156120f0565b9095506020813d6020116130e8575b816130d060209383611c63565b810103126114eb576130e190613f2f565b945f6120dc565b3d91506130c3565b90506020813d602011613122575b8161310b60209383611c63565b810103126114eb5761311c90613f2f565b5f612094565b3d91506130fe565b90633f808ca960e01b5f5260045260245260445ffd5b90506020813d602011613172575b8161315b60209383611c63565b810103126114eb5761316c90613f2f565b5f61201d565b3d915061314e565b63bd61005f60e01b5f5260045ffd5b604097939495969751602081019060018060a01b038b1682528260408201528360608201524460808201524360a08201528860c082015260c081526131cf60e082611c63565b51902096600b6040518560408201528960208201523081520160ff8153605590206001600160a01b0316803b158015918b91613284575b505061327357505050505061321b8880613e71565b929061322a60208b018b613e71565b9060405195858701938785106001600160401b038611176116ad5787966132549688393094613ec3565b03905ff580156114e0576001600160a01b0316905f8080808080611f9b565b939796506001909301949392611f92565b604051630b4c774160e11b81526001600160a01b0391821660048201529116602482015261271060448201529050602081806064810103817f000000000000000000000000e51960f1b45f1c9fb6d166e6a884f866fc70433b6001600160a01b03165afa9081156114e0575f91613309575b506001600160a01b03161515895f613206565b90506020813d821161333a575b8161332360209383611c63565b810103126114eb5761333490613f2f565b5f6132f6565b3d9150613316565b61334f6020860186613e71565b905063eb6409bb60e01b5f5260045260245ffd5b61336d8580613e71565b9050630585ca3d60e21b5f5260045260245ffd5b630cc613fb60e11b5f5260045ffd5b632ef1310560e01b5f5260045ffd5b631bdf902f60e01b5f5260045260245ffd5b63b8b6ff7760e01b5f5260045260245ffd5b6001600160401b038463044d7a6f60e41b5f521660045260245ffd5b6364ab6ed160e11b5f526004523460245260445ffd5b5f546001600160a01b0316330361340857565b63118cdaa760e01b5f523360045260245ffd5b6001600160a01b039081165f81815260056020526040902060020154909116156134425750565b6340d1d8df60e11b5f5260045260245ffd5b61ffff1661271081116134645750565b632b0caee160e01b5f5260045260245ffd5b519060ff821682036114eb57565b60405163313ce56760e01b81526001600160a01b03919091169190602081600481865afa5f91816134eb575b506134c8578263b8b6ff7760e01b5f5260045260245ffd5b915060ff8216601281116134d95750565b630655f72160e51b5f5260045260245ffd5b9091506020813d60201161351f575b8161350760209383611c63565b810103126114eb5761351890613476565b905f6134b0565b3d91506134fa565b60405163313ce56760e01b81526001600160a01b03919091169190602081600481865afa5f918161358e575b5061356b5782636ade937960e11b5f5260045260245ffd5b915060ff82166012811161357c5750565b63ec18ce9b60e01b5f5260045260245ffd5b9091506020813d6020116135c2575b816135aa60209383611c63565b810103126114eb576135bb90613476565b905f613553565b3d915061359d565b81156135d4570490565b634e487b7160e01b5f52601260045260245ffd5b9091905f905f19848209908481029283808410930392808403931461365f5782612710111561364d57507fbc01a36e2eb1c432ca57a786c226809d495182a9930be0ded288ce703afb7e919394612710910990828211900360fc1b910360041c170290565b634e487b71905260116020526024601cfd5b5050506127109192500490565b905f5f1983676765c793fa10079d601b1b0983676765c793fa10079d601b1b02918280831092039180830392146136ee5781612710111561364d57506127107fbc01a36e2eb1c432ca57a786c226809d495182a9930be0ded288ce703afb7e919394676765c793fa10079d601b1b0990828211900360fc1b910360041c170290565b505061271090049150565b5f19600160c01b8209918160c01b91828085109403938085039414613792578382111561377a578190600160c01b9009815f0382168092046002816003021880820260020302808202600203028082026002030280820260020302808202600203028091026002030293600183805f03040190848311900302920304170290565b50634e487b715f52156003026011186020526024601cfd5b509061379e92506135ca565b90565b519069ffffffffffffffffffff821682036114eb57565b60c89060020b02908160020b918203611aa857565b60020b627fffff198114611aa8575f0390565b6001600160a01b038082165f81815260086020526040902054909116929190831561339f575061380f90613484565b61381883613527565b604051633fabe5a360e21b81529160a083600481885afa5f5f90825f965f94613d96575b506138545787636ade937960e11b5f5260045260245ffd5b95965094929391925f861315613d835782158015613d7a575b8015613d59575b613d315750506203f4806138888242611cc1565b11613d145750744f3a68dbc8f03f243baf513267aa9a3ee524f8e0288311613d015760ff80911691160161ffff8111611aa85761ffff16604d8111611aa857600a0a806113880290611388820403611aa857676765c793fa10079d601b1b820291808304676765c793fa10079d601b1b1490151715611aa8576139139161390e916136f9565b613f70565b6001600160a01b03811691906401000276a3831080159081613ce3575b613cd05780613cb3575b156114eb57640100000000600160c01b039060201b16806001600160801b03811160071b90811c6001600160401b03811160061b90811c63ffffffff811160051b90811c61ffff811160041b90811c9060ff821160031b91821c92600f841160021b93841c94600160038711811b96871c1196171717171717179060808210155f14613ca157607e198201828111611aa8571c5b607f198201918213600116611aa857800280607f1c8160ff1c1c800280607f1c8160ff1c1c800280607f1c8160ff1c1c800280607f1c8160ff1c1c800280607f1c8160ff1c1c800280607f1c8160ff1c1c80029081607f1c8260ff1c1c80029283607f1c8460ff1c1c80029485607f1c8660ff1c1c80029687607f1c8860ff1c1c80029889607f1c8a60ff1c1c80029a8b607f1c8c60ff1c1c80029c8d80607f1c9060ff1c1c800260cd1c6604000000000000169d60cc1c6608000000000000169c60cb1c6610000000000000169b60ca1c6620000000000000169a60c91c6640000000000000169960c81c6680000000000000169860c71c670100000000000000169760c61c670200000000000000169660c51c670400000000000000169560c41c670800000000000000169460c31c671000000000000000169360c21c672000000000000000169260c11c674000000000000000169160c01c678000000000000000169060401b1717171717171717171717171717693627a301d71055774c85810290808205693627a301d71055774c851490151715611aa8576f028f6481ab7f045a5af012a19d003aa9198101600182821316611aa85760801d60020b906fdb2df09e81959a81455e260799a0632f8101905f6fdb2df09e81959a81455e260799a0632f83129112908015821691151617611aa85760801d60020b818103613c795750915b613be560c88460020b056137b8565b9260020b5f81129081613c69575b50613c49575b613c05611153196137b8565b60020b8360020b908112908115613c31575b50613c1f5750565b63b534457f60e01b5f5260045260245ffd5b9050613c3e6111546137b8565b60020b13155f613c17565b9160020b60c71901627fffff198112627fffff821317611aa85791613bf9565b60c891500760020b15155f613bf3565b90836001600160a01b03613c8c84614092565b1611613c9a57505b91613bd6565b9050613c94565b81607f03607f8111611aa8571b6139ce565b5073fffd8963efd1fc6a506488495d951d5263988d26831061393a565b8363b534457f60e01b5f5260045260245ffd5b5073fffd8963efd1fc6a506488495d951d5263988d26841015613930565b82632abc708d60e01b5f5260045260245ffd5b6366c3172360e01b5f52600452426024526203f48060445260645ffd5b9069ffffffffffffffffffff809263156dd37960e11b5f52166004521660245260445260645ffd5b5069ffffffffffffffffffff811669ffffffffffffffffffff831610613874565b5042831161386d565b85632abc708d60e01b5f5260045260245ffd5b96509250505060a0843d60a011613de8575b81613db560a09383611c63565b810103126114eb57613dc6846137a1565b936020810151613ddd6080606084015193016137a1565b95909195925f61383c565b3d9150613da8565b916040519163a9059cbb60e01b5f5260018060a01b031660045260245260205f60448180865af19060015f5114821615613e50575b60405215613e305750565b635274afe760e01b5f9081526001600160a01b0391909116600452602490fd5b906001811516613e6857823b15153d15161690613e25565b503d5f823e3d90fd5b903590601e19813603018212156114eb57018035906001600160401b0382116114eb576020019181360383136114eb57565b908060209392818452848401375f828201840152601f01601f1916010190565b93613ee060409492613eee94989798606088526060880191613ea3565b918583036020870152613ea3565b6001600160a01b03909416910152565b9035601e19823603018112156114eb5701602081359101916001600160401b0382116114eb5781360383136114eb57565b51906001600160a01b03821682036114eb57565b519062ffffff821682036114eb57565b51908160020b82036114eb57565b519061ffff821682036114eb57565b600181111561379e57806001600160801b821015614081575b600482600160401b614033941015614074575b640100000000811015614067575b6201000081101561405a575b61010081101561404e575b6010811015614042575b101561403a575b60030260011c613fe281846135ca565b0160011c613ff081846135ca565b0160011c613ffe81846135ca565b0160011c61400c81846135ca565b0160011c61401a81846135ca565b0160011c61402881846135ca565b0160011c80926135ca565b8111900390565b60011b613fd2565b811c9160021b91613fcb565b60081c91811b91613fc1565b60101c9160081b91613fb6565b60201c9160101b91613faa565b60401c9160201b91613f9c565b5050608081901c600160401b613f89565b62ffffff8160020b915f83125f14614648576140ad906137cd565b16905b620d89e882116114eb576001821615614636576001600160881b036ffffcb933bd6fad37aa2d162d1a5940015b1691600281166145fb575b600481166145c0575b60088116614585575b6010811661454a575b6020811661450f575b604081166144d4575b60808116614499575b610100811661445e575b6102008116614423575b61040081166143e8575b61080081166143ad575b6110008116614372575b6120008116614337575b61400081166142fc575b61800081166142c1575b620100008116614286575b62020000811661424d575b620400008116614216575b62080000166141e3575b5f126141d5575b63ffffffff81166141ca576141c65f915b6001600160a01b039260ff169060201c611c84565b1690565b6141c66001916141b1565b80156135d4575f19046141a0565b906b048a170391f7dc42444e8fa28102908082046b048a170391f7dc42444e8fa21490151715611aa85760801c90614199565b916d2216e584f5fa1ea926041bedfe988102908082046d2216e584f5fa1ea926041bedfe981490151715611aa85760801c9161418f565b916e5d6af8dedb81196699c329225ee6048102908082046e5d6af8dedb81196699c329225ee6041490151715611aa85760801c91614184565b916f09aa508b5b7a84e1c677de54f3e99bc98102908082046f09aa508b5b7a84e1c677de54f3e99bc91490151715611aa85760801c91614179565b916f31be135f97d08fd981231505542fcfa68102908082046f31be135f97d08fd981231505542fcfa61490151715611aa85760801c9161416e565b916f70d869a156d2a1b890bb3df62baf32f78102908082046f70d869a156d2a1b890bb3df62baf32f71490151715611aa85760801c91614164565b916fa9f746462d870fdf8a65dc1f90e061e58102908082046fa9f746462d870fdf8a65dc1f90e061e51490151715611aa85760801c9161415a565b916fd097f3bdfd2022b8845ad8f792aa58258102908082046fd097f3bdfd2022b8845ad8f792aa58251490151715611aa85760801c91614150565b916fe7159475a2c29b7443b29c7fa6e889d98102908082046fe7159475a2c29b7443b29c7fa6e889d91490151715611aa85760801c91614146565b916ff3392b0822b70005940c7a398e4b70f38102908082046ff3392b0822b70005940c7a398e4b70f31490151715611aa85760801c9161413c565b916ff987a7253ac413176f2b074cf7815e548102908082046ff987a7253ac413176f2b074cf7815e541490151715611aa85760801c91614132565b916ffcbe86c7900a88aedcffc83b479aa3a48102908082046ffcbe86c7900a88aedcffc83b479aa3a41490151715611aa85760801c91614128565b916ffe5dee046a99a2a811c461f1969c30538102908082046ffe5dee046a99a2a811c461f1969c30531490151715611aa85760801c9161411e565b916fff2ea16466c96a3843ec78b326b528618102908082046fff2ea16466c96a3843ec78b326b528611490151715611aa85760801c91614115565b916fff973b41fa98c081472e6896dfb254c08102908082046fff973b41fa98c081472e6896dfb254c01490151715611aa85760801c9161410c565b916fffcb9843d60f6159c9db58835c9266448102908082046fffcb9843d60f6159c9db58835c9266441490151715611aa85760801c91614103565b916fffe5caca7e10e4e61c3624eaa0941cd08102908082046fffe5caca7e10e4e61c3624eaa0941cd01490151715611aa85760801c916140fa565b916ffff2e50f5f656932ef12357cf3c7fdcc8102908082046ffff2e50f5f656932ef12357cf3c7fdcc1490151715611aa85760801c916140f1565b916ffff97272373d413259a46990580e213a8102908082046ffff97272373d413259a46990580e213a1490151715611aa85760801c916140e8565b6001600160881b03600160801b6140dd565b16906140b0565b92916040519163095ea7b360e01b5f5260018060a01b031660045260245260205f60448180875af19260015f511484161561468b575b50604052565b3d15903b151516909216915f614685565b60405163095ea7b360e01b5f9081526001600160a01b03909316600452602483905290929160209060448180875af19260015f51148416156146de5750604052565b600184929415166146f7573b15153d151616915f614685565b833d5f823e3d90fd5b92916040519163095ea7b360e01b5f5260018060a01b031660045260245260205f60448180875af19260015f51148416156146de5750604052565b51906001600160801b03821682036114eb5756fe6080604052346103db57610a5d80380380610019816103df565b9283398101906060818303126103db5780516001600160401b0381116103db5782610045918301610404565b60208201519092906001600160401b0381116103db57604091610069918401610404565b9101516001600160a01b038116908190036103db5782516001600160401b0381116102e157600354600181811c911680156103d1575b60208210146102c357601f8111610363575b506020601f821160011461030057819293945f926102f5575b50508160011b915f199060031b1c1916176003555b81516001600160401b0381116102e157600454600181811c911680156102d7575b60208210146102c357601f8111610255575b50602092601f82116001146101f457928192935f926101e9575b50508160011b915f199060031b1c1916176004555b80156101da576002546b033b2e3c9fd0803ce800000081018091116101c657600255805f525f60205260405f206b033b2e3c9fd0803ce800000081540190555f7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60206040516b033b2e3c9fd0803ce80000008152a360405161060790816104568239f35b634e487b7160e01b5f52601160045260245ffd5b63d92e233d60e01b5f5260045ffd5b015190505f8061012c565b601f1982169360045f52805f20915f5b86811061023d5750836001959610610225575b505050811b01600455610141565b01515f1960f88460031b161c191690555f8080610217565b91926020600181928685015181550194019201610204565b818111156101125760045f52601f820160051c7f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b602084106102bb575b81601f9101920160051c03905f5b8281106102ae575050610112565b5f828201556001016102a0565b5f9150610292565b634e487b7160e01b5f52602260045260245ffd5b90607f1690610100565b634e487b7160e01b5f52604160045260245ffd5b015190505f806100ca565b601f1982169060035f52805f20915f5b81811061034b57509583600195969710610333575b505050811b016003556100df565b01515f1960f88460031b161c191690555f8080610325565b9192602060018192868b015181550194019201610310565b818111156100b15760035f52601f820160051c7fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b602084106103c9575b81601f9101920160051c03905f5b8281106103bc5750506100b1565b5f828201556001016103ae565b5f91506103a0565b90607f169061009f565b5f80fd5b6040519190601f01601f191682016001600160401b038111838210176102e157604052565b81601f820112156103db578051906001600160401b0382116102e157610433601f8301601f19166020016103df565b92828452602083830101116103db57815f9260208093018386015e830101529056fe6080806040526004361015610012575f80fd5b5f3560e01c90816306fdde03146103ef57508063095ea7b31461036d57806318160ddd1461035057806323b872dd14610271578063313ce5671461025657806370a082311461021f57806395d89b4114610104578063a9059cbb146100d35763dd62ed3e1461007f575f80fd5b346100cf5760403660031901126100cf576100986104e8565b6100a06104fe565b6001600160a01b039182165f908152600160209081526040808320949093168252928352819020549051908152f35b5f80fd5b346100cf5760403660031901126100cf576100f96100ef6104e8565b6024359033610514565b602060405160018152f35b346100cf575f3660031901126100cf576040515f6004548060011c90600181168015610215575b602083108114610201578285529081156101e55750600114610190575b50819003601f01601f191681019067ffffffffffffffff82118183101761017c57610178829182604052826104be565b0390f35b634e487b7160e01b5f52604160045260245ffd5b905060045f527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b5f905b8282106101cf57506020915082010182610148565b60018160209254838588010152019101906101ba565b90506020925060ff191682840152151560051b82010182610148565b634e487b7160e01b5f52602260045260245ffd5b91607f169161012b565b346100cf5760203660031901126100cf576001600160a01b036102406104e8565b165f525f602052602060405f2054604051908152f35b346100cf575f3660031901126100cf57602060405160128152f35b346100cf5760603660031901126100cf5761028a6104e8565b6102926104fe565b6001600160a01b0382165f818152600160209081526040808320338452909152902054909260443592915f1981106102d0575b506100f99350610514565b83811061033557841561032257331561030f576100f9945f52600160205260405f2060018060a01b0333165f526020528360405f2091039055846102c5565b634a1406b160e11b5f525f60045260245ffd5b63e602df0560e01b5f525f60045260245ffd5b8390637dc7a0d960e11b5f523360045260245260445260645ffd5b346100cf575f3660031901126100cf576020600254604051908152f35b346100cf5760403660031901126100cf576103866104e8565b602435903315610322576001600160a01b031690811561030f57335f52600160205260405f20825f526020528060405f20556040519081527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560203392a3602060405160018152f35b346100cf575f3660031901126100cf575f6003548060011c906001811680156104b4575b602083108114610201578285529081156101e5575060011461045f5750819003601f01601f191681019067ffffffffffffffff82118183101761017c57610178829182604052826104be565b905060035f527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b5f905b82821061049e57506020915082010182610148565b6001816020925483858801015201910190610489565b91607f1691610413565b602060409281835280519182918282860152018484015e5f828201840152601f01601f1916010190565b600435906001600160a01b03821682036100cf57565b602435906001600160a01b03821682036100cf57565b6001600160a01b03169081156105be576001600160a01b03169182156105ab57815f525f60205260405f205481811061059257817fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92602092855f525f84520360405f2055845f525f825260405f20818154019055604051908152a3565b8263391434e360e21b5f5260045260245260445260645ffd5b63ec442f0560e01b5f525f60045260245ffd5b634b637e8f60e11b5f525f60045260245ffdfea2646970667358221220b318165acfbe55659c3d6735810c7c60e1d8c7014522e038d9097e67823c424764736f6c634300082400339b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00a26469706673582212201e08624580d2d85dc76056607ddcc84a6c197a800e52d0cab0d16a44685a375464736f6c63430008240033
| Token | Symbol | Balance | Price | Value |
|---|---|---|---|---|
| power to the people (PEOPLE) | PEOPLE | 30,000,000.000000 | — | — |
| Make it Rain (CASH) | CASH | 30,000,000.000000 | — | — |
| Hashi (HASHI) | HASHI | 30,000,000.000000 | — | — |
| Robinhoo (ROBINHOOD) | ROBINHOOD | 30,000,000.000000 | — | — |
| Swole Doge (SWOLE) | SWOLE | 30,000,000.000000 | — | — |
| NEW MONEY CASH (NMP) | NMP | 30,000,000.000000 | — | — |
| Andy (ANDY) | ANDY | 30,000,000.000000 | — | — |
| LEO XIV (POPECOIN) | POPECOIN | 30,000,000.000000 | — | — |
| HypernativeLabs (HYPER) | HYPER | 30,000,000.000000 | — | — |
| 4663 (4663) | 4663 | 30,000,000.000000 | — | — |
| Vampingo (VAMPINGO) | VAMPINGO | 30,000,000.000000 | — | — |
| SOY (SOY) | SOY | 30,000,000.000000 | — | — |
| NeoCallss (NEO) | NEO | 30,000,000.000000 | — | — |
| STRATEGY PROTOCOL (SRT) | SRT | 30,000,000.000000 | — | — |
| PUURSHI (PUURSHI) | PUURSHI | 30,000,000.000000 | — | — |
| SUSDOG (SUSDOG) | SUSDOG | 30,000,000.000000 | — | — |
| Zukin (ZUKIN) | ZUKIN | 30,000,000.000000 | — | — |
| Put A Cat On It (CATONIT) | CATONIT | 30,000,000.000000 | — | — |
| Pipedog (PIPEDOG) | PIPEDOG | 30,000,000.000000 | — | — |
| Nyan cat (NYAN CAT) | NYAN CAT | 30,000,000.000000 | — | — |
| usdgshi (USDGSHI) | USDGSHI | 30,000,000.000000 | — | — |
| Let’s squash the frog (SQUASH) | SQUASH | 30,000,000.000000 | — | — |
| Sushi VS Uniswap (SVU) | SVU | 30,000,000.000000 | — | — |
| Sushi Macho (MACHO) | MACHO | 30,000,000.000000 | — | — |
| The Double Eagle (EAGLECOIN) | EAGLECOIN | 30,000,000.000000 | — | — |
| PoolsDuck (DUCK) | DUCK | 30,000,000.000000 | — | — |
| PUNCH CAT (PUNCHCAT) | PUNCHCAT | 30,000,000.000000 | — | — |
| everyone loves sushi (SUSHI) | SUSHI | 30,000,000.000000 | — | — |
| peg (PEG) | PEG | 30,000,000.000000 | — | — |
| glass (GLASS) | GLASS | 30,000,000.000000 | — | — |
| $1 Sushi ($1) | $1 | 30,000,000.000000 | — | — |
| Sushi Coin Official (SUSHI) | SUSHI | 30,000,000.000000 | — | — |
| sushisad (SUSHISAD) | SUSHISAD | 30,000,000.000000 | — | — |
| 🍣 SUSHIFLAMINGO🦩 (🦩🍣) | 🦩🍣 | 30,000,000.000000 | — | — |
| sdukcoin (SDUK) | SDUK | 30,000,000.000000 | — | — |
| SushiXBT (SUSHIXBT) | SUSHIXBT | 30,000,000.000000 | — | — |
| Agameownon (AGAMEOWNON) | AGAMEOWNON | 30,000,000.000000 | — | — |
| Nigiri (NIGIRI) | NIGIRI | 30,000,000.000000 | — | — |
| Sushimi (SUSHIMI) | SUSHIMI | 30,000,000.000000 | — | — |
| Meowshi (MEOWSHI) | MEOWSHI | 30,000,000.000000 | — | — |
| Artificial Inu (AI) | AI | 30,000,000.000000 | — | — |
| Mariana Minerals (MARIANA) | MARIANA | 30,000,000.000000 | — | — |
| Vampire (VAMPIRE) | VAMPIRE | 30,000,000.000000 | — | — |
| Uniswap's CAT (UNICAT) | UNICAT | 30,000,000.000000 | — | — |
| Sushi Frog (PEPESHI) | PEPESHI | 30,000,000.000000 | — | — |
| Robinhood, 85 Willow Road, Menlo Park, CA 94025. © (STREET) | STREET | 30,000,000.000000 | — | — |
| 🥣 (🥣) | 🥣 | 30,000,000.000000 | — | — |
| AgentCity (CITY) | CITY | 30,000,000.000000 | — | — |
| Sashimi (SASHIMI) | SASHIMI | 30,000,000.000000 | — | — |
| MWSHI (MWSHI) | MWSHI | 30,000,000.000000 | — | — |
| Ramen (RAMEN) | RAMEN | 30,000,000.000000 | — | — |
| Cash Sushi (CASHSUSHI) | CASHSUSHI | 30,000,000.000000 | — | — |
| SUSHI SZN (SUSHI SZN) | SUSHI SZN | 30,000,000.000000 | — | — |
| Thinking Cat (HMM) | HMM | 30,000,000.000000 | — | — |
| 4663 (4663) | 4663 | 30,000,000.000000 | — | — |
| All America (ALLAMERICA) | ALLAMERICA | 30,000,000.000000 | — | — |
| Chud Send It (UP) | UP | 30,000,000.000000 | — | — |
| SealedFi (SEALED) | SEALED | 30,000,000.000000 | — | — |
| I RED (RED) | RED | 30,000,000.000000 | — | — |
| Sushi Angel (SUSHIANGEL) | SUSHIANGEL | 30,000,000.000000 | — | — |
| Propel (PEL) | PEL | 30,000,000.000000 | — | — |
| Nori Club (NORI) | NORI | 30,000,000.000000 | — | — |
| SushiMode (SUSHIMODE) | SUSHIMODE | 30,000,000.000000 | — | — |
| GOLD SUSHI (GOLD SUSHI) | GOLD SUSHI | 30,000,000.000000 | — | — |
| FLAMINGO | 30,000,000.000000 | — | — | |
| Sushi Verma (SHIV) | SHIV | 30,000,000.000000 | — | — |
| ne-openlife (NE) | NE | 30,000,000.000000 | — | — |
| shoyu (SHOYU) | SHOYU | 30,000,000.000000 | — | — |
| Burger King Coin (BURGERKING) | BURGERKING | 30,000,000.000000 | — | — |
| Floki (FLOKI) | FLOKI | 30,000,000.000000 | — | — |
| Credit Cat ($CREDITCAT) | $CREDITCAT | 30,000,000.000000 | — | — |
| Wojak (WOJAK) | WOJAK | 30,000,000.000000 | — | — |
| TikTok Coin (TIKTOK) | TIKTOK | 30,000,000.000000 | — | — |
| ROBOCAT (ROBOCAT) | ROBOCAT | 30,000,000.000000 | — | — |
| 🥢🥢🤝 (🥢🥢🤝) | 🥢🥢🤝 | 30,000,000.000000 | — | — |
| John Pork (JOHNPORK) | JOHNPORK | 30,000,000.000000 | — | — |
| McCurry Dog CAESAR (CAESAR) | CAESAR | 30,000,000.000000 | — | — |
| Sushi Satyr (SS) | SS | 30,000,000.000000 | — | — |
| cheems (CHEEMS) | CHEEMS | 30,000,000.000000 | — | — |
| 01 (01) | 01 | 30,000,000.000000 | — | — |
| CAToshi Nakameow (CATOSHI) | CATOSHI | 30,000,000.000000 | — | — |
| Pusinni Shusinni (PUSINNI) | PUSINNI | 30,000,000.000000 | — | — |
| Balls (BALLS) | BALLS | 30,000,000.000000 | — | — |
| meowshi (SHI) | SHI | 30,000,000.000000 | — | — |
| Andy (ANDY) | ANDY | 30,000,000.000000 | — | — |
| mister bis (MISTERBIS) | MISTERBIS | 30,000,000.000000 | — | — |
| JOROMY (JOROMY) | JOROMY | 30,000,000.000000 | — | — |
| Ice Sushi (ICE SUSHI) | ICE SUSHI | 30,000,000.000000 | — | — |
| PorkShi (PORKSHI) | PORKSHI | 30,000,000.000000 | — | — |
| Hood Summer (SUMMER) | SUMMER | 30,000,000.000000 | — | — |
| Snag Protocol (SNAG) | SNAG | 30,000,000.000000 | — | — |
| Gurukul (GURU) | GURU | 30,000,000.000000 | — | — |
| The Frog of Pain and Suffering (APRIL) | APRIL | 30,000,000.000000 | — | — |
| 🍣 szn (🍣SZN) | 🍣SZN | 30,000,000.000000 | — | — |
| SPRITEHOOD (SPRITE) | SPRITE | 30,000,000.000000 | — | — |
| lastdodep (LASTDODEP) | LASTDODEP | 30,000,000.000000 | — | — |
| smug cat (SMUGCAT) | SMUGCAT | 30,000,000.000000 | — | — |
| SUSHIDOG (CAESAR) | CAESAR | 30,000,000.000000 | — | — |
| Nori Club (NORI) | NORI | 30,000,000.000000 | — | — |
| EchoKin Labs (ECHOKIN) | ECHOKIN | 30,000,000.000000 | — | — |
| SUSHI INU (SUSHIINU) | SUSHIINU | 30,000,000.000000 | — | — |
| 🍣 (🍣) | 🍣 | 30,000,000.000000 | — | — |
| SUSHISWAP MASCOT (MEOWSHI) | MEOWSHI | 30,000,000.000000 | — | — |
| SUSHISWAP MASCOT (MEOWSHI) | MEOWSHI | 30,000,000.000000 | — | — |
| Wasabi Coin (WASABI) | WASABI | 30,000,000.000000 | — | — |
| Flameow (FLAMEOW) | FLAMEOW | 30,000,000.000000 | — | — |
| Sashimi (SASHIMI) | SASHIMI | 30,000,000.000000 | — | — |
| Robinhood Enthusiast (ALEX) | ALEX | 30,000,000.000000 | — | — |
| SUSHI.CAT (SUSHI.CAT) | SUSHI.CAT | 30,000,000.000000 | — | — |
| Onigiri (ONIGIRI) | ONIGIRI | 30,000,000.000000 | — | — |
| magical cats (MAGICAL CATS) | MAGICAL CATS | 30,000,000.000000 | — | — |
| Space dog (SPACEDOG) | SPACEDOG | 30,000,000.000000 | — | — |
| 🥢 $🥢 (🥢 $🥢) | 🥢 $🥢 | 30,000,000.000000 | — | — |
| Cash Cat (CASHCAT) | CASHCAT | 30,000,000.000000 | — | — |
| Pandamonium (PANDAMONIUM) | PANDAMONIUM | 30,000,000.000000 | — | — |
| 🍣🥢 (🍣🥢) | 🍣🥢 | 30,000,000.000000 | — | — |
| AlexStrategy (ALXSTR) | ALXSTR | 30,000,000.000000 | — | — |
| WISHBONE (WISHBONE) | WISHBONE | 30,000,000.000000 | — | — |
| LILUNI (LILUNI) | LILUNI | 30,000,000.000000 | — | — |
| Spinning Cat (OIIAOIIA) | OIIAOIIA | 30,000,000.000000 | — | — |
| WE WILL WIN (WWW) | WWW | 30,000,000.000000 | — | — |
| 🍣 (🍣) | 🍣 | 30,000,000.000000 | — | — |
| NAILONG (NAILONG) | NAILONG | 30,000,000.000000 | — | — |
| PIPECAT (PIPECAT) | PIPECAT | 30,000,000.000000 | — | — |
| SNOO (SNOO) | SNOO | 30,000,000.000000 | — | — |
| SushiHOOD (SUSHIHOOD) | SUSHIHOOD | 30,000,000.000000 | — | — |
| pipedog (PIPEDOG) | PIPEDOG | 30,000,000.000000 | — | — |
| MochiMol ($MOCHIMOL) | $MOCHIMOL | 30,000,000.000000 | — | — |
| Buy and Retire (530A) | 530A | 30,000,000.000000 | — | — |
| SUSHIDOG (SUSHIDOG) | SUSHIDOG | 30,000,000.000000 | — | — |
| Racoon (RACOON) | RACOON | 30,000,000.000000 | — | — |
| Eat dog susshi (EAS) | EAS | 30,000,000.000000 | — | — |
| LUKESMAXXING (LMAXX) | LMAXX | 30,000,000.000000 | — | — |
| SushiDog (SUSHIDOG) | SUSHIDOG | 30,000,000.000000 | — | — |
| SushiFreedom (SUSHIFREEDOM) | SUSHIFREEDOM | 30,000,000.000000 | — | — |
| KolCat (KOLCAT) | KOLCAT | 30,000,000.000000 | — | — |
| Pod Coin (POD) | POD | 30,000,000.000000 | — | — |
| Pawshi (PAWSHI) | PAWSHI | 30,000,000.000000 | — | — |
| PIPEDOG (PIPEDOG) | PIPEDOG | 30,000,000.000000 | — | — |
| The Robinhood Cat (ROBINHOOD) | ROBINHOOD | 30,000,000.000000 | — | — |
| A-nonym (ANONYM) | ANONYM | 30,000,000.000000 | — | — |
| Angry Dark Skin Man (TROY) | TROY | 30,000,000.000000 | — | — |
| JAPAN (JAPAN) | JAPAN | 30,000,000.000000 | — | — |
| Robinstock (ROBINSTOCK) | ROBINSTOCK | 30,000,000.000000 | — | — |
| Student.fun (STUDENT) | STUDENT | 30,000,000.000000 | — | — |
| KittiHood (KITTIHOOD) | KITTIHOOD | 30,000,000.000000 | — | — |
| SushiDog (SUSHIDOG) | SUSHIDOG | 30,000,000.000000 | — | — |
| SENPAI (SENPAI) | SENPAI | 30,000,000.000000 | — | — |
| 罗宾汉人生 (罗宾汉人生) | 罗宾汉人生 | 30,000,000.000000 | — | — |
| All roads lead to Rome (ROME) | ROME | 30,000,000.000000 | — | — |
| SushiCat (SUSHICAT) | SUSHICAT | 30,000,000.000000 | — | — |
| Meow-Shi (MEOW-SHI) | MEOW-SHI | 30,000,000.000000 | — | — |
| CRON GANG (CRON) | CRON | 30,000,000.000000 | — | — |
| INTERN (INTERN) | INTERN | 30,000,000.000000 | — | — |
| A lazy sloth (SLOTH) | SLOTH | 30,000,000.000000 | — | — |
| Susccess Kid (SKID) | SKID | 30,000,000.000000 | — | — |
| Anotha One (ANOTHAONE) | ANOTHAONE | 30,000,000.000000 | — | — |
| NIGIRI (NIGIRI) | NIGIRI | 30,000,000.000000 | — | — |
| Vitalik (VITALIK) | VITALIK | 30,000,000.000000 | — | — |
| MISO (MISO) | MISO | 30,000,000.000000 | — | — |
| UPFROG (UPFROG) | UPFROG | 30,000,000.000000 | — | — |
| Mutant (MUTANT) | MUTANT | 30,000,000.000000 | — | — |
| Makizushi (MAKI) | MAKI | 30,000,000.000000 | — | — |
| ETERNIS AI (ETERNIS) | ETERNIS | 30,000,000.000000 | — | — |
| EthereumDenver (ETHDENVER) | ETHDENVER | 30,000,000.000000 | — | — |
| shitcoin (SHITCOIN) | SHITCOIN | 30,000,000.000000 | — | — |
| NomiChef (CHEF NOMI) | CHEF NOMI | 30,000,000.000000 | — | — |
| THE SUSHI BULL (ALEX) | ALEX | 30,000,000.000000 | — | — |
| wasabi (WASABI) | WASABI | 30,000,000.000000 | — | — |
| Sushi Cat (SUSHICAT) | SUSHICAT | 30,000,000.000000 | — | — |
| Sushi Trump (STRUMP) | STRUMP | 30,000,000.000000 | — | — |
| Tweet Token (TWEET) | TWEET | 30,000,000.000000 | — | — |
| SALMON (SALMON) | SALMON | 30,000,000.000000 | — | — |
| Japanese Tendies (KATSU) | KATSU | 30,000,000.000000 | — | — |
| HOOD (HOOD) | HOOD | 30,000,000.000000 | — | — |
| Sushi Cat (SUSHICAT) | SUSHICAT | 30,000,000.000000 | — | — |
| JACKET (JACKET) | JACKET | 30,000,000.000000 | — | — |
| Mutant is coach dog (MUTANT) | MUTANT | 30,000,000.000000 | — | — |
| CHUDCAT (CHUDCAT) | CHUDCAT | 30,000,000.000000 | — | — |
| what if (IF) | IF | 30,000,000.000000 | — | — |
| Sushi Inu (SHINU) | SHINU | 30,000,000.000000 | — | — |
| Sushi mascot (SUSHIMI) | SUSHIMI | 30,000,000.000000 | — | — |
| WOOFY (WOOFY) | WOOFY | 30,000,000.000000 | — | — |
| Sushidog (SUSHIDOG) | SUSHIDOG | 30,000,000.000000 | — | — |
| POPCAT (POPCAT) | POPCAT | 30,000,000.000000 | — | — |
| MEOWOOD (MEOWOOD) | MEOWOOD | 30,000,000.000000 | — | — |
| LMEOW (LMEOW) | LMEOW | 30,000,000.000000 | — | — |
| BAGHOOD (BGH) | BGH | 30,000,000.000000 | — | — |
| Alux Mccerry (ALUX) | ALUX | 30,000,000.000000 | — | — |
| Sushi Mascot (ZUSHI) | ZUSHI | 30,000,000.000000 | — | — |
| OCHA (OCHA) | OCHA | 30,000,000.000000 | — | — |
| SUSHIDOG (SUSHIDOG) | SUSHIDOG | 30,000,000.000000 | — | — |
| Nyan Cat (NYANCAT) | NYANCAT | 30,000,000.000000 | — | — |
| Troll (TROLL) | TROLL | 30,000,000.000000 | — | — |
| vlad (VLAD) | VLAD | 30,000,000.000000 | — | — |
| Cool Cat (COOLCAT) | COOLCAT | 30,000,000.000000 | — | — |
| Sushi The Sushi's Mascot (SUSHI) | SUSHI | 30,000,000.000000 | — | — |
| INFLECTA (INFLECTA) | INFLECTA | 30,000,000.000000 | — | — |
| Space X Ferret (FERRET) | FERRET | 30,000,000.000000 | — | — |
| SushiPepe (SUSHIPEPE) | SUSHIPEPE | 30,000,000.000000 | — | — |
| UNICORN (UNICORN) | UNICORN | 30,000,000.000000 | — | — |
| Sushi Vlad (SUSHIVLAD) | SUSHIVLAD | 30,000,000.000000 | — | — |
| FRANKLIN (HOME CAT) | HOME CAT | 30,000,000.000000 | — | — |
| ORANGUTAN (ORANGUTAN) | ORANGUTAN | 30,000,000.000000 | — | — |
| SushiPepe (SUSHIPEPE) | SUSHIPEPE | 30,000,000.000000 | — | — |
| Maneki Neko (MANEKINEKO) | MANEKINEKO | 30,000,000.000000 | — | — |
| DataBear (HUTCH) | HUTCH | 30,000,000.000000 | — | — |
| China Cash Cat (招财猫) | 招财猫 | 30,000,000.000000 | — | — |
| Sushimi (SUSHIMI) | SUSHIMI | 30,000,000.000000 | — | — |
| First Sushi Token Deployed on Telegram (FSDT) | FSDT | 30,000,000.000000 | — | — |
| SushiPepe (SUSHIPEPE) | SUSHIPEPE | 30,000,000.000000 | — | — |
| SUSHIFROG (SUSHIFROG) | SUSHIFROG | 30,000,000.000000 | — | — |
| Putin (PUTIN) | PUTIN | 30,000,000.000000 | — | — |
| MEMESZN (SZN) | SZN | 30,000,000.000000 | — | — |
| SUSHITRASH (JOJI) | JOJI | 30,000,000.000000 | — | — |
| SushiHood (PETER) | PETER | 30,000,000.000000 | — | — |
| trenches (TRENCHES) | TRENCHES | 30,000,000.000000 | — | — |
| Sashimi Cat (SASHIMICAT) | SASHIMICAT | 30,000,000.000000 | — | — |
| Sushiter (SUSHITER) | SUSHITER | 30,000,000.000000 | — | — |
| Lasdd12 (LASDD12) | LASDD12 | 30,000,000.000000 | — | — |
| Longcat (シロ) | シロ | 30,000,000.000000 | — | — |
| SAKE (SAKE) | SAKE | 30,000,000.000000 | — | — |
| BONOBO (BONOBO) | BONOBO | 30,000,000.000000 | — | — |
| GAMAL (GAMAL) | GAMAL | 30,000,000.000000 | — | — |
| Sushinu (SUSHINU) | SUSHINU | 30,000,000.000000 | — | — |
| 🦜Parrot🦜 (PARR) | PARR | 30,000,000.000000 | — | — |
| Sushi SZN (SUSHISZN) | SUSHISZN | 30,000,000.000000 | — | — |
| Apes Together Strong (APES) | APES | 30,000,000.000000 | — | — |
| SoySauce (SOYSAUCE) | SOYSAUCE | 30,000,000.000000 | — | — |
| The SpaceX Ferret (FERRET) | FERRET | 30,000,000.000000 | — | — |
| Sushi The RobinHood Bull (SUSHI) | SUSHI | 30,000,000.000000 | — | — |
| Year of the Penguin🍣 (PENGUIN🍣) | PENGUIN🍣 | 30,000,000.000000 | — | — |
| MARKET CAT (COZY) | COZY | 30,000,000.000000 | — | — |
| Roaring Kitty (RKT) | RKT | 30,000,000.000000 | — | — |
| Sushijak (SUSHIJAK) | SUSHIJAK | 30,000,000.000000 | — | — |
| Popcat On RobinHood (POPCAT) | POPCAT | 30,000,000.000000 | — | — |
| Table Cat (SMUDGE) | SMUDGE | 30,000,000.000000 | — | — |
| TRUMP2028 (TRUMP2028) | TRUMP2028 | 30,000,000.000000 | — | — |
| Sushimie (SUSHIMIE) | SUSHIMIE | 30,000,000.000000 | — | — |
| California Roll (CROLL) | CROLL | 30,000,000.000000 | — | — |
| The Spear (SPEAR) | SPEAR | 30,000,000.000000 | — | — |
| DoOnlyGoodEveryday (DOGE) | DOGE | 30,000,000.000000 | — | — |
| Blue Cat (BLUECAT) | BLUECAT | 30,000,000.000000 | — | — |
| Sushiko The Sushi Dog (SUSHIKO) | SUSHIKO | 30,000,000.000000 | — | — |
| 0xMaki (OXMAKI) | OXMAKI | 30,000,000.000000 | — | — |
| SushiInu (SUSHIINU) | SUSHIINU | 30,000,000.000000 | — | — |
| Flork Sushi (FLORK) | FLORK | 30,000,000.000000 | — | — |
| Kashi (KASHI) | KASHI | 30,000,000.000000 | — | — |
| Beaver Coin (BEAVER) | BEAVER | 30,000,000.000000 | — | — |
| Tofu The Dog (TOFU) | TOFU | 30,000,000.000000 | — | — |
| Sushi Agent (DOJO) | DOJO | 30,000,000.000000 | — | — |
| FUCKYOU (FUCKYOU) | FUCKYOU | 30,000,000.000000 | — | — |
| Coach Dog (MUTANT) | MUTANT | 30,000,000.000000 | — | — |
| SushiPepe (SUSHIPEPE) | SUSHIPEPE | 30,000,000.000000 | — | — |
| KittiHood (KITTIHOOD) | KITTIHOOD | 30,000,000.000000 | — | — |
| Robinhood (RH) | RH | 30,000,000.000000 | — | — |
| Shōyu (SHŌYU) | SHŌYU | 30,000,000.000000 | — | — |
| Valar Atomics (VALAR) | VALAR | 30,000,000.000000 | — | — |
| CRYING CAT (CRYINGCAT) | CRYINGCAT | 30,000,000.000000 | — | — |
| Sushi (SUSHI) | SUSHI | 30,000,000.000000 | — | — |
| 4663 (4663) | 4663 | 30,000,000.000000 | — | — |
| VladHood (VHOOD) | VHOOD | 30,000,000.000000 | — | — |
| PipeSushi (PIPESUSHI) | PIPESUSHI | 30,000,000.000000 | — | — |
| SushiNyan (NYAN) | NYAN | 30,000,000.000000 | — | — |
| Alux Mccerry (ALUX) | ALUX | 30,000,000.000000 | — | — |
| Pussini Sushini (SUSHINI) | SUSHINI | 30,000,000.000000 | — | — |
| nigiri (🍣) | 🍣 | 30,000,000.000000 | — | — |
| Udon cat (UDON) | UDON | 30,000,000.000000 | — | — |
| FlamingoWifCat (FLACAT) | FLACAT | 30,000,000.000000 | — | — |
| vlad (VLAD) | VLAD | 30,000,000.000000 | — | — |
| 🥢🍣 (🥢🍣) | 🥢🍣 | 30,000,000.000000 | — | — |
| Sushi Boba (BOBA) | BOBA | 30,000,000.000000 | — | — |
| Ramen Cat (RAMENCAT) | RAMENCAT | 30,000,000.000000 | — | — |
| cashcow (CASHCOW) | CASHCOW | 30,000,000.000000 | — | — |
| Nori club (NORI) | NORI | 30,000,000.000000 | — | — |
| Sushi Pengu (SPENGU) | SPENGU | 30,000,000.000000 | — | — |
| STONKS (STONKS) | STONKS | 30,000,000.000000 | — | — |
| Robinhood Dog (BRODIE) | BRODIE | 30,000,000.000000 | — | — |
| Crying Sushi Cat (CRYSUSHICAT) | CRYSUSHICAT | 30,000,000.000000 | — | — |
| Market Cat (MARKET CAT) | MARKET CAT | 30,000,000.000000 | — | — |
| DOG SUSHI (DOGSUSHI) | DOGSUSHI | 30,000,000.000000 | — | — |
| Alex (ALEX) | ALEX | 30,000,000.000000 | — | — |
| Cutesie Hilton (CUTE) | CUTE | 30,000,000.000000 | — | — |
| SUSHI SHOES (SHOES) | SHOES | 30,000,000.000000 | — | — |
| Sushi SZN (SUSHISZN) | SUSHISZN | 30,000,000.000000 | — | — |
| Shiba Sushi (SHISU) | SHISU | 30,000,000.000000 | — | — |
| Robinhood Mascot (HOBBS) | HOBBS | 30,000,000.000000 | — | — |
| Chef Nomi (NOMI) | NOMI | 30,000,000.000000 | — | — |
| Jared Grey (JARED GREY) | JARED GREY | 30,000,000.000000 | — | — |
| Jaccat (JAC) | JAC | 30,000,000.000000 | — | — |
| Sushi Shoes (SUSHISHOES) | SUSHISHOES | 30,000,000.000000 | — | — |
| chill sushi. (CHILLSUSHI) | CHILLSUSHI | 30,000,000.000000 | — | — |
| Neegy (NEEGY) | NEEGY | 30,000,000.000000 | — | — |
| Agent Hood (AGENT) | AGENT | 30,000,000.000000 | — | — |
| pupe coin (PUPE) | PUPE | 30,000,000.000000 | — | — |
| Sushi Vlad (SUSHIVLAD) | SUSHIVLAD | 30,000,000.000000 | — | — |
| Cry Sushi Cat (CRYSUSHICAT) | CRYSUSHICAT | 30,000,000.000000 | — | — |
| Meowshi (MEOWSHI) | MEOWSHI | 30,000,000.000000 | — | — |
| The Sushinaut (SUSHINAUT) | SUSHINAUT | 30,000,000.000000 | — | — |
| Make America Great Again (MAGA) | MAGA | 30,000,000.000000 | — | — |
| Type | Age | Block | Details |
|---|---|---|---|
| no cross-chain L1↔L2 transactions for this address | |||
| Transaction Hash | Method ? | Block | Age | From | To | Amount | Txn Fee ? | ||
|---|---|---|---|---|---|---|---|---|---|
| 0x03c561…628bef | distributeFees | 36,693,335 | 22 hrs agoSat, 15 Aug 2026 00:44:00 UTC | 0x6211…8d09 | IN | SushiLaunchpad | $0.000 ETH | 0.00000888 | |
| 0x8a57c0…e9c665 | distributeFees | 36,683,290 | 22 hrs agoSat, 15 Aug 2026 00:27:14 UTC | 0xcceb…85c3 | IN | SushiLaunchpad | $0.000 ETH | 0.00000814 | |
| 0x0d62ab…c60e83 | distributeFees | 36,675,738 | 22 hrs agoSat, 15 Aug 2026 00:14:37 UTC | 0x3ca4…1e4e | IN | SushiLaunchpad | $0.000 ETH | 0.00001217 | |
| 0xe12e64…494bbe | distributeFees | 36,667,719 | 22 hrs agoSat, 15 Aug 2026 00:01:13 UTC | 0xa04b…d5a1 | IN | SushiLaunchpad | $0.000 ETH | 0.00000438 | |
| 0x308b37…05c0c3 | launchAndBuyNative | 36,667,579 | 22 hrs agoSat, 15 Aug 2026 00:00:59 UTC | 0x1bed…41da | IN | SushiLaunchpad | $41.010.02177 ETH | 0.00023048 | |
| 0x2f6f9d…140024 | launchAndBuyNative | 36,660,402 | 22 hrs agoFri, 14 Aug 2026 23:48:59 UTC | 0x3ca4…1e4e | IN | SushiLaunchpad | $993.440.52750 ETH | 0.00023341 | |
| 0xa16b0a…63cc0a | launchAndBuyNative | 36,657,327 | 23 hrs agoFri, 14 Aug 2026 23:43:51 UTC | 0xe21a…8c16 | IN | SushiLaunchpad | $31.020.01646 ETH | 0.00023204 | |
| 0x67a2cf…64d8c2 | distributeFees | 36,645,398 | 23 hrs agoFri, 14 Aug 2026 23:23:55 UTC | 0x6211…8d09 | IN | SushiLaunchpad | $0.000 ETH | 0.00000921 | |
| 0x79e763…29da1a | launchAndBuy | 36,638,327 | 23 hrs agoFri, 14 Aug 2026 23:12:07 UTC | 0xde2d…2e03 | IN | SushiLaunchpad | $0.940.0005 ETH | 0.00023319 | |
| 0x56cf11…8b6868 | launchAndBuy | 36,635,172 | 23 hrs agoFri, 14 Aug 2026 23:06:49 UTC | 0xde2d…2e03 | IN | SushiLaunchpad | $0.940.0005 ETH | 0.00023830 | |
| 0x713b87…6faf28 | distributeFees | 36,633,031 | 23 hrs agoFri, 14 Aug 2026 23:03:15 UTC | 0x6211…8d09 | IN | SushiLaunchpad | $0.000 ETH | 0.00000905 | |
| 0x7794e7…8fc49d | distributeFees | 36,632,173 | 23 hrs agoFri, 14 Aug 2026 23:01:49 UTC | 0xa04b…d5a1 | IN | SushiLaunchpad | $0.000 ETH | 0.00000447 | |
| 0x9a1497…1e2e39 | distributeFees | 36,620,418 | 1 day agoFri, 14 Aug 2026 22:42:11 UTC | 0xa04b…d5a1 | IN | SushiLaunchpad | $0.000 ETH | 0.00000446 | |
| 0x8ea77c…24ba9e | distributeFees | 36,613,345 | 1 day agoFri, 14 Aug 2026 22:30:23 UTC | 0x0e54…3e18 | IN | SushiLaunchpad | $0.000 ETH | 0.00000913 | |
| 0x5840fc…2eee75 | distributeFees | 36,609,885 | 1 day agoFri, 14 Aug 2026 22:24:38 UTC | 0x6211…8d09 | IN | SushiLaunchpad | $0.000 ETH | 0.00000895 | |
| 0x6c3ec5…b74603 | distributeFees | 36,609,628 | 1 day agoFri, 14 Aug 2026 22:24:12 UTC | 0xa04b…d5a1 | IN | SushiLaunchpad | $0.000 ETH | 0.00000445 | |
| 0x8b4be5…7af429 | distributeFees | 36,596,098 | 1 day agoFri, 14 Aug 2026 22:01:43 UTC | 0xa04b…d5a1 | IN | SushiLaunchpad | $0.000 ETH | 0.00000454 | |
| 0x9f731d…4d94fc | distributeFees | 36,573,033 | 1 day agoFri, 14 Aug 2026 21:23:16 UTC | 0x6211…8d09 | IN | SushiLaunchpad | $0.000 ETH | 0.00000574 | |
| 0xea9ab7…8571da | distributeFees | 36,571,531 | 1 day agoFri, 14 Aug 2026 21:20:45 UTC | 0xa04b…d5a1 | IN | SushiLaunchpad | $0.000 ETH | 0.00000436 | |
| 0x3f3376…ba2cba | launch | 36,568,546 | 1 day agoFri, 14 Aug 2026 21:15:47 UTC | 0x2f07…5983 | IN | SushiLaunchpad | $0.940.0005 ETH | 0.00022600 | |
| 0xcc9802…f3f28a | distributeFees | 36,561,323 | 1 day agoFri, 14 Aug 2026 21:03:45 UTC | 0x6211…8d09 | IN | SushiLaunchpad | $0.000 ETH | 0.00000893 | |
| 0x943583…ae60b4 | distributeFees | 36,560,198 | 1 day agoFri, 14 Aug 2026 21:01:52 UTC | 0xa04b…d5a1 | IN | SushiLaunchpad | $0.000 ETH | 0.00000437 | |
| 0x9632ae…b18c48 | distributeFees | 36,558,065 | 1 day agoFri, 14 Aug 2026 20:58:18 UTC | 0xe606…0280 | IN | SushiLaunchpad | $0.000 ETH | 0.00000823 | |
| 0x566fc0…b7c6ee | distributeFees | 36,547,964 | 1 day agoFri, 14 Aug 2026 20:41:27 UTC | 0xa04b…d5a1 | IN | SushiLaunchpad | $0.000 ETH | 0.00000434 | |
| 0x566a40…38a360 | distributeFees | 36,535,611 | 1 day agoFri, 14 Aug 2026 20:20:47 UTC | 0xa04b…d5a1 | IN | SushiLaunchpad | $0.000 ETH | 0.00000440 |
| Block | Age | Parent Transaction Hash | Type | Method | From | To | Value | |
|---|---|---|---|---|---|---|---|---|
| 36,667,579 | 22 hrs agoSat, 15 Aug 2026 00:00:59 UTC | 0x308b37…05c0c3 | CREATE2 | launchAndBuyNative | 0x104f…a7ed | OUT | 0xc3ac…8611 | 0 ETH |
| 36,667,579 | 22 hrs agoSat, 15 Aug 2026 00:00:59 UTC | 0x308b37…05c0c3 | CALL | launchAndBuyNative | 0x104f…a7ed | OUT | 0x0bd7…ad73 | 0.02127 ETH |
| 36,660,402 | 22 hrs agoFri, 14 Aug 2026 23:48:59 UTC | 0x2f6f9d…140024 | CREATE2 | launchAndBuyNative | 0x104f…a7ed | OUT | 0x6902…3fa4 | 0 ETH |
| 36,660,402 | 22 hrs agoFri, 14 Aug 2026 23:48:59 UTC | 0x2f6f9d…140024 | CALL | launchAndBuyNative | 0x104f…a7ed | OUT | 0x0bd7…ad73 | 0.52700 ETH |
| 36,657,327 | 23 hrs agoFri, 14 Aug 2026 23:43:51 UTC | 0xa16b0a…63cc0a | CREATE2 | launchAndBuyNative | 0x104f…a7ed | OUT | 0x5845…b8e1 | 0 ETH |
| 36,657,327 | 23 hrs agoFri, 14 Aug 2026 23:43:51 UTC | 0xa16b0a…63cc0a | CALL | launchAndBuyNative | 0x104f…a7ed | OUT | 0x0bd7…ad73 | 0.01596 ETH |
| 36,638,327 | 23 hrs agoFri, 14 Aug 2026 23:12:07 UTC | 0x79e763…29da1a | CREATE2 | launchAndBuy | 0x104f…a7ed | OUT | 0x6ef4…2d32 | 0 ETH |
| 36,635,172 | 23 hrs agoFri, 14 Aug 2026 23:06:49 UTC | 0x56cf11…8b6868 | CREATE2 | launchAndBuy | 0x104f…a7ed | OUT | 0x9966…8a6d | 0 ETH |
| 36,568,546 | 1 day agoFri, 14 Aug 2026 21:15:47 UTC | 0x3f3376…ba2cba | CREATE2 | launch | 0x104f…a7ed | OUT | 0x5085…0745 | 0 ETH |
| 36,510,427 | 1 day agoFri, 14 Aug 2026 19:38:44 UTC | 0xadb4ce…11c4d3 | CREATE2 | launchAndBuyNative | 0x104f…a7ed | OUT | 0xc8b6…67d2 | 0 ETH |
| 36,510,427 | 1 day agoFri, 14 Aug 2026 19:38:44 UTC | 0xadb4ce…11c4d3 | CALL | launchAndBuyNative | 0x104f…a7ed | OUT | 0x0bd7…ad73 | 0.15988 ETH |
| 36,500,132 | 1 day agoFri, 14 Aug 2026 19:21:35 UTC | 0xc182b3…0c7aec | CREATE2 | launch | 0x104f…a7ed | OUT | 0x6983…8ea4 | 0 ETH |
| 36,466,148 | 1 day agoFri, 14 Aug 2026 18:24:54 UTC | 0x4da652…1c87c1 | CREATE2 | launch | 0x104f…a7ed | OUT | 0xf41f…f916 | 0 ETH |
| 36,454,592 | 1 day agoFri, 14 Aug 2026 18:05:36 UTC | 0x6749b2…7c7a1d | CREATE2 | launch | 0x104f…a7ed | OUT | 0x5104…58ee | 0 ETH |
| 36,447,852 | 1 day agoFri, 14 Aug 2026 17:54:21 UTC | 0x1d3594…1ef1be | CREATE2 | launch | 0x104f…a7ed | OUT | 0x107f…1bca | 0 ETH |
| 36,442,010 | 1 day agoFri, 14 Aug 2026 17:44:36 UTC | 0xa70d07…dd4d6d | CREATE2 | launch | 0x104f…a7ed | OUT | 0x030a…c3fb | 0 ETH |
| 36,431,623 | 1 day agoFri, 14 Aug 2026 17:27:14 UTC | 0xff7c0d…618144 | CREATE2 | launch | 0x104f…a7ed | OUT | 0x7058…4d8b | 0 ETH |
| 36,386,370 | 1 day agoFri, 14 Aug 2026 16:11:39 UTC | 0xe64802…85f472 | CREATE2 | launchAndBuyNative | 0x104f…a7ed | OUT | 0x5a6c…bb87 | 0 ETH |
| 36,386,370 | 1 day agoFri, 14 Aug 2026 16:11:39 UTC | 0xe64802…85f472 | CALL | launchAndBuyNative | 0x104f…a7ed | OUT | 0x0bd7…ad73 | 0.10117 ETH |
| 36,381,072 | 1 day agoFri, 14 Aug 2026 16:02:49 UTC | 0xaae8c9…93d329 | CREATE2 | launch | 0x104f…a7ed | OUT | 0x92a3…7b74 | 0 ETH |
| 36,353,865 | 1 day agoFri, 14 Aug 2026 15:17:21 UTC | 0x66e4d4…319b8e | CREATE2 | launchAndBuyNative | 0x104f…a7ed | OUT | 0xb817…c06d | 0 ETH |
| 36,353,865 | 1 day agoFri, 14 Aug 2026 15:17:21 UTC | 0x66e4d4…319b8e | CALL | launchAndBuyNative | 0x104f…a7ed | OUT | 0x0bd7…ad73 | 0.05359 ETH |
| 36,345,852 | 1 day agoFri, 14 Aug 2026 15:03:57 UTC | 0xa1467b…72be81 | CREATE2 | launchAndBuyNative | 0x104f…a7ed | OUT | 0x483c…c87c | 0 ETH |
| 36,345,852 | 1 day agoFri, 14 Aug 2026 15:03:57 UTC | 0xa1467b…72be81 | CALL | launchAndBuyNative | 0x104f…a7ed | OUT | 0x0bd7…ad73 | 0.01607 ETH |
| 36,342,038 | 1 day agoFri, 14 Aug 2026 14:57:35 UTC | 0x157624…6b86e7 | CREATE2 | launch | 0x104f…a7ed | OUT | 0x19aa…b235 | 0 ETH |
| Txn Hash | Age | Event | Topics / Data |
|---|---|---|---|
| 0x03c561…628bef | 22 hrs agoSat, 15 Aug 2026 00:44:00 UTC | 0x782d3a…68b6 | [0] 0x000000000000…89c98d09 [1] 0x000000000000…a2877f36 [2] 0x000000000000…c205edd4 data: 0x000000000000000000…39ac1647 |
| 0x8a57c0…e9c665 | 22 hrs agoSat, 15 Aug 2026 00:27:14 UTC | 0x782d3a…68b6 | [0] 0x000000000000…339985c3 [1] 0x000000000000…89f767d7 [2] 0x000000000000…96f81ba9 data: 0x000000000000000000…99072dc4 |
| 0x0d62ab…c60e83 | 22 hrs agoSat, 15 Aug 2026 00:14:37 UTC | 0x782d3a…68b6 | [0] 0x000000000000…b9fb1e4e [1] 0x000000000000…465b3fa4 [2] 0x000000000000…cac15cb0 data: 0x000000000000000000…7975fd4f |
| 0xe12e64…494bbe | 22 hrs agoSat, 15 Aug 2026 00:01:13 UTC | 0x782d3a…68b6 | [0] 0x000000000000…9a69d5a1 [1] 0x000000000000…62733e55 [2] 0x000000000000…53298ed4 data: 0x000000000000000000…00000000 |
| 0x308b37…05c0c3 | 22 hrs agoSat, 15 Aug 2026 00:00:59 UTC | 0xce8f7c…9ff7 | [0] 0x000000000000…c20341da [1] 0x000000000000…1b2f8611 [2] 0x000000000000…6b0427c7 data: 0x000000000000000000…3576adbf |
| 0x308b37…05c0c3 | 22 hrs agoSat, 15 Aug 2026 00:00:59 UTC | 0x4e9374…6986 | [0] 0x000000000000…1b2f8611 [1] 0x000000000000…6b0427c7 [2] 0x000000000000…00001321 data: 0xffffffffffffffffff…0217d269 |
| 0x308b37…05c0c3 | 22 hrs agoSat, 15 Aug 2026 00:00:59 UTC | 0xeb7561…cda5 | [0] 0x000000000000…c20341da [1] 0x000000000000…1b2f8611 [2] 0x000000000000…6b0427c7 data: 0x000000000000000000…00000000 |
| 0x2f6f9d…140024 | 22 hrs agoFri, 14 Aug 2026 23:48:59 UTC | 0xce8f7c…9ff7 | [0] 0x000000000000…b9fb1e4e [1] 0x000000000000…465b3fa4 [2] 0x000000000000…cac15cb0 data: 0x000000000000000000…bda566e0 |
| 0x2f6f9d…140024 | 22 hrs agoFri, 14 Aug 2026 23:48:59 UTC | 0x4e9374…6986 | [0] 0x000000000000…465b3fa4 [1] 0x000000000000…cac15cb0 [2] 0x000000000000…00001319 data: 0xffffffffffffffffff…0217d269 |
| 0x2f6f9d…140024 | 22 hrs agoFri, 14 Aug 2026 23:48:59 UTC | 0xeb7561…cda5 | [0] 0x000000000000…b9fb1e4e [1] 0x000000000000…465b3fa4 [2] 0x000000000000…cac15cb0 data: 0x000000000000000000…00000000 |
| 0xa16b0a…63cc0a | 23 hrs agoFri, 14 Aug 2026 23:43:51 UTC | 0xce8f7c…9ff7 | [0] 0x000000000000…bb3c8c16 [1] 0x000000000000…8934b8e1 [2] 0x000000000000…905cc698 data: 0x000000000000000000…922f3068 |
| 0xa16b0a…63cc0a | 23 hrs agoFri, 14 Aug 2026 23:43:51 UTC | 0x4e9374…6986 | [0] 0x000000000000…8934b8e1 [1] 0x000000000000…905cc698 [2] 0x000000000000…00001315 data: 0xffffffffffffffffff…0217d269 |
| 0xa16b0a…63cc0a | 23 hrs agoFri, 14 Aug 2026 23:43:51 UTC | 0xeb7561…cda5 | [0] 0x000000000000…bb3c8c16 [1] 0x000000000000…8934b8e1 [2] 0x000000000000…905cc698 data: 0x000000000000000000…00000000 |
| 0x67a2cf…64d8c2 | 23 hrs agoFri, 14 Aug 2026 23:23:55 UTC | 0x782d3a…68b6 | [0] 0x000000000000…89c98d09 [1] 0x000000000000…a2877f36 [2] 0x000000000000…c205edd4 data: 0x000000000000000000…5291acff |
| 0x79e763…29da1a | 23 hrs agoFri, 14 Aug 2026 23:12:07 UTC | 0xce8f7c…9ff7 | [0] 0x000000000000…27b02e03 [1] 0x000000000000…51cc2d32 [2] 0x000000000000…955a874e data: 0x000000000000000000…c7d475f2 |
| 0x79e763…29da1a | 23 hrs agoFri, 14 Aug 2026 23:12:07 UTC | 0x4e9374…6986 | [0] 0x000000000000…51cc2d32 [1] 0x000000000000…955a874e [2] 0x000000000000…0000130e data: 0xffffffffffffffffff…98c87259 |
| 0x79e763…29da1a | 23 hrs agoFri, 14 Aug 2026 23:12:07 UTC | 0xeb7561…cda5 | [0] 0x000000000000…27b02e03 [1] 0x000000000000…51cc2d32 [2] 0x000000000000…955a874e data: 0x000000000000000000…00000000 |
| 0x56cf11…8b6868 | 23 hrs agoFri, 14 Aug 2026 23:06:49 UTC | 0xce8f7c…9ff7 | [0] 0x000000000000…27b02e03 [1] 0x000000000000…3b9b8a6d [2] 0x000000000000…5bef9149 data: 0x000000000000000000…7c19ffd5 |
| 0x56cf11…8b6868 | 23 hrs agoFri, 14 Aug 2026 23:06:49 UTC | 0x4e9374…6986 | [0] 0x000000000000…3b9b8a6d [1] 0x000000000000…5bef9149 [2] 0x000000000000…00001309 data: 0xffffffffffffffffff…0b71c152 |
| 0x56cf11…8b6868 | 23 hrs agoFri, 14 Aug 2026 23:06:49 UTC | 0xeb7561…cda5 | [0] 0x000000000000…27b02e03 [1] 0x000000000000…3b9b8a6d [2] 0x000000000000…5bef9149 data: 0x000000000000000000…00000000 |
| 0x713b87…6faf28 | 23 hrs agoFri, 14 Aug 2026 23:03:15 UTC | 0x782d3a…68b6 | [0] 0x000000000000…89c98d09 [1] 0x000000000000…a2877f36 [2] 0x000000000000…c205edd4 data: 0x000000000000000000…fbee8000 |
| 0x7794e7…8fc49d | 23 hrs agoFri, 14 Aug 2026 23:01:49 UTC | 0x782d3a…68b6 | [0] 0x000000000000…9a69d5a1 [1] 0x000000000000…62733e55 [2] 0x000000000000…53298ed4 data: 0x000000000000000000…00000000 |
| 0x9a1497…1e2e39 | 1 day agoFri, 14 Aug 2026 22:42:11 UTC | 0x782d3a…68b6 | [0] 0x000000000000…9a69d5a1 [1] 0x000000000000…62733e55 [2] 0x000000000000…53298ed4 data: 0x000000000000000000…00000000 |
| 0x8ea77c…24ba9e | 1 day agoFri, 14 Aug 2026 22:30:23 UTC | 0x782d3a…68b6 | [0] 0x000000000000…a0f73e18 [1] 0x000000000000…c33792dd [2] 0x000000000000…19e97c0d data: 0x000000000000000000…ff8af0b2 |
| 0x5840fc…2eee75 | 1 day agoFri, 14 Aug 2026 22:24:38 UTC | 0x782d3a…68b6 | [0] 0x000000000000…89c98d09 [1] 0x000000000000…a2877f36 [2] 0x000000000000…c205edd4 data: 0x000000000000000000…d077850b |
| Transaction Hash | Method | Block | Age | From | To | Amount | Token | ||
|---|---|---|---|---|---|---|---|---|---|
| 0x03c561cb…628bef | Transfer | 36,693,335 | 22 hrs agoSat, 15 Aug 2026 00:44:00 UTC | 0x104f…a7ed | OUT | 0xdda0…041e | 35,002.537533 CAT | AAPL Cat (CAT) | |
| 0x03c561cb…628bef | Transfer | 36,693,335 | 22 hrs agoSat, 15 Aug 2026 00:44:00 UTC | 0x104f…a7ed | OUT | 0xdda0…041e | $1.260.004062 AAPL | Apple • Robinhood Token (AAPL) | |
| 0x03c561cb…628bef | Transfer | 36,693,335 | 22 hrs agoSat, 15 Aug 2026 00:44:00 UTC | 0x104f…a7ed | OUT | 0x2ec2…e4e8 | 15,001.087514 CAT | AAPL Cat (CAT) | |
| 0x03c561cb…628bef | Transfer | 36,693,335 | 22 hrs agoSat, 15 Aug 2026 00:44:00 UTC | 0x104f…a7ed | OUT | 0x2ec2…e4e8 | $0.540.001741 AAPL | Apple • Robinhood Token (AAPL) | |
| 0x03c561cb…628bef | Transfer | 36,693,335 | 22 hrs agoSat, 15 Aug 2026 00:44:00 UTC | 0x0a2e…edd4 | IN | 0x104f…a7ed | 50,003.625048 CAT | AAPL Cat (CAT) | |
| 0x03c561cb…628bef | Transfer | 36,693,335 | 22 hrs agoSat, 15 Aug 2026 00:44:00 UTC | 0x0a2e…edd4 | IN | 0x104f…a7ed | $1.800.005803 AAPL | Apple • Robinhood Token (AAPL) | |
| 0x8a57c040…e9c665 | Transfer | 36,683,290 | 22 hrs agoSat, 15 Aug 2026 00:27:14 UTC | 0x104f…a7ed | OUT | 0xcceb…85c3 | 525,991.110174 SUSHISTR | Sushi Strategy (SUSHISTR) | |
| 0x8a57c040…e9c665 | Transfer | 36,683,290 | 22 hrs agoSat, 15 Aug 2026 00:27:14 UTC | 0x104f…a7ed | OUT | 0xcceb…85c3 | 0.001559 WETH | WETH (WETH) | |
| 0x8a57c040…e9c665 | Transfer | 36,683,290 | 22 hrs agoSat, 15 Aug 2026 00:27:14 UTC | 0x104f…a7ed | OUT | 0x2ec2…e4e8 | 225,424.761503 SUSHISTR | Sushi Strategy (SUSHISTR) | |
| 0x8a57c040…e9c665 | Transfer | 36,683,290 | 22 hrs agoSat, 15 Aug 2026 00:27:14 UTC | 0x104f…a7ed | OUT | 0x2ec2…e4e8 | 0.000668 WETH | WETH (WETH) | |
| 0x8a57c040…e9c665 | Transfer | 36,683,290 | 22 hrs agoSat, 15 Aug 2026 00:27:14 UTC | 0xef35…1ba9 | IN | 0x104f…a7ed | 751,415.871678 SUSHISTR | Sushi Strategy (SUSHISTR) | |
| 0x8a57c040…e9c665 | Transfer | 36,683,290 | 22 hrs agoSat, 15 Aug 2026 00:27:14 UTC | 0xef35…1ba9 | IN | 0x104f…a7ed | 0.002227 WETH | WETH (WETH) | |
| 0x0d62ab2c…c60e83 | Transfer | 36,675,738 | 22 hrs agoSat, 15 Aug 2026 00:14:37 UTC | 0x104f…a7ed | OUT | 0x3ca4…1e4e | 2,055,531.683169 DEEP | Deepstate Protocol (DEEP) | |
| 0x0d62ab2c…c60e83 | Transfer | 36,675,738 | 22 hrs agoSat, 15 Aug 2026 00:14:37 UTC | 0x104f…a7ed | OUT | 0x3ca4…1e4e | 0.010233 WETH | WETH (WETH) | |
| 0x0d62ab2c…c60e83 | Transfer | 36,675,738 | 22 hrs agoSat, 15 Aug 2026 00:14:37 UTC | 0x104f…a7ed | OUT | 0x2ec2…e4e8 | 880,942.149929 DEEP | Deepstate Protocol (DEEP) | |
| 0x0d62ab2c…c60e83 | Transfer | 36,675,738 | 22 hrs agoSat, 15 Aug 2026 00:14:37 UTC | 0x104f…a7ed | OUT | 0x2ec2…e4e8 | 0.004385 WETH | WETH (WETH) | |
| 0x0d62ab2c…c60e83 | Transfer | 36,675,738 | 22 hrs agoSat, 15 Aug 2026 00:14:37 UTC | 0x8e7d…5cb0 | IN | 0x104f…a7ed | 2,936,473.833099 DEEP | Deepstate Protocol (DEEP) | |
| 0x0d62ab2c…c60e83 | Transfer | 36,675,738 | 22 hrs agoSat, 15 Aug 2026 00:14:37 UTC | 0x8e7d…5cb0 | IN | 0x104f…a7ed | 0.014618 WETH | WETH (WETH) | |
| 0x308b3722…05c0c3 | Transfer | 36,667,579 | 22 hrs agoSat, 15 Aug 2026 00:00:59 UTC | 0x104f…a7ed | OUT | 0x55b5…27c7 | 0.021274 WETH | WETH (WETH) | |
| 0x308b3722…05c0c3 | Transfer | 36,667,579 | 22 hrs agoSat, 15 Aug 2026 00:00:59 UTC | 0x104f…a7ed | OUT | 0x55b5…27c7 | 969,999,999.999999 RUNNERS | BULLS RUNNERS (RUNNERS) | |
| 0x308b3722…05c0c3 | Transfer | 36,667,579 | 22 hrs agoSat, 15 Aug 2026 00:00:59 UTC | 0x0000…0000 | IN | 0x104f…a7ed | 1,000,000,000.000000 RUNNERS | BULLS RUNNERS (RUNNERS) | |
| 0x308b3722…05c0c3 | Transfer | 36,667,579 | 22 hrs agoSat, 15 Aug 2026 00:00:59 UTC | 0x0000…0000 | IN | 0x104f…a7ed | 0.021274 WETH | WETH (WETH) | |
| 0x2f6f9d4e…140024 | Transfer | 36,660,402 | 22 hrs agoFri, 14 Aug 2026 23:48:59 UTC | 0x104f…a7ed | OUT | 0x8e7d…5cb0 | 0.527004 WETH | WETH (WETH) | |
| 0x2f6f9d4e…140024 | Transfer | 36,660,402 | 22 hrs agoFri, 14 Aug 2026 23:48:59 UTC | 0x104f…a7ed | OUT | 0x8e7d…5cb0 | 969,999,999.999999 DEEP | Deepstate Protocol (DEEP) | |
| 0x2f6f9d4e…140024 | Transfer | 36,660,402 | 22 hrs agoFri, 14 Aug 2026 23:48:59 UTC | 0x0000…0000 | IN | 0x104f…a7ed | 1,000,000,000.000000 DEEP | Deepstate Protocol (DEEP) |