// SPDX-License-Identifier: MIT
pragma solidity ^0.8.24;
// ╔═══════════════════════════════════════════════════════════════════════╗
// ║ ┌─────────────┐ ║
// ║ │ XXI ▟▙ │ ║
// ║ │ ▗▄███▖ │ M A R K E T A R C A N A ║
// ║ │ ▄▟██████▌ │ a market tarot, fully on chain ║
// ║ │ ▁▂█████▀▘ │ ║
// ║ │ ▔▔▔▔▔▔▔▔▔▔ │ the market died rich. its ghost still trades. ║
// ║ │ THE MOONSHOT│ seventy-eight patterns it kept repeating in ║
// ║ └─────────────┘ life are pressed here as plates that never fade. ║
// ║ ║
// ║ the deck reads the chain it lives on: cards stand UPRIGHT in bull ║
// ║ phases and REVERSED in bear ones; patterns MANIFEST on the ghost ║
// ║ tape for anyone fast enough to witness; holders press prophecies ║
// ║ into their prints, one wire, thirty seconds apart, forever. ║
// ║ ║
// ║ 78 cards · 25 printings · no owner · no server · no mercy ║
// ╚═══════════════════════════════════════════════════════════════════════╝
import {ERC721} from "solady/tokens/ERC721.sol";
import {LibString} from "solady/utils/LibString.sol";
import {ArcanaRenderer} from "./ArcanaRenderer.sol";
import {ArcanaPrintings} from "./ArcanaPrintings.sol";
import {ArcanaBase64} from "./ArcanaBase64.sol";
import {IArcanaCodex} from "./ArcanaCodex.sol";
import {IArcanaImage} from "./ArcanaImage.sol";
import {ISwapAdapter} from "./ISwapAdapter.sol";
import {ArcanaLexicon} from "./ArcanaLexicon.sol";
/// minimal $TAPE surface used by the deck (transfer to holders/vault + burn)
interface IArcanaTape {
function transfer(address to, uint256 amount) external returns (bool);
function burnFrom(address from, uint256 amount) external;
function balanceOf(address who) external view returns (uint256);
}
interface IArcanaVault {
function pay(address to, uint256 amount) external returns (uint256 sent);
}
/// MARKET ARCANA - vertical slice.
///
/// 25 editions of a 78-card market tarot on Robinhood Chain. Free soulbound
/// READINGS with a 6h TTL feed the mint scanners; paid arcana carry the value;
/// THE GHOST TAPE (a pure-view pseudo-chart derived from coarse chain time)
/// decides each card's UPRIGHT/REVERSED orientation and when a pattern
/// MANIFESTs for permissionless witness() races.
///
/// Every invariant is tagged INV-N and mirrored in docs/PREMORTEM.md.
/// Orbit-chain lessons are structural here, paid for in production on oni:
/// - eras are wall-clock hours from block.timestamp (INV-6): block.number on
/// this chain is a fast sequencer height (~10/s), useless as a clock; only
/// coarse time buckets are derived, never fine timing.
/// - NO blockhash in any state-changing path (INV-5): estimation and
/// execution can see different worlds near the head on Orbit chains.
/// - Seeds are predictable BY DESIGN and harmless (INV-7): every card has
/// equal prints, and targeting a card is a paid feature (fulfill), not
/// something to snipe.
contract MarketArcana is ERC721 {
using LibString for uint256;
// ================================================================ errors
error SaleNotStarted();
error SoldOut();
error WalletCap();
error WrongPrice();
error ReadingCap();
error NotYourReading();
error ReadingLapsed();
error NotLapsed();
error NothingToPurge();
error TargetGone();
error NotAnArcanum();
error NotManifest();
error AlreadyWitnessed();
error NothingToDiscard();
error Soulbound();
error NotYourCard();
error BadProphecy();
error WireCooldown();
error NothingToClaim();
error NotEOA();
error Unrevealed();
// ================================================================ events
event ReadingDrawn(address indexed seer, uint256 indexed id, uint16 foretoldCard, uint64 expiresAt);
event ReadingPurged(uint256 indexed id);
event Fulfilled(address indexed seer, uint256 indexed readingId, uint256 indexed tokenId, uint16 card);
event Minted(address indexed to, uint256 indexed tokenId, uint16 card, uint16 edition);
event Discarded(uint8 act, uint256 amount, uint256 remaining);
event Witnessed(uint16 indexed card, uint256 indexed era, address seer, uint64 total);
event Prophecy(uint256 indexed tokenId, uint16 indexed card, address seer, string text);
event Swept(uint256 amount);
event ChargeClaimed(uint256 indexed tokenId, address indexed holder, uint256 amount);
event Rerolled(address indexed seer, uint256 indexed readingId, uint16 newCard, uint64 expiresAt);
event MintedBlind(address indexed to, uint256 indexed tokenId, uint8 act, uint256 index);
event ActSealed(uint8 indexed act, uint256 seed, uint256 blind, uint256 pool);
// ============================================================= constants
uint256 public constant MAJORS = 22; // cards 0..21
uint256 public constant CARDS = 78; // 22 majors + 56 minors (4 suits x 14)
uint256 public constant READING_BASE = 100000; // reading ids start above
uint64 public constant READING_TTL = 6 hours;
uint256 public constant READ_CAP = 1; // live readings per wallet (INV-3): one open fate at a time
uint256 public constant WALLET_CAP = 3; // paid mints per wallet per act (INV-15)
// ONE stage, ONE price for every card (wei, calibrated at deploy). $TAPE
// tokenomics replace the old two-tier pricing.
uint256 public constant PRICE = 0.0015 ether;
// Of each mint: 20% auto-buys $TAPE; of that buy, 75% (=15% of mint) charges
// the card, 25% (=5% of mint) feeds the rewards vault. The other 80% ETH
// stays for the treasury (public sweep). See docs/TAPE.md.
uint256 public constant AUTOBUY_BPS = 2000; // 20% of mint -> $TAPE buy
uint256 public constant CARD_SHARE_BPS = 7500; // 75% of the buy -> the card
// $TAPE-denominated action costs/rewards (18 decimals). Finalize vs launch
// price before deploy; recompile to change (no owner, on purpose).
// Calibrated vs vault inflow (docs/CALIBRATION.md): ~75 $TAPE flow in per
// mint (5% of the auto-buy at the launch price), ~146K over the press; 100
// per witness sustains months of races instead of days.
uint256 public constant WITNESS_REWARD = 100 ether; // paid from vault on witness
uint256 public constant REROLL_COST = 1000 ether; // burned to reroll a reading
uint256 public constant PROPHESY_COST = 250 ether; // burned to inscribe a prophecy
// THE DECK DISCARDS (INV-10): after grace, 2%/day of the unminted remainder burns.
uint64 public constant DISCARD_GRACE = 14 days;
uint64 public constant DISCARD_PERIOD = 1 days;
uint256 public constant DISCARD_BPS = 200;
// Ghost tape era: keyed to block.timestamp (REAL seconds), NOT block
// number. Robinhood chain produces ~10 blocks/second, so a block-height
// clock would fly through candles in seconds; wall-clock time is the same
// fixed candle on any chain, at any block rate (INV-6, INV-8). Only the
// era bucket uses time; no fine timing and no blockhash ride on it.
// 5-minute candles: a deliberately fast witness race that rewards bots and
// watchers. Economically safe - vault.pay() caps at the vault balance, so a
// drained cellar simply pays 0 and never blocks a witness; $TAPE supply is
// untouched and the vault refills from ongoing mints (docs/CALIBRATION.md).
uint256 public constant EPOCH = 300; // seconds per candle (5 minutes)
// THE WIRE: prophecies are rare on purpose - a card speaks once a day,
// the wire carries one post per half-minute globally (F5000 cadence school).
uint64 public constant PROPHECY_COOLDOWN = 1 days;
uint64 public constant WIRE_COOLDOWN = 30 seconds;
uint256 public constant PROPHECY_MAX = 140;
// ============================================================ immutables
address public immutable TREASURY; // funds can only ever go here (INV-12)
uint64 public immutable SALE_START;
uint256 public immutable EDITIONS; // 25 in production; small in tests
uint256 public immutable ACT1_SUPPLY; // 22 * EDITIONS
uint256 public immutable ACT2_SUPPLY; // 56 * EDITIONS
address public immutable CODEX; // sealed ArcanaCodex: the 78 stencil plates
address public immutable IMAGE; // ArcanaImage: the pure renderer shell
address public immutable LEX; // ArcanaLexicon: name tables, self-deployed
// ================================================================= state
uint256 public arcanaMinted; // sequential token ids 1..(ACT1+ACT2)
uint256 public act1Minted;
uint256 public act1Discarded;
uint256 public act2Minted;
uint256 public act2Discarded;
uint64 public lastDiscardTick;
mapping(uint256 => uint256) public printsOf; // cardId => prints ASSIGNED (fulfill path)
mapping(uint256 => uint16) internal _cardOf; // tokenId => cardId + 1 (assigned path)
mapping(uint256 => uint16) internal _editions; // tokenId => print number (assigned path)
mapping(uint8 => mapping(address => uint256)) public mintedBy; // act => wallet => count
// ---- rarity-at-sellout (INV-16): plain mints are BLIND tickets ----
// A plain mint fixes no card. The card is assigned by a global permutation
// whose seed is sealed only in the transaction that CLOSES the act, so no
// minter can grind a target card by simulating their own transaction
// (SECURITY.md #2). fulfill() remains the one paid targeting path by design.
mapping(uint256 => uint256) public blindOf; // tokenId => (act << 248) | blindIndex (1-based)
mapping(uint8 => uint256) public blindCountOf; // act => blind tickets minted
mapping(uint8 => uint256) public assignedOf; // act => prints assigned via fulfill
mapping(uint8 => uint256) public actSeedOf; // act => reveal seed (0 = not sealed yet)
uint256 private _entropy; // rolling accumulator, mixed on every paid mint/discard
// witness ledger
mapping(uint256 => uint64) public manifestations; // cardId => count
mapping(uint256 => uint256) public lastWitnessEra; // cardId => era (INV-9)
// readings
uint256 public readingsDrawn;
mapping(uint256 => uint64) public drawnAt; // readingId => timestamp
mapping(uint256 => uint16) public foretold; // readingId => cardId + 1
mapping(address => uint256[]) internal _readingsOf; // pruned lazily on draw
// THE WIRE: the last word of every card lives on the token; history in logs
uint64 public lastWirePost;
mapping(uint256 => string) public lastProphecy; // tokenId => text
mapping(uint256 => uint64) public prophesiedAt; // tokenId => timestamp
mapping(uint256 => uint32) public prophecyCount; // tokenId => total spoken
string public siteURL; // web3:// gateway address of the on-chain site
// a card minted by fulfilling its own reading carries the vermilion
// FORETOLD marks in the art forever - provenance pressed into the print
mapping(uint256 => bool) public foretoldPrint;
// ---- $TAPE token layer (wired once, pre-sale, then frozen) ----
address public immutable DEPLOYER; // may wire the token layer exactly once
address public TAPE; // $TAPE token
address public VAULT; // rewards vault (deck-gated)
address public ADAPTER; // ISwapAdapter (V4 ETH->$TAPE)
uint256 public minOutBps; // slippage floor for auto-buy, in bps of quote
bool public tokenLayerLocked; // true once wired; wiring is one-shot
mapping(uint256 => uint256) public charge; // tokenId => claimable $TAPE baked in at mint
uint256 private _reentry = 1; // cheap non-reentrancy guard (1=open, 2=entered)
modifier lock() {
require(_reentry == 1, "reentrant");
_reentry = 2;
_;
_reentry = 1;
}
constructor(
address treasury,
uint64 saleStart,
uint256 editions,
string memory site,
address codex,
address image
) {
TREASURY = treasury;
SALE_START = saleStart;
EDITIONS = editions;
ACT1_SUPPLY = MAJORS * editions;
ACT2_SUPPLY = (CARDS - MAJORS) * editions;
siteURL = site;
CODEX = codex;
IMAGE = image;
LEX = address(new ArcanaLexicon()); // self-deployed: no extra deploy step
DEPLOYER = msg.sender;
}
/// One-shot wiring of the $TAPE layer, done by the deployer BEFORE the sale
/// opens and never again. After this the addresses are effectively immutable
/// (no setter can change them), so there is no ongoing admin power over the
/// economy. If left unwired, mints simply keep 100% ETH for the treasury and
/// no auto-buy happens (safe degraded mode / test mode).
function initTokenLayer(address tape_, address vault_, address adapter_, uint256 minOutBps_)
external
{
require(msg.sender == DEPLOYER, "only deployer");
require(!tokenLayerLocked, "already wired");
require(arcanaMinted == 0, "sale progressed"); // no minted card may miss the economy
require(tape_ != address(0) && vault_ != address(0) && adapter_ != address(0), "zero");
require(minOutBps_ > 0 && minOutBps_ <= 10000, "bps"); // 0 would disable the slippage floor
TAPE = tape_;
VAULT = vault_;
ADAPTER = adapter_;
minOutBps = minOutBps_;
tokenLayerLocked = true;
}
// ========================================================== erc721 metas
function name() public pure override returns (string memory) {
return "MARKET ARCANA";
}
function symbol() public pure override returns (string memory) {
return "ARCANA";
}
// ============================================================== the acts
function act1Closed() public view returns (bool) {
return act1Minted + act1Discarded >= ACT1_SUPPLY;
}
function act2Closed() public view returns (bool) {
return act2Minted + act2Discarded >= ACT2_SUPPLY;
}
/// The single act currently selling: 1, 2, or 0 when the deck is done.
function activeAct() public view returns (uint8) {
if (!act1Closed()) return 1;
if (!act2Closed()) return 2;
return 0;
}
function _actWindow(uint8 act) internal pure returns (uint256 first, uint256 count) {
if (act == 1) return (0, MAJORS);
return (MAJORS, CARDS - MAJORS);
}
function _priceOf(uint16) internal pure returns (uint256) {
return PRICE; // one stage, one price
}
/// Auto-buy $TAPE with 20% of a mint, split it 75/25 into the card's charge
/// and the rewards vault, and leave 80% ETH for the treasury. No-op when the
/// token layer is unwired (degraded/test mode) - then 100% ETH -> treasury.
/// CEI + `lock` on the callers guard the single external call (the swap).
function _settle(uint256 tokenId) private {
address adapter = ADAPTER;
if (adapter == address(0)) return; // unwired: keep all ETH for treasury
uint256 toSwap = (PRICE * AUTOBUY_BPS) / 10000;
if (toSwap == 0) return;
// LIVENESS INVARIANT: a mint must never brick on pool state. Any
// failure in the quote or the swap degrades this mint to the unwired
// path (100% ETH stays for the treasury, no charge) instead of
// reverting the whole purchase.
uint256 quote;
try ISwapAdapter(adapter).quoteTapeOut(toSwap) returns (uint256 q) {
quote = q;
} catch {
return; // dead adapter/pool: degraded mint
}
uint256 minOut = (quote * minOutBps) / 10000;
// Account by the real $TAPE ledger, not the adapter's self-reported
// return value: measure the balance delta so charge/vault bookkeeping
// can never desync from actual balances even if an adapter misreports.
uint256 balBefore = IArcanaTape(TAPE).balanceOf(address(this));
try ISwapAdapter(adapter).buyTape{value: toSwap}(minOut, address(this)) {
// fallthrough to delta accounting below
} catch {
return; // swap reverted (exhausted pool / floor bite): degraded mint
}
uint256 got = IArcanaTape(TAPE).balanceOf(address(this)) - balBefore;
require(got >= minOut, "slippage"); // re-check the floor on the true delta
uint256 toCard = (got * CARD_SHARE_BPS) / 10000;
uint256 toVault = got - toCard;
charge[tokenId] += toCard;
if (toVault > 0) {
require(IArcanaTape(TAPE).transfer(VAULT, toVault), "vault fund");
}
}
/// Claim the $TAPE baked into a card. Only the current holder; CEI zeroes
/// the charge before the transfer so a reentrant claim finds nothing.
function claimCharge(uint256 tokenId) external lock returns (uint256 amount) {
if (ownerOf(tokenId) != msg.sender) revert NotYourCard();
amount = charge[tokenId];
if (amount == 0) revert NothingToClaim();
charge[tokenId] = 0;
require(IArcanaTape(TAPE).transfer(msg.sender, amount), "claim xfer");
emit ChargeClaimed(tokenId, msg.sender, amount);
}
/// Impatience, monetized: burn $TAPE to re-roll a live reading's foretold
/// card immediately instead of waiting out the 6h TTL. EOA-only; the reading
/// must be yours and still live. Refreshes the TTL from now.
function reroll(uint256 readingId) external lock returns (uint16 newCard) {
if (msg.sender != tx.origin) revert NotEOA(); // EOA only
if (ownerOf(readingId) != msg.sender) revert NotYourReading();
if (block.timestamp >= uint256(drawnAt[readingId]) + READING_TTL) revert ReadingLapsed();
IArcanaTape(TAPE).burnFrom(msg.sender, REROLL_COST); // reverts if not approved/funded
newCard = uint16(_foretell(readingId + block.timestamp));
foretold[readingId] = newCard + 1;
drawnAt[readingId] = uint64(block.timestamp);
emit Rerolled(msg.sender, readingId, newCard, uint64(block.timestamp) + READING_TTL);
}
// ============================================================== readings
/// Free, soulbound, lapses in 6h. The bait that feeds the scanners: a real
/// ERC-721 mint in the SAME collection (ids above READING_BASE), impossible
/// to list (INV-2), self-cleaning via purge (INV-4), re-claimable forever.
function drawReading() external {
if (block.timestamp < SALE_START) revert SaleNotStarted();
if (msg.sender != tx.origin) revert NotEOA(); // EOA only, F5000 pattern
uint256 live = _pruneAndCountLive(msg.sender);
if (live >= READ_CAP) revert ReadingCap();
uint256 id = READING_BASE + (++readingsDrawn);
drawnAt[id] = uint64(block.timestamp);
foretold[id] = uint16(_foretell(id)) + 1;
_readingsOf[msg.sender].push(id);
_mint(msg.sender, id);
emit ReadingDrawn(msg.sender, id, foretold[id] - 1, uint64(block.timestamp) + READING_TTL);
}
/// A lapsed reading is dead paper: anyone may sweep it (INV-4). The gc is
/// public on purpose - bots keep the collection clean while farming slots.
function purgeExpired(uint256[] calldata ids) external {
uint256 purged;
for (uint256 i = 0; i < ids.length; ++i) {
uint256 id = ids[i];
if (id <= READING_BASE) continue;
if (!_exists(id)) continue;
if (block.timestamp < uint256(drawnAt[id]) + READING_TTL) continue;
_burn(id);
++purged;
emit ReadingPurged(id);
}
if (purged == 0) revert NothingToPurge();
}
/// Live readings held by a wallet (view for the site HUD).
function liveReadings(address who) external view returns (uint256 n) {
uint256[] storage list = _readingsOf[who];
for (uint256 i = 0; i < list.length; ++i) {
uint256 id = list[i];
if (_exists(id) && block.timestamp < uint256(drawnAt[id]) + READING_TTL) ++n;
}
}
function _pruneAndCountLive(address who) internal returns (uint256 live) {
uint256[] storage list = _readingsOf[who];
uint256 i;
while (i < list.length) {
uint256 id = list[i];
bool alive = _exists(id) && block.timestamp < uint256(drawnAt[id]) + READING_TTL;
if (alive) {
++live;
++i;
} else {
// burned or lapsed: also burn lapsed leftovers here so the
// list stays a handful long (INV-3 bookkeeping)
if (_exists(id)) {
_burn(id);
emit ReadingPurged(id);
}
list[i] = list[list.length - 1];
list.pop();
}
}
}
/// The card a fresh reading foretells: always one that can still be
/// minted in the ACTIVE act, so a prophecy is always fulfillable at draw
/// time (INV-11). Prophecy is decoration once the deck is done.
function _foretell(uint256 seed) internal view returns (uint256) {
uint8 act = activeAct();
(uint256 first, uint256 count) = act == 0 ? (uint256(0), CARDS) : _actWindow(act);
uint256 h = uint256(keccak256(abi.encodePacked("FORETELL", seed, msg.sender, block.timestamp)));
for (uint256 i = 0; i < count; ++i) {
uint256 card = first + ((h + i) % count);
if (act == 0 || printsOf[card] < EDITIONS) return card;
}
return first; // unreachable while the act is open; safe default
}
// ================================================================ minting
/// The self-fulfilling prophecy: burn your live reading, pay, and mint the
/// exact card it foretold. Targeting IS the value - no discount needed.
function fulfill(uint256 readingId) external payable lock returns (uint256 tokenId) {
if (msg.sender != tx.origin) revert NotEOA(); // EOA only (anti-bot)
if (ownerOf(readingId) != msg.sender) revert NotYourReading();
if (block.timestamp >= uint256(drawnAt[readingId]) + READING_TTL) revert ReadingLapsed();
uint16 card = foretold[readingId] - 1;
if (msg.value != PRICE) revert WrongPrice();
if (printsOf[card] >= EDITIONS) revert TargetGone(); // draw again (INV-11)
_burn(readingId);
tokenId = _mintCard(msg.sender, card);
foretoldPrint[tokenId] = true; // the print remembers it was prophesied
_settle(tokenId); // auto-buy $TAPE, charge the card, feed the vault
emit Fulfilled(msg.sender, readingId, tokenId, card);
}
/// Plain mint: a BLIND ticket of the active act (INV-16). The card is not
/// chosen here - it is assigned by the act's sealed permutation at sell-out,
/// so there is nothing to grind at mint time. fulfill() is the paid
/// targeting path; this is the honest lottery.
function mint() external payable lock returns (uint256 tokenId) {
if (msg.sender != tx.origin) revert NotEOA(); // EOA only (anti-bot)
if (msg.value != PRICE) revert WrongPrice();
if (block.timestamp < SALE_START) revert SaleNotStarted();
uint8 act = activeAct();
if (act == 0) revert SoldOut();
if (act == 1) ++act1Minted;
else ++act2Minted; // capacity guaranteed: activeAct() said the act is open
if (++mintedBy[act][msg.sender] > WALLET_CAP) revert WalletCap(); // INV-15
uint256 k = ++blindCountOf[act];
tokenId = ++arcanaMinted;
blindOf[tokenId] = (uint256(act) << 248) | k;
_mint(msg.sender, tokenId);
_mixEntropy();
_maybeSeal(act);
emit MintedBlind(msg.sender, tokenId, act, k);
_settle(tokenId); // auto-buy $TAPE, charge the card, feed the vault
}
function _mintCard(address to, uint16 card) internal returns (uint256 tokenId) {
if (block.timestamp < SALE_START) revert SaleNotStarted();
uint8 act = card < MAJORS ? 1 : 2;
// act gating: minors sell only after the majors' act is closed
if (act == 1) {
if (act1Closed()) revert SoldOut();
if (++act1Minted > ACT1_SUPPLY) revert SoldOut();
} else {
if (!act1Closed() || act2Closed()) revert SoldOut();
if (++act2Minted > ACT2_SUPPLY) revert SoldOut();
}
if (++mintedBy[act][to] > WALLET_CAP) revert WalletCap(); // INV-15
uint16 print = uint16(++printsOf[card]);
++assignedOf[act];
tokenId = ++arcanaMinted;
_cardOf[tokenId] = card + 1;
_editions[tokenId] = print;
_mint(to, tokenId);
_mixEntropy();
_maybeSeal(act);
emit Minted(to, tokenId, card, print);
}
// ===================================================== rarity-at-sellout
/// Every paid mint stirs the pot. The final seed is a digest of the whole
/// sale, fixed only in the closing transaction - unknowable at any mint.
function _mixEntropy() internal {
_entropy = uint256(keccak256(abi.encodePacked(_entropy, msg.sender, block.timestamp, block.number)));
}
/// Seal the act's permutation seed the moment the act closes (mint-out or
/// discard-out). One-shot per act. Residual risk, accepted and documented:
/// the actor whose tx closes the act can simulate the seal and time it;
/// WALLET_CAP bounds the payoff and every card has equal prints, so the
/// edge is aesthetic, not economic (SECURITY.md #2).
function _maybeSeal(uint8 act) internal {
if (actSeedOf[act] != 0) return;
if (!(act == 1 ? act1Closed() : act2Closed())) return;
uint256 s = uint256(
keccak256(abi.encodePacked("ARCANA:SEAL", _entropy, act, block.timestamp, block.number, arcanaMinted))
);
if (s == 0) s = 1; // 0 is the "unsealed" sentinel
uint256 supply = act == 1 ? ACT1_SUPPLY : ACT2_SUPPLY;
actSeedOf[act] = s;
emit ActSealed(act, s, blindCountOf[act], supply - assignedOf[act]);
}
function _gcd(uint256 x, uint256 y) internal pure returns (uint256) {
while (y != 0) (x, y) = (y, x % y);
return x;
}
/// Resolve a blind ticket into its (card, edition) after the act sealed.
/// The pool of remaining prints is FROZEN at seal time: _mintCard refuses
/// closed acts, so printsOf/assignedOf for this act can never change again
/// and the assignment below is stable forever. Bijection: k-1 -> j is an
/// injective affine map mod R (a coprime with R), and the prefix scan is a
/// bijection from [0,R) onto the remaining (card, print) multiset. Slots
/// that j never hits are exactly the discarded prints - fate chose them.
function _resolveBlind(uint256 tokenId) internal view returns (uint16 card, uint16 edition) {
uint256 packed = blindOf[tokenId];
uint8 act = uint8(packed >> 248);
uint256 seed = actSeedOf[act];
if (seed == 0) revert Unrevealed();
uint256 k = (packed & ((uint256(1) << 248) - 1)) - 1; // 0-based
uint256 supply = act == 1 ? ACT1_SUPPLY : ACT2_SUPPLY;
uint256 R = supply - assignedOf[act]; // pool size; >= blindCountOf[act]
uint256 a = uint256(keccak256(abi.encodePacked("ARCANA:PERM:A", seed))) % R;
while (_gcd(a, R) != 1) a = (a + 1) % R; // nearest multiplier coprime with R
uint256 b = uint256(keccak256(abi.encodePacked("ARCANA:PERM:B", seed))) % R;
uint256 j = (a * k + b) % R; // R <= 78*EDITIONS: no overflow anywhere near
(uint256 first, uint256 count) = _actWindow(act);
uint256 cum;
for (uint256 c = first; c < first + count; ++c) {
uint256 avail = EDITIONS - printsOf[c];
if (j < cum + avail) return (uint16(c), uint16(printsOf[c] + 1 + (j - cum)));
cum += avail;
}
revert Unrevealed(); // unreachable: j < R == sum(avail)
}
/// (card, edition) for any arcanum - assigned or revealed-blind.
function _cardEdition(uint256 tokenId) internal view returns (uint16 card, uint16 edition) {
uint16 c = _cardOf[tokenId];
if (c != 0) return (c - 1, _editions[tokenId]);
if (blindOf[tokenId] != 0) return _resolveBlind(tokenId);
revert NotAnArcanum();
}
/// Print number getter (ABI-compatible with the old public mapping).
/// Assigned tokens read storage; blind tokens resolve after the seal
/// (0 while unrevealed, like the old mapping's default for unknown ids).
function editionOf(uint256 tokenId) public view returns (uint16) {
uint16 e = _editions[tokenId];
if (e != 0) return e;
if (blindOf[tokenId] != 0 && actSeedOf[uint8(blindOf[tokenId] >> 248)] != 0) {
(, uint16 ed) = _resolveBlind(tokenId);
return ed;
}
return 0;
}
// ========================================================== deck discards
/// After the grace period every act thins itself: once per day anyone may
/// burn 2% of the UNMINTED remainder. The deck mathematically converges
/// to a closed act under any demand (INV-10). Fate waits for no one.
function tickDiscard() external {
uint8 act = activeAct();
if (act == 0) revert NothingToDiscard();
if (block.timestamp < uint256(SALE_START) + DISCARD_GRACE) revert NothingToDiscard();
if (block.timestamp < uint256(lastDiscardTick) + DISCARD_PERIOD) revert NothingToDiscard();
lastDiscardTick = uint64(block.timestamp);
uint256 remaining =
act == 1 ? ACT1_SUPPLY - act1Minted - act1Discarded : ACT2_SUPPLY - act2Minted - act2Discarded;
uint256 amount = (remaining * DISCARD_BPS) / 10000;
if (amount == 0) amount = 1;
if (amount > remaining) amount = remaining;
if (act == 1) act1Discarded += amount;
else act2Discarded += amount;
_mixEntropy();
_maybeSeal(act); // discards can close an act too - seal in the same tx
emit Discarded(act, amount, remaining - amount);
}
// ============================================================ ghost tape
/// A pseudo-price for every era, pure and computable for ANY era with no
/// blockhash and no storage (INV-8). Nothing of value rides on the tape:
/// it steers art orientation and witness bragging rights only.
function tapePrice(uint256 era) public pure returns (uint256) {
// 800..1200, independent noise per era; enough for candles and phases
return 800 + (uint256(keccak256(abi.encodePacked("ARCANA:TAPE", era))) % 401);
}
function currentEra() public view returns (uint256) {
return block.timestamp / EPOCH; // wall-clock hours: block-rate-independent
}
function candleUp(uint256 era) public pure returns (bool) {
if (era == 0) return false;
return tapePrice(era) > tapePrice(era - 1);
}
/// BULL when the majority of the last 12 candles closed up.
function bullPhase() public view returns (bool) {
uint256 era = currentEra();
uint256 from = era >= 12 ? era - 11 : 1;
uint256 ups;
uint256 total;
for (uint256 e = from; e <= era; ++e) {
if (e == 0) continue;
++total;
if (candleUp(e)) ++ups;
}
return total != 0 && ups * 2 > total;
}
/// Which detector a card answers to. The slice wires four; the full deck
/// mapping lands with the pantheon. 0 = dormant forever (yet).
function _detectorOf(uint16 card) internal pure returns (uint8) {
if (card == 19) return 1; // THE GOLDEN CROSS: three up candles
if (card == 13) return 2; // THE BLACK SWAN: a crash candle
if (card == 12) return 3; // THE HALT: a doji (frozen tape)
if (card == 20) return 4; // THE SHORT SQUEEZE: a violent up candle
return 0;
}
/// Is the card's pattern on the tape RIGHT NOW?
function manifest(uint16 card) public view returns (bool) {
uint256 era = currentEra();
if (era < 3) return false;
uint8 d = _detectorOf(card);
if (d == 1) return candleUp(era) && candleUp(era - 1) && candleUp(era - 2);
if (d == 2) return tapePrice(era - 1) > tapePrice(era) + 150;
if (d == 3) {
uint256 a = tapePrice(era);
uint256 b = tapePrice(era - 1);
return a > b ? a - b <= 8 : b - a <= 8;
}
if (d == 4) return tapePrice(era) > tapePrice(era - 1) + 150;
return false;
}
/// Permissionless witnessing (the finishReveal philosophy): when a pattern
/// is on the tape, the first to call it gets the event. Once per era per
/// card (INV-9); costs nothing but gas; feeds the activity trackers.
function witness(uint16 card) external {
if (card >= CARDS) revert NotAnArcanum();
if (!manifest(card)) revert NotManifest();
uint256 era = currentEra();
if (lastWitnessEra[card] >= era) revert AlreadyWitnessed();
lastWitnessEra[card] = era;
uint64 total = ++manifestations[card];
// reward the first to call the pattern this era, from the vault (if any).
// pay() caps at the vault balance, so an empty cellar never blocks witness.
if (VAULT != address(0)) {
IArcanaVault(VAULT).pay(msg.sender, WITNESS_REWARD);
}
emit Witnessed(card, era, msg.sender, total);
}
// ============================================================== the wire
/// Cards speak, wallets do not: a holder inscribes a short prophecy INTO
/// the card. The text is charset-jailed because it lands verbatim inside
/// tokenURI JSON (a load-bearing sanitizer, learned on oni's setMaskName).
/// The last word lives on the token; full history lives in the logs.
function prophesy(uint256 tokenId, string calldata text) external {
uint16 card = cardOf(tokenId); // readings and ghosts revert here
if (ownerOf(tokenId) != msg.sender) revert NotYourCard();
bytes memory b = bytes(text);
if (b.length == 0 || b.length > PROPHECY_MAX) revert BadProphecy();
for (uint256 i = 0; i < b.length; ++i) {
uint8 c = uint8(b[i]);
bool ok = (c >= 0x30 && c <= 0x3A) // 0-9 and :
|| (c >= 0x41 && c <= 0x5A) // A-Z
|| (c >= 0x61 && c <= 0x7A) // a-z
|| c == 0x20 || c == 0x21 || c == 0x24 || c == 0x25 // space ! $ %
|| c == 0x27 || c == 0x2B || c == 0x2C || c == 0x2D // ' + , -
|| c == 0x2E || c == 0x2F || c == 0x3F; // . / ?
if (!ok) revert BadProphecy();
}
if (block.timestamp < uint256(prophesiedAt[tokenId]) + PROPHECY_COOLDOWN) revert WireCooldown();
if (block.timestamp < uint256(lastWirePost) + WIRE_COOLDOWN) revert WireCooldown();
// inscribing burns $TAPE: deflation + spam price. No-op if unwired.
if (TAPE != address(0)) {
IArcanaTape(TAPE).burnFrom(msg.sender, PROPHESY_COST);
}
lastWirePost = uint64(block.timestamp);
prophesiedAt[tokenId] = uint64(block.timestamp);
++prophecyCount[tokenId];
lastProphecy[tokenId] = text;
emit Prophecy(tokenId, card, msg.sender, text);
}
/// THE DAILY SPREAD: three cards of the day for any address. Pure ritual -
/// costs nothing, changes daily, gives the site a reason to be visited
/// with empty hands. Deterministic; no state, no gas, no stakes.
function dailySpread(address who) external view returns (uint16[3] memory s) {
uint256 h = uint256(keccak256(abi.encodePacked("ARCANA:SPREAD", who, block.timestamp / 1 days)));
s[0] = uint16(h % CARDS);
s[1] = uint16((h >> 32) % CARDS);
s[2] = uint16((h >> 64) % CARDS);
while (s[1] == s[0]) s[1] = (s[1] + 1) % uint16(uint256(CARDS));
while (s[2] == s[0] || s[2] == s[1]) s[2] = (s[2] + 1) % uint16(uint256(CARDS));
}
/// Collection-level metadata for marketplaces; the external link is the
/// on-chain site itself - the deck cannot be taken down.
function contractURI() external view returns (string memory) {
return string(
abi.encodePacked(
'data:application/json;utf8,{"name":"MARKET ARCANA",',
'"description":"A market tarot, fully on chain. 25 editions of 78 cards. The deck reads the chain it lives on: cards stand Upright in bull phases and Reversed in bear ones, patterns manifest on the ghost tape, holders inscribe prophecies into their cards.",',
'"external_link":"',
siteURL,
'"}'
)
);
}
// ============================================================== soulbound
/// Readings never move (ERC-5192 spirit): mint and burn only (INV-2).
function _beforeTokenTransfer(address from, address to, uint256 id) internal pure override {
if (id > READING_BASE && from != address(0) && to != address(0)) revert Soulbound();
}
function approve(address account, uint256 id) public payable override {
if (id > READING_BASE) revert Soulbound();
super.approve(account, id);
}
// ================================================================== money
/// No owner anywhere. The treasury is immutable and sweeping is public
/// (INV-12): anyone may push the balance where it was always going.
function sweep() external {
uint256 amount = address(this).balance;
(bool ok,) = TREASURY.call{value: amount}("");
require(ok, "sweep failed");
emit Swept(amount);
}
// =============================================================== metadata
function cardOf(uint256 tokenId) public view returns (uint16) {
uint16 c = _cardOf[tokenId];
if (c != 0) return c - 1;
if (blindOf[tokenId] != 0) {
(uint16 card,) = _resolveBlind(tokenId); // reverts Unrevealed pre-seal
return card;
}
revert NotAnArcanum();
}
/// Bullish cards read Upright in a bull phase and Reversed in a bear one;
/// bearish cards do the opposite. The whole deck breathes with the tape.
function _bullishCard(uint16 card) internal pure returns (bool) {
if (card < MAJORS) {
// THE MAGICIAN(1) WHALE(3) PUMP(7) DIAMOND HANDS(8) PRINTER(10)
// MOONSHOT(17) GOLDEN CROSS(19) SQUEEZE(20) THE EXIT(21)
uint256 mask = (1 << 1) | (1 << 3) | (1 << 7) | (1 << 8) | (1 << 10) | (1 << 17) | (1 << 19)
| (1 << 20) | (1 << 21);
return mask & (1 << card) != 0;
}
uint256 suit = (card - MAJORS) / 14; // 0 CANDLES, 1 COINS, 2 KNIVES, 3 BAGS
return suit < 2;
}
/// Name tables live in the self-deployed lexicon (EIP-170 headroom);
/// these forwarders keep the deck's public ABI byte-compatible.
function majorName(uint16 card) public view returns (string memory) {
return ArcanaLexicon(LEX).majorName(card);
}
function cardName(uint16 card) public view returns (string memory) {
return ArcanaLexicon(LEX).cardName(card);
}
/// Cartouche numeral: roman for majors, rank glyph for minors - byte-for-
/// byte the strings the parity fixtures were pressed with.
function _numeral(uint16 card) internal view returns (string memory) {
return ArcanaLexicon(LEX).numeral(card);
}
/// Renderer tier: 0 pip, 1 court, 2 major - drives the chrome ornament.
function _tier(uint16 card) internal pure returns (uint8) {
if (card < MAJORS) return 2;
return ((card - MAJORS) % 14) >= 10 ? 1 : 0;
}
/// The full print: stencil plate from the sealed codex, pressed through
/// the renderer with the edition's printing and the tape's tempo, served
/// as a base64 SVG. Before the codex/image are wired (tests, dry deploys)
/// the token serves honest attribute JSON without an image.
function _image(uint256 tokenId, uint16 card, uint256 printing) internal view returns (bytes memory) {
if (IMAGE.code.length == 0) return "";
ArcanaRenderer.Params memory prm = ArcanaRenderer.Params({
numeral: _numeral(card),
name: cardName(card),
tier: _tier(card),
foretold: foretoldPrint[tokenId],
printing: uint8(printing),
tempo: bullPhase() ? 1 : 2 // the ember breathes with the tape
});
string memory svg = IArcanaImage(IMAGE).render(IArcanaCodex(CODEX).stencil(card), prm);
return abi.encodePacked('"image":"data:image/svg+xml;base64,', ArcanaBase64.encode(bytes(svg)), '",');
}
/// Art is pressed on demand by the renderer; the JSON stays honest about
/// every mechanic so marketplaces see the deck breathe.
function tokenURI(uint256 tokenId) public view override returns (string memory) {
if (!_exists(tokenId)) revert TokenDoesNotExist();
if (tokenId > READING_BASE) {
bool live = block.timestamp < uint256(drawnAt[tokenId]) + READING_TTL;
uint16 fcard = foretold[tokenId] - 1;
return string(
abi.encodePacked(
'data:application/json;utf8,{"name":"READING #',
(tokenId - READING_BASE).toString(),
'","description":"A market reading. It smoulders six hours; fulfill it or it lapses.","attributes":[',
'{"trait_type":"Kind","value":"Reading"},{"trait_type":"Foretells","value":"',
cardName(fcard),
'"},{"trait_type":"Status","value":"',
live ? "LIVE" : "LAPSED",
'"}]}'
)
);
}
// a blind ticket before the act seals: honest UNREVEALED metadata
{
uint256 packed = blindOf[tokenId];
if (packed != 0 && actSeedOf[uint8(packed >> 248)] == 0) {
return string(
abi.encodePacked(
'data:application/json;utf8,{"name":"ARCANUM #',
tokenId.toString(),
' - UNREVEALED","description":"A blind print of MARKET ARCANA. The card is assigned when the act sells out - nothing to snipe, nothing to grind.","attributes":[',
'{"trait_type":"Kind","value":"Arcanum"},{"trait_type":"Act","value":"',
uint8(packed >> 248) == 1 ? "I" : "II",
'"},{"trait_type":"Status","value":"UNREVEALED"}]}'
)
);
}
}
(uint16 card, uint16 edition) = _cardEdition(tokenId);
bool upright = _bullishCard(card) == bullPhase();
uint256 printing = ArcanaPrintings.ofEdition(edition);
bytes memory head = abi.encodePacked(
'data:application/json;utf8,{"name":"',
cardName(card),
" - ",
uint256(edition).toString(),
"/",
EDITIONS.toString(),
'","description":"MARKET ARCANA. The deck that reads the chain it lives on.",',
_image(tokenId, card, printing),
'"attributes":['
);
bytes memory traits = abi.encodePacked(
'{"trait_type":"Card","value":"',
cardName(card),
'"},{"trait_type":"Arcanum","value":"',
uint256(card).toString(),
'"},{"trait_type":"Act","value":"',
card < MAJORS ? "I" : "II",
'"},{"trait_type":"Tier","value":"',
_tier(card) == 2 ? "Major Arcana" : (_tier(card) == 1 ? "Court" : "Pip"),
'"},{"trait_type":"Edition","value":"',
uint256(edition).toString(),
'"},{"trait_type":"Printing","value":"',
ArcanaLexicon(LEX).prDisplay(printing),
'"},{"trait_type":"Orientation","value":"',
upright ? "Upright" : "Reversed",
'"},'
);
bytes memory tail = abi.encodePacked(
foretoldPrint[tokenId] ? '{"trait_type":"Foretold","value":"Yes"},' : "",
'{"trait_type":"Manifestations","value":"',
uint256(manifestations[card]).toString(),
'"},{"trait_type":"Prophecies","value":"',
uint256(prophecyCount[tokenId]).toString(),
bytes(lastProphecy[tokenId]).length == 0
? bytes('"}]}')
: abi.encodePacked('"},{"trait_type":"Last Prophecy","value":"', lastProphecy[tokenId], '"}]}')
);
return string(abi.encodePacked(head, traits, tail));
}
}[
{
"type": "constructor",
"inputs": [
{
"name": "treasury",
"type": "address",
"internalType": "address"
},
{
"name": "saleStart",
"type": "uint64",
"internalType": "uint64"
},
{
"name": "editions",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "site",
"type": "string",
"internalType": "string"
},
{
"name": "codex",
"type": "address",
"internalType": "address"
},
{
"name": "image",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "nonpayable"
},
{
"name": "AccountBalanceOverflow",
"type": "error",
"inputs": []
},
{
"name": "AlreadyWitnessed",
"type": "error",
"inputs": []
},
{
"name": "BadProphecy",
"type": "error",
"inputs": []
},
{
"name": "BalanceQueryForZeroAddress",
"type": "error",
"inputs": []
},
{
"name": "NotAnArcanum",
"type": "error",
"inputs": []
},
{
"name": "NotEOA",
"type": "error",
"inputs": []
},
{
"name": "NotLapsed",
"type": "error",
"inputs": []
},
{
"name": "NotManifest",
"type": "error",
"inputs": []
},
{
"name": "NotOwnerNorApproved",
"type": "error",
"inputs": []
},
{
"name": "NotYourCard",
"type": "error",
"inputs": []
},
{
"name": "NotYourReading",
"type": "error",
"inputs": []
},
{
"name": "NothingToClaim",
"type": "error",
"inputs": []
},
{
"name": "NothingToDiscard",
"type": "error",
"inputs": []
},
{
"name": "NothingToPurge",
"type": "error",
"inputs": []
},
{
"name": "ReadingCap",
"type": "error",
"inputs": []
},
{
"name": "ReadingLapsed",
"type": "error",
"inputs": []
},
{
"name": "SaleNotStarted",
"type": "error",
"inputs": []
},
{
"name": "SoldOut",
"type": "error",
"inputs": []
},
{
"name": "Soulbound",
"type": "error",
"inputs": []
},
{
"name": "TargetGone",
"type": "error",
"inputs": []
},
{
"name": "TokenAlreadyExists",
"type": "error",
"inputs": []
},
{
"name": "TokenDoesNotExist",
"type": "error",
"inputs": []
},
{
"name": "TransferFromIncorrectOwner",
"type": "error",
"inputs": []
},
{
"name": "TransferToNonERC721ReceiverImplementer",
"type": "error",
"inputs": []
},
{
"name": "TransferToZeroAddress",
"type": "error",
"inputs": []
},
{
"name": "Unrevealed",
"type": "error",
"inputs": []
},
{
"name": "WalletCap",
"type": "error",
"inputs": []
},
{
"name": "WireCooldown",
"type": "error",
"inputs": []
},
{
"name": "WrongPrice",
"type": "error",
"inputs": []
},
{
"name": "ActSealed",
"type": "event",
"inputs": [
{
"name": "act",
"type": "uint8",
"indexed": true,
"internalType": "uint8"
},
{
"name": "seed",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
},
{
"name": "blind",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
},
{
"name": "pool",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "Approval",
"type": "event",
"inputs": [
{
"name": "owner",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "account",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "id",
"type": "uint256",
"indexed": true,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "ApprovalForAll",
"type": "event",
"inputs": [
{
"name": "owner",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "operator",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "isApproved",
"type": "bool",
"indexed": false,
"internalType": "bool"
}
],
"anonymous": false
},
{
"name": "ChargeClaimed",
"type": "event",
"inputs": [
{
"name": "tokenId",
"type": "uint256",
"indexed": true,
"internalType": "uint256"
},
{
"name": "holder",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "amount",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "Discarded",
"type": "event",
"inputs": [
{
"name": "act",
"type": "uint8",
"indexed": false,
"internalType": "uint8"
},
{
"name": "amount",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
},
{
"name": "remaining",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "Fulfilled",
"type": "event",
"inputs": [
{
"name": "seer",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "readingId",
"type": "uint256",
"indexed": true,
"internalType": "uint256"
},
{
"name": "tokenId",
"type": "uint256",
"indexed": true,
"internalType": "uint256"
},
{
"name": "card",
"type": "uint16",
"indexed": false,
"internalType": "uint16"
}
],
"anonymous": false
},
{
"name": "Minted",
"type": "event",
"inputs": [
{
"name": "to",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "tokenId",
"type": "uint256",
"indexed": true,
"internalType": "uint256"
},
{
"name": "card",
"type": "uint16",
"indexed": false,
"internalType": "uint16"
},
{
"name": "edition",
"type": "uint16",
"indexed": false,
"internalType": "uint16"
}
],
"anonymous": false
},
{
"name": "MintedBlind",
"type": "event",
"inputs": [
{
"name": "to",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "tokenId",
"type": "uint256",
"indexed": true,
"internalType": "uint256"
},
{
"name": "act",
"type": "uint8",
"indexed": false,
"internalType": "uint8"
},
{
"name": "index",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "Prophecy",
"type": "event",
"inputs": [
{
"name": "tokenId",
"type": "uint256",
"indexed": true,
"internalType": "uint256"
},
{
"name": "card",
"type": "uint16",
"indexed": true,
"internalType": "uint16"
},
{
"name": "seer",
"type": "address",
"indexed": false,
"internalType": "address"
},
{
"name": "text",
"type": "string",
"indexed": false,
"internalType": "string"
}
],
"anonymous": false
},
{
"name": "ReadingDrawn",
"type": "event",
"inputs": [
{
"name": "seer",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "id",
"type": "uint256",
"indexed": true,
"internalType": "uint256"
},
{
"name": "foretoldCard",
"type": "uint16",
"indexed": false,
"internalType": "uint16"
},
{
"name": "expiresAt",
"type": "uint64",
"indexed": false,
"internalType": "uint64"
}
],
"anonymous": false
},
{
"name": "ReadingPurged",
"type": "event",
"inputs": [
{
"name": "id",
"type": "uint256",
"indexed": true,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "Rerolled",
"type": "event",
"inputs": [
{
"name": "seer",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "readingId",
"type": "uint256",
"indexed": true,
"internalType": "uint256"
},
{
"name": "newCard",
"type": "uint16",
"indexed": false,
"internalType": "uint16"
},
{
"name": "expiresAt",
"type": "uint64",
"indexed": false,
"internalType": "uint64"
}
],
"anonymous": false
},
{
"name": "Swept",
"type": "event",
"inputs": [
{
"name": "amount",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "Transfer",
"type": "event",
"inputs": [
{
"name": "from",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "to",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "id",
"type": "uint256",
"indexed": true,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "Witnessed",
"type": "event",
"inputs": [
{
"name": "card",
"type": "uint16",
"indexed": true,
"internalType": "uint16"
},
{
"name": "era",
"type": "uint256",
"indexed": true,
"internalType": "uint256"
},
{
"name": "seer",
"type": "address",
"indexed": false,
"internalType": "address"
},
{
"name": "total",
"type": "uint64",
"indexed": false,
"internalType": "uint64"
}
],
"anonymous": false
},
{
"name": "ACT1_SUPPLY",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "ACT2_SUPPLY",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "ADAPTER",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
},
{
"name": "AUTOBUY_BPS",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "CARDS",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "CARD_SHARE_BPS",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "CODEX",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
},
{
"name": "DEPLOYER",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
},
{
"name": "DISCARD_BPS",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "DISCARD_GRACE",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint64",
"internalType": "uint64"
}
],
"stateMutability": "view"
},
{
"name": "DISCARD_PERIOD",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint64",
"internalType": "uint64"
}
],
"stateMutability": "view"
},
{
"name": "EDITIONS",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "EPOCH",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "IMAGE",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
},
{
"name": "LEX",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
},
{
"name": "MAJORS",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "PRICE",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "PROPHECY_COOLDOWN",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint64",
"internalType": "uint64"
}
],
"stateMutability": "view"
},
{
"name": "PROPHECY_MAX",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "PROPHESY_COST",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "READING_BASE",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "READING_TTL",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint64",
"internalType": "uint64"
}
],
"stateMutability": "view"
},
{
"name": "READ_CAP",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "REROLL_COST",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "SALE_START",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint64",
"internalType": "uint64"
}
],
"stateMutability": "view"
},
{
"name": "TAPE",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
},
{
"name": "TREASURY",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
},
{
"name": "VAULT",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
},
{
"name": "WALLET_CAP",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "WIRE_COOLDOWN",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint64",
"internalType": "uint64"
}
],
"stateMutability": "view"
},
{
"name": "WITNESS_REWARD",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "act1Closed",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "bool",
"internalType": "bool"
}
],
"stateMutability": "view"
},
{
"name": "act1Discarded",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "act1Minted",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "act2Closed",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "bool",
"internalType": "bool"
}
],
"stateMutability": "view"
},
{
"name": "act2Discarded",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "act2Minted",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "actSeedOf",
"type": "function",
"inputs": [
{
"name": "",
"type": "uint8",
"internalType": "uint8"
}
],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "activeAct",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint8",
"internalType": "uint8"
}
],
"stateMutability": "view"
},
{
"name": "approve",
"type": "function",
"inputs": [
{
"name": "account",
"type": "address",
"internalType": "address"
},
{
"name": "id",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [],
"stateMutability": "payable"
},
{
"name": "arcanaMinted",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "assignedOf",
"type": "function",
"inputs": [
{
"name": "",
"type": "uint8",
"internalType": "uint8"
}
],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "balanceOf",
"type": "function",
"inputs": [
{
"name": "owner",
"type": "address",
"internalType": "address"
}
],
"outputs": [
{
"name": "result",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "blindCountOf",
"type": "function",
"inputs": [
{
"name": "",
"type": "uint8",
"internalType": "uint8"
}
],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "blindOf",
"type": "function",
"inputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "bullPhase",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "bool",
"internalType": "bool"
}
],
"stateMutability": "view"
},
{
"name": "candleUp",
"type": "function",
"inputs": [
{
"name": "era",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "",
"type": "bool",
"internalType": "bool"
}
],
"stateMutability": "pure"
},
{
"name": "cardName",
"type": "function",
"inputs": [
{
"name": "card",
"type": "uint16",
"internalType": "uint16"
}
],
"outputs": [
{
"name": "",
"type": "string",
"internalType": "string"
}
],
"stateMutability": "view"
},
{
"name": "cardOf",
"type": "function",
"inputs": [
{
"name": "tokenId",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "",
"type": "uint16",
"internalType": "uint16"
}
],
"stateMutability": "view"
},
{
"name": "charge",
"type": "function",
"inputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "claimCharge",
"type": "function",
"inputs": [
{
"name": "tokenId",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "amount",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "nonpayable"
},
{
"name": "contractURI",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "string",
"internalType": "string"
}
],
"stateMutability": "view"
},
{
"name": "currentEra",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "dailySpread",
"type": "function",
"inputs": [
{
"name": "who",
"type": "address",
"internalType": "address"
}
],
"outputs": [
{
"name": "s",
"type": "uint16[3]",
"internalType": "uint16[3]"
}
],
"stateMutability": "view"
},
{
"name": "drawReading",
"type": "function",
"inputs": [],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "drawnAt",
"type": "function",
"inputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "",
"type": "uint64",
"internalType": "uint64"
}
],
"stateMutability": "view"
},
{
"name": "editionOf",
"type": "function",
"inputs": [
{
"name": "tokenId",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "",
"type": "uint16",
"internalType": "uint16"
}
],
"stateMutability": "view"
},
{
"name": "foretold",
"type": "function",
"inputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "",
"type": "uint16",
"internalType": "uint16"
}
],
"stateMutability": "view"
},
{
"name": "foretoldPrint",
"type": "function",
"inputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "",
"type": "bool",
"internalType": "bool"
}
],
"stateMutability": "view"
},
{
"name": "fulfill",
"type": "function",
"inputs": [
{
"name": "readingId",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "tokenId",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "payable"
},
{
"name": "getApproved",
"type": "function",
"inputs": [
{
"name": "id",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "result",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
},
{
"name": "initTokenLayer",
"type": "function",
"inputs": [
{
"name": "tape_",
"type": "address",
"internalType": "address"
},
{
"name": "vault_",
"type": "address",
"internalType": "address"
},
{
"name": "adapter_",
"type": "address",
"internalType": "address"
},
{
"name": "minOutBps_",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "isApprovedForAll",
"type": "function",
"inputs": [
{
"name": "owner",
"type": "address",
"internalType": "address"
},
{
"name": "operator",
"type": "address",
"internalType": "address"
}
],
"outputs": [
{
"name": "result",
"type": "bool",
"internalType": "bool"
}
],
"stateMutability": "view"
},
{
"name": "lastDiscardTick",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint64",
"internalType": "uint64"
}
],
"stateMutability": "view"
},
{
"name": "lastProphecy",
"type": "function",
"inputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "",
"type": "string",
"internalType": "string"
}
],
"stateMutability": "view"
},
{
"name": "lastWirePost",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint64",
"internalType": "uint64"
}
],
"stateMutability": "view"
},
{
"name": "lastWitnessEra",
"type": "function",
"inputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "liveReadings",
"type": "function",
"inputs": [
{
"name": "who",
"type": "address",
"internalType": "address"
}
],
"outputs": [
{
"name": "n",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "majorName",
"type": "function",
"inputs": [
{
"name": "card",
"type": "uint16",
"internalType": "uint16"
}
],
"outputs": [
{
"name": "",
"type": "string",
"internalType": "string"
}
],
"stateMutability": "view"
},
{
"name": "manifest",
"type": "function",
"inputs": [
{
"name": "card",
"type": "uint16",
"internalType": "uint16"
}
],
"outputs": [
{
"name": "",
"type": "bool",
"internalType": "bool"
}
],
"stateMutability": "view"
},
{
"name": "manifestations",
"type": "function",
"inputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "",
"type": "uint64",
"internalType": "uint64"
}
],
"stateMutability": "view"
},
{
"name": "minOutBps",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "mint",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "tokenId",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "payable"
},
{
"name": "mintedBy",
"type": "function",
"inputs": [
{
"name": "",
"type": "uint8",
"internalType": "uint8"
},
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "name",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "string",
"internalType": "string"
}
],
"stateMutability": "pure"
},
{
"name": "ownerOf",
"type": "function",
"inputs": [
{
"name": "id",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "result",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
},
{
"name": "printsOf",
"type": "function",
"inputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "prophecyCount",
"type": "function",
"inputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "",
"type": "uint32",
"internalType": "uint32"
}
],
"stateMutability": "view"
},
{
"name": "prophesiedAt",
"type": "function",
"inputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "",
"type": "uint64",
"internalType": "uint64"
}
],
"stateMutability": "view"
},
{
"name": "prophesy",
"type": "function",
"inputs": [
{
"name": "tokenId",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "text",
"type": "string",
"internalType": "string"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "purgeExpired",
"type": "function",
"inputs": [
{
"name": "ids",
"type": "uint256[]",
"internalType": "uint256[]"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "readingsDrawn",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "reroll",
"type": "function",
"inputs": [
{
"name": "readingId",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "newCard",
"type": "uint16",
"internalType": "uint16"
}
],
"stateMutability": "nonpayable"
},
{
"name": "safeTransferFrom",
"type": "function",
"inputs": [
{
"name": "from",
"type": "address",
"internalType": "address"
},
{
"name": "to",
"type": "address",
"internalType": "address"
},
{
"name": "id",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [],
"stateMutability": "payable"
},
{
"name": "safeTransferFrom",
"type": "function",
"inputs": [
{
"name": "from",
"type": "address",
"internalType": "address"
},
{
"name": "to",
"type": "address",
"internalType": "address"
},
{
"name": "id",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "data",
"type": "bytes",
"internalType": "bytes"
}
],
"outputs": [],
"stateMutability": "payable"
},
{
"name": "setApprovalForAll",
"type": "function",
"inputs": [
{
"name": "operator",
"type": "address",
"internalType": "address"
},
{
"name": "isApproved",
"type": "bool",
"internalType": "bool"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "siteURL",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "string",
"internalType": "string"
}
],
"stateMutability": "view"
},
{
"name": "supportsInterface",
"type": "function",
"inputs": [
{
"name": "interfaceId",
"type": "bytes4",
"internalType": "bytes4"
}
],
"outputs": [
{
"name": "result",
"type": "bool",
"internalType": "bool"
}
],
"stateMutability": "view"
},
{
"name": "sweep",
"type": "function",
"inputs": [],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "symbol",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "string",
"internalType": "string"
}
],
"stateMutability": "pure"
},
{
"name": "tapePrice",
"type": "function",
"inputs": [
{
"name": "era",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "pure"
},
{
"name": "tickDiscard",
"type": "function",
"inputs": [],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "tokenLayerLocked",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "bool",
"internalType": "bool"
}
],
"stateMutability": "view"
},
{
"name": "tokenURI",
"type": "function",
"inputs": [
{
"name": "tokenId",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "",
"type": "string",
"internalType": "string"
}
],
"stateMutability": "view"
},
{
"name": "transferFrom",
"type": "function",
"inputs": [
{
"name": "from",
"type": "address",
"internalType": "address"
},
{
"name": "to",
"type": "address",
"internalType": "address"
},
{
"name": "id",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [],
"stateMutability": "payable"
},
{
"name": "witness",
"type": "function",
"inputs": [
{
"name": "card",
"type": "uint16",
"internalType": "uint16"
}
],
"outputs": [],
"stateMutability": "nonpayable"
}
]0x6101a060405234620003fc576200704f803803806200001e8162000401565b92833981019060c081830312620003fc576200003a8162000427565b60208281015191936001600160401b03918284168403620003fc576040850151956060860151848111620003fc57860192601f90808286011215620003fc578451868111620002d757601f1995620000988285018816870162000401565b92828452868383010111620003fc57859060005b838110620003e757505060009183010152620000d960a0620000d160808b0162000427565b990162000427565b966001938460215560805260a0528860c05288601602601681048a03620003d15760e052886038029860388a0403620003d157610100988952805193868511620002d7576019548481811c91168015620003c6575b82821014620003b05783811162000364575b5080928511600114620002f9575083945090839291600094620002ed575b50501b916000199060031b1c1916176019555b61012092835261014091825260405190610fbf9081830190811183821017620002d757829162006090833903906000f08015620002cb576101609060018060a01b031681526101809133835260405193615c5395866200043d87396080518681816124050152612514015260a05186818161122b01528181611a610152818161218c0152818161262a01526128be015260c051868181610dda01528181611a3101528181613b1901528181614f1a0152615146015260e0518681816108b101528181611aba015281816121fd015281816139ce01528181614a750152615076015251858181610d3801528181611c59015281816123000152818161384a01528181614acb01526152a1015251848181612558015261571f01525183818161312401526155f40152518281816115c601528181611dbf01528181613cef0152818161483f015261564f015251818181610d9301526117bd0152f35b6040513d6000823e3d90fd5b634e487b7160e01b600052604160045260246000fd5b0151925038806200015e565b929484908116601960005284600020946000905b888383106200034957505050106200032f575b505050811b0160195562000171565b015160001960f88460031b161c1916905538808062000320565b8587015188559096019594850194879350908101906200030d565b6019600052816000208480880160051c820192848910620003a6575b0160051c019085905b8281106200039957505062000140565b6000815501859062000389565b9250819262000380565b634e487b7160e01b600052602260045260246000fd5b90607f16906200012e565b634e487b7160e01b600052601160045260246000fd5b818101830151858201840152879201620000ac565b600080fd5b6040519190601f01601f191682016001600160401b03811183821017620002d757604052565b51906001600160a01b0382168203620003fc5756fe608060408181526004918236101561001657600080fd5b600092833560e01c91826301ffc9a714613153575081630506eb401461310f578163061d4969146130e357816306fdde0314613096578163081812fc14613038578163095ea7b314612f6a5781630cecf2d014612f4e5781630fd2ea7414612a725781631132a58714612a4e578163121193f014612a255781631249c58b1461287f5781631337a9c0146128335781631c19c2151461268b57816321f5fd811461266c578163220703ad1461264e578163226730301461260a57816323b872dd146125f4578163249c1661146125cd57816324b419c4146125a5578163267e57b514612587578163288a2f9b146125435781632d2c5565146124ff578163349aa524146124e257816335f6feac146124b657816335faa416146123e957816339c5c918146123bb5781633a1976b9146123935781634047cca414612376578163407d2ef51461215c578163411557d11461213357816342842e0e146120f357816345af7ca4146120d657816347e71196146120ba57816349946d431461209c5781634a774b66146120785781634be185f0146120555781634e3314c41461203657816350e7ea971461200d5781635f17348e14611fdc5781635fc8373214611e505781636352211e14611e1f57816363942f4214611dee57816368ea16ee14611daa5781636aac6af214611d795781636f05e4c814611d5157816370a0823114611cfc578163753b88071461198d5781637d13d972146119655781637d58e40a146117775781638012a1171461174f57816385698fed1461173357816386d9059e1461171757816389245681146116455781638a7c608f1461158d5781638c1db361146115715781638d859f3e1461154f5781638de120b01461120d578163929ea77f146111f057816395d89b41146111aa578163973628f61461118b5781639c10549f1461116e578163a0dc275814611151578163a22cb465146110de578163a4d9f536146110bf578163a780b94e14610fe7578163b1d1a86514610fca578163b4ceecb414610fab578163b88d4fde14610f34578163b92e521614610f17578163b9c6a9db14610ef8578163bad8a12014610e19578163be9eafeb146104df578163c16311aa14610dfd578163c1a2f7b214610dc2578163c1b8411a14610d7e578163c22b8d8214610d5b578163c5f1a4cd14610d20578163c87b56dd14610cff578163d21e312f14610cdb578163d72a5f1a14610caa578163d9b7c25014610b6e578163d9c5931d14610a3a578163d9c8f8e6146108d4578163df976f1d14610899578163e1fa1a2d1461086c578163e3c55fed1461083b578163e457e1e514610814578163e6dd71c1146107eb578163e8a3d48514610574578163e985e9c51461052f578163ec907c6114610508578163f07eb1df146104e4578163f110ba3f146104df578163f3f05e6c146104c3578163fceda5e614610478575063ff639e1a1461044557600080fd5b34610474576020366003190112610474578060209260ff61046461323e565b168152600b845220549051908152f35b5080fd5b9050346104bf5760203660031901126104bf57359161ffff831683036104bc57506104a56104b89261481e565b90519182916020835260208301906131c0565b0390f35b80fd5b8280fd5b50503461047457816003193601126104745760209051601e8152f35b613373565b50503461047457816003193601126104745760209060ff601f541690519015158152f35b50503461047457816003193601126104745760209060ff6105276147f5565b915191168152f35b50503461047457806003193601126104745760209161054c6131e5565b906105556131fb565b601c52670a5a2e7a00000000600852526030600c205490519015158152f35b8284346104bc57806003193601126104bc57508051602091600080516020615bfe83398151915260208301527219488e8893505492d15508105490d05390488b606a1b818301527f226465736372697074696f6e223a2241206d61726b6574207461726f742c206660538301527f756c6c79206f6e20636861696e2e2032352065646974696f6e73206f6620373860738301527f2063617264732e20546865206465636b2072656164732074686520636861696e60938301527f206974206c69766573206f6e3a206361726473207374616e642055707269676860b38301527f7420696e2062756c6c2070686173657320616e6420526576657273656420696e60d38301527f2062656172206f6e65732c207061747465726e73206d616e6966657374206f6e60f38301527f207468652067686f737420746170652c20686f6c6465727320696e73637269626101138301527f652070726f7068656369657320696e746f2074686569722063617264732e222c610133830152701132bc3a32b93730b62fb634b735911d1160791b6101538301526101646000936019549061071b82613283565b916001908181169081156107c95750600114610767575b6104b886866107556002838c61227d60f01b815203601d19810185520183613352565b519182916020835260208301906131c0565b909192955060196000527f944998273e477b495144fb8794c914197f3ccb46be2900f4698fd0ef743c9695906000915b8483106107b657505050506002836104b8956107559382010195610732565b8054878401890152918301918101610797565b60ff1916858801525050508015150283010192506107556002836104b8610732565b8284346104bc5760203660031901126104bc575061080b602092356147c6565b90519015158152f35b9050346104bf5760203660031901126104bf57602092829135815283805220549051908152f35b9050346104bf5760203660031901126104bf57816020936001600160401b0392358152601285522054169051908152f35b9050346104bf5760203660031901126104bf578160209360ff92358152601a855220541690519015158152f35b505034610474578160031936011261047457602090517f00000000000000000000000000000000000000000000000000000000000000008152f35b83833461047457602092836003193601126104bf578035906108fa600160215414613425565b6002602155610908826138d2565b6001600160a01b0394903390861603610a2b5782815285805283812054948515610a1b57838252868052848220829055601b54855163a9059cbb60e01b815233858201908152602081018990529092899284928390036040019183918791165af1918215610a1057916109e3575b50156109b357508151908382527f050fc3eada81eb0e84d9814c855d00a74f06bcb08670229447f51f14fa88a893853393a3600160215551908152f35b825162461bcd60e51b8152908101859052600a60248201526931b630b4b6903c3332b960b11b6044820152606490fd5b610a039150863d8811610a09575b6109fb8183613352565b8101906147ae565b86610976565b503d6109f1565b8551903d90823e3d90fd5b84516312d37ee560e31b81528390fd5b508251637ddf3f6d60e01b8152fd5b505034610474576020806003193601126104bf57610a566131e5565b91805192610a638461331c565b60603685378151838101916c105490d053904e94d414915051609a1b83526bffffffffffffffffffffffff199060601b16602d820152620151804204604182015260418152610ab181613337565b51902061ffff93604e9385604e84061682528082019686604e85841c0616885286604e86850195871c061684525b86885116878451168103610b03578688610af9819361346c565b1606168852610adf565b5090919296935b868851168785511681148015610b62575b15610b36578688610b2c819361346c565b1606168852610b0a565b505193508592845b60038310610b4b57606086f35b838060019287855116815201920192019190610b3e565b50878651168114610b1b565b919050346104bf57602080600319360112610ca6578235906001600160401b0390818311610ca25736602384011215610ca2578285013591808311610c9e5760246005943660248660051b83010111610c9a578895895b868110610be6578a8a8a8a15610bd9578280f35b51635d39c2fb60e11b8152fd5b8381831b8401013597620186a0891115610c8457898c610c248b80600052673ec412a9852d173d60c11b601c5260206000208101015460601b151590565b15610c8e578a8152601289522054610c3d908716613409565b4210610c845790610c58600192610c538b6152ee565b61345d565b987f458413ab2fc782f43b135738ba516120e0e19c4a90a078006333bb33de59fa358d80a25b01610bc5565b9750600190610c7e565b50509750600190610c7e565b8880fd5b8680fd5b8580fd5b8380fd5b505034610474576020366003190112610474578060209260ff610ccb61323e565b168152600c845220549051908152f35b5050346104745781600319360112610474576020905168056bc75e2d631000008152f35b8284346104bc5760203660031901126104bc57506104a56104b89235613a82565b505034610474578160031936011261047457602090517f00000000000000000000000000000000000000000000000000000000000000008152f35b8284346104bc5760203660031901126104bc575061ffff610527602093356139f2565b505034610474578160031936011261047457517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b505034610474578160031936011261047457602090517f00000000000000000000000000000000000000000000000000000000000000008152f35b5050346104745781600319360112610474576020905160018152f35b905082346104bc576020918260031936011261047457908391358152601683522091805180936000908054610e4d81613283565b9182855260019187600182169182600014610ed1575050600114610e8e575b5050506104b89291610e7f910385613352565b519282849384528301906131c0565b86935060009291925282600020916000925b828410610eb95750505082010181610e7f6104b8610e6c565b8054848a018601528895508794909301928101610ea0565b60ff19168782015293151560051b86019093019350849250610e7f91506104b89050610e6c565b5050346104745781600319360112610474576020906011549051908152f35b50503461047457816003193601126104745760209061080b6139bd565b8390608036600319011261047457610f4a6131e5565b610f526131fb565b9160443590606435906001600160401b038211610ca257610f7591369101613211565b610f83838686979497613498565b813b610f8d578580f35b610fa294610f9c9136916133ac565b92614f8f565b81808080808580f35b5050346104745781600319360112610474576020906001549051908152f35b50503461047457816003193601126104745760209051611d4c8152f35b8284346104bc57806003193601126104bc57508051601954909182600061100d84613283565b8083526020946001908660018216918260001461109d575050600114611040575b50506104b89291610e7f910385613352565b9085925060196000527f944998273e477b495144fb8794c914197f3ccb46be2900f4698fd0ef743c9695916000925b8284106110855750505082010181610e7f61102e565b8054848a01860152889550879490930192810161106f565b60ff19168682015292151560051b85019092019250839150610e7f905061102e565b505034610474578160031936011261047457602090601e549051908152f35b505034610474573660031901126104bc576110f76131e5565b6024358015158091036104bf5781601c52670a5a2e7a00000000600852338352806030600c2055825260018060a01b0316337f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31602084a380f35b5050346104745781600319360112610474576020905161012c8152f35b505034610474578160031936011261047457602090516154608152f35b5050346104745781600319360112610474576020905161012c42048152f35b50503461047457816003193601126104745780516104b8916111cb826132e6565b6006825265415243414e4160d01b6020830152519182916020835260208301906131c0565b505034610474578160031936011261047457602090516107d08152f35b8383346104745781600319360112610474576001600160401b0390817f000000000000000000000000000000000000000000000000000000000000000016421061154057323303611531578293338452602093601485528281209281965b84548810156113dd5761127e8886613922565b9054600391821b1c6000818152673ec412a9852d173d60c11b601c5260209020810181015460601b1515806113c0575b156112d05750506112c16112c79161345d565b9761345d565b955b959661126b565b6000818152673ec412a9852d173d60c11b601c526020902081018101549299989260601b61138d575b5085546000199081810190811161137a576113176113409189613922565b905490841b1c6113278b8a613922565b90919082549060031b91821b91600019901b1916179055565b86548015611367578101916113558389613922565b81939154921b1b1916905585556112c9565b634e487b7160e01b865260318752602486fd5b634e487b7160e01b865260118752602486fd5b611396816152ee565b7f458413ab2fc782f43b135738ba516120e0e19c4a90a078006333bb33de59fa358580a2896112f9565b50808552601289526113d6888587205416613409565b42106112ae565b859184600189931015611523576113f560115461345d565b9384601155620186a09485018095116115105742169284865260128152828620846001600160401b031982541617905561ffff9161143c8361143688614e5b565b1661346c565b8688526013835283858920911661ffff1982541617905533875260148252838720805491680100000000000000008310156114fd57506114f79360137f2ca2b649a8988542f31ef4a9092f578b2a4ac5c88847f99f9a1e555d56894c3596946114b58a611327876114cd9760016114d39a018155613922565b6114bf8a33614890565b898b5252838920541661390e565b9461347f565b905161ffff90941684526001600160401b0316602084015233929081906040820190565b0390a380f35b634e487b7160e01b895260419052602488fd5b634e487b7160e01b865260118252602486fd5b9051633c0d9c8760e21b8152fd5b51635d04968b60e11b81528390fd5b516316851a3760e11b81528390fd5b505034610474578160031936011261047457602090516605543df729c0008152f35b5050346104745781600319360112610474576020905160038152f35b919050346104bf5760203660031901126104bf57813561ffff8116809103610ca6578151638a7c608f60e01b81529283015282826024817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa91821561163b57836104b89493611616575b5050519182916020835260208301906131c0565b6116339293503d8091833e61162b8183613352565b810190613987565b903880611602565b81513d85823e3d90fd5b5050346104745760209060206003193601126104bf576116636131e5565b6001600160a01b03168352601460205280832080549392908390815b868110611690576020868651908152f35b61169a8183613922565b90549060031b1c6116c98180600052673ec412a9852d173d60c11b601c5260206000208101015460601b151590565b90816116f2575b506116de575b60010161167f565b946116ea60019161345d565b9590506116d6565b905083526012845261170f6001600160401b038685205416613409565b4210386116d0565b5050346104745781600319360112610474576020905160c88152f35b50503461047457816003193601126104745760209051604e8152f35b9050346104bf5760203660031901126104bf5760209282913581526006845220549051908152f35b838334610474576080366003190112610474576117926131e5565b9061179b6131fb565b6044916001600160a01b038335818116939084900361196057606497883595837f000000000000000000000000000000000000000000000000000000000000000016330361192f57601f549760ff89166118fe5789546118cb57841694851515806118c0575b806118b7575b1561188f5787151580611883575b1561185c5750505060019697506bffffffffffffffffffffffff60a01b9283601b541617601b551681601c541617601c55601d541617601d55601e5560ff191617601f5580f35b8a929160206262707360e81b92519362461bcd60e51b855284015260036024840152820152fd5b50612710881115611815565b5162461bcd60e51b81526020818401526024810192909252637a65726f60e01b908201528890fd5b50861515611807565b508484161515611801565b855162461bcd60e51b8152602081850152600f60248201526e1cd85b19481c1c9bd9dc995cdcd959608a1b818401528b90fd5b855162461bcd60e51b8152602081850152600d60248201526c185b1c9958591e481dda5c9959609a1b818401528b90fd5b906c37b7363c903232b83637bcb2b960991b8a92602087519362461bcd60e51b8552840152600d6024840152820152fd5b600080fd5b9050346104bf5760203660031901126104bf5760209282913581526010845220549051908152f35b60208385366003190183136104bc578335936001916119af8360215414613425565b6002602155323303611ced57336001600160a01b036119cd886138d2565b1603611cde57858152601285526001600160401b03916119f1838684205416613409565b421015611cd0578682526013865261ffff90611a1182878520541661390e565b916605543df729c0003403611cc1578083169485855260068952878520547f00000000000000000000000000000000000000000000000000000000000000001115611cb157611a5f8a6152ee565b7f0000000000000000000000000000000000000000000000000000000000000000164210611ca2576016851015611c9a5785905b60ff821692878403611c3457611aa76139bd565b611c2657611ab5885461345d565b8089557f000000000000000000000000000000000000000000000000000000000000000010611c26575b83865260098a52888620336000528a52600389600020611aff815461345d565b80915511611c185750928792611b9b86938896611b5f998d9e995260068d5280878720611b2c815461345d565b80915516938652600c8d52868620611b44815461345d565b90556008611b52875461345d565b9d8e9b8c97888a5561346c565b92878952600782528989209061ffff19941684825416179055528387872091825416179055611b8e8433614890565b611b9661495d565b6149a4565b8351908582528b8201527f837a1c83ad76717a7cff13de51a5ac4f23025d30e622b2bc7646f0d5aef49e2a843392a3848152601a895220805460ff191685179055611be583614b28565b84519081527f85b7799be0a76d19e256e8868717cc9297bccfe18ebfe92332a25c8cd8a43639873392a460215551908152f35b8851639404868360e01b8152fd5b88516352df9fe560e01b8152fd5b611c3c6139bd565b158015611c8c575b611c2657611c5360035461345d565b806003557f00000000000000000000000000000000000000000000000000000000000000001015611adf5788516352df9fe560e01b8152fd5b50611c95613839565b611c44565b600290611a93565b5085516316851a3760e11b8152fd5b875163177b2af760e31b81528390fd5b50855163f7760f2560e01b8152fd5b8451638451c69360e01b8152fd5b50825163a3e39f5760e01b8152fd5b508251635d04968b60e11b8152fd5b8284346104bc5760203660031901126104bc57611d176131e5565b908115611d455760209350673ec412a9852d173d60c11b601c525263ffffffff601c600c2054169051908152f35b638f4eb604849152601cfd5b5050346104745781600319360112610474576020906001600160401b03601554169051908152f35b9050346104bf5760203660031901126104bf57816020936001600160401b0392358152601785522054169051908152f35b505034610474578160031936011261047457517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b505034610474576020366003190112610474578060209260ff611e0f61323e565b168152600d845220549051908152f35b8284346104bc5760203660031901126104bc5750611e3f602092356138d2565b90516001600160a01b039091168152f35b919050346104bf5760209182600319360112610ca65780359161ffff831692838103610ca257604e841015611fce57611e8890613713565b15611fc15761012c4204938386526010815284828720541015611fb357838652601081528482872055600f8152818620928354936001600160401b03808616818114611fa0576001011667ffffffffffffffff199590951685179055601c5487916001600160a01b039091169081611f2d575b5050507f06144bf2614b8805622ffff8fd7b7e18444d2e626e181cab8ea04ff6b048d6ba92825191338352820152a380f35b906044849286519485938492636203b43b60e11b8452339084015268056bc75e2d6310000060248401525af18015611f9657611f6c575b808791611efb565b8190813d8311611f8f575b611f818183613352565b810103126119605738611f64565b503d611f77565b83513d89823e3d90fd5b634e487b7160e01b8a526011845260248afd5b505163ce564d7b60e01b8152fd5b5163339b507b60e11b8152fd5b5051630af0c5df60e01b8152fd5b9050346104bf5760203660031901126104bf57816020936001600160401b0392358152600f85522054169051908152f35b505034610474578160031936011261047457601b5490516001600160a01b039091168152602090f35b5050346104745781600319360112610474576020906002549051908152f35b8284346104bc5760203660031901126104bc575061ffff6105276020933561386e565b50503461047457816003193601126104745760209051680d8d726b7177a800008152f35b50503461047457816003193601126104745760209051621275008152f35b5050346104745781600319360112610474576020905160168152f35b50503461047457816003193601126104745760209061080b613839565b50506120fe3661324e565b9061210a828285613498565b803b612114578480f35b61212b93519261212384613301565b858452614f8f565b388080808480f35b505034610474578160031936011261047457601c5490516001600160a01b039091168152602090f35b8383346104745781600319360112610474576121766147f5565b60ff8116918215612367576001600160401b03807f00000000000000000000000000000000000000000000000000000000000000001662127500810180911161235257421061234257600554906121ce8183166133e3565b4210612332574216906001600160401b031916176005556001831491826000146122f55761222a6122216001547f000000000000000000000000000000000000000000000000000000000000000061364b565b6002549061364b565b905b60c8820282810460c814831517156122e257917f9f8f63321243374cc4a2d7ad5fec42ec8ee15ef100a3be11ed5565e8eeaf2b8d9593918861271060609795049485156122d9575b8386116122cf575b85926122ab94926122a6926000146122bd575061229b84600254613418565b600255611b9661495d565b61364b565b9181519384526020840152820152a180f35b6122c8858254613418565b9055611b8e565b929450849261227c565b60019550612274565b634e487b7160e01b875260118852602487fd5b61232c6123246003547f000000000000000000000000000000000000000000000000000000000000000061364b565b87549061364b565b9061222c565b8251631c7c248b60e11b81528790fd5b8151631c7c248b60e11b81528690fd5b601187634e487b7160e01b6000525260246000fd5b51631c7c248b60e11b81528490fd5b505034610474578160031936011261047457602091549051908152f35b9050346104bf5760203660031901126104bf576020928291358152600a845220549051908152f35b9050346104bf5760203660031901126104bf578160209363ffffffff92358152601885522054169051908152f35b919050346104bf57826003193601126104bf57479183808080867f00000000000000000000000000000000000000000000000000000000000000005af13d156124b1573d61243681613391565b9061244385519283613352565b81528560203d92013e5b1561248057507f7f221332ee403570bf4d61630b58189ea566ff1635269001e9df6a890f413dd89160209151908152a180f35b6020606492519162461bcd60e51b8352820152600c60248201526b1cddd9595c0819985a5b195960a21b6044820152fd5b61244d565b9050346104bf5760203660031901126104bf57359161ffff831683036104bc575061080b602092613713565b50503461047457816003193601126104745760209061080b61366b565b505034610474578160031936011261047457517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b505034610474578160031936011261047457517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b9050346104bf57826003193601126104bf5760209250549051908152f35b5050346104745781600319360112610474576020906001600160401b03600554169051908152f35b8284346104bc5760203660031901126104bc57506125ed60209235613608565b9051908152f35b836126076126013661324e565b91613498565b80f35b505034610474578160031936011261047457602090516001600160401b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b50503461047457816003193601126104745760209051620186a08152f35b5050346104745781600319360112610474576020906003549051908152f35b919050346104bf5760203660031901126104bf5781356126af600160215414613425565b6002602155323303612825576001600160a01b039233846126cf846138d2565b16036128175781855260126020526001600160401b03936126f4858588205416613409565b42101561280857908591601b5416803b156104bf57604483928651948593849263079cc67960e41b84523390840152683635c9adc5dea0000060248401525af180156127fe576127ea575b5061279d6020948361ffff958661275e6127594288613418565b614e5b565b16966127698861346c565b9086855260138a52838520911661ffff198254161790554216916012885220816001600160401b031982541617905561347f565b825161ffff851681526001600160401b0391909116602082015233907f69e0d03f3a4f6d0b4bf2d69d84eda12c8226274aa74b0583c13326c8f3c1ac5d90604090a3600160215551908152f35b6127f485916132bd565b610ca6573861273f565b83513d87823e3d90fd5b508251638451c69360e01b8152fd5b825163a3e39f5760e01b8152fd5b5051635d04968b60e11b8152fd5b5050346104745780600319360112610474576020918161285161323e565b9160ff61285c6131fb565b9316815260098552209060018060a01b0316600052825280600020549051908152f35b8383816003193601126104745761289a600160215414613425565b6002602155323303612a16576605543df729c0003403612a07576001600160401b037f00000000000000000000000000000000000000000000000000000000000000001642106129f8576128ec6147f5565b9160ff831680156129e857600181036129d55761290a60015461345d565b6001555b80825260209460098652838320336000528652600384600020612931815461345d565b809155116129c75750808252600b855282822061294e815461345d565b80915561298561295e845461345d565b958487809655858152600a8952868460ff60f81b8460f81b1617912055611b8e8533614890565b8351918252858201527f21cb505071216f47f8ff16668574670cdd2ea8b5ecd86b3cdc3ff3807523b75d833392a36129bc82614b28565b600160215551908152f35b8351639404868360e01b8152fd5b6129e060035461345d565b60035561290e565b82516352df9fe560e01b81528590fd5b516316851a3760e11b81529050fd5b5163f7760f2560e01b81529050fd5b51635d04968b60e11b81529050fd5b505034610474578160031936011261047457601d5490516001600160a01b039091168152602090f35b50503461047457816003193601126104745760209051683635c9adc5dea000008152f35b83833461047457806003193601126104745782356024908135936001600160401b039485811161047457612aa99036908801613211565b9092612ab4816139f2565b612abd826138d2565b6001600160a01b0391903390831603612f3e57612adb3685886133ac565b9586518015908115612f33575b50612f2357855b8751811015612c4857602080828a01015160f81c60308110159182612c3c575b8215612c1e575b8215612c00575b8215612bf6575b508115612beb575b8115612be1575b8115612bd6575b8115612bcb575b8115612bc0575b8115612bb5575b8115612baa575b8115612b9f575b8115612b94575b8115612b89575b5015612b7957600101612aef565b8951634d5849d360e01b81528c90fd5b603f9150148d612b6b565b602f81149150612b64565b602e81149150612b5d565b602d81149150612b56565b602c81149150612b4f565b602b81149150612b48565b602781149150612b41565b602581149150612b3a565b8a81149150612b33565b602181149150612b2c565b811491508e612b24565b9150606181101580612c13575b91612b1d565b50607a811115612c0d565b9150604181101580612c31575b91612b16565b50605a811115612c2b565b603a8211159250612b0f565b50908892918a8c8a878a5260209560178752612c6884898d2054166133e3565b4210612f01578360155416601e8101809111612f11574210612f01578a90601b541680612ea2575b50508242166001600160401b03199080826015541617601555898c5260178852888c209182541617905560188652868a209182549263ffffffff9384811694808614612e90576001809601169063ffffffff1916179055888b5260168752878b20938a11612e7f57505090879291612d088254613283565b601f8111612e2d575b50898a601f8611600114612da0579285807ff31bf1ab732aebfe5a61dd266fa419a379a39b6eed20f62de690a7a1f49e87529a99979461ffff979460609a9793612d95575b501b906000198560031b1c19161790555b818780519889973389528801528601528585013782880184018990521695601f01601f19168101030190a380f35b85013592508f612d56565b50828b52868b2090601f1986168c5b818110612e1557509261ffff95926060989592887ff31bf1ab732aebfe5a61dd266fa419a379a39b6eed20f62de690a7a1f49e87529c9b999610612dfb575b505083811b019055612d67565b840135600019600387901b60f8161c191690558d80612dee565b8287013584558c975092840192918901918901612daf565b9091809394508a52858a20601f8a0160051c810191878b10612e75575b90601f8b96959493920160051c01905b818110612e675750612d11565b600081558a95508201612e5a565b9091508190612e4a565b634e487b7160e01b8b526041905289fd5b634e487b7160e01b8e5260118452848efd5b803b1561047457819060448a518094819363079cc67960e41b83523389840152680d8d726b7177a80000888401525af18015612ef757612ee4575b8a90612c90565b612ef0909a919a6132bd565b988a612edd565b88513d8d823e3d90fd5b8751631df75acf60e01b81528390fd5b634e487b7160e01b8c5260118452828cfd5b8851634d5849d360e01b81528b90fd5b608c9150118c612ae8565b8751637ddf3f6d60e01b81528a90fd5b50503461047457816003193601126104745760209051608c8152f35b9050816003193601126104bf57612f7f6131e5565b9060243592620186a0841161302b5750828452673ec412a9852d173d60c11b3317601c52602084208301830180546001600160a01b0393841693169182156130205790839183331433151715612ffc575b50600101557f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258480a480f35b9091508286526030600c20541561301557908391612fd0565b634b6e7f188652601cfd5b63ceea21b68652601cfd5b5163a4420a9560e01b8152fd5b8284346104bc5760203660031901126104bc578235808252673ec412a9852d173d60c11b601c526020822081010190815460601b1561308a57600182015483516001600160a01b039091168152602090f35b63ceea21b6849152601cfd5b50503461047457816003193601126104745780516104b8916130b7826132e6565b600d82526c4d41524b455420415243414e4160981b6020830152519182916020835260208301906131c0565b9050346104bf5760203660031901126104bf578160209361ffff92358152601385522054169051908152f35b505034610474578160031936011261047457517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b8491346104bf5760203660031901126104bf57356001600160e01b0319811681036104bf576020925060e01c635b5e139f8114906301ffc9a76380ac58cd82149114171715158152f35b60005b8381106131b05750506000910152565b81810151838201526020016131a0565b906020916131d98151809281855285808601910161319d565b601f01601f1916010190565b600435906001600160a01b038216820361196057565b602435906001600160a01b038216820361196057565b9181601f84011215611960578235916001600160401b038311611960576020838186019501011161196057565b6004359060ff8216820361196057565b6060906003190112611960576001600160a01b0390600435828116810361196057916024359081168103611960579060443590565b90600182811c921680156132b3575b602083101461329d57565b634e487b7160e01b600052602260045260246000fd5b91607f1691613292565b6001600160401b0381116132d057604052565b634e487b7160e01b600052604160045260246000fd5b604081019081106001600160401b038211176132d057604052565b602081019081106001600160401b038211176132d057604052565b606081019081106001600160401b038211176132d057604052565b608081019081106001600160401b038211176132d057604052565b90601f801991011681019081106001600160401b038211176132d057604052565b34611960576000366003190112611960576020604051620151808152f35b6001600160401b0381116132d057601f01601f191660200190565b9291926133b882613391565b916133c66040519384613352565b829481845281830111611960578281602093846000960137010152565b906201518082018092116133f357565b634e487b7160e01b600052601160045260246000fd5b9061546082018092116133f357565b919082018092116133f357565b1561342c57565b60405162461bcd60e51b81526020600482015260096024820152681c99595b9d1c985b9d60ba1b6044820152606490fd5b60001981146133f35760010190565b90600161ffff809316019182116133f357565b906154606001600160401b03809316019182116133f357565b90620186a08311806135d6575b806135c4575b6135b2576000838152673ec412a9852d173d60c11b3317601c908152602082208501850180546001600160a01b0394851695851694811680861481021561359e575084845283826001018054803314883314171561357c575b613574575b505085851818905580600c20600019815401905583825280600c2060018154019163ffffffff83168602156135605750557fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9080a4565b60049067ea553b3401336cea871560021b52fd5b558338613509565b9091506030600c20541561359257908591613504565b600485634b6e7f188852fd5b8367ceea21b6a11481006004921560021b52fd5b60405163a4420a9560e01b8152600490fd5b506001600160a01b03811615156134ab565b506001600160a01b03821615156134a5565b81156135f2570690565b634e487b7160e01b600052601260045260246000fd5b6101919060405160208101916a415243414e413a5441504560a81b8352602b820152602b81526136378161331c565b519020066103209081018091116133f35790565b919082039182116133f357565b818102929181159184041417156133f357565b61012c4204600c811061370c57600a1981018181116133f3575b6000918291905b808211156136be57505080151591826136a457505090565b8091925060011b90808204600214901517156133f3571190565b90918215613702576136cf9061345d565b916136d9816147c6565b6136ed575b6136e79061345d565b9061368c565b926136fa6136e79161345d565b9390506136de565b916136e79061345d565b6001613685565b61012c420490600382106138325761372c60ff91614f50565b16600181146137e257600281146137c35760038114613781576004146137525750600090565b61375b81613608565b9060001981019081116133f35761377190613608565b90609682018092116133f3571190565b5061378b81613608565b60001982019182116133f3576137a2600892613608565b90818111156137ba57906137b59161364b565b111590565b6137b59161364b565b5060001981018181116133f3576137dc61377191613608565b91613608565b506137ec816147c6565b9081613815575b816137fc575090565b6001198101915081116133f357613812906147c6565b90565b905060001981018181116133f35761382c906147c6565b906137f3565b5050600090565b61384860035460045490613418565b7f0000000000000000000000000000000000000000000000000000000000000000111590565b600090808252600860205261ffff604083205416806138cc5750600a602052604082205480151590816138b4575b506138a5575090565b6138af9150615024565b905090565b60f81c835250600d602052604082205415153861389c565b91505090565b6000818152673ec412a9852d173d60c11b601c5260209020810101546001600160a01b031690811561390057565b63ceea21b66000526004601cfd5b61ffff90811660001901919082116133f357565b805482101561393a5760005260206000200190600090565b634e487b7160e01b600052603260045260246000fd5b9092919261395d81613391565b9161396b6040519384613352565b82948284528282011161196057602061398593019061319d565b565b602081830312611960578051906001600160401b03821161196057019080601f8301121561196057815161381292602001613950565b6139cc60015460025490613418565b7f0000000000000000000000000000000000000000000000000000000000000000111590565b80600052600760205261ffff6040600020541680613a3d575080600052600a602052604060002054613a3057604051630af0c5df60e01b8152600490fd5b613a3990615024565b5090565b613812915061390e565b60405190613a54826132e6565b6002825261494960f01b6020830152565b60405190613a72826132e6565b60018252604960f81b6020830152565b6000818152673ec412a9852d173d60c11b601c5260209020810181015460601b1561479c57620186a081116145405780600052600a60205260406000205480151580614527575b61432f5750613ad781615429565b91613ae182615490565b9061ffff613aed61366b565b1515941691613afb836154c0565b613b048561481e565b95613b0e856153ea565b95613c6260a2613b3d7f00000000000000000000000000000000000000000000000000000000000000006153ea565b98613b4986858a6155ef565b6040519a8b92600080516020615bfe83398151915260208501526332911d1160e11b9d8e6040860152613b8681518092602060448901910161319d565b84016201016960ed1b6044820152613ba882518093602060478501910161319d565b01602f60f81b6047820152613bc782518093602060488501910161319d565b017f222c226465736372697074696f6e223a224d41524b455420415243414e412e2060488201527f546865206465636b20746861742072656164732074686520636861696e20697460688201526b081b1a5d995cc81bdb8b888b841b6088820152613c3c82518093602060948501910161319d565b016d2261747472696275746573223a5b60901b609482015203608281018a520188613352565b613c6b8161481e565b9161ffff821696613c7b886153ea565b99601689101561432157613c8d613a65565b935b600260ff613c9c8361595d565b16036142c25750613cd1604051613cb2816132e6565b600c81526b4d616a6f7220417263616e6160a01b6020820152926153ea565b60405163352f1d6360e11b81526004810197909752916000876024817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa9384156142b657613f529861011798600096614299575b5015150361427257604051613d44816132e6565b6007815266155c1c9a59da1d60ca1b6020820152945b6040519c8d977f7b2274726169745f74797065223a2243617264222c2276616c7565223a22000060208a0152613d9a815180926020603e8d01910161319d565b88017f227d2c7b2274726169745f74797065223a22417263616e756d222c2276616c75603e82015284605e820152613ddc82518093602060628501910161319d565b017f227d2c7b2274726169745f74797065223a22416374222c2276616c7565223a226062820152613e1782518093602060828501910161319d565b017f227d2c7b2274726169745f74797065223a2254696572222c2276616c7565223a6082820152601160f91b60a2820152613e5c82518093602060a38501910161319d565b01907f227d2c7b2274726169745f74797065223a2245646974696f6e222c2276616c7560a383015260c3820152613e9d82518093602060c78501910161319d565b017f227d2c7b2274726169745f74797065223a225072696e74696e67222c2276616c60c7820152643ab2911d1160d91b60e7820152613ee682518093602060ec8501910161319d565b01907f227d2c7b2274726169745f74797065223a224f7269656e746174696f6e222c2260ec830152673b30b63ab2911d1160c11b61010c83015261011491613f37825180936020868501910161319d565b019062089f4b60ea1b908201520360f7810187520185613352565b80600052601a60205260ff6040600020541660001461425c57604051613f778161331c565b602881527f7b2274726169745f74797065223a22466f7265746f6c64222c2276616c7565226020820152670e8896595cc89f4b60c21b6040820152915b600052600f602052613fd36001600160401b03604060002054166153ea565b816000526018602052613ff063ffffffff604060002054166153ea565b91806000526016602052614008604060002054613283565b6141515750916138129391614108606f602095604051614027816132e6565b6004815263227d5d7d60e01b888201525b60405194859289614052818601998a81519384920161319d565b84017f7b2274726169745f74797065223a224d616e69666573746174696f6e73222c228b820152673b30b63ab2911d1160c11b604082015261409d825180938d60488501910161319d565b017f227d2c7b2274726169745f74797065223a2250726f70686563696573222c227660488201526630b63ab2911d1160c91b60688201526140e6825180938c888501910161319d565b016140f9825180938b878501910161319d565b0103604f810184520182613352565b6141456040519684614123899651809289808a01910161319d565b85016141378251809389808501910161319d565b01915180938684019061319d565b01038084520182613352565b60005260166020526040600020604051907f227d2c7b2274726169745f74797065223a224c6173742050726f70686563792260208301526916113b30b63ab2911d1160b11b604083015260009080546141a981613283565b9160019180831690811561423357506001146141f7575b505050606f60209593836141f260046138129a98966141089663227d5d7d60e01b815203601b19810184520182613352565b614038565b600090815260208120929350915b83831061421d575050508101604a01606f83836141c0565b818160209254604a868901015201920191614205565b60ff1916604a8088019190915284151590940286019093019350606f92508591508490506141c0565b60405161426881613301565b6000815291613fb4565b60405161427e816132e6565b600881526714995d995c9cd95960c21b602082015294613d5a565b6142af9196503d806000833e61162b8183613352565b9438613d30565b6040513d6000823e3d90fd5b60ff6142cf60019261595d565b16036142fd57613cd16040516142e4816132e6565b600581526410dbdd5c9d60da1b60208201525b926153ea565b613cd160405161430c816132e6565b600381526205069760ec1b60208201526142f7565b614329613a47565b93613c8f565b6101626138129160016143627f227d2c7b2274726169745f74797065223a22537461747573222c2276616c7565956153ea565b9160f81c0361451a57614373613a65565b604051948592600080516020615bfe83398151915260208501526c65223a22415243414e554d202360981b60408501526143b7815180926020604d8801910161319d565b8301917f202d20554e52455645414c4544222c226465736372697074696f6e223a224120604d8401527f626c696e64207072696e74206f66204d41524b455420415243414e412e205468606d8401527f6520636172642069732061737369676e6564207768656e207468652061637420608d8401527f73656c6c73206f7574202d206e6f7468696e6720746f20736e6970652c206e6f60ad8401527f7468696e6720746f206772696e642e222c2261747472696275746573223a5b0060cd8401527f7b2274726169745f74797065223a224b696e64222c2276616c7565223a22417260ec8401527f63616e756d227d2c7b2274726169745f74797065223a22416374222c2276616c61010c840152643ab2911d1160d91b61012c840152610131926144eb825180936020878501910161319d565b019182015270223a22554e52455645414c4544227d5d7d60781b61015182015203610142810184520182613352565b614522613a47565b614373565b508060f81c600052600d60205260406000205415613ac9565b60008181526020601281526040916145636001600160401b038483205416613409565b42108482526013835261457c61ffff858420541661390e565b946201869f198101908111614788579161012293916145a76145a161381297956153ea565b9761481e565b9150156147655782516145b9816132e6565b60048152634c49564560e01b83820152905b8351968794600080516020615bfe833981519152858701526c65223a2252454144494e47202360981b9086015261460b8151809286604d8901910161319d565b84017f222c226465736372697074696f6e223a2241206d61726b65742072656164696e604d8201527f672e20497420736d6f756c646572732073697820686f7572733b2066756c6669606d8201527f6c6c206974206f72206974206c61707365732e222c2261747472696275746573608d82015262223a5b60e81b60ad8201527f7b2274726169745f74797065223a224b696e64222c2276616c7565223a22526560b08201527f6164696e67227d2c7b2274726169745f74797065223a22466f726574656c6c7360d08201526a1116113b30b63ab2911d1160a91b60f08201526146fe825180938660fb8501910161319d565b017f227d2c7b2274726169745f74797065223a22537461747573222c2276616c756560fb82015262111d1160e91b61011b82015261474861011e938351938491868501910161319d565b019063227d5d7d60e01b9082015203610102810184520182613352565b8251614770816132e6565b600681526513105414d15160d21b83820152906145cb565b634e487b7160e01b83526011600452602483fd5b60405163677510db60e11b8152600490fd5b90816020910312611960575180151581036119605790565b80156147ef576147d581613608565b9060001981019081116133f3576147eb90613608565b1090565b50600090565b6147fd6139bd565b156148195761480a613839565b1561481457600090565b600290565b600190565b604051637e76d2f360e11b815261ffff9190911660048201526000816024817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa9081156142b65760009161487b575090565b61381291503d806000833e61162b8183613352565b620186a0821180614955575b80614943575b6135b2576000828152673ec412a9852d173d60c11b601c52602081208301830180546001600160a01b039390931692606081901b6149365783179055818152601c600c2060018154019063ffffffff821684021561492157557fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8180a4565b67ea553b3401336cea841560021b526004601cfd5b63c991cbb183526004601cfd5b506001600160a01b03811615156148a2565b50600061489c565b600e54604051602081019182523360601b60408201524260548201524360748201526074815260a081018181106001600160401b038211176132d057604052519020600e55565b60ff8116906000828152602090600d825260409081812054614b215760018514938415614b14576149d36139bd565b15614b0c57600e54908254845191868301936a105490d053904e94d1505360aa1b8552602b84015260ff60f81b9060f81b16604b83015242604c83015243606c830152608c820152608c815260c081018181106001600160401b03821117614af85784525190207fc13f396b637978262bd099cacd133a033adee9b77b4b2f2a6520f0aff86aadf99460609491939192908415614aef575b15614ac657614ab77f00000000000000000000000000000000000000000000000000000000000000005b888352600d85528584842055600b8552838084205493600c875220549061364b565b928251948552840152820152a2565b614ab77f0000000000000000000000000000000000000000000000000000000000000000614a95565b60019450614a6b565b634e487b7160e01b84526041600452602484fd5b505050505050565b614b1c613839565b6149d3565b5050505050565b601d546001600160a01b03908116918215614e5657604080519163316602fd60e21b8352660110d9316ec00093600495858786015260209460249686828981865afa60009281614e27575b50614b8357505050505050505050565b878991614b9993612710948591601e5490613658565b04948987601b54168a51948580926370a0823160e01b9889835230908301525afa928315614e1c578c8c938c938c8a94600098614ddf575b50918594939160449351978895869463c710efb960e01b865285015230908401525af19182614db6575b5050614c0d5750505050505050505050565b878a8a87601b5416948a519586938492835230908301525afa8015614dab57600090614d7c575b614c3e925061364b565b918210614d4f57611d4c808302908382041483151715614d3b5790614c659104809261364b565b92600052848052614c7b84600020918254613418565b905581614c8a57505050505050565b601b54601c54845163a9059cbb60e01b81529083166001600160a01b03168882019081526020810194909452928592849216908290600090829060400103925af1908115614d3057600091614d13575b5015614ce7578080614b0c565b5162461bcd60e51b815292830152600a90820152691d985d5b1d08199d5b9960b21b6044820152606490fd5b614d2a9150833d8511610a09576109fb8183613352565b38614cda565b82513d6000823e3d90fd5b8760118a634e487b7160e01b600052526000fd5b845162461bcd60e51b815280890187905260088189015267736c69707061676560c01b6044820152606490fd5b508782813d8311614da4575b614d928183613352565b8101031261196057614c3e9151614c34565b503d614d88565b87513d6000823e3d90fd5b813d8311614dd8575b614dc98183613352565b81010312611960578838614bfb565b503d614dbf565b95945050955093505081813d8311614e15575b614dfc8183613352565b810103126119605751918a918a9187918e918c85614bd1565b503d614df2565b89513d6000823e3d90fd5b9092508781813d8311614e4f575b614e3f8183613352565b8101031261196057519138614b73565b503d614e35565b505050565b614e636147f5565b60ff81161591908215614f3f5750600091604e5b60408051936020946020810191671193d4915511531360c21b835260288201523360601b604882015242605c820152605c8152614eb381613337565b5190209383159260005b818110614ece575050505050505090565b614eea614ee483614edf848b613418565b6135e8565b89613418565b8686614f0a575b614efe5750600101614ebd565b97505050505050505090565b50806000526006845284600020547f000000000000000000000000000000000000000000000000000000000000000011614ef1565b614f489061598b565b929092614e77565b61ffff1660138114614f8957600d8114614f8357600c8114614f7d57601414614f7857600090565b600490565b50600390565b50600290565b50600190565b9060a46020939460405195869463150b7a028652338787015260018060a01b03166040860152606085015260808085015280518091818060a0880152615010575b505001906000601c8401915af115615001575b5163757a42ff60e11b01614ff357565b63d1a57ed66000526004601cfd5b3d15614fe3573d6000823e3d90fd5b818760c08801920160045afa508038614fd0565b6000908152602090600a825260409081812054938460f81c90818352600d8552838320549586156152dd576001600160f81b03166000198101959086116152c957600196879684880361529c576150ab7f0000000000000000000000000000000000000000000000000000000000000000989695985b898752600c8552888720549061364b565b916150e4838951868101906c415243414e413a5045524d3a4160981b825284602d820152602d81526150dc8161331c565b5190206135e8565b995b61522b575b91614edf88999a6151336151389461512d8561513e988d9e518b8101916c20a921a0a7209d2822a9269d2160991b8352602d820152602d81526150dc8161331c565b92613658565b613418565b9761598b565b9790938098857f0000000000000000000000000000000000000000000000000000000000000000985b61517d575b895163959f34ed60e01b8152600490fd5b61518a82829b9a9b613418565b8710156152235786835260069a8b86526151a78a8520548c61364b565b9b6151b28d83613418565b86106151d157506151c7899a9b9c8a92613418565b9701969a98615167565b93959994969a50969a50505061ffff968984525281205493840180941161520f57509161520261520892859461364b565b90613418565b1692169190565b634e487b7160e01b81526011600452602490fd5b88995061516c565b959794958983805b6152795750891461527057888a01809a1161525c57615253838a9b6135e8565b999695986150e6565b634e487b7160e01b87526011600452602487fd5b979594976150eb565b8061528d919c9a989796959b999c926135e8565b809b989a94959697999b615233565b6150ab7f00000000000000000000000000000000000000000000000000000000000000009896959861509a565b634e487b7160e01b84526011600452602484fd5b845163959f34ed60e01b8152600490fd5b6152f7816138d2565b620186a0821190816153d7575b50806153cf575b6135b2576000818152673ec412a9852d173d60c11b601c52602081208201820180546001600160a01b038116919082156153c25782908185528483600101805480156001171561539b575b615393575b5050189055601c600c2080546000190190557fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8280a4565b55843861535b565b91509192506030600c2054156153b5578492918691615356565b634b6e7f1886526004601cfd5b63ceea21b684526004601cfd5b50600061530b565b6001600160a01b03161515905038615304565b90604051608081019260a0820160405260008452925b6000190192600a90603082820601855304928361540057809350608091030191601f1901918252565b9081600052600760205261ffff80604060002054168061547457505090600a60205260406000205461546757604051630af0c5df60e01b8152600490fd5b61547090615024565b9091565b61547d9061390e565b9260005260086020526040600020541690565b61ffff16601681106154b25760151981019081116133f357600e600291041090565b6001901b623a058a16151590565b6001811015806155e4575b6147ef576009811015806155d9575b614f8957600c811015806155ce575b614f8357600f811015806155c3575b614f7d576012811015806155b8575b6155b2576014811015806155a7575b6155a157601681101580615596575b61559057601781101580615585575b61557f57601881101580615574575b61556e5760198110159081615562575b5061555d57600080fd5b600990565b60199150111538615553565b50600890565b506018811115615543565b50600790565b506017811115615534565b50600690565b506016811115615525565b50600590565b506015811115615516565b50600490565b506013811115615507565b5060118111156154f8565b50600e8111156154e9565b50600b8111156154da565b5060088111156154cb565b9190917f000000000000000000000000000000000000000000000000000000000000000091823b156159465760408051630ff2643f60e21b815261ffff861660048201819052919591946000949092916001600160a01b039186826024817f000000000000000000000000000000000000000000000000000000000000000087165afa91821561593c578792615920575b5061569361568d8561481e565b9461595d565b908752602097601a895260ff96878b8a205416906156af61366b565b15615918576001915b8c519360c08501966001600160401b039786811089821117615904578f908f90928e938352885287019a8b528601961686526060850191151582528a60808601931683528a60a08601941684528d519063e83564fd60e01b825260048201528b816024818b7f0000000000000000000000000000000000000000000000000000000000000000165afa9687156158fa57928b928f8f9b999795938f9d9b9997948e9961588b575b50509081859392519e8f9d8e9c8d9b848d631375e06160e01b81526004015260448d0161578b916131c0565b998c600319818d030190602401525160c08b5260c08b016157ab916131c0565b9051918a8203908b01526157be916131c0565b9851169087015251151560608601525116608084015251169060a001520392165afa918215615880579261584a61580c604594620d8d0b60ea1b9794876138129892615865575b50506159a5565b9183519687947f22696d616765223a22646174613a696d6167652f7376672b786d6c3b6261736583870152850152825192839160438601910161319d565b810161088b60f21b6043820152036025810184520182613352565b61587992503d8091833e61162b8183613352565b3880615805565b8451903d90823e3d90fd5b9498509450509396989a50939698503d808d843e6158a98184613352565b8201918d818403126158f65780519182116158f6570181601f820112156158f257938a8d9997948f96946158e88f9d9b999695868e8698519101613950565b979091923861575f565b8b80fd5b8c80fd5b8e513d8e823e3d90fd5b634e487b7160e01b8e52604160045260248efd5b6002916156b8565b6159359192503d8089833e61162b8183613352565b9038615680565b89513d89823e3d90fd5b5050505060405161595681613301565b6000815290565b61ffff1660168110614f835760151981019081116133f357600a600e9091061061598657600190565b600090565b60ff1660011461599d57601690603890565b600090601690565b908151918215615bee576003808406916159bf838661364b565b926002958681018091116133f3576003900480871b94906001600160fe1b038116036133f357602096878601928387116133f3576159fc84613391565b95615a17604095615a0f8751998a613352565b808952613391565b878b019590601f1901368737879a815196615a318861331c565b8288527f4142434445464748494a4b4c4d4e4f505152535455565758595a616263646566828901527f6768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2f8389015282519261202084018481106001600160401b038211176132d057819594939552612000808452368685013760005b818110615ba0575050839096818a01990101925b838910615b5f575050505080600114615b2957600214615ae2575b5050505052565b6001600393603c603d9651838160001a91811a918181881c86010151885360308360041c9160041b16178401015184870153841b1601015190820153015338808080615adb565b50603d93906001600394603087945160001a8381861c84010151875360041b160101516001840153820153015338808080615adb565b90916004899782959a5184611ffe81818460f31c16890101519260e71c168701015160f01c63ffff000060e092831c1617901b815201960197929190615ac0565b85818b9795969701015160001a8160071b860160005b848110615bcc5750505060010194939294615aac565b808d60218983600195861b870193888386015301015160001a91015301615bb6565b5090506040516159568161330156fe646174613a6170706c69636174696f6e2f6a736f6e3b757466382c7b226e616da2646970667358221220b09adbe7c9d3857f6e537a64ccd4ec3f479d1735708fb1ec023511ef3c91615364736f6c634300081800336080806040523461001657610fa3908161001c8239f35b600080fdfe6080604052600436101561001257600080fd5b6000803560e01c80633fc990fc146100d55780636a5e3ac6146100b55780638a7c608f146100885763fceda5e61461004957600080fd5b34610085576020366003190112610085576004359061ffff821682036100855761008161007583610c31565b60405191829182610125565b0390f35b80fd5b5034610085576020366003190112610085576004359061ffff8216820361008557610081610075836108aa565b5034610085576020366003190112610085576100816100756004356106b2565b5034610085576020366003190112610085576004359061ffff8216820361008557610081610075836101f5565b60005b8381106101155750506000910152565b8181015183820152602001610105565b604091602082526101458151809281602086015260208686019101610102565b601f01601f1916010190565b6102c0810190811067ffffffffffffffff82111761016e57604052565b634e487b7160e01b600052604160045260246000fd5b6101c0810190811067ffffffffffffffff82111761016e57604052565b6040810190811067ffffffffffffffff82111761016e57604052565b9060168110156101ce5760051b0190565b634e487b7160e01b600052603260045260246000fd5b90600e8110156101ce5760051b0190565b61ffff16601681106103f757604080519061020f82610184565b645748414c4560d81b815191610224836101a1565b60018352602092604160f81b8482015284528051610241816101a1565b6002815261494960f01b8482015283850152805161025e816101a1565b600381526249494960e81b8482015281850152805161027c816101a1565b600281526124ab60f11b848201526060850152805161029a816101a1565b60018152602b60f91b84820152608085015280516102b7816101a1565b6002815261564960f01b8482015260a085015280516102d5816101a1565b600381526256494960e81b8482015260c085015280516102f4816101a1565b60048152635649494960e01b8482015260e08501528051610314816101a1565b6002815261092b60f31b848201526101008501528051610333816101a1565b60018152600b60fb1b848201526101208501528051610351816101a1565b60068152650534852494d560d41b848201526101408501528051610374816101a1565b600481526308c92a6960e31b848201526101608501528051610395816101a1565b6005815264534841524b60d81b8482015261018085015251916103b7836101a1565b600583528201526101a082015260151982019182116103e157600e6103dd9206906101e4565b5190565b634e487b7160e01b600052601160045260246000fd5b6103dd90604080519061040982610151565b6258584960e81b815161041b816101a1565b60018152602090600360fc1b8282015284528251610438816101a1565b60018152604960f81b8282015281850152825192610455846101a1565b60029384815261494960f01b8382015281860152805193610475856101a1565b6003948581526249494960e81b8482015260608701528151610496816101a1565b8181526124ab60f11b84820152608087015281516104b3816101a1565b60018152602b60f91b8482015260a087015281516104d0816101a1565b81815261564960f01b8482015260c087015281516104ed816101a1565b8581526256494960e81b8482015260e0870152815161050b816101a1565b60048152635649494960e01b84820152610100870152815161052c816101a1565b81815261092b60f31b84820152610120870152815161054a816101a1565b60018152600b60fb1b848201526101408701528151610568816101a1565b81815261584960f01b848201526101608701528151610586816101a1565b8581526258494960e81b8482015261018087015281516105a5816101a1565b60048152635849494960e01b848201526101a087015281516105c6816101a1565b858152622c24ab60e91b848201526101c087015281516105e5816101a1565b818152612c2b60f11b848201526101e08701528151610603816101a1565b8581526258564960e81b848201526102008701528151610622816101a1565b60048152635856494960e01b848201526102208701528151610643816101a1565b6005815264585649494960d81b848201526102408701528151610665816101a1565b858152620b092b60eb1b84820152610260870152815190610685826101a1565b8152610b0b60f31b8382015261028086015251926106a2846101a1565b83528201526102a08201526101bd565b801561087f57600181146108575760028114610833576003811461080d57600481146107e757600581146107bd5760068114610794576007811461076e576008811461074757600914610723576040516020810181811067ffffffffffffffff82111761016e576040526000815290565b60405161072f816101a1565b6008815267282427a9a82427a960c11b602082015290565b50604051610754816101a1565b600a815269212627a7a21026a7a7a760b11b602082015290565b5060405161077b816101a1565b600981526823a7a622102622a0a360b91b602082015290565b506040516107a1816101a1565b600c81526b424f4e45202620534c41544560a01b602082015290565b506040516107ca816101a1565b600d81526c4d49444e49474854205441504560981b602082015290565b506040516107f4816101a1565b6009815268125493d38811d0531360ba1b602082015290565b5060405161081a816101a1565b600981526856455244494752495360b81b602082015290565b50604051610840816101a1565b600781526613d6109313d3d160ca1b602082015290565b50604051610864816101a1565b600b81526a4c454447455220424c554560a81b602082015290565b5060405161088c816101a1565b600e81526d4649525354205052494e54494e4760901b602082015290565b6103dd9061ffff6040918251926108c084610151565b67151211481156125560c21b8151916108d8836101a1565b600d83526020926c2a2422902120a3a427a62222a960991b8482015286528051610901816101a1565b601081526f2a24229026a0a925a2aa1026a0a5a2a960811b8482015283870152805161092c816101a1565b600b81526a2a24229024a729a4a222a960a91b84820152818701528051610952816101a1565b6009815268544845205748414c4560b81b8482015260608701528051610977816101a1565b60078152661512114811915160ca1b848201526080870152805161099a816101a1565b600b81526a15121148105390531654d560aa1b8482015260a087015280516109c1816101a1565b600a8152692a24229026a2a923a2a960b11b8482015260c087015280516109e7816101a1565b600881526705448452050554d560c41b8482015260e08701528051610a0b816101a1565b600d81526c4449414d4f4e442048414e445360981b848201526101008701528051610a35816101a1565b600a8152692a242290262aa925a2a960b11b848201526101208701528051610a5c816101a1565b600b81526a2a242290282924a72a22a960a91b848201526101408701528051610a84816101a1565b600981526815121148105551125560ba1b848201526101608701528051610aaa816101a1565b6008815267151211481210531560c21b848201526101808701528051610acf816101a1565b600e81526d2a242290212620a1a59029aba0a760911b848201526101a08701528051610afa816101a1565b600981526854484520484544474560b81b848201526101c08701528051610b20816101a1565b600c81526b544845204c4556455241474560a01b848201526101e08701528051610b49816101a1565b600f81526e1512114813505491d2538810d05313608a1b848201526102008701528051610b75816101a1565b600c81526b151211481353d3d394d213d560a21b848201526102208701528051610b9e816101a1565b60078152661512114811955160ca1b848201526102408701528051610bc2816101a1565b601081526f54484520474f4c44454e2043524f535360801b848201526102608701528051610bef816101a1565b60118152705448452053484f52542053515545455a4560781b848201526102808701525191610c1d836101a1565b600883528201526102a084015216906101bd565b9061ffff82169160168310610f5f575060151982019182116103e1576040805167ffffffffffffffff9190608081018381118282101761016e57808352610c77816101a1565b600781526643414e444c455360c81b60a08301528152815194610c99866101a1565b60059586815260209064434f494e5360d81b82820152818401528351610cbe816101a1565b60068152654b4e4956455360d01b8282015284840152835192610ce0846101a1565b600493848152634241475360e01b838201526060820152600e610ecb8651610d0781610184565b8751610d12816101a1565b600381526241434560e81b8682015281528751610d2e816101a1565b600381526254574f60e81b86820152858201528751610d4c816101a1565b8b815264544852454560d81b86820152888201528751610d6b816101a1565b878152632327aaa960e11b8682015260608201528751610d8a816101a1565b878152634649564560e01b8682015260808201528751610da9816101a1565b60038152620a692b60eb1b8682015260a08201528751610dc8816101a1565b8b81526429a2ab22a760d91b8682015260c08201528751610de8816101a1565b8b815264115251d21560da1b8682015260e08201528751610e08816101a1565b878152634e494e4560e01b868201526101008201528751610e28816101a1565b60038152622a22a760e91b868201526101208201528751610e48816101a1565b60068152650534852494d560d41b868201526101408201528751610e6b816101a1565b8781526308c92a6960e31b868201526101608201528751610e8b816101a1565b8b815264534841524b60d81b868201526101808201528751610eac816101a1565b8b8152645748414c4560d81b868201526101a0820152828606906101e4565b51930484811015610f4a57610f1597981b01519084519683610ef68995518092858089019101610102565b8401916301027a3160e51b818401528351938491602485019101610102565b01038181018552604301601f1916840192831184841017610f3557505290565b604190634e487b7160e01b6000525260246000fd5b603285634e487b7160e01b6000525260246000fd5b610f6a9192506108aa565b9056fea2646970667358221220f1a1ef3c0a00967d013d5a454ccdbb6b4e76ae0dc4090534e7561b5312ecf34e64736f6c634300081800330000000000000000000000002134a21d0285471bad660ab9097fc90051e06f90000000000000000000000000000000000000000000000000000000006a7ee8a7000000000000000000000000000000000000000000000000000000000000001900000000000000000000000000000000000000000000000000000000000000c00000000000000000000000004830894d0cdcfb985c39764693207c408aaa377700000000000000000000000024f87cbba5784d6474a71332cc2f813e56a76c28000000000000000000000000000000000000000000000000000000000000004668747470733a2f2f3078323466383763626261353738346436343734613731333332636332663831336535366137366332382e617262312e77336c696e6b2e696f2f736974650000000000000000000000000000000000000000000000000000
0x608060408181526004918236101561001657600080fd5b600092833560e01c91826301ffc9a714613153575081630506eb401461310f578163061d4969146130e357816306fdde0314613096578163081812fc14613038578163095ea7b314612f6a5781630cecf2d014612f4e5781630fd2ea7414612a725781631132a58714612a4e578163121193f014612a255781631249c58b1461287f5781631337a9c0146128335781631c19c2151461268b57816321f5fd811461266c578163220703ad1461264e578163226730301461260a57816323b872dd146125f4578163249c1661146125cd57816324b419c4146125a5578163267e57b514612587578163288a2f9b146125435781632d2c5565146124ff578163349aa524146124e257816335f6feac146124b657816335faa416146123e957816339c5c918146123bb5781633a1976b9146123935781634047cca414612376578163407d2ef51461215c578163411557d11461213357816342842e0e146120f357816345af7ca4146120d657816347e71196146120ba57816349946d431461209c5781634a774b66146120785781634be185f0146120555781634e3314c41461203657816350e7ea971461200d5781635f17348e14611fdc5781635fc8373214611e505781636352211e14611e1f57816363942f4214611dee57816368ea16ee14611daa5781636aac6af214611d795781636f05e4c814611d5157816370a0823114611cfc578163753b88071461198d5781637d13d972146119655781637d58e40a146117775781638012a1171461174f57816385698fed1461173357816386d9059e1461171757816389245681146116455781638a7c608f1461158d5781638c1db361146115715781638d859f3e1461154f5781638de120b01461120d578163929ea77f146111f057816395d89b41146111aa578163973628f61461118b5781639c10549f1461116e578163a0dc275814611151578163a22cb465146110de578163a4d9f536146110bf578163a780b94e14610fe7578163b1d1a86514610fca578163b4ceecb414610fab578163b88d4fde14610f34578163b92e521614610f17578163b9c6a9db14610ef8578163bad8a12014610e19578163be9eafeb146104df578163c16311aa14610dfd578163c1a2f7b214610dc2578163c1b8411a14610d7e578163c22b8d8214610d5b578163c5f1a4cd14610d20578163c87b56dd14610cff578163d21e312f14610cdb578163d72a5f1a14610caa578163d9b7c25014610b6e578163d9c5931d14610a3a578163d9c8f8e6146108d4578163df976f1d14610899578163e1fa1a2d1461086c578163e3c55fed1461083b578163e457e1e514610814578163e6dd71c1146107eb578163e8a3d48514610574578163e985e9c51461052f578163ec907c6114610508578163f07eb1df146104e4578163f110ba3f146104df578163f3f05e6c146104c3578163fceda5e614610478575063ff639e1a1461044557600080fd5b34610474576020366003190112610474578060209260ff61046461323e565b168152600b845220549051908152f35b5080fd5b9050346104bf5760203660031901126104bf57359161ffff831683036104bc57506104a56104b89261481e565b90519182916020835260208301906131c0565b0390f35b80fd5b8280fd5b50503461047457816003193601126104745760209051601e8152f35b613373565b50503461047457816003193601126104745760209060ff601f541690519015158152f35b50503461047457816003193601126104745760209060ff6105276147f5565b915191168152f35b50503461047457806003193601126104745760209161054c6131e5565b906105556131fb565b601c52670a5a2e7a00000000600852526030600c205490519015158152f35b8284346104bc57806003193601126104bc57508051602091600080516020615bfe83398151915260208301527219488e8893505492d15508105490d05390488b606a1b818301527f226465736372697074696f6e223a2241206d61726b6574207461726f742c206660538301527f756c6c79206f6e20636861696e2e2032352065646974696f6e73206f6620373860738301527f2063617264732e20546865206465636b2072656164732074686520636861696e60938301527f206974206c69766573206f6e3a206361726473207374616e642055707269676860b38301527f7420696e2062756c6c2070686173657320616e6420526576657273656420696e60d38301527f2062656172206f6e65732c207061747465726e73206d616e6966657374206f6e60f38301527f207468652067686f737420746170652c20686f6c6465727320696e73637269626101138301527f652070726f7068656369657320696e746f2074686569722063617264732e222c610133830152701132bc3a32b93730b62fb634b735911d1160791b6101538301526101646000936019549061071b82613283565b916001908181169081156107c95750600114610767575b6104b886866107556002838c61227d60f01b815203601d19810185520183613352565b519182916020835260208301906131c0565b909192955060196000527f944998273e477b495144fb8794c914197f3ccb46be2900f4698fd0ef743c9695906000915b8483106107b657505050506002836104b8956107559382010195610732565b8054878401890152918301918101610797565b60ff1916858801525050508015150283010192506107556002836104b8610732565b8284346104bc5760203660031901126104bc575061080b602092356147c6565b90519015158152f35b9050346104bf5760203660031901126104bf57602092829135815283805220549051908152f35b9050346104bf5760203660031901126104bf57816020936001600160401b0392358152601285522054169051908152f35b9050346104bf5760203660031901126104bf578160209360ff92358152601a855220541690519015158152f35b505034610474578160031936011261047457602090517f00000000000000000000000000000000000000000000000000000000000002268152f35b83833461047457602092836003193601126104bf578035906108fa600160215414613425565b6002602155610908826138d2565b6001600160a01b0394903390861603610a2b5782815285805283812054948515610a1b57838252868052848220829055601b54855163a9059cbb60e01b815233858201908152602081018990529092899284928390036040019183918791165af1918215610a1057916109e3575b50156109b357508151908382527f050fc3eada81eb0e84d9814c855d00a74f06bcb08670229447f51f14fa88a893853393a3600160215551908152f35b825162461bcd60e51b8152908101859052600a60248201526931b630b4b6903c3332b960b11b6044820152606490fd5b610a039150863d8811610a09575b6109fb8183613352565b8101906147ae565b86610976565b503d6109f1565b8551903d90823e3d90fd5b84516312d37ee560e31b81528390fd5b508251637ddf3f6d60e01b8152fd5b505034610474576020806003193601126104bf57610a566131e5565b91805192610a638461331c565b60603685378151838101916c105490d053904e94d414915051609a1b83526bffffffffffffffffffffffff199060601b16602d820152620151804204604182015260418152610ab181613337565b51902061ffff93604e9385604e84061682528082019686604e85841c0616885286604e86850195871c061684525b86885116878451168103610b03578688610af9819361346c565b1606168852610adf565b5090919296935b868851168785511681148015610b62575b15610b36578688610b2c819361346c565b1606168852610b0a565b505193508592845b60038310610b4b57606086f35b838060019287855116815201920192019190610b3e565b50878651168114610b1b565b919050346104bf57602080600319360112610ca6578235906001600160401b0390818311610ca25736602384011215610ca2578285013591808311610c9e5760246005943660248660051b83010111610c9a578895895b868110610be6578a8a8a8a15610bd9578280f35b51635d39c2fb60e11b8152fd5b8381831b8401013597620186a0891115610c8457898c610c248b80600052673ec412a9852d173d60c11b601c5260206000208101015460601b151590565b15610c8e578a8152601289522054610c3d908716613409565b4210610c845790610c58600192610c538b6152ee565b61345d565b987f458413ab2fc782f43b135738ba516120e0e19c4a90a078006333bb33de59fa358d80a25b01610bc5565b9750600190610c7e565b50509750600190610c7e565b8880fd5b8680fd5b8580fd5b8380fd5b505034610474576020366003190112610474578060209260ff610ccb61323e565b168152600c845220549051908152f35b5050346104745781600319360112610474576020905168056bc75e2d631000008152f35b8284346104bc5760203660031901126104bc57506104a56104b89235613a82565b505034610474578160031936011261047457602090517f00000000000000000000000000000000000000000000000000000000000005788152f35b8284346104bc5760203660031901126104bc575061ffff610527602093356139f2565b505034610474578160031936011261047457517f0000000000000000000000009c28decc934f12a398889044c24ef7a9a626a85b6001600160a01b03168152602090f35b505034610474578160031936011261047457602090517f00000000000000000000000000000000000000000000000000000000000000198152f35b5050346104745781600319360112610474576020905160018152f35b905082346104bc576020918260031936011261047457908391358152601683522091805180936000908054610e4d81613283565b9182855260019187600182169182600014610ed1575050600114610e8e575b5050506104b89291610e7f910385613352565b519282849384528301906131c0565b86935060009291925282600020916000925b828410610eb95750505082010181610e7f6104b8610e6c565b8054848a018601528895508794909301928101610ea0565b60ff19168782015293151560051b86019093019350849250610e7f91506104b89050610e6c565b5050346104745781600319360112610474576020906011549051908152f35b50503461047457816003193601126104745760209061080b6139bd565b8390608036600319011261047457610f4a6131e5565b610f526131fb565b9160443590606435906001600160401b038211610ca257610f7591369101613211565b610f83838686979497613498565b813b610f8d578580f35b610fa294610f9c9136916133ac565b92614f8f565b81808080808580f35b5050346104745781600319360112610474576020906001549051908152f35b50503461047457816003193601126104745760209051611d4c8152f35b8284346104bc57806003193601126104bc57508051601954909182600061100d84613283565b8083526020946001908660018216918260001461109d575050600114611040575b50506104b89291610e7f910385613352565b9085925060196000527f944998273e477b495144fb8794c914197f3ccb46be2900f4698fd0ef743c9695916000925b8284106110855750505082010181610e7f61102e565b8054848a01860152889550879490930192810161106f565b60ff19168682015292151560051b85019092019250839150610e7f905061102e565b505034610474578160031936011261047457602090601e549051908152f35b505034610474573660031901126104bc576110f76131e5565b6024358015158091036104bf5781601c52670a5a2e7a00000000600852338352806030600c2055825260018060a01b0316337f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31602084a380f35b5050346104745781600319360112610474576020905161012c8152f35b505034610474578160031936011261047457602090516154608152f35b5050346104745781600319360112610474576020905161012c42048152f35b50503461047457816003193601126104745780516104b8916111cb826132e6565b6006825265415243414e4160d01b6020830152519182916020835260208301906131c0565b505034610474578160031936011261047457602090516107d08152f35b8383346104745781600319360112610474576001600160401b0390817f000000000000000000000000000000000000000000000000000000006a7ee8a716421061154057323303611531578293338452602093601485528281209281965b84548810156113dd5761127e8886613922565b9054600391821b1c6000818152673ec412a9852d173d60c11b601c5260209020810181015460601b1515806113c0575b156112d05750506112c16112c79161345d565b9761345d565b955b959661126b565b6000818152673ec412a9852d173d60c11b601c526020902081018101549299989260601b61138d575b5085546000199081810190811161137a576113176113409189613922565b905490841b1c6113278b8a613922565b90919082549060031b91821b91600019901b1916179055565b86548015611367578101916113558389613922565b81939154921b1b1916905585556112c9565b634e487b7160e01b865260318752602486fd5b634e487b7160e01b865260118752602486fd5b611396816152ee565b7f458413ab2fc782f43b135738ba516120e0e19c4a90a078006333bb33de59fa358580a2896112f9565b50808552601289526113d6888587205416613409565b42106112ae565b859184600189931015611523576113f560115461345d565b9384601155620186a09485018095116115105742169284865260128152828620846001600160401b031982541617905561ffff9161143c8361143688614e5b565b1661346c565b8688526013835283858920911661ffff1982541617905533875260148252838720805491680100000000000000008310156114fd57506114f79360137f2ca2b649a8988542f31ef4a9092f578b2a4ac5c88847f99f9a1e555d56894c3596946114b58a611327876114cd9760016114d39a018155613922565b6114bf8a33614890565b898b5252838920541661390e565b9461347f565b905161ffff90941684526001600160401b0316602084015233929081906040820190565b0390a380f35b634e487b7160e01b895260419052602488fd5b634e487b7160e01b865260118252602486fd5b9051633c0d9c8760e21b8152fd5b51635d04968b60e11b81528390fd5b516316851a3760e11b81528390fd5b505034610474578160031936011261047457602090516605543df729c0008152f35b5050346104745781600319360112610474576020905160038152f35b919050346104bf5760203660031901126104bf57813561ffff8116809103610ca6578151638a7c608f60e01b81529283015282826024817f00000000000000000000000056da2e83fa9b7c0165f2bc931299230399326c876001600160a01b03165afa91821561163b57836104b89493611616575b5050519182916020835260208301906131c0565b6116339293503d8091833e61162b8183613352565b810190613987565b903880611602565b81513d85823e3d90fd5b5050346104745760209060206003193601126104bf576116636131e5565b6001600160a01b03168352601460205280832080549392908390815b868110611690576020868651908152f35b61169a8183613922565b90549060031b1c6116c98180600052673ec412a9852d173d60c11b601c5260206000208101015460601b151590565b90816116f2575b506116de575b60010161167f565b946116ea60019161345d565b9590506116d6565b905083526012845261170f6001600160401b038685205416613409565b4210386116d0565b5050346104745781600319360112610474576020905160c88152f35b50503461047457816003193601126104745760209051604e8152f35b9050346104bf5760203660031901126104bf5760209282913581526006845220549051908152f35b838334610474576080366003190112610474576117926131e5565b9061179b6131fb565b6044916001600160a01b038335818116939084900361196057606497883595837f0000000000000000000000009c28decc934f12a398889044c24ef7a9a626a85b16330361192f57601f549760ff89166118fe5789546118cb57841694851515806118c0575b806118b7575b1561188f5787151580611883575b1561185c5750505060019697506bffffffffffffffffffffffff60a01b9283601b541617601b551681601c541617601c55601d541617601d55601e5560ff191617601f5580f35b8a929160206262707360e81b92519362461bcd60e51b855284015260036024840152820152fd5b50612710881115611815565b5162461bcd60e51b81526020818401526024810192909252637a65726f60e01b908201528890fd5b50861515611807565b508484161515611801565b855162461bcd60e51b8152602081850152600f60248201526e1cd85b19481c1c9bd9dc995cdcd959608a1b818401528b90fd5b855162461bcd60e51b8152602081850152600d60248201526c185b1c9958591e481dda5c9959609a1b818401528b90fd5b906c37b7363c903232b83637bcb2b960991b8a92602087519362461bcd60e51b8552840152600d6024840152820152fd5b600080fd5b9050346104bf5760203660031901126104bf5760209282913581526010845220549051908152f35b60208385366003190183136104bc578335936001916119af8360215414613425565b6002602155323303611ced57336001600160a01b036119cd886138d2565b1603611cde57858152601285526001600160401b03916119f1838684205416613409565b421015611cd0578682526013865261ffff90611a1182878520541661390e565b916605543df729c0003403611cc1578083169485855260068952878520547f00000000000000000000000000000000000000000000000000000000000000191115611cb157611a5f8a6152ee565b7f000000000000000000000000000000000000000000000000000000006a7ee8a7164210611ca2576016851015611c9a5785905b60ff821692878403611c3457611aa76139bd565b611c2657611ab5885461345d565b8089557f000000000000000000000000000000000000000000000000000000000000022610611c26575b83865260098a52888620336000528a52600389600020611aff815461345d565b80915511611c185750928792611b9b86938896611b5f998d9e995260068d5280878720611b2c815461345d565b80915516938652600c8d52868620611b44815461345d565b90556008611b52875461345d565b9d8e9b8c97888a5561346c565b92878952600782528989209061ffff19941684825416179055528387872091825416179055611b8e8433614890565b611b9661495d565b6149a4565b8351908582528b8201527f837a1c83ad76717a7cff13de51a5ac4f23025d30e622b2bc7646f0d5aef49e2a843392a3848152601a895220805460ff191685179055611be583614b28565b84519081527f85b7799be0a76d19e256e8868717cc9297bccfe18ebfe92332a25c8cd8a43639873392a460215551908152f35b8851639404868360e01b8152fd5b88516352df9fe560e01b8152fd5b611c3c6139bd565b158015611c8c575b611c2657611c5360035461345d565b806003557f00000000000000000000000000000000000000000000000000000000000005781015611adf5788516352df9fe560e01b8152fd5b50611c95613839565b611c44565b600290611a93565b5085516316851a3760e11b8152fd5b875163177b2af760e31b81528390fd5b50855163f7760f2560e01b8152fd5b8451638451c69360e01b8152fd5b50825163a3e39f5760e01b8152fd5b508251635d04968b60e11b8152fd5b8284346104bc5760203660031901126104bc57611d176131e5565b908115611d455760209350673ec412a9852d173d60c11b601c525263ffffffff601c600c2054169051908152f35b638f4eb604849152601cfd5b5050346104745781600319360112610474576020906001600160401b03601554169051908152f35b9050346104bf5760203660031901126104bf57816020936001600160401b0392358152601785522054169051908152f35b505034610474578160031936011261047457517f00000000000000000000000056da2e83fa9b7c0165f2bc931299230399326c876001600160a01b03168152602090f35b505034610474576020366003190112610474578060209260ff611e0f61323e565b168152600d845220549051908152f35b8284346104bc5760203660031901126104bc5750611e3f602092356138d2565b90516001600160a01b039091168152f35b919050346104bf5760209182600319360112610ca65780359161ffff831692838103610ca257604e841015611fce57611e8890613713565b15611fc15761012c4204938386526010815284828720541015611fb357838652601081528482872055600f8152818620928354936001600160401b03808616818114611fa0576001011667ffffffffffffffff199590951685179055601c5487916001600160a01b039091169081611f2d575b5050507f06144bf2614b8805622ffff8fd7b7e18444d2e626e181cab8ea04ff6b048d6ba92825191338352820152a380f35b906044849286519485938492636203b43b60e11b8452339084015268056bc75e2d6310000060248401525af18015611f9657611f6c575b808791611efb565b8190813d8311611f8f575b611f818183613352565b810103126119605738611f64565b503d611f77565b83513d89823e3d90fd5b634e487b7160e01b8a526011845260248afd5b505163ce564d7b60e01b8152fd5b5163339b507b60e11b8152fd5b5051630af0c5df60e01b8152fd5b9050346104bf5760203660031901126104bf57816020936001600160401b0392358152600f85522054169051908152f35b505034610474578160031936011261047457601b5490516001600160a01b039091168152602090f35b5050346104745781600319360112610474576020906002549051908152f35b8284346104bc5760203660031901126104bc575061ffff6105276020933561386e565b50503461047457816003193601126104745760209051680d8d726b7177a800008152f35b50503461047457816003193601126104745760209051621275008152f35b5050346104745781600319360112610474576020905160168152f35b50503461047457816003193601126104745760209061080b613839565b50506120fe3661324e565b9061210a828285613498565b803b612114578480f35b61212b93519261212384613301565b858452614f8f565b388080808480f35b505034610474578160031936011261047457601c5490516001600160a01b039091168152602090f35b8383346104745781600319360112610474576121766147f5565b60ff8116918215612367576001600160401b03807f000000000000000000000000000000000000000000000000000000006a7ee8a71662127500810180911161235257421061234257600554906121ce8183166133e3565b4210612332574216906001600160401b031916176005556001831491826000146122f55761222a6122216001547f000000000000000000000000000000000000000000000000000000000000022661364b565b6002549061364b565b905b60c8820282810460c814831517156122e257917f9f8f63321243374cc4a2d7ad5fec42ec8ee15ef100a3be11ed5565e8eeaf2b8d9593918861271060609795049485156122d9575b8386116122cf575b85926122ab94926122a6926000146122bd575061229b84600254613418565b600255611b9661495d565b61364b565b9181519384526020840152820152a180f35b6122c8858254613418565b9055611b8e565b929450849261227c565b60019550612274565b634e487b7160e01b875260118852602487fd5b61232c6123246003547f000000000000000000000000000000000000000000000000000000000000057861364b565b87549061364b565b9061222c565b8251631c7c248b60e11b81528790fd5b8151631c7c248b60e11b81528690fd5b601187634e487b7160e01b6000525260246000fd5b51631c7c248b60e11b81528490fd5b505034610474578160031936011261047457602091549051908152f35b9050346104bf5760203660031901126104bf576020928291358152600a845220549051908152f35b9050346104bf5760203660031901126104bf578160209363ffffffff92358152601885522054169051908152f35b919050346104bf57826003193601126104bf57479183808080867f0000000000000000000000002134a21d0285471bad660ab9097fc90051e06f905af13d156124b1573d61243681613391565b9061244385519283613352565b81528560203d92013e5b1561248057507f7f221332ee403570bf4d61630b58189ea566ff1635269001e9df6a890f413dd89160209151908152a180f35b6020606492519162461bcd60e51b8352820152600c60248201526b1cddd9595c0819985a5b195960a21b6044820152fd5b61244d565b9050346104bf5760203660031901126104bf57359161ffff831683036104bc575061080b602092613713565b50503461047457816003193601126104745760209061080b61366b565b505034610474578160031936011261047457517f0000000000000000000000002134a21d0285471bad660ab9097fc90051e06f906001600160a01b03168152602090f35b505034610474578160031936011261047457517f0000000000000000000000004830894d0cdcfb985c39764693207c408aaa37776001600160a01b03168152602090f35b9050346104bf57826003193601126104bf5760209250549051908152f35b5050346104745781600319360112610474576020906001600160401b03600554169051908152f35b8284346104bc5760203660031901126104bc57506125ed60209235613608565b9051908152f35b836126076126013661324e565b91613498565b80f35b505034610474578160031936011261047457602090516001600160401b037f000000000000000000000000000000000000000000000000000000006a7ee8a7168152f35b50503461047457816003193601126104745760209051620186a08152f35b5050346104745781600319360112610474576020906003549051908152f35b919050346104bf5760203660031901126104bf5781356126af600160215414613425565b6002602155323303612825576001600160a01b039233846126cf846138d2565b16036128175781855260126020526001600160401b03936126f4858588205416613409565b42101561280857908591601b5416803b156104bf57604483928651948593849263079cc67960e41b84523390840152683635c9adc5dea0000060248401525af180156127fe576127ea575b5061279d6020948361ffff958661275e6127594288613418565b614e5b565b16966127698861346c565b9086855260138a52838520911661ffff198254161790554216916012885220816001600160401b031982541617905561347f565b825161ffff851681526001600160401b0391909116602082015233907f69e0d03f3a4f6d0b4bf2d69d84eda12c8226274aa74b0583c13326c8f3c1ac5d90604090a3600160215551908152f35b6127f485916132bd565b610ca6573861273f565b83513d87823e3d90fd5b508251638451c69360e01b8152fd5b825163a3e39f5760e01b8152fd5b5051635d04968b60e11b8152fd5b5050346104745780600319360112610474576020918161285161323e565b9160ff61285c6131fb565b9316815260098552209060018060a01b0316600052825280600020549051908152f35b8383816003193601126104745761289a600160215414613425565b6002602155323303612a16576605543df729c0003403612a07576001600160401b037f000000000000000000000000000000000000000000000000000000006a7ee8a71642106129f8576128ec6147f5565b9160ff831680156129e857600181036129d55761290a60015461345d565b6001555b80825260209460098652838320336000528652600384600020612931815461345d565b809155116129c75750808252600b855282822061294e815461345d565b80915561298561295e845461345d565b958487809655858152600a8952868460ff60f81b8460f81b1617912055611b8e8533614890565b8351918252858201527f21cb505071216f47f8ff16668574670cdd2ea8b5ecd86b3cdc3ff3807523b75d833392a36129bc82614b28565b600160215551908152f35b8351639404868360e01b8152fd5b6129e060035461345d565b60035561290e565b82516352df9fe560e01b81528590fd5b516316851a3760e11b81529050fd5b5163f7760f2560e01b81529050fd5b51635d04968b60e11b81529050fd5b505034610474578160031936011261047457601d5490516001600160a01b039091168152602090f35b50503461047457816003193601126104745760209051683635c9adc5dea000008152f35b83833461047457806003193601126104745782356024908135936001600160401b039485811161047457612aa99036908801613211565b9092612ab4816139f2565b612abd826138d2565b6001600160a01b0391903390831603612f3e57612adb3685886133ac565b9586518015908115612f33575b50612f2357855b8751811015612c4857602080828a01015160f81c60308110159182612c3c575b8215612c1e575b8215612c00575b8215612bf6575b508115612beb575b8115612be1575b8115612bd6575b8115612bcb575b8115612bc0575b8115612bb5575b8115612baa575b8115612b9f575b8115612b94575b8115612b89575b5015612b7957600101612aef565b8951634d5849d360e01b81528c90fd5b603f9150148d612b6b565b602f81149150612b64565b602e81149150612b5d565b602d81149150612b56565b602c81149150612b4f565b602b81149150612b48565b602781149150612b41565b602581149150612b3a565b8a81149150612b33565b602181149150612b2c565b811491508e612b24565b9150606181101580612c13575b91612b1d565b50607a811115612c0d565b9150604181101580612c31575b91612b16565b50605a811115612c2b565b603a8211159250612b0f565b50908892918a8c8a878a5260209560178752612c6884898d2054166133e3565b4210612f01578360155416601e8101809111612f11574210612f01578a90601b541680612ea2575b50508242166001600160401b03199080826015541617601555898c5260178852888c209182541617905560188652868a209182549263ffffffff9384811694808614612e90576001809601169063ffffffff1916179055888b5260168752878b20938a11612e7f57505090879291612d088254613283565b601f8111612e2d575b50898a601f8611600114612da0579285807ff31bf1ab732aebfe5a61dd266fa419a379a39b6eed20f62de690a7a1f49e87529a99979461ffff979460609a9793612d95575b501b906000198560031b1c19161790555b818780519889973389528801528601528585013782880184018990521695601f01601f19168101030190a380f35b85013592508f612d56565b50828b52868b2090601f1986168c5b818110612e1557509261ffff95926060989592887ff31bf1ab732aebfe5a61dd266fa419a379a39b6eed20f62de690a7a1f49e87529c9b999610612dfb575b505083811b019055612d67565b840135600019600387901b60f8161c191690558d80612dee565b8287013584558c975092840192918901918901612daf565b9091809394508a52858a20601f8a0160051c810191878b10612e75575b90601f8b96959493920160051c01905b818110612e675750612d11565b600081558a95508201612e5a565b9091508190612e4a565b634e487b7160e01b8b526041905289fd5b634e487b7160e01b8e5260118452848efd5b803b1561047457819060448a518094819363079cc67960e41b83523389840152680d8d726b7177a80000888401525af18015612ef757612ee4575b8a90612c90565b612ef0909a919a6132bd565b988a612edd565b88513d8d823e3d90fd5b8751631df75acf60e01b81528390fd5b634e487b7160e01b8c5260118452828cfd5b8851634d5849d360e01b81528b90fd5b608c9150118c612ae8565b8751637ddf3f6d60e01b81528a90fd5b50503461047457816003193601126104745760209051608c8152f35b9050816003193601126104bf57612f7f6131e5565b9060243592620186a0841161302b5750828452673ec412a9852d173d60c11b3317601c52602084208301830180546001600160a01b0393841693169182156130205790839183331433151715612ffc575b50600101557f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258480a480f35b9091508286526030600c20541561301557908391612fd0565b634b6e7f188652601cfd5b63ceea21b68652601cfd5b5163a4420a9560e01b8152fd5b8284346104bc5760203660031901126104bc578235808252673ec412a9852d173d60c11b601c526020822081010190815460601b1561308a57600182015483516001600160a01b039091168152602090f35b63ceea21b6849152601cfd5b50503461047457816003193601126104745780516104b8916130b7826132e6565b600d82526c4d41524b455420415243414e4160981b6020830152519182916020835260208301906131c0565b9050346104bf5760203660031901126104bf578160209361ffff92358152601385522054169051908152f35b505034610474578160031936011261047457517f00000000000000000000000024f87cbba5784d6474a71332cc2f813e56a76c286001600160a01b03168152602090f35b8491346104bf5760203660031901126104bf57356001600160e01b0319811681036104bf576020925060e01c635b5e139f8114906301ffc9a76380ac58cd82149114171715158152f35b60005b8381106131b05750506000910152565b81810151838201526020016131a0565b906020916131d98151809281855285808601910161319d565b601f01601f1916010190565b600435906001600160a01b038216820361196057565b602435906001600160a01b038216820361196057565b9181601f84011215611960578235916001600160401b038311611960576020838186019501011161196057565b6004359060ff8216820361196057565b6060906003190112611960576001600160a01b0390600435828116810361196057916024359081168103611960579060443590565b90600182811c921680156132b3575b602083101461329d57565b634e487b7160e01b600052602260045260246000fd5b91607f1691613292565b6001600160401b0381116132d057604052565b634e487b7160e01b600052604160045260246000fd5b604081019081106001600160401b038211176132d057604052565b602081019081106001600160401b038211176132d057604052565b606081019081106001600160401b038211176132d057604052565b608081019081106001600160401b038211176132d057604052565b90601f801991011681019081106001600160401b038211176132d057604052565b34611960576000366003190112611960576020604051620151808152f35b6001600160401b0381116132d057601f01601f191660200190565b9291926133b882613391565b916133c66040519384613352565b829481845281830111611960578281602093846000960137010152565b906201518082018092116133f357565b634e487b7160e01b600052601160045260246000fd5b9061546082018092116133f357565b919082018092116133f357565b1561342c57565b60405162461bcd60e51b81526020600482015260096024820152681c99595b9d1c985b9d60ba1b6044820152606490fd5b60001981146133f35760010190565b90600161ffff809316019182116133f357565b906154606001600160401b03809316019182116133f357565b90620186a08311806135d6575b806135c4575b6135b2576000838152673ec412a9852d173d60c11b3317601c908152602082208501850180546001600160a01b0394851695851694811680861481021561359e575084845283826001018054803314883314171561357c575b613574575b505085851818905580600c20600019815401905583825280600c2060018154019163ffffffff83168602156135605750557fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9080a4565b60049067ea553b3401336cea871560021b52fd5b558338613509565b9091506030600c20541561359257908591613504565b600485634b6e7f188852fd5b8367ceea21b6a11481006004921560021b52fd5b60405163a4420a9560e01b8152600490fd5b506001600160a01b03811615156134ab565b506001600160a01b03821615156134a5565b81156135f2570690565b634e487b7160e01b600052601260045260246000fd5b6101919060405160208101916a415243414e413a5441504560a81b8352602b820152602b81526136378161331c565b519020066103209081018091116133f35790565b919082039182116133f357565b818102929181159184041417156133f357565b61012c4204600c811061370c57600a1981018181116133f3575b6000918291905b808211156136be57505080151591826136a457505090565b8091925060011b90808204600214901517156133f3571190565b90918215613702576136cf9061345d565b916136d9816147c6565b6136ed575b6136e79061345d565b9061368c565b926136fa6136e79161345d565b9390506136de565b916136e79061345d565b6001613685565b61012c420490600382106138325761372c60ff91614f50565b16600181146137e257600281146137c35760038114613781576004146137525750600090565b61375b81613608565b9060001981019081116133f35761377190613608565b90609682018092116133f3571190565b5061378b81613608565b60001982019182116133f3576137a2600892613608565b90818111156137ba57906137b59161364b565b111590565b6137b59161364b565b5060001981018181116133f3576137dc61377191613608565b91613608565b506137ec816147c6565b9081613815575b816137fc575090565b6001198101915081116133f357613812906147c6565b90565b905060001981018181116133f35761382c906147c6565b906137f3565b5050600090565b61384860035460045490613418565b7f0000000000000000000000000000000000000000000000000000000000000578111590565b600090808252600860205261ffff604083205416806138cc5750600a602052604082205480151590816138b4575b506138a5575090565b6138af9150615024565b905090565b60f81c835250600d602052604082205415153861389c565b91505090565b6000818152673ec412a9852d173d60c11b601c5260209020810101546001600160a01b031690811561390057565b63ceea21b66000526004601cfd5b61ffff90811660001901919082116133f357565b805482101561393a5760005260206000200190600090565b634e487b7160e01b600052603260045260246000fd5b9092919261395d81613391565b9161396b6040519384613352565b82948284528282011161196057602061398593019061319d565b565b602081830312611960578051906001600160401b03821161196057019080601f8301121561196057815161381292602001613950565b6139cc60015460025490613418565b7f0000000000000000000000000000000000000000000000000000000000000226111590565b80600052600760205261ffff6040600020541680613a3d575080600052600a602052604060002054613a3057604051630af0c5df60e01b8152600490fd5b613a3990615024565b5090565b613812915061390e565b60405190613a54826132e6565b6002825261494960f01b6020830152565b60405190613a72826132e6565b60018252604960f81b6020830152565b6000818152673ec412a9852d173d60c11b601c5260209020810181015460601b1561479c57620186a081116145405780600052600a60205260406000205480151580614527575b61432f5750613ad781615429565b91613ae182615490565b9061ffff613aed61366b565b1515941691613afb836154c0565b613b048561481e565b95613b0e856153ea565b95613c6260a2613b3d7f00000000000000000000000000000000000000000000000000000000000000196153ea565b98613b4986858a6155ef565b6040519a8b92600080516020615bfe83398151915260208501526332911d1160e11b9d8e6040860152613b8681518092602060448901910161319d565b84016201016960ed1b6044820152613ba882518093602060478501910161319d565b01602f60f81b6047820152613bc782518093602060488501910161319d565b017f222c226465736372697074696f6e223a224d41524b455420415243414e412e2060488201527f546865206465636b20746861742072656164732074686520636861696e20697460688201526b081b1a5d995cc81bdb8b888b841b6088820152613c3c82518093602060948501910161319d565b016d2261747472696275746573223a5b60901b609482015203608281018a520188613352565b613c6b8161481e565b9161ffff821696613c7b886153ea565b99601689101561432157613c8d613a65565b935b600260ff613c9c8361595d565b16036142c25750613cd1604051613cb2816132e6565b600c81526b4d616a6f7220417263616e6160a01b6020820152926153ea565b60405163352f1d6360e11b81526004810197909752916000876024817f00000000000000000000000056da2e83fa9b7c0165f2bc931299230399326c876001600160a01b03165afa9384156142b657613f529861011798600096614299575b5015150361427257604051613d44816132e6565b6007815266155c1c9a59da1d60ca1b6020820152945b6040519c8d977f7b2274726169745f74797065223a2243617264222c2276616c7565223a22000060208a0152613d9a815180926020603e8d01910161319d565b88017f227d2c7b2274726169745f74797065223a22417263616e756d222c2276616c75603e82015284605e820152613ddc82518093602060628501910161319d565b017f227d2c7b2274726169745f74797065223a22416374222c2276616c7565223a226062820152613e1782518093602060828501910161319d565b017f227d2c7b2274726169745f74797065223a2254696572222c2276616c7565223a6082820152601160f91b60a2820152613e5c82518093602060a38501910161319d565b01907f227d2c7b2274726169745f74797065223a2245646974696f6e222c2276616c7560a383015260c3820152613e9d82518093602060c78501910161319d565b017f227d2c7b2274726169745f74797065223a225072696e74696e67222c2276616c60c7820152643ab2911d1160d91b60e7820152613ee682518093602060ec8501910161319d565b01907f227d2c7b2274726169745f74797065223a224f7269656e746174696f6e222c2260ec830152673b30b63ab2911d1160c11b61010c83015261011491613f37825180936020868501910161319d565b019062089f4b60ea1b908201520360f7810187520185613352565b80600052601a60205260ff6040600020541660001461425c57604051613f778161331c565b602881527f7b2274726169745f74797065223a22466f7265746f6c64222c2276616c7565226020820152670e8896595cc89f4b60c21b6040820152915b600052600f602052613fd36001600160401b03604060002054166153ea565b816000526018602052613ff063ffffffff604060002054166153ea565b91806000526016602052614008604060002054613283565b6141515750916138129391614108606f602095604051614027816132e6565b6004815263227d5d7d60e01b888201525b60405194859289614052818601998a81519384920161319d565b84017f7b2274726169745f74797065223a224d616e69666573746174696f6e73222c228b820152673b30b63ab2911d1160c11b604082015261409d825180938d60488501910161319d565b017f227d2c7b2274726169745f74797065223a2250726f70686563696573222c227660488201526630b63ab2911d1160c91b60688201526140e6825180938c888501910161319d565b016140f9825180938b878501910161319d565b0103604f810184520182613352565b6141456040519684614123899651809289808a01910161319d565b85016141378251809389808501910161319d565b01915180938684019061319d565b01038084520182613352565b60005260166020526040600020604051907f227d2c7b2274726169745f74797065223a224c6173742050726f70686563792260208301526916113b30b63ab2911d1160b11b604083015260009080546141a981613283565b9160019180831690811561423357506001146141f7575b505050606f60209593836141f260046138129a98966141089663227d5d7d60e01b815203601b19810184520182613352565b614038565b600090815260208120929350915b83831061421d575050508101604a01606f83836141c0565b818160209254604a868901015201920191614205565b60ff1916604a8088019190915284151590940286019093019350606f92508591508490506141c0565b60405161426881613301565b6000815291613fb4565b60405161427e816132e6565b600881526714995d995c9cd95960c21b602082015294613d5a565b6142af9196503d806000833e61162b8183613352565b9438613d30565b6040513d6000823e3d90fd5b60ff6142cf60019261595d565b16036142fd57613cd16040516142e4816132e6565b600581526410dbdd5c9d60da1b60208201525b926153ea565b613cd160405161430c816132e6565b600381526205069760ec1b60208201526142f7565b614329613a47565b93613c8f565b6101626138129160016143627f227d2c7b2274726169745f74797065223a22537461747573222c2276616c7565956153ea565b9160f81c0361451a57614373613a65565b604051948592600080516020615bfe83398151915260208501526c65223a22415243414e554d202360981b60408501526143b7815180926020604d8801910161319d565b8301917f202d20554e52455645414c4544222c226465736372697074696f6e223a224120604d8401527f626c696e64207072696e74206f66204d41524b455420415243414e412e205468606d8401527f6520636172642069732061737369676e6564207768656e207468652061637420608d8401527f73656c6c73206f7574202d206e6f7468696e6720746f20736e6970652c206e6f60ad8401527f7468696e6720746f206772696e642e222c2261747472696275746573223a5b0060cd8401527f7b2274726169745f74797065223a224b696e64222c2276616c7565223a22417260ec8401527f63616e756d227d2c7b2274726169745f74797065223a22416374222c2276616c61010c840152643ab2911d1160d91b61012c840152610131926144eb825180936020878501910161319d565b019182015270223a22554e52455645414c4544227d5d7d60781b61015182015203610142810184520182613352565b614522613a47565b614373565b508060f81c600052600d60205260406000205415613ac9565b60008181526020601281526040916145636001600160401b038483205416613409565b42108482526013835261457c61ffff858420541661390e565b946201869f198101908111614788579161012293916145a76145a161381297956153ea565b9761481e565b9150156147655782516145b9816132e6565b60048152634c49564560e01b83820152905b8351968794600080516020615bfe833981519152858701526c65223a2252454144494e47202360981b9086015261460b8151809286604d8901910161319d565b84017f222c226465736372697074696f6e223a2241206d61726b65742072656164696e604d8201527f672e20497420736d6f756c646572732073697820686f7572733b2066756c6669606d8201527f6c6c206974206f72206974206c61707365732e222c2261747472696275746573608d82015262223a5b60e81b60ad8201527f7b2274726169745f74797065223a224b696e64222c2276616c7565223a22526560b08201527f6164696e67227d2c7b2274726169745f74797065223a22466f726574656c6c7360d08201526a1116113b30b63ab2911d1160a91b60f08201526146fe825180938660fb8501910161319d565b017f227d2c7b2274726169745f74797065223a22537461747573222c2276616c756560fb82015262111d1160e91b61011b82015261474861011e938351938491868501910161319d565b019063227d5d7d60e01b9082015203610102810184520182613352565b8251614770816132e6565b600681526513105414d15160d21b83820152906145cb565b634e487b7160e01b83526011600452602483fd5b60405163677510db60e11b8152600490fd5b90816020910312611960575180151581036119605790565b80156147ef576147d581613608565b9060001981019081116133f3576147eb90613608565b1090565b50600090565b6147fd6139bd565b156148195761480a613839565b1561481457600090565b600290565b600190565b604051637e76d2f360e11b815261ffff9190911660048201526000816024817f00000000000000000000000056da2e83fa9b7c0165f2bc931299230399326c876001600160a01b03165afa9081156142b65760009161487b575090565b61381291503d806000833e61162b8183613352565b620186a0821180614955575b80614943575b6135b2576000828152673ec412a9852d173d60c11b601c52602081208301830180546001600160a01b039390931692606081901b6149365783179055818152601c600c2060018154019063ffffffff821684021561492157557fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8180a4565b67ea553b3401336cea841560021b526004601cfd5b63c991cbb183526004601cfd5b506001600160a01b03811615156148a2565b50600061489c565b600e54604051602081019182523360601b60408201524260548201524360748201526074815260a081018181106001600160401b038211176132d057604052519020600e55565b60ff8116906000828152602090600d825260409081812054614b215760018514938415614b14576149d36139bd565b15614b0c57600e54908254845191868301936a105490d053904e94d1505360aa1b8552602b84015260ff60f81b9060f81b16604b83015242604c83015243606c830152608c820152608c815260c081018181106001600160401b03821117614af85784525190207fc13f396b637978262bd099cacd133a033adee9b77b4b2f2a6520f0aff86aadf99460609491939192908415614aef575b15614ac657614ab77f00000000000000000000000000000000000000000000000000000000000002265b888352600d85528584842055600b8552838084205493600c875220549061364b565b928251948552840152820152a2565b614ab77f0000000000000000000000000000000000000000000000000000000000000578614a95565b60019450614a6b565b634e487b7160e01b84526041600452602484fd5b505050505050565b614b1c613839565b6149d3565b5050505050565b601d546001600160a01b03908116918215614e5657604080519163316602fd60e21b8352660110d9316ec00093600495858786015260209460249686828981865afa60009281614e27575b50614b8357505050505050505050565b878991614b9993612710948591601e5490613658565b04948987601b54168a51948580926370a0823160e01b9889835230908301525afa928315614e1c578c8c938c938c8a94600098614ddf575b50918594939160449351978895869463c710efb960e01b865285015230908401525af19182614db6575b5050614c0d5750505050505050505050565b878a8a87601b5416948a519586938492835230908301525afa8015614dab57600090614d7c575b614c3e925061364b565b918210614d4f57611d4c808302908382041483151715614d3b5790614c659104809261364b565b92600052848052614c7b84600020918254613418565b905581614c8a57505050505050565b601b54601c54845163a9059cbb60e01b81529083166001600160a01b03168882019081526020810194909452928592849216908290600090829060400103925af1908115614d3057600091614d13575b5015614ce7578080614b0c565b5162461bcd60e51b815292830152600a90820152691d985d5b1d08199d5b9960b21b6044820152606490fd5b614d2a9150833d8511610a09576109fb8183613352565b38614cda565b82513d6000823e3d90fd5b8760118a634e487b7160e01b600052526000fd5b845162461bcd60e51b815280890187905260088189015267736c69707061676560c01b6044820152606490fd5b508782813d8311614da4575b614d928183613352565b8101031261196057614c3e9151614c34565b503d614d88565b87513d6000823e3d90fd5b813d8311614dd8575b614dc98183613352565b81010312611960578838614bfb565b503d614dbf565b95945050955093505081813d8311614e15575b614dfc8183613352565b810103126119605751918a918a9187918e918c85614bd1565b503d614df2565b89513d6000823e3d90fd5b9092508781813d8311614e4f575b614e3f8183613352565b8101031261196057519138614b73565b503d614e35565b505050565b614e636147f5565b60ff81161591908215614f3f5750600091604e5b60408051936020946020810191671193d4915511531360c21b835260288201523360601b604882015242605c820152605c8152614eb381613337565b5190209383159260005b818110614ece575050505050505090565b614eea614ee483614edf848b613418565b6135e8565b89613418565b8686614f0a575b614efe5750600101614ebd565b97505050505050505090565b50806000526006845284600020547f000000000000000000000000000000000000000000000000000000000000001911614ef1565b614f489061598b565b929092614e77565b61ffff1660138114614f8957600d8114614f8357600c8114614f7d57601414614f7857600090565b600490565b50600390565b50600290565b50600190565b9060a46020939460405195869463150b7a028652338787015260018060a01b03166040860152606085015260808085015280518091818060a0880152615010575b505001906000601c8401915af115615001575b5163757a42ff60e11b01614ff357565b63d1a57ed66000526004601cfd5b3d15614fe3573d6000823e3d90fd5b818760c08801920160045afa508038614fd0565b6000908152602090600a825260409081812054938460f81c90818352600d8552838320549586156152dd576001600160f81b03166000198101959086116152c957600196879684880361529c576150ab7f0000000000000000000000000000000000000000000000000000000000000226989695985b898752600c8552888720549061364b565b916150e4838951868101906c415243414e413a5045524d3a4160981b825284602d820152602d81526150dc8161331c565b5190206135e8565b995b61522b575b91614edf88999a6151336151389461512d8561513e988d9e518b8101916c20a921a0a7209d2822a9269d2160991b8352602d820152602d81526150dc8161331c565b92613658565b613418565b9761598b565b9790938098857f0000000000000000000000000000000000000000000000000000000000000019985b61517d575b895163959f34ed60e01b8152600490fd5b61518a82829b9a9b613418565b8710156152235786835260069a8b86526151a78a8520548c61364b565b9b6151b28d83613418565b86106151d157506151c7899a9b9c8a92613418565b9701969a98615167565b93959994969a50969a50505061ffff968984525281205493840180941161520f57509161520261520892859461364b565b90613418565b1692169190565b634e487b7160e01b81526011600452602490fd5b88995061516c565b959794958983805b6152795750891461527057888a01809a1161525c57615253838a9b6135e8565b999695986150e6565b634e487b7160e01b87526011600452602487fd5b979594976150eb565b8061528d919c9a989796959b999c926135e8565b809b989a94959697999b615233565b6150ab7f00000000000000000000000000000000000000000000000000000000000005789896959861509a565b634e487b7160e01b84526011600452602484fd5b845163959f34ed60e01b8152600490fd5b6152f7816138d2565b620186a0821190816153d7575b50806153cf575b6135b2576000818152673ec412a9852d173d60c11b601c52602081208201820180546001600160a01b038116919082156153c25782908185528483600101805480156001171561539b575b615393575b5050189055601c600c2080546000190190557fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8280a4565b55843861535b565b91509192506030600c2054156153b5578492918691615356565b634b6e7f1886526004601cfd5b63ceea21b684526004601cfd5b50600061530b565b6001600160a01b03161515905038615304565b90604051608081019260a0820160405260008452925b6000190192600a90603082820601855304928361540057809350608091030191601f1901918252565b9081600052600760205261ffff80604060002054168061547457505090600a60205260406000205461546757604051630af0c5df60e01b8152600490fd5b61547090615024565b9091565b61547d9061390e565b9260005260086020526040600020541690565b61ffff16601681106154b25760151981019081116133f357600e600291041090565b6001901b623a058a16151590565b6001811015806155e4575b6147ef576009811015806155d9575b614f8957600c811015806155ce575b614f8357600f811015806155c3575b614f7d576012811015806155b8575b6155b2576014811015806155a7575b6155a157601681101580615596575b61559057601781101580615585575b61557f57601881101580615574575b61556e5760198110159081615562575b5061555d57600080fd5b600990565b60199150111538615553565b50600890565b506018811115615543565b50600790565b506017811115615534565b50600690565b506016811115615525565b50600590565b506015811115615516565b50600490565b506013811115615507565b5060118111156154f8565b50600e8111156154e9565b50600b8111156154da565b5060088111156154cb565b9190917f00000000000000000000000024f87cbba5784d6474a71332cc2f813e56a76c2891823b156159465760408051630ff2643f60e21b815261ffff861660048201819052919591946000949092916001600160a01b039186826024817f00000000000000000000000056da2e83fa9b7c0165f2bc931299230399326c8787165afa91821561593c578792615920575b5061569361568d8561481e565b9461595d565b908752602097601a895260ff96878b8a205416906156af61366b565b15615918576001915b8c519360c08501966001600160401b039786811089821117615904578f908f90928e938352885287019a8b528601961686526060850191151582528a60808601931683528a60a08601941684528d519063e83564fd60e01b825260048201528b816024818b7f0000000000000000000000004830894d0cdcfb985c39764693207c408aaa3777165afa9687156158fa57928b928f8f9b999795938f9d9b9997948e9961588b575b50509081859392519e8f9d8e9c8d9b848d631375e06160e01b81526004015260448d0161578b916131c0565b998c600319818d030190602401525160c08b5260c08b016157ab916131c0565b9051918a8203908b01526157be916131c0565b9851169087015251151560608601525116608084015251169060a001520392165afa918215615880579261584a61580c604594620d8d0b60ea1b9794876138129892615865575b50506159a5565b9183519687947f22696d616765223a22646174613a696d6167652f7376672b786d6c3b6261736583870152850152825192839160438601910161319d565b810161088b60f21b6043820152036025810184520182613352565b61587992503d8091833e61162b8183613352565b3880615805565b8451903d90823e3d90fd5b9498509450509396989a50939698503d808d843e6158a98184613352565b8201918d818403126158f65780519182116158f6570181601f820112156158f257938a8d9997948f96946158e88f9d9b999695868e8698519101613950565b979091923861575f565b8b80fd5b8c80fd5b8e513d8e823e3d90fd5b634e487b7160e01b8e52604160045260248efd5b6002916156b8565b6159359192503d8089833e61162b8183613352565b9038615680565b89513d89823e3d90fd5b5050505060405161595681613301565b6000815290565b61ffff1660168110614f835760151981019081116133f357600a600e9091061061598657600190565b600090565b60ff1660011461599d57601690603890565b600090601690565b908151918215615bee576003808406916159bf838661364b565b926002958681018091116133f3576003900480871b94906001600160fe1b038116036133f357602096878601928387116133f3576159fc84613391565b95615a17604095615a0f8751998a613352565b808952613391565b878b019590601f1901368737879a815196615a318861331c565b8288527f4142434445464748494a4b4c4d4e4f505152535455565758595a616263646566828901527f6768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2f8389015282519261202084018481106001600160401b038211176132d057819594939552612000808452368685013760005b818110615ba0575050839096818a01990101925b838910615b5f575050505080600114615b2957600214615ae2575b5050505052565b6001600393603c603d9651838160001a91811a918181881c86010151885360308360041c9160041b16178401015184870153841b1601015190820153015338808080615adb565b50603d93906001600394603087945160001a8381861c84010151875360041b160101516001840153820153015338808080615adb565b90916004899782959a5184611ffe81818460f31c16890101519260e71c168701015160f01c63ffff000060e092831c1617901b815201960197929190615ac0565b85818b9795969701015160001a8160071b860160005b848110615bcc5750505060010194939294615aac565b808d60218983600195861b870193888386015301015160001a91015301615bb6565b5090506040516159568161330156fe646174613a6170706c69636174696f6e2f6a736f6e3b757466382c7b226e616da2646970667358221220b09adbe7c9d3857f6e537a64ccd4ec3f479d1735708fb1ec023511ef3c91615364736f6c63430008180033
| Token | Symbol | Balance | Price | Value |
|---|---|---|---|---|
| MARKET ARCANA TAPE (TAPE) | TAPE | 31,745.168420 | — | — |
| Type | Age | Block | Details |
|---|---|---|---|
| no cross-chain L1↔L2 transactions for this address | |||
| Transaction Hash | Method | Block | Age | From | To | Type | Item | ||
|---|---|---|---|---|---|---|---|---|---|
| no NFT transfers for this address yet | |||||||||
| Txn Hash | Age | Event | Topics / Data |
|---|---|---|---|
| 0xc33059…3e10ff | 7 secs agoMon, 17 Aug 2026 22:32:42 UTC | Transfer | [0] 0x000000000000…713d303d [1] 0x000000000000…06d732f2 [2] 0x000000000000…00000078 |
| 0xc33059…3e10ff | 7 secs agoMon, 17 Aug 2026 22:32:42 UTC | Transfer | [0] 0x000000000000…713d303d [1] 0x000000000000…06d732f2 [2] 0x000000000000…00000022 |
| 0xc33059…3e10ff | 7 secs agoMon, 17 Aug 2026 22:32:42 UTC | ApprovalForAll | [0] 0x000000000000…713d303d [1] 0x000000000000…0000c300 data: 0x000000000000000000…00000001 |
| 0x60c57e…0e85c8 | 20 mins agoMon, 17 Aug 2026 22:12:23 UTC | Transfer | [0] 0x000000000000…14384ab1 [1] 0x000000000000…713d303d [2] 0x000000000000…00000022 |
| 0xb2c301…756cc8 | 20 mins agoMon, 17 Aug 2026 22:12:16 UTC | ApprovalForAll | [0] 0x000000000000…14384ab1 [1] 0x000000000000…0000c300 data: 0x000000000000000000…00000001 |
| 0xaf40dd…4e8a3d | 42 mins agoMon, 17 Aug 2026 21:50:09 UTC | 0x06144b…d6ba | [0] 0x000000000000…00000014 [1] 0x000000000000…005ae446 data: 0x000000000000000000…00000025 |
| 0xa00507…62fd07 | 47 mins agoMon, 17 Aug 2026 21:45:07 UTC | 0x06144b…d6ba | [0] 0x000000000000…0000000d [1] 0x000000000000…005ae445 data: 0x000000000000000000…00000026 |
| 0xdf1248…3e68a6 | 49 mins agoMon, 17 Aug 2026 21:43:08 UTC | ApprovalForAll | [0] 0x000000000000…8e30b438 [1] 0x000000000000…0000c300 data: 0x000000000000000000…00000000 |
| 0x4dffe5…30fdb8 | 52 mins agoMon, 17 Aug 2026 21:40:10 UTC | 0x06144b…d6ba | [0] 0x000000000000…00000014 [1] 0x000000000000…005ae444 data: 0x000000000000000000…00000024 |
| 0x6c5281…870fa4 | 57 mins agoMon, 17 Aug 2026 21:35:08 UTC | 0x06144b…d6ba | [0] 0x000000000000…0000000d [1] 0x000000000000…005ae443 data: 0x000000000000000000…00000025 |
| 0x74e122…4f988e | 1 hr agoMon, 17 Aug 2026 21:30:07 UTC | 0x06144b…d6ba | [0] 0x000000000000…00000014 [1] 0x000000000000…005ae442 data: 0x000000000000000000…00000023 |
| 0x7435a6…a96c9a | 1 hr agoMon, 17 Aug 2026 21:25:51 UTC | 0x2ca2b6…4c35 | [0] 0x000000000000…24e27dd7 [1] 0x000000000000…0001c5e0 data: 0x000000000000000000…6a83d0bf |
| 0x7435a6…a96c9a | 1 hr agoMon, 17 Aug 2026 21:25:51 UTC | Transfer | [0] 0x000000000000…00000000 [1] 0x000000000000…24e27dd7 [2] 0x000000000000…0001c5e0 |
| 0x1b46e4…5da5e7 | 1 hr agoMon, 17 Aug 2026 21:25:10 UTC | 0x06144b…d6ba | [0] 0x000000000000…0000000d [1] 0x000000000000…005ae441 data: 0x000000000000000000…00000024 |
| 0x3fbb81…bef8d2 | 1 hr agoMon, 17 Aug 2026 21:00:08 UTC | 0x06144b…d6ba | [0] 0x000000000000…0000000c [1] 0x000000000000…005ae43c data: 0x000000000000000000…00000009 |
| 0x513c47…d2c23f | 1 hr agoMon, 17 Aug 2026 20:55:09 UTC | 0x06144b…d6ba | [0] 0x000000000000…00000014 [1] 0x000000000000…005ae43b data: 0x000000000000000000…00000022 |
| 0x157122…bcc1ac | 1 hr agoMon, 17 Aug 2026 20:50:10 UTC | 0x06144b…d6ba | [0] 0x000000000000…0000000d [1] 0x000000000000…005ae43a data: 0x000000000000000000…00000023 |
| 0x521c6b…b8fc11 | 1 hr agoMon, 17 Aug 2026 20:45:30 UTC | 0x2ca2b6…4c35 | [0] 0x000000000000…50405e63 [1] 0x000000000000…0001c5df data: 0x000000000000000000…6a83c74a |
| 0x521c6b…b8fc11 | 1 hr agoMon, 17 Aug 2026 20:45:30 UTC | Transfer | [0] 0x000000000000…00000000 [1] 0x000000000000…50405e63 [2] 0x000000000000…0001c5df |
| 0x521c6b…b8fc11 | 1 hr agoMon, 17 Aug 2026 20:45:30 UTC | 0x458413…fa35 | [0] 0x000000000000…0001bf1b |
| 0x521c6b…b8fc11 | 1 hr agoMon, 17 Aug 2026 20:45:30 UTC | Transfer | [0] 0x000000000000…50405e63 [1] 0x000000000000…00000000 [2] 0x000000000000…0001bf1b |
| 0x89481b…bf9098 | 1 hr agoMon, 17 Aug 2026 20:39:48 UTC | ApprovalForAll | [0] 0x000000000000…414e7b71 [1] 0x000000000000…0000c300 data: 0x000000000000000000…00000001 |
| 0x99d286…692df3 | 2 hrs agoMon, 17 Aug 2026 20:32:01 UTC | 0x2ca2b6…4c35 | [0] 0x000000000000…f05aefcf [1] 0x000000000000…0001c5de data: 0x000000000000000000…6a83c421 |
| 0x99d286…692df3 | 2 hrs agoMon, 17 Aug 2026 20:32:01 UTC | Transfer | [0] 0x000000000000…00000000 [1] 0x000000000000…f05aefcf [2] 0x000000000000…0001c5de |
| 0xb362fc…35329b | 2 hrs agoMon, 17 Aug 2026 20:23:10 UTC | 0x458413…fa35 | [0] 0x000000000000…0001a4b1 |
| Transaction Hash | Method | Block | Age | From | To | Amount | Token | ||
|---|---|---|---|---|---|---|---|---|---|
| 0xa9a7493d…a1aca0 | Transfer | 38,916,747 | 7 hrs agoMon, 17 Aug 2026 14:42:09 UTC | 0x7748…642b | OUT | 0x0cc3…9aad | 218.921930 TAPE | MARKET ARCANA TAPE (TAPE) | |
| 0xffc13b98…5a7c9b | Transfer | 38,882,093 | 8 hrs agoMon, 17 Aug 2026 13:44:23 UTC | 0x7748…642b | OUT | 0xbf65…ac8b | 218.905715 TAPE | MARKET ARCANA TAPE (TAPE) | |
| 0xb330cc31…8ef270 | Transfer | 38,860,095 | 9 hrs agoMon, 17 Aug 2026 13:07:44 UTC | 0x7748…642b | OUT | 0x9edb…4238 | 72.973976 TAPE | MARKET ARCANA TAPE (TAPE) | |
| 0xb330cc31…8ef270 | Transfer | 38,860,095 | 9 hrs agoMon, 17 Aug 2026 13:07:44 UTC | 0x8366…0951 | IN | 0x7748…642b | 291.895907 TAPE | MARKET ARCANA TAPE (TAPE) | |
| 0x004b0b89…e38092 | Transfer | 38,832,223 | 10 hrs agoMon, 17 Aug 2026 12:21:07 UTC | 0x7748…642b | OUT | 0x9edb…4238 | 72.967665 TAPE | MARKET ARCANA TAPE (TAPE) | |
| 0x004b0b89…e38092 | Transfer | 38,832,223 | 10 hrs agoMon, 17 Aug 2026 12:21:07 UTC | 0x8366…0951 | IN | 0x7748…642b | 291.870661 TAPE | MARKET ARCANA TAPE (TAPE) | |
| 0x26e7aa0c…ca5472 | Transfer | 38,814,244 | 10 hrs agoMon, 17 Aug 2026 11:51:02 UTC | 0x7748…642b | OUT | 0x4307…a7cc | 218.948298 TAPE | MARKET ARCANA TAPE (TAPE) | |
| 0xb656718c…e0bc4d | Transfer | 38,812,037 | 10 hrs agoMon, 17 Aug 2026 11:47:21 UTC | 0x7748…642b | OUT | 0x4bdb…5009 | 218.938924 TAPE | MARKET ARCANA TAPE (TAPE) | |
| 0x7c97e925…c32e6d | Transfer | 38,811,900 | 10 hrs agoMon, 17 Aug 2026 11:47:08 UTC | 0x7748…642b | OUT | 0x4bdb…5009 | 218.941405 TAPE | MARKET ARCANA TAPE (TAPE) | |
| 0x98df61e7…8691ce | Transfer | 38,803,132 | 11 hrs agoMon, 17 Aug 2026 11:32:27 UTC | 0x7748…642b | OUT | 0x9edb…4238 | 72.967533 TAPE | MARKET ARCANA TAPE (TAPE) | |
| 0x98df61e7…8691ce | Transfer | 38,803,132 | 11 hrs agoMon, 17 Aug 2026 11:32:27 UTC | 0x8366…0951 | IN | 0x7748…642b | 291.870135 TAPE | MARKET ARCANA TAPE (TAPE) | |
| 0x7d03e457…e2ad7a | Transfer | 38,802,472 | 11 hrs agoMon, 17 Aug 2026 11:31:21 UTC | 0x7748…642b | OUT | 0x51ff…7026 | 218.902716 TAPE | MARKET ARCANA TAPE (TAPE) | |
| 0xb0f29617…2fcab5 | Transfer | 38,802,311 | 11 hrs agoMon, 17 Aug 2026 11:31:05 UTC | 0x7748…642b | OUT | 0x9edb…4238 | 72.967572 TAPE | MARKET ARCANA TAPE (TAPE) | |
| 0xb0f29617…2fcab5 | Transfer | 38,802,311 | 11 hrs agoMon, 17 Aug 2026 11:31:05 UTC | 0x8366…0951 | IN | 0x7748…642b | 291.870288 TAPE | MARKET ARCANA TAPE (TAPE) | |
| 0x208de811…5c9dba | Transfer | 38,800,871 | 11 hrs agoMon, 17 Aug 2026 11:28:40 UTC | 0x7748…642b | OUT | 0x9edb…4238 | 72.967610 TAPE | MARKET ARCANA TAPE (TAPE) | |
| 0x208de811…5c9dba | Transfer | 38,800,871 | 11 hrs agoMon, 17 Aug 2026 11:28:40 UTC | 0x8366…0951 | IN | 0x7748…642b | 291.870442 TAPE | MARKET ARCANA TAPE (TAPE) | |
| 0x2484142a…8ae0ba | Transfer | 38,798,463 | 11 hrs agoMon, 17 Aug 2026 11:24:38 UTC | 0x7748…642b | OUT | 0x84b6…61d2 | 218.902946 TAPE | MARKET ARCANA TAPE (TAPE) | |
| 0xd8073c28…edb0ac | Transfer | 38,797,959 | 11 hrs agoMon, 17 Aug 2026 11:23:48 UTC | 0x7748…642b | OUT | 0x9edb…4238 | 72.967648 TAPE | MARKET ARCANA TAPE (TAPE) | |
| 0xd8073c28…edb0ac | Transfer | 38,797,959 | 11 hrs agoMon, 17 Aug 2026 11:23:48 UTC | 0x8366…0951 | IN | 0x7748…642b | 291.870595 TAPE | MARKET ARCANA TAPE (TAPE) | |
| 0x07a39af3…91e80c | Transfer | 38,796,908 | 11 hrs agoMon, 17 Aug 2026 11:22:03 UTC | 0x7748…642b | OUT | 0x0a3e…cc5d | 218.903022 TAPE | MARKET ARCANA TAPE (TAPE) | |
| 0xb00f7c3e…7fbb2e | Transfer | 38,796,611 | 11 hrs agoMon, 17 Aug 2026 11:21:33 UTC | 0x7748…642b | OUT | 0x9edb…4238 | 72.967674 TAPE | MARKET ARCANA TAPE (TAPE) | |
| 0xb00f7c3e…7fbb2e | Transfer | 38,796,611 | 11 hrs agoMon, 17 Aug 2026 11:21:33 UTC | 0x8366…0951 | IN | 0x7748…642b | 291.870696 TAPE | MARKET ARCANA TAPE (TAPE) | |
| 0x261cb0fc…81acb8 | Transfer | 38,786,802 | 11 hrs agoMon, 17 Aug 2026 11:05:08 UTC | 0x7748…642b | OUT | 0x9b48…a86a | 218.902927 TAPE | MARKET ARCANA TAPE (TAPE) | |
| 0xf21c42e1…9b7f26 | Transfer | 38,786,677 | 11 hrs agoMon, 17 Aug 2026 11:04:55 UTC | 0x7748…642b | OUT | 0x9b48…a86a | 218.903042 TAPE | MARKET ARCANA TAPE (TAPE) | |
| 0x50583b9f…9583b2 | Transfer | 38,786,255 | 11 hrs agoMon, 17 Aug 2026 11:04:13 UTC | 0x7748…642b | OUT | 0x9edb…4238 | 72.967642 TAPE | MARKET ARCANA TAPE (TAPE) |
| Block | Age | Parent Transaction Hash | Type | Method | From | To | Value | |
|---|---|---|---|---|---|---|---|---|
| 37,859,048 | 1 day agoSun, 16 Aug 2026 09:13:08 UTC | 0x7e31d8…7553ae | CALL | fulfill | 0x7748…642b | OUT | 0x147d…4ace | 0.0003 ETH |
| 37,854,510 | 1 day agoSun, 16 Aug 2026 09:05:32 UTC | 0xf3c001…bdcc1d | CALL | Mint | 0x7748…642b | OUT | 0x147d…4ace | 0.0003 ETH |
| 37,041,320 | 2 days agoSat, 15 Aug 2026 10:25:54 UTC | 0x5fffbc…59d455 | CALL | sweep | 0x7748…642b | OUT | 0x2134…6f90 | 0.0012 ETH |
| 36,580,569 | 3 days agoFri, 14 Aug 2026 21:35:50 UTC | 0x43491d…259472 | CALL | Mint | 0x7748…642b | OUT | 0x147d…4ace | 0.0003 ETH |
| 36,243,349 | 3 days agoFri, 14 Aug 2026 12:12:48 UTC | 0xfa49af…08699d | CALL | sweep | 0x7748…642b | OUT | 0x2134…6f90 | 0.0012 ETH |
| 36,184,300 | 3 days agoFri, 14 Aug 2026 10:34:06 UTC | 0xb155d6…940272 | CALL | fulfill | 0x7748…642b | OUT | 0x147d…4ace | 0.0003 ETH |
| 36,167,929 | 3 days agoFri, 14 Aug 2026 10:06:43 UTC | 0xcd301f…321760 | CREATE | 0x6101a060 | 0x7748…642b | OUT | 0x56da…6c87 | 0 ETH |
| Transaction Hash | Method ? | Block | Age | From | To | Amount | Txn Fee ? | ||
|---|---|---|---|---|---|---|---|---|---|
| 0xb2c301…756cc8 | Set Approval For All | 39,186,110 | 20 mins agoMon, 17 Aug 2026 22:12:16 UTC | 0x7c04…4ab1 | IN | MARKET ARCANA | $0.000 ETH | 0.00000094 | |
| 0xaf40dd…4e8a3d | witness | 39,172,892 | 42 mins agoMon, 17 Aug 2026 21:50:09 UTC | 0x4c43…5789 | IN | MARKET ARCANA | $0.000 ETH | 0.00000119 | |
| 0xa00507…62fd07 | witness | 39,169,872 | 47 mins agoMon, 17 Aug 2026 21:45:07 UTC | 0x4c43…5789 | IN | MARKET ARCANA | $0.000 ETH | 0.00000152 | |
| 0xdf1248…3e68a6 | Set Approval For All | 39,168,691 | 49 mins agoMon, 17 Aug 2026 21:43:08 UTC | 0x7947…b438 | IN | MARKET ARCANA | $0.000 ETH | 0.00000050 | |
| 0x4dffe5…30fdb8 | witness | 39,166,914 | 52 mins agoMon, 17 Aug 2026 21:40:10 UTC | 0xcfc1…5071 | IN | MARKET ARCANA | $0.000 ETH | 0.00000118 | |
| 0x6c5281…870fa4 | witness | 39,163,894 | 57 mins agoMon, 17 Aug 2026 21:35:08 UTC | 0xcfc1…5071 | IN | MARKET ARCANA | $0.000 ETH | 0.00000155 | |
| 0x74e122…4f988e | witness | 39,160,896 | 1 hr agoMon, 17 Aug 2026 21:30:07 UTC | 0x4c43…5789 | IN | MARKET ARCANA | $0.000 ETH | 0.00000119 | |
| 0x7435a6…a96c9a | drawReading | 39,158,346 | 1 hr agoMon, 17 Aug 2026 21:25:51 UTC | 0x9e60…7dd7 | IN | MARKET ARCANA | $0.000 ETH | 0.00000281 | |
| 0x1b46e4…5da5e7 | witness | 39,157,937 | 1 hr agoMon, 17 Aug 2026 21:25:10 UTC | 0x4c43…5789 | IN | MARKET ARCANA | $0.000 ETH | 0.00000152 | |
| 0x3fbb81…bef8d2 | witness | 39,142,966 | 1 hr agoMon, 17 Aug 2026 21:00:08 UTC | 0x4c43…5789 | IN | MARKET ARCANA | $0.000 ETH | 0.00000118 | |
| 0x513c47…d2c23f | witness | 39,139,983 | 1 hr agoMon, 17 Aug 2026 20:55:09 UTC | 0x4c43…5789 | IN | MARKET ARCANA | $0.000 ETH | 0.00000118 | |
| 0x157122…bcc1ac | witness | 39,137,001 | 1 hr agoMon, 17 Aug 2026 20:50:10 UTC | 0x4c43…5789 | IN | MARKET ARCANA | $0.000 ETH | 0.00000154 | |
| 0x521c6b…b8fc11 | drawReading | 39,134,209 | 1 hr agoMon, 17 Aug 2026 20:45:30 UTC | 0xbbb3…5e63 | IN | MARKET ARCANA | $0.000 ETH | 0.00000259 | |
| 0x89481b…bf9098 | Set Approval For All | 39,130,802 | 1 hr agoMon, 17 Aug 2026 20:39:48 UTC | 0x3377…7b71 | IN | MARKET ARCANA | $0.000 ETH | 0.00000095 | |
| 0x99d286…692df3 | drawReading | 39,126,126 | 2 hrs agoMon, 17 Aug 2026 20:32:01 UTC | 0xb57f…efcf | IN | MARKET ARCANA | $0.000 ETH | 0.00000281 | |
| 0xb362fc…35329b | purgeExpired | 39,120,836 | 2 hrs agoMon, 17 Aug 2026 20:23:10 UTC | 0x9c28…a85b | IN | MARKET ARCANA | $0.000 ETH | 0.00005993 | |
| 0x938e80…ca08bc | purgeExpired | 39,120,795 | 2 hrs agoMon, 17 Aug 2026 20:23:06 UTC | 0x9c28…a85b | IN | MARKET ARCANA | $0.000 ETH | 0.00006023 | |
| 0x58b0a1…19b683 | purgeExpired | 39,120,756 | 2 hrs agoMon, 17 Aug 2026 20:23:02 UTC | 0x9c28…a85b | IN | MARKET ARCANA | $0.000 ETH | 0.00005992 | |
| 0x49483b…080ba0 | purgeExpired | 39,120,716 | 2 hrs agoMon, 17 Aug 2026 20:22:58 UTC | 0x9c28…a85b | IN | MARKET ARCANA | $0.000 ETH | 0.00006005 | |
| 0x7eaa01…a78ebe | purgeExpired | 39,120,674 | 2 hrs agoMon, 17 Aug 2026 20:22:54 UTC | 0x9c28…a85b | IN | MARKET ARCANA | $0.000 ETH | 0.00005982 | |
| 0x4ca022…31a921 | purgeExpired | 39,120,635 | 2 hrs agoMon, 17 Aug 2026 20:22:50 UTC | 0x9c28…a85b | IN | MARKET ARCANA | $0.000 ETH | 0.00006022 | |
| 0xad74eb…bc9ffa | purgeExpired | 39,120,596 | 2 hrs agoMon, 17 Aug 2026 20:22:46 UTC | 0x9c28…a85b | IN | MARKET ARCANA | $0.000 ETH | 0.00005989 | |
| 0x9c1c06…ac9e63 | purgeExpired | 39,120,554 | 2 hrs agoMon, 17 Aug 2026 20:22:42 UTC | 0x9c28…a85b | IN | MARKET ARCANA | $0.000 ETH | 0.00006078 | |
| 0x01798b…b76f90 | purgeExpired | 39,120,515 | 2 hrs agoMon, 17 Aug 2026 20:22:38 UTC | 0x9c28…a85b | IN | MARKET ARCANA | $0.000 ETH | 0.00005982 | |
| 0xc5d370…59f4d3 | purgeExpired | 39,120,473 | 2 hrs agoMon, 17 Aug 2026 20:22:33 UTC | 0x9c28…a85b | IN | MARKET ARCANA | $0.000 ETH | 0.00006163 |