// SPDX-License-Identifier: MIT
pragma solidity ^0.8.26;
import {Ownable} from "solady/auth/Ownable.sol";
import {ReentrancyGuard} from "solady/utils/ReentrancyGuard.sol";
import {SafeTransferLib} from "solady/utils/SafeTransferLib.sol";
import {IPoolManager} from "@uniswap/v4-core/src/interfaces/IPoolManager.sol";
import {IUnlockCallback} from "@uniswap/v4-core/src/interfaces/callback/IUnlockCallback.sol";
import {IHooks} from "@uniswap/v4-core/src/interfaces/IHooks.sol";
import {Currency} from "@uniswap/v4-core/src/types/Currency.sol";
import {PoolKey} from "@uniswap/v4-core/src/types/PoolKey.sol";
import {PoolId, PoolIdLibrary} from "@uniswap/v4-core/src/types/PoolId.sol";
import {BalanceDelta} from "@uniswap/v4-core/src/types/BalanceDelta.sol";
import {SwapParams} from "@uniswap/v4-core/src/types/PoolOperation.sol";
import {StateLibrary} from "@uniswap/v4-core/src/libraries/StateLibrary.sol";
import {CurrencySettler} from "@uniswap/v4-core/test/utils/CurrencySettler.sol";
import {IChainlinkFeed, ISpcxToken} from "./interfaces/IExternal.sol";
/// @title SpcxController — the SPCXSTR strategy treasury & mechanism
/// @notice Receives the hook's 80% treasury leg, accumulates it as an ETH bid,
/// acquires bags of SPCX via competitive keepers, relists each bag at a
/// premium, and uses sale proceeds to buy-and-burn SPCXSTR.
/// @dev Deliberately separate from (and replaceable independently of) the
/// immutable SpcxStrategy token — the PunkStrategyPatch lesson: keep the
/// risk-bearing mechanism upgradable-by-replacement while supply/transfer
/// rules stay fixed. Modeled on TokenWorks' verified ERC20Strategy/
/// BaseStrategy (reference/ethereum/ERC20Strategy_B1a3015b) with three
/// deliberate hardenings:
/// 1. A Chainlink SPCX/USD + ETH/USD price CEILING on the bag bid, so a
/// keeper can never extract more than fair-value+premium — the guard
/// the reference lacked (its overpay bug bled ~182 ETH).
/// 2. Swaps done directly via PoolManager.unlock (Router04 is absent on
/// Robinhood Chain), with a sqrtPrice slippage bound and full-fill
/// check instead of the reference's minOut=0 buyback.
/// 3. Timestamp-based pacing (Robinhood Chain's block.number is an L1
/// estimate).
contract SpcxController is Ownable, ReentrancyGuard, IUnlockCallback {
using PoolIdLibrary for PoolKey;
using StateLibrary for IPoolManager;
using CurrencySettler for Currency;
/* ─────────────────────────────── constants ─────────────────────────────── */
address public constant DEAD = 0x000000000000000000000000000000000000dEaD;
uint256 internal constant BIPS = 10_000;
uint256 internal constant MULT_DENOM = 1_000; // priceMultiplier is per-mille (1200 = 1.2x)
uint8 internal constant FEED_DECIMALS = 8; // both SPCX/USD and ETH/USD feeds
/* ─────────────────────────────── immutables ────────────────────────────── */
IPoolManager public immutable poolManager;
/// @notice The SPCXSTR token (currency1 of the hooked pool) — the buyback target.
address public immutable spcxstr;
/// @notice The SPCX token this strategy accumulates.
ISpcxToken public immutable spcx;
/* ──────────────────────────────── storage ──────────────────────────────── */
/// @notice The tax hook; sole authorized `addFees` caller and the hooked pool's
/// hooks field. Set once, post-deploy (breaks the hook↔controller cycle).
address public hook;
// --- treasury ---
/// @notice ETH accumulated from tax, forming the SPCX bid.
uint256 public currentFees;
/// @notice ETH from bag sales, queued for buyback-and-burn.
uint256 public ethToTwap;
// --- bag mechanics ---
/// @notice SPCX acquired per bag (raw token units).
uint256 public bagSize;
/// @notice Resale premium, per-mille (1200 = 1.2x = +20%). Range [1100, 10000].
uint256 public priceMultiplier;
/// @notice bagId => ETH list price (0 = not for sale).
mapping(uint256 => uint256) public onSale;
/// @notice bagId => SPCX `uiMultiplier` at listing time. A corporate action
/// (split/reverse-split) changes the multiplier and re-bases per-token
/// value, making pre-action list prices wrong; sellBag refuses to fill
/// across a multiplier change (see repriceBag).
mapping(uint256 => uint256) public listMultiplier;
/// @notice Monotonic bag counter.
uint256 public lastBagId;
// --- bid time-ramp (paces how fast the standing bid can grow) ---
/// @notice ETH added to the max bid per `rampStepSeconds` elapsed.
uint256 public buyIncrement;
/// @notice Seconds per buyIncrement step.
uint256 public rampStepSeconds;
/// @notice Timestamp of the last bag purchase (ramp anchor).
uint256 public lastBuyTime;
// --- buyback TWAP pacing ---
uint256 public twapIncrement; // ETH per buyback
uint256 public twapDelaySeconds; // min seconds between buybacks
uint256 public lastTwapTime;
uint256 public buybackRewardBips; // keeper reward on each buyback (of burnAmount)
// --- oracle guard ---
IChainlinkFeed public spcxUsdFeed;
IChainlinkFeed public ethUsdFeed;
IChainlinkFeed public sequencerUptimeFeed; // optional L2 uptime feed
uint256 public maxOracleStaleness; // seconds; 0 disables the freshness check
uint256 public sequencerGracePeriod; // seconds after sequencer restart
uint256 public maxBidPremiumBips; // allowed overpay above oracle fair value
// --- buyback slippage guard ---
uint256 public maxBuybackSlippageBips; // bound on sqrtPrice movement per buyback
/* ──────────────────────────────── events ───────────────────────────────── */
event HookSet(address indexed hook);
event FeesAdded(uint256 amount, uint256 currentFees);
event BagBought(uint256 indexed bagId, address indexed keeper, uint256 ethPaid, uint256 listPrice);
event BagSold(uint256 indexed bagId, address indexed buyer, uint256 price);
event BagRepriced(uint256 indexed bagId, uint256 newPrice, uint256 uiMultiplier);
event BoughtBackAndBurned(uint256 ethIn, uint256 tokensBurned, address indexed keeper, uint256 reward);
event BagSizeSet(uint256 bagSize);
event PriceMultiplierSet(uint256 multiplier);
event RampParamsSet(uint256 buyIncrement, uint256 rampStepSeconds);
event TwapParamsSet(uint256 twapIncrement, uint256 twapDelaySeconds, uint256 rewardBips);
event OraclesSet(address spcxUsd, address ethUsd, address sequencer);
event OracleParamsSet(uint256 maxStaleness, uint256 grace, uint256 premiumBips);
event BuybackSlippageSet(uint256 bips);
event Migrated(address indexed to, uint256 ethMoved, uint256 spcxMoved);
/* ──────────────────────────────── errors ───────────────────────────────── */
error OnlyHook();
error OnlyPoolManager();
error HookAlreadySet();
error ZeroAddress();
error NoZeroBuys();
error BalanceMismatch();
error NotForSale();
error WrongPrice();
error NoEthToTwap();
error TwapDelayNotMet();
error InvalidMultiplier();
error InvalidParam();
error BagsAlreadyBought();
error IncompleteSwap();
error OracleStale();
error OraclePaused();
error SequencerDown();
error StaleListing();
/* ───────────────────────────── construction ────────────────────────────── */
constructor(address spcxstr_, address spcx_, IPoolManager poolManager_, address owner_) {
if (spcxstr_ == address(0) || spcx_ == address(0) || address(poolManager_) == address(0) || owner_ == address(0))
{
revert ZeroAddress();
}
spcxstr = spcxstr_;
spcx = ISpcxToken(spcx_);
poolManager = poolManager_;
_initializeOwner(owner_);
// sane defaults; tune before launch
priceMultiplier = 1200; // +20%
rampStepSeconds = 12; // ~ one L1 block
twapDelaySeconds = 12;
buybackRewardBips = 50; // 0.5%
maxOracleStaleness = 90_000; // ~25h; halts buys over the 24/5 weekend by design
sequencerGracePeriod = 3_600;
maxBidPremiumBips = 300; // allow keepers ≤3% over oracle fair value
maxBuybackSlippageBips = 500; // 5% sqrtPrice bound
lastBuyTime = block.timestamp;
}
/* ─────────────────────────────── admin ─────────────────────────────────── */
function setHook(address hook_) external onlyOwner {
if (hook != address(0)) revert HookAlreadySet();
if (hook_ == address(0)) revert ZeroAddress();
hook = hook_;
emit HookSet(hook_);
}
function setBagSize(uint256 bagSize_) external onlyOwner {
if (bagSize_ == 0) revert InvalidParam();
if (lastBagId != 0) revert BagsAlreadyBought(); // immutable once the flywheel spins
bagSize = bagSize_;
emit BagSizeSet(bagSize_);
}
function setPriceMultiplier(uint256 m) external onlyOwner {
if (m < 1100 || m > 10_000) revert InvalidMultiplier();
priceMultiplier = m;
emit PriceMultiplierSet(m);
}
function setRampParams(uint256 buyIncrement_, uint256 rampStepSeconds_) external onlyOwner {
if (buyIncrement_ == 0 || rampStepSeconds_ == 0) revert InvalidParam();
buyIncrement = buyIncrement_;
rampStepSeconds = rampStepSeconds_;
emit RampParamsSet(buyIncrement_, rampStepSeconds_);
}
function setTwapParams(uint256 twapIncrement_, uint256 twapDelaySeconds_, uint256 rewardBips_) external onlyOwner {
if (twapIncrement_ == 0 || rewardBips_ > 1_000) revert InvalidParam(); // reward ≤10%
twapIncrement = twapIncrement_;
twapDelaySeconds = twapDelaySeconds_;
buybackRewardBips = rewardBips_;
emit TwapParamsSet(twapIncrement_, twapDelaySeconds_, rewardBips_);
}
function setOracles(address spcxUsd, address ethUsd, address sequencer) external onlyOwner {
// require 8-decimal feeds so the fair-value math holds
if (spcxUsd != address(0) && IChainlinkFeed(spcxUsd).decimals() != FEED_DECIMALS) revert InvalidParam();
if (ethUsd != address(0) && IChainlinkFeed(ethUsd).decimals() != FEED_DECIMALS) revert InvalidParam();
spcxUsdFeed = IChainlinkFeed(spcxUsd);
ethUsdFeed = IChainlinkFeed(ethUsd);
sequencerUptimeFeed = IChainlinkFeed(sequencer);
emit OraclesSet(spcxUsd, ethUsd, sequencer);
}
function setOracleParams(uint256 maxStaleness, uint256 grace, uint256 premiumBips) external onlyOwner {
if (premiumBips > BIPS) revert InvalidParam();
maxOracleStaleness = maxStaleness;
sequencerGracePeriod = grace;
maxBidPremiumBips = premiumBips;
emit OracleParamsSet(maxStaleness, grace, premiumBips);
}
function setBuybackSlippage(uint256 bips) external onlyOwner {
if (bips >= BIPS) revert InvalidParam();
maxBuybackSlippageBips = bips;
emit BuybackSlippageSet(bips);
}
/// @notice Escape hatch (PunkStrategyPatch pattern): move the whole treasury to a
/// successor controller. Powerful by design; the tradeoff for being able
/// to fix a bug without a token migration. Should sit behind a timelock
/// in production.
function migrate(address to) external onlyOwner nonReentrant {
if (to == address(0)) revert ZeroAddress();
uint256 spcxBal = spcx.balanceOf(address(this));
if (spcxBal != 0) SafeTransferLib.safeTransfer(address(spcx), to, spcxBal);
uint256 ethBal = address(this).balance;
if (ethBal != 0) SafeTransferLib.forceSafeTransferETH(to, ethBal);
emit Migrated(to, ethBal, spcxBal);
}
/* ────────────────────────────── fee intake ─────────────────────────────── */
/// @notice The hook's 80% treasury leg lands here and grows the SPCX bid.
function addFees() external payable {
if (msg.sender != hook) revert OnlyHook();
currentFees += msg.value;
emit FeesAdded(msg.value, currentFees);
}
/* ─────────────────────────── bid computation ───────────────────────────── */
/// @notice Max ETH the standing bid grows to over time (paces accumulation).
function timeRampMax() public view returns (uint256) {
if (buyIncrement == 0) return type(uint256).max; // ramp disabled
uint256 steps = (block.timestamp - lastBuyTime) / rampStepSeconds + 1;
return steps * buyIncrement;
}
/// @notice Oracle-derived ceiling: fair ETH value of one bag × (1 + premium).
/// Returns 0 (→ no buys) whenever the price cannot be trusted (stale,
/// paused, sequencer down); returns max when feeds are unconfigured.
function oracleCeiling() public view returns (uint256) {
if (address(spcxUsdFeed) == address(0) || address(ethUsdFeed) == address(0)) {
return type(uint256).max; // oracle guard disabled (test/pre-config only)
}
return _oracleBagValue(BIPS + maxBidPremiumBips);
}
/// @dev Oracle-derived ETH value of one bag scaled by `numeratorBips` (10_000 =
/// fair value). 0 whenever the price cannot be trusted (sequencer down,
/// corporate action, stale/negative feed). Callers must handle the
/// feeds-unconfigured case themselves.
function _oracleBagValue(uint256 numeratorBips) internal view returns (uint256) {
if (!_sequencerOk()) return 0;
if (spcx.oraclePaused()) return 0; // corporate action in progress
(, int256 spcxUsd,, uint256 spcxAt,) = spcxUsdFeed.latestRoundData();
(, int256 ethUsd,, uint256 ethAt,) = ethUsdFeed.latestRoundData();
if (spcxUsd <= 0 || ethUsd <= 0) return 0;
if (maxOracleStaleness != 0) {
if (block.timestamp - spcxAt > maxOracleStaleness) return 0;
if (block.timestamp - ethAt > maxOracleStaleness) return 0;
}
// both feeds are 8-decimal: fairWei = bagSize(1e18) * spcxUsd / ethUsd.
// Single fused division preserves precision (multiply before divide).
return (bagSize * uint256(spcxUsd) * numeratorBips) / (uint256(ethUsd) * BIPS);
}
/// @notice The actual bid a keeper can fill right now.
function availableFunds() public view returns (uint256) {
uint256 f = currentFees;
uint256 ramp = timeRampMax();
uint256 ceil = oracleCeiling();
uint256 bound = ramp < ceil ? ramp : ceil;
return bound < f ? bound : f;
}
function _sequencerOk() internal view returns (bool) {
if (address(sequencerUptimeFeed) == address(0)) return true;
(, int256 up, uint256 startedAt,,) = sequencerUptimeFeed.latestRoundData();
if (up != 0) return false; // 1 = sequencer down
if (startedAt == 0) return false; // invalid round
return block.timestamp - startedAt > sequencerGracePeriod;
}
/* ─────────────────────────── buy side (bids) ───────────────────────────── */
/// @notice Keeper delivers exactly `bagSize` SPCX and receives `availableFunds()`
/// ETH; the bag is relisted at that price × priceMultiplier. The strategy
/// never market-buys SPCX itself, so it takes no slippage — keepers arb
/// our bid against the market, and the oracle ceiling caps overpay.
function buyBag() external nonReentrant {
uint256 funds = availableFunds();
if (funds == 0) revert NoZeroBuys();
uint256 bagId = ++lastBagId;
uint256 balBefore = spcx.balanceOf(address(this));
SafeTransferLib.safeTransferFrom(address(spcx), msg.sender, address(this), bagSize);
if (spcx.balanceOf(address(this)) != balBefore + bagSize) revert BalanceMismatch();
currentFees -= funds;
uint256 listPrice = funds * priceMultiplier / MULT_DENOM;
onSale[bagId] = listPrice;
listMultiplier[bagId] = spcx.uiMultiplier();
lastBuyTime = block.timestamp;
SafeTransferLib.forceSafeTransferETH(msg.sender, funds);
emit BagBought(bagId, msg.sender, funds, listPrice);
}
/* ─────────────────────────── sell side (bags) ──────────────────────────── */
/// @notice Buy a listed bag: pay the exact list price in ETH, receive `bagSize`
/// SPCX. Proceeds queue for buyback-and-burn.
/// @dev Refuses to fill during a corporate action (`oraclePaused`) or if the
/// SPCX `uiMultiplier` changed since listing — either means the list
/// price predates a per-token value re-base and would let a sniper buy
/// the bag below (or above) fair value. Stranded bags are re-anchored
/// by `repriceBag` once the oracle is live again. Weekend oracle
/// staleness deliberately does NOT block sales (prices drift, they
/// don't re-base).
function sellBag(uint256 bagId) external payable nonReentrant {
uint256 price = onSale[bagId];
if (price == 0) revert NotForSale();
if (msg.value != price) revert WrongPrice();
if (spcx.oraclePaused()) revert OraclePaused();
if (spcx.uiMultiplier() != listMultiplier[bagId]) revert StaleListing();
delete onSale[bagId];
delete listMultiplier[bagId];
ethToTwap += price;
SafeTransferLib.safeTransfer(address(spcx), msg.sender, bagSize);
emit BagSold(bagId, msg.sender, price);
}
/// @notice Re-anchor a bag stranded by a corporate action: the new list price
/// is derived from the LIVE oracle (fair value × priceMultiplier), so
/// the owner cannot choose a price — only refresh it. Reverts while the
/// oracle is paused/stale/unset (migrate() remains the last resort).
function repriceBag(uint256 bagId) external onlyOwner {
if (onSale[bagId] == 0) revert NotForSale();
if (address(spcxUsdFeed) == address(0) || address(ethUsdFeed) == address(0)) revert OracleStale();
// priceMultiplier is per-mille; scale to bips for the fused division.
// (BIPS is an exact multiple of MULT_DENOM, so this loses no precision.)
uint256 newPrice = _oracleBagValue(priceMultiplier * BIPS / MULT_DENOM);
if (newPrice == 0) revert OracleStale();
uint256 mult = spcx.uiMultiplier();
onSale[bagId] = newPrice;
listMultiplier[bagId] = mult;
emit BagRepriced(bagId, newPrice, mult);
}
/* ────────────────────────── buyback and burn ───────────────────────────── */
/// @notice Spend queued sale proceeds to buy SPCXSTR from the hooked pool and
/// burn it. TWAP-paced; caller earns a small reward.
function processBuyback() external nonReentrant {
uint256 queued = ethToTwap;
if (queued == 0) revert NoEthToTwap();
if (block.timestamp < lastTwapTime + twapDelaySeconds) revert TwapDelayNotMet();
uint256 spend = queued < twapIncrement ? queued : twapIncrement;
uint256 reward = spend * buybackRewardBips / BIPS;
uint256 burnSpend = spend - reward;
ethToTwap = queued - spend;
lastTwapTime = block.timestamp;
uint256 burned = abi.decode(poolManager.unlock(abi.encode(burnSpend)), (uint256));
if (reward != 0) SafeTransferLib.forceSafeTransferETH(msg.sender, reward);
emit BoughtBackAndBurned(burnSpend, burned, msg.sender, reward);
}
/// @notice V4 unlock callback: performs the ETH→SPCXSTR→DEAD buyback swap.
function unlockCallback(bytes calldata data) external returns (bytes memory) {
if (msg.sender != address(poolManager)) revert OnlyPoolManager();
uint256 ethIn = abi.decode(data, (uint256));
PoolKey memory key = _poolKey();
(uint160 sqrtPriceX96,,,) = poolManager.getSlot0(key.toId());
// zeroForOne (ETH→SPCXSTR) moves price down; floor the sqrtPrice to bound impact.
uint160 limit = uint160(uint256(sqrtPriceX96) * (BIPS - maxBuybackSlippageBips) / BIPS);
BalanceDelta delta = poolManager.swap(
key, SwapParams({zeroForOne: true, amountSpecified: -int256(ethIn), sqrtPriceLimitX96: limit}), ""
);
// exact-input must be fully consumed — a partial fill means the price bound
// was hit (possible sandwich), so revert rather than burn at a bad price.
if (int256(delta.amount0()) != -int256(ethIn)) revert IncompleteSwap();
key.currency0.settle(poolManager, address(this), ethIn, false); // pay ETH
uint256 out = uint256(uint128(delta.amount1())); // SPCXSTR received (post hook fee)
key.currency1.take(poolManager, DEAD, out, false); // burn
return abi.encode(out);
}
function _poolKey() internal view returns (PoolKey memory) {
return PoolKey(Currency.wrap(address(0)), Currency.wrap(spcxstr), 0, 60, IHooks(hook));
}
receive() external payable {}
}[
{
"type": "constructor",
"inputs": [
{
"name": "spcxstr_",
"type": "address",
"internalType": "address"
},
{
"name": "spcx_",
"type": "address",
"internalType": "address"
},
{
"name": "poolManager_",
"type": "address",
"internalType": "contract IPoolManager"
},
{
"name": "owner_",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "nonpayable"
},
{
"name": "AlreadyInitialized",
"type": "error",
"inputs": []
},
{
"name": "BagsAlreadyBought",
"type": "error",
"inputs": []
},
{
"name": "BalanceMismatch",
"type": "error",
"inputs": []
},
{
"name": "HookAlreadySet",
"type": "error",
"inputs": []
},
{
"name": "IncompleteSwap",
"type": "error",
"inputs": []
},
{
"name": "InvalidMultiplier",
"type": "error",
"inputs": []
},
{
"name": "InvalidParam",
"type": "error",
"inputs": []
},
{
"name": "NewOwnerIsZeroAddress",
"type": "error",
"inputs": []
},
{
"name": "NoEthToTwap",
"type": "error",
"inputs": []
},
{
"name": "NoHandoverRequest",
"type": "error",
"inputs": []
},
{
"name": "NoZeroBuys",
"type": "error",
"inputs": []
},
{
"name": "NotForSale",
"type": "error",
"inputs": []
},
{
"name": "OnlyHook",
"type": "error",
"inputs": []
},
{
"name": "OnlyPoolManager",
"type": "error",
"inputs": []
},
{
"name": "OraclePaused",
"type": "error",
"inputs": []
},
{
"name": "OracleStale",
"type": "error",
"inputs": []
},
{
"name": "Reentrancy",
"type": "error",
"inputs": []
},
{
"name": "SequencerDown",
"type": "error",
"inputs": []
},
{
"name": "StaleListing",
"type": "error",
"inputs": []
},
{
"name": "TwapDelayNotMet",
"type": "error",
"inputs": []
},
{
"name": "Unauthorized",
"type": "error",
"inputs": []
},
{
"name": "WrongPrice",
"type": "error",
"inputs": []
},
{
"name": "ZeroAddress",
"type": "error",
"inputs": []
},
{
"name": "BagBought",
"type": "event",
"inputs": [
{
"name": "bagId",
"type": "uint256",
"indexed": true,
"internalType": "uint256"
},
{
"name": "keeper",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "ethPaid",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
},
{
"name": "listPrice",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "BagRepriced",
"type": "event",
"inputs": [
{
"name": "bagId",
"type": "uint256",
"indexed": true,
"internalType": "uint256"
},
{
"name": "newPrice",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
},
{
"name": "uiMultiplier",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "BagSizeSet",
"type": "event",
"inputs": [
{
"name": "bagSize",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "BagSold",
"type": "event",
"inputs": [
{
"name": "bagId",
"type": "uint256",
"indexed": true,
"internalType": "uint256"
},
{
"name": "buyer",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "price",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "BoughtBackAndBurned",
"type": "event",
"inputs": [
{
"name": "ethIn",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
},
{
"name": "tokensBurned",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
},
{
"name": "keeper",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "reward",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "BuybackSlippageSet",
"type": "event",
"inputs": [
{
"name": "bips",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "FeesAdded",
"type": "event",
"inputs": [
{
"name": "amount",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
},
{
"name": "currentFees",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "HookSet",
"type": "event",
"inputs": [
{
"name": "hook",
"type": "address",
"indexed": true,
"internalType": "address"
}
],
"anonymous": false
},
{
"name": "Migrated",
"type": "event",
"inputs": [
{
"name": "to",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "ethMoved",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
},
{
"name": "spcxMoved",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "OracleParamsSet",
"type": "event",
"inputs": [
{
"name": "maxStaleness",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
},
{
"name": "grace",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
},
{
"name": "premiumBips",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "OraclesSet",
"type": "event",
"inputs": [
{
"name": "spcxUsd",
"type": "address",
"indexed": false,
"internalType": "address"
},
{
"name": "ethUsd",
"type": "address",
"indexed": false,
"internalType": "address"
},
{
"name": "sequencer",
"type": "address",
"indexed": false,
"internalType": "address"
}
],
"anonymous": false
},
{
"name": "OwnershipHandoverCanceled",
"type": "event",
"inputs": [
{
"name": "pendingOwner",
"type": "address",
"indexed": true,
"internalType": "address"
}
],
"anonymous": false
},
{
"name": "OwnershipHandoverRequested",
"type": "event",
"inputs": [
{
"name": "pendingOwner",
"type": "address",
"indexed": true,
"internalType": "address"
}
],
"anonymous": false
},
{
"name": "OwnershipTransferred",
"type": "event",
"inputs": [
{
"name": "oldOwner",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "newOwner",
"type": "address",
"indexed": true,
"internalType": "address"
}
],
"anonymous": false
},
{
"name": "PriceMultiplierSet",
"type": "event",
"inputs": [
{
"name": "multiplier",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "RampParamsSet",
"type": "event",
"inputs": [
{
"name": "buyIncrement",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
},
{
"name": "rampStepSeconds",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "TwapParamsSet",
"type": "event",
"inputs": [
{
"name": "twapIncrement",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
},
{
"name": "twapDelaySeconds",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
},
{
"name": "rewardBips",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "DEAD",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
},
{
"name": "addFees",
"type": "function",
"inputs": [],
"outputs": [],
"stateMutability": "payable"
},
{
"name": "availableFunds",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "bagSize",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "buyBag",
"type": "function",
"inputs": [],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "buyIncrement",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "buybackRewardBips",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "cancelOwnershipHandover",
"type": "function",
"inputs": [],
"outputs": [],
"stateMutability": "payable"
},
{
"name": "completeOwnershipHandover",
"type": "function",
"inputs": [
{
"name": "pendingOwner",
"type": "address",
"internalType": "address"
}
],
"outputs": [],
"stateMutability": "payable"
},
{
"name": "currentFees",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "ethToTwap",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "ethUsdFeed",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "contract IChainlinkFeed"
}
],
"stateMutability": "view"
},
{
"name": "hook",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
},
{
"name": "lastBagId",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "lastBuyTime",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "lastTwapTime",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "listMultiplier",
"type": "function",
"inputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "maxBidPremiumBips",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "maxBuybackSlippageBips",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "maxOracleStaleness",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "migrate",
"type": "function",
"inputs": [
{
"name": "to",
"type": "address",
"internalType": "address"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "onSale",
"type": "function",
"inputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "oracleCeiling",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "owner",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "result",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
},
{
"name": "ownershipHandoverExpiresAt",
"type": "function",
"inputs": [
{
"name": "pendingOwner",
"type": "address",
"internalType": "address"
}
],
"outputs": [
{
"name": "result",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "poolManager",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "contract IPoolManager"
}
],
"stateMutability": "view"
},
{
"name": "priceMultiplier",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "processBuyback",
"type": "function",
"inputs": [],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "rampStepSeconds",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "renounceOwnership",
"type": "function",
"inputs": [],
"outputs": [],
"stateMutability": "payable"
},
{
"name": "repriceBag",
"type": "function",
"inputs": [
{
"name": "bagId",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "requestOwnershipHandover",
"type": "function",
"inputs": [],
"outputs": [],
"stateMutability": "payable"
},
{
"name": "sellBag",
"type": "function",
"inputs": [
{
"name": "bagId",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [],
"stateMutability": "payable"
},
{
"name": "sequencerGracePeriod",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "sequencerUptimeFeed",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "contract IChainlinkFeed"
}
],
"stateMutability": "view"
},
{
"name": "setBagSize",
"type": "function",
"inputs": [
{
"name": "bagSize_",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "setBuybackSlippage",
"type": "function",
"inputs": [
{
"name": "bips",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "setHook",
"type": "function",
"inputs": [
{
"name": "hook_",
"type": "address",
"internalType": "address"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "setOracleParams",
"type": "function",
"inputs": [
{
"name": "maxStaleness",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "grace",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "premiumBips",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "setOracles",
"type": "function",
"inputs": [
{
"name": "spcxUsd",
"type": "address",
"internalType": "address"
},
{
"name": "ethUsd",
"type": "address",
"internalType": "address"
},
{
"name": "sequencer",
"type": "address",
"internalType": "address"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "setPriceMultiplier",
"type": "function",
"inputs": [
{
"name": "m",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "setRampParams",
"type": "function",
"inputs": [
{
"name": "buyIncrement_",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "rampStepSeconds_",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "setTwapParams",
"type": "function",
"inputs": [
{
"name": "twapIncrement_",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "twapDelaySeconds_",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "rewardBips_",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "spcx",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "contract ISpcxToken"
}
],
"stateMutability": "view"
},
{
"name": "spcxUsdFeed",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "contract IChainlinkFeed"
}
],
"stateMutability": "view"
},
{
"name": "spcxstr",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
},
{
"name": "timeRampMax",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "transferOwnership",
"type": "function",
"inputs": [
{
"name": "newOwner",
"type": "address",
"internalType": "address"
}
],
"outputs": [],
"stateMutability": "payable"
},
{
"name": "twapDelaySeconds",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "twapIncrement",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "unlockCallback",
"type": "function",
"inputs": [
{
"name": "data",
"type": "bytes",
"internalType": "bytes"
}
],
"outputs": [
{
"name": "",
"type": "bytes",
"internalType": "bytes"
}
],
"stateMutability": "nonpayable"
},
{
"type": "receive",
"stateMutability": "payable"
}
]0x60e0346101b457601f6132c738819003918201601f19168301916001600160401b038311848410176101b8578084926080946040528339810103126101b457610047816101cc565b610053602083016101cc565b60408301516001600160a01b038116939092908484036101b457606061007991016101cc565b936001600160a01b038216159081156101a2575b8115610199575b508015610188575b6101795760a0526001600160a01b0390811660c05260809190915216638b78c6d8198190555f7f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08180a36104b0600455600c600955600c80556032600e5562015f90601255610e1060135561012c6014556101f460155542600a556040516130e690816101e1823960805181818161043501528181610a6401526110fa015260a051818181610dea015261119d015260c0518181816105b1015281816107fe01528181610f7501528181611e41015281816121980152612cde0152f35b63d92e233d60e01b5f5260045ffd5b506001600160a01b0384161561009c565b9050155f610094565b6001600160a01b03841615915061008d565b5f80fd5b634e487b7160e01b5f52604160045260245ffd5b51906001600160a01b03821682036101b45756fe6080604052600436101561001a575b3615610018575f80fd5b005b5f803560e01c8063026c3cd11461292657806303fd2a45146128ec57806308db8529146128b157806309d32681146126605780630cf4902c1461262557806319d6150d146125755780632081c4ea146124c757806323b2f3921461248c578063256929621461242557806326a97b94146123ea578063289d4a5e146123af5780632d153c621461211c578063369bad2514611da05780633dfd387314611c8957806346fcff4c14611c5157806347ccd96414611c16578063514886da14611bdb57806353b70cfc14611b5957806354d1f13d14611af7578063587bcce914611aaf5780635d9644c414611a74578063715018a6146119d75780637ac1cb8d146119625780637f5a7c7b146119125780638009b7bd146118c15780638ae9faa5146118815780638cb5bacf146117cd5780638da5cb5b1461175d57806391dd734614611074578063935e548514611038578063a0a61eb114610f99578063a187895b14610f2a578063a726470514610ed8578063a76912d114610e9c578063a92064ec14610e4a578063a94b990814610e0e578063b0a8925b14610d9f578063b43a76f114610d57578063c375394c14610c8d578063c3af484f14610c51578063cd61794314610958578063ce5494bb14610755578063d4be0a5d146104d1578063d50cb88b14610495578063daa5a0c614610459578063dc4c90d3146103ea578063ec078821146103ae578063f04e283e14610342578063f29f4d0b14610306578063f2fde38b146102a95763fee81cf414610256575061000e565b346102a65760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102a65761028d61295e565b9063389a75e1600c5252602080600c2054604051908152f35b80fd5b5060207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102a6576102dc61295e565b6102e4612edb565b8060601b156102f9576102f690612fb1565b80f35b637448fbae82526004601cfd5b50346102a657807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102a6576020600a54604051908152f35b5060207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102a65761037561295e565b61037d612edb565b63389a75e1600c528082526020600c20805442116103a15790826102f69255612fb1565b636f5e881883526004601cfd5b50346102a657807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102a6576020600b54604051908152f35b50346102a657807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102a657602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b50346102a657807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102a6576020600d54604051908152f35b50346102a657807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102a6576020600454604051908152f35b50346102a65760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102a65760043561050c612edb565b808252600560205260408220541561072d5773ffffffffffffffffffffffffffffffffffffffff600f541615801561070d575b6106e55760045461271081029080820461271014901517156106b8576103e86105689104612c8e565b8015610690576040517fa60bf13d00000000000000000000000000000000000000000000000000000000815260208160048173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa90811561068557849161062f575b507fa678cb9ebadf6928d00605561a22c5d76dffa64c35f0f992e82fc6b20aeafb5991604091848652600560205281838720558486526006602052808387205582519182526020820152a280f35b90506020813d60201161067d575b8161064a60209383612aaf565b8101031261067957517fa678cb9ebadf6928d00605561a22c5d76dffa64c35f0f992e82fc6b20aeafb596105e1565b5f80fd5b3d915061063d565b6040513d86823e3d90fd5b6004837f04578698000000000000000000000000000000000000000000000000000000008152fd5b6024837f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b6004827f04578698000000000000000000000000000000000000000000000000000000008152fd5b5073ffffffffffffffffffffffffffffffffffffffff601054161561053f565b6004827f1d99ddbf000000000000000000000000000000000000000000000000000000008152fd5b50346102a65760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102a65761078d61295e565b610795612edb565b3068929eee149b4bd21268541461094b573068929eee149b4bd212685573ffffffffffffffffffffffffffffffffffffffff8116908115610923576040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16602082602481845afa9182156109185785926108c2575b5091817fd083678824038160bef3975359ab29f19c3f0e9bcf9d7ead540a492d4d678b639381836040956108b1575b505050479182806108a1575b505082519182526020820152a23868929eee149b4bd212685580f35b6108aa91612f6c565b5f82610885565b6108ba92612f12565b5f8183610879565b9150916020823d602011610910575b816108de60209383612aaf565b8101031261067957905190917fd083678824038160bef3975359ab29f19c3f0e9bcf9d7ead540a492d4d678b6361084a565b3d91506108d1565b6040513d87823e3d90fd5b6004837fd92e233d000000000000000000000000000000000000000000000000000000008152fd5b63ab143c0682526004601cfd5b50346102a657807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102a6573068929eee149b4bd212685414610c44573068929eee149b4bd21268556002548015610c1c576109bc600d54600c5490612a01565b4210610bf457600b5480821015610beb5750610a4a815b6109f76127106109e5600e5484612b3d565b04916109f18382612b30565b94612b30565b60025542600d558360405184602082015260208152610a17604082612aaf565b604051809481927f48c89491000000000000000000000000000000000000000000000000000000008352600483016129b9565b03818373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165af1918215610685578492610b08575b5060208251928180820194859201010312610679577fc07783c038d43701a0e2b01afd63641c9affb7729c7b36b0160588ed66199af9915181610af9575b6040805194855260208501919091528301523391606090a23868929eee149b4bd212685580f35b610b038233612f6c565b610ad2565b9091503d8085833e610b1a8183612aaf565b810190602081830312610be35780519067ffffffffffffffff8211610be7570181601f82011215610be357805167ffffffffffffffff8111610bb65790859160405193610b8f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160186612aaf565b81855260208284010111610bb2578060208093018386015e83010152905f610a94565b8280fd5b6024867f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b8480fd5b8580fd5b610a4a906109d3565b6004827f53f77c5b000000000000000000000000000000000000000000000000000000008152fd5b6004827f1da03e94000000000000000000000000000000000000000000000000000000008152fd5b63ab143c0690526004601cfd5b50346102a657807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102a6576020600954604051908152f35b50346102a65760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102a657600435610cc8612edb565b8015610d2f57600754610d07576020817f4d7360cabe4f100d78f270f1b644426728f8afd6eb7ae667d9dc71ef9697f72892600355604051908152a180f35b6004827f1c35068e000000000000000000000000000000000000000000000000000000008152fd5b6004827fd2529034000000000000000000000000000000000000000000000000000000008152fd5b50346102a65760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102a65760406020916004358152600583522054604051908152f35b50346102a657807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102a657602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b50346102a657807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102a6576020600854604051908152f35b50346102a657807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102a657602073ffffffffffffffffffffffffffffffffffffffff600f5416604051908152f35b50346102a657807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102a6576020600e54604051908152f35b50346102a657807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102a657602073ffffffffffffffffffffffffffffffffffffffff60115416604051908152f35b50346102a657807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102a657602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b50346102a657610fa836612981565b9291610fb2612edb565b61271084116110105761100a7f0837bb025bdcd1e5bd165a85c7b3ce8854fb0ca23e4a97d38bc24a4169c05bad9394826012558360135580601455604051938493846040919493926060820195825260208201520152565b0390a180f35b6004837fd2529034000000000000000000000000000000000000000000000000000000008152fd5b50346102a657807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102a6576020601254604051908152f35b50346106795760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610679576004359067ffffffffffffffff8211610679573660238301121561067957816004013567ffffffffffffffff8111610679578201913660248401116106795773ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169283330361173557602090829003126106795760240135915f608060405161114181612a93565b828152826020820152826040820152826060820152015273ffffffffffffffffffffffffffffffffffffffff5f5416906040519161117e83612a93565b5f8352602083019273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016845260408101915f83526060820190603c82526080830190815260a083206040516020810191825260066040820152604081526111fb606082612aaf565b519020604051907f1e2eaeaf0000000000000000000000000000000000000000000000000000000082526004820152602081602481895afa908115611642575f91611703575b506015546127100361271081116116d6576112766127109173ffffffffffffffffffffffffffffffffffffffff809416612b3d565b04169061128289612c19565b9060405190606082019082821067ffffffffffffffff8311176116a95773ffffffffffffffffffffffffffffffffffffffff95869260405260018452602084019485526040840195865262ffffff604051997ff3cd914c000000000000000000000000000000000000000000000000000000008b52848a511660048c0152848d511660248c0152511660448a01525160020b60648901525116608487015251151560a48601525160c4850152511660e48301526101206101048301525f610124830152602082610144815f875af1918215611642575f92611675575b5061136886612c19565b8260801d600f0b0361164d575173ffffffffffffffffffffffffffffffffffffffff16806114d8575060049060208596604096959651938480927f11da60b4000000000000000000000000000000000000000000000000000000008252875af19081156106855773ffffffffffffffffffffffffffffffffffffffff926fffffffffffffffffffffffffffffffff926114a9575b505b1693511690803b15610bb2576064839260405194859384927f0b0d9c09000000000000000000000000000000000000000000000000000000008452600484015261dead60248401528760448401525af1801561149e57611485575b6114818260405190602082015260208152611475604082612aaf565b604051918291826129b9565b0390f35b611490838092612aaf565b61149a5781611459565b5080fd5b6040513d85823e3d90fd5b6114ca9060203d6020116114d1575b6114c28183612aaf565b810190612b21565b505f6113fc565b503d6114b8565b94823b15610679576040517fa58411940000000000000000000000000000000000000000000000000000000081528660048201525f8160248183885af1801561164257611628575b509360208196604483969760405194859384927fa9059cbb00000000000000000000000000000000000000000000000000000000845289600485015260248401525af18015610685576115f9575b50604051907f11da60b400000000000000000000000000000000000000000000000000000000825260208260048187875af19081156106855773ffffffffffffffffffffffffffffffffffffffff926fffffffffffffffffffffffffffffffff926115da575b506113fe565b6115f29060203d6020116114d1576114c28183612aaf565b505f6115d4565b61161a9060203d602011611621575b6116128183612aaf565b810190612b09565b505f61156e565b503d611608565b60449495505f61163791612aaf565b60205f959450611520565b6040513d5f823e3d90fd5b7fd613b22d000000000000000000000000000000000000000000000000000000005f5260045ffd5b9091506020813d6020116116a1575b8161169160209383612aaf565b810103126106795751905f61135e565b3d9150611684565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b90506020813d60201161172d575b8161171e60209383612aaf565b8101031261067957515f611241565b3d9150611711565b7ff655705d000000000000000000000000000000000000000000000000000000005f5260045ffd5b34610679575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126106795760207fffffffffffffffffffffffffffffffffffffffffffffffffffffffff748739275473ffffffffffffffffffffffffffffffffffffffff60405191168152f35b346106795760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126106795760043560243561180a612edb565b81158015611879575b61185157816040917fa040f2164762816a3f1cb1056835683dbc82e4887a5c6625916b882a76d082d3936008558060095582519182526020820152a1005b7fd2529034000000000000000000000000000000000000000000000000000000005f5260045ffd5b508015611813565b34610679575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126106795760206118b9612bbe565b604051908152f35b34610679575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261067957602073ffffffffffffffffffffffffffffffffffffffff60105416604051908152f35b34610679575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261067957602073ffffffffffffffffffffffffffffffffffffffff5f5416604051908152f35b346106795760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126106795760043561199c612edb565b612710811015611851576020817fede5c7fd6d0b185f3baba0878672f144c550c54488d17db9201a37aabba4168a92601555604051908152a1005b5f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261067957611a08612edb565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffff74873927547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a35f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffff7487392755005b34610679575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610679576020600154604051908152f35b346106795760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610679576004355f526006602052602060405f2054604051908152f35b5f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126106795763389a75e1600c52335f525f6020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c925f80a2005b3461067957611b6736612981565b91611b70612edb565b80158015611bd0575b61185157611bcb7f1cc22786012e832d0ff9962e1322117ee7df107b2b0530b8118d433adf23197a9382600b5583600c5580600e55604051938493846040919493926060820195825260208201520152565b0390a1005b506103e88311611b79565b34610679575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610679576020601454604051908152f35b34610679575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610679576020600354604051908152f35b34610679575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126106795760206118b9612b87565b346106795760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261067957611cc061295e565b611cc8612edb565b5f549073ffffffffffffffffffffffffffffffffffffffff8216611d785773ffffffffffffffffffffffffffffffffffffffff16908115611d50577fffffffffffffffffffffffff0000000000000000000000000000000000000000829116175f557f4eab7b127c764308788622363ad3e9532de3dfba7845bd4f84c125a22544255a5f80a2005b7fd92e233d000000000000000000000000000000000000000000000000000000005f5260045ffd5b7fbef9156a000000000000000000000000000000000000000000000000000000005f5260045ffd5b34610679575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610679573068929eee149b4bd21268541461210f573068929eee149b4bd2126855611df3612b87565b80156120e7576007547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146116d6576001018060075573ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000166040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152602081602481855afa908115611642575f916120b5575b506003549060405191606052306040523360601b602c526f23b872dd000000000000000000000000600c5260205f6064601c82875af18060015f51141615612097575b505f606052816040527f70a08231000000000000000000000000000000000000000000000000000000008252306004830152602082602481865afa918215611642575f92612061575b50600354611f3d91612a01565b0361203957611f4e83600154612b30565b600155600460206103e8611f63835487612b3d565b0492845f52600582528360405f2055604051928380927fa60bf13d0000000000000000000000000000000000000000000000000000000082525afa908115611642575f91612007575b50825f52600660205260405f205542600a55611fc88333612f6c565b60405192835260208301527f1fe8ed43f2344d128a200adb8e95f5b9c8710ac784649cf5a7261885ceb23f9460403393a33868929eee149b4bd2126855005b90506020813d602011612031575b8161202260209383612aaf565b81010312610679575184611fac565b3d9150612015565b7fca3e0a68000000000000000000000000000000000000000000000000000000005f5260045ffd5b9091506020813d60201161208f575b8161207d60209383612aaf565b81010312610679575190611f3d611f30565b3d9150612070565b3d843b151710156120a85785611ee7565b637939f4245f526004601cfd5b90506020813d6020116120df575b816120d060209383612aaf565b81010312610679575184611ea4565b3d91506120c3565b7fcdbab9b3000000000000000000000000000000000000000000000000000000005f5260045ffd5b63ab143c065f526004601cfd5b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610679576004353068929eee149b4bd21268541461210f573068929eee149b4bd2126855805f52600560205260405f20549081156123875781340361235f5773ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000166040517f7706ba52000000000000000000000000000000000000000000000000000000008152602081600481855afa908115611642575f91612340575b50612318576040517fa60bf13d000000000000000000000000000000000000000000000000000000008152602081600481855afa908115611642575f916122e6575b50825f52600660205260405f2054036122be5761228490825f5260056020525f6040812055825f5260066020525f604081205561227684600254612a01565b600255600354903390612f12565b6040519182527fccbfc950b2ca60992bb036ed79625645bb37c518e2edba96c92ee83d3fd2dd2e60203393a33868929eee149b4bd2126855005b7f4b19d294000000000000000000000000000000000000000000000000000000005f5260045ffd5b90506020813d602011612310575b8161230160209383612aaf565b81010312610679575184612237565b3d91506122f4565b7fe28b7053000000000000000000000000000000000000000000000000000000005f5260045ffd5b612359915060203d602011611621576116128183612aaf565b846121f5565b7ff7760f25000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f1d99ddbf000000000000000000000000000000000000000000000000000000005f5260045ffd5b34610679575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610679576020600c54604051908152f35b34610679575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610679576020601354604051908152f35b5f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126106795763389a75e1600c52335f526202a30042016020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d5f80a2005b34610679575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610679576020600254604051908152f35b346106795760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261067957600435612501612edb565b61044c8110801561256a575b612542576020817f119541de79a603fd8cff0c014865b6f5a36f949d7b633d004e690bdc3d45798a92600455604051908152a1005b7f6f12f3dc000000000000000000000000000000000000000000000000000000005f5260045ffd5b50612710811161250d565b5f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126106795773ffffffffffffffffffffffffffffffffffffffff5f541633036125fd577fa592bbe8ace050fe5864f981691cd6da4c9b6ecf98b6c9784a991c1645be7f3e60406125eb34600154612a01565b806001558151903482526020820152a1005b7f5a91834f000000000000000000000000000000000000000000000000000000005f5260045ffd5b34610679575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610679576020601554604051908152f35b346106795760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126106795761269761295e565b60243573ffffffffffffffffffffffffffffffffffffffff8116809103610679576044359173ffffffffffffffffffffffffffffffffffffffff83168093036106795773ffffffffffffffffffffffffffffffffffffffff906126f8612edb565b1680151580612845575b61185157811515806127c9575b611851577fec2584e2294eee2369a6a29d677ed58962b684501c1da2fca152f4ef934f89fb92606092827fffffffffffffffffffffffff0000000000000000000000000000000000000000600f541617600f55807fffffffffffffffffffffffff00000000000000000000000000000000000000006010541617601055817fffffffffffffffffffffffff0000000000000000000000000000000000000000601154161760115560405192835260208301526040820152a1005b506040517f313ce567000000000000000000000000000000000000000000000000000000008152602081600481865afa9081156116425760089160ff915f91612816575b5016141561270f565b612838915060203d60201161283e575b6128308183612aaf565b810190612af0565b8661280d565b503d612826565b506040517f313ce567000000000000000000000000000000000000000000000000000000008152602081600481855afa9081156116425760089160ff915f91612892575b50161415612702565b6128ab915060203d60201161283e576128308183612aaf565b86612889565b34610679575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610679576020600754604051908152f35b34610679575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261067957602060405161dead8152f35b34610679575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126106795760206118b9612a0e565b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361067957565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc606091011261067957600435906024359060443590565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f602060409481855280519182918282880152018686015e5f8582860101520116010190565b919082018092116116d657565b73ffffffffffffffffffffffffffffffffffffffff600f5416158015612a73575b612a4f576014546127100180612710116116d657612a4c90612c8e565b90565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90565b5073ffffffffffffffffffffffffffffffffffffffff6010541615612a2f565b60a0810190811067ffffffffffffffff8211176116a957604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176116a957604052565b90816020910312610679575160ff811681036106795790565b90816020910312610679575180151581036106795790565b90816020910312610679575190565b919082039182116116d657565b818102929181159184041417156116d657565b8115612b5a570490565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b600154612b92612bbe565b612b9a612a0e565b80821015612bb65750905b80821015612bb1575090565b905090565b905090612ba5565b6008548015612bf457612bdf612bd6600a5442612b30565b60095490612b50565b90600182018092116116d657612a4c91612b3d565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90565b7f800000000000000000000000000000000000000000000000000000000000000081146116d6575f0390565b519069ffffffffffffffffffff8216820361067957565b908160a091031261067957612c7081612c45565b91602082015191604081015191612a4c608060608401519301612c45565b612c96613032565b15612eb7576040517f7706ba5200000000000000000000000000000000000000000000000000000000815260208160048173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa908115611642575f91612ebc575b50612eb757600460a073ffffffffffffffffffffffffffffffffffffffff600f5416604051928380927ffeaf968c0000000000000000000000000000000000000000000000000000000082525afa918215611642576004925f925f91612e8f575b5060a073ffffffffffffffffffffffffffffffffffffffff60105416604051958680927ffeaf968c0000000000000000000000000000000000000000000000000000000082525afa8015611642575f945f91612e57575b505f8413801590612e4d575b612e44576012549182612e16575b505050612df2612df792600354612b3d565b612b3d565b9061271081029080820461271014901517156116d657612a4c91612b50565b612e21839142612b30565b11612e4457612e309042612b30565b11612e3d575f8080612de0565b5050505f90565b50505050505f90565b505f851315612dd2565b9050612e7c91945060a03d60a011612e88575b612e748183612aaf565b810190612c5c565b5095925050935f612dc6565b503d612e6a565b9050612eab91925060a03d60a011612e8857612e748183612aaf565b5093925050915f612d6f565b505f90565b612ed5915060203d602011611621576116128183612aaf565b5f612d0e565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffff74873927543303612f0557565b6382b429005f526004601cfd5b91906014526034526fa9059cbb0000000000000000000000005f5260205f6044601082855af1908160015f51141615612f4e575b50505f603452565b3b153d171015612f5f575f80612f46565b6390b8ec185f526004601cfd5b814710612fa4575f3881808585620186a0f115612f87575050565b601691600b915f526073825360ff602053f015612fa057565b3838fd5b63b12d13eb5f526004601cfd5b73ffffffffffffffffffffffffffffffffffffffff16807fffffffffffffffffffffffffffffffffffffffffffffffffffffffff74873927547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a37fffffffffffffffffffffffffffffffffffffffffffffffffffffffff7487392755565b73ffffffffffffffffffffffffffffffffffffffff6011541680156130d35760a0600491604051928380927ffeaf968c0000000000000000000000000000000000000000000000000000000082525afa908115611642575f905f926130ae575b50612eb7578015612eb7576130a79042612b30565b6013541090565b90506130c9915060a03d60a011612e8857612e748183612aaf565b505091505f613092565b5060019056fea164736f6c634300081a000a000000000000000000000000c132d52a2f77c22c53157a99e6312d9d59dfe35d0000000000000000000000004a0e65a3eccec6dbe60ae065f2e7bb85fae35eea0000000000000000000000008366a39cc670b4001a1121b8f6a443a643e40951000000000000000000000000ef8a9dd809a282310237d8505d351a3acd2df329
0x6080604052600436101561001a575b3615610018575f80fd5b005b5f803560e01c8063026c3cd11461292657806303fd2a45146128ec57806308db8529146128b157806309d32681146126605780630cf4902c1461262557806319d6150d146125755780632081c4ea146124c757806323b2f3921461248c578063256929621461242557806326a97b94146123ea578063289d4a5e146123af5780632d153c621461211c578063369bad2514611da05780633dfd387314611c8957806346fcff4c14611c5157806347ccd96414611c16578063514886da14611bdb57806353b70cfc14611b5957806354d1f13d14611af7578063587bcce914611aaf5780635d9644c414611a74578063715018a6146119d75780637ac1cb8d146119625780637f5a7c7b146119125780638009b7bd146118c15780638ae9faa5146118815780638cb5bacf146117cd5780638da5cb5b1461175d57806391dd734614611074578063935e548514611038578063a0a61eb114610f99578063a187895b14610f2a578063a726470514610ed8578063a76912d114610e9c578063a92064ec14610e4a578063a94b990814610e0e578063b0a8925b14610d9f578063b43a76f114610d57578063c375394c14610c8d578063c3af484f14610c51578063cd61794314610958578063ce5494bb14610755578063d4be0a5d146104d1578063d50cb88b14610495578063daa5a0c614610459578063dc4c90d3146103ea578063ec078821146103ae578063f04e283e14610342578063f29f4d0b14610306578063f2fde38b146102a95763fee81cf414610256575061000e565b346102a65760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102a65761028d61295e565b9063389a75e1600c5252602080600c2054604051908152f35b80fd5b5060207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102a6576102dc61295e565b6102e4612edb565b8060601b156102f9576102f690612fb1565b80f35b637448fbae82526004601cfd5b50346102a657807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102a6576020600a54604051908152f35b5060207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102a65761037561295e565b61037d612edb565b63389a75e1600c528082526020600c20805442116103a15790826102f69255612fb1565b636f5e881883526004601cfd5b50346102a657807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102a6576020600b54604051908152f35b50346102a657807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102a657602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000008366a39cc670b4001a1121b8f6a443a643e40951168152f35b50346102a657807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102a6576020600d54604051908152f35b50346102a657807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102a6576020600454604051908152f35b50346102a65760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102a65760043561050c612edb565b808252600560205260408220541561072d5773ffffffffffffffffffffffffffffffffffffffff600f541615801561070d575b6106e55760045461271081029080820461271014901517156106b8576103e86105689104612c8e565b8015610690576040517fa60bf13d00000000000000000000000000000000000000000000000000000000815260208160048173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000004a0e65a3eccec6dbe60ae065f2e7bb85fae35eea165afa90811561068557849161062f575b507fa678cb9ebadf6928d00605561a22c5d76dffa64c35f0f992e82fc6b20aeafb5991604091848652600560205281838720558486526006602052808387205582519182526020820152a280f35b90506020813d60201161067d575b8161064a60209383612aaf565b8101031261067957517fa678cb9ebadf6928d00605561a22c5d76dffa64c35f0f992e82fc6b20aeafb596105e1565b5f80fd5b3d915061063d565b6040513d86823e3d90fd5b6004837f04578698000000000000000000000000000000000000000000000000000000008152fd5b6024837f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b6004827f04578698000000000000000000000000000000000000000000000000000000008152fd5b5073ffffffffffffffffffffffffffffffffffffffff601054161561053f565b6004827f1d99ddbf000000000000000000000000000000000000000000000000000000008152fd5b50346102a65760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102a65761078d61295e565b610795612edb565b3068929eee149b4bd21268541461094b573068929eee149b4bd212685573ffffffffffffffffffffffffffffffffffffffff8116908115610923576040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201527f0000000000000000000000004a0e65a3eccec6dbe60ae065f2e7bb85fae35eea73ffffffffffffffffffffffffffffffffffffffff16602082602481845afa9182156109185785926108c2575b5091817fd083678824038160bef3975359ab29f19c3f0e9bcf9d7ead540a492d4d678b639381836040956108b1575b505050479182806108a1575b505082519182526020820152a23868929eee149b4bd212685580f35b6108aa91612f6c565b5f82610885565b6108ba92612f12565b5f8183610879565b9150916020823d602011610910575b816108de60209383612aaf565b8101031261067957905190917fd083678824038160bef3975359ab29f19c3f0e9bcf9d7ead540a492d4d678b6361084a565b3d91506108d1565b6040513d87823e3d90fd5b6004837fd92e233d000000000000000000000000000000000000000000000000000000008152fd5b63ab143c0682526004601cfd5b50346102a657807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102a6573068929eee149b4bd212685414610c44573068929eee149b4bd21268556002548015610c1c576109bc600d54600c5490612a01565b4210610bf457600b5480821015610beb5750610a4a815b6109f76127106109e5600e5484612b3d565b04916109f18382612b30565b94612b30565b60025542600d558360405184602082015260208152610a17604082612aaf565b604051809481927f48c89491000000000000000000000000000000000000000000000000000000008352600483016129b9565b03818373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000008366a39cc670b4001a1121b8f6a443a643e40951165af1918215610685578492610b08575b5060208251928180820194859201010312610679577fc07783c038d43701a0e2b01afd63641c9affb7729c7b36b0160588ed66199af9915181610af9575b6040805194855260208501919091528301523391606090a23868929eee149b4bd212685580f35b610b038233612f6c565b610ad2565b9091503d8085833e610b1a8183612aaf565b810190602081830312610be35780519067ffffffffffffffff8211610be7570181601f82011215610be357805167ffffffffffffffff8111610bb65790859160405193610b8f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160186612aaf565b81855260208284010111610bb2578060208093018386015e83010152905f610a94565b8280fd5b6024867f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b8480fd5b8580fd5b610a4a906109d3565b6004827f53f77c5b000000000000000000000000000000000000000000000000000000008152fd5b6004827f1da03e94000000000000000000000000000000000000000000000000000000008152fd5b63ab143c0690526004601cfd5b50346102a657807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102a6576020600954604051908152f35b50346102a65760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102a657600435610cc8612edb565b8015610d2f57600754610d07576020817f4d7360cabe4f100d78f270f1b644426728f8afd6eb7ae667d9dc71ef9697f72892600355604051908152a180f35b6004827f1c35068e000000000000000000000000000000000000000000000000000000008152fd5b6004827fd2529034000000000000000000000000000000000000000000000000000000008152fd5b50346102a65760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102a65760406020916004358152600583522054604051908152f35b50346102a657807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102a657602060405173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000c132d52a2f77c22c53157a99e6312d9d59dfe35d168152f35b50346102a657807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102a6576020600854604051908152f35b50346102a657807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102a657602073ffffffffffffffffffffffffffffffffffffffff600f5416604051908152f35b50346102a657807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102a6576020600e54604051908152f35b50346102a657807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102a657602073ffffffffffffffffffffffffffffffffffffffff60115416604051908152f35b50346102a657807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102a657602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000004a0e65a3eccec6dbe60ae065f2e7bb85fae35eea168152f35b50346102a657610fa836612981565b9291610fb2612edb565b61271084116110105761100a7f0837bb025bdcd1e5bd165a85c7b3ce8854fb0ca23e4a97d38bc24a4169c05bad9394826012558360135580601455604051938493846040919493926060820195825260208201520152565b0390a180f35b6004837fd2529034000000000000000000000000000000000000000000000000000000008152fd5b50346102a657807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102a6576020601254604051908152f35b50346106795760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610679576004359067ffffffffffffffff8211610679573660238301121561067957816004013567ffffffffffffffff8111610679578201913660248401116106795773ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000008366a39cc670b4001a1121b8f6a443a643e40951169283330361173557602090829003126106795760240135915f608060405161114181612a93565b828152826020820152826040820152826060820152015273ffffffffffffffffffffffffffffffffffffffff5f5416906040519161117e83612a93565b5f8352602083019273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000c132d52a2f77c22c53157a99e6312d9d59dfe35d16845260408101915f83526060820190603c82526080830190815260a083206040516020810191825260066040820152604081526111fb606082612aaf565b519020604051907f1e2eaeaf0000000000000000000000000000000000000000000000000000000082526004820152602081602481895afa908115611642575f91611703575b506015546127100361271081116116d6576112766127109173ffffffffffffffffffffffffffffffffffffffff809416612b3d565b04169061128289612c19565b9060405190606082019082821067ffffffffffffffff8311176116a95773ffffffffffffffffffffffffffffffffffffffff95869260405260018452602084019485526040840195865262ffffff604051997ff3cd914c000000000000000000000000000000000000000000000000000000008b52848a511660048c0152848d511660248c0152511660448a01525160020b60648901525116608487015251151560a48601525160c4850152511660e48301526101206101048301525f610124830152602082610144815f875af1918215611642575f92611675575b5061136886612c19565b8260801d600f0b0361164d575173ffffffffffffffffffffffffffffffffffffffff16806114d8575060049060208596604096959651938480927f11da60b4000000000000000000000000000000000000000000000000000000008252875af19081156106855773ffffffffffffffffffffffffffffffffffffffff926fffffffffffffffffffffffffffffffff926114a9575b505b1693511690803b15610bb2576064839260405194859384927f0b0d9c09000000000000000000000000000000000000000000000000000000008452600484015261dead60248401528760448401525af1801561149e57611485575b6114818260405190602082015260208152611475604082612aaf565b604051918291826129b9565b0390f35b611490838092612aaf565b61149a5781611459565b5080fd5b6040513d85823e3d90fd5b6114ca9060203d6020116114d1575b6114c28183612aaf565b810190612b21565b505f6113fc565b503d6114b8565b94823b15610679576040517fa58411940000000000000000000000000000000000000000000000000000000081528660048201525f8160248183885af1801561164257611628575b509360208196604483969760405194859384927fa9059cbb00000000000000000000000000000000000000000000000000000000845289600485015260248401525af18015610685576115f9575b50604051907f11da60b400000000000000000000000000000000000000000000000000000000825260208260048187875af19081156106855773ffffffffffffffffffffffffffffffffffffffff926fffffffffffffffffffffffffffffffff926115da575b506113fe565b6115f29060203d6020116114d1576114c28183612aaf565b505f6115d4565b61161a9060203d602011611621575b6116128183612aaf565b810190612b09565b505f61156e565b503d611608565b60449495505f61163791612aaf565b60205f959450611520565b6040513d5f823e3d90fd5b7fd613b22d000000000000000000000000000000000000000000000000000000005f5260045ffd5b9091506020813d6020116116a1575b8161169160209383612aaf565b810103126106795751905f61135e565b3d9150611684565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b90506020813d60201161172d575b8161171e60209383612aaf565b8101031261067957515f611241565b3d9150611711565b7ff655705d000000000000000000000000000000000000000000000000000000005f5260045ffd5b34610679575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126106795760207fffffffffffffffffffffffffffffffffffffffffffffffffffffffff748739275473ffffffffffffffffffffffffffffffffffffffff60405191168152f35b346106795760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126106795760043560243561180a612edb565b81158015611879575b61185157816040917fa040f2164762816a3f1cb1056835683dbc82e4887a5c6625916b882a76d082d3936008558060095582519182526020820152a1005b7fd2529034000000000000000000000000000000000000000000000000000000005f5260045ffd5b508015611813565b34610679575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126106795760206118b9612bbe565b604051908152f35b34610679575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261067957602073ffffffffffffffffffffffffffffffffffffffff60105416604051908152f35b34610679575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261067957602073ffffffffffffffffffffffffffffffffffffffff5f5416604051908152f35b346106795760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126106795760043561199c612edb565b612710811015611851576020817fede5c7fd6d0b185f3baba0878672f144c550c54488d17db9201a37aabba4168a92601555604051908152a1005b5f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261067957611a08612edb565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffff74873927547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a35f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffff7487392755005b34610679575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610679576020600154604051908152f35b346106795760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610679576004355f526006602052602060405f2054604051908152f35b5f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126106795763389a75e1600c52335f525f6020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c925f80a2005b3461067957611b6736612981565b91611b70612edb565b80158015611bd0575b61185157611bcb7f1cc22786012e832d0ff9962e1322117ee7df107b2b0530b8118d433adf23197a9382600b5583600c5580600e55604051938493846040919493926060820195825260208201520152565b0390a1005b506103e88311611b79565b34610679575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610679576020601454604051908152f35b34610679575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610679576020600354604051908152f35b34610679575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126106795760206118b9612b87565b346106795760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261067957611cc061295e565b611cc8612edb565b5f549073ffffffffffffffffffffffffffffffffffffffff8216611d785773ffffffffffffffffffffffffffffffffffffffff16908115611d50577fffffffffffffffffffffffff0000000000000000000000000000000000000000829116175f557f4eab7b127c764308788622363ad3e9532de3dfba7845bd4f84c125a22544255a5f80a2005b7fd92e233d000000000000000000000000000000000000000000000000000000005f5260045ffd5b7fbef9156a000000000000000000000000000000000000000000000000000000005f5260045ffd5b34610679575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610679573068929eee149b4bd21268541461210f573068929eee149b4bd2126855611df3612b87565b80156120e7576007547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146116d6576001018060075573ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000004a0e65a3eccec6dbe60ae065f2e7bb85fae35eea166040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152602081602481855afa908115611642575f916120b5575b506003549060405191606052306040523360601b602c526f23b872dd000000000000000000000000600c5260205f6064601c82875af18060015f51141615612097575b505f606052816040527f70a08231000000000000000000000000000000000000000000000000000000008252306004830152602082602481865afa918215611642575f92612061575b50600354611f3d91612a01565b0361203957611f4e83600154612b30565b600155600460206103e8611f63835487612b3d565b0492845f52600582528360405f2055604051928380927fa60bf13d0000000000000000000000000000000000000000000000000000000082525afa908115611642575f91612007575b50825f52600660205260405f205542600a55611fc88333612f6c565b60405192835260208301527f1fe8ed43f2344d128a200adb8e95f5b9c8710ac784649cf5a7261885ceb23f9460403393a33868929eee149b4bd2126855005b90506020813d602011612031575b8161202260209383612aaf565b81010312610679575184611fac565b3d9150612015565b7fca3e0a68000000000000000000000000000000000000000000000000000000005f5260045ffd5b9091506020813d60201161208f575b8161207d60209383612aaf565b81010312610679575190611f3d611f30565b3d9150612070565b3d843b151710156120a85785611ee7565b637939f4245f526004601cfd5b90506020813d6020116120df575b816120d060209383612aaf565b81010312610679575184611ea4565b3d91506120c3565b7fcdbab9b3000000000000000000000000000000000000000000000000000000005f5260045ffd5b63ab143c065f526004601cfd5b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610679576004353068929eee149b4bd21268541461210f573068929eee149b4bd2126855805f52600560205260405f20549081156123875781340361235f5773ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000004a0e65a3eccec6dbe60ae065f2e7bb85fae35eea166040517f7706ba52000000000000000000000000000000000000000000000000000000008152602081600481855afa908115611642575f91612340575b50612318576040517fa60bf13d000000000000000000000000000000000000000000000000000000008152602081600481855afa908115611642575f916122e6575b50825f52600660205260405f2054036122be5761228490825f5260056020525f6040812055825f5260066020525f604081205561227684600254612a01565b600255600354903390612f12565b6040519182527fccbfc950b2ca60992bb036ed79625645bb37c518e2edba96c92ee83d3fd2dd2e60203393a33868929eee149b4bd2126855005b7f4b19d294000000000000000000000000000000000000000000000000000000005f5260045ffd5b90506020813d602011612310575b8161230160209383612aaf565b81010312610679575184612237565b3d91506122f4565b7fe28b7053000000000000000000000000000000000000000000000000000000005f5260045ffd5b612359915060203d602011611621576116128183612aaf565b846121f5565b7ff7760f25000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f1d99ddbf000000000000000000000000000000000000000000000000000000005f5260045ffd5b34610679575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610679576020600c54604051908152f35b34610679575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610679576020601354604051908152f35b5f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126106795763389a75e1600c52335f526202a30042016020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d5f80a2005b34610679575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610679576020600254604051908152f35b346106795760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261067957600435612501612edb565b61044c8110801561256a575b612542576020817f119541de79a603fd8cff0c014865b6f5a36f949d7b633d004e690bdc3d45798a92600455604051908152a1005b7f6f12f3dc000000000000000000000000000000000000000000000000000000005f5260045ffd5b50612710811161250d565b5f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126106795773ffffffffffffffffffffffffffffffffffffffff5f541633036125fd577fa592bbe8ace050fe5864f981691cd6da4c9b6ecf98b6c9784a991c1645be7f3e60406125eb34600154612a01565b806001558151903482526020820152a1005b7f5a91834f000000000000000000000000000000000000000000000000000000005f5260045ffd5b34610679575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610679576020601554604051908152f35b346106795760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126106795761269761295e565b60243573ffffffffffffffffffffffffffffffffffffffff8116809103610679576044359173ffffffffffffffffffffffffffffffffffffffff83168093036106795773ffffffffffffffffffffffffffffffffffffffff906126f8612edb565b1680151580612845575b61185157811515806127c9575b611851577fec2584e2294eee2369a6a29d677ed58962b684501c1da2fca152f4ef934f89fb92606092827fffffffffffffffffffffffff0000000000000000000000000000000000000000600f541617600f55807fffffffffffffffffffffffff00000000000000000000000000000000000000006010541617601055817fffffffffffffffffffffffff0000000000000000000000000000000000000000601154161760115560405192835260208301526040820152a1005b506040517f313ce567000000000000000000000000000000000000000000000000000000008152602081600481865afa9081156116425760089160ff915f91612816575b5016141561270f565b612838915060203d60201161283e575b6128308183612aaf565b810190612af0565b8661280d565b503d612826565b506040517f313ce567000000000000000000000000000000000000000000000000000000008152602081600481855afa9081156116425760089160ff915f91612892575b50161415612702565b6128ab915060203d60201161283e576128308183612aaf565b86612889565b34610679575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610679576020600754604051908152f35b34610679575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261067957602060405161dead8152f35b34610679575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126106795760206118b9612a0e565b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361067957565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc606091011261067957600435906024359060443590565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f602060409481855280519182918282880152018686015e5f8582860101520116010190565b919082018092116116d657565b73ffffffffffffffffffffffffffffffffffffffff600f5416158015612a73575b612a4f576014546127100180612710116116d657612a4c90612c8e565b90565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90565b5073ffffffffffffffffffffffffffffffffffffffff6010541615612a2f565b60a0810190811067ffffffffffffffff8211176116a957604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176116a957604052565b90816020910312610679575160ff811681036106795790565b90816020910312610679575180151581036106795790565b90816020910312610679575190565b919082039182116116d657565b818102929181159184041417156116d657565b8115612b5a570490565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b600154612b92612bbe565b612b9a612a0e565b80821015612bb65750905b80821015612bb1575090565b905090565b905090612ba5565b6008548015612bf457612bdf612bd6600a5442612b30565b60095490612b50565b90600182018092116116d657612a4c91612b3d565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90565b7f800000000000000000000000000000000000000000000000000000000000000081146116d6575f0390565b519069ffffffffffffffffffff8216820361067957565b908160a091031261067957612c7081612c45565b91602082015191604081015191612a4c608060608401519301612c45565b612c96613032565b15612eb7576040517f7706ba5200000000000000000000000000000000000000000000000000000000815260208160048173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000004a0e65a3eccec6dbe60ae065f2e7bb85fae35eea165afa908115611642575f91612ebc575b50612eb757600460a073ffffffffffffffffffffffffffffffffffffffff600f5416604051928380927ffeaf968c0000000000000000000000000000000000000000000000000000000082525afa918215611642576004925f925f91612e8f575b5060a073ffffffffffffffffffffffffffffffffffffffff60105416604051958680927ffeaf968c0000000000000000000000000000000000000000000000000000000082525afa8015611642575f945f91612e57575b505f8413801590612e4d575b612e44576012549182612e16575b505050612df2612df792600354612b3d565b612b3d565b9061271081029080820461271014901517156116d657612a4c91612b50565b612e21839142612b30565b11612e4457612e309042612b30565b11612e3d575f8080612de0565b5050505f90565b50505050505f90565b505f851315612dd2565b9050612e7c91945060a03d60a011612e88575b612e748183612aaf565b810190612c5c565b5095925050935f612dc6565b503d612e6a565b9050612eab91925060a03d60a011612e8857612e748183612aaf565b5093925050915f612d6f565b505f90565b612ed5915060203d602011611621576116128183612aaf565b5f612d0e565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffff74873927543303612f0557565b6382b429005f526004601cfd5b91906014526034526fa9059cbb0000000000000000000000005f5260205f6044601082855af1908160015f51141615612f4e575b50505f603452565b3b153d171015612f5f575f80612f46565b6390b8ec185f526004601cfd5b814710612fa4575f3881808585620186a0f115612f87575050565b601691600b915f526073825360ff602053f015612fa057565b3838fd5b63b12d13eb5f526004601cfd5b73ffffffffffffffffffffffffffffffffffffffff16807fffffffffffffffffffffffffffffffffffffffffffffffffffffffff74873927547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a37fffffffffffffffffffffffffffffffffffffffffffffffffffffffff7487392755565b73ffffffffffffffffffffffffffffffffffffffff6011541680156130d35760a0600491604051928380927ffeaf968c0000000000000000000000000000000000000000000000000000000082525afa908115611642575f905f926130ae575b50612eb7578015612eb7576130a79042612b30565b6013541090565b90506130c9915060a03d60a011612e8857612e748183612aaf565b505091505f613092565b5060019056fea164736f6c634300081a000a
| Token | Symbol | Balance | Price | Value |
|---|---|---|---|---|
| DIH | 1 | $0.0000102 | $0 |
| Transaction Hash | Method | Block | Age | From | To | Type | Item | ||
|---|---|---|---|---|---|---|---|---|---|
| no NFT transfers for this address yet | |||||||||
| Txn Hash | Age | Event | Topics / Data |
|---|---|---|---|
| 0xdbe155…d2d64e | 39 days agoFri, 10 Jul 2026 00:04:02 UTC | 0xd08367…8b63 | [0] 0x000000000000…84387453 data: 0x000000000000000000…b94e0000 |
| 0x5cbeb1…600f9a | 39 days agoFri, 10 Jul 2026 00:03:15 UTC | 0x0837bb…5bad | data: 0x000000000000000000…00000320 |
| 0x5ca1e4…b79483 | 39 days agoFri, 10 Jul 2026 00:03:11 UTC | 0x0837bb…5bad | data: 0x000000000000000000…0000012c |
| 0xa5a6c3…48f88a | 39 days agoFri, 10 Jul 2026 00:01:39 UTC | 0x1fe8ed…3f94 | [0] 0x000000000000…00000007 [1] 0x000000000000…2bbdb101 data: 0x000000000000000000…141f26d8 |
| 0x804bed…950a25 | 39 days agoFri, 10 Jul 2026 00:00:59 UTC | 0xa592bb…7f3e | data: 0x000000000000000000…087d3440 |
| 0x51e02f…10ac71 | 39 days agoThu, 09 Jul 2026 23:58:49 UTC | 0x1fe8ed…3f94 | [0] 0x000000000000…00000006 [1] 0x000000000000…2bbdb101 data: 0x000000000000000000…7a8549f4 |
| 0x5b127d…6378ae | 39 days agoThu, 09 Jul 2026 23:56:59 UTC | 0x1fe8ed…3f94 | [0] 0x000000000000…00000005 [1] 0x000000000000…b2d2475c data: 0x000000000000000000…7a8549f4 |
| 0x38a20c…89f7ee | 39 days agoThu, 09 Jul 2026 23:55:06 UTC | 0x1fe8ed…3f94 | [0] 0x000000000000…00000004 [1] 0x000000000000…b2d2475c data: 0x000000000000000000…7a8549f4 |
| 0xa164f4…6c0d07 | 39 days agoThu, 09 Jul 2026 23:55:00 UTC | 0xa592bb…7f3e | data: 0x000000000000000000…2443ebb3 |
| 0x914c6f…791944 | 39 days agoThu, 09 Jul 2026 23:44:57 UTC | 0xc07783…9af9 | [0] 0x000000000000…b2d2475c data: 0x000000000000000000…6a528800 |
| 0x914c6f…791944 | 39 days agoThu, 09 Jul 2026 23:44:57 UTC | 0xa592bb…7f3e | data: 0x000000000000000000…70efe3d9 |
| 0x453fe3…e26eac | 39 days agoThu, 09 Jul 2026 23:20:37 UTC | 0x1fe8ed…3f94 | [0] 0x000000000000…00000003 [1] 0x000000000000…b2d2475c data: 0x000000000000000000…7a8549f4 |
| 0x84e3e6…9d3faa | 39 days agoThu, 09 Jul 2026 23:19:58 UTC | 0xccbfc9…dd2e | [0] 0x000000000000…00000001 [1] 0x000000000000…cd2df329 data: 0x000000000000000000…f65979ae |
| 0x7035e0…8becda | 39 days agoThu, 09 Jul 2026 23:17:30 UTC | 0x1fe8ed…3f94 | [0] 0x000000000000…00000002 [1] 0x000000000000…b2d2475c data: 0x000000000000000000…7a8549f4 |
| 0x561bce…421617 | 39 days agoThu, 09 Jul 2026 23:15:37 UTC | 0x1fe8ed…3f94 | [0] 0x000000000000…00000001 [1] 0x000000000000…b2d2475c data: 0x000000000000000000…f65979ae |
| 0x8bfd4d…4775ee | 39 days agoThu, 09 Jul 2026 23:11:05 UTC | 0xa592bb…7f3e | data: 0x000000000000000000…dcc54ee0 |
| 0x07d029…b48ade | 39 days agoThu, 09 Jul 2026 23:10:27 UTC | 0xa592bb…7f3e | data: 0x000000000000000000…66621d86 |
| 0xf8f870…9a45df | 39 days agoThu, 09 Jul 2026 22:56:17 UTC | 0x0837bb…5bad | data: 0x000000000000000000…00000320 |
| 0x0db289…8dfa54 | 39 days agoThu, 09 Jul 2026 22:56:17 UTC | 0xec2584…89fb | data: 0x000000000000000000…00000000 |
| 0xc7a050…57ce77 | 39 days agoThu, 09 Jul 2026 22:56:17 UTC | 0x1cc227…197a | data: 0x000000000000000000…00000032 |
| 0x6d0ea8…e1168f | 39 days agoThu, 09 Jul 2026 22:56:17 UTC | 0xa040f2…82d3 | data: 0x000000000000000000…0000000c |
| 0xefed8b…5f5e28 | 39 days agoThu, 09 Jul 2026 22:56:17 UTC | 0x4d7360…f728 | data: 0x000000000000000000…498d0000 |
| 0x995094…f51f31 | 39 days agoThu, 09 Jul 2026 22:56:17 UTC | 0x4eab7b…255a | [0] 0x000000000000…af296444 |
| 0x8e73c4…bea908 | 39 days agoThu, 09 Jul 2026 22:56:17 UTC | 0x8be007…57e0 | [0] 0x000000000000…00000000 [1] 0x000000000000…cd2df329 |
| Type | Age | Block | Details |
|---|---|---|---|
| no cross-chain L1↔L2 transactions for this address | |||
| Transaction Hash | Method ? | Block | Age | From | To | Amount | Txn Fee ? | ||
|---|---|---|---|---|---|---|---|---|---|
| 0xdbe155…d2d64e | migrate | 5,633,860 | 39 days agoFri, 10 Jul 2026 00:04:02 UTC | 0xef8a…f329 | IN | SpcxController | $0.000 ETH | 0.00000468 | |
| 0x5cbeb1…600f9a | setOracleParams | 5,633,383 | 39 days agoFri, 10 Jul 2026 00:03:15 UTC | 0xef8a…f329 | IN | SpcxController | $0.000 ETH | 0.00000175 | |
| 0x5ca1e4…b79483 | setOracleParams | 5,633,339 | 39 days agoFri, 10 Jul 2026 00:03:11 UTC | 0xef8a…f329 | IN | SpcxController | $0.000 ETH | 0.00000175 | |
| 0x5b127d…6378ae | buyBag | 5,629,623 | 39 days agoThu, 09 Jul 2026 23:56:59 UTC | 0x78f9…475c | IN | SpcxController | $0.000 ETH | 0.00000995 | |
| 0x38a20c…89f7ee | buyBag | 5,628,506 | 39 days agoThu, 09 Jul 2026 23:55:06 UTC | 0x78f9…475c | IN | SpcxController | $0.000 ETH | 0.00000986 | |
| 0x914c6f…791944 | processBuyback | 5,622,437 | 39 days agoThu, 09 Jul 2026 23:44:57 UTC | 0x78f9…475c | IN | SpcxController | $0.000 ETH | 0.00001278 | |
| 0x453fe3…e26eac | buyBag | 5,607,857 | 39 days agoThu, 09 Jul 2026 23:20:37 UTC | 0x78f9…475c | IN | SpcxController | $0.000 ETH | 0.00000989 | |
| 0x84e3e6…9d3faa | sellBag | 5,607,470 | 39 days agoThu, 09 Jul 2026 23:19:58 UTC | 0xef8a…f329 | IN | SpcxController | $0.430.00022 ETH | 0.00000583 | |
| 0x7035e0…8becda | buyBag | 5,605,989 | 39 days agoThu, 09 Jul 2026 23:17:30 UTC | 0x78f9…475c | IN | SpcxController | $0.000 ETH | 0.00001024 | |
| 0x561bce…421617 | buyBag | 5,604,861 | 39 days agoThu, 09 Jul 2026 23:15:37 UTC | 0x78f9…475c | IN | SpcxController | $0.000 ETH | 0.00001265 | |
| 0x6d0ea8…e1168f | setRampParams | 5,593,279 | 39 days agoThu, 09 Jul 2026 22:56:17 UTC | 0xef8a…f329 | IN | SpcxController | $0.000 ETH | 0.00000259 | |
| 0xf8f870…9a45df | setOracleParams | 5,593,279 | 39 days agoThu, 09 Jul 2026 22:56:17 UTC | 0xef8a…f329 | IN | SpcxController | $0.000 ETH | 0.00000185 | |
| 0x995094…f51f31 | setHook | 5,593,279 | 39 days agoThu, 09 Jul 2026 22:56:17 UTC | 0xef8a…f329 | IN | SpcxController | $0.000 ETH | 0.00000245 | |
| 0xc7a050…57ce77 | setTwapParams | 5,593,279 | 39 days agoThu, 09 Jul 2026 22:56:17 UTC | 0xef8a…f329 | IN | SpcxController | $0.000 ETH | 0.00000287 | |
| 0x0db289…8dfa54 | setOracles | 5,593,279 | 39 days agoThu, 09 Jul 2026 22:56:17 UTC | 0xef8a…f329 | IN | SpcxController | $0.000 ETH | 0.00000465 | |
| 0xefed8b…5f5e28 | setBagSize | 5,593,279 | 39 days agoThu, 09 Jul 2026 22:56:17 UTC | 0xef8a…f329 | IN | SpcxController | $0.000 ETH | 0.00000257 |
| Block | Age | Parent Transaction Hash | Type | Method | From | To | Value | |
|---|---|---|---|---|---|---|---|---|
| 5,633,860 | 39 days agoFri, 10 Jul 2026 00:04:02 UTC | 0xdbe155…d2d64e | CALL | migrate | 0x930d…ef7e | OUT | 0x6ee1…7453 | 0.00018 ETH |
| 5,632,428 | 39 days agoFri, 10 Jul 2026 00:01:39 UTC | 0xa5a6c3…48f88a | CALL | acquireAndFill | 0x930d…ef7e | OUT | 0xe8f8…b101 | 0.00018 ETH |
| 5,632,191 | 39 days agoFri, 10 Jul 2026 00:01:16 UTC | 0xb0d50a…e7c893 | CALL | acquireAndFill | 0x930d…ef7e | OUT | 0xe8f8…b101 | 0.00018 ETH |
| 5,632,021 | 39 days agoFri, 10 Jul 2026 00:00:59 UTC | 0x804bed…950a25 | CALL | Execute | 0x32b4…6444 | IN | 0x930d…ef7e | 0.00024 ETH |
| 5,630,729 | 39 days agoThu, 09 Jul 2026 23:58:49 UTC | 0x51e02f…10ac71 | CALL | acquireAndFill | 0x930d…ef7e | OUT | 0xe8f8…b101 | 0.00018 ETH |
| 5,629,623 | 39 days agoThu, 09 Jul 2026 23:56:59 UTC | 0x5b127d…6378ae | CALL | buyBag | 0x930d…ef7e | OUT | 0x78f9…475c | 0.00018 ETH |
| 5,628,506 | 39 days agoThu, 09 Jul 2026 23:55:06 UTC | 0x38a20c…89f7ee | CALL | buyBag | 0x930d…ef7e | OUT | 0x78f9…475c | 0.00018 ETH |
| 5,628,449 | 39 days agoThu, 09 Jul 2026 23:55:00 UTC | 0xa164f4…6c0d07 | CALL | Execute | 0x32b4…6444 | IN | 0x930d…ef7e | 0.00044 ETH |
| 5,622,437 | 39 days agoThu, 09 Jul 2026 23:44:57 UTC | 0x914c6f…791944 | CALL | processBuyback | 0x930d…ef7e | OUT | 0x78f9…475c | 0.00000 ETH |
| 5,622,437 | 39 days agoThu, 09 Jul 2026 23:44:57 UTC | 0x914c6f…791944 | CALL | processBuyback | 0x930d…ef7e | OUT | 0x8366…0951 | 0.00009 ETH |
| 5,622,437 | 39 days agoThu, 09 Jul 2026 23:44:57 UTC | 0x914c6f…791944 | CALL | processBuyback | 0x32b4…6444 | IN | 0x930d…ef7e | 0.00003 ETH |
| 5,607,857 | 39 days agoThu, 09 Jul 2026 23:20:37 UTC | 0x453fe3…e26eac | CALL | buyBag | 0x930d…ef7e | OUT | 0x78f9…475c | 0.00018 ETH |
| 5,605,989 | 39 days agoThu, 09 Jul 2026 23:17:30 UTC | 0x7035e0…8becda | CALL | buyBag | 0x930d…ef7e | OUT | 0x78f9…475c | 0.00018 ETH |
| 5,604,861 | 39 days agoThu, 09 Jul 2026 23:15:37 UTC | 0x561bce…421617 | CALL | buyBag | 0x930d…ef7e | OUT | 0x78f9…475c | 0.00018 ETH |
| 5,602,146 | 39 days agoThu, 09 Jul 2026 23:11:05 UTC | 0x8bfd4d…4775ee | CALL | Execute | 0x32b4…6444 | IN | 0x930d…ef7e | 0.00000 ETH |
| 5,601,765 | 39 days agoThu, 09 Jul 2026 23:10:27 UTC | 0x07d029…b48ade | CALL | Execute | 0x32b4…6444 | IN | 0x930d…ef7e | 0.00064 ETH |