// SPDX-License-Identifier: MIT
pragma solidity 0.8.26;
import {IERC20, IWETH, IUniswapV3Pool, IStackVault} from "./Interfaces.sol";
import {V3Oracle} from "./V3Oracle.sol";
/// SwapRouter02. The original SwapRouter's ExactInputParams carries a deadline
/// field; this one does not. That single difference is why every swap in the
/// first engine reverted: the selector it called does not exist on the router
/// deployed to this chain. Proven on-chain before this contract was written.
interface ISwapRouter02 {
struct ExactInputParams {
bytes path;
address recipient;
uint256 amountIn;
uint256 amountOutMinimum;
}
function exactInput(ExactInputParams calldata params) external payable returns (uint256 amountOut);
}
interface IStackersRead {
function ownerOf(uint256 tokenId) external view returns (address);
function isActive(uint256 tokenId) external view returns (bool);
function weightOf(uint256 tokenId) external view returns (uint256);
}
/// The earnings engine, second attempt.
///
/// The first engine is wired to the NFT through `setRounds`, which is one shot
/// and already spent, so this one cannot receive the NFT's hooks. It does not
/// need them: `isActive` and `weightOf` are public on the NFT, so this contract
/// reads the truth directly and anyone may call `sync` to bring a token's
/// weight up to date. Nothing here can be steered by whoever calls it.
///
/// Two rules the first engine got wrong, fixed here:
/// 1. the router interface above
/// 2. `rescueEth` exists. The first engine could only ever release money by
/// swapping, so when the swap turned out to be impossible the ETH was
/// locked forever. Holder funds should never depend on one code path
/// working.
contract StackRoundsV2 {
// ---------------------------------------------------------------- errors
error NotAuthorized();
error BadConfig();
error BadAsset();
error Reentrant();
// ---------------------------------------------------------------- events
event RoundSettled(uint256 indexed round, uint256 pot, uint256 totalWeight);
event Synced(uint256 indexed tokenId, uint256 weight, uint256 liveFrom);
event Delivered(uint256 indexed tokenId, uint8 indexed assetIdx, uint256 ethIn, uint256 out);
event SwapSkipped(uint8 indexed assetIdx, uint256 ethAmount);
event CreditRolled(uint256 indexed tokenId, uint8 indexed assetIdx, uint256 ethAmount);
event SplitSet(uint256 indexed tokenId, uint8 count);
event AssetAdded(uint8 indexed idx, address token, address pool1, bool isStock);
event Rescued(address indexed token, address indexed to, uint256 amount);
// ---------------------------------------------------------------- config
uint256 public constant ROUND = 3600;
uint8 public constant MAX_ASSETS = 14;
uint32 public constant TWAP_WINDOW = 1800;
uint256 public constant QUEUE_DRAIN = 200;
address public owner;
address public immutable nft;
address public immutable weth;
ISwapRouter02 public immutable router;
address public vault;
uint256 public minSwap = 0.01 ether;
uint256 public slippageBps = 300;
struct Asset {
address token;
address pool1;
address pool2;
address mid;
uint24 fee1;
uint24 fee2;
bool isStock;
bool exists;
}
Asset[MAX_ASSETS] public assets;
uint8 public assetCount;
struct Split {
uint8[3] idx;
uint16[3] bps;
uint8 count;
}
mapping(uint256 => Split) internal splits;
struct TokenState {
uint128 weight; // as counted by this engine
uint128 creditedEth; // earned, not yet delivered
uint256 debt; // accPerWeight at the last weight change
bool live; // counted in totalWeight
uint64 liveFrom; // the first round it may earn in
}
mapping(uint256 => TokenState) public tokenState;
uint256 public totalWeight;
uint256 public accPerWeight;
uint256 public potBuffer;
uint256 public lastSettledRound;
mapping(uint256 => mapping(uint8 => uint256)) public owedToken;
mapping(uint256 => bool) public collectToWallet;
uint256 private _lock = 1;
modifier lock() {
if (_lock != 1) revert Reentrant();
_lock = 2;
_;
_lock = 1;
}
modifier onlyOwner() {
if (msg.sender != owner) revert NotAuthorized();
_;
}
constructor(address nft_, address weth_, address router_) {
if (nft_ == address(0) || weth_ == address(0) || router_ == address(0)) revert BadConfig();
owner = msg.sender;
nft = nft_;
weth = weth_;
router = ISwapRouter02(router_);
IWETH(weth_).approve(router_, type(uint256).max);
lastSettledRound = block.timestamp / ROUND;
}
/// Fees arrive here.
receive() external payable {
settle();
potBuffer += msg.value;
}
function currentRound() public view returns (uint256) {
return block.timestamp / ROUND;
}
// ---------------------------------------------------------------- rounds
/// Close the hour: hand the pot to whoever was live for it.
function settle() public {
uint256 nowRound = currentRound();
if (nowRound <= lastSettledRound) return;
if (totalWeight > 0 && potBuffer > 0) {
accPerWeight += (potBuffer * 1e18) / totalWeight;
emit RoundSettled(nowRound, potBuffer, totalWeight);
potBuffer = 0;
}
lastSettledRound = nowRound;
}
/// Bring these tokens' weights in line with the NFT. Permissionless: the
/// numbers come from the NFT itself, so the caller cannot influence them.
/// A weight that rises only counts from the next round, which is what stops
/// anyone activating or upgrading just before a boundary and taking the
/// whole hour at the higher rate. A weight that falls applies at once.
function sync(uint256[] calldata ids) external {
settle();
uint256 nowRound = currentRound();
for (uint256 i = 0; i < ids.length; i++) {
uint256 id = ids[i];
TokenState storage t = tokenState[id];
// bank whatever it has earned at its current weight first
if (t.live) {
t.creditedEth += uint128((uint256(t.weight) * (accPerWeight - t.debt)) / 1e18);
}
t.debt = accPerWeight;
uint256 w = IStackersRead(nft).isActive(id) ? IStackersRead(nft).weightOf(id) : 0;
if (w == 0) {
if (t.live) {
totalWeight -= t.weight;
t.live = false;
}
t.weight = 0;
emit Synced(id, 0, 0);
continue;
}
if (!t.live) {
// Waiting to be admitted. Record the weight, but set the
// waiting round only once: re-syncing must not push the wait
// out by another hour every time someone calls this.
t.weight = uint128(w);
if (t.liveFrom == 0) t.liveFrom = uint64(nowRound + 1);
emit Synced(id, w, t.liveFrom);
} else if (w < t.weight) {
totalWeight = totalWeight - t.weight + w;
t.weight = uint128(w);
emit Synced(id, w, nowRound);
} else if (w > t.weight) {
// the increase waits for the next round
totalWeight = totalWeight - t.weight + w;
t.weight = uint128(w);
t.liveFrom = uint64(nowRound + 1);
emit Synced(id, w, t.liveFrom);
}
// admit anything whose waiting round has passed
if (!t.live && t.liveFrom != 0 && nowRound >= t.liveFrom) {
t.live = true;
totalWeight += t.weight;
}
}
}
/// Admit these tokens at once, without the usual one round wait.
///
/// Only for the migration off the first engine. Those Stackers activated
/// hours ago and already served their waiting round there; making them wait
/// again would punish them for a fault that was ours. The anti-snipe rule
/// exists to stop someone activating seconds before a boundary, which is
/// not what this is. Owner only, and it still reads every weight from the
/// NFT, so it cannot invent a position that does not exist.
function adopt(uint256[] calldata ids) external onlyOwner {
settle();
for (uint256 i = 0; i < ids.length; i++) {
uint256 id = ids[i];
TokenState storage t = tokenState[id];
if (t.live) continue;
if (!IStackersRead(nft).isActive(id)) continue;
uint256 w = IStackersRead(nft).weightOf(id);
if (w == 0) continue;
t.weight = uint128(w);
t.debt = accPerWeight;
t.live = true;
t.liveFrom = uint64(currentRound());
totalWeight += w;
emit Synced(id, w, t.liveFrom);
}
}
/// What a token has earned but not yet been paid.
function pendingEth(uint256 tokenId) external view returns (uint256) {
TokenState storage t = tokenState[tokenId];
uint256 acc = t.creditedEth;
if (t.live) acc += (uint256(t.weight) * (accPerWeight - t.debt)) / 1e18;
return acc;
}
// ---------------------------------------------------------------- splits
function setSplit(uint256 tokenId, uint8[] calldata idx, uint16[] calldata bps) external {
if (IStackersRead(nft).ownerOf(tokenId) != msg.sender) revert NotAuthorized();
if (idx.length == 0 || idx.length > 3 || idx.length != bps.length) revert BadConfig();
uint256 sum;
Split storage s = splits[tokenId];
for (uint256 i = 0; i < idx.length; i++) {
if (idx[i] >= assetCount || !assets[idx[i]].exists) revert BadAsset();
for (uint256 j = 0; j < i; j++) {
if (idx[j] == idx[i]) revert BadConfig();
}
s.idx[i] = idx[i];
s.bps[i] = bps[i];
sum += bps[i];
}
if (sum != 10_000) revert BadConfig();
s.count = uint8(idx.length);
emit SplitSet(tokenId, s.count);
}
function splitOf(uint256 tokenId) external view returns (uint8[3] memory, uint16[3] memory, uint8) {
Split storage s = splits[tokenId];
return (s.idx, s.bps, s.count);
}
function setCollectMode(uint256 tokenId, bool toWallet) external {
if (IStackersRead(nft).ownerOf(tokenId) != msg.sender) revert NotAuthorized();
collectToWallet[tokenId] = toWallet;
}
function _defaultIdx() internal view returns (uint8) {
// USDG if it is registered, else asset zero
for (uint8 i = 0; i < assetCount; i++) {
if (assets[i].exists && !assets[i].isStock) return i;
}
return 0;
}
// ---------------------------------------------------------------- deliver
/// Turn credit into the stocks each Stacker chose. One swap per asset, then
/// pro rata to the holders who paid into it. A failure on one asset can
/// never cost anyone else their round: the credit is handed straight back.
function deliver(uint256[] calldata ids) external lock {
settle();
uint256 n = ids.length;
uint256[MAX_ASSETS] memory assetPot;
uint256[3][] memory portions = new uint256[3][](n);
uint8[3][] memory slotAsset = new uint8[3][](n);
uint8[] memory slotCount = new uint8[](n);
for (uint256 i = 0; i < n; i++) {
uint256 id = ids[i];
TokenState storage t = tokenState[id];
Split storage s = splits[id];
uint256 credit = t.creditedEth;
if (t.live) {
credit += (uint256(t.weight) * (accPerWeight - t.debt)) / 1e18;
t.debt = accPerWeight;
}
if (credit == 0) continue;
uint8 count = s.count;
uint8[3] memory useIdx;
uint16[3] memory useBps;
if (count == 0) {
// never picked: everything goes to the default asset
count = 1;
useIdx[0] = _defaultIdx();
useBps[0] = 10_000;
} else {
useIdx = s.idx;
useBps = s.bps;
}
t.creditedEth = 0;
slotCount[i] = count;
uint256 used;
for (uint256 j = 0; j < count; j++) {
uint256 part = j + 1 == count ? credit - used : (credit * useBps[j]) / 10_000;
used += part;
portions[i][j] = part;
slotAsset[i][j] = useIdx[j];
assetPot[useIdx[j]] += part;
}
}
uint256[MAX_ASSETS] memory bought;
bool[MAX_ASSETS] memory swapped;
for (uint8 a = 0; a < assetCount; a++) {
uint256 pot = assetPot[a];
if (pot == 0 || pot < minSwap) continue;
try this.swapFor(a, pot) returns (uint256 out) {
bought[a] = out;
swapped[a] = true;
} catch {
emit SwapSkipped(a, pot);
}
}
for (uint256 i = 0; i < n; i++) {
uint256 id = ids[i];
for (uint256 j = 0; j < slotCount[i]; j++) {
uint256 part = portions[i][j];
if (part == 0) continue;
uint8 a = slotAsset[i][j];
if (!swapped[a]) {
tokenState[id].creditedEth += uint128(part);
emit CreditRolled(id, a, part);
continue;
}
uint256 out = (bought[a] * part) / assetPot[a];
if (out == 0) {
tokenState[id].creditedEth += uint128(part);
emit CreditRolled(id, a, part);
continue;
}
bool paid;
if (collectToWallet[id] || vault == address(0)) {
paid = _payout(assets[a].token, IStackersRead(nft).ownerOf(id), out);
} else {
try this.vaultCredit(id, a, out) {
paid = true;
} catch {
paid = false;
}
}
if (paid) {
emit Delivered(id, a, part, out);
} else {
owedToken[id][a] += out; // claimable later, never lost
}
}
}
}
/// External so `deliver` can wrap it in try/catch. Self call only.
function swapFor(uint8 a, uint256 ethIn) external returns (uint256) {
if (msg.sender != address(this)) revert NotAuthorized();
return _swap(a, ethIn);
}
function vaultCredit(uint256 tokenId, uint8 a, uint256 out) external {
if (msg.sender != address(this)) revert NotAuthorized();
address token = assets[a].token;
uint256 before = IERC20(token).balanceOf(vault);
if (!_payout(token, vault, out)) revert BadConfig();
uint256 got = IERC20(token).balanceOf(vault) - before;
if (got == 0) revert BadConfig();
IStackVault(vault).credit(tokenId, a, token, got);
}
function claimOwed(uint256 tokenId, uint8 assetIdx) external lock {
uint256 amount = owedToken[tokenId][assetIdx];
if (amount == 0) revert BadConfig();
address holder = IStackersRead(nft).ownerOf(tokenId);
owedToken[tokenId][assetIdx] = 0;
if (!_payout(assets[assetIdx].token, holder, amount)) {
owedToken[tokenId][assetIdx] = amount;
revert BadConfig();
}
emit Delivered(tokenId, assetIdx, 0, amount);
}
function _payout(address token, address to, uint256 amount) internal returns (bool) {
(bool ok, bytes memory data) =
token.call(abi.encodeWithSelector(IERC20.transfer.selector, to, amount));
return ok && (data.length == 0 || abi.decode(data, (bool)));
}
function _swap(uint8 a, uint256 ethIn) internal returns (uint256 out) {
uint256 minOut = (twapQuote(a, ethIn) * (10_000 - slippageBps)) / 10_000;
require(minOut > 0, "twap zero");
Asset storage ast = assets[a];
bytes memory path = ast.pool2 == address(0)
? abi.encodePacked(weth, ast.fee1, ast.token)
: abi.encodePacked(weth, ast.fee1, ast.mid, ast.fee2, ast.token);
IWETH(weth).deposit{value: ethIn}();
out = router.exactInput(
ISwapRouter02.ExactInputParams({
path: path,
recipient: address(this),
amountIn: ethIn,
amountOutMinimum: minOut
})
);
}
function twapQuote(uint8 a, uint256 ethIn) public view returns (uint256) {
Asset storage ast = assets[a];
if (!ast.exists) revert BadAsset();
if (ast.pool2 == address(0)) {
return V3Oracle.twapAmountOut(ast.pool1, TWAP_WINDOW, weth, ast.token, ethIn);
}
uint256 midOut = V3Oracle.twapAmountOut(ast.pool1, TWAP_WINDOW, weth, ast.mid, ethIn);
return V3Oracle.twapAmountOut(ast.pool2, TWAP_WINDOW, ast.mid, ast.token, midOut);
}
// ---------------------------------------------------------------- admin
function addAsset(address token, address pool1, address pool2, address mid, bool isStock)
external
onlyOwner
{
if (assetCount >= MAX_ASSETS) revert BadConfig();
if (token == address(0) || pool1 == address(0)) revert BadConfig();
for (uint8 i = 0; i < assetCount; i++) {
if (assets[i].token == token) revert BadConfig();
}
uint24 fee1;
uint24 fee2;
if (pool2 == address(0)) {
if (mid != address(0)) revert BadConfig();
_checkPool(pool1, weth, token);
fee1 = IUniswapV3Pool(pool1).fee();
} else {
if (mid == address(0) || mid == token || mid == weth) revert BadConfig();
_checkPool(pool1, weth, mid);
_checkPool(pool2, mid, token);
fee1 = IUniswapV3Pool(pool1).fee();
fee2 = IUniswapV3Pool(pool2).fee();
}
assets[assetCount] = Asset(token, pool1, pool2, mid, fee1, fee2, isStock, true);
emit AssetAdded(assetCount, token, pool1, isStock);
assetCount++;
}
function _checkPool(address pool, address a, address b) internal view {
address t0 = IUniswapV3Pool(pool).token0();
address t1 = IUniswapV3Pool(pool).token1();
if (!((t0 == a && t1 == b) || (t0 == b && t1 == a))) revert BadConfig();
}
function setVault(address v) external onlyOwner {
vault = v;
}
function setMinSwap(uint256 v) external onlyOwner {
minSwap = v;
}
function setSlippage(uint256 bps) external onlyOwner {
if (bps > 500) revert BadConfig();
slippageBps = bps;
}
function setOwner(address o) external onlyOwner {
if (o == address(0)) revert BadConfig();
owner = o;
}
/// The lesson from the first engine, written into this one.
///
/// That contract could only ever release money by swapping, and when the
/// swap turned out to be impossible its ETH was locked forever with no way
/// out for anyone. Holder funds must never depend on a single code path
/// being correct. This exists so a mistake costs a transaction, not a
/// balance. It is owner only and it is the reason this engine can be
/// retired safely if it is ever superseded.
function rescueEth(address to) external onlyOwner {
uint256 bal = address(this).balance;
(bool ok,) = to.call{value: bal}("");
require(ok, "eth send failed");
emit Rescued(address(0), to, bal);
}
function rescueToken(address token, address to) external onlyOwner {
uint256 bal = IERC20(token).balanceOf(address(this));
require(_payout(token, to, bal), "token send failed");
emit Rescued(token, to, bal);
}
}[
{
"type": "constructor",
"inputs": [
{
"name": "nft_",
"type": "address",
"internalType": "address"
},
{
"name": "weth_",
"type": "address",
"internalType": "address"
},
{
"name": "router_",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "nonpayable"
},
{
"name": "BadAsset",
"type": "error",
"inputs": []
},
{
"name": "BadConfig",
"type": "error",
"inputs": []
},
{
"name": "BadWindow",
"type": "error",
"inputs": []
},
{
"name": "NotAuthorized",
"type": "error",
"inputs": []
},
{
"name": "Reentrant",
"type": "error",
"inputs": []
},
{
"name": "TickOutOfRange",
"type": "error",
"inputs": []
},
{
"name": "AssetAdded",
"type": "event",
"inputs": [
{
"name": "idx",
"type": "uint8",
"indexed": true,
"internalType": "uint8"
},
{
"name": "token",
"type": "address",
"indexed": false,
"internalType": "address"
},
{
"name": "pool1",
"type": "address",
"indexed": false,
"internalType": "address"
},
{
"name": "isStock",
"type": "bool",
"indexed": false,
"internalType": "bool"
}
],
"anonymous": false
},
{
"name": "CreditRolled",
"type": "event",
"inputs": [
{
"name": "tokenId",
"type": "uint256",
"indexed": true,
"internalType": "uint256"
},
{
"name": "assetIdx",
"type": "uint8",
"indexed": true,
"internalType": "uint8"
},
{
"name": "ethAmount",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "Delivered",
"type": "event",
"inputs": [
{
"name": "tokenId",
"type": "uint256",
"indexed": true,
"internalType": "uint256"
},
{
"name": "assetIdx",
"type": "uint8",
"indexed": true,
"internalType": "uint8"
},
{
"name": "ethIn",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
},
{
"name": "out",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "Rescued",
"type": "event",
"inputs": [
{
"name": "token",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "to",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "amount",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "RoundSettled",
"type": "event",
"inputs": [
{
"name": "round",
"type": "uint256",
"indexed": true,
"internalType": "uint256"
},
{
"name": "pot",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
},
{
"name": "totalWeight",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "SplitSet",
"type": "event",
"inputs": [
{
"name": "tokenId",
"type": "uint256",
"indexed": true,
"internalType": "uint256"
},
{
"name": "count",
"type": "uint8",
"indexed": false,
"internalType": "uint8"
}
],
"anonymous": false
},
{
"name": "SwapSkipped",
"type": "event",
"inputs": [
{
"name": "assetIdx",
"type": "uint8",
"indexed": true,
"internalType": "uint8"
},
{
"name": "ethAmount",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "Synced",
"type": "event",
"inputs": [
{
"name": "tokenId",
"type": "uint256",
"indexed": true,
"internalType": "uint256"
},
{
"name": "weight",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
},
{
"name": "liveFrom",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "MAX_ASSETS",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint8",
"internalType": "uint8"
}
],
"stateMutability": "view"
},
{
"name": "QUEUE_DRAIN",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "ROUND",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "TWAP_WINDOW",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint32",
"internalType": "uint32"
}
],
"stateMutability": "view"
},
{
"name": "accPerWeight",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "addAsset",
"type": "function",
"inputs": [
{
"name": "token",
"type": "address",
"internalType": "address"
},
{
"name": "pool1",
"type": "address",
"internalType": "address"
},
{
"name": "pool2",
"type": "address",
"internalType": "address"
},
{
"name": "mid",
"type": "address",
"internalType": "address"
},
{
"name": "isStock",
"type": "bool",
"internalType": "bool"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "adopt",
"type": "function",
"inputs": [
{
"name": "ids",
"type": "uint256[]",
"internalType": "uint256[]"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "assetCount",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint8",
"internalType": "uint8"
}
],
"stateMutability": "view"
},
{
"name": "assets",
"type": "function",
"inputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "token",
"type": "address",
"internalType": "address"
},
{
"name": "pool1",
"type": "address",
"internalType": "address"
},
{
"name": "pool2",
"type": "address",
"internalType": "address"
},
{
"name": "mid",
"type": "address",
"internalType": "address"
},
{
"name": "fee1",
"type": "uint24",
"internalType": "uint24"
},
{
"name": "fee2",
"type": "uint24",
"internalType": "uint24"
},
{
"name": "isStock",
"type": "bool",
"internalType": "bool"
},
{
"name": "exists",
"type": "bool",
"internalType": "bool"
}
],
"stateMutability": "view"
},
{
"name": "claimOwed",
"type": "function",
"inputs": [
{
"name": "tokenId",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "assetIdx",
"type": "uint8",
"internalType": "uint8"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "collectToWallet",
"type": "function",
"inputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "",
"type": "bool",
"internalType": "bool"
}
],
"stateMutability": "view"
},
{
"name": "currentRound",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "deliver",
"type": "function",
"inputs": [
{
"name": "ids",
"type": "uint256[]",
"internalType": "uint256[]"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "lastSettledRound",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "minSwap",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "nft",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
},
{
"name": "owedToken",
"type": "function",
"inputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "",
"type": "uint8",
"internalType": "uint8"
}
],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "owner",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
},
{
"name": "pendingEth",
"type": "function",
"inputs": [
{
"name": "tokenId",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "potBuffer",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "rescueEth",
"type": "function",
"inputs": [
{
"name": "to",
"type": "address",
"internalType": "address"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "rescueToken",
"type": "function",
"inputs": [
{
"name": "token",
"type": "address",
"internalType": "address"
},
{
"name": "to",
"type": "address",
"internalType": "address"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "router",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "contract ISwapRouter02"
}
],
"stateMutability": "view"
},
{
"name": "setCollectMode",
"type": "function",
"inputs": [
{
"name": "tokenId",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "toWallet",
"type": "bool",
"internalType": "bool"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "setMinSwap",
"type": "function",
"inputs": [
{
"name": "v",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "setOwner",
"type": "function",
"inputs": [
{
"name": "o",
"type": "address",
"internalType": "address"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "setSlippage",
"type": "function",
"inputs": [
{
"name": "bps",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "setSplit",
"type": "function",
"inputs": [
{
"name": "tokenId",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "idx",
"type": "uint8[]",
"internalType": "uint8[]"
},
{
"name": "bps",
"type": "uint16[]",
"internalType": "uint16[]"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "setVault",
"type": "function",
"inputs": [
{
"name": "v",
"type": "address",
"internalType": "address"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "settle",
"type": "function",
"inputs": [],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "slippageBps",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "splitOf",
"type": "function",
"inputs": [
{
"name": "tokenId",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "",
"type": "uint8[3]",
"internalType": "uint8[3]"
},
{
"name": "",
"type": "uint16[3]",
"internalType": "uint16[3]"
},
{
"name": "",
"type": "uint8",
"internalType": "uint8"
}
],
"stateMutability": "view"
},
{
"name": "swapFor",
"type": "function",
"inputs": [
{
"name": "a",
"type": "uint8",
"internalType": "uint8"
},
{
"name": "ethIn",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "nonpayable"
},
{
"name": "sync",
"type": "function",
"inputs": [
{
"name": "ids",
"type": "uint256[]",
"internalType": "uint256[]"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "tokenState",
"type": "function",
"inputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "weight",
"type": "uint128",
"internalType": "uint128"
},
{
"name": "creditedEth",
"type": "uint128",
"internalType": "uint128"
},
{
"name": "debt",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "live",
"type": "bool",
"internalType": "bool"
},
{
"name": "liveFrom",
"type": "uint64",
"internalType": "uint64"
}
],
"stateMutability": "view"
},
{
"name": "totalWeight",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "twapQuote",
"type": "function",
"inputs": [
{
"name": "a",
"type": "uint8",
"internalType": "uint8"
},
{
"name": "ethIn",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "vault",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
},
{
"name": "vaultCredit",
"type": "function",
"inputs": [
{
"name": "tokenId",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "a",
"type": "uint8",
"internalType": "uint8"
},
{
"name": "out",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "weth",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
},
{
"type": "receive",
"stateMutability": "payable"
}
]0x60e0604052662386f26fc1000060025561012c6003556001604555348015610025575f80fd5b506040516144cc3803806144cc83398101604081905261004491610159565b6001600160a01b038316158061006157506001600160a01b038216155b8061007357506001600160a01b038116155b15610091576040516301f30c8760e21b815260040160405180910390fd5b5f80546001600160a01b031916331790556001600160a01b0383811660805282811660a081905290821660c081905260405163095ea7b360e01b815260048101919091525f19602482015263095ea7b3906044016020604051808303815f875af1158015610101573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101259190610199565b50610132610e10426101bf565b604255506101de915050565b80516001600160a01b0381168114610154575f80fd5b919050565b5f805f6060848603121561016b575f80fd5b6101748461013e565b92506101826020850161013e565b91506101906040850161013e565b90509250925092565b5f602082840312156101a9575f80fd5b815180151581146101b8575f80fd5b9392505050565b5f826101d957634e487b7160e01b5f52601260045260245ffd5b500490565b60805160a05160c05161424d61027f5f395f81816107cd015261317901525f818161030c015281816113300152818161138101528181612a5b01528181612b1601528181612b6e01528181612fd00152818161306f01526130d801525f818161037601528181610a0601528181610e7201528181610f02015281816114410152818161213a01528181612353015281816123e60152612628015261424d5ff3fe608060405260043610610236575f3560e01c80639745cc3d11610129578063ea49c35e116100a8578063f887ea401161006d578063f887ea40146107bc578063fb6241c0146107ef578063fbfa77cf1461080e578063fc3c9aff1461082d578063fe51b9551461084c575f80fd5b8063ea49c35e14610718578063eafe7a7414610737578063eb6e17b514610750578063ed26f2e81461077e578063f0fa55a91461079d575f80fd5b8063c2eaf4f5116100ee578063c2eaf4f514610626578063ccc739731461063a578063cf35bdd014610659578063d3dcde9a146106cf578063e2c1d1d1146106ee575f80fd5b80639745cc3d14610515578063a9e282b8146105b4578063aca4894c146105d3578063b10d9e42146105f2578063b24ae1f814610611575f80fd5b8063578c71d9116101b557806381236d161161017a57806381236d161461045a5780638a19c8bc146104985780638da5cb5b146104ac57806395d8e529146104ca57806396c82e5714610500575f80fd5b8063578c71d9146103cc57806359cd9031146103e15780636817031b146103f65780636e3e495e1461041557806376b1d08f14610434575f80fd5b80633fc8cef3116101fb5780633fc8cef3146102fb5780634707d0001461034657806347ccca02146103655780634b7314e41461039857806351e42ab5146103b7575f80fd5b806311da60b41461026057806313af40351461027657806317adc211146102955780631e134423146102b45780633b1ab44c146102dc575f80fd5b3661025c57610243610861565b3460415f8282546102549190613a6a565b925050819055005b5f80fd5b34801561026b575f80fd5b50610274610861565b005b348015610281575f80fd5b50610274610290366004613a94565b610917565b3480156102a0575f80fd5b506102746102af366004613ac4565b610989565b3480156102bf575f80fd5b506102c960415481565b6040519081526020015b60405180910390f35b3480156102e7575f80fd5b506102746102f6366004613a94565b610b4c565b348015610306575f80fd5b5061032e7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016102d3565b348015610351575f80fd5b50610274610360366004613aee565b610c53565b348015610370575f80fd5b5061032e7f000000000000000000000000000000000000000000000000000000000000000081565b3480156103a3575f80fd5b506102746103b2366004613b6c565b610d77565b3480156103c2575f80fd5b506102c960405481565b3480156103d7575f80fd5b506102c960035481565b3480156103ec575f80fd5b506102c960025481565b348015610401575f80fd5b50610274610410366004613a94565b611268565b348015610420575f80fd5b506102c961042f366004613baa565b6112b4565b34801561043f575f80fd5b50610448600e81565b60405160ff90911681526020016102d3565b348015610465575f80fd5b50610488610474366004613bd2565b60446020525f908152604090205460ff1681565b60405190151581526020016102d3565b3480156104a3575f80fd5b506102c96113e0565b3480156104b7575f80fd5b505f5461032e906001600160a01b031681565b3480156104d5575f80fd5b506102c96104e4366004613ac4565b604360209081525f928352604080842090915290825290205481565b34801561050b575f80fd5b506102c9603f5481565b348015610520575f80fd5b5061057661052f366004613bd2565b603e6020525f90815260409020805460018201546002909201546001600160801b0380831693600160801b90930416919060ff81169061010090046001600160401b031685565b604080516001600160801b03968716815295909416602086015292840191909152151560608301526001600160401b0316608082015260a0016102d3565b3480156105bf575f80fd5b506102746105ce366004613bd2565b6113f2565b3480156105de575f80fd5b506102746105ed366004613be9565b611421565b3480156105fd575f80fd5b506102c961060c366004613baa565b6117ba565b34801561061c575f80fd5b506102c9610e1081565b348015610631575f80fd5b506102c960c881565b348015610645575f80fd5b506102c9610654366004613bd2565b6117ec565b348015610664575f80fd5b50610678610673366004613bd2565b611866565b604080516001600160a01b03998a16815297891660208901529588169587019590955295909216606085015262ffffff90811660808501521660a083015291151560c082015290151560e0820152610100016102d3565b3480156106da575f80fd5b506102746106e9366004613b6c565b6118d2565b3480156106f9575f80fd5b5061070361070881565b60405163ffffffff90911681526020016102d3565b348015610723575f80fd5b50610274610732366004613b6c565b6122bc565b348015610742575f80fd5b50603c546104489060ff1681565b34801561075b575f80fd5b5061076f61076a366004613bd2565b61252d565b6040516102d393929190613c60565b348015610789575f80fd5b50610274610798366004613cd8565b612608565b3480156107a8575f80fd5b506102746107b7366004613bd2565b6126d7565b3480156107c7575f80fd5b5061032e7f000000000000000000000000000000000000000000000000000000000000000081565b3480156107fa575f80fd5b50610274610809366004613cfb565b612729565b348015610819575f80fd5b5060015461032e906001600160a01b031681565b348015610838575f80fd5b50610274610847366004613d2e565b612928565b348015610857575f80fd5b506102c960425481565b5f61086a6113e0565b905060425481116108785750565b5f603f5411801561088a57505f604154115b1561091257603f546041546108a790670de0b6b3a7640000613d9b565b6108b19190613dc6565b60405f8282546108c19190613a6a565b9091555050604154603f5460405183927f866f813a2289b14a1e94be9b6a7db4b5ad759df3fb1466245f650642f3cc7a569261090592918252602082015260400190565b60405180910390a25f6041555b604255565b5f546001600160a01b031633146109415760405163ea8e4eb560e01b815260040160405180910390fd5b6001600160a01b038116610968576040516301f30c8760e21b815260040160405180910390fd5b5f80546001600160a01b0319166001600160a01b0392909216919091179055565b6045546001146109ac5760405163769dd35360e11b815260040160405180910390fd5b60026045555f82815260436020908152604080832060ff85168452909152812054908190036109ee576040516301f30c8760e21b815260040160405180910390fd5b6040516331a9108f60e11b8152600481018490525f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e90602401602060405180830381865afa158015610a53573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a779190613dd9565b5f85815260436020908152604080832060ff88168085529252822091909155909150610ac590600490600e8110610ab057610ab0613df4565b60040201546001600160a01b03168284612e2e565b610b01575f84815260436020908152604080832060ff871684529091529081902083905580516301f30c8760e21b815290519081900360040190fd5b604080515f81526020810184905260ff85169186917f8110a247e3bf84088ca20c991ad431b68293ca3bdfe626df91b9744bf4d7b9ce910160405180910390a3505060016045555050565b5f546001600160a01b03163314610b765760405163ea8e4eb560e01b815260040160405180910390fd5b60405147905f906001600160a01b0384169083908381818185875af1925050503d805f8114610bc0576040519150601f19603f3d011682016040523d82523d5f602084013e610bc5565b606091505b5050905080610c0d5760405162461bcd60e51b815260206004820152600f60248201526e195d1a081cd95b990819985a5b1959608a1b60448201526064015b60405180910390fd5b6040518281526001600160a01b038416905f907f3af790fafda720819b2fc6e15090606e81154e0ac9a92d38ecad006d99d20ecc906020015b60405180910390a3505050565b5f546001600160a01b03163314610c7d5760405163ea8e4eb560e01b815260040160405180910390fd5b6040516370a0823160e01b81523060048201525f906001600160a01b038416906370a0823190602401602060405180830381865afa158015610cc1573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ce59190613e08565b9050610cf2838383612e2e565b610d325760405162461bcd60e51b81526020600482015260116024820152701d1bdad95b881cd95b990819985a5b1959607a1b6044820152606401610c04565b816001600160a01b0316836001600160a01b03167f3af790fafda720819b2fc6e15090606e81154e0ac9a92d38ecad006d99d20ecc83604051610c4691815260200190565b610d7f610861565b5f610d886113e0565b90505f5b82811015611262575f848483818110610da757610da7613df4565b602090810292909201355f818152603e909352604090922060028101549293509160ff16159050610e5357670de0b6b3a76400008160010154604054610ded9190613e1f565b8254610e0291906001600160801b0316613d9b565b610e0c9190613dc6565b81548290601090610e2e908490600160801b90046001600160801b0316613e32565b92506101000a8154816001600160801b0302191690836001600160801b031602179055505b604080546001830155516382afd23b60e01b8152600481018390525f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906382afd23b90602401602060405180830381865afa158015610ebf573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ee39190613e51565b610eed575f610f73565b60405162ecfa2f60e31b8152600481018490527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690630767d17890602401602060405180830381865afa158015610f4f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f739190613e08565b9050805f03610ff757600282015460ff1615610fba578154603f80546001600160801b03909216915f90610fa8908490613e1f565b909155505060028201805460ff191690555b81546001600160801b0319168255604080515f808252602082015284915f805160206141f8833981519152910160405180910390a250505061125a565b600282015460ff166110a95781546001600160801b0319166001600160801b038216178255600282015461010090046001600160401b03165f0361106957611040856001613a6a565b8260020160016101000a8154816001600160401b0302191690836001600160401b031602179055505b6002820154604080518381526101009092046001600160401b0316602083015284915f805160206141f883398151915291015b60405180910390a26111d9565b81546001600160801b0316811015611122578154603f5482916110d7916001600160801b0390911690613e1f565b6110e19190613a6a565b603f5581546001600160801b0319166001600160801b038216178255604080518281526020810187905284915f805160206141f8833981519152910161109c565b81546001600160801b03168111156111d9578154603f548291611150916001600160801b0390911690613e1f565b61115a9190613a6a565b603f5581546001600160801b0319166001600160801b038216178255611181856001613a6a565b60028301805468ffffffffffffffff0019166101006001600160401b03938416810291909117918290556040805185815291909204909216602083015284915f805160206141f8833981519152910160405180910390a25b600282015460ff161580156111ff5750600282015461010090046001600160401b031615155b801561121d5750600282015461010090046001600160401b03168510155b156112565760028201805460ff191660011790558154603f80546001600160801b03909216915f90611250908490613a6a565b90915550505b5050505b600101610d8c565b50505050565b5f546001600160a01b031633146112925760405163ea8e4eb560e01b815260040160405180910390fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b5f8060048460ff16600e81106112cc576112cc613df4565b60040201905080600301601b9054906101000a900460ff1661130157604051633640530560e01b815260040160405180910390fd5b60028101546001600160a01b031661135f5760018101548154611357916001600160a01b0390811691610708917f0000000000000000000000000000000000000000000000000000000000000000911687612efd565b9150506113da565b600181015460038201545f916113a8916001600160a01b0391821691610708917f0000000000000000000000000000000000000000000000000000000000000000911688612efd565b6002830154600384015484549293506113d5926001600160a01b0392831692610708928116911685612efd565b925050505b92915050565b5f6113ed610e1042613dc6565b905090565b5f546001600160a01b0316331461141c5760405163ea8e4eb560e01b815260040160405180910390fd5b600255565b6040516331a9108f60e11b81526004810186905233906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690636352211e90602401602060405180830381865afa158015611486573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114aa9190613dd9565b6001600160a01b0316146114d15760405163ea8e4eb560e01b815260040160405180910390fd5b8215806114de5750600383115b806114e95750828114155b15611507576040516301f30c8760e21b815260040160405180910390fd5b5f858152603d60205260408120815b8581101561174557603c5460ff1687878381811061153657611536613df4565b905060200201602081019061154b9190613e6c565b60ff161015806115a95750600487878381811061156a5761156a613df4565b905060200201602081019061157f9190613e6c565b60ff16600e811061159257611592613df4565b60040201600301601b9054906101000a900460ff16155b156115c757604051633640530560e01b815260040160405180910390fd5b5f5b8181101561164b578787838181106115e3576115e3613df4565b90506020020160208101906115f89190613e6c565b60ff1688888381811061160d5761160d613df4565b90506020020160208101906116229190613e6c565b60ff1603611643576040516301f30c8760e21b815260040160405180910390fd5b6001016115c9565b5086868281811061165e5761165e613df4565b90506020020160208101906116739190613e6c565b82826003811061168557611685613df4565b602091828204019190066101000a81548160ff021916908360ff1602179055508484828181106116b7576116b7613df4565b90506020020160208101906116cc9190613e85565b8260010182600381106116e1576116e1613df4565b601091828204019190066002026101000a81548161ffff021916908361ffff16021790555084848281811061171857611718613df4565b905060200201602081019061172d9190613e85565b61173b9061ffff1684613a6a565b9250600101611516565b508161271014611768576040516301f30c8760e21b815260040160405180910390fd5b60028101805460ff191660ff871690811790915560405190815287907f9289c2bdf2133c72d7dccab03946c733038fb8d5b7e24787b0afbd7a77aad9359060200160405180910390a250505050505050565b5f3330146117db5760405163ea8e4eb560e01b815260040160405180910390fd5b6117e58383612f13565b9392505050565b5f818152603e6020526040812080546002820154600160801b9091046001600160801b03169060ff16156117e557670de0b6b3a764000082600101546040546118359190613e1f565b835461184a91906001600160801b0316613d9b565b6118549190613dc6565b61185e9082613a6a565b949350505050565b600481600e8110611875575f80fd5b600402018054600182015460028301546003909301546001600160a01b0392831694509082169282169181169062ffffff600160a01b8204811691600160b81b81049091169060ff600160d01b8204811691600160d81b90041688565b6045546001146118f55760405163769dd35360e11b815260040160405180910390fd5b6002604555611902610861565b8061190b613a19565b5f826001600160401b0381111561192457611924613ea6565b60405190808252806020026020018201604052801561195d57816020015b61194a613a38565b8152602001906001900390816119425790505b5090505f836001600160401b0381111561197957611979613ea6565b6040519080825280602002602001820160405280156119b257816020015b61199f613a38565b8152602001906001900390816119975790505b5090505f846001600160401b038111156119ce576119ce613ea6565b6040519080825280602002602001820160405280156119f7578160200160208202803683370190505b5090505f5b85811015611d1e575f888883818110611a1757611a17613df4565b602090810292909201355f818152603e84526040808220603d909552902083546002850154929550909250600160801b90046001600160801b03169060ff1615611aaa57670de0b6b3a76400008360010154604054611a769190613e1f565b8454611a8b91906001600160801b0316613d9b565b611a959190613dc6565b611a9f9082613a6a565b604054600185015590505b805f03611aba5750505050611d16565b600282015460ff16611aca613a38565b611ad2613a38565b8260ff165f03611af75760019250611ae86131ef565b60ff1682526127108152611b9c565b604080516060810191829052908690600390825f855b825461010083900a900460ff16815260206001928301818104948501949093039092029101808411611b0d57505060408051606081019182905295975060018b0194506003935091508390505f855b82829054906101000a900461ffff1661ffff1681526020019060020190602082600101049283019260010382029150808411611b5c579050505050505090505b85546001600160801b03168655885183908a908a908110611bbf57611bbf613df4565b60ff909216602092830291909101909101525f805b8460ff16811015611d0c575f60ff8616611bef836001613a6a565b14611c2b57612710848360038110611c0957611c09613df4565b6020020151611c1c9061ffff1689613d9b565b611c269190613dc6565b611c35565b611c358388613e1f565b9050611c418184613a6a565b9250808e8c81518110611c5657611c56613df4565b60200260200101518360038110611c6f57611c6f613df4565b6020020152848260038110611c8657611c86613df4565b60200201518d8c81518110611c9d57611c9d613df4565b60200260200101518360038110611cb657611cb6613df4565b60ff9092166020929092020152808f868460038110611cd757611cd7613df4565b602002015160ff16600e8110611cef57611cef613df4565b60200201818151611d009190613a6a565b90525050600101611bd4565b5050505050505050505b6001016119fc565b50611d27613a19565b611d2f613a19565b5f5b603c5460ff9081169082161015611e68575f878260ff16600e8110611d5857611d58613df4565b60200201519050801580611d6d575060025481105b15611d785750611e60565b604051635886cf2160e11b815260ff8316600482015260248101829052309063b10d9e42906044016020604051808303815f875af1925050508015611dda575060408051601f3d908101601f19168201909252611dd791810190613e08565b60015b611e20578160ff167f658935f8cd82af21d125a8f1e19e9e8b5b1137a405b0218bc5ee4b3ddac76cc282604051611e1391815260200190565b60405180910390a2611e5e565b80858460ff16600e8110611e3657611e36613df4565b602002015260018460ff8516600e8110611e5257611e52613df4565b91151560209092020152505b505b600101611d31565b505f5b878110156122ab575f8a8a83818110611e8657611e86613df4565b9050602002013590505f5b858381518110611ea357611ea3613df4565b602002602001015160ff168110156122a1575f888481518110611ec857611ec8613df4565b60200260200101518260038110611ee157611ee1613df4565b60200201519050805f03611ef55750612299565b5f888581518110611f0857611f08613df4565b60200260200101518360038110611f2157611f21613df4565b60200201519050858160ff16600e8110611f3d57611f3d613df4565b6020020151611fdf575f848152603e602052604090208054839190601090611f76908490600160801b90046001600160801b0316613e32565b92506101000a8154816001600160801b0302191690836001600160801b031602179055508060ff16847fc2cda032f63ebe7629abecffad35589c71515edfd5b2c2048e340b3033a536e484604051611fd091815260200190565b60405180910390a35050612299565b5f8b8260ff16600e8110611ff557611ff5613df4565b602002015183898460ff16600e811061201057612010613df4565b602002015161201f9190613d9b565b6120299190613dc6565b9050805f036120cc575f858152603e602052604090208054849190601090612062908490600160801b90046001600160801b0316613e32565b92506101000a8154816001600160801b0302191690836001600160801b031602179055508160ff16857fc2cda032f63ebe7629abecffad35589c71515edfd5b2c2048e340b3033a536e4856040516120bc91815260200190565b60405180910390a3505050612299565b5f8581526044602052604081205460ff16806120f157506001546001600160a01b0316155b156121b2576121ab60048460ff16600e811061210f5761210f613df4565b600490810291909101546040516331a9108f60e11b81529182018990526001600160a01b03908116917f000000000000000000000000000000000000000000000000000000000000000090911690636352211e90602401602060405180830381865afa158015612181573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121a59190613dd9565b84612e2e565b9050612218565b6040516303ed890760e61b81526004810187905260ff8416602482015260448101839052309063fb6241c0906064015f604051808303815f87803b1580156121f8575f80fd5b505af1925050508015612209575060015b61221457505f612218565b5060015b801561226357604080518581526020810184905260ff85169188917f8110a247e3bf84088ca20c991ad431b68293ca3bdfe626df91b9744bf4d7b9ce910160405180910390a3612294565b5f86815260436020908152604080832060ff871684529091528120805484929061228e908490613a6a565b90915550505b505050505b600101611e91565b5050600101611e6b565b505060016045555050505050505050565b5f546001600160a01b031633146122e65760405163ea8e4eb560e01b815260040160405180910390fd5b6122ee610861565b5f5b81811015612528575f83838381811061230b5761230b613df4565b602090810292909201355f818152603e909352604090922060028101549293509160ff1615905061233d575050612520565b6040516382afd23b60e01b8152600481018390527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906382afd23b90602401602060405180830381865afa1580156123a0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123c49190613e51565b6123cf575050612520565b60405162ecfa2f60e31b8152600481018390525f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690630767d17890602401602060405180830381865afa158015612433573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906124579190613e08565b9050805f0361246857505050612520565b81546001600160801b0319166001600160801b03821617825560405460018084019190915560028301805460ff191690911790556124a46113e0565b8260020160016101000a8154816001600160401b0302191690836001600160401b0316021790555080603f5f8282546124dd9190613a6a565b90915550506002820154604080518381526101009092046001600160401b0316602083015284915f805160206141f8833981519152910160405180910390a25050505b6001016122f0565b505050565b612535613a38565b61253d613a38565b5f838152603d602052604080822060028101548251606081019384905291928392600184019260ff169184906003908289855b825461010083900a900460ff168152602060019283018181049485019490930390920291018084116125705750506040805160608101918290529598508794506003935091508390505f855b82829054906101000a900461ffff1661ffff16815260200190600201906020826001010492830192600103820291508084116125bc5750979d949c50949a509298505050505050505050565b6040516331a9108f60e11b81526004810183905233906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690636352211e90602401602060405180830381865afa15801561266d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126919190613dd9565b6001600160a01b0316146126b85760405163ea8e4eb560e01b815260040160405180910390fd5b5f91825260446020526040909120805460ff1916911515919091179055565b5f546001600160a01b031633146127015760405163ea8e4eb560e01b815260040160405180910390fd5b6101f4811115612724576040516301f30c8760e21b815260040160405180910390fd5b600355565b3330146127495760405163ea8e4eb560e01b815260040160405180910390fd5b5f60048360ff16600e811061276057612760613df4565b600490810291909101546001546040516370a0823160e01b81526001600160a01b03918216938101939093521691505f9082906370a0823190602401602060405180830381865afa1580156127b7573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906127db9190613e08565b6001549091506127f69083906001600160a01b031685612e2e565b612813576040516301f30c8760e21b815260040160405180910390fd5b6001546040516370a0823160e01b81526001600160a01b0391821660048201525f918391908516906370a0823190602401602060405180830381865afa15801561285f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128839190613e08565b61288d9190613e1f565b9050805f036128af576040516301f30c8760e21b815260040160405180910390fd5b6001546040516307e0ace760e21b81526004810188905260ff871660248201526001600160a01b0385811660448301526064820184905290911690631f82b39c906084015f604051808303815f87803b15801561290a575f80fd5b505af115801561291c573d5f803e3d5ffd5b50505050505050505050565b5f546001600160a01b031633146129525760405163ea8e4eb560e01b815260040160405180910390fd5b603c54600e60ff9091161061297a576040516301f30c8760e21b815260040160405180910390fd5b6001600160a01b038516158061299757506001600160a01b038416155b156129b5576040516301f30c8760e21b815260040160405180910390fd5b5f5b603c5460ff9081169082161015612a1c57856001600160a01b031660048260ff16600e81106129e8576129e8613df4565b60040201546001600160a01b031603612a14576040516301f30c8760e21b815260040160405180910390fd5b6001016129b7565b505f806001600160a01b038516612ae7576001600160a01b03841615612a55576040516301f30c8760e21b815260040160405180910390fd5b612a80867f00000000000000000000000000000000000000000000000000000000000000008961327b565b856001600160a01b031663ddca3f436040518163ffffffff1660e01b8152600401602060405180830381865afa158015612abc573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612ae09190613eba565b9150612c63565b6001600160a01b0384161580612b0e5750866001600160a01b0316846001600160a01b0316145b80612b4a57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b0316145b15612b68576040516301f30c8760e21b815260040160405180910390fd5b612b93867f00000000000000000000000000000000000000000000000000000000000000008661327b565b612b9e85858961327b565b856001600160a01b031663ddca3f436040518163ffffffff1660e01b8152600401602060405180830381865afa158015612bda573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612bfe9190613eba565b9150846001600160a01b031663ddca3f436040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c3c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612c609190613eba565b90505b60408051610100810182526001600160a01b03808a168252888116602083015287811692820192909252908516606082015262ffffff8084166080830152821660a082015283151560c0820152600160e0820152603c5460049060ff16600e8110612cd057612cd0613df4565b82516004919091029190910180546001600160a01b03199081166001600160a01b0393841617825560208085015160018401805484169186169190911790556040808601516002850180549094169086161790925560608086015160039094018054608088015160a089015160c08a015160e0909a01519789166001600160b81b031990931692909217600160a01b62ffffff928316021763ffffffff60b81b1916600160b81b919092160260ff60d01b191617600160d01b971515979097029690961760ff60d81b1916600160d81b9415159490940293909317909455603c5481518c85168152938b16948401949094528615159083015260ff909216917f8897a70732c65332aa906918dfffbbe1a009b7adf4ba0eddb43c40771aac7656910160405180910390a2603c805460ff16905f612e0c83613edc565b91906101000a81548160ff021916908360ff1602179055505050505050505050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b17905291515f928392839291881691612e8b9190613efa565b5f604051808303815f865af19150503d805f8114612ec4576040519150601f19603f3d011682016040523d82523d5f602084013e612ec9565b606091505b5091509150818015612ef3575080511580612ef3575080806020019051810190612ef39190613e51565b9695505050505050565b5f612ef3612f0b87876133cf565b838686613571565b5f80612710600354612710612f289190613e1f565b612f3286866112b4565b612f3c9190613d9b565b612f469190613dc6565b90505f8111612f835760405162461bcd60e51b815260206004820152600960248201526874776170207a65726f60b81b6044820152606401610c04565b5f60048560ff16600e8110612f9a57612f9a613df4565b6004020160028101549091505f906001600160a01b03161561305557600382015482546040516bffffffffffffffffffffffff197f0000000000000000000000000000000000000000000000000000000000000000606090811b821660208401526001600160e81b0319600160a01b860460e890811b8216603486015286831b84166037860152600160b81b90960490951b909416604b8301529190921b16604e8201526062016040516020818303038152906040526130d4565b600382015482546040516bffffffffffffffffffffffff197f0000000000000000000000000000000000000000000000000000000000000000606090811b821660208401526001600160e81b0319600160a01b90950460e81b9490941660348301529190921b166037820152604b016040516020818303038152906040525b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0866040518263ffffffff1660e01b81526004015f604051808303818588803b15801561312f575f80fd5b505af1158015613141573d5f803e3d5ffd5b5050604080516080810182528581523060208201528082018a905260608101889052905163b858183f60e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016945063b858183f93506131af9250600401613f10565b6020604051808303815f875af11580156131cb573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612ef39190613e08565b5f805b603c5460ff90811690821610156132745760048160ff16600e811061321957613219613df4565b60040201600301601b9054906101000a900460ff168015613262575060048160ff16600e811061324b5761324b613df4565b60040201600301601a9054906101000a900460ff16155b1561326c57919050565b6001016131f2565b505f905090565b5f836001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa1580156132b8573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906132dc9190613dd9565b90505f846001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa15801561331b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061333f9190613dd9565b9050836001600160a01b0316826001600160a01b03161480156133735750826001600160a01b0316816001600160a01b0316145b806133ab5750826001600160a01b0316826001600160a01b03161480156133ab5750836001600160a01b0316816001600160a01b0316145b6133c8576040516301f30c8760e21b815260040160405180910390fd5b5050505050565b5f8163ffffffff165f036133f657604051632a0c9bb560e11b815260040160405180910390fd5b6040805160028082526060820183525f9260208301908036833701905050905082815f8151811061342957613429613df4565b602002602001019063ffffffff16908163ffffffff16815250505f8160018151811061345757613457613df4565b63ffffffff9092166020928302919091019091015260405163883bdbfd60e01b81525f906001600160a01b0386169063883bdbfd9061349a908590600401613f75565b5f60405180830381865afa1580156134b4573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526134db9190810190614082565b5090505f815f815181106134f1576134f1613df4565b60200260200101518260018151811061350c5761350c613df4565b602002602001015161351e919061414c565b905061353063ffffffff861682614179565b93505f8160060b128015613555575061354f63ffffffff8616826141b5565b60060b15155b156135685783613564816141d6565b9450505b50505092915050565b5f8061357c86613658565b90506001600160801b036001600160a01b038216116135ef575f6135a96001600160a01b03831680613d9b565b9050836001600160a01b0316856001600160a01b0316106135d8576135d3600160c01b8783613973565b6135e7565b6135e78187600160c01b613973565b92505061364f565b5f61360d6001600160a01b0383168068010000000000000000613973565b9050836001600160a01b0316856001600160a01b03161061363c57613637600160801b8783613973565b61364b565b61364b8187600160801b613973565b9250505b50949350505050565b5f805f8360020b1261366d578260020b613674565b8260020b5f035b9050620d89e881111561369a5760405163c7e13a0160e01b815260040160405180910390fd5b5f816001165f036136af57600160801b6136c1565b6ffffcb933bd6fad37aa2d162d1a5940015b70ffffffffffffffffffffffffffffffffff16905060028216156136f5576ffff97272373d413259a46990580e213a0260801c5b6004821615613714576ffff2e50f5f656932ef12357cf3c7fdcc0260801c5b6008821615613733576fffe5caca7e10e4e61c3624eaa0941cd00260801c5b6010821615613752576fffcb9843d60f6159c9db58835c9266440260801c5b6020821615613771576fff973b41fa98c081472e6896dfb254c00260801c5b6040821615613790576fff2ea16466c96a3843ec78b326b528610260801c5b60808216156137af576ffe5dee046a99a2a811c461f1969c30530260801c5b6101008216156137cf576ffcbe86c7900a88aedcffc83b479aa3a40260801c5b6102008216156137ef576ff987a7253ac413176f2b074cf7815e540260801c5b61040082161561380f576ff3392b0822b70005940c7a398e4b70f30260801c5b61080082161561382f576fe7159475a2c29b7443b29c7fa6e889d90260801c5b61100082161561384f576fd097f3bdfd2022b8845ad8f792aa58250260801c5b61200082161561386f576fa9f746462d870fdf8a65dc1f90e061e50260801c5b61400082161561388f576f70d869a156d2a1b890bb3df62baf32f70260801c5b6180008216156138af576f31be135f97d08fd981231505542fcfa60260801c5b620100008216156138d0576f09aa508b5b7a84e1c677de54f3e99bc90260801c5b620200008216156138f0576e5d6af8dedb81196699c329225ee6040260801c5b6204000082161561390f576d2216e584f5fa1ea926041bedfe980260801c5b6208000082161561392c576b048a170391f7dc42444e8fa20260801c5b5f8460020b131561394b57805f198161394757613947613db2565b0490505b64010000000081061561395f576001613961565b5f5b60ff16602082901c0192505050919050565b5f80805f19858709858702925082811083820303915050805f036139a7575f841161399c575f80fd5b5082900490506117e5565b8084116139b2575f80fd5b5f8486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091025f889003889004909101858311909403939093029303949094049190911702949350505050565b604051806101c00160405280600e906020820280368337509192915050565b60405180606001604052806003906020820280368337509192915050565b634e487b7160e01b5f52601160045260245ffd5b808201808211156113da576113da613a56565b6001600160a01b0381168114613a91575f80fd5b50565b5f60208284031215613aa4575f80fd5b81356117e581613a7d565b803560ff81168114613abf575f80fd5b919050565b5f8060408385031215613ad5575f80fd5b82359150613ae560208401613aaf565b90509250929050565b5f8060408385031215613aff575f80fd5b8235613b0a81613a7d565b91506020830135613b1a81613a7d565b809150509250929050565b5f8083601f840112613b35575f80fd5b5081356001600160401b03811115613b4b575f80fd5b6020830191508360208260051b8501011115613b65575f80fd5b9250929050565b5f8060208385031215613b7d575f80fd5b82356001600160401b03811115613b92575f80fd5b613b9e85828601613b25565b90969095509350505050565b5f8060408385031215613bbb575f80fd5b613bc483613aaf565b946020939093013593505050565b5f60208284031215613be2575f80fd5b5035919050565b5f805f805f60608688031215613bfd575f80fd5b8535945060208601356001600160401b03811115613c19575f80fd5b613c2588828901613b25565b90955093505060408601356001600160401b03811115613c43575f80fd5b613c4f88828901613b25565b969995985093965092949392505050565b60e0810181855f5b6003811015613c8a57815160ff16835260209283019290910190600101613c68565b50505060608201845f5b6003811015613cb757815161ffff16835260209283019290910190600101613c94565b50505060ff831660c0830152949350505050565b8015158114613a91575f80fd5b5f8060408385031215613ce9575f80fd5b823591506020830135613b1a81613ccb565b5f805f60608486031215613d0d575f80fd5b83359250613d1d60208501613aaf565b929592945050506040919091013590565b5f805f805f60a08688031215613d42575f80fd5b8535613d4d81613a7d565b94506020860135613d5d81613a7d565b93506040860135613d6d81613a7d565b92506060860135613d7d81613a7d565b91506080860135613d8d81613ccb565b809150509295509295909350565b80820281158282048414176113da576113da613a56565b634e487b7160e01b5f52601260045260245ffd5b5f82613dd457613dd4613db2565b500490565b5f60208284031215613de9575f80fd5b81516117e581613a7d565b634e487b7160e01b5f52603260045260245ffd5b5f60208284031215613e18575f80fd5b5051919050565b818103818111156113da576113da613a56565b6001600160801b0381811683821601908111156113da576113da613a56565b5f60208284031215613e61575f80fd5b81516117e581613ccb565b5f60208284031215613e7c575f80fd5b6117e582613aaf565b5f60208284031215613e95575f80fd5b813561ffff811681146117e5575f80fd5b634e487b7160e01b5f52604160045260245ffd5b5f60208284031215613eca575f80fd5b815162ffffff811681146117e5575f80fd5b5f60ff821660ff8103613ef157613ef1613a56565b60010192915050565b5f82518060208501845e5f920191825250919050565b602081525f82516080602084015280518060a0850152806020830160c086015e5f60c0828601015260018060a01b036020860151166040850152604085015160608501526060850151608085015260c0601f19601f8301168501019250505092915050565b602080825282518282018190525f918401906040840190835b81811015613fb257835163ffffffff16835260209384019390920191600101613f8e565b509095945050505050565b604051601f8201601f191681016001600160401b0381118282101715613fe557613fe5613ea6565b604052919050565b5f6001600160401b0382111561400557614005613ea6565b5060051b60200190565b5f82601f83011261401e575f80fd5b815161403161402c82613fed565b613fbd565b8082825260208201915060208360051b860101925085831115614052575f80fd5b602085015b8381101561407857805161406a81613a7d565b835260209283019201614057565b5095945050505050565b5f8060408385031215614093575f80fd5b82516001600160401b038111156140a8575f80fd5b8301601f810185136140b8575f80fd5b80516140c661402c82613fed565b8082825260208201915060208360051b8501019250878311156140e7575f80fd5b6020840193505b828410156141175783518060060b8114614106575f80fd5b8252602093840193909101906140ee565b8095505050505060208301516001600160401b03811115614136575f80fd5b6141428582860161400f565b9150509250929050565b600682810b9082900b03667fffffffffffff198112667fffffffffffff821317156113da576113da613a56565b5f8160060b8360060b8061418f5761418f613db2565b667fffffffffffff1982145f19821416156141ac576141ac613a56565b90059392505050565b5f8260060b806141c7576141c7613db2565b808360060b0791505092915050565b5f8160020b627fffff1981036141ee576141ee613a56565b5f19019291505056fe9aa1a56064c83c34d45ce0f34a60a04b6c6fd4bf28b61a19c16235ebedb30b19a2646970667358221220afabf3bf2c3410c0d19abe18c40d495db65f78977ba2ea0a5e226d9f3b33865a64736f6c634300081a0033000000000000000000000000968c5f0b6fe2f77b221f5e015c955f32f9a505070000000000000000000000000bd7d308f8e1639fab988df18a8011f41eacad73000000000000000000000000caf681a66d020601342297493863e78c959e5cb2
0x608060405260043610610236575f3560e01c80639745cc3d11610129578063ea49c35e116100a8578063f887ea401161006d578063f887ea40146107bc578063fb6241c0146107ef578063fbfa77cf1461080e578063fc3c9aff1461082d578063fe51b9551461084c575f80fd5b8063ea49c35e14610718578063eafe7a7414610737578063eb6e17b514610750578063ed26f2e81461077e578063f0fa55a91461079d575f80fd5b8063c2eaf4f5116100ee578063c2eaf4f514610626578063ccc739731461063a578063cf35bdd014610659578063d3dcde9a146106cf578063e2c1d1d1146106ee575f80fd5b80639745cc3d14610515578063a9e282b8146105b4578063aca4894c146105d3578063b10d9e42146105f2578063b24ae1f814610611575f80fd5b8063578c71d9116101b557806381236d161161017a57806381236d161461045a5780638a19c8bc146104985780638da5cb5b146104ac57806395d8e529146104ca57806396c82e5714610500575f80fd5b8063578c71d9146103cc57806359cd9031146103e15780636817031b146103f65780636e3e495e1461041557806376b1d08f14610434575f80fd5b80633fc8cef3116101fb5780633fc8cef3146102fb5780634707d0001461034657806347ccca02146103655780634b7314e41461039857806351e42ab5146103b7575f80fd5b806311da60b41461026057806313af40351461027657806317adc211146102955780631e134423146102b45780633b1ab44c146102dc575f80fd5b3661025c57610243610861565b3460415f8282546102549190613a6a565b925050819055005b5f80fd5b34801561026b575f80fd5b50610274610861565b005b348015610281575f80fd5b50610274610290366004613a94565b610917565b3480156102a0575f80fd5b506102746102af366004613ac4565b610989565b3480156102bf575f80fd5b506102c960415481565b6040519081526020015b60405180910390f35b3480156102e7575f80fd5b506102746102f6366004613a94565b610b4c565b348015610306575f80fd5b5061032e7f0000000000000000000000000bd7d308f8e1639fab988df18a8011f41eacad7381565b6040516001600160a01b0390911681526020016102d3565b348015610351575f80fd5b50610274610360366004613aee565b610c53565b348015610370575f80fd5b5061032e7f000000000000000000000000968c5f0b6fe2f77b221f5e015c955f32f9a5050781565b3480156103a3575f80fd5b506102746103b2366004613b6c565b610d77565b3480156103c2575f80fd5b506102c960405481565b3480156103d7575f80fd5b506102c960035481565b3480156103ec575f80fd5b506102c960025481565b348015610401575f80fd5b50610274610410366004613a94565b611268565b348015610420575f80fd5b506102c961042f366004613baa565b6112b4565b34801561043f575f80fd5b50610448600e81565b60405160ff90911681526020016102d3565b348015610465575f80fd5b50610488610474366004613bd2565b60446020525f908152604090205460ff1681565b60405190151581526020016102d3565b3480156104a3575f80fd5b506102c96113e0565b3480156104b7575f80fd5b505f5461032e906001600160a01b031681565b3480156104d5575f80fd5b506102c96104e4366004613ac4565b604360209081525f928352604080842090915290825290205481565b34801561050b575f80fd5b506102c9603f5481565b348015610520575f80fd5b5061057661052f366004613bd2565b603e6020525f90815260409020805460018201546002909201546001600160801b0380831693600160801b90930416919060ff81169061010090046001600160401b031685565b604080516001600160801b03968716815295909416602086015292840191909152151560608301526001600160401b0316608082015260a0016102d3565b3480156105bf575f80fd5b506102746105ce366004613bd2565b6113f2565b3480156105de575f80fd5b506102746105ed366004613be9565b611421565b3480156105fd575f80fd5b506102c961060c366004613baa565b6117ba565b34801561061c575f80fd5b506102c9610e1081565b348015610631575f80fd5b506102c960c881565b348015610645575f80fd5b506102c9610654366004613bd2565b6117ec565b348015610664575f80fd5b50610678610673366004613bd2565b611866565b604080516001600160a01b03998a16815297891660208901529588169587019590955295909216606085015262ffffff90811660808501521660a083015291151560c082015290151560e0820152610100016102d3565b3480156106da575f80fd5b506102746106e9366004613b6c565b6118d2565b3480156106f9575f80fd5b5061070361070881565b60405163ffffffff90911681526020016102d3565b348015610723575f80fd5b50610274610732366004613b6c565b6122bc565b348015610742575f80fd5b50603c546104489060ff1681565b34801561075b575f80fd5b5061076f61076a366004613bd2565b61252d565b6040516102d393929190613c60565b348015610789575f80fd5b50610274610798366004613cd8565b612608565b3480156107a8575f80fd5b506102746107b7366004613bd2565b6126d7565b3480156107c7575f80fd5b5061032e7f000000000000000000000000caf681a66d020601342297493863e78c959e5cb281565b3480156107fa575f80fd5b50610274610809366004613cfb565b612729565b348015610819575f80fd5b5060015461032e906001600160a01b031681565b348015610838575f80fd5b50610274610847366004613d2e565b612928565b348015610857575f80fd5b506102c960425481565b5f61086a6113e0565b905060425481116108785750565b5f603f5411801561088a57505f604154115b1561091257603f546041546108a790670de0b6b3a7640000613d9b565b6108b19190613dc6565b60405f8282546108c19190613a6a565b9091555050604154603f5460405183927f866f813a2289b14a1e94be9b6a7db4b5ad759df3fb1466245f650642f3cc7a569261090592918252602082015260400190565b60405180910390a25f6041555b604255565b5f546001600160a01b031633146109415760405163ea8e4eb560e01b815260040160405180910390fd5b6001600160a01b038116610968576040516301f30c8760e21b815260040160405180910390fd5b5f80546001600160a01b0319166001600160a01b0392909216919091179055565b6045546001146109ac5760405163769dd35360e11b815260040160405180910390fd5b60026045555f82815260436020908152604080832060ff85168452909152812054908190036109ee576040516301f30c8760e21b815260040160405180910390fd5b6040516331a9108f60e11b8152600481018490525f907f000000000000000000000000968c5f0b6fe2f77b221f5e015c955f32f9a505076001600160a01b031690636352211e90602401602060405180830381865afa158015610a53573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a779190613dd9565b5f85815260436020908152604080832060ff88168085529252822091909155909150610ac590600490600e8110610ab057610ab0613df4565b60040201546001600160a01b03168284612e2e565b610b01575f84815260436020908152604080832060ff871684529091529081902083905580516301f30c8760e21b815290519081900360040190fd5b604080515f81526020810184905260ff85169186917f8110a247e3bf84088ca20c991ad431b68293ca3bdfe626df91b9744bf4d7b9ce910160405180910390a3505060016045555050565b5f546001600160a01b03163314610b765760405163ea8e4eb560e01b815260040160405180910390fd5b60405147905f906001600160a01b0384169083908381818185875af1925050503d805f8114610bc0576040519150601f19603f3d011682016040523d82523d5f602084013e610bc5565b606091505b5050905080610c0d5760405162461bcd60e51b815260206004820152600f60248201526e195d1a081cd95b990819985a5b1959608a1b60448201526064015b60405180910390fd5b6040518281526001600160a01b038416905f907f3af790fafda720819b2fc6e15090606e81154e0ac9a92d38ecad006d99d20ecc906020015b60405180910390a3505050565b5f546001600160a01b03163314610c7d5760405163ea8e4eb560e01b815260040160405180910390fd5b6040516370a0823160e01b81523060048201525f906001600160a01b038416906370a0823190602401602060405180830381865afa158015610cc1573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ce59190613e08565b9050610cf2838383612e2e565b610d325760405162461bcd60e51b81526020600482015260116024820152701d1bdad95b881cd95b990819985a5b1959607a1b6044820152606401610c04565b816001600160a01b0316836001600160a01b03167f3af790fafda720819b2fc6e15090606e81154e0ac9a92d38ecad006d99d20ecc83604051610c4691815260200190565b610d7f610861565b5f610d886113e0565b90505f5b82811015611262575f848483818110610da757610da7613df4565b602090810292909201355f818152603e909352604090922060028101549293509160ff16159050610e5357670de0b6b3a76400008160010154604054610ded9190613e1f565b8254610e0291906001600160801b0316613d9b565b610e0c9190613dc6565b81548290601090610e2e908490600160801b90046001600160801b0316613e32565b92506101000a8154816001600160801b0302191690836001600160801b031602179055505b604080546001830155516382afd23b60e01b8152600481018390525f907f000000000000000000000000968c5f0b6fe2f77b221f5e015c955f32f9a505076001600160a01b0316906382afd23b90602401602060405180830381865afa158015610ebf573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ee39190613e51565b610eed575f610f73565b60405162ecfa2f60e31b8152600481018490527f000000000000000000000000968c5f0b6fe2f77b221f5e015c955f32f9a505076001600160a01b031690630767d17890602401602060405180830381865afa158015610f4f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f739190613e08565b9050805f03610ff757600282015460ff1615610fba578154603f80546001600160801b03909216915f90610fa8908490613e1f565b909155505060028201805460ff191690555b81546001600160801b0319168255604080515f808252602082015284915f805160206141f8833981519152910160405180910390a250505061125a565b600282015460ff166110a95781546001600160801b0319166001600160801b038216178255600282015461010090046001600160401b03165f0361106957611040856001613a6a565b8260020160016101000a8154816001600160401b0302191690836001600160401b031602179055505b6002820154604080518381526101009092046001600160401b0316602083015284915f805160206141f883398151915291015b60405180910390a26111d9565b81546001600160801b0316811015611122578154603f5482916110d7916001600160801b0390911690613e1f565b6110e19190613a6a565b603f5581546001600160801b0319166001600160801b038216178255604080518281526020810187905284915f805160206141f8833981519152910161109c565b81546001600160801b03168111156111d9578154603f548291611150916001600160801b0390911690613e1f565b61115a9190613a6a565b603f5581546001600160801b0319166001600160801b038216178255611181856001613a6a565b60028301805468ffffffffffffffff0019166101006001600160401b03938416810291909117918290556040805185815291909204909216602083015284915f805160206141f8833981519152910160405180910390a25b600282015460ff161580156111ff5750600282015461010090046001600160401b031615155b801561121d5750600282015461010090046001600160401b03168510155b156112565760028201805460ff191660011790558154603f80546001600160801b03909216915f90611250908490613a6a565b90915550505b5050505b600101610d8c565b50505050565b5f546001600160a01b031633146112925760405163ea8e4eb560e01b815260040160405180910390fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b5f8060048460ff16600e81106112cc576112cc613df4565b60040201905080600301601b9054906101000a900460ff1661130157604051633640530560e01b815260040160405180910390fd5b60028101546001600160a01b031661135f5760018101548154611357916001600160a01b0390811691610708917f0000000000000000000000000bd7d308f8e1639fab988df18a8011f41eacad73911687612efd565b9150506113da565b600181015460038201545f916113a8916001600160a01b0391821691610708917f0000000000000000000000000bd7d308f8e1639fab988df18a8011f41eacad73911688612efd565b6002830154600384015484549293506113d5926001600160a01b0392831692610708928116911685612efd565b925050505b92915050565b5f6113ed610e1042613dc6565b905090565b5f546001600160a01b0316331461141c5760405163ea8e4eb560e01b815260040160405180910390fd5b600255565b6040516331a9108f60e11b81526004810186905233906001600160a01b037f000000000000000000000000968c5f0b6fe2f77b221f5e015c955f32f9a505071690636352211e90602401602060405180830381865afa158015611486573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114aa9190613dd9565b6001600160a01b0316146114d15760405163ea8e4eb560e01b815260040160405180910390fd5b8215806114de5750600383115b806114e95750828114155b15611507576040516301f30c8760e21b815260040160405180910390fd5b5f858152603d60205260408120815b8581101561174557603c5460ff1687878381811061153657611536613df4565b905060200201602081019061154b9190613e6c565b60ff161015806115a95750600487878381811061156a5761156a613df4565b905060200201602081019061157f9190613e6c565b60ff16600e811061159257611592613df4565b60040201600301601b9054906101000a900460ff16155b156115c757604051633640530560e01b815260040160405180910390fd5b5f5b8181101561164b578787838181106115e3576115e3613df4565b90506020020160208101906115f89190613e6c565b60ff1688888381811061160d5761160d613df4565b90506020020160208101906116229190613e6c565b60ff1603611643576040516301f30c8760e21b815260040160405180910390fd5b6001016115c9565b5086868281811061165e5761165e613df4565b90506020020160208101906116739190613e6c565b82826003811061168557611685613df4565b602091828204019190066101000a81548160ff021916908360ff1602179055508484828181106116b7576116b7613df4565b90506020020160208101906116cc9190613e85565b8260010182600381106116e1576116e1613df4565b601091828204019190066002026101000a81548161ffff021916908361ffff16021790555084848281811061171857611718613df4565b905060200201602081019061172d9190613e85565b61173b9061ffff1684613a6a565b9250600101611516565b508161271014611768576040516301f30c8760e21b815260040160405180910390fd5b60028101805460ff191660ff871690811790915560405190815287907f9289c2bdf2133c72d7dccab03946c733038fb8d5b7e24787b0afbd7a77aad9359060200160405180910390a250505050505050565b5f3330146117db5760405163ea8e4eb560e01b815260040160405180910390fd5b6117e58383612f13565b9392505050565b5f818152603e6020526040812080546002820154600160801b9091046001600160801b03169060ff16156117e557670de0b6b3a764000082600101546040546118359190613e1f565b835461184a91906001600160801b0316613d9b565b6118549190613dc6565b61185e9082613a6a565b949350505050565b600481600e8110611875575f80fd5b600402018054600182015460028301546003909301546001600160a01b0392831694509082169282169181169062ffffff600160a01b8204811691600160b81b81049091169060ff600160d01b8204811691600160d81b90041688565b6045546001146118f55760405163769dd35360e11b815260040160405180910390fd5b6002604555611902610861565b8061190b613a19565b5f826001600160401b0381111561192457611924613ea6565b60405190808252806020026020018201604052801561195d57816020015b61194a613a38565b8152602001906001900390816119425790505b5090505f836001600160401b0381111561197957611979613ea6565b6040519080825280602002602001820160405280156119b257816020015b61199f613a38565b8152602001906001900390816119975790505b5090505f846001600160401b038111156119ce576119ce613ea6565b6040519080825280602002602001820160405280156119f7578160200160208202803683370190505b5090505f5b85811015611d1e575f888883818110611a1757611a17613df4565b602090810292909201355f818152603e84526040808220603d909552902083546002850154929550909250600160801b90046001600160801b03169060ff1615611aaa57670de0b6b3a76400008360010154604054611a769190613e1f565b8454611a8b91906001600160801b0316613d9b565b611a959190613dc6565b611a9f9082613a6a565b604054600185015590505b805f03611aba5750505050611d16565b600282015460ff16611aca613a38565b611ad2613a38565b8260ff165f03611af75760019250611ae86131ef565b60ff1682526127108152611b9c565b604080516060810191829052908690600390825f855b825461010083900a900460ff16815260206001928301818104948501949093039092029101808411611b0d57505060408051606081019182905295975060018b0194506003935091508390505f855b82829054906101000a900461ffff1661ffff1681526020019060020190602082600101049283019260010382029150808411611b5c579050505050505090505b85546001600160801b03168655885183908a908a908110611bbf57611bbf613df4565b60ff909216602092830291909101909101525f805b8460ff16811015611d0c575f60ff8616611bef836001613a6a565b14611c2b57612710848360038110611c0957611c09613df4565b6020020151611c1c9061ffff1689613d9b565b611c269190613dc6565b611c35565b611c358388613e1f565b9050611c418184613a6a565b9250808e8c81518110611c5657611c56613df4565b60200260200101518360038110611c6f57611c6f613df4565b6020020152848260038110611c8657611c86613df4565b60200201518d8c81518110611c9d57611c9d613df4565b60200260200101518360038110611cb657611cb6613df4565b60ff9092166020929092020152808f868460038110611cd757611cd7613df4565b602002015160ff16600e8110611cef57611cef613df4565b60200201818151611d009190613a6a565b90525050600101611bd4565b5050505050505050505b6001016119fc565b50611d27613a19565b611d2f613a19565b5f5b603c5460ff9081169082161015611e68575f878260ff16600e8110611d5857611d58613df4565b60200201519050801580611d6d575060025481105b15611d785750611e60565b604051635886cf2160e11b815260ff8316600482015260248101829052309063b10d9e42906044016020604051808303815f875af1925050508015611dda575060408051601f3d908101601f19168201909252611dd791810190613e08565b60015b611e20578160ff167f658935f8cd82af21d125a8f1e19e9e8b5b1137a405b0218bc5ee4b3ddac76cc282604051611e1391815260200190565b60405180910390a2611e5e565b80858460ff16600e8110611e3657611e36613df4565b602002015260018460ff8516600e8110611e5257611e52613df4565b91151560209092020152505b505b600101611d31565b505f5b878110156122ab575f8a8a83818110611e8657611e86613df4565b9050602002013590505f5b858381518110611ea357611ea3613df4565b602002602001015160ff168110156122a1575f888481518110611ec857611ec8613df4565b60200260200101518260038110611ee157611ee1613df4565b60200201519050805f03611ef55750612299565b5f888581518110611f0857611f08613df4565b60200260200101518360038110611f2157611f21613df4565b60200201519050858160ff16600e8110611f3d57611f3d613df4565b6020020151611fdf575f848152603e602052604090208054839190601090611f76908490600160801b90046001600160801b0316613e32565b92506101000a8154816001600160801b0302191690836001600160801b031602179055508060ff16847fc2cda032f63ebe7629abecffad35589c71515edfd5b2c2048e340b3033a536e484604051611fd091815260200190565b60405180910390a35050612299565b5f8b8260ff16600e8110611ff557611ff5613df4565b602002015183898460ff16600e811061201057612010613df4565b602002015161201f9190613d9b565b6120299190613dc6565b9050805f036120cc575f858152603e602052604090208054849190601090612062908490600160801b90046001600160801b0316613e32565b92506101000a8154816001600160801b0302191690836001600160801b031602179055508160ff16857fc2cda032f63ebe7629abecffad35589c71515edfd5b2c2048e340b3033a536e4856040516120bc91815260200190565b60405180910390a3505050612299565b5f8581526044602052604081205460ff16806120f157506001546001600160a01b0316155b156121b2576121ab60048460ff16600e811061210f5761210f613df4565b600490810291909101546040516331a9108f60e11b81529182018990526001600160a01b03908116917f000000000000000000000000968c5f0b6fe2f77b221f5e015c955f32f9a5050790911690636352211e90602401602060405180830381865afa158015612181573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121a59190613dd9565b84612e2e565b9050612218565b6040516303ed890760e61b81526004810187905260ff8416602482015260448101839052309063fb6241c0906064015f604051808303815f87803b1580156121f8575f80fd5b505af1925050508015612209575060015b61221457505f612218565b5060015b801561226357604080518581526020810184905260ff85169188917f8110a247e3bf84088ca20c991ad431b68293ca3bdfe626df91b9744bf4d7b9ce910160405180910390a3612294565b5f86815260436020908152604080832060ff871684529091528120805484929061228e908490613a6a565b90915550505b505050505b600101611e91565b5050600101611e6b565b505060016045555050505050505050565b5f546001600160a01b031633146122e65760405163ea8e4eb560e01b815260040160405180910390fd5b6122ee610861565b5f5b81811015612528575f83838381811061230b5761230b613df4565b602090810292909201355f818152603e909352604090922060028101549293509160ff1615905061233d575050612520565b6040516382afd23b60e01b8152600481018390527f000000000000000000000000968c5f0b6fe2f77b221f5e015c955f32f9a505076001600160a01b0316906382afd23b90602401602060405180830381865afa1580156123a0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123c49190613e51565b6123cf575050612520565b60405162ecfa2f60e31b8152600481018390525f907f000000000000000000000000968c5f0b6fe2f77b221f5e015c955f32f9a505076001600160a01b031690630767d17890602401602060405180830381865afa158015612433573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906124579190613e08565b9050805f0361246857505050612520565b81546001600160801b0319166001600160801b03821617825560405460018084019190915560028301805460ff191690911790556124a46113e0565b8260020160016101000a8154816001600160401b0302191690836001600160401b0316021790555080603f5f8282546124dd9190613a6a565b90915550506002820154604080518381526101009092046001600160401b0316602083015284915f805160206141f8833981519152910160405180910390a25050505b6001016122f0565b505050565b612535613a38565b61253d613a38565b5f838152603d602052604080822060028101548251606081019384905291928392600184019260ff169184906003908289855b825461010083900a900460ff168152602060019283018181049485019490930390920291018084116125705750506040805160608101918290529598508794506003935091508390505f855b82829054906101000a900461ffff1661ffff16815260200190600201906020826001010492830192600103820291508084116125bc5750979d949c50949a509298505050505050505050565b6040516331a9108f60e11b81526004810183905233906001600160a01b037f000000000000000000000000968c5f0b6fe2f77b221f5e015c955f32f9a505071690636352211e90602401602060405180830381865afa15801561266d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126919190613dd9565b6001600160a01b0316146126b85760405163ea8e4eb560e01b815260040160405180910390fd5b5f91825260446020526040909120805460ff1916911515919091179055565b5f546001600160a01b031633146127015760405163ea8e4eb560e01b815260040160405180910390fd5b6101f4811115612724576040516301f30c8760e21b815260040160405180910390fd5b600355565b3330146127495760405163ea8e4eb560e01b815260040160405180910390fd5b5f60048360ff16600e811061276057612760613df4565b600490810291909101546001546040516370a0823160e01b81526001600160a01b03918216938101939093521691505f9082906370a0823190602401602060405180830381865afa1580156127b7573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906127db9190613e08565b6001549091506127f69083906001600160a01b031685612e2e565b612813576040516301f30c8760e21b815260040160405180910390fd5b6001546040516370a0823160e01b81526001600160a01b0391821660048201525f918391908516906370a0823190602401602060405180830381865afa15801561285f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128839190613e08565b61288d9190613e1f565b9050805f036128af576040516301f30c8760e21b815260040160405180910390fd5b6001546040516307e0ace760e21b81526004810188905260ff871660248201526001600160a01b0385811660448301526064820184905290911690631f82b39c906084015f604051808303815f87803b15801561290a575f80fd5b505af115801561291c573d5f803e3d5ffd5b50505050505050505050565b5f546001600160a01b031633146129525760405163ea8e4eb560e01b815260040160405180910390fd5b603c54600e60ff9091161061297a576040516301f30c8760e21b815260040160405180910390fd5b6001600160a01b038516158061299757506001600160a01b038416155b156129b5576040516301f30c8760e21b815260040160405180910390fd5b5f5b603c5460ff9081169082161015612a1c57856001600160a01b031660048260ff16600e81106129e8576129e8613df4565b60040201546001600160a01b031603612a14576040516301f30c8760e21b815260040160405180910390fd5b6001016129b7565b505f806001600160a01b038516612ae7576001600160a01b03841615612a55576040516301f30c8760e21b815260040160405180910390fd5b612a80867f0000000000000000000000000bd7d308f8e1639fab988df18a8011f41eacad738961327b565b856001600160a01b031663ddca3f436040518163ffffffff1660e01b8152600401602060405180830381865afa158015612abc573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612ae09190613eba565b9150612c63565b6001600160a01b0384161580612b0e5750866001600160a01b0316846001600160a01b0316145b80612b4a57507f0000000000000000000000000bd7d308f8e1639fab988df18a8011f41eacad736001600160a01b0316846001600160a01b0316145b15612b68576040516301f30c8760e21b815260040160405180910390fd5b612b93867f0000000000000000000000000bd7d308f8e1639fab988df18a8011f41eacad738661327b565b612b9e85858961327b565b856001600160a01b031663ddca3f436040518163ffffffff1660e01b8152600401602060405180830381865afa158015612bda573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612bfe9190613eba565b9150846001600160a01b031663ddca3f436040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c3c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612c609190613eba565b90505b60408051610100810182526001600160a01b03808a168252888116602083015287811692820192909252908516606082015262ffffff8084166080830152821660a082015283151560c0820152600160e0820152603c5460049060ff16600e8110612cd057612cd0613df4565b82516004919091029190910180546001600160a01b03199081166001600160a01b0393841617825560208085015160018401805484169186169190911790556040808601516002850180549094169086161790925560608086015160039094018054608088015160a089015160c08a015160e0909a01519789166001600160b81b031990931692909217600160a01b62ffffff928316021763ffffffff60b81b1916600160b81b919092160260ff60d01b191617600160d01b971515979097029690961760ff60d81b1916600160d81b9415159490940293909317909455603c5481518c85168152938b16948401949094528615159083015260ff909216917f8897a70732c65332aa906918dfffbbe1a009b7adf4ba0eddb43c40771aac7656910160405180910390a2603c805460ff16905f612e0c83613edc565b91906101000a81548160ff021916908360ff1602179055505050505050505050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b17905291515f928392839291881691612e8b9190613efa565b5f604051808303815f865af19150503d805f8114612ec4576040519150601f19603f3d011682016040523d82523d5f602084013e612ec9565b606091505b5091509150818015612ef3575080511580612ef3575080806020019051810190612ef39190613e51565b9695505050505050565b5f612ef3612f0b87876133cf565b838686613571565b5f80612710600354612710612f289190613e1f565b612f3286866112b4565b612f3c9190613d9b565b612f469190613dc6565b90505f8111612f835760405162461bcd60e51b815260206004820152600960248201526874776170207a65726f60b81b6044820152606401610c04565b5f60048560ff16600e8110612f9a57612f9a613df4565b6004020160028101549091505f906001600160a01b03161561305557600382015482546040516bffffffffffffffffffffffff197f0000000000000000000000000bd7d308f8e1639fab988df18a8011f41eacad73606090811b821660208401526001600160e81b0319600160a01b860460e890811b8216603486015286831b84166037860152600160b81b90960490951b909416604b8301529190921b16604e8201526062016040516020818303038152906040526130d4565b600382015482546040516bffffffffffffffffffffffff197f0000000000000000000000000bd7d308f8e1639fab988df18a8011f41eacad73606090811b821660208401526001600160e81b0319600160a01b90950460e81b9490941660348301529190921b166037820152604b016040516020818303038152906040525b90507f0000000000000000000000000bd7d308f8e1639fab988df18a8011f41eacad736001600160a01b031663d0e30db0866040518263ffffffff1660e01b81526004015f604051808303818588803b15801561312f575f80fd5b505af1158015613141573d5f803e3d5ffd5b5050604080516080810182528581523060208201528082018a905260608101889052905163b858183f60e01b81526001600160a01b037f000000000000000000000000caf681a66d020601342297493863e78c959e5cb216945063b858183f93506131af9250600401613f10565b6020604051808303815f875af11580156131cb573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612ef39190613e08565b5f805b603c5460ff90811690821610156132745760048160ff16600e811061321957613219613df4565b60040201600301601b9054906101000a900460ff168015613262575060048160ff16600e811061324b5761324b613df4565b60040201600301601a9054906101000a900460ff16155b1561326c57919050565b6001016131f2565b505f905090565b5f836001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa1580156132b8573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906132dc9190613dd9565b90505f846001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa15801561331b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061333f9190613dd9565b9050836001600160a01b0316826001600160a01b03161480156133735750826001600160a01b0316816001600160a01b0316145b806133ab5750826001600160a01b0316826001600160a01b03161480156133ab5750836001600160a01b0316816001600160a01b0316145b6133c8576040516301f30c8760e21b815260040160405180910390fd5b5050505050565b5f8163ffffffff165f036133f657604051632a0c9bb560e11b815260040160405180910390fd5b6040805160028082526060820183525f9260208301908036833701905050905082815f8151811061342957613429613df4565b602002602001019063ffffffff16908163ffffffff16815250505f8160018151811061345757613457613df4565b63ffffffff9092166020928302919091019091015260405163883bdbfd60e01b81525f906001600160a01b0386169063883bdbfd9061349a908590600401613f75565b5f60405180830381865afa1580156134b4573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526134db9190810190614082565b5090505f815f815181106134f1576134f1613df4565b60200260200101518260018151811061350c5761350c613df4565b602002602001015161351e919061414c565b905061353063ffffffff861682614179565b93505f8160060b128015613555575061354f63ffffffff8616826141b5565b60060b15155b156135685783613564816141d6565b9450505b50505092915050565b5f8061357c86613658565b90506001600160801b036001600160a01b038216116135ef575f6135a96001600160a01b03831680613d9b565b9050836001600160a01b0316856001600160a01b0316106135d8576135d3600160c01b8783613973565b6135e7565b6135e78187600160c01b613973565b92505061364f565b5f61360d6001600160a01b0383168068010000000000000000613973565b9050836001600160a01b0316856001600160a01b03161061363c57613637600160801b8783613973565b61364b565b61364b8187600160801b613973565b9250505b50949350505050565b5f805f8360020b1261366d578260020b613674565b8260020b5f035b9050620d89e881111561369a5760405163c7e13a0160e01b815260040160405180910390fd5b5f816001165f036136af57600160801b6136c1565b6ffffcb933bd6fad37aa2d162d1a5940015b70ffffffffffffffffffffffffffffffffff16905060028216156136f5576ffff97272373d413259a46990580e213a0260801c5b6004821615613714576ffff2e50f5f656932ef12357cf3c7fdcc0260801c5b6008821615613733576fffe5caca7e10e4e61c3624eaa0941cd00260801c5b6010821615613752576fffcb9843d60f6159c9db58835c9266440260801c5b6020821615613771576fff973b41fa98c081472e6896dfb254c00260801c5b6040821615613790576fff2ea16466c96a3843ec78b326b528610260801c5b60808216156137af576ffe5dee046a99a2a811c461f1969c30530260801c5b6101008216156137cf576ffcbe86c7900a88aedcffc83b479aa3a40260801c5b6102008216156137ef576ff987a7253ac413176f2b074cf7815e540260801c5b61040082161561380f576ff3392b0822b70005940c7a398e4b70f30260801c5b61080082161561382f576fe7159475a2c29b7443b29c7fa6e889d90260801c5b61100082161561384f576fd097f3bdfd2022b8845ad8f792aa58250260801c5b61200082161561386f576fa9f746462d870fdf8a65dc1f90e061e50260801c5b61400082161561388f576f70d869a156d2a1b890bb3df62baf32f70260801c5b6180008216156138af576f31be135f97d08fd981231505542fcfa60260801c5b620100008216156138d0576f09aa508b5b7a84e1c677de54f3e99bc90260801c5b620200008216156138f0576e5d6af8dedb81196699c329225ee6040260801c5b6204000082161561390f576d2216e584f5fa1ea926041bedfe980260801c5b6208000082161561392c576b048a170391f7dc42444e8fa20260801c5b5f8460020b131561394b57805f198161394757613947613db2565b0490505b64010000000081061561395f576001613961565b5f5b60ff16602082901c0192505050919050565b5f80805f19858709858702925082811083820303915050805f036139a7575f841161399c575f80fd5b5082900490506117e5565b8084116139b2575f80fd5b5f8486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091025f889003889004909101858311909403939093029303949094049190911702949350505050565b604051806101c00160405280600e906020820280368337509192915050565b60405180606001604052806003906020820280368337509192915050565b634e487b7160e01b5f52601160045260245ffd5b808201808211156113da576113da613a56565b6001600160a01b0381168114613a91575f80fd5b50565b5f60208284031215613aa4575f80fd5b81356117e581613a7d565b803560ff81168114613abf575f80fd5b919050565b5f8060408385031215613ad5575f80fd5b82359150613ae560208401613aaf565b90509250929050565b5f8060408385031215613aff575f80fd5b8235613b0a81613a7d565b91506020830135613b1a81613a7d565b809150509250929050565b5f8083601f840112613b35575f80fd5b5081356001600160401b03811115613b4b575f80fd5b6020830191508360208260051b8501011115613b65575f80fd5b9250929050565b5f8060208385031215613b7d575f80fd5b82356001600160401b03811115613b92575f80fd5b613b9e85828601613b25565b90969095509350505050565b5f8060408385031215613bbb575f80fd5b613bc483613aaf565b946020939093013593505050565b5f60208284031215613be2575f80fd5b5035919050565b5f805f805f60608688031215613bfd575f80fd5b8535945060208601356001600160401b03811115613c19575f80fd5b613c2588828901613b25565b90955093505060408601356001600160401b03811115613c43575f80fd5b613c4f88828901613b25565b969995985093965092949392505050565b60e0810181855f5b6003811015613c8a57815160ff16835260209283019290910190600101613c68565b50505060608201845f5b6003811015613cb757815161ffff16835260209283019290910190600101613c94565b50505060ff831660c0830152949350505050565b8015158114613a91575f80fd5b5f8060408385031215613ce9575f80fd5b823591506020830135613b1a81613ccb565b5f805f60608486031215613d0d575f80fd5b83359250613d1d60208501613aaf565b929592945050506040919091013590565b5f805f805f60a08688031215613d42575f80fd5b8535613d4d81613a7d565b94506020860135613d5d81613a7d565b93506040860135613d6d81613a7d565b92506060860135613d7d81613a7d565b91506080860135613d8d81613ccb565b809150509295509295909350565b80820281158282048414176113da576113da613a56565b634e487b7160e01b5f52601260045260245ffd5b5f82613dd457613dd4613db2565b500490565b5f60208284031215613de9575f80fd5b81516117e581613a7d565b634e487b7160e01b5f52603260045260245ffd5b5f60208284031215613e18575f80fd5b5051919050565b818103818111156113da576113da613a56565b6001600160801b0381811683821601908111156113da576113da613a56565b5f60208284031215613e61575f80fd5b81516117e581613ccb565b5f60208284031215613e7c575f80fd5b6117e582613aaf565b5f60208284031215613e95575f80fd5b813561ffff811681146117e5575f80fd5b634e487b7160e01b5f52604160045260245ffd5b5f60208284031215613eca575f80fd5b815162ffffff811681146117e5575f80fd5b5f60ff821660ff8103613ef157613ef1613a56565b60010192915050565b5f82518060208501845e5f920191825250919050565b602081525f82516080602084015280518060a0850152806020830160c086015e5f60c0828601015260018060a01b036020860151166040850152604085015160608501526060850151608085015260c0601f19601f8301168501019250505092915050565b602080825282518282018190525f918401906040840190835b81811015613fb257835163ffffffff16835260209384019390920191600101613f8e565b509095945050505050565b604051601f8201601f191681016001600160401b0381118282101715613fe557613fe5613ea6565b604052919050565b5f6001600160401b0382111561400557614005613ea6565b5060051b60200190565b5f82601f83011261401e575f80fd5b815161403161402c82613fed565b613fbd565b8082825260208201915060208360051b860101925085831115614052575f80fd5b602085015b8381101561407857805161406a81613a7d565b835260209283019201614057565b5095945050505050565b5f8060408385031215614093575f80fd5b82516001600160401b038111156140a8575f80fd5b8301601f810185136140b8575f80fd5b80516140c661402c82613fed565b8082825260208201915060208360051b8501019250878311156140e7575f80fd5b6020840193505b828410156141175783518060060b8114614106575f80fd5b8252602093840193909101906140ee565b8095505050505060208301516001600160401b03811115614136575f80fd5b6141428582860161400f565b9150509250929050565b600682810b9082900b03667fffffffffffff198112667fffffffffffff821317156113da576113da613a56565b5f8160060b8360060b8061418f5761418f613db2565b667fffffffffffff1982145f19821416156141ac576141ac613a56565b90059392505050565b5f8260060b806141c7576141c7613db2565b808360060b0791505092915050565b5f8160020b627fffff1981036141ee576141ee613a56565b5f19019291505056fe9aa1a56064c83c34d45ce0f34a60a04b6c6fd4bf28b61a19c16235ebedb30b19a2646970667358221220afabf3bf2c3410c0d19abe18c40d495db65f78977ba2ea0a5e226d9f3b33865a64736f6c634300081a0033
| Type | Age | Block | Details |
|---|---|---|---|
| no cross-chain L1↔L2 transactions for this address | |||
| Txn Hash | Age | Event | Topics / Data |
|---|---|---|---|
| 0x0c3492…37a681 | 14 hrs agoMon, 17 Aug 2026 03:40:47 UTC | 0x9aa1a5…0b19 | [0] 0x000000000000…000007ab data: 0x000000000000000000…00000000 |
| 0x0c3492…37a681 | 14 hrs agoMon, 17 Aug 2026 03:40:47 UTC | 0x9aa1a5…0b19 | [0] 0x000000000000…0000019c data: 0x000000000000000000…000792f4 |
| 0x0c3492…37a681 | 14 hrs agoMon, 17 Aug 2026 03:40:47 UTC | 0x9aa1a5…0b19 | [0] 0x000000000000…0000015c data: 0x000000000000000000…00000000 |
| 0xe57a86…8e116c | 14 hrs agoMon, 17 Aug 2026 03:40:36 UTC | 0x9289c2…d935 | [0] 0x000000000000…00000a61 data: 0x000000000000000000…00000003 |
| 0x9c66c1…62ba36 | 14 hrs agoMon, 17 Aug 2026 03:35:46 UTC | 0x9aa1a5…0b19 | [0] 0x000000000000…0000046c data: 0x000000000000000000…00000000 |
| 0x226c00…066240 | 14 hrs agoMon, 17 Aug 2026 03:34:27 UTC | 0x9289c2…d935 | [0] 0x000000000000…000009d0 data: 0x000000000000000000…00000001 |
| 0x241588…4f410d | 14 hrs agoMon, 17 Aug 2026 03:30:44 UTC | 0x9aa1a5…0b19 | [0] 0x000000000000…000008ea data: 0x000000000000000000…00000000 |
| 0x241588…4f410d | 14 hrs agoMon, 17 Aug 2026 03:30:44 UTC | 0x9aa1a5…0b19 | [0] 0x000000000000…0000019c data: 0x000000000000000000…000792f4 |
| 0x00d797…d97fc4 | 14 hrs agoMon, 17 Aug 2026 03:25:09 UTC | 0x9aa1a5…0b19 | [0] 0x000000000000…000007ab data: 0x000000000000000000…000792f4 |
| 0x00d797…d97fc4 | 14 hrs agoMon, 17 Aug 2026 03:25:09 UTC | 0x9aa1a5…0b19 | [0] 0x000000000000…0000015c data: 0x000000000000000000…000792f4 |
| 0xc7aead…ac9eaf | 14 hrs agoMon, 17 Aug 2026 03:21:56 UTC | 0x9289c2…d935 | [0] 0x000000000000…0000068d data: 0x000000000000000000…00000002 |
| 0xeae0f6…6018e7 | 14 hrs agoMon, 17 Aug 2026 03:21:27 UTC | 0x9289c2…d935 | [0] 0x000000000000…00000893 data: 0x000000000000000000…00000002 |
| 0x6c4668…078e95 | 14 hrs agoMon, 17 Aug 2026 03:20:15 UTC | 0x9289c2…d935 | [0] 0x000000000000…00000256 data: 0x000000000000000000…00000001 |
| 0x0962e8…7e1755 | 14 hrs agoMon, 17 Aug 2026 03:20:08 UTC | 0x9aa1a5…0b19 | [0] 0x000000000000…0000046b data: 0x000000000000000000…00079293 |
| 0x0962e8…7e1755 | 14 hrs agoMon, 17 Aug 2026 03:20:08 UTC | 0x9aa1a5…0b19 | [0] 0x000000000000…00000256 data: 0x000000000000000000…0007928d |
| 0x0962e8…7e1755 | 14 hrs agoMon, 17 Aug 2026 03:20:08 UTC | 0x9aa1a5…0b19 | [0] 0x000000000000…0000019e data: 0x000000000000000000…00079297 |
| 0xae273c…62c04f | 14 hrs agoMon, 17 Aug 2026 03:18:39 UTC | 0x9289c2…d935 | [0] 0x000000000000…00000816 data: 0x000000000000000000…00000003 |
| 0x5ccc83…fb1f3b | 14 hrs agoMon, 17 Aug 2026 03:17:09 UTC | 0x9289c2…d935 | [0] 0x000000000000…0000023f data: 0x000000000000000000…00000002 |
| 0x2f588f…6e2d82 | 14 hrs agoMon, 17 Aug 2026 03:15:06 UTC | 0x9aa1a5…0b19 | [0] 0x000000000000…0000046b data: 0x000000000000000000…00000000 |
| 0x2f588f…6e2d82 | 14 hrs agoMon, 17 Aug 2026 03:15:06 UTC | 0x9aa1a5…0b19 | [0] 0x000000000000…000003f0 data: 0x000000000000000000…00000000 |
| 0x9b0cef…802d0c | 15 hrs agoMon, 17 Aug 2026 03:10:40 UTC | 0x9289c2…d935 | [0] 0x000000000000…00000949 data: 0x000000000000000000…00000001 |
| 0x548bba…5e7378 | 15 hrs agoMon, 17 Aug 2026 03:10:32 UTC | 0x9289c2…d935 | [0] 0x000000000000…0000071f data: 0x000000000000000000…00000001 |
| 0x5713a5…1fd3a5 | 15 hrs agoMon, 17 Aug 2026 03:10:23 UTC | 0x9289c2…d935 | [0] 0x000000000000…000005e1 data: 0x000000000000000000…00000001 |
| 0xe401b8…80349a | 15 hrs agoMon, 17 Aug 2026 03:10:16 UTC | 0x9289c2…d935 | [0] 0x000000000000…000000de data: 0x000000000000000000…00000001 |
| 0xc9a51a…5468cd | 15 hrs agoMon, 17 Aug 2026 03:10:10 UTC | 0x9289c2…d935 | [0] 0x000000000000…0000009c data: 0x000000000000000000…00000001 |
| Transaction Hash | Method | Block | Age | From | To | Amount | Token | ||
|---|---|---|---|---|---|---|---|---|---|
| 0x4d43620d…9f1469 | Transfer | 38,498,091 | 15 hrs agoMon, 17 Aug 2026 03:02:02 UTC | 0xb0cc…5cda | OUT | 0x7908…919f | $0.070.071775 USDG | Global Dollar (USDG) | |
| 0x4d43620d…9f1469 | Transfer | 38,498,091 | 15 hrs agoMon, 17 Aug 2026 03:02:02 UTC | 0xb0cc…5cda | OUT | 0x52e6…71ca | 0.000037 WETH | WETH (WETH) | |
| 0x4d43620d…9f1469 | Transfer | 38,498,091 | 15 hrs agoMon, 17 Aug 2026 03:02:02 UTC | 0x52e6…71ca | IN | 0xb0cc…5cda | $0.070.071775 USDG | Global Dollar (USDG) | |
| 0x4d43620d…9f1469 | Transfer | 38,498,091 | 15 hrs agoMon, 17 Aug 2026 03:02:02 UTC | 0x0000…0000 | IN | 0xb0cc…5cda | 0.000037 WETH | WETH (WETH) | |
| 0xdd13c18e…363343 | Transfer | 38,498,087 | 15 hrs agoMon, 17 Aug 2026 03:02:01 UTC | 0xb0cc…5cda | OUT | 0x4737…979b | $0.051.657191 PONS | ||
| 0xdd13c18e…363343 | Transfer | 38,498,087 | 15 hrs agoMon, 17 Aug 2026 03:02:01 UTC | 0xb0cc…5cda | OUT | 0x7742…bd11 | $0.040.037776 USDG | Global Dollar (USDG) | |
| 0xdd13c18e…363343 | Transfer | 38,498,087 | 15 hrs agoMon, 17 Aug 2026 03:02:01 UTC | 0xb0cc…5cda | OUT | 0xee75…82ba | $0.040.037776 USDG | Global Dollar (USDG) | |
| 0xdd13c18e…363343 | Transfer | 38,498,087 | 15 hrs agoMon, 17 Aug 2026 03:02:01 UTC | 0xb0cc…5cda | OUT | 0x7908…919f | $0.020.000071 TSLA | Tesla • Robinhood Token (TSLA) | |
| 0xdd13c18e…363343 | Transfer | 38,498,087 | 15 hrs agoMon, 17 Aug 2026 03:02:01 UTC | 0xb0cc…5cda | OUT | 0x7908…919f | 0.000172 SPCX | Space Exploration Technologies Corp. Class A Common Stock • Robinhood Token (SPCX) | |
| 0xdd13c18e…363343 | Transfer | 38,498,087 | 15 hrs agoMon, 17 Aug 2026 03:02:01 UTC | 0xb0cc…5cda | OUT | 0x7908…919f | $0.020.018888 USDG | Global Dollar (USDG) | |
| 0xdd13c18e…363343 | Transfer | 38,498,087 | 15 hrs agoMon, 17 Aug 2026 03:02:01 UTC | 0xb0cc…5cda | OUT | 0x7908…919f | $0.020.591854 PONS | ||
| 0xdd13c18e…363343 | Transfer | 38,498,087 | 15 hrs agoMon, 17 Aug 2026 03:02:01 UTC | 0xb0cc…5cda | OUT | 0x7908…919f | $0.120.122774 USDG | Global Dollar (USDG) | |
| 0xdd13c18e…363343 | Transfer | 38,498,087 | 15 hrs agoMon, 17 Aug 2026 03:02:01 UTC | 0xb0cc…5cda | OUT | 0x7908…919f | $0.040.037776 USDG | Global Dollar (USDG) | |
| 0xdd13c18e…363343 | Transfer | 38,498,087 | 15 hrs agoMon, 17 Aug 2026 03:02:01 UTC | 0xb0cc…5cda | OUT | 0x7908…919f | 0.000049 AMZN | Amazon • Robinhood Token (AMZN) | |
| 0xdd13c18e…363343 | Transfer | 38,498,087 | 15 hrs agoMon, 17 Aug 2026 03:02:01 UTC | 0xb0cc…5cda | OUT | 0x7908…919f | $0.010.000058 NVDA | NVIDIA • Robinhood Token (NVDA) | |
| 0xdd13c18e…363343 | Transfer | 38,498,087 | 15 hrs agoMon, 17 Aug 2026 03:02:01 UTC | 0xb0cc…5cda | OUT | 0x7908…919f | $0.010.000037 AAPL | Apple • Robinhood Token (AAPL) | |
| 0xdd13c18e…363343 | Transfer | 38,498,087 | 15 hrs agoMon, 17 Aug 2026 03:02:01 UTC | 0xb0cc…5cda | OUT | 0x7908…919f | $0.040.037776 USDG | Global Dollar (USDG) | |
| 0xdd13c18e…363343 | Transfer | 38,498,087 | 15 hrs agoMon, 17 Aug 2026 03:02:01 UTC | 0xb0cc…5cda | OUT | 0x7908…919f | 0.000049 AMZN | Amazon • Robinhood Token (AMZN) | |
| 0xdd13c18e…363343 | Transfer | 38,498,087 | 15 hrs agoMon, 17 Aug 2026 03:02:01 UTC | 0xb0cc…5cda | OUT | 0x7908…919f | $0.010.000058 NVDA | NVIDIA • Robinhood Token (NVDA) | |
| 0xdd13c18e…363343 | Transfer | 38,498,087 | 15 hrs agoMon, 17 Aug 2026 03:02:01 UTC | 0xb0cc…5cda | OUT | 0x7908…919f | $0.010.000037 AAPL | Apple • Robinhood Token (AAPL) | |
| 0xdd13c18e…363343 | Transfer | 38,498,087 | 15 hrs agoMon, 17 Aug 2026 03:02:01 UTC | 0xb0cc…5cda | OUT | 0x7908…919f | $0.040.037776 USDG | Global Dollar (USDG) | |
| 0xdd13c18e…363343 | Transfer | 38,498,087 | 15 hrs agoMon, 17 Aug 2026 03:02:01 UTC | 0xb0cc…5cda | OUT | 0x7908…919f | 0.000580 SPCX | Space Exploration Technologies Corp. Class A Common Stock • Robinhood Token (SPCX) | |
| 0xdd13c18e…363343 | Transfer | 38,498,087 | 15 hrs agoMon, 17 Aug 2026 03:02:01 UTC | 0xb0cc…5cda | OUT | 0x7908…919f | 0.000310 AMZN | Amazon • Robinhood Token (AMZN) | |
| 0xdd13c18e…363343 | Transfer | 38,498,087 | 15 hrs agoMon, 17 Aug 2026 03:02:01 UTC | 0xb0cc…5cda | OUT | 0x7908…919f | $0.070.000313 NVDA | NVIDIA • Robinhood Token (NVDA) | |
| 0xdd13c18e…363343 | Transfer | 38,498,087 | 15 hrs agoMon, 17 Aug 2026 03:02:01 UTC | 0xb0cc…5cda | OUT | 0x5d18…9273 | $0.040.037776 USDG | Global Dollar (USDG) |
| Transaction Hash | Method ? | Block | Age | From | To | Amount | Txn Fee ? | ||
|---|---|---|---|---|---|---|---|---|---|
| 0x0c3492…37a681 | sync | 38,521,241 | 14 hrs agoMon, 17 Aug 2026 03:40:47 UTC | 0x3952…9bc9 | IN | StackRoundsV2 | $0.000 ETH | 0.00000184 | |
| 0xe57a86…8e116c | setSplit | 38,521,134 | 14 hrs agoMon, 17 Aug 2026 03:40:36 UTC | 0xfe35…a47b | IN | StackRoundsV2 | $0.000 ETH | 0.00000108 | |
| 0x9c66c1…62ba36 | sync | 38,518,244 | 14 hrs agoMon, 17 Aug 2026 03:35:46 UTC | 0x3952…9bc9 | IN | StackRoundsV2 | $0.000 ETH | 0.00000096 | |
| 0x226c00…066240 | setSplit | 38,517,454 | 14 hrs agoMon, 17 Aug 2026 03:34:27 UTC | 0xd917…561f | IN | StackRoundsV2 | $0.000 ETH | 0.00000205 | |
| 0x241588…4f410d | sync | 38,515,232 | 14 hrs agoMon, 17 Aug 2026 03:30:44 UTC | 0x3952…9bc9 | IN | StackRoundsV2 | $0.000 ETH | 0.00000161 | |
| 0x250824…8e3fdd | Transfer | 38,514,955 | 14 hrs agoMon, 17 Aug 2026 03:30:16 UTC | 0xf84f…448b | IN | StackRoundsV2 | $36.650.01922 ETH | 0.00000091 | |
| 0x00d797…d97fc4 | sync | 38,511,893 | 14 hrs agoMon, 17 Aug 2026 03:25:09 UTC | 0x3952…9bc9 | IN | StackRoundsV2 | $0.000 ETH | 0.00000187 | |
| 0xc7aead…ac9eaf | setSplit | 38,509,966 | 14 hrs agoMon, 17 Aug 2026 03:21:56 UTC | 0x1589…bf73 | IN | StackRoundsV2 | $0.000 ETH | 0.00000112 | |
| 0xeae0f6…6018e7 | setSplit | 38,509,676 | 14 hrs agoMon, 17 Aug 2026 03:21:27 UTC | 0x1589…bf73 | IN | StackRoundsV2 | $0.000 ETH | 0.00000112 | |
| 0xb26eea…d3ebda | setCollectMode | 38,509,531 | 14 hrs agoMon, 17 Aug 2026 03:21:12 UTC | 0x7f00…630d | IN | StackRoundsV2 | $0.000 ETH | 0.00000099 | |
| 0x6c4668…078e95 | setSplit | 38,508,967 | 14 hrs agoMon, 17 Aug 2026 03:20:15 UTC | 0x7f00…630d | IN | StackRoundsV2 | $0.000 ETH | 0.00000102 | |
| 0x0962e8…7e1755 | sync | 38,508,895 | 14 hrs agoMon, 17 Aug 2026 03:20:08 UTC | 0x3952…9bc9 | IN | StackRoundsV2 | $0.000 ETH | 0.00000356 | |
| 0xdcc92c…9f69dd | setCollectMode | 38,508,581 | 14 hrs agoMon, 17 Aug 2026 03:19:36 UTC | 0x3eb0…e6df | IN | StackRoundsV2 | $0.000 ETH | 0.00000099 | |
| 0x8a6ae9…6390e6 | setCollectMode | 38,508,491 | 14 hrs agoMon, 17 Aug 2026 03:19:27 UTC | 0x3eb0…e6df | IN | StackRoundsV2 | $0.000 ETH | 0.00000099 | |
| 0xe8bb21…7b7b27 | setCollectMode | 38,508,310 | 14 hrs agoMon, 17 Aug 2026 03:19:09 UTC | 0x3eb0…e6df | IN | StackRoundsV2 | $0.000 ETH | 0.00000099 | |
| 0x623767…bcb30b | setCollectMode | 38,508,101 | 14 hrs agoMon, 17 Aug 2026 03:18:48 UTC | 0x3eb0…e6df | IN | StackRoundsV2 | $0.000 ETH | 0.00000099 | |
| 0xae273c…62c04f | setSplit | 38,508,008 | 14 hrs agoMon, 17 Aug 2026 03:18:39 UTC | 0x74ec…5d35 | IN | StackRoundsV2 | $0.000 ETH | 0.00000123 | |
| 0x1c1093…16c7f8 | setCollectMode | 38,507,390 | 14 hrs agoMon, 17 Aug 2026 03:17:37 UTC | 0x3eb0…e6df | IN | StackRoundsV2 | $0.000 ETH | 0.00000055 | |
| 0x5ccc83…fb1f3b | setSplit | 38,507,113 | 14 hrs agoMon, 17 Aug 2026 03:17:09 UTC | 0x3eb0…e6df | IN | StackRoundsV2 | $0.000 ETH | 0.00000112 | |
| 0x2f588f…6e2d82 | sync | 38,505,881 | 14 hrs agoMon, 17 Aug 2026 03:15:06 UTC | 0x3952…9bc9 | IN | StackRoundsV2 | $0.000 ETH | 0.00000166 | |
| 0x2b1f7d…20966f | setCollectMode | 38,503,655 | 14 hrs agoMon, 17 Aug 2026 03:11:20 UTC | 0xb086…06ac | IN | StackRoundsV2 | $0.000 ETH | 0.00000059 | |
| 0x3cb400…eccbcb | setCollectMode | 38,503,562 | 14 hrs agoMon, 17 Aug 2026 03:11:10 UTC | 0xb086…06ac | IN | StackRoundsV2 | $0.000 ETH | 0.00000059 | |
| 0x0dd438…98be6e | setCollectMode | 38,503,474 | 14 hrs agoMon, 17 Aug 2026 03:11:01 UTC | 0xb086…06ac | IN | StackRoundsV2 | $0.000 ETH | 0.00000059 | |
| 0x660030…7bc04d | setCollectMode | 38,503,397 | 14 hrs agoMon, 17 Aug 2026 03:10:54 UTC | 0xb086…06ac | IN | StackRoundsV2 | $0.000 ETH | 0.00000059 | |
| 0x175a8b…ea135b | setCollectMode | 38,503,327 | 15 hrs agoMon, 17 Aug 2026 03:10:47 UTC | 0xb086…06ac | IN | StackRoundsV2 | $0.000 ETH | 0.00000059 |
| Transaction Hash | Method | Block | Age | From | To | Type | Item | ||
|---|---|---|---|---|---|---|---|---|---|
| no NFT transfers for this address yet | |||||||||
| Block | Age | Parent Transaction Hash | Type | Method | From | To | Value | |
|---|---|---|---|---|---|---|---|---|
| 38,282,632 | 21 hrs agoSun, 16 Aug 2026 21:01:42 UTC | 0x1c7e9a…3ce404 | CALL | deliver | 0xb0cc…5cda | OUT | 0x0bd7…ad73 | 0.00021 ETH |
| 38,282,632 | 21 hrs agoSun, 16 Aug 2026 21:01:42 UTC | 0x1c7e9a…3ce404 | CALL | deliver | 0xb0cc…5cda | OUT | 0x0bd7…ad73 | 0.00084 ETH |
| 38,282,632 | 21 hrs agoSun, 16 Aug 2026 21:01:42 UTC | 0x1c7e9a…3ce404 | CALL | deliver | 0xb0cc…5cda | OUT | 0x0bd7…ad73 | 0.00012 ETH |
| 38,282,632 | 21 hrs agoSun, 16 Aug 2026 21:01:42 UTC | 0x1c7e9a…3ce404 | CALL | deliver | 0xb0cc…5cda | OUT | 0x0bd7…ad73 | 0.00002 ETH |
| 38,282,632 | 21 hrs agoSun, 16 Aug 2026 21:01:42 UTC | 0x1c7e9a…3ce404 | CALL | deliver | 0xb0cc…5cda | OUT | 0x0bd7…ad73 | 0.00003 ETH |
| 38,282,632 | 21 hrs agoSun, 16 Aug 2026 21:01:42 UTC | 0x1c7e9a…3ce404 | CALL | deliver | 0xb0cc…5cda | OUT | 0x0bd7…ad73 | 0.00008 ETH |
| 38,282,632 | 21 hrs agoSun, 16 Aug 2026 21:01:42 UTC | 0x1c7e9a…3ce404 | CALL | deliver | 0xb0cc…5cda | OUT | 0x0bd7…ad73 | 0.00012 ETH |
| 38,282,632 | 21 hrs agoSun, 16 Aug 2026 21:01:42 UTC | 0x1c7e9a…3ce404 | CALL | deliver | 0xb0cc…5cda | OUT | 0x0bd7…ad73 | 0.00002 ETH |
| 38,282,627 | 21 hrs agoSun, 16 Aug 2026 21:01:41 UTC | 0x162807…8bf6f4 | CALL | deliver | 0xb0cc…5cda | OUT | 0x0bd7…ad73 | 0.00019 ETH |
| 38,282,627 | 21 hrs agoSun, 16 Aug 2026 21:01:41 UTC | 0x162807…8bf6f4 | CALL | deliver | 0xb0cc…5cda | OUT | 0x0bd7…ad73 | 0.00091 ETH |
| 38,282,627 | 21 hrs agoSun, 16 Aug 2026 21:01:41 UTC | 0x162807…8bf6f4 | CALL | deliver | 0xb0cc…5cda | OUT | 0x0bd7…ad73 | 0.00016 ETH |
| 38,282,627 | 21 hrs agoSun, 16 Aug 2026 21:01:41 UTC | 0x162807…8bf6f4 | CALL | deliver | 0xb0cc…5cda | OUT | 0x0bd7…ad73 | 0.00001 ETH |
| 38,282,627 | 21 hrs agoSun, 16 Aug 2026 21:01:41 UTC | 0x162807…8bf6f4 | CALL | deliver | 0xb0cc…5cda | OUT | 0x0bd7…ad73 | 0.00001 ETH |
| 38,282,627 | 21 hrs agoSun, 16 Aug 2026 21:01:41 UTC | 0x162807…8bf6f4 | CALL | deliver | 0xb0cc…5cda | OUT | 0x0bd7…ad73 | 0.00011 ETH |
| 38,282,627 | 21 hrs agoSun, 16 Aug 2026 21:01:41 UTC | 0x162807…8bf6f4 | CALL | deliver | 0xb0cc…5cda | OUT | 0x0bd7…ad73 | 0.00003 ETH |
| 38,282,627 | 21 hrs agoSun, 16 Aug 2026 21:01:41 UTC | 0x162807…8bf6f4 | CALL | deliver | 0xb0cc…5cda | OUT | 0x0bd7…ad73 | 0.00002 ETH |
| 38,282,627 | 21 hrs agoSun, 16 Aug 2026 21:01:41 UTC | 0x162807…8bf6f4 | CALL | deliver | 0xb0cc…5cda | OUT | 0x0bd7…ad73 | 0.00012 ETH |
| 38,282,627 | 21 hrs agoSun, 16 Aug 2026 21:01:41 UTC | 0x162807…8bf6f4 | CALL | deliver | 0xb0cc…5cda | OUT | 0x0bd7…ad73 | 0.00003 ETH |
| 38,282,627 | 21 hrs agoSun, 16 Aug 2026 21:01:41 UTC | 0x162807…8bf6f4 | CALL | deliver | 0xb0cc…5cda | OUT | 0x0bd7…ad73 | 0.00010 ETH |
| 38,282,622 | 21 hrs agoSun, 16 Aug 2026 21:01:41 UTC | 0xbee91f…6364a5 | CALL | deliver | 0xb0cc…5cda | OUT | 0x0bd7…ad73 | 0.00020 ETH |
| 38,282,622 | 21 hrs agoSun, 16 Aug 2026 21:01:41 UTC | 0xbee91f…6364a5 | CALL | deliver | 0xb0cc…5cda | OUT | 0x0bd7…ad73 | 0.00127 ETH |
| 38,282,622 | 21 hrs agoSun, 16 Aug 2026 21:01:41 UTC | 0xbee91f…6364a5 | CALL | deliver | 0xb0cc…5cda | OUT | 0x0bd7…ad73 | 0.00010 ETH |
| 38,282,622 | 21 hrs agoSun, 16 Aug 2026 21:01:41 UTC | 0xbee91f…6364a5 | CALL | deliver | 0xb0cc…5cda | OUT | 0x0bd7…ad73 | 0.00001 ETH |
| 38,282,622 | 21 hrs agoSun, 16 Aug 2026 21:01:41 UTC | 0xbee91f…6364a5 | CALL | deliver | 0xb0cc…5cda | OUT | 0x0bd7…ad73 | 0.00001 ETH |
| 38,282,622 | 21 hrs agoSun, 16 Aug 2026 21:01:41 UTC | 0xbee91f…6364a5 | CALL | deliver | 0xb0cc…5cda | OUT | 0x0bd7…ad73 | 0.00001 ETH |