{
  "address": "irLMgHrfRDbDjoHUc38HnwsfCFVM7zk117eHXUatCqk",
  "metadata": {
    "name": "irl",
    "version": "0.1.0",
    "spec": "0.1.0",
    "description": "IRL Pad: a coin that can only be born where it happens (host device presence proof + presale pool -> pump.fun)"
  },
  "instructions": [
    {
      "name": "accept_admin",
      "discriminator": [
        112,
        42,
        45,
        90,
        116,
        181,
        13,
        170
      ],
      "accounts": [
        {
          "name": "proposed",
          "signer": true
        },
        {
          "name": "config",
          "writable": true,
          "pda": {
            "seeds": [
              {
                "kind": "const",
                "value": [
                  99,
                  111,
                  110,
                  102,
                  105,
                  103
                ]
              }
            ]
          }
        }
      ],
      "args": []
    },
    {
      "name": "add_key",
      "docs": [
        "Adds a device key in the first free slot (a new phone / a rotated key)."
      ],
      "discriminator": [
        251,
        19,
        183,
        109,
        168,
        179,
        18,
        195
      ],
      "accounts": [
        {
          "name": "authority",
          "writable": true,
          "signer": true,
          "relations": [
            "host"
          ]
        },
        {
          "name": "host",
          "writable": true,
          "pda": {
            "seeds": [
              {
                "kind": "const",
                "value": [
                  104,
                  111,
                  115,
                  116
                ]
              },
              {
                "kind": "account",
                "path": "authority"
              }
            ]
          }
        },
        {
          "name": "system_program",
          "address": "11111111111111111111111111111111"
        }
      ],
      "args": [
        {
          "name": "key",
          "type": {
            "defined": {
              "name": "DeviceKey"
            }
          }
        }
      ]
    },
    {
      "name": "birth",
      "docs": [
        "Anyone, after the end and inside the launch window, alone in its transaction (only ComputeBudget /",
        "System next to it: nobody can put a trade of the new coin behind the pool atomically).",
        "Pool below min_raise -> Failed (every commit refunds in full). Otherwise, in ONE instruction:",
        "deploy = min(total - rent_reserve, birth_cap); fee PDA floor; launch fee = deploy * launch_fee_bps",
        "moved to the fee PDA and booked as treasury_pending (paid by `collect_treasury`: a birth never",
        "depends on the treasury account, audit I-L-2); pump.fun create_v2 (final name / ticker / uri from",
        "open_spot, creator = fee PDA, payer = vault, mint = caller's keypair); the vault's token account; ONE",
        "buy of deploy - fee capped at the fresh curve (H-2). Everything the vault still holds above its floor",
        "afterwards (the part of the pool above birth_cap, what the curve did not take, the unused rent",
        "reserve) is sol_back, refunded pro rata.",
        "Books: fee + offered + rents + sol_back == total (+ donations). Vault after == floor + sol_back.",
        "Either outcome settles the spot: the host's open_spots goes down by one.",
        "remaining_accounts = pump create_v2 accounts (16) + pump buy accounts (>= 16), user = vault."
      ],
      "discriminator": [
        88,
        97,
        158,
        96,
        238,
        116,
        190,
        103
      ],
      "accounts": [
        {
          "name": "caller",
          "writable": true,
          "signer": true
        },
        {
          "name": "spot",
          "writable": true,
          "pda": {
            "seeds": [
              {
                "kind": "const",
                "value": [
                  115,
                  112,
                  111,
                  116
                ]
              },
              {
                "kind": "account",
                "path": "spot.id",
                "account": "Spot"
              }
            ]
          }
        },
        {
          "name": "host",
          "docs": [
            "The spot's host (open_spots - 1)."
          ],
          "writable": true
        },
        {
          "name": "vault",
          "writable": true,
          "pda": {
            "seeds": [
              {
                "kind": "const",
                "value": [
                  118,
                  97,
                  117,
                  108,
                  116
                ]
              },
              {
                "kind": "account",
                "path": "spot"
              }
            ]
          }
        },
        {
          "name": "fees",
          "writable": true,
          "pda": {
            "seeds": [
              {
                "kind": "const",
                "value": [
                  102,
                  101,
                  101,
                  115
                ]
              },
              {
                "kind": "account",
                "path": "spot"
              }
            ]
          }
        },
        {
          "name": "vault_ata",
          "writable": true
        },
        {
          "name": "instructions",
          "address": "Sysvar1nstructions1111111111111111111111111"
        },
        {
          "name": "token_program"
        },
        {
          "name": "ata_program",
          "address": "ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL"
        },
        {
          "name": "system_program",
          "address": "11111111111111111111111111111111"
        }
      ],
      "args": []
    },
    {
      "name": "check_in",
      "docs": [
        "Checks the signer in at the spot. The instruction right before this one must be the Ed25519 (or, for a",
        "P-256 device key, the secp256r1) precompile verifying ONE signature by host.keys[key_idx] over exactly",
        "`presence_message(spot, bucket, tap ? signer : zeros)`; every offset is checked by sigcheck::verify_prev.",
        "`bucket` must be floor(now / 15) or the one before; doors are [starts_at, ends_at). Caps: the spot's",
        "capacity, at most qr_capacity passes by room QR, one Pass per wallet, per bucket qr_per_bucket room-QR",
        "check-ins and capacity taps.",
        "Not blocked by pause."
      ],
      "discriminator": [
        209,
        253,
        4,
        217,
        250,
        241,
        207,
        50
      ],
      "accounts": [
        {
          "name": "wallet",
          "writable": true,
          "signer": true
        },
        {
          "name": "spot",
          "writable": true,
          "pda": {
            "seeds": [
              {
                "kind": "const",
                "value": [
                  115,
                  112,
                  111,
                  116
                ]
              },
              {
                "kind": "account",
                "path": "spot.id",
                "account": "Spot"
              }
            ]
          }
        },
        {
          "name": "host"
        },
        {
          "name": "pass",
          "writable": true,
          "pda": {
            "seeds": [
              {
                "kind": "const",
                "value": [
                  112,
                  97,
                  115,
                  115
                ]
              },
              {
                "kind": "account",
                "path": "spot"
              },
              {
                "kind": "account",
                "path": "wallet"
              }
            ]
          }
        },
        {
          "name": "instructions",
          "address": "Sysvar1nstructions1111111111111111111111111"
        },
        {
          "name": "system_program",
          "address": "11111111111111111111111111111111"
        }
      ],
      "args": [
        {
          "name": "bucket",
          "type": "u64"
        },
        {
          "name": "key_idx",
          "type": "u8"
        },
        {
          "name": "tap",
          "type": "bool"
        }
      ]
    },
    {
      "name": "claim_creator_fees",
      "docs": [
        "Pays the spot creator's booked share (anyone can push it; L-4 as above)."
      ],
      "discriminator": [
        0,
        23,
        125,
        234,
        156,
        118,
        134,
        89
      ],
      "accounts": [
        {
          "name": "caller",
          "signer": true
        },
        {
          "name": "spot",
          "writable": true,
          "pda": {
            "seeds": [
              {
                "kind": "const",
                "value": [
                  115,
                  112,
                  111,
                  116
                ]
              },
              {
                "kind": "account",
                "path": "spot.id",
                "account": "Spot"
              }
            ]
          }
        },
        {
          "name": "creator",
          "writable": true,
          "relations": [
            "spot"
          ]
        },
        {
          "name": "fees",
          "writable": true,
          "pda": {
            "seeds": [
              {
                "kind": "const",
                "value": [
                  102,
                  101,
                  101,
                  115
                ]
              },
              {
                "kind": "account",
                "path": "spot"
              }
            ]
          }
        },
        {
          "name": "system_program",
          "address": "11111111111111111111111111111111"
        }
      ],
      "args": []
    },
    {
      "name": "claim_fees",
      "docs": [
        "Pays an attendee its share of the creator fees so far: committed * acc / ACC - fee_debt. Earning rule",
        "(audit I-L-1): a pass earns while at least half of its allocation is STAKED in the vault (never",
        "unstaked; claim_tokens only ever releases the free half), which the program holds itself: there is",
        "no balance snapshot to borrow a bag for. Anyone can push it. Below the rent floor of an empty wallet:",
        "BelowRentFloor, stays accrued (L-4)."
      ],
      "discriminator": [
        82,
        251,
        233,
        156,
        12,
        52,
        184,
        202
      ],
      "accounts": [
        {
          "name": "caller",
          "signer": true
        },
        {
          "name": "spot",
          "writable": true,
          "pda": {
            "seeds": [
              {
                "kind": "const",
                "value": [
                  115,
                  112,
                  111,
                  116
                ]
              },
              {
                "kind": "account",
                "path": "spot.id",
                "account": "Spot"
              }
            ]
          },
          "relations": [
            "pass"
          ]
        },
        {
          "name": "pass",
          "writable": true
        },
        {
          "name": "wallet",
          "writable": true,
          "relations": [
            "pass"
          ]
        },
        {
          "name": "fees",
          "writable": true,
          "pda": {
            "seeds": [
              {
                "kind": "const",
                "value": [
                  102,
                  101,
                  101,
                  115
                ]
              },
              {
                "kind": "account",
                "path": "spot"
              }
            ]
          }
        },
        {
          "name": "system_program",
          "address": "11111111111111111111111111111111"
        }
      ],
      "args": []
    },
    {
      "name": "claim_host_fees",
      "docs": [
        "Pays the host's booked share to the host authority (anyone can push it; L-4 as above)."
      ],
      "discriminator": [
        9,
        56,
        164,
        203,
        216,
        152,
        160,
        116
      ],
      "accounts": [
        {
          "name": "caller",
          "signer": true
        },
        {
          "name": "spot",
          "writable": true,
          "pda": {
            "seeds": [
              {
                "kind": "const",
                "value": [
                  115,
                  112,
                  111,
                  116
                ]
              },
              {
                "kind": "account",
                "path": "spot.id",
                "account": "Spot"
              }
            ]
          }
        },
        {
          "name": "host_authority",
          "writable": true,
          "relations": [
            "spot"
          ]
        },
        {
          "name": "fees",
          "writable": true,
          "pda": {
            "seeds": [
              {
                "kind": "const",
                "value": [
                  102,
                  101,
                  101,
                  115
                ]
              },
              {
                "kind": "account",
                "path": "spot"
              }
            ]
          }
        },
        {
          "name": "system_program",
          "address": "11111111111111111111111111111111"
        }
      ],
      "args": []
    },
    {
      "name": "claim_tokens",
      "docs": [
        "Sends a committer the FREE half of its tokens and its share of sol_back. allocation = tokens_bought *",
        "committed / total (one price for everybody); free = floor(allocation / 2) goes to the wallet, the",
        "rest (ceil(allocation / 2)) stays STAKED in the vault and earns the attendee fee leg until the",
        "wallet `unstake`s it (audit I-L-1: the fee-earning half sits in program custody, so no borrowed",
        "bag and no snapshot can fake it). sol_back share = sol_back * committed / total. Anyone can send it",
        "(the payer funds the wallet's token account). A SOL share below the rent floor of an empty wallet is",
        "deferred (L-4): send it again later.",
        "Invariants: tokens_claimed <= tokens_bought, sol_back_paid <= sol_back (floor dust stays in the vault)."
      ],
      "discriminator": [
        108,
        216,
        210,
        231,
        0,
        212,
        42,
        64
      ],
      "accounts": [
        {
          "name": "payer",
          "writable": true,
          "signer": true
        },
        {
          "name": "spot",
          "writable": true,
          "pda": {
            "seeds": [
              {
                "kind": "const",
                "value": [
                  115,
                  112,
                  111,
                  116
                ]
              },
              {
                "kind": "account",
                "path": "spot.id",
                "account": "Spot"
              }
            ]
          },
          "relations": [
            "pass"
          ]
        },
        {
          "name": "pass",
          "writable": true
        },
        {
          "name": "wallet",
          "writable": true,
          "relations": [
            "pass"
          ]
        },
        {
          "name": "vault",
          "writable": true,
          "pda": {
            "seeds": [
              {
                "kind": "const",
                "value": [
                  118,
                  97,
                  117,
                  108,
                  116
                ]
              },
              {
                "kind": "account",
                "path": "spot"
              }
            ]
          }
        },
        {
          "name": "mint"
        },
        {
          "name": "vault_ata",
          "writable": true
        },
        {
          "name": "wallet_ata",
          "writable": true
        },
        {
          "name": "token_program"
        },
        {
          "name": "ata_program",
          "address": "ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL"
        },
        {
          "name": "system_program",
          "address": "11111111111111111111111111111111"
        }
      ],
      "args": []
    },
    {
      "name": "collect_fees",
      "docs": [
        "pump.fun collect_creator_fee into the spot's fee PDA. remaining = [fees, creator_vault, system, event_authority, pump]."
      ],
      "discriminator": [
        164,
        152,
        207,
        99,
        30,
        186,
        19,
        182
      ],
      "accounts": [
        {
          "name": "spot",
          "writable": true,
          "pda": {
            "seeds": [
              {
                "kind": "const",
                "value": [
                  115,
                  112,
                  111,
                  116
                ]
              },
              {
                "kind": "account",
                "path": "spot.id",
                "account": "Spot"
              }
            ]
          }
        },
        {
          "name": "fees",
          "writable": true,
          "pda": {
            "seeds": [
              {
                "kind": "const",
                "value": [
                  102,
                  101,
                  101,
                  115
                ]
              },
              {
                "kind": "account",
                "path": "spot"
              }
            ]
          }
        }
      ],
      "args": []
    },
    {
      "name": "collect_treasury",
      "docs": [
        "Pays the treasury's booked share (the launch fee booked at birth + the treasury fee leg + floor dust)",
        "to config.treasury (anyone can push it; L-4 as above)."
      ],
      "discriminator": [
        48,
        255,
        226,
        214,
        221,
        81,
        222,
        65
      ],
      "accounts": [
        {
          "name": "caller",
          "signer": true
        },
        {
          "name": "config",
          "pda": {
            "seeds": [
              {
                "kind": "const",
                "value": [
                  99,
                  111,
                  110,
                  102,
                  105,
                  103
                ]
              }
            ]
          }
        },
        {
          "name": "spot",
          "writable": true,
          "pda": {
            "seeds": [
              {
                "kind": "const",
                "value": [
                  115,
                  112,
                  111,
                  116
                ]
              },
              {
                "kind": "account",
                "path": "spot.id",
                "account": "Spot"
              }
            ]
          }
        },
        {
          "name": "treasury",
          "writable": true
        },
        {
          "name": "fees",
          "writable": true,
          "pda": {
            "seeds": [
              {
                "kind": "const",
                "value": [
                  102,
                  101,
                  101,
                  115
                ]
              },
              {
                "kind": "account",
                "path": "spot"
              }
            ]
          }
        },
        {
          "name": "system_program",
          "address": "11111111111111111111111111111111"
        }
      ],
      "args": []
    },
    {
      "name": "commit",
      "docs": [
        "A Pass holder commits SOL to the pool while doors are open: the wallet's cumulative commit must stay",
        "within [min_commit, cap] (cap = max_commit, or sgt_max_commit with a linked Seeker). Not blocked by pause."
      ],
      "discriminator": [
        223,
        140,
        142,
        165,
        229,
        208,
        156,
        74
      ],
      "accounts": [
        {
          "name": "wallet",
          "writable": true,
          "signer": true
        },
        {
          "name": "spot",
          "writable": true,
          "pda": {
            "seeds": [
              {
                "kind": "const",
                "value": [
                  115,
                  112,
                  111,
                  116
                ]
              },
              {
                "kind": "account",
                "path": "spot.id",
                "account": "Spot"
              }
            ]
          }
        },
        {
          "name": "pass",
          "writable": true,
          "pda": {
            "seeds": [
              {
                "kind": "const",
                "value": [
                  112,
                  97,
                  115,
                  115
                ]
              },
              {
                "kind": "account",
                "path": "spot"
              },
              {
                "kind": "account",
                "path": "wallet"
              }
            ]
          }
        },
        {
          "name": "vault",
          "writable": true,
          "pda": {
            "seeds": [
              {
                "kind": "const",
                "value": [
                  118,
                  97,
                  117,
                  108,
                  116
                ]
              },
              {
                "kind": "account",
                "path": "spot"
              }
            ]
          }
        },
        {
          "name": "system_program",
          "address": "11111111111111111111111111111111"
        }
      ],
      "args": [
        {
          "name": "amount",
          "type": "u64"
        }
      ]
    },
    {
      "name": "expire",
      "docs": [
        "Open past ends_at + launch_window (birth never ran, e.g. pump refused): anyone fails it, every commit",
        "refunds in full. Settles the spot for the host (open_spots - 1)."
      ],
      "discriminator": [
        243,
        83,
        205,
        58,
        57,
        201,
        247,
        146
      ],
      "accounts": [
        {
          "name": "caller",
          "signer": true
        },
        {
          "name": "spot",
          "writable": true,
          "pda": {
            "seeds": [
              {
                "kind": "const",
                "value": [
                  115,
                  112,
                  111,
                  116
                ]
              },
              {
                "kind": "account",
                "path": "spot.id",
                "account": "Spot"
              }
            ]
          }
        },
        {
          "name": "host",
          "docs": [
            "The spot's host (open_spots - 1)."
          ],
          "writable": true
        }
      ],
      "args": []
    },
    {
      "name": "init_config",
      "docs": [
        "`treasury` (an account, audit I-L-2) must not be the default key or an executable account."
      ],
      "discriminator": [
        23,
        235,
        115,
        232,
        168,
        96,
        1,
        231
      ],
      "accounts": [
        {
          "name": "admin",
          "writable": true,
          "signer": true
        },
        {
          "name": "config",
          "writable": true,
          "pda": {
            "seeds": [
              {
                "kind": "const",
                "value": [
                  99,
                  111,
                  110,
                  102,
                  105,
                  103
                ]
              }
            ]
          }
        },
        {
          "name": "treasury"
        },
        {
          "name": "system_program",
          "address": "11111111111111111111111111111111"
        }
      ],
      "args": [
        {
          "name": "params",
          "type": {
            "defined": {
              "name": "Params"
            }
          }
        }
      ]
    },
    {
      "name": "link_sgt",
      "docs": [
        "A checked-in wallet that holds a Solana Mobile Seeker Genesis Token (Token-2022, amount 1, owned by the",
        "signer, mint is a TokenGroupMember of the SGT group) links it to its pass: its commit cap rises to",
        "sgt_max_commit. One SGT counts once per spot (`[\"sgt\", spot, sgt_mint]`), even if it moves wallets."
      ],
      "discriminator": [
        235,
        168,
        24,
        254,
        104,
        160,
        86,
        32
      ],
      "accounts": [
        {
          "name": "wallet",
          "writable": true,
          "signer": true
        },
        {
          "name": "spot",
          "writable": true,
          "pda": {
            "seeds": [
              {
                "kind": "const",
                "value": [
                  115,
                  112,
                  111,
                  116
                ]
              },
              {
                "kind": "account",
                "path": "spot.id",
                "account": "Spot"
              }
            ]
          }
        },
        {
          "name": "pass",
          "writable": true,
          "pda": {
            "seeds": [
              {
                "kind": "const",
                "value": [
                  112,
                  97,
                  115,
                  115
                ]
              },
              {
                "kind": "account",
                "path": "spot"
              },
              {
                "kind": "account",
                "path": "wallet"
              }
            ]
          }
        },
        {
          "name": "sgt_mint"
        },
        {
          "name": "sgt_account"
        },
        {
          "name": "sgt_use",
          "writable": true,
          "pda": {
            "seeds": [
              {
                "kind": "const",
                "value": [
                  115,
                  103,
                  116
                ]
              },
              {
                "kind": "account",
                "path": "spot"
              },
              {
                "kind": "account",
                "path": "sgt_mint"
              }
            ]
          }
        },
        {
          "name": "system_program",
          "address": "11111111111111111111111111111111"
        }
      ],
      "args": []
    },
    {
      "name": "open_spot",
      "docs": [
        "Opens spot #next_id. Two signers: the creator (pays rents, gets the creator fee share; may be the host",
        "itself) and the host authority (its bond answers for the spot, its device keys sign presence). The coin's",
        "final name, ticker and IPFS picture are fixed here. Blocked by pause."
      ],
      "discriminator": [
        65,
        63,
        226,
        48,
        205,
        57,
        202,
        231
      ],
      "accounts": [
        {
          "name": "creator",
          "writable": true,
          "signer": true
        },
        {
          "name": "host_authority",
          "signer": true
        },
        {
          "name": "host",
          "writable": true,
          "pda": {
            "seeds": [
              {
                "kind": "const",
                "value": [
                  104,
                  111,
                  115,
                  116
                ]
              },
              {
                "kind": "account",
                "path": "host_authority"
              }
            ]
          }
        },
        {
          "name": "config",
          "writable": true,
          "pda": {
            "seeds": [
              {
                "kind": "const",
                "value": [
                  99,
                  111,
                  110,
                  102,
                  105,
                  103
                ]
              }
            ]
          }
        },
        {
          "name": "spot",
          "writable": true,
          "pda": {
            "seeds": [
              {
                "kind": "const",
                "value": [
                  115,
                  112,
                  111,
                  116
                ]
              },
              {
                "kind": "account",
                "path": "config.next_id",
                "account": "Config"
              }
            ]
          }
        },
        {
          "name": "vault",
          "writable": true,
          "pda": {
            "seeds": [
              {
                "kind": "const",
                "value": [
                  118,
                  97,
                  117,
                  108,
                  116
                ]
              },
              {
                "kind": "account",
                "path": "spot"
              }
            ]
          }
        },
        {
          "name": "fees",
          "pda": {
            "seeds": [
              {
                "kind": "const",
                "value": [
                  102,
                  101,
                  101,
                  115
                ]
              },
              {
                "kind": "account",
                "path": "spot"
              }
            ]
          }
        },
        {
          "name": "system_program",
          "address": "11111111111111111111111111111111"
        }
      ],
      "args": [
        {
          "name": "args",
          "type": {
            "defined": {
              "name": "OpenSpotArgs"
            }
          }
        }
      ]
    },
    {
      "name": "propose_admin",
      "docs": [
        "Two-step admin handover (audit I-I-2): the admin proposes (Pubkey::default() cancels), the proposed",
        "key accepts by signing `accept_admin`. A typo can no longer lose the role."
      ],
      "discriminator": [
        121,
        214,
        199,
        212,
        87,
        39,
        117,
        234
      ],
      "accounts": [
        {
          "name": "admin",
          "signer": true,
          "relations": [
            "config"
          ]
        },
        {
          "name": "config",
          "writable": true,
          "pda": {
            "seeds": [
              {
                "kind": "const",
                "value": [
                  99,
                  111,
                  110,
                  102,
                  105,
                  103
                ]
              }
            ]
          }
        }
      ],
      "args": [
        {
          "name": "proposed",
          "type": "pubkey"
        }
      ]
    },
    {
      "name": "refund",
      "docs": [
        "Returns a pass's whole commit to its wallet (Failed spot). Anyone can send it.",
        "Invariant: vault == floor + refundable (+ donations) until the last refund."
      ],
      "discriminator": [
        2,
        96,
        183,
        251,
        63,
        208,
        46,
        46
      ],
      "accounts": [
        {
          "name": "caller",
          "signer": true
        },
        {
          "name": "spot",
          "writable": true,
          "pda": {
            "seeds": [
              {
                "kind": "const",
                "value": [
                  115,
                  112,
                  111,
                  116
                ]
              },
              {
                "kind": "account",
                "path": "spot.id",
                "account": "Spot"
              }
            ]
          },
          "relations": [
            "pass"
          ]
        },
        {
          "name": "pass",
          "writable": true
        },
        {
          "name": "wallet",
          "writable": true,
          "relations": [
            "pass"
          ]
        },
        {
          "name": "vault",
          "writable": true,
          "pda": {
            "seeds": [
              {
                "kind": "const",
                "value": [
                  118,
                  97,
                  117,
                  108,
                  116
                ]
              },
              {
                "kind": "account",
                "path": "spot"
              }
            ]
          }
        },
        {
          "name": "system_program",
          "address": "11111111111111111111111111111111"
        }
      ],
      "args": []
    },
    {
      "name": "register_host",
      "docs": [
        "Registers the signer as a host with 1-4 device keys and a bond (>= config host_bond). The bond sits on the",
        "Host account itself (lamports above its rent). Blocked by pause."
      ],
      "discriminator": [
        254,
        147,
        61,
        58,
        253,
        111,
        94,
        200
      ],
      "accounts": [
        {
          "name": "authority",
          "writable": true,
          "signer": true
        },
        {
          "name": "config",
          "pda": {
            "seeds": [
              {
                "kind": "const",
                "value": [
                  99,
                  111,
                  110,
                  102,
                  105,
                  103
                ]
              }
            ]
          }
        },
        {
          "name": "host",
          "writable": true,
          "pda": {
            "seeds": [
              {
                "kind": "const",
                "value": [
                  104,
                  111,
                  115,
                  116
                ]
              },
              {
                "kind": "account",
                "path": "authority"
              }
            ]
          }
        },
        {
          "name": "system_program",
          "address": "11111111111111111111111111111111"
        }
      ],
      "args": [
        {
          "name": "keys",
          "type": {
            "vec": {
              "defined": {
                "name": "DeviceKey"
              }
            }
          }
        },
        {
          "name": "bond",
          "type": "u64"
        }
      ]
    },
    {
      "name": "revoke_key",
      "docs": [
        "Revokes a device key at once (lost or stolen phone): no check-in signed by it is accepted from now on."
      ],
      "discriminator": [
        162,
        44,
        180,
        118,
        135,
        106,
        115,
        232
      ],
      "accounts": [
        {
          "name": "authority",
          "writable": true,
          "signer": true,
          "relations": [
            "host"
          ]
        },
        {
          "name": "host",
          "writable": true,
          "pda": {
            "seeds": [
              {
                "kind": "const",
                "value": [
                  104,
                  111,
                  115,
                  116
                ]
              },
              {
                "kind": "account",
                "path": "authority"
              }
            ]
          }
        },
        {
          "name": "system_program",
          "address": "11111111111111111111111111111111"
        }
      ],
      "args": [
        {
          "name": "idx",
          "type": "u8"
        }
      ]
    },
    {
      "name": "set_paused",
      "docs": [
        "Pause blocks new hosts and new spots only: check-ins, commits, births, refunds and claims of spots that",
        "already exist keep working (pausing can never freeze or skew a live spot)."
      ],
      "discriminator": [
        91,
        60,
        125,
        192,
        176,
        225,
        166,
        218
      ],
      "accounts": [
        {
          "name": "admin",
          "signer": true,
          "relations": [
            "config"
          ]
        },
        {
          "name": "config",
          "writable": true,
          "pda": {
            "seeds": [
              {
                "kind": "const",
                "value": [
                  99,
                  111,
                  110,
                  102,
                  105,
                  103
                ]
              }
            ]
          }
        }
      ],
      "args": [
        {
          "name": "paused",
          "type": "bool"
        }
      ]
    },
    {
      "name": "set_treasury",
      "docs": [
        "The treasury only receives launch fees, its fee leg and slashed bonds, always through",
        "`collect_treasury` / `slash_host` (never inside `birth`, audit I-L-2). It must not be the default",
        "key or an executable account."
      ],
      "discriminator": [
        57,
        97,
        196,
        95,
        195,
        206,
        106,
        136
      ],
      "accounts": [
        {
          "name": "admin",
          "signer": true,
          "relations": [
            "config"
          ]
        },
        {
          "name": "config",
          "writable": true,
          "pda": {
            "seeds": [
              {
                "kind": "const",
                "value": [
                  99,
                  111,
                  110,
                  102,
                  105,
                  103
                ]
              }
            ]
          }
        },
        {
          "name": "treasury"
        }
      ],
      "args": []
    },
    {
      "name": "set_verified",
      "docs": [
        "The \"verified venue\" badge on the site (manual moderation). No effect on funds or check-ins."
      ],
      "discriminator": [
        1,
        156,
        246,
        244,
        116,
        25,
        45,
        152
      ],
      "accounts": [
        {
          "name": "admin",
          "signer": true,
          "relations": [
            "config"
          ]
        },
        {
          "name": "config",
          "pda": {
            "seeds": [
              {
                "kind": "const",
                "value": [
                  99,
                  111,
                  110,
                  102,
                  105,
                  103
                ]
              }
            ]
          }
        },
        {
          "name": "host",
          "writable": true,
          "pda": {
            "seeds": [
              {
                "kind": "const",
                "value": [
                  104,
                  111,
                  115,
                  116
                ]
              },
              {
                "kind": "account",
                "path": "host.authority",
                "account": "Host"
              }
            ]
          }
        }
      ],
      "args": [
        {
          "name": "verified",
          "type": "bool"
        }
      ]
    },
    {
      "name": "slash_host",
      "docs": [
        "TRUSTED ARBITER POWER (the one exception to \"admin never moves user funds\"): the admin can burn part or",
        "all of a host's bond to the treasury when the host provably signed presence for people who were not",
        "there. Bounded: only while the bond is locked (a live spot + launch window + bond_hold), at most the",
        "bond, never anything else (pools, tokens and fees of spots are out of reach). `reason` = sha256 of the",
        "public write-up, emitted in the event."
      ],
      "discriminator": [
        220,
        150,
        242,
        245,
        165,
        122,
        234,
        77
      ],
      "accounts": [
        {
          "name": "admin",
          "signer": true,
          "relations": [
            "config"
          ]
        },
        {
          "name": "config",
          "pda": {
            "seeds": [
              {
                "kind": "const",
                "value": [
                  99,
                  111,
                  110,
                  102,
                  105,
                  103
                ]
              }
            ]
          }
        },
        {
          "name": "host",
          "writable": true,
          "pda": {
            "seeds": [
              {
                "kind": "const",
                "value": [
                  104,
                  111,
                  115,
                  116
                ]
              },
              {
                "kind": "account",
                "path": "host.authority",
                "account": "Host"
              }
            ]
          }
        },
        {
          "name": "treasury",
          "writable": true
        }
      ],
      "args": [
        {
          "name": "amount",
          "type": "u64"
        },
        {
          "name": "reason",
          "type": {
            "array": [
              "u8",
              32
            ]
          }
        }
      ]
    },
    {
      "name": "sync_fees",
      "docs": [
        "Books every new lamport on the fee PDA: attendees_bps (by commit, over the passes still active) +",
        "whatever dropped passes released, host_bps, creator_bps, treasury_bps + floor dust.",
        "H-1: the attendees' share is booked by the cumulative formula over W = active_weight:",
        "attendees_owed = floor(W * acc / ACC) - active_debt, while each active pass accrues",
        "floor(committed * acc / ACC) - fee_debt; since sum committed == W, the claims can never exceed what is",
        "booked. Invariant: fees == floor + attendees_owed + recycle + host_pending + creator_pending +",
        "treasury_pending + unsynced."
      ],
      "discriminator": [
        183,
        105,
        177,
        124,
        93,
        59,
        163,
        216
      ],
      "accounts": [
        {
          "name": "spot",
          "writable": true,
          "pda": {
            "seeds": [
              {
                "kind": "const",
                "value": [
                  115,
                  112,
                  111,
                  116
                ]
              },
              {
                "kind": "account",
                "path": "spot.id",
                "account": "Spot"
              }
            ]
          }
        },
        {
          "name": "fees",
          "writable": true,
          "pda": {
            "seeds": [
              {
                "kind": "const",
                "value": [
                  102,
                  101,
                  101,
                  115
                ]
              },
              {
                "kind": "account",
                "path": "spot"
              }
            ]
          }
        }
      ],
      "args": []
    },
    {
      "name": "top_up_bond",
      "discriminator": [
        110,
        37,
        8,
        119,
        210,
        231,
        202,
        197
      ],
      "accounts": [
        {
          "name": "authority",
          "writable": true,
          "signer": true,
          "relations": [
            "host"
          ]
        },
        {
          "name": "host",
          "writable": true,
          "pda": {
            "seeds": [
              {
                "kind": "const",
                "value": [
                  104,
                  111,
                  115,
                  116
                ]
              },
              {
                "kind": "account",
                "path": "authority"
              }
            ]
          }
        },
        {
          "name": "system_program",
          "address": "11111111111111111111111111111111"
        }
      ],
      "args": [
        {
          "name": "amount",
          "type": "u64"
        }
      ]
    },
    {
      "name": "unstake",
      "docs": [
        "The wallet (signer) takes its STAKED half out of the vault and leaves the attendee fee leg for good.",
        "In one instruction: its unpaid fee accrual (committed * acc / ACC - fee_debt) is paid to it (or, below",
        "the rent floor of an empty wallet, released with the weight, like a drop), its weight leaves the",
        "books (released = owed(W) - owed(W - committed) >= its unpaid accrual, the rest of `released` after",
        "the payment goes to `recycle` and is booked to the passes still staked at the next sync), and every",
        "token of its allocation not yet out goes to its token account. A pass that unstaked cannot earn or",
        "stake again. sol_back is still claimed with `claim_tokens`."
      ],
      "discriminator": [
        90,
        95,
        107,
        42,
        205,
        124,
        50,
        225
      ],
      "accounts": [
        {
          "name": "wallet",
          "docs": [
            "The pass's wallet: only it can end its own earning."
          ],
          "writable": true,
          "signer": true,
          "relations": [
            "pass"
          ]
        },
        {
          "name": "spot",
          "writable": true,
          "pda": {
            "seeds": [
              {
                "kind": "const",
                "value": [
                  115,
                  112,
                  111,
                  116
                ]
              },
              {
                "kind": "account",
                "path": "spot.id",
                "account": "Spot"
              }
            ]
          },
          "relations": [
            "pass"
          ]
        },
        {
          "name": "pass",
          "writable": true,
          "pda": {
            "seeds": [
              {
                "kind": "const",
                "value": [
                  112,
                  97,
                  115,
                  115
                ]
              },
              {
                "kind": "account",
                "path": "spot"
              },
              {
                "kind": "account",
                "path": "wallet"
              }
            ]
          }
        },
        {
          "name": "vault",
          "pda": {
            "seeds": [
              {
                "kind": "const",
                "value": [
                  118,
                  97,
                  117,
                  108,
                  116
                ]
              },
              {
                "kind": "account",
                "path": "spot"
              }
            ]
          }
        },
        {
          "name": "mint"
        },
        {
          "name": "vault_ata",
          "writable": true
        },
        {
          "name": "wallet_ata",
          "writable": true
        },
        {
          "name": "fees",
          "writable": true,
          "pda": {
            "seeds": [
              {
                "kind": "const",
                "value": [
                  102,
                  101,
                  101,
                  115
                ]
              },
              {
                "kind": "account",
                "path": "spot"
              }
            ]
          }
        },
        {
          "name": "token_program"
        },
        {
          "name": "ata_program",
          "address": "ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL"
        },
        {
          "name": "system_program",
          "address": "11111111111111111111111111111111"
        }
      ],
      "args": []
    },
    {
      "name": "unwrap_fees",
      "docs": [
        "Turns PumpSwap's wrapped SOL creator fees (anyone can collect them onto the fee PDA's WSOL account after",
        "migration, audit M-2) back into SOL on the fee PDA."
      ],
      "discriminator": [
        202,
        112,
        56,
        154,
        193,
        85,
        127,
        150
      ],
      "accounts": [
        {
          "name": "spot",
          "pda": {
            "seeds": [
              {
                "kind": "const",
                "value": [
                  115,
                  112,
                  111,
                  116
                ]
              },
              {
                "kind": "account",
                "path": "spot.id",
                "account": "Spot"
              }
            ]
          }
        },
        {
          "name": "fees",
          "writable": true,
          "pda": {
            "seeds": [
              {
                "kind": "const",
                "value": [
                  102,
                  101,
                  101,
                  115
                ]
              },
              {
                "kind": "account",
                "path": "spot"
              }
            ]
          }
        },
        {
          "name": "wsol_ata",
          "writable": true
        },
        {
          "name": "token_program",
          "address": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"
        }
      ],
      "args": []
    },
    {
      "name": "update_config",
      "docs": [
        "New params apply to spots opened from now on; every spot keeps the copy it was opened with."
      ],
      "discriminator": [
        29,
        158,
        252,
        191,
        10,
        83,
        219,
        99
      ],
      "accounts": [
        {
          "name": "admin",
          "signer": true,
          "relations": [
            "config"
          ]
        },
        {
          "name": "config",
          "writable": true,
          "pda": {
            "seeds": [
              {
                "kind": "const",
                "value": [
                  99,
                  111,
                  110,
                  102,
                  105,
                  103
                ]
              }
            ]
          }
        }
      ],
      "args": [
        {
          "name": "params",
          "type": {
            "defined": {
              "name": "Params"
            }
          }
        }
      ]
    },
    {
      "name": "withdraw",
      "docs": [
        "Takes (part of) a commit back until `unpledge_lock` seconds before the end; what stays must be 0 or",
        ">= min_commit."
      ],
      "discriminator": [
        183,
        18,
        70,
        156,
        148,
        109,
        161,
        34
      ],
      "accounts": [
        {
          "name": "wallet",
          "writable": true,
          "signer": true
        },
        {
          "name": "spot",
          "writable": true,
          "pda": {
            "seeds": [
              {
                "kind": "const",
                "value": [
                  115,
                  112,
                  111,
                  116
                ]
              },
              {
                "kind": "account",
                "path": "spot.id",
                "account": "Spot"
              }
            ]
          }
        },
        {
          "name": "pass",
          "writable": true,
          "pda": {
            "seeds": [
              {
                "kind": "const",
                "value": [
                  112,
                  97,
                  115,
                  115
                ]
              },
              {
                "kind": "account",
                "path": "spot"
              },
              {
                "kind": "account",
                "path": "wallet"
              }
            ]
          }
        },
        {
          "name": "vault",
          "writable": true,
          "pda": {
            "seeds": [
              {
                "kind": "const",
                "value": [
                  118,
                  97,
                  117,
                  108,
                  116
                ]
              },
              {
                "kind": "account",
                "path": "spot"
              }
            ]
          }
        },
        {
          "name": "system_program",
          "address": "11111111111111111111111111111111"
        }
      ],
      "args": [
        {
          "name": "amount",
          "type": "u64"
        }
      ]
    },
    {
      "name": "withdraw_bond",
      "docs": [
        "The host takes (part of) the bond back once it is unlocked: bond_locked_until = the latest",
        "(spot end + launch window + bond_hold) of the host's spots."
      ],
      "discriminator": [
        222,
        199,
        141,
        31,
        188,
        93,
        155,
        40
      ],
      "accounts": [
        {
          "name": "authority",
          "writable": true,
          "signer": true,
          "relations": [
            "host"
          ]
        },
        {
          "name": "host",
          "writable": true,
          "pda": {
            "seeds": [
              {
                "kind": "const",
                "value": [
                  104,
                  111,
                  115,
                  116
                ]
              },
              {
                "kind": "account",
                "path": "authority"
              }
            ]
          }
        },
        {
          "name": "system_program",
          "address": "11111111111111111111111111111111"
        }
      ],
      "args": [
        {
          "name": "amount",
          "type": "u64"
        }
      ]
    }
  ],
  "accounts": [
    {
      "name": "Config",
      "discriminator": [
        155,
        12,
        170,
        224,
        30,
        250,
        204,
        130
      ]
    },
    {
      "name": "Host",
      "discriminator": [
        141,
        195,
        28,
        93,
        45,
        127,
        175,
        216
      ]
    },
    {
      "name": "Pass",
      "discriminator": [
        40,
        247,
        140,
        113,
        56,
        14,
        57,
        44
      ]
    },
    {
      "name": "SgtUse",
      "discriminator": [
        143,
        100,
        200,
        172,
        90,
        11,
        223,
        181
      ]
    },
    {
      "name": "Spot",
      "discriminator": [
        146,
        3,
        218,
        110,
        245,
        121,
        210,
        110
      ]
    }
  ],
  "events": [
    {
      "name": "AdminProposed",
      "discriminator": [
        129,
        249,
        226,
        227,
        199,
        82,
        110,
        243
      ]
    },
    {
      "name": "AdminSet",
      "discriminator": [
        157,
        245,
        205,
        226,
        118,
        125,
        183,
        97
      ]
    },
    {
      "name": "BondChanged",
      "discriminator": [
        182,
        171,
        105,
        8,
        232,
        86,
        149,
        135
      ]
    },
    {
      "name": "Born",
      "discriminator": [
        25,
        60,
        205,
        232,
        20,
        186,
        167,
        29
      ]
    },
    {
      "name": "CheckedIn",
      "discriminator": [
        211,
        80,
        198,
        244,
        196,
        84,
        212,
        150
      ]
    },
    {
      "name": "Committed",
      "discriminator": [
        70,
        158,
        162,
        86,
        29,
        111,
        143,
        226
      ]
    },
    {
      "name": "ConfigInitialized",
      "discriminator": [
        181,
        49,
        200,
        156,
        19,
        167,
        178,
        91
      ]
    },
    {
      "name": "ConfigUpdated",
      "discriminator": [
        40,
        241,
        230,
        122,
        11,
        19,
        198,
        194
      ]
    },
    {
      "name": "CreatorPaid",
      "discriminator": [
        110,
        132,
        111,
        208,
        170,
        45,
        93,
        98
      ]
    },
    {
      "name": "FeesClaimed",
      "discriminator": [
        22,
        104,
        110,
        222,
        38,
        157,
        14,
        62
      ]
    },
    {
      "name": "FeesCollected",
      "discriminator": [
        233,
        23,
        117,
        225,
        107,
        178,
        254,
        8
      ]
    },
    {
      "name": "FeesSynced",
      "discriminator": [
        41,
        98,
        204,
        192,
        243,
        3,
        53,
        218
      ]
    },
    {
      "name": "FeesUnwrapped",
      "discriminator": [
        146,
        111,
        114,
        101,
        19,
        203,
        134,
        142
      ]
    },
    {
      "name": "HostPaid",
      "discriminator": [
        80,
        118,
        135,
        247,
        84,
        158,
        173,
        166
      ]
    },
    {
      "name": "HostRegistered",
      "discriminator": [
        223,
        150,
        103,
        158,
        161,
        242,
        213,
        200
      ]
    },
    {
      "name": "HostSlashed",
      "discriminator": [
        215,
        28,
        229,
        116,
        52,
        198,
        113,
        94
      ]
    },
    {
      "name": "HostVerified",
      "discriminator": [
        153,
        212,
        117,
        55,
        148,
        194,
        108,
        14
      ]
    },
    {
      "name": "KeyAdded",
      "discriminator": [
        37,
        132,
        98,
        148,
        227,
        171,
        151,
        16
      ]
    },
    {
      "name": "KeyRevoked",
      "discriminator": [
        7,
        163,
        155,
        146,
        175,
        188,
        197,
        243
      ]
    },
    {
      "name": "PausedSet",
      "discriminator": [
        171,
        125,
        127,
        156,
        233,
        81,
        68,
        66
      ]
    },
    {
      "name": "Refunded",
      "discriminator": [
        35,
        103,
        149,
        246,
        196,
        123,
        221,
        99
      ]
    },
    {
      "name": "SgtLinked",
      "discriminator": [
        18,
        95,
        64,
        189,
        136,
        137,
        41,
        44
      ]
    },
    {
      "name": "SpotFailed",
      "discriminator": [
        242,
        135,
        93,
        223,
        202,
        234,
        245,
        242
      ]
    },
    {
      "name": "SpotOpened",
      "discriminator": [
        186,
        144,
        82,
        174,
        189,
        189,
        174,
        34
      ]
    },
    {
      "name": "TokensClaimed",
      "discriminator": [
        25,
        128,
        244,
        55,
        241,
        136,
        200,
        91
      ]
    },
    {
      "name": "TreasuryPaid",
      "discriminator": [
        203,
        141,
        198,
        183,
        132,
        74,
        239,
        248
      ]
    },
    {
      "name": "TreasurySet",
      "discriminator": [
        69,
        231,
        163,
        135,
        254,
        194,
        109,
        166
      ]
    },
    {
      "name": "Unstaked",
      "discriminator": [
        27,
        179,
        156,
        215,
        47,
        71,
        195,
        7
      ]
    },
    {
      "name": "Withdrawn",
      "discriminator": [
        20,
        89,
        223,
        198,
        194,
        124,
        219,
        13
      ]
    }
  ],
  "errors": [
    {
      "code": 6000,
      "name": "Paused",
      "msg": "new hosts and new spots are paused"
    },
    {
      "code": 6001,
      "name": "Unauthorized",
      "msg": "only the admin (or this host) can do this"
    },
    {
      "code": 6002,
      "name": "BadConfig",
      "msg": "a parameter is out of its allowed range"
    },
    {
      "code": 6003,
      "name": "BadAccounts",
      "msg": "wrong accounts"
    },
    {
      "code": 6004,
      "name": "Math",
      "msg": "math overflow"
    },
    {
      "code": 6005,
      "name": "BadName",
      "msg": "name must be 1-32 printable characters, no leading or trailing space"
    },
    {
      "code": 6006,
      "name": "BadSymbol",
      "msg": "ticker must be 1-10 characters, A-Z and 0-9"
    },
    {
      "code": 6007,
      "name": "BadUri",
      "msg": "metadata uri must be ipfs://<cid> or https://ipfs.io/ipfs/<cid>"
    },
    {
      "code": 6008,
      "name": "BadPlace",
      "msg": "place must be 1-48 printable characters"
    },
    {
      "code": 6009,
      "name": "BadLocation",
      "msg": "latitude or longitude out of range"
    },
    {
      "code": 6010,
      "name": "BadKeys",
      "msg": "a host needs 1-4 distinct device keys (Ed25519, or P-256 compressed)"
    },
    {
      "code": 6011,
      "name": "HostKeysFull",
      "msg": "this host already has 4 device keys: revoke one first"
    },
    {
      "code": 6012,
      "name": "NoSuchKey",
      "msg": "no active device key in that slot"
    },
    {
      "code": 6013,
      "name": "BondTooSmall",
      "msg": "the host bond is below what a spot needs"
    },
    {
      "code": 6014,
      "name": "BondLocked",
      "msg": "the bond is locked until the host's last spot is settled"
    },
    {
      "code": 6015,
      "name": "SlashWindowClosed",
      "msg": "the bond can only be slashed while it is locked"
    },
    {
      "code": 6016,
      "name": "BadSlash",
      "msg": "amount must be between 1 lamport and the bond"
    },
    {
      "code": 6017,
      "name": "BadCapacity",
      "msg": "capacity out of range"
    },
    {
      "code": 6018,
      "name": "BadStart",
      "msg": "the spot must start between now (5 minutes of clock slack) and 30 days from now"
    },
    {
      "code": 6019,
      "name": "BadDuration",
      "msg": "spot window out of range"
    },
    {
      "code": 6020,
      "name": "NotOpen",
      "msg": "this spot is not open"
    },
    {
      "code": 6021,
      "name": "DoorsClosed",
      "msg": "check-in is closed: the spot has not started yet or is over"
    },
    {
      "code": 6022,
      "name": "BucketExpired",
      "msg": "this code has expired: scan the live code on the host's screen again"
    },
    {
      "code": 6023,
      "name": "BucketFull",
      "msg": "too many check-ins with this code in the last 15 seconds: wait for the next code or ask the host to tap you in"
    },
    {
      "code": 6024,
      "name": "SpotFull",
      "msg": "this spot is at capacity"
    },
    {
      "code": 6025,
      "name": "QrFull",
      "msg": "the room code's share of this spot is full: ask the host to tap you in"
    },
    {
      "code": 6026,
      "name": "AlreadyCheckedIn",
      "msg": "this wallet has already checked in here"
    },
    {
      "code": 6027,
      "name": "NotCheckedIn",
      "msg": "check in at the spot first"
    },
    {
      "code": 6028,
      "name": "NotSeeker",
      "msg": "that is not a Seeker Genesis Token held by this wallet"
    },
    {
      "code": 6029,
      "name": "SgtAlreadyLinked",
      "msg": "this pass already has a Seeker linked"
    },
    {
      "code": 6030,
      "name": "CommitSize",
      "msg": "commit outside the allowed size for this wallet"
    },
    {
      "code": 6031,
      "name": "CommitClosed",
      "msg": "commits are closed for this spot"
    },
    {
      "code": 6032,
      "name": "WithdrawLocked",
      "msg": "withdrawals are locked in the last minutes before the end"
    },
    {
      "code": 6033,
      "name": "NotEnded",
      "msg": "the spot has not ended yet"
    },
    {
      "code": 6034,
      "name": "LaunchWindowOver",
      "msg": "the launch window is over: the spot can only be expired"
    },
    {
      "code": 6035,
      "name": "NotExpirable",
      "msg": "the spot cannot be expired yet"
    },
    {
      "code": 6036,
      "name": "NotRefundable",
      "msg": "this spot is not refunding"
    },
    {
      "code": 6037,
      "name": "NothingToRefund",
      "msg": "nothing to refund"
    },
    {
      "code": 6038,
      "name": "NotLaunched",
      "msg": "the coin has not been born yet"
    },
    {
      "code": 6039,
      "name": "AlreadyClaimed",
      "msg": "already claimed"
    },
    {
      "code": 6040,
      "name": "NothingToClaim",
      "msg": "nothing to claim"
    },
    {
      "code": 6041,
      "name": "NotHolding",
      "msg": "retired: the fee leg now needs the staked half in the vault (kept for stable error codes)"
    },
    {
      "code": 6042,
      "name": "StillHolding",
      "msg": "retired (kept for stable error codes)"
    },
    {
      "code": 6043,
      "name": "PassDropped",
      "msg": "this pass unstaked its tokens and no longer earns fees"
    },
    {
      "code": 6044,
      "name": "NotAlone",
      "msg": "this instruction must run alone in its transaction (no trades next to it)"
    },
    {
      "code": 6045,
      "name": "PoolTooSmall",
      "msg": "the pool is too small to launch"
    },
    {
      "code": 6046,
      "name": "NothingBought",
      "msg": "the buy returned no tokens"
    },
    {
      "code": 6047,
      "name": "RentTooHigh",
      "msg": "launch rents exceeded the rent reserve"
    },
    {
      "code": 6048,
      "name": "BelowRentFloor",
      "msg": "payout is below the rent floor of an empty wallet: it stays claimable, fund the wallet or wait"
    },
    {
      "code": 6049,
      "name": "BadTreasury",
      "msg": "the treasury cannot be the default key or a program"
    }
  ],
  "types": [
    {
      "name": "AdminProposed",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "current",
            "type": "pubkey"
          },
          {
            "name": "proposed",
            "type": "pubkey"
          }
        ]
      }
    },
    {
      "name": "AdminSet",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "old",
            "type": "pubkey"
          },
          {
            "name": "admin",
            "type": "pubkey"
          }
        ]
      }
    },
    {
      "name": "BondChanged",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "host",
            "type": "pubkey"
          },
          {
            "name": "authority",
            "type": "pubkey"
          },
          {
            "name": "delta",
            "type": "i64"
          },
          {
            "name": "bond",
            "type": "u64"
          },
          {
            "name": "locked_until",
            "type": "i64"
          }
        ]
      }
    },
    {
      "name": "Born",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "id",
            "type": "u64"
          },
          {
            "name": "spot",
            "type": "pubkey"
          },
          {
            "name": "mint",
            "type": "pubkey"
          },
          {
            "name": "name",
            "type": "string"
          },
          {
            "name": "symbol",
            "type": "string"
          },
          {
            "name": "uri",
            "type": "string"
          },
          {
            "name": "pool",
            "type": "u64"
          },
          {
            "name": "deployed",
            "type": "u64"
          },
          {
            "name": "fee",
            "type": "u64"
          },
          {
            "name": "spent",
            "type": "u64"
          },
          {
            "name": "sol_back",
            "type": "u64"
          },
          {
            "name": "tokens",
            "type": "u64"
          },
          {
            "name": "committers",
            "type": "u32"
          },
          {
            "name": "passes",
            "type": "u32"
          }
        ]
      }
    },
    {
      "name": "BucketCount",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "bucket",
            "type": "u64"
          },
          {
            "name": "qr",
            "type": "u32"
          },
          {
            "name": "tap",
            "type": "u32"
          }
        ]
      }
    },
    {
      "name": "CheckedIn",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "id",
            "type": "u64"
          },
          {
            "name": "spot",
            "type": "pubkey"
          },
          {
            "name": "wallet",
            "type": "pubkey"
          },
          {
            "name": "bucket",
            "type": "u64"
          },
          {
            "name": "via",
            "type": "u8"
          },
          {
            "name": "key_idx",
            "type": "u8"
          },
          {
            "name": "key_kind",
            "type": "u8"
          },
          {
            "name": "in_bucket",
            "type": "u32"
          },
          {
            "name": "passes",
            "type": "u32"
          },
          {
            "name": "capacity",
            "type": "u32"
          },
          {
            "name": "ts",
            "type": "i64"
          }
        ]
      }
    },
    {
      "name": "Committed",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "id",
            "type": "u64"
          },
          {
            "name": "spot",
            "type": "pubkey"
          },
          {
            "name": "wallet",
            "type": "pubkey"
          },
          {
            "name": "amount",
            "type": "u64"
          },
          {
            "name": "committed",
            "type": "u64"
          },
          {
            "name": "cap",
            "type": "u64"
          },
          {
            "name": "total",
            "type": "u64"
          },
          {
            "name": "committers",
            "type": "u32"
          },
          {
            "name": "ts",
            "type": "i64"
          }
        ]
      }
    },
    {
      "name": "Config",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "admin",
            "type": "pubkey"
          },
          {
            "name": "pending_admin",
            "docs": [
              "Proposed admin (default = none); becomes admin when it signs `accept_admin`."
            ],
            "type": "pubkey"
          },
          {
            "name": "treasury",
            "type": "pubkey"
          },
          {
            "name": "paused",
            "type": "bool"
          },
          {
            "name": "params",
            "type": {
              "defined": {
                "name": "Params"
              }
            }
          },
          {
            "name": "next_id",
            "type": "u64"
          },
          {
            "name": "bump",
            "type": "u8"
          }
        ]
      }
    },
    {
      "name": "ConfigInitialized",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "admin",
            "type": "pubkey"
          },
          {
            "name": "treasury",
            "type": "pubkey"
          },
          {
            "name": "params",
            "type": {
              "defined": {
                "name": "Params"
              }
            }
          }
        ]
      }
    },
    {
      "name": "ConfigUpdated",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "params",
            "type": {
              "defined": {
                "name": "Params"
              }
            }
          }
        ]
      }
    },
    {
      "name": "CreatorPaid",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "id",
            "type": "u64"
          },
          {
            "name": "spot",
            "type": "pubkey"
          },
          {
            "name": "creator",
            "type": "pubkey"
          },
          {
            "name": "amount",
            "type": "u64"
          }
        ]
      }
    },
    {
      "name": "DeviceKey",
      "docs": [
        "A host device key: kind 1 = Ed25519 (pubkey[..32], pubkey[32] == 0), 2 = P-256 compressed (33 bytes,",
        "0x02 / 0x03 prefix), 0 = empty slot."
      ],
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "kind",
            "type": "u8"
          },
          {
            "name": "pubkey",
            "type": {
              "array": [
                "u8",
                33
              ]
            }
          }
        ]
      }
    },
    {
      "name": "FeesClaimed",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "id",
            "type": "u64"
          },
          {
            "name": "spot",
            "type": "pubkey"
          },
          {
            "name": "wallet",
            "type": "pubkey"
          },
          {
            "name": "committed",
            "type": "u64"
          },
          {
            "name": "amount",
            "type": "u64"
          }
        ]
      }
    },
    {
      "name": "FeesCollected",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "id",
            "type": "u64"
          },
          {
            "name": "spot",
            "type": "pubkey"
          },
          {
            "name": "amount",
            "type": "u64"
          }
        ]
      }
    },
    {
      "name": "FeesSynced",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "id",
            "type": "u64"
          },
          {
            "name": "spot",
            "type": "pubkey"
          },
          {
            "name": "incoming",
            "type": "u64"
          },
          {
            "name": "recycled",
            "type": "u64"
          },
          {
            "name": "attendees",
            "type": "u64"
          },
          {
            "name": "host",
            "type": "u64"
          },
          {
            "name": "creator",
            "type": "u64"
          },
          {
            "name": "treasury",
            "type": "u64"
          },
          {
            "name": "total",
            "type": "u64"
          }
        ]
      }
    },
    {
      "name": "FeesUnwrapped",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "id",
            "type": "u64"
          },
          {
            "name": "spot",
            "type": "pubkey"
          },
          {
            "name": "amount",
            "type": "u64"
          }
        ]
      }
    },
    {
      "name": "Host",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "authority",
            "type": "pubkey"
          },
          {
            "name": "keys",
            "type": {
              "array": [
                {
                  "defined": {
                    "name": "DeviceKey"
                  }
                },
                4
              ]
            }
          },
          {
            "name": "bond",
            "docs": [
              "Lamports of the bond (held on this account above its rent). Invariant: lamports >= rent + bond."
            ],
            "type": "u64"
          },
          {
            "name": "bond_locked_until",
            "docs": [
              "Latest (spot end + launch window + bond_hold) over the host's spots: no withdrawal before, no slash after."
            ],
            "type": "i64"
          },
          {
            "name": "spots",
            "type": "u32"
          },
          {
            "name": "open_spots",
            "docs": [
              "Spots of this host still Open (not born / failed / expired). open_spot needs bond >= host_bond x",
              "(open_spots + 1)."
            ],
            "type": "u32"
          },
          {
            "name": "verified",
            "type": "bool"
          },
          {
            "name": "slashed",
            "type": "u64"
          },
          {
            "name": "created_at",
            "type": "i64"
          },
          {
            "name": "bump",
            "type": "u8"
          }
        ]
      }
    },
    {
      "name": "HostPaid",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "id",
            "type": "u64"
          },
          {
            "name": "spot",
            "type": "pubkey"
          },
          {
            "name": "host_authority",
            "type": "pubkey"
          },
          {
            "name": "amount",
            "type": "u64"
          }
        ]
      }
    },
    {
      "name": "HostRegistered",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "host",
            "type": "pubkey"
          },
          {
            "name": "authority",
            "type": "pubkey"
          },
          {
            "name": "keys",
            "type": {
              "array": [
                {
                  "defined": {
                    "name": "DeviceKey"
                  }
                },
                4
              ]
            }
          },
          {
            "name": "bond",
            "type": "u64"
          },
          {
            "name": "ts",
            "type": "i64"
          }
        ]
      }
    },
    {
      "name": "HostSlashed",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "host",
            "type": "pubkey"
          },
          {
            "name": "authority",
            "type": "pubkey"
          },
          {
            "name": "amount",
            "type": "u64"
          },
          {
            "name": "bond_left",
            "type": "u64"
          },
          {
            "name": "reason",
            "type": {
              "array": [
                "u8",
                32
              ]
            }
          }
        ]
      }
    },
    {
      "name": "HostVerified",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "host",
            "type": "pubkey"
          },
          {
            "name": "authority",
            "type": "pubkey"
          },
          {
            "name": "verified",
            "type": "bool"
          }
        ]
      }
    },
    {
      "name": "KeyAdded",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "host",
            "type": "pubkey"
          },
          {
            "name": "idx",
            "type": "u8"
          },
          {
            "name": "kind",
            "type": "u8"
          },
          {
            "name": "pubkey",
            "type": {
              "array": [
                "u8",
                33
              ]
            }
          }
        ]
      }
    },
    {
      "name": "KeyRevoked",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "host",
            "type": "pubkey"
          },
          {
            "name": "idx",
            "type": "u8"
          },
          {
            "name": "kind",
            "type": "u8"
          },
          {
            "name": "pubkey",
            "type": {
              "array": [
                "u8",
                33
              ]
            }
          }
        ]
      }
    },
    {
      "name": "OpenSpotArgs",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "name",
            "type": "string"
          },
          {
            "name": "symbol",
            "type": "string"
          },
          {
            "name": "uri",
            "type": "string"
          },
          {
            "name": "place",
            "type": "string"
          },
          {
            "name": "lat_e6",
            "type": "i32"
          },
          {
            "name": "lon_e6",
            "type": "i32"
          },
          {
            "name": "capacity",
            "type": "u32"
          },
          {
            "name": "qr_capacity",
            "docs": [
              "Passes the shared room QR may fill (0..=capacity; 0 = taps only). The rest needs a per-wallet tap."
            ],
            "type": "u32"
          },
          {
            "name": "starts_at",
            "type": "i64"
          },
          {
            "name": "duration",
            "type": "i64"
          }
        ]
      }
    },
    {
      "name": "Params",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "min_duration",
            "docs": [
              "Spot window bounds the creator picks from (default 3600 .. 43200 s; hard 1800 (localnet 60) .. 43200)."
            ],
            "type": "i64"
          },
          {
            "name": "max_duration",
            "type": "i64"
          },
          {
            "name": "unpledge_lock",
            "docs": [
              "Withdrawals close this long before the end (default 600 s, 0 .. 3600, < min_duration)."
            ],
            "type": "i64"
          },
          {
            "name": "launch_window",
            "docs": [
              "After the end, birth must happen within this window, else anyone expires the spot (default 24 h,",
              "3600 (localnet 60) .. 7 d)."
            ],
            "type": "i64"
          },
          {
            "name": "bond_hold",
            "docs": [
              "The host bond stays locked this long after a spot's launch window (arbiter window, default 7 d,",
              "86400 (localnet 60) .. 30 d)."
            ],
            "type": "i64"
          },
          {
            "name": "host_bond",
            "docs": [
              "Bond a host needs to open a spot (default 1 SOL, 0.1 .. 100 SOL)."
            ],
            "type": "u64"
          },
          {
            "name": "max_capacity",
            "docs": [
              "Largest capacity a spot may have (default 2000, 1 .. 10000)."
            ],
            "type": "u32"
          },
          {
            "name": "min_commit",
            "docs": [
              "Smallest cumulative commit of a wallet (default 0.01 SOL, 0.01 .. 1 SOL)."
            ],
            "type": "u64"
          },
          {
            "name": "max_commit",
            "docs": [
              "Per-wallet commit cap (default 1 SOL, min_commit .. 10 SOL)."
            ],
            "type": "u64"
          },
          {
            "name": "sgt_max_commit",
            "docs": [
              "Per-wallet cap with a linked Seeker (default 2 SOL, max_commit .. 20 SOL)."
            ],
            "type": "u64"
          },
          {
            "name": "min_raise",
            "docs": [
              "Pool needed for a birth (default 2 SOL, 0.5 .. 70 SOL, <= birth_cap)."
            ],
            "type": "u64"
          },
          {
            "name": "birth_cap",
            "docs": [
              "Most SOL a birth deploys (fee included); the rest of the pool is refunded pro rata (default 70 SOL,",
              "min_raise .. 80 SOL)."
            ],
            "type": "u64"
          },
          {
            "name": "rent_reserve",
            "docs": [
              "Launch rent budget (default 0.03 SOL, (0, 0.05]); unused rest -> committers."
            ],
            "type": "u64"
          },
          {
            "name": "launch_fee_bps",
            "docs": [
              "Launch fee on the deployed amount (default 250, <= 500)."
            ],
            "type": "u16"
          },
          {
            "name": "attendees_bps",
            "docs": [
              "Creator fee split (default 4000 / 2500 / 2000 / 1500; attendees >= 2500, treasury <= 2500, sum 10000)."
            ],
            "type": "u16"
          },
          {
            "name": "host_bps",
            "type": "u16"
          },
          {
            "name": "creator_bps",
            "type": "u16"
          },
          {
            "name": "treasury_bps",
            "type": "u16"
          }
        ]
      }
    },
    {
      "name": "Pass",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "spot",
            "type": "pubkey"
          },
          {
            "name": "wallet",
            "type": "pubkey"
          },
          {
            "name": "bucket",
            "docs": [
              "Bucket of the signature it checked in with, how (QR / tap), with which device key."
            ],
            "type": "u64"
          },
          {
            "name": "via",
            "type": "u8"
          },
          {
            "name": "key_idx",
            "type": "u8"
          },
          {
            "name": "key_kind",
            "type": "u8"
          },
          {
            "name": "at",
            "type": "i64"
          },
          {
            "name": "cap",
            "docs": [
              "Commit cap of this wallet (max_commit, or sgt_max_commit after link_sgt)."
            ],
            "type": "u64"
          },
          {
            "name": "sgt",
            "type": "pubkey"
          },
          {
            "name": "committed",
            "type": "u64"
          },
          {
            "name": "refunded",
            "type": "bool"
          },
          {
            "name": "tokens_claimed",
            "docs": [
              "The free half was released by claim_tokens (or everything by unstake)."
            ],
            "type": "bool"
          },
          {
            "name": "sol_back_claimed",
            "type": "bool"
          },
          {
            "name": "fee_debt",
            "docs": [
              "Creator fees paid so far (the accrual already settled)."
            ],
            "type": "u64"
          },
          {
            "name": "dropped",
            "docs": [
              "Unstaked: the staked half left the vault, no more fees (final)."
            ],
            "type": "bool"
          },
          {
            "name": "tokens_out",
            "docs": [
              "Tokens of the allocation sent to the wallet so far; staked = allocation - tokens_out."
            ],
            "type": "u64"
          },
          {
            "name": "bump",
            "type": "u8"
          }
        ]
      }
    },
    {
      "name": "PausedSet",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "paused",
            "type": "bool"
          }
        ]
      }
    },
    {
      "name": "Refunded",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "id",
            "type": "u64"
          },
          {
            "name": "spot",
            "type": "pubkey"
          },
          {
            "name": "wallet",
            "type": "pubkey"
          },
          {
            "name": "amount",
            "type": "u64"
          }
        ]
      }
    },
    {
      "name": "SgtLinked",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "id",
            "type": "u64"
          },
          {
            "name": "spot",
            "type": "pubkey"
          },
          {
            "name": "wallet",
            "type": "pubkey"
          },
          {
            "name": "sgt_mint",
            "type": "pubkey"
          },
          {
            "name": "cap",
            "type": "u64"
          },
          {
            "name": "sgt_passes",
            "type": "u32"
          }
        ]
      }
    },
    {
      "name": "SgtUse",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "spot",
            "type": "pubkey"
          },
          {
            "name": "sgt_mint",
            "type": "pubkey"
          },
          {
            "name": "wallet",
            "type": "pubkey"
          },
          {
            "name": "bump",
            "type": "u8"
          }
        ]
      }
    },
    {
      "name": "Spot",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "id",
            "type": "u64"
          },
          {
            "name": "host",
            "docs": [
              "Host PDA and its authority (receives the host fee share)."
            ],
            "type": "pubkey"
          },
          {
            "name": "host_authority",
            "type": "pubkey"
          },
          {
            "name": "creator",
            "docs": [
              "Who opened the spot (receives the creator fee share)."
            ],
            "type": "pubkey"
          },
          {
            "name": "name",
            "type": "string"
          },
          {
            "name": "symbol",
            "type": "string"
          },
          {
            "name": "uri",
            "type": "string"
          },
          {
            "name": "place",
            "type": "string"
          },
          {
            "name": "lat_e6",
            "docs": [
              "Map pin for the site only (never used for any check on chain)."
            ],
            "type": "i32"
          },
          {
            "name": "lon_e6",
            "type": "i32"
          },
          {
            "name": "capacity",
            "type": "u32"
          },
          {
            "name": "qr_capacity",
            "docs": [
              "At most this many passes by room QR (relay bound); taps can use the whole capacity."
            ],
            "type": "u32"
          },
          {
            "name": "qr_per_bucket",
            "type": "u32"
          },
          {
            "name": "starts_at",
            "type": "i64"
          },
          {
            "name": "ends_at",
            "type": "i64"
          },
          {
            "name": "params",
            "type": {
              "defined": {
                "name": "Params"
              }
            }
          },
          {
            "name": "state",
            "type": "u8"
          },
          {
            "name": "passes",
            "type": "u32"
          },
          {
            "name": "passes_qr",
            "type": "u32"
          },
          {
            "name": "passes_tap",
            "type": "u32"
          },
          {
            "name": "passes_sgt",
            "type": "u32"
          },
          {
            "name": "committers",
            "type": "u32"
          },
          {
            "name": "total",
            "docs": [
              "Sum of the passes' commits (the pool)."
            ],
            "type": "u64"
          },
          {
            "name": "ring",
            "type": {
              "array": [
                {
                  "defined": {
                    "name": "BucketCount"
                  }
                },
                4
              ]
            }
          },
          {
            "name": "mint",
            "type": "pubkey"
          },
          {
            "name": "launched_at",
            "type": "i64"
          },
          {
            "name": "fee",
            "type": "u64"
          },
          {
            "name": "deployed",
            "type": "u64"
          },
          {
            "name": "spent",
            "docs": [
              "Lamports offered to pump for the buy (fees included)."
            ],
            "type": "u64"
          },
          {
            "name": "sol_back",
            "docs": [
              "Everything the vault kept above its floor after birth, owed to the committers pro rata."
            ],
            "type": "u64"
          },
          {
            "name": "sol_back_paid",
            "type": "u64"
          },
          {
            "name": "tokens_bought",
            "type": "u64"
          },
          {
            "name": "tokens_claimed",
            "type": "u64"
          },
          {
            "name": "refundable",
            "docs": [
              "Failed: commits not refunded yet."
            ],
            "type": "u64"
          },
          {
            "name": "acc_fee_per_weight",
            "type": "u128"
          },
          {
            "name": "active_weight",
            "docs": [
              "Sum of `committed` over passes that still earn (not dropped)."
            ],
            "type": "u64"
          },
          {
            "name": "active_debt",
            "docs": [
              "Sum of `fee_debt` (fees paid) over passes that still earn."
            ],
            "type": "u64"
          },
          {
            "name": "recycle",
            "docs": [
              "Released by dropped passes, booked to the active ones at the next sync."
            ],
            "type": "u64"
          },
          {
            "name": "host_pending",
            "type": "u64"
          },
          {
            "name": "creator_pending",
            "type": "u64"
          },
          {
            "name": "treasury_pending",
            "type": "u64"
          },
          {
            "name": "attendees_paid",
            "type": "u64"
          },
          {
            "name": "fees_seen",
            "type": "u64"
          },
          {
            "name": "dropped",
            "type": "u32"
          },
          {
            "name": "bump",
            "type": "u8"
          },
          {
            "name": "vault_bump",
            "type": "u8"
          },
          {
            "name": "fees_bump",
            "type": "u8"
          }
        ]
      }
    },
    {
      "name": "SpotFailed",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "id",
            "type": "u64"
          },
          {
            "name": "spot",
            "type": "pubkey"
          },
          {
            "name": "total",
            "type": "u64"
          },
          {
            "name": "min_raise",
            "type": "u64"
          },
          {
            "name": "expired",
            "type": "bool"
          }
        ]
      }
    },
    {
      "name": "SpotOpened",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "id",
            "type": "u64"
          },
          {
            "name": "spot",
            "type": "pubkey"
          },
          {
            "name": "host",
            "type": "pubkey"
          },
          {
            "name": "host_authority",
            "type": "pubkey"
          },
          {
            "name": "creator",
            "type": "pubkey"
          },
          {
            "name": "name",
            "type": "string"
          },
          {
            "name": "symbol",
            "type": "string"
          },
          {
            "name": "uri",
            "type": "string"
          },
          {
            "name": "place",
            "type": "string"
          },
          {
            "name": "lat_e6",
            "type": "i32"
          },
          {
            "name": "lon_e6",
            "type": "i32"
          },
          {
            "name": "capacity",
            "type": "u32"
          },
          {
            "name": "qr_capacity",
            "type": "u32"
          },
          {
            "name": "qr_per_bucket",
            "type": "u32"
          },
          {
            "name": "starts_at",
            "type": "i64"
          },
          {
            "name": "ends_at",
            "type": "i64"
          },
          {
            "name": "min_raise",
            "type": "u64"
          },
          {
            "name": "max_commit",
            "type": "u64"
          },
          {
            "name": "birth_cap",
            "type": "u64"
          }
        ]
      }
    },
    {
      "name": "TokensClaimed",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "id",
            "type": "u64"
          },
          {
            "name": "spot",
            "type": "pubkey"
          },
          {
            "name": "wallet",
            "type": "pubkey"
          },
          {
            "name": "amount",
            "type": "u64"
          },
          {
            "name": "sol_back",
            "type": "u64"
          },
          {
            "name": "staked",
            "type": "u64"
          }
        ]
      }
    },
    {
      "name": "TreasuryPaid",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "id",
            "type": "u64"
          },
          {
            "name": "spot",
            "type": "pubkey"
          },
          {
            "name": "treasury",
            "type": "pubkey"
          },
          {
            "name": "amount",
            "type": "u64"
          }
        ]
      }
    },
    {
      "name": "TreasurySet",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "treasury",
            "type": "pubkey"
          }
        ]
      }
    },
    {
      "name": "Unstaked",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "id",
            "type": "u64"
          },
          {
            "name": "spot",
            "type": "pubkey"
          },
          {
            "name": "wallet",
            "type": "pubkey"
          },
          {
            "name": "committed",
            "type": "u64"
          },
          {
            "name": "tokens",
            "type": "u64"
          },
          {
            "name": "fees_paid",
            "type": "u64"
          },
          {
            "name": "released",
            "type": "u64"
          },
          {
            "name": "active_weight",
            "type": "u64"
          }
        ]
      }
    },
    {
      "name": "Withdrawn",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "id",
            "type": "u64"
          },
          {
            "name": "spot",
            "type": "pubkey"
          },
          {
            "name": "wallet",
            "type": "pubkey"
          },
          {
            "name": "amount",
            "type": "u64"
          },
          {
            "name": "committed",
            "type": "u64"
          },
          {
            "name": "total",
            "type": "u64"
          },
          {
            "name": "committers",
            "type": "u32"
          },
          {
            "name": "ts",
            "type": "i64"
          }
        ]
      }
    }
  ]
}