upleb.uk

Public git repos — served from a NIP-34 GRASP relay at git.upleb.uk

summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorlog <log@invalid>2026-10-06 22:22:53 +0000
committerlog <log@invalid>2026-10-06 22:22:53 +0000
commit393a8dd2e16127e6e142836744d42ab406253d2e (patch)
tree3b55d5ee4a962a18632d4954ec801bd291c048d9
parenta89e712faef55c290c9aff01690051d4947c0bd1 (diff)
size 74612
-rw-r--r--reveal/v5-000009/check.py319
-rw-r--r--reveal/v5-000009/manifest.txt26
-rw-r--r--reveal/v5-000009/manifest.txt.otsbin0 -> 584 bytes
-rw-r--r--reveal/v5-000009/r33447412.ctbin0 -> 15513 bytes
-rw-r--r--reveal/v5-000009/r33447412.nostr.json1
-rw-r--r--reveal/v5-000009/r33447412.tlock11
-rw-r--r--reveal/v5-000009/r33476212.ctbin0 -> 32042 bytes
-rw-r--r--reveal/v5-000009/r33476212.nostr.json1
-rw-r--r--reveal/v5-000009/r33476212.tlock11
-rw-r--r--reveal/v5-000009/r33533812.ctbin0 -> 1647 bytes
-rw-r--r--reveal/v5-000009/r33533812.nostr.json1
-rw-r--r--reveal/v5-000009/r33533812.tlock11
-rw-r--r--reveal/v5-000009/r33562612.ctbin0 -> 9589 bytes
-rw-r--r--reveal/v5-000009/r33562612.nostr.json1
-rw-r--r--reveal/v5-000009/r33562612.tlock11
-rw-r--r--reveal/v5-000009/r33591412.ctbin0 -> 1027 bytes
-rw-r--r--reveal/v5-000009/r33591412.nostr.json1
-rw-r--r--reveal/v5-000009/r33591412.tlock11
-rw-r--r--reveal/v5-000009/r33649012.ctbin0 -> 1024 bytes
-rw-r--r--reveal/v5-000009/r33649012.nostr.json1
-rw-r--r--reveal/v5-000009/r33649012.tlock11
-rw-r--r--reveal/v5-000009/r33706612.ctbin0 -> 1920 bytes
-rw-r--r--reveal/v5-000009/r33706612.nostr.json1
-rw-r--r--reveal/v5-000009/r33706612.tlock11
-rw-r--r--reveal/v5-000009/r34599412.ctbin0 -> 15307 bytes
-rw-r--r--reveal/v5-000009/r34599412.nostr.json1
-rw-r--r--reveal/v5-000009/r34599412.tlock11
-rw-r--r--reveal/v5-000009/r34628212.ctbin0 -> 31928 bytes
-rw-r--r--reveal/v5-000009/r34628212.nostr.json1
-rw-r--r--reveal/v5-000009/r34628212.tlock11
-rw-r--r--reveal/v5-000009/r34685812.ctbin0 -> 1687 bytes
-rw-r--r--reveal/v5-000009/r34685812.nostr.json1
-rw-r--r--reveal/v5-000009/r34685812.tlock11
-rw-r--r--reveal/v5-000009/r34714612.ctbin0 -> 9421 bytes
-rw-r--r--reveal/v5-000009/r34714612.nostr.json1
-rw-r--r--reveal/v5-000009/r34714612.tlock11
-rw-r--r--reveal/v5-000009/r34743412.ctbin0 -> 1032 bytes
-rw-r--r--reveal/v5-000009/r34743412.nostr.json1
-rw-r--r--reveal/v5-000009/r34743412.tlock11
-rw-r--r--reveal/v5-000009/r34801012.ctbin0 -> 1020 bytes
-rw-r--r--reveal/v5-000009/r34801012.nostr.json1
-rw-r--r--reveal/v5-000009/r34801012.tlock11
-rw-r--r--reveal/v5-000009/r34858612.ctbin0 -> 1816 bytes
-rw-r--r--reveal/v5-000009/r34858612.nostr.json1
-rw-r--r--reveal/v5-000009/r34858612.tlock11
-rw-r--r--reveal/v5-000009/r35607412.ctbin0 -> 5862 bytes
-rw-r--r--reveal/v5-000009/r35607412.nostr.json1
-rw-r--r--reveal/v5-000009/r35607412.tlock11
-rw-r--r--reveal/v5-000009/r35780212.ctbin0 -> 490 bytes
-rw-r--r--reveal/v5-000009/r35780212.nostr.json1
-rw-r--r--reveal/v5-000009/r35780212.tlock11
-rw-r--r--reveal/v5-000009/r36701812.ctbin0 -> 1022 bytes
-rw-r--r--reveal/v5-000009/r36701812.nostr.json1
-rw-r--r--reveal/v5-000009/r36701812.tlock11
-rw-r--r--reveal/v5-000009/r36759412.ctbin0 -> 5903 bytes
-rw-r--r--reveal/v5-000009/r36759412.nostr.json1
-rw-r--r--reveal/v5-000009/r36759412.tlock11
-rw-r--r--reveal/v5-000009/r36932212.ctbin0 -> 668 bytes
-rw-r--r--reveal/v5-000009/r36932212.nostr.json1
-rw-r--r--reveal/v5-000009/r36932212.tlock11
-rw-r--r--reveal/v5-000009/r37853812.ctbin0 -> 1020 bytes
-rw-r--r--reveal/v5-000009/r37853812.nostr.json1
-rw-r--r--reveal/v5-000009/r37853812.tlock11
-rw-r--r--reveal/v5-000009/seal.json43
64 files changed, 628 insertions, 0 deletions
diff --git a/reveal/v5-000009/check.py b/reveal/v5-000009/check.py
new file mode 100644
index 0000000..7f86b8d
--- /dev/null
+++ b/reveal/v5-000009/check.py
@@ -0,0 +1,319 @@
1#!/usr/bin/env python3
2"""
3Check Echo's self-revealing ledger seals (`sha256-live-v5`) without trusting Echo.
4
5 python3 check.py SEAL_DIR [SEAL_DIR ...] [--tle PATH] [--offline]
6
7Needs Python 3.11+, the `cryptography` package (ChaCha20-Poly1305) and drand's `tle` binary
8(`go install github.com/drand/tlock/cmd/tle@v1.2.0`). It imports nothing of Echo's: a checker that needs the thing it
9checks is not a checker, which is why it is copied, whole, into every seal directory.
10
11Each SEAL_DIR is one seal: `manifest.txt` (the exact text the seal's digest is the sha256 of), `seal.json`, and per
12reveal group `r<ROUND>.tlock` (the group's key, time-locked to that drand round) and `r<ROUND>.ct` (the group,
13encrypted under that key), and, once the group has been revealed, `r<ROUND>.held.json` (how many of its withheld
14lines Echo publishes no salt for, and why) and any number of `r<ROUND>.salts.<N>.json`: each the salts of withheld
15lines Echo decided to open and had not erased, each with its line. `manifest.txt.ots`, when present, is an
16OpenTimestamps proof over the manifest: `ots verify manifest.txt.ots` checks it against Bitcoin.
17
18What it checks, from the files alone and the beacon:
19 1. the manifest hashes to the seal's digest, and each seal names the one before it (when several are given);
20 2. each group's ciphertext and locked key hash to what the manifest commits, and the key is locked to the
21 manifest's round of the manifest's chain;
22 3. for every group whose round the beacon has signed: the round's signature as each relay serves it, the key
23 unlocked with it, the group decrypted, its bytes hashed to the committed digest, its lines and withheld lines
24 counted against the committed counts, its lines in id order, and every line's reveal day recomputed from its
25 own settling instant under the seal's named rule (`utc-day-after-close`: the first 00:00 UTC after
26 `settles_at`, else after the deadline);
27 4. for every opened group with releases: each names this seal, round and group and its own number; each released
28 salt and line hash to the withheld line's committed hash; no line is settled twice; and a hold, where there is
29 one, names the group and counts no more lines than are withheld;
30 5. once every group of every seal from the first is open and every withheld line released: the union of their v4
31 lines, sorted by id, rehashes to the v4 digest the last seal follows, so no sealed forecast was left out of a
32 reveal. Where a withheld line has no released salt (held, erased, or not yet released) that digest cannot be
33 rebuilt, and this says so and why: what is checked then is only that every forecast the v4 seal covers is in a
34 group, counted. A withheld line is never called verified.
35
36A group whose round is not yet signed, or whose withheld lines have no release yet, is reported as pending or held,
37not as a failure. Exit 0 when everything checkable passed, 1 when anything did not match.
38"""
39from __future__ import annotations
40
41import argparse
42import base64
43import hashlib
44import json
45import re
46import subprocess
47import sys
48import urllib.request
49import zlib
50from datetime import datetime, timedelta, timezone
51from pathlib import Path
52
53
54def sha(b: bytes) -> str:
55 return hashlib.sha256(b).hexdigest()
56
57
58def parse_manifest(text: str) -> dict:
59 lines = text.split("\n")
60 if lines[0] != "sha256-live-v5":
61 raise ValueError(f"not a v5 manifest: {lines[0]!r}")
62 m = {"groups": []}
63 for ln in lines[1:]:
64 word, _, rest = ln.partition(" ")
65 if word == "prev":
66 m["prev"] = None if rest == "-" else rest
67 elif word == "follows":
68 seq, digest, n = rest.split(" ")
69 m["follows"] = {"seq": int(seq), "digest": digest, "n": int(n)}
70 elif word == "covers":
71 m["covers"] = rest.split(" ")
72 elif word == "variant":
73 m["variant"] = json.loads(rest)
74 elif word == "counts":
75 m["n"], m["n_withheld"], m["n_groups"] = map(int, rest.split(" "))
76 elif word == "group":
77 r, at, n, w, digest, ct, key, late = rest.split(" ")
78 m["groups"].append({"round": int(r), "reveal_at": at, "n": int(n), "n_withheld": int(w),
79 "digest": digest, "ct": ct, "key": key, "late": late == "1"})
80 else:
81 raise ValueError(f"unknown manifest line {ln!r}")
82 return m
83
84
85def stanza(locked: str) -> tuple[int, str] | None:
86 body = "".join(ln for ln in locked.strip().splitlines() if not ln.startswith("-----"))
87 m = re.search(rb"-> tlock (\d+) ([0-9a-f]{64})", base64.b64decode(body))
88 return (int(m.group(1)), m.group(2).decode()) if m else None
89
90
91def round_at(beacon: dict, at: datetime) -> int:
92 t = at.timestamp()
93 whole = int(t) + (t != int(t))
94 if whole <= beacon["genesis_time"]:
95 return 1
96 return -(-(whole - beacon["genesis_time"]) // beacon["period"]) + 1
97
98
99def reveal_day(closes: datetime) -> datetime:
100 d = closes.astimezone(timezone.utc).date() + timedelta(days=1)
101 return datetime(d.year, d.month, d.day, tzinfo=timezone.utc)
102
103
104def parse_line(ln: str) -> dict:
105 """One line: `id|issued_at|deadline|forecaster|p|settlement|anchor<TAB>open:<v4>` or `...<TAB>withheld:<hex>`."""
106 numeric, tab, text = ln.partition("\t")
107 if not tab:
108 raise ValueError("a line without its text layer")
109 fid, issued, deadline, forecaster, p, rest = numeric.split("|", 5)
110 dec = json.JSONDecoder()
111 settle, end = dec.raw_decode(rest)
112 if rest[end] != "|":
113 raise ValueError("settlement not followed by the anchor")
114 anchor, end2 = dec.raw_decode(rest, end + 1)
115 if end2 != len(rest):
116 raise ValueError("trailing bytes after the anchor")
117 out = {"id": int(fid), "issued_at": issued, "deadline": deadline, "forecaster": forecaster, "p": float(p),
118 "settlement": settle, "anchor": anchor}
119 if text.startswith("open:"):
120 out["v4"] = text[5:]
121 if not out["v4"].startswith(f"{fid}|"):
122 raise ValueError("the text layer is another forecast's line")
123 elif re.fullmatch(r"withheld:[0-9a-f]{64}", text):
124 out["withheld"] = text[9:]
125 else:
126 raise ValueError(f"unknown text layer {text[:20]!r}")
127 return out
128
129
130def beacon_round(beacon: dict, rnd: int) -> dict:
131 """What each relay serves for the round: its signature, or why there is none."""
132 out = {}
133 for relay in beacon["relays"]:
134 url = f"{relay.rstrip('/')}/{beacon['chain_hash']}/public/{rnd}"
135 try:
136 with urllib.request.urlopen(url, timeout=20) as r: # noqa: S310 — the seal's own relays
137 out[relay] = json.loads(r.read()).get("signature")
138 except Exception as exc: # noqa: BLE001 — report, go on
139 out[relay] = f"unavailable ({type(exc).__name__})"
140 return out
141
142
143def unlock(tle: str, beacon: dict, locked: str) -> bytes | None:
144 """The key, or None while the round is unsigned. Each relay is tried in turn."""
145 errors = []
146 for relay in beacon["relays"]:
147 r = subprocess.run([tle, "-d", "-n", relay.rstrip("/") + "/", "-c", beacon["chain_hash"]],
148 input=locked.encode(), capture_output=True, timeout=120, check=False)
149 if r.returncode == 0:
150 return r.stdout
151 if b"too early" in r.stderr:
152 return None
153 errors.append(f"{relay}: {r.stderr.decode(errors='replace').strip()[-160:]}")
154 raise RuntimeError("; ".join(errors))
155
156
157def release(d: Path, seal_digest: str, g: dict, lines: list[dict], say) -> tuple[dict[int, str], int, str | None]:
158 """An opened group's releases and hold, checked against the group: (id -> the v4 line each released salt opens,
159 how many withheld lines were opened and found erased, and the hold's reason where Echo published one)."""
160 r = g["round"]
161 shut = {x["id"]: x["withheld"] for x in lines if "withheld" in x}
162 out, erased, seen, bad = {}, set(), set(), []
163 files = sorted(d.glob(f"r{r}.salts.*.json"), key=lambda p: int(p.name.split(".")[-2]))
164 for k, path in enumerate(files):
165 rel = json.loads(path.read_text())
166 say(rel.get("format") == "echo-reveal-salts/1" and rel.get("seal") == seal_digest
167 and rel.get("round") == r and rel.get("group") == g["digest"] and rel.get("n") == k
168 and path.name == f"r{r}.salts.{k}.json",
169 f"round {r}: release {k} names this seal, round and group, and follows the one before")
170 for x in rel.get("released", []):
171 i, line = x["id"], x["line"]
172 opens = (i in shut and i not in seen and line.startswith(f"{i}|")
173 and sha(bytes.fromhex(x["salt"]) + line.encode()) == shut[i])
174 if opens:
175 out[i] = line
176 else:
177 bad.append(i)
178 seen.add(i)
179 for i in rel.get("erased", []):
180 if i not in shut or i in seen:
181 bad.append(i)
182 erased.add(i)
183 seen.add(i)
184 if files:
185 say(not bad, f"round {r}: {len(out)} released lines open their committed hashes, {len(erased)} opened lines "
186 f"found erased, none settled twice" + (f" ({len(bad)} do not, e.g. {bad[:3]})" if bad else ""))
187 why = None
188 hold = d / f"r{r}.held.json"
189 if hold.exists():
190 h = json.loads(hold.read_text())
191 say(h.get("format") == "echo-reveal-held/1" and h.get("seal") == seal_digest and h.get("round") == r
192 and h.get("group") == g["digest"] and 0 <= h.get("held", -1) <= len(shut),
193 f"round {r}: the hold names this seal, round and group, and counts at most its withheld lines")
194 why = str(h.get("why") or "no reason given")
195 left = len(shut) - len(out) - len(erased)
196 if left:
197 print(f" .... round {r}: {left} withheld lines have no released salt: counted, not rehashed"
198 + (f" (Echo publishes none: {why})" if why else " (no release or hold published yet)"))
199 return out, len(erased), why
200
201
202def check(dirs: list[Path], tle: str = "tle", offline: bool = False) -> int:
203 from cryptography.hazmat.primitives.ciphers.aead import ChaCha20Poly1305
204
205 failed, pending, withheld, held, erased, union = 0, 0, 0, 0, 0, {}
206 reasons: set[str] = set()
207 first_prev = "unset"
208
209 def say(ok: bool, what: str) -> None:
210 nonlocal failed
211 failed += not ok
212 print(f" {'PASS' if ok else 'FAIL'} {what}")
213
214 prev_digest = None
215 seals = []
216 for d in dirs:
217 text = (d / "manifest.txt").read_bytes()
218 row = json.loads((d / "seal.json").read_text())
219 seals.append((d, text, row, parse_manifest(text.decode())))
220 seals.sort(key=lambda s: s[2]["seq"])
221 last = None
222 for i, (d, text, row, m) in enumerate(seals):
223 print(f"v5 seal {row['seq']}: {m['n']} forecasts in {m['n_groups']} reveal groups, {m['n_withheld']} withheld, "
224 f"follows v4 seal {m['follows']['seq']}")
225 say(sha(text) == row["digest"], f"sha256(manifest.txt) is the seal's digest {row['digest'][:16]}…")
226 say(len(m["groups"]) == m["n_groups"] and sum(g["n"] for g in m["groups"]) == m["n"]
227 and sum(g["n_withheld"] for g in m["groups"]) == m["n_withheld"], "the manifest's counts add up")
228 if i == 0:
229 first_prev = m["prev"]
230 else:
231 say(m["prev"] == prev_digest, "it names the seal before it")
232 prev_digest, last = row["digest"], m
233 b = m["variant"]["beacon"]
234 for g in m["groups"]:
235 r = g["round"]
236 ct, locked = (d / f"r{r}.ct").read_bytes(), (d / f"r{r}.tlock").read_text()
237 say(sha(ct) == g["ct"] and sha(locked.encode()) == g["key"],
238 f"round {r}: the ciphertext and the locked key are the committed ones")
239 say(stanza(locked) == (r, b["chain_hash"]), f"round {r}: the key is locked to that round of that chain")
240 say(round_at(b, datetime.fromisoformat(g["reveal_at"])) == r, f"round {r} is signed at {g['reveal_at']}")
241 if not offline:
242 sigs = beacon_round(b, r)
243 good = {s for s in sigs.values() if s and not s.startswith("unavailable")}
244 print(f" .... round {r} signature from {len(sigs)} relays: "
245 + ("not yet signed" if not good else f"{len(good)} distinct: {min(good)[:24]}…"))
246 if len(good) > 1:
247 say(False, f"round {r}: relays disagree on its signature")
248 key = unlock(tle, b, locked)
249 if key is None:
250 pending += 1
251 print(f" .... round {r} ({g['reveal_at']}) not yet signed: {g['n']} forecasts stay locked")
252 continue
253 try:
254 plain = zlib.decompress(ChaCha20Poly1305(key).decrypt(b"\x00" * 12, ct, None))
255 except Exception as exc: # noqa: BLE001 — a finding, not a crash
256 say(False, f"round {r}: the ciphertext does not open under its key ({type(exc).__name__})")
257 continue
258 say(sha(plain) == g["digest"], f"round {r}: the opened group hashes to its committed digest")
259 lines = [parse_line(ln) for ln in plain.decode().split("\n")]
260 ids = [x["id"] for x in lines]
261 say(len(lines) == g["n"] and sum("withheld" in x for x in lines) == g["n_withheld"],
262 f"round {r}: {len(lines)} lines, {g['n_withheld']} withheld, as committed")
263 say(ids == sorted(set(ids)), f"round {r}: lines in id order, none twice")
264 due = datetime.fromisoformat(g["reveal_at"])
265 if m["variant"].get("reveal") == "utc-day-after-close":
266 wrong = [x["id"] for x in lines if reveal_day(datetime.fromisoformat(
267 (x["settlement"] or {}).get("settles_at") or x["deadline"])) != due]
268 say(not wrong, f"round {r}: every line belongs to this reveal day"
269 + (f" ({len(wrong)} do not, e.g. {wrong[:3]})" if wrong else ""))
270 else:
271 print(f" .... round {r}: reveal rule {m['variant'].get('reveal')!r} is not one this checker "
272 "recomputes; which lines belong to the day is unchecked")
273 opened, gone, why = release(d, row["digest"], g, lines, say)
274 for x in lines:
275 if x["id"] in union:
276 say(False, f"forecast {x['id']} is in two groups")
277 union[x["id"]] = x.get("v4") or opened.get(x["id"])
278 shut = sum(1 for x in lines if "withheld" in x and x["id"] not in opened) - gone
279 erased += gone
280 if why is None:
281 withheld += shut
282 else:
283 held += shut
284 reasons.add(why)
285 if last is not None:
286 if first_prev is not None:
287 print(" .... completeness: the first seal given is not the chain's first; give every seal from it")
288 elif pending:
289 print(f" .... completeness: {pending} groups still locked; it is checkable once all have opened")
290 elif withheld or held or erased:
291 told = [f"{withheld} withheld lines not yet released"] if withheld else []
292 told += ([f"{held} withheld lines held, for which Echo publishes no salt ({'; '.join(sorted(reasons))})"]
293 if held else [])
294 told += [f"{erased} erased stay hashes"] if erased else []
295 print(f" .... completeness: {', '.join(told)}: those lines can be counted but not rehashed, so the v4 "
296 f"lines cannot all be rebuilt and the v4 digest is NOT checked; {len(union)} forecasts against "
297 f"the v4 seal's {last['follows']['n']}")
298 say(len(union) == last["follows"]["n"], "every forecast the v4 seal covers is in a group, counted")
299 else:
300 got = sha("\n".join(union[k] for k in sorted(union)).encode())
301 say(got == last["follows"]["digest"] and len(union) == last["follows"]["n"],
302 f"the union of {len(union)} lines rehashes to v4 seal {last['follows']['seq']}'s digest")
303 print("\nNOT VERIFIED" if failed else f"\nVERIFIED{f' ({pending} groups not yet revealed)' if pending else ''}")
304 return 1 if failed else 0
305
306
307def main(argv: list[str]) -> int:
308 ap = argparse.ArgumentParser(description=__doc__, formatter_class=argparse.RawDescriptionHelpFormatter)
309 ap.add_argument("dirs", nargs="*", default=[str(Path(__file__).resolve().parent)],
310 help="seal directories, any order (default: the one this script sits in)")
311 ap.add_argument("--tle", default="tle", help="the tle binary that unlocks a key once its round is signed")
312 ap.add_argument("--offline", action="store_true",
313 help="do not fetch each round's signature from the relays for display; tle still asks them")
314 args = ap.parse_args(argv)
315 return check([Path(d) for d in args.dirs], tle=args.tle, offline=args.offline)
316
317
318if __name__ == "__main__":
319 raise SystemExit(main(sys.argv[1:]))
diff --git a/reveal/v5-000009/manifest.txt b/reveal/v5-000009/manifest.txt
new file mode 100644
index 0000000..e117bdc
--- /dev/null
+++ b/reveal/v5-000009/manifest.txt
@@ -0,0 +1,26 @@
1sha256-live-v5
2prev 8a0ebba38fedca4ec75b165081248fadcbae9c0d5db85e3b5681c8ebfd61e765
3follows 39 0164ab79092a34a76b16650c7e25c8da34831ec6333bc4c8350da2b68353ad27 46650
4covers 2026-10-05T22:14:57.492859Z 2026-10-06T22:21:37.282794Z
5variant {"beacon":{"chain_hash":"52db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971","genesis_time":1692803367,"period":3,"relays":["https://api.drand.sh","https://api2.drand.sh","https://api3.drand.sh","https://drand.cloudflare.com"],"scheme":"bls-unchained-g1-rfc9380"},"cipher":"chacha20poly1305-zlib6-nonce0","gate":{"default":"withheld: a kept salt can be released later; an opened text can never be withdrawn","opened":"none","why":"no decision by Echo yet"},"line":"numeric<TAB>open:<v4 line> | numeric<TAB>withheld:sha256(salt||v4 line)","reveal":"utc-day-after-close","salts":"key ring: one content a seal, one part a line","tool":{"name":"tle","sha256":"69157d8c14a1d390d1b7744946288f83d4b10748471d5447f9abb77a5902c541","version":"tlock v1.2.0 -- github.com/drand/tlock"}}
6counts 2346 2346 20
7group 33447412 2026-10-28T00:00:00.000000Z 270 270 beed979b3405bd5d8d0e2fcb1c2b364f5938133309875edaf8f2eb1790f07e4c aed227bdd6bead000f6eebe0a0a41c315ba080b272f028e635c63f53bf49137c ece905b40a1f9d90d42ee75494b615007aa302f7a906b14ddd23a7e6348772df 0
8group 33476212 2026-10-29T00:00:00.000000Z 558 558 c2ebe8997cb76ae8769031ce91bd3e39567e92b83e16d49b422033cad08073b2 b9ec1ae97696c992cc80056d08a6f622ff7fe8b73ad8718a7755bf9e91d2eea0 5f6a55319eee54dbe7d16eda33848e4a18183a825cd79d212bfae5ec53813d4c 0
9group 33533812 2026-10-31T00:00:00.000000Z 24 24 97d214828c69ee1a4f1163ad0c811a700cc8df585ff3a24f38510d0e37ca25af 0d4579b3f05244c8bf4abab3a40f6da3e3f7d710472417a73f71f5fd102f9b05 dbd10c7a2de8f6e5af355ca870d499e32d62050b6bd7781e04127cb94c513d53 0
10group 33562612 2026-11-01T00:00:00.000000Z 162 162 c782ac0b22b669497714738bfe8371f37be4ce253eec2b6f77ba3e6d20a1e9d0 b4f91eaabd3b4dff7e574f0757cd0013cb22b9b36b7b5fa84719b5d8932c9116 33614cfb10187ea42951936e8222be1fb01a3b675809950c121cb07c12769070 0
11group 33591412 2026-11-02T00:00:00.000000Z 12 12 a4532016c5f2e30080c48399cc1b1c1a2bd2aff05d44f4ee7a61ab641d6a4ddf 505ac32f42bd1c70040a97efc85ef276344976cc024a6e32fab7ec60467aa7e9 f7d409ec01921b59744e4c4dfcb162a07f93376184778c96f13e7ec9aad3db9e 0
12group 33649012 2026-11-04T00:00:00.000000Z 12 12 87baf1b3ec500e8706d1ee7d4d2a888b3c85eefc56e91bc74fde0438c10508d9 824ba83345e0de4673b567109c4976e40ce0b1b1df24144b0335eb1d1b7f3e97 bf78f519452fecc352e4ba4e3f3a6bd66c06869708f75f2212a057e947ba8fef 0
13group 33706612 2026-11-06T00:00:00.000000Z 28 28 c3b08c2e15a76da2a34d96de7e32fa98e1d0578f842a59bfc51b38f905484d19 1c28dc4454228ed3d9e0dcda5c69e5800042059f2e13c0fd91423ad888832746 bc22a9bf9d1819a1d0056d88d9208e1b1ef1fbbe41f283f42513142604661a18 0
14group 34599412 2026-12-07T00:00:00.000000Z 267 267 56b3f7570c66ae50af5b1fb5b69129439154a304cda1e414e1d15fa1806e981c 4c048c98e89c4dbec8922b9b57e21c46e15b7873ae8cccd62e1d31d0fb6ac97e b4641d5620106e53f98ead8b0a5037b3dfd6454e6dac77d876a7e9a180c25ce4 0
15group 34628212 2026-12-08T00:00:00.000000Z 555 555 93013043e897fd0cccc654efc5a09a76dd2f76a0421c37ec70b960ffd08d07f5 7a060e73b05f5fba9f57622468cf4484517ef7d295db18a58c532ada23f4e19a 61965bf2dcf6b1a84c1bee7002f237d741efb27e58ed73d8c432daba542b65b6 0
16group 34685812 2026-12-10T00:00:00.000000Z 24 24 5c01c087fc234779d67a10ba8b35d4301e1608faf921120e951df96babca72b7 bec16e2d79466496e46bc4fd71b5489dfe5d7e07a5a74139594205bde8663173 ff96700dc0610db0cc8a610beda2e2491bcf34988329405547693042198fefd6 0
17group 34714612 2026-12-11T00:00:00.000000Z 159 159 11ba76e35c5dae7f2144705ab1f24b40d045ad1f6b1283d1ae3b84124f76a5b4 004f0211ffe144681a70d0cf08c903a860320d4c974415b3d8fed9de741ac569 001a835d7e83aaeaeb23f08502fa889edc9d11fa67cfc2f57f9755779566b1aa 0
18group 34743412 2026-12-12T00:00:00.000000Z 12 12 c710dd8a8e039f6fad9b6d3980d7d8a2daf618ca9220fb7648ff21372f5277bd ff3182b59025051922da91dcbb3d7710a5ff4bcce0379aa836002667ac156d55 398b1ee9dca9d2dde5e1f0d9ba9985beba9a2bf0cdc3202f6fc391550b0daeab 0
19group 34801012 2026-12-14T00:00:00.000000Z 12 12 81386cd98d524b57f21dbdeec6861f8bf06f565f2fe541a828ad7c4e5628d57c e7a47372985832ee45577806d33e56706cdd8ff424aa5bfb344cb0087535ccf1 e2b7bf57f13de353b1599e06687118487f01683a0a84f818ee59fd0342f590f7 0
20group 34858612 2026-12-16T00:00:00.000000Z 26 26 55248e7ceb674d6e8618adb5532cd7366956de5cdf353a587a41785436ec9464 f36aa1b6a295fc1263af4a181f87d5abf64ceffb2122c946b4af7aa1af900461 13aaf2d40292413324f13707042862b0a3f9a47d63bdce856e3b4b5a724a44ed 0
21group 35607412 2027-01-11T00:00:00.000000Z 96 96 845593a308595ba65c5ef1a0ba2ef3dfe00307fff59098f0648a75ad663b3576 4c58b42d0049610991bdcb0b75a6925025010e8154bb0ce88ad2c263bd2104a3 733b3afe3f7861ff379148d8ee0bb602bbdc9af5943c5d842ed906023d49ef16 0
22group 35780212 2027-01-17T00:00:00.000000Z 3 3 52c5440c0bab82712bbeda92c0aae9bdb14524dec5474f98f153c0c3caebabab 69922d4eb2d0aada00bf6b85a65eeadfc07a1d36db798dce154526cc939b2456 6d3f4a6c516b5c19464cbfd6df040f889d9eb9c72452c94a12a43d3ecf02cf5a 0
23group 36701812 2027-02-18T00:00:00.000000Z 12 12 0ab0c1c04d5a9068858c8bdd2dd19dc8a9b6976099921543e7c796f979f9a149 0ed974e08ff012d718c63fb6742830ab8e13f692af40abb21bb70559d729a766 b596fe9a30095dff07a99d9e095c1793851846d589aa850b9e337ee24adf1fd0 0
24group 36759412 2027-02-20T00:00:00.000000Z 96 96 6f8619c39620c4b3fdefa009dcae3c4d4ab0640c3b2c2e42ba133acce35fa37e dc99f5ba0fa6aa20619cef01ead6edf1b57dea611eec4d00d2c340745fc495cf 65e875d17fa7cd24ae16575b10d38348582e0af23c296774ba56507a28148e2b 0
25group 36932212 2027-02-26T00:00:00.000000Z 6 6 39f3989cf148b42f7770109515c47b94e8aa84024af41701d6e8f05653e2e52a e64e34a52df4aaa782ec3e44171697b5fac729220c68dd611d4f533e3a52ed5e 176c664213bacb7283ad7f03b9e9d103a67fdddf855e6f77ceadbc1645212caf 0
26group 37853812 2027-03-30T00:00:00.000000Z 12 12 1735ea3f806bfcec1d3a02ba9f47291744e9927c30ea3632f6155dc718c8c71f 6da59a5b6f4881a7b7847924dacfe9bfdeb083edf1b6cd9cb72508de6b0efe16 f6f5aa1bdad235f97d29bc0a2f4ca0e4cb54999eb341743683b8e4c2d066f58e 0 \ No newline at end of file
diff --git a/reveal/v5-000009/manifest.txt.ots b/reveal/v5-000009/manifest.txt.ots
new file mode 100644
index 0000000..79c11b0
--- /dev/null
+++ b/reveal/v5-000009/manifest.txt.ots
Binary files differ
diff --git a/reveal/v5-000009/r33447412.ct b/reveal/v5-000009/r33447412.ct
new file mode 100644
index 0000000..7e9604e
--- /dev/null
+++ b/reveal/v5-000009/r33447412.ct
Binary files differ
diff --git a/reveal/v5-000009/r33447412.nostr.json b/reveal/v5-000009/r33447412.nostr.json
new file mode 100644
index 0000000..3fa6252
--- /dev/null
+++ b/reveal/v5-000009/r33447412.nostr.json
@@ -0,0 +1 @@
{"content":"-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHRsb2NrIDMzNDQ3NDEyIDUyZGI5YmE3\nMGUwY2MwZjZlYWY3ODAzZGQwNzQ0N2ExZjU0Nzc3MzVmZDNmNjYxNzkyYmE5NDYw\nMGM4NGU5NzEKbFhjbjB6NWVCaHQvNkNWQ01RZ2lrcjZPdzE2YWtkK2FqNTh1U3Z1\nRENiVkk1NnFDM21jOWxCclVQN1dSN1YrTQpHRFhpZERHbFE5eFowc3VBWStWeDlX\nd1JWYnY3am1vYVhVajE1RE1TaU1HbVdqdmdvekVMVGJNSFJqaUtwbUUvCk13Vktw\nWmJlNEFyeHdiN3ZmRHNUSVk4RVZybitYSDVjZlJ4U3ZnOVFqU3cKLS0tIGpEcFV5\nY2t2WGxLakxieTYyUzdkb3V5VGlXRGNiUjRQQmhiUVNzY2R1dUUKd2gEAURlKzFY\n/a6Sk+wd8vDrVF1O2uxOTCFyz73Azn3l2PNL8hvU2kRZqczclguKaaOUs1e7Ea0f\noZKWmo4b2A==\n-----END AGE ENCRYPTED FILE-----\n","tags":[["t","echo-ledger-reveal"],["round","33447412"],["reveal_at","2026-10-28T00:00:00.000000Z"],["chain","52db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971"],["digest","beed979b3405bd5d8d0e2fcb1c2b364f5938133309875edaf8f2eb1790f07e4c"],["ct","aed227bdd6bead000f6eebe0a0a41c315ba080b272f028e635c63f53bf49137c"],["seal","f7dd3d54a02d0aa327e76a1ec41d89f8b0fa700247dfad7ebf0c82ab889004c3"]]}
diff --git a/reveal/v5-000009/r33447412.tlock b/reveal/v5-000009/r33447412.tlock
new file mode 100644
index 0000000..ea26de7
--- /dev/null
+++ b/reveal/v5-000009/r33447412.tlock
@@ -0,0 +1,11 @@
1-----BEGIN AGE ENCRYPTED FILE-----
2YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHRsb2NrIDMzNDQ3NDEyIDUyZGI5YmE3
3MGUwY2MwZjZlYWY3ODAzZGQwNzQ0N2ExZjU0Nzc3MzVmZDNmNjYxNzkyYmE5NDYw
4MGM4NGU5NzEKbFhjbjB6NWVCaHQvNkNWQ01RZ2lrcjZPdzE2YWtkK2FqNTh1U3Z1
5RENiVkk1NnFDM21jOWxCclVQN1dSN1YrTQpHRFhpZERHbFE5eFowc3VBWStWeDlX
6d1JWYnY3am1vYVhVajE1RE1TaU1HbVdqdmdvekVMVGJNSFJqaUtwbUUvCk13Vktw
7WmJlNEFyeHdiN3ZmRHNUSVk4RVZybitYSDVjZlJ4U3ZnOVFqU3cKLS0tIGpEcFV5
8Y2t2WGxLakxieTYyUzdkb3V5VGlXRGNiUjRQQmhiUVNzY2R1dUUKd2gEAURlKzFY
9/a6Sk+wd8vDrVF1O2uxOTCFyz73Azn3l2PNL8hvU2kRZqczclguKaaOUs1e7Ea0f
10oZKWmo4b2A==
11-----END AGE ENCRYPTED FILE-----
diff --git a/reveal/v5-000009/r33476212.ct b/reveal/v5-000009/r33476212.ct
new file mode 100644
index 0000000..80dc396
--- /dev/null
+++ b/reveal/v5-000009/r33476212.ct
Binary files differ
diff --git a/reveal/v5-000009/r33476212.nostr.json b/reveal/v5-000009/r33476212.nostr.json
new file mode 100644
index 0000000..ee2c758
--- /dev/null
+++ b/reveal/v5-000009/r33476212.nostr.json
@@ -0,0 +1 @@
{"content":"-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHRsb2NrIDMzNDc2MjEyIDUyZGI5YmE3\nMGUwY2MwZjZlYWY3ODAzZGQwNzQ0N2ExZjU0Nzc3MzVmZDNmNjYxNzkyYmE5NDYw\nMGM4NGU5NzEKclFkQmRyRVpFNEVsZ05Eb1UxR2tQbGdSQWUxNmZyTko5MXIvMzN1\nSGxOR242U2ZuNGJ2S0ZkYmVTYkkrU0FMRgpEWXduQ24wbWNqMWthT0Q1N2FJME95\nRHlzbWx2R1lzU1VnYkdlN1pUbEYyUkY1SmU3SlFreWJES21UbnFDaGUwClpyYUx4\nS1VZcTF3MGVyWDkzdzlldUFxVWNzS0dlVkIwR25vMEMvVndvL1kKLS0tIE9DdGtP\nb3FqYXJRZHdGKzVHYjhjck1vRHJuakFBNDc1ZkxqR2lIeWhSK1EK3P02XDKxnvXA\nwRBeLg8xSHcquJZSIpDREpcdn3UrLpeh2Qb3xyVucTU3frixx1EWLqN+AYiiEJuN\nn7R6buyfuA==\n-----END AGE ENCRYPTED FILE-----\n","tags":[["t","echo-ledger-reveal"],["round","33476212"],["reveal_at","2026-10-29T00:00:00.000000Z"],["chain","52db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971"],["digest","c2ebe8997cb76ae8769031ce91bd3e39567e92b83e16d49b422033cad08073b2"],["ct","b9ec1ae97696c992cc80056d08a6f622ff7fe8b73ad8718a7755bf9e91d2eea0"],["seal","f7dd3d54a02d0aa327e76a1ec41d89f8b0fa700247dfad7ebf0c82ab889004c3"]]}
diff --git a/reveal/v5-000009/r33476212.tlock b/reveal/v5-000009/r33476212.tlock
new file mode 100644
index 0000000..cfafcbf
--- /dev/null
+++ b/reveal/v5-000009/r33476212.tlock
@@ -0,0 +1,11 @@
1-----BEGIN AGE ENCRYPTED FILE-----
2YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHRsb2NrIDMzNDc2MjEyIDUyZGI5YmE3
3MGUwY2MwZjZlYWY3ODAzZGQwNzQ0N2ExZjU0Nzc3MzVmZDNmNjYxNzkyYmE5NDYw
4MGM4NGU5NzEKclFkQmRyRVpFNEVsZ05Eb1UxR2tQbGdSQWUxNmZyTko5MXIvMzN1
5SGxOR242U2ZuNGJ2S0ZkYmVTYkkrU0FMRgpEWXduQ24wbWNqMWthT0Q1N2FJME95
6RHlzbWx2R1lzU1VnYkdlN1pUbEYyUkY1SmU3SlFreWJES21UbnFDaGUwClpyYUx4
7S1VZcTF3MGVyWDkzdzlldUFxVWNzS0dlVkIwR25vMEMvVndvL1kKLS0tIE9DdGtP
8b3FqYXJRZHdGKzVHYjhjck1vRHJuakFBNDc1ZkxqR2lIeWhSK1EK3P02XDKxnvXA
9wRBeLg8xSHcquJZSIpDREpcdn3UrLpeh2Qb3xyVucTU3frixx1EWLqN+AYiiEJuN
10n7R6buyfuA==
11-----END AGE ENCRYPTED FILE-----
diff --git a/reveal/v5-000009/r33533812.ct b/reveal/v5-000009/r33533812.ct
new file mode 100644
index 0000000..c4d6019
--- /dev/null
+++ b/reveal/v5-000009/r33533812.ct
Binary files differ
diff --git a/reveal/v5-000009/r33533812.nostr.json b/reveal/v5-000009/r33533812.nostr.json
new file mode 100644
index 0000000..2ac01f5
--- /dev/null
+++ b/reveal/v5-000009/r33533812.nostr.json
@@ -0,0 +1 @@
{"content":"-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHRsb2NrIDMzNTMzODEyIDUyZGI5YmE3\nMGUwY2MwZjZlYWY3ODAzZGQwNzQ0N2ExZjU0Nzc3MzVmZDNmNjYxNzkyYmE5NDYw\nMGM4NGU5NzEKZzQ4aDgvbklHS0s2eS8zUHJZMXRkL0liUmhDYWlIWTArR3Ixb3Vj\nempEM1ZxRkJMdGo0bHRIcUU3cUJhT0tFcApEL1M3dzNUSmdBZjZjZHRqQm0yUzdW\nWEtUSUhndUpQOE9wVFFzQjNOREsxQmNlOFIxemwxWnpFVjFsVDMyOFRWCld4ZDlr\nT2JNWW1jM1dqUzFOMWNCUUJtSW1oV0lyYkxZL25CblN2Q1haeTgKLS0tIGZoclh6\nUURhVVRUSStHV0tYVGxWclN2UXJYYmpiKzJpeUR3cTZUTlNPbncKeT+VqFpFIomH\nkWkKoS5WnOLf0G32CRc24RhdyiuLq3Y7GZ0UgOhIP73nuZnoQz4l297O/pxM4YWN\ngPnqIM7ANQ==\n-----END AGE ENCRYPTED FILE-----\n","tags":[["t","echo-ledger-reveal"],["round","33533812"],["reveal_at","2026-10-31T00:00:00.000000Z"],["chain","52db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971"],["digest","97d214828c69ee1a4f1163ad0c811a700cc8df585ff3a24f38510d0e37ca25af"],["ct","0d4579b3f05244c8bf4abab3a40f6da3e3f7d710472417a73f71f5fd102f9b05"],["seal","f7dd3d54a02d0aa327e76a1ec41d89f8b0fa700247dfad7ebf0c82ab889004c3"]]}
diff --git a/reveal/v5-000009/r33533812.tlock b/reveal/v5-000009/r33533812.tlock
new file mode 100644
index 0000000..5b30f55
--- /dev/null
+++ b/reveal/v5-000009/r33533812.tlock
@@ -0,0 +1,11 @@
1-----BEGIN AGE ENCRYPTED FILE-----
2YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHRsb2NrIDMzNTMzODEyIDUyZGI5YmE3
3MGUwY2MwZjZlYWY3ODAzZGQwNzQ0N2ExZjU0Nzc3MzVmZDNmNjYxNzkyYmE5NDYw
4MGM4NGU5NzEKZzQ4aDgvbklHS0s2eS8zUHJZMXRkL0liUmhDYWlIWTArR3Ixb3Vj
5empEM1ZxRkJMdGo0bHRIcUU3cUJhT0tFcApEL1M3dzNUSmdBZjZjZHRqQm0yUzdW
6WEtUSUhndUpQOE9wVFFzQjNOREsxQmNlOFIxemwxWnpFVjFsVDMyOFRWCld4ZDlr
7T2JNWW1jM1dqUzFOMWNCUUJtSW1oV0lyYkxZL25CblN2Q1haeTgKLS0tIGZoclh6
8UURhVVRUSStHV0tYVGxWclN2UXJYYmpiKzJpeUR3cTZUTlNPbncKeT+VqFpFIomH
9kWkKoS5WnOLf0G32CRc24RhdyiuLq3Y7GZ0UgOhIP73nuZnoQz4l297O/pxM4YWN
10gPnqIM7ANQ==
11-----END AGE ENCRYPTED FILE-----
diff --git a/reveal/v5-000009/r33562612.ct b/reveal/v5-000009/r33562612.ct
new file mode 100644
index 0000000..d973d30
--- /dev/null
+++ b/reveal/v5-000009/r33562612.ct
Binary files differ
diff --git a/reveal/v5-000009/r33562612.nostr.json b/reveal/v5-000009/r33562612.nostr.json
new file mode 100644
index 0000000..c62ec7d
--- /dev/null
+++ b/reveal/v5-000009/r33562612.nostr.json
@@ -0,0 +1 @@
{"content":"-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHRsb2NrIDMzNTYyNjEyIDUyZGI5YmE3\nMGUwY2MwZjZlYWY3ODAzZGQwNzQ0N2ExZjU0Nzc3MzVmZDNmNjYxNzkyYmE5NDYw\nMGM4NGU5NzEKZ2J5akZzcytuNXowZEF4ZGVRV3haWnlJNFdJdzZGMDJoWGdqM05C\nOGh1UTJLTWZGVnAxb0E3Z0prZ2VBM1FPagpEaEN5OW9mVTVGS3JqQkxXUnhVUlh6\nZjlUZHVxRHMzRllONi83L2dCNURQTm5HTmczbURTSFRDekZiYm0yU3I3ClZJT2h2\ndzhTcnZldEllR25RVkZId0gveGhLNVdxdFlZK0t6RGtyS2dDcEUKLS0tIGtGajFK\nUmZPQmh2eHBUV041VXQ3MTBXdXJsTCtOYlNBNDIrWDRkNGNQMUkKUqRk75lRpt5x\nNMYybp9VRpO32KFDO+HRnKnjavf1vG3l2CKwRxFN0SEhTASoQ5wfIT/qSnxqBiBs\nPmkqg+yExg==\n-----END AGE ENCRYPTED FILE-----\n","tags":[["t","echo-ledger-reveal"],["round","33562612"],["reveal_at","2026-11-01T00:00:00.000000Z"],["chain","52db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971"],["digest","c782ac0b22b669497714738bfe8371f37be4ce253eec2b6f77ba3e6d20a1e9d0"],["ct","b4f91eaabd3b4dff7e574f0757cd0013cb22b9b36b7b5fa84719b5d8932c9116"],["seal","f7dd3d54a02d0aa327e76a1ec41d89f8b0fa700247dfad7ebf0c82ab889004c3"]]}
diff --git a/reveal/v5-000009/r33562612.tlock b/reveal/v5-000009/r33562612.tlock
new file mode 100644
index 0000000..c795c47
--- /dev/null
+++ b/reveal/v5-000009/r33562612.tlock
@@ -0,0 +1,11 @@
1-----BEGIN AGE ENCRYPTED FILE-----
2YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHRsb2NrIDMzNTYyNjEyIDUyZGI5YmE3
3MGUwY2MwZjZlYWY3ODAzZGQwNzQ0N2ExZjU0Nzc3MzVmZDNmNjYxNzkyYmE5NDYw
4MGM4NGU5NzEKZ2J5akZzcytuNXowZEF4ZGVRV3haWnlJNFdJdzZGMDJoWGdqM05C
5OGh1UTJLTWZGVnAxb0E3Z0prZ2VBM1FPagpEaEN5OW9mVTVGS3JqQkxXUnhVUlh6
6ZjlUZHVxRHMzRllONi83L2dCNURQTm5HTmczbURTSFRDekZiYm0yU3I3ClZJT2h2
7dzhTcnZldEllR25RVkZId0gveGhLNVdxdFlZK0t6RGtyS2dDcEUKLS0tIGtGajFK
8UmZPQmh2eHBUV041VXQ3MTBXdXJsTCtOYlNBNDIrWDRkNGNQMUkKUqRk75lRpt5x
9NMYybp9VRpO32KFDO+HRnKnjavf1vG3l2CKwRxFN0SEhTASoQ5wfIT/qSnxqBiBs
10Pmkqg+yExg==
11-----END AGE ENCRYPTED FILE-----
diff --git a/reveal/v5-000009/r33591412.ct b/reveal/v5-000009/r33591412.ct
new file mode 100644
index 0000000..53f5ac5
--- /dev/null
+++ b/reveal/v5-000009/r33591412.ct
Binary files differ
diff --git a/reveal/v5-000009/r33591412.nostr.json b/reveal/v5-000009/r33591412.nostr.json
new file mode 100644
index 0000000..92b241a
--- /dev/null
+++ b/reveal/v5-000009/r33591412.nostr.json
@@ -0,0 +1 @@
{"content":"-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHRsb2NrIDMzNTkxNDEyIDUyZGI5YmE3\nMGUwY2MwZjZlYWY3ODAzZGQwNzQ0N2ExZjU0Nzc3MzVmZDNmNjYxNzkyYmE5NDYw\nMGM4NGU5NzEKcG00c2JWVXhMNEU5V0cwN2ZWSHNGV25DZlp1YnFzd0duTEk5MkMz\nRVVEVlhnNUpYMlV5L2FrSXpZV0s0Uk9ZMQpCQ0lmRG5UcmlkaFZqSkpnWUFDZVMx\nRWtaNHhkUXZhTjNrYkNkbHlndGlReTNRaG5ieFV4bUt0RG9oaU5EcDJ0ClkwQVVL\nTmd3R1BuNGpNME1yWVYrNExXTnBYbzZOYnJoMDg5TnRUdTZZUjAKLS0tIEh6T1dN\nQ3NmL1lTTlpvOS93THZ4SFBGUzBZemVxNEorQU5kKzFTZml0YTQKvKQ7yb0Dusr4\nzb6RhSfMpntbs7OMs+108IukKClRRJiZcDH5usIrh1EPo+3WYzIwolnPfhJMuZPm\nh7r/fxijIg==\n-----END AGE ENCRYPTED FILE-----\n","tags":[["t","echo-ledger-reveal"],["round","33591412"],["reveal_at","2026-11-02T00:00:00.000000Z"],["chain","52db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971"],["digest","a4532016c5f2e30080c48399cc1b1c1a2bd2aff05d44f4ee7a61ab641d6a4ddf"],["ct","505ac32f42bd1c70040a97efc85ef276344976cc024a6e32fab7ec60467aa7e9"],["seal","f7dd3d54a02d0aa327e76a1ec41d89f8b0fa700247dfad7ebf0c82ab889004c3"]]}
diff --git a/reveal/v5-000009/r33591412.tlock b/reveal/v5-000009/r33591412.tlock
new file mode 100644
index 0000000..b58b6f1
--- /dev/null
+++ b/reveal/v5-000009/r33591412.tlock
@@ -0,0 +1,11 @@
1-----BEGIN AGE ENCRYPTED FILE-----
2YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHRsb2NrIDMzNTkxNDEyIDUyZGI5YmE3
3MGUwY2MwZjZlYWY3ODAzZGQwNzQ0N2ExZjU0Nzc3MzVmZDNmNjYxNzkyYmE5NDYw
4MGM4NGU5NzEKcG00c2JWVXhMNEU5V0cwN2ZWSHNGV25DZlp1YnFzd0duTEk5MkMz
5RVVEVlhnNUpYMlV5L2FrSXpZV0s0Uk9ZMQpCQ0lmRG5UcmlkaFZqSkpnWUFDZVMx
6RWtaNHhkUXZhTjNrYkNkbHlndGlReTNRaG5ieFV4bUt0RG9oaU5EcDJ0ClkwQVVL
7Tmd3R1BuNGpNME1yWVYrNExXTnBYbzZOYnJoMDg5TnRUdTZZUjAKLS0tIEh6T1dN
8Q3NmL1lTTlpvOS93THZ4SFBGUzBZemVxNEorQU5kKzFTZml0YTQKvKQ7yb0Dusr4
9zb6RhSfMpntbs7OMs+108IukKClRRJiZcDH5usIrh1EPo+3WYzIwolnPfhJMuZPm
10h7r/fxijIg==
11-----END AGE ENCRYPTED FILE-----
diff --git a/reveal/v5-000009/r33649012.ct b/reveal/v5-000009/r33649012.ct
new file mode 100644
index 0000000..c6fa5da
--- /dev/null
+++ b/reveal/v5-000009/r33649012.ct
Binary files differ
diff --git a/reveal/v5-000009/r33649012.nostr.json b/reveal/v5-000009/r33649012.nostr.json
new file mode 100644
index 0000000..ee89824
--- /dev/null
+++ b/reveal/v5-000009/r33649012.nostr.json
@@ -0,0 +1 @@
{"content":"-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHRsb2NrIDMzNjQ5MDEyIDUyZGI5YmE3\nMGUwY2MwZjZlYWY3ODAzZGQwNzQ0N2ExZjU0Nzc3MzVmZDNmNjYxNzkyYmE5NDYw\nMGM4NGU5NzEKcVNEVmoxSzhnVXlNdVM3R0kwVXBRZFJCbUpmb1YzSVNmZ1JYMlRE\nZ3g2TkFoMExPWmg5TGxlZmMzYjZGQk5RMgpENU95WklCL25ocUZvd0NFS2M1OTM0\nWWJZVkVaMTFGYkRwRkw0M2RtN21zRSs1Wlo5emFYR1lsRzhvTHJYQTgrClFTYVhO\ndEZMb3VhWDV5TnQrMGFtUHJVNHI4TlZ0RG9EeWpvd0cveExZWHcKLS0tIFRIdnRl\nVjRYS05oZml6MXR2VEo5VVl3QnJrMVhaSnd6TG9XeUhraFBYaU0K4beNZwwVw6b7\n1MVdl27wq+7SWiGovs17ridBeM7RU+TMlSC5KP4jVYz5Z/KYY24Bi6/24igxE3ZL\ntShPxRMcNQ==\n-----END AGE ENCRYPTED FILE-----\n","tags":[["t","echo-ledger-reveal"],["round","33649012"],["reveal_at","2026-11-04T00:00:00.000000Z"],["chain","52db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971"],["digest","87baf1b3ec500e8706d1ee7d4d2a888b3c85eefc56e91bc74fde0438c10508d9"],["ct","824ba83345e0de4673b567109c4976e40ce0b1b1df24144b0335eb1d1b7f3e97"],["seal","f7dd3d54a02d0aa327e76a1ec41d89f8b0fa700247dfad7ebf0c82ab889004c3"]]}
diff --git a/reveal/v5-000009/r33649012.tlock b/reveal/v5-000009/r33649012.tlock
new file mode 100644
index 0000000..1e4f269
--- /dev/null
+++ b/reveal/v5-000009/r33649012.tlock
@@ -0,0 +1,11 @@
1-----BEGIN AGE ENCRYPTED FILE-----
2YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHRsb2NrIDMzNjQ5MDEyIDUyZGI5YmE3
3MGUwY2MwZjZlYWY3ODAzZGQwNzQ0N2ExZjU0Nzc3MzVmZDNmNjYxNzkyYmE5NDYw
4MGM4NGU5NzEKcVNEVmoxSzhnVXlNdVM3R0kwVXBRZFJCbUpmb1YzSVNmZ1JYMlRE
5Z3g2TkFoMExPWmg5TGxlZmMzYjZGQk5RMgpENU95WklCL25ocUZvd0NFS2M1OTM0
6WWJZVkVaMTFGYkRwRkw0M2RtN21zRSs1Wlo5emFYR1lsRzhvTHJYQTgrClFTYVhO
7dEZMb3VhWDV5TnQrMGFtUHJVNHI4TlZ0RG9EeWpvd0cveExZWHcKLS0tIFRIdnRl
8VjRYS05oZml6MXR2VEo5VVl3QnJrMVhaSnd6TG9XeUhraFBYaU0K4beNZwwVw6b7
91MVdl27wq+7SWiGovs17ridBeM7RU+TMlSC5KP4jVYz5Z/KYY24Bi6/24igxE3ZL
10tShPxRMcNQ==
11-----END AGE ENCRYPTED FILE-----
diff --git a/reveal/v5-000009/r33706612.ct b/reveal/v5-000009/r33706612.ct
new file mode 100644
index 0000000..d8352d7
--- /dev/null
+++ b/reveal/v5-000009/r33706612.ct
Binary files differ
diff --git a/reveal/v5-000009/r33706612.nostr.json b/reveal/v5-000009/r33706612.nostr.json
new file mode 100644
index 0000000..ed47855
--- /dev/null
+++ b/reveal/v5-000009/r33706612.nostr.json
@@ -0,0 +1 @@
{"content":"-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHRsb2NrIDMzNzA2NjEyIDUyZGI5YmE3\nMGUwY2MwZjZlYWY3ODAzZGQwNzQ0N2ExZjU0Nzc3MzVmZDNmNjYxNzkyYmE5NDYw\nMGM4NGU5NzEKazV1SkJaS29MWGcySE82QWVSZ2VDdTAyTEI1WFVqb2VCSWZydmtB\nV2RuN0RYWjF6VFJFcG56Z2R5Tkh1Y1NPbgpGV2pBSkhLcTN4SXljSWNFSWJJTjdq\nbU9HanlaSllRWCtnUGVIamxCTmNpeDZVbER2K3dXM0lPUUdENzVrcHZOClh4c2Jh\nRUFyU3FCcE1FTi8vZUpnd3lVc2sySXVLcjA4MUw1Rjh1NTMyU3cKLS0tICs1SDY2\nRFJvV29uYVM0MzdEMmZ4b0xxVFVoeS9NcTJHNnoyV1RHVlVXcFEKZhkECCFkjHBm\naurORTeH4H5uUd40fqnXynw6Eakzda68tpXUnY3CzqTvViiu107DpPuK4Ub365+V\n8InRrLGrGg==\n-----END AGE ENCRYPTED FILE-----\n","tags":[["t","echo-ledger-reveal"],["round","33706612"],["reveal_at","2026-11-06T00:00:00.000000Z"],["chain","52db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971"],["digest","c3b08c2e15a76da2a34d96de7e32fa98e1d0578f842a59bfc51b38f905484d19"],["ct","1c28dc4454228ed3d9e0dcda5c69e5800042059f2e13c0fd91423ad888832746"],["seal","f7dd3d54a02d0aa327e76a1ec41d89f8b0fa700247dfad7ebf0c82ab889004c3"]]}
diff --git a/reveal/v5-000009/r33706612.tlock b/reveal/v5-000009/r33706612.tlock
new file mode 100644
index 0000000..f659361
--- /dev/null
+++ b/reveal/v5-000009/r33706612.tlock
@@ -0,0 +1,11 @@
1-----BEGIN AGE ENCRYPTED FILE-----
2YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHRsb2NrIDMzNzA2NjEyIDUyZGI5YmE3
3MGUwY2MwZjZlYWY3ODAzZGQwNzQ0N2ExZjU0Nzc3MzVmZDNmNjYxNzkyYmE5NDYw
4MGM4NGU5NzEKazV1SkJaS29MWGcySE82QWVSZ2VDdTAyTEI1WFVqb2VCSWZydmtB
5V2RuN0RYWjF6VFJFcG56Z2R5Tkh1Y1NPbgpGV2pBSkhLcTN4SXljSWNFSWJJTjdq
6bU9HanlaSllRWCtnUGVIamxCTmNpeDZVbER2K3dXM0lPUUdENzVrcHZOClh4c2Jh
7RUFyU3FCcE1FTi8vZUpnd3lVc2sySXVLcjA4MUw1Rjh1NTMyU3cKLS0tICs1SDY2
8RFJvV29uYVM0MzdEMmZ4b0xxVFVoeS9NcTJHNnoyV1RHVlVXcFEKZhkECCFkjHBm
9aurORTeH4H5uUd40fqnXynw6Eakzda68tpXUnY3CzqTvViiu107DpPuK4Ub365+V
108InRrLGrGg==
11-----END AGE ENCRYPTED FILE-----
diff --git a/reveal/v5-000009/r34599412.ct b/reveal/v5-000009/r34599412.ct
new file mode 100644
index 0000000..409018a
--- /dev/null
+++ b/reveal/v5-000009/r34599412.ct
Binary files differ
diff --git a/reveal/v5-000009/r34599412.nostr.json b/reveal/v5-000009/r34599412.nostr.json
new file mode 100644
index 0000000..a897636
--- /dev/null
+++ b/reveal/v5-000009/r34599412.nostr.json
@@ -0,0 +1 @@
{"content":"-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHRsb2NrIDM0NTk5NDEyIDUyZGI5YmE3\nMGUwY2MwZjZlYWY3ODAzZGQwNzQ0N2ExZjU0Nzc3MzVmZDNmNjYxNzkyYmE5NDYw\nMGM4NGU5NzEKbFd4WldZd0k2WExFd1M4bUtqZWQ0Y21RRFlqeHlpUGI0MmRYNDRl\nZXRLeFJjem80Q245NndLZ2V0dzF6WVdrUQpGb3Fuang5ZklaU01pM0JqelNnNkl0\nSjZQUzJBSkNNT3NzVWc2SElGWWRrVkEvaTd4bTlwWnBzUFRld29XMXBaCk9idE5n\nWlRIbUZIWVR0OCs5UGZqM0pEUlE2OGEvOU5qZDZldWxudi9DcEEKLS0tIG9TemxR\nZ0NtMms2LzI0U0oyYVBBUWhQOTYwMFBmMkR2cTY3cEZ3enREM2MKGIv/aI+LBGT8\nLFscEuB8NhQ9xxypC2MNUYPWnlM1Ffk0U3P8Yj+tDupWWV1CmkwI0CuBbLbrWfbW\n9O9IAGd/5A==\n-----END AGE ENCRYPTED FILE-----\n","tags":[["t","echo-ledger-reveal"],["round","34599412"],["reveal_at","2026-12-07T00:00:00.000000Z"],["chain","52db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971"],["digest","56b3f7570c66ae50af5b1fb5b69129439154a304cda1e414e1d15fa1806e981c"],["ct","4c048c98e89c4dbec8922b9b57e21c46e15b7873ae8cccd62e1d31d0fb6ac97e"],["seal","f7dd3d54a02d0aa327e76a1ec41d89f8b0fa700247dfad7ebf0c82ab889004c3"]]}
diff --git a/reveal/v5-000009/r34599412.tlock b/reveal/v5-000009/r34599412.tlock
new file mode 100644
index 0000000..afead6b
--- /dev/null
+++ b/reveal/v5-000009/r34599412.tlock
@@ -0,0 +1,11 @@
1-----BEGIN AGE ENCRYPTED FILE-----
2YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHRsb2NrIDM0NTk5NDEyIDUyZGI5YmE3
3MGUwY2MwZjZlYWY3ODAzZGQwNzQ0N2ExZjU0Nzc3MzVmZDNmNjYxNzkyYmE5NDYw
4MGM4NGU5NzEKbFd4WldZd0k2WExFd1M4bUtqZWQ0Y21RRFlqeHlpUGI0MmRYNDRl
5ZXRLeFJjem80Q245NndLZ2V0dzF6WVdrUQpGb3Fuang5ZklaU01pM0JqelNnNkl0
6SjZQUzJBSkNNT3NzVWc2SElGWWRrVkEvaTd4bTlwWnBzUFRld29XMXBaCk9idE5n
7WlRIbUZIWVR0OCs5UGZqM0pEUlE2OGEvOU5qZDZldWxudi9DcEEKLS0tIG9TemxR
8Z0NtMms2LzI0U0oyYVBBUWhQOTYwMFBmMkR2cTY3cEZ3enREM2MKGIv/aI+LBGT8
9LFscEuB8NhQ9xxypC2MNUYPWnlM1Ffk0U3P8Yj+tDupWWV1CmkwI0CuBbLbrWfbW
109O9IAGd/5A==
11-----END AGE ENCRYPTED FILE-----
diff --git a/reveal/v5-000009/r34628212.ct b/reveal/v5-000009/r34628212.ct
new file mode 100644
index 0000000..aa1c7b3
--- /dev/null
+++ b/reveal/v5-000009/r34628212.ct
Binary files differ
diff --git a/reveal/v5-000009/r34628212.nostr.json b/reveal/v5-000009/r34628212.nostr.json
new file mode 100644
index 0000000..69c2058
--- /dev/null
+++ b/reveal/v5-000009/r34628212.nostr.json
@@ -0,0 +1 @@
{"content":"-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHRsb2NrIDM0NjI4MjEyIDUyZGI5YmE3\nMGUwY2MwZjZlYWY3ODAzZGQwNzQ0N2ExZjU0Nzc3MzVmZDNmNjYxNzkyYmE5NDYw\nMGM4NGU5NzEKbzFjaGthUXVTVzhaSVNPZWluVW8xUTJ3U1UyWXYrQkR4Um9kMW5v\nSTVrOHhCaEJ2NzJha2RmMVZwdm9iSEt4VgpDajJpK2cvUVg3eUVBQU1KTk1HT2pr\nZnFoZEV6cmdlT3o2WWQ1VTJTMFB4alpPTHpvaUVXRDYxOUw0SVoxRXVGCkRBL0hv\nV2VkTlRLZGNaUW1QbHRKMDdXQjF5d21ETHV0bUplb3JmMUxhbmMKLS0tIHV2YS9i\nWlV2cjNmZDRrUk5kTmVuRnAweUV5c0hBTmN3aktIaWNkQWJLUE0K9pGRPbkBFc+S\nBNjbl3ULv2IoguDCjHcSGRZ8OhLhnR8HFZ10UrA4c7Q0m9CHbOyWdPmuXmBkvLbK\nYjRE7PqBRA==\n-----END AGE ENCRYPTED FILE-----\n","tags":[["t","echo-ledger-reveal"],["round","34628212"],["reveal_at","2026-12-08T00:00:00.000000Z"],["chain","52db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971"],["digest","93013043e897fd0cccc654efc5a09a76dd2f76a0421c37ec70b960ffd08d07f5"],["ct","7a060e73b05f5fba9f57622468cf4484517ef7d295db18a58c532ada23f4e19a"],["seal","f7dd3d54a02d0aa327e76a1ec41d89f8b0fa700247dfad7ebf0c82ab889004c3"]]}
diff --git a/reveal/v5-000009/r34628212.tlock b/reveal/v5-000009/r34628212.tlock
new file mode 100644
index 0000000..e6ae5d0
--- /dev/null
+++ b/reveal/v5-000009/r34628212.tlock
@@ -0,0 +1,11 @@
1-----BEGIN AGE ENCRYPTED FILE-----
2YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHRsb2NrIDM0NjI4MjEyIDUyZGI5YmE3
3MGUwY2MwZjZlYWY3ODAzZGQwNzQ0N2ExZjU0Nzc3MzVmZDNmNjYxNzkyYmE5NDYw
4MGM4NGU5NzEKbzFjaGthUXVTVzhaSVNPZWluVW8xUTJ3U1UyWXYrQkR4Um9kMW5v
5STVrOHhCaEJ2NzJha2RmMVZwdm9iSEt4VgpDajJpK2cvUVg3eUVBQU1KTk1HT2pr
6ZnFoZEV6cmdlT3o2WWQ1VTJTMFB4alpPTHpvaUVXRDYxOUw0SVoxRXVGCkRBL0hv
7V2VkTlRLZGNaUW1QbHRKMDdXQjF5d21ETHV0bUplb3JmMUxhbmMKLS0tIHV2YS9i
8WlV2cjNmZDRrUk5kTmVuRnAweUV5c0hBTmN3aktIaWNkQWJLUE0K9pGRPbkBFc+S
9BNjbl3ULv2IoguDCjHcSGRZ8OhLhnR8HFZ10UrA4c7Q0m9CHbOyWdPmuXmBkvLbK
10YjRE7PqBRA==
11-----END AGE ENCRYPTED FILE-----
diff --git a/reveal/v5-000009/r34685812.ct b/reveal/v5-000009/r34685812.ct
new file mode 100644
index 0000000..a9fe555
--- /dev/null
+++ b/reveal/v5-000009/r34685812.ct
Binary files differ
diff --git a/reveal/v5-000009/r34685812.nostr.json b/reveal/v5-000009/r34685812.nostr.json
new file mode 100644
index 0000000..6214cd4
--- /dev/null
+++ b/reveal/v5-000009/r34685812.nostr.json
@@ -0,0 +1 @@
{"content":"-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHRsb2NrIDM0Njg1ODEyIDUyZGI5YmE3\nMGUwY2MwZjZlYWY3ODAzZGQwNzQ0N2ExZjU0Nzc3MzVmZDNmNjYxNzkyYmE5NDYw\nMGM4NGU5NzEKaDdVSGlpOWJ1NjJ2dkpHUDY2TWVJUXEzZEN6YXUrWTZtSkJCd3dR\nZWJkMW9uVEZOQkdpRU9HLy8vRS9xODBiTQpFWmxTZWZjYmtVdHo2K0pPQUcxQjZN\nS2pHUk9LOGlqakxTeFp0cGhkZldYNk9VckRwdTVwdFJpYnRPdTJKYk5VCmhLcnNw\nRHdaZW91Q1ZLRmJ2TW1ZS3BJK0FKU2tHeXJQWkNhczcxckVjMG8KLS0tIE1JYUpM\nN3JpNlpLR1RYdDdvcFI2ZHBHS01HTkdZdEtxZ0xLK3JXeFFLTFUKhTSYLJHuK+v/\naI8Yh79iNGXF/tWavzx86UwpbqW+QuEEyAsHeuVLkgbC1/gBOexRYQ3PRjMd19C/\nFvimYFming==\n-----END AGE ENCRYPTED FILE-----\n","tags":[["t","echo-ledger-reveal"],["round","34685812"],["reveal_at","2026-12-10T00:00:00.000000Z"],["chain","52db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971"],["digest","5c01c087fc234779d67a10ba8b35d4301e1608faf921120e951df96babca72b7"],["ct","bec16e2d79466496e46bc4fd71b5489dfe5d7e07a5a74139594205bde8663173"],["seal","f7dd3d54a02d0aa327e76a1ec41d89f8b0fa700247dfad7ebf0c82ab889004c3"]]}
diff --git a/reveal/v5-000009/r34685812.tlock b/reveal/v5-000009/r34685812.tlock
new file mode 100644
index 0000000..2372d95
--- /dev/null
+++ b/reveal/v5-000009/r34685812.tlock
@@ -0,0 +1,11 @@
1-----BEGIN AGE ENCRYPTED FILE-----
2YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHRsb2NrIDM0Njg1ODEyIDUyZGI5YmE3
3MGUwY2MwZjZlYWY3ODAzZGQwNzQ0N2ExZjU0Nzc3MzVmZDNmNjYxNzkyYmE5NDYw
4MGM4NGU5NzEKaDdVSGlpOWJ1NjJ2dkpHUDY2TWVJUXEzZEN6YXUrWTZtSkJCd3dR
5ZWJkMW9uVEZOQkdpRU9HLy8vRS9xODBiTQpFWmxTZWZjYmtVdHo2K0pPQUcxQjZN
6S2pHUk9LOGlqakxTeFp0cGhkZldYNk9VckRwdTVwdFJpYnRPdTJKYk5VCmhLcnNw
7RHdaZW91Q1ZLRmJ2TW1ZS3BJK0FKU2tHeXJQWkNhczcxckVjMG8KLS0tIE1JYUpM
8N3JpNlpLR1RYdDdvcFI2ZHBHS01HTkdZdEtxZ0xLK3JXeFFLTFUKhTSYLJHuK+v/
9aI8Yh79iNGXF/tWavzx86UwpbqW+QuEEyAsHeuVLkgbC1/gBOexRYQ3PRjMd19C/
10FvimYFming==
11-----END AGE ENCRYPTED FILE-----
diff --git a/reveal/v5-000009/r34714612.ct b/reveal/v5-000009/r34714612.ct
new file mode 100644
index 0000000..358a831
--- /dev/null
+++ b/reveal/v5-000009/r34714612.ct
Binary files differ
diff --git a/reveal/v5-000009/r34714612.nostr.json b/reveal/v5-000009/r34714612.nostr.json
new file mode 100644
index 0000000..0a556ed
--- /dev/null
+++ b/reveal/v5-000009/r34714612.nostr.json
@@ -0,0 +1 @@
{"content":"-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHRsb2NrIDM0NzE0NjEyIDUyZGI5YmE3\nMGUwY2MwZjZlYWY3ODAzZGQwNzQ0N2ExZjU0Nzc3MzVmZDNmNjYxNzkyYmE5NDYw\nMGM4NGU5NzEKdGNCNUFLcUs0cE93WklmaWVFaGovamRPeWZsTXhwY0tnK0hNeUZG\nVkRYR0dKQjJ4WC9yOFc0bEtjZ045ZUN3egpHSU5LS0JaVVJrRlZxbEJzT3RvNEh3\nRXR3OXE1Sk1lQVpTaEtVekVxdjVNazNBT1JsZVVDNnZoRDdvNittOGQ4CjloVExj\nM0hkSE02N2FCbzNHd3ZNR1FiUk1zK2w4TXFhK1JSNVRDY0NpcjAKLS0tIG8ySmI4\naEV0anZEY1l1blhZWEYzY1plZXlpdzBZMk9SRGgxMmo2Y2FCdUEKxu+CZBVzR78b\nkUehYihrE9AgmXx1HU5MT3L4UINmeVj1lgZUQL/rvUbDubc05TnTiu+G6Fo17wlj\nWP7bCB6iUw==\n-----END AGE ENCRYPTED FILE-----\n","tags":[["t","echo-ledger-reveal"],["round","34714612"],["reveal_at","2026-12-11T00:00:00.000000Z"],["chain","52db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971"],["digest","11ba76e35c5dae7f2144705ab1f24b40d045ad1f6b1283d1ae3b84124f76a5b4"],["ct","004f0211ffe144681a70d0cf08c903a860320d4c974415b3d8fed9de741ac569"],["seal","f7dd3d54a02d0aa327e76a1ec41d89f8b0fa700247dfad7ebf0c82ab889004c3"]]}
diff --git a/reveal/v5-000009/r34714612.tlock b/reveal/v5-000009/r34714612.tlock
new file mode 100644
index 0000000..36b2442
--- /dev/null
+++ b/reveal/v5-000009/r34714612.tlock
@@ -0,0 +1,11 @@
1-----BEGIN AGE ENCRYPTED FILE-----
2YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHRsb2NrIDM0NzE0NjEyIDUyZGI5YmE3
3MGUwY2MwZjZlYWY3ODAzZGQwNzQ0N2ExZjU0Nzc3MzVmZDNmNjYxNzkyYmE5NDYw
4MGM4NGU5NzEKdGNCNUFLcUs0cE93WklmaWVFaGovamRPeWZsTXhwY0tnK0hNeUZG
5VkRYR0dKQjJ4WC9yOFc0bEtjZ045ZUN3egpHSU5LS0JaVVJrRlZxbEJzT3RvNEh3
6RXR3OXE1Sk1lQVpTaEtVekVxdjVNazNBT1JsZVVDNnZoRDdvNittOGQ4CjloVExj
7M0hkSE02N2FCbzNHd3ZNR1FiUk1zK2w4TXFhK1JSNVRDY0NpcjAKLS0tIG8ySmI4
8aEV0anZEY1l1blhZWEYzY1plZXlpdzBZMk9SRGgxMmo2Y2FCdUEKxu+CZBVzR78b
9kUehYihrE9AgmXx1HU5MT3L4UINmeVj1lgZUQL/rvUbDubc05TnTiu+G6Fo17wlj
10WP7bCB6iUw==
11-----END AGE ENCRYPTED FILE-----
diff --git a/reveal/v5-000009/r34743412.ct b/reveal/v5-000009/r34743412.ct
new file mode 100644
index 0000000..4e1bce0
--- /dev/null
+++ b/reveal/v5-000009/r34743412.ct
Binary files differ
diff --git a/reveal/v5-000009/r34743412.nostr.json b/reveal/v5-000009/r34743412.nostr.json
new file mode 100644
index 0000000..d88fbbc
--- /dev/null
+++ b/reveal/v5-000009/r34743412.nostr.json
@@ -0,0 +1 @@
{"content":"-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHRsb2NrIDM0NzQzNDEyIDUyZGI5YmE3\nMGUwY2MwZjZlYWY3ODAzZGQwNzQ0N2ExZjU0Nzc3MzVmZDNmNjYxNzkyYmE5NDYw\nMGM4NGU5NzEKcjVZNS92VXRlblFJeS9vUk9hRjh2Z1B4NHArbUFDend5bHFKTXZE\nQ1JMbXFZVU5CdWVXU2FkMkxtUGtNaklKMgpDUFd2cThHUml4NnppQ0tEVWM4N3hK\nQ3BiemZUY1d2RDBnS1lxSzlQcnNNbmw1UWtTYWQranZoanNjcDhMUnlzCnNQSVlq\nNjNvOEFrS3g0cng2SUVGUHVwemlTYko1NG9ud3Rkc296UXVMN00KLS0tIENPZ0JT\nNUZvczRnekZBcmhsTi9SQ0pCVHdRK2xESlBrWGxyYUlwZmdaNGMKw6ei+xJofcqJ\nNfv8H2uyGIo2bQPUz9BOW2Bl1ozCnlHpX4rzKieqmKz+zk9dO+UO4EMrzVLY/24z\nvT14xcRuYQ==\n-----END AGE ENCRYPTED FILE-----\n","tags":[["t","echo-ledger-reveal"],["round","34743412"],["reveal_at","2026-12-12T00:00:00.000000Z"],["chain","52db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971"],["digest","c710dd8a8e039f6fad9b6d3980d7d8a2daf618ca9220fb7648ff21372f5277bd"],["ct","ff3182b59025051922da91dcbb3d7710a5ff4bcce0379aa836002667ac156d55"],["seal","f7dd3d54a02d0aa327e76a1ec41d89f8b0fa700247dfad7ebf0c82ab889004c3"]]}
diff --git a/reveal/v5-000009/r34743412.tlock b/reveal/v5-000009/r34743412.tlock
new file mode 100644
index 0000000..e9c2ae0
--- /dev/null
+++ b/reveal/v5-000009/r34743412.tlock
@@ -0,0 +1,11 @@
1-----BEGIN AGE ENCRYPTED FILE-----
2YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHRsb2NrIDM0NzQzNDEyIDUyZGI5YmE3
3MGUwY2MwZjZlYWY3ODAzZGQwNzQ0N2ExZjU0Nzc3MzVmZDNmNjYxNzkyYmE5NDYw
4MGM4NGU5NzEKcjVZNS92VXRlblFJeS9vUk9hRjh2Z1B4NHArbUFDend5bHFKTXZE
5Q1JMbXFZVU5CdWVXU2FkMkxtUGtNaklKMgpDUFd2cThHUml4NnppQ0tEVWM4N3hK
6Q3BiemZUY1d2RDBnS1lxSzlQcnNNbmw1UWtTYWQranZoanNjcDhMUnlzCnNQSVlq
7NjNvOEFrS3g0cng2SUVGUHVwemlTYko1NG9ud3Rkc296UXVMN00KLS0tIENPZ0JT
8NUZvczRnekZBcmhsTi9SQ0pCVHdRK2xESlBrWGxyYUlwZmdaNGMKw6ei+xJofcqJ
9Nfv8H2uyGIo2bQPUz9BOW2Bl1ozCnlHpX4rzKieqmKz+zk9dO+UO4EMrzVLY/24z
10vT14xcRuYQ==
11-----END AGE ENCRYPTED FILE-----
diff --git a/reveal/v5-000009/r34801012.ct b/reveal/v5-000009/r34801012.ct
new file mode 100644
index 0000000..58dfe9a
--- /dev/null
+++ b/reveal/v5-000009/r34801012.ct
Binary files differ
diff --git a/reveal/v5-000009/r34801012.nostr.json b/reveal/v5-000009/r34801012.nostr.json
new file mode 100644
index 0000000..936c6bd
--- /dev/null
+++ b/reveal/v5-000009/r34801012.nostr.json
@@ -0,0 +1 @@
{"content":"-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHRsb2NrIDM0ODAxMDEyIDUyZGI5YmE3\nMGUwY2MwZjZlYWY3ODAzZGQwNzQ0N2ExZjU0Nzc3MzVmZDNmNjYxNzkyYmE5NDYw\nMGM4NGU5NzEKcFpmSXpNN3RQWXJZS01SVUFYZUlFSVd5NzBLbVV5QXliZ0FFOFM2\ndy9PeVptQ0xVSERVVXVuc3IzUDR6MGtEVwpFN3hEUG5MbW9sWlFwdTdoV2tlZW5P\nZEFBNlZRWUNieHlsaWQwNWNoRkYwNmFmMlNIMmFEeFhvcDVGbTNydG1DCkp3ZVZs\nTm1wdklaNzdvYXQwYmJyeHNwVTdzVG1wSUlRRy9FV1l5SEhKdncKLS0tIHUvMW1Z\nZ0hhblFMM2w0SjhtaForSTVsZ1Awc2M0L00zMzJ6Q3RmdnpGNEEKKoRm3+S/RmIY\nyHS6nUW4B4iW6pFrZwzbpIsPNkBYfOaBvPs6QaNrJu+/Vpmi00RW8OH2RPqVHz+e\nEi4yyWyjYA==\n-----END AGE ENCRYPTED FILE-----\n","tags":[["t","echo-ledger-reveal"],["round","34801012"],["reveal_at","2026-12-14T00:00:00.000000Z"],["chain","52db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971"],["digest","81386cd98d524b57f21dbdeec6861f8bf06f565f2fe541a828ad7c4e5628d57c"],["ct","e7a47372985832ee45577806d33e56706cdd8ff424aa5bfb344cb0087535ccf1"],["seal","f7dd3d54a02d0aa327e76a1ec41d89f8b0fa700247dfad7ebf0c82ab889004c3"]]}
diff --git a/reveal/v5-000009/r34801012.tlock b/reveal/v5-000009/r34801012.tlock
new file mode 100644
index 0000000..8f7c5fd
--- /dev/null
+++ b/reveal/v5-000009/r34801012.tlock
@@ -0,0 +1,11 @@
1-----BEGIN AGE ENCRYPTED FILE-----
2YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHRsb2NrIDM0ODAxMDEyIDUyZGI5YmE3
3MGUwY2MwZjZlYWY3ODAzZGQwNzQ0N2ExZjU0Nzc3MzVmZDNmNjYxNzkyYmE5NDYw
4MGM4NGU5NzEKcFpmSXpNN3RQWXJZS01SVUFYZUlFSVd5NzBLbVV5QXliZ0FFOFM2
5dy9PeVptQ0xVSERVVXVuc3IzUDR6MGtEVwpFN3hEUG5MbW9sWlFwdTdoV2tlZW5P
6ZEFBNlZRWUNieHlsaWQwNWNoRkYwNmFmMlNIMmFEeFhvcDVGbTNydG1DCkp3ZVZs
7Tm1wdklaNzdvYXQwYmJyeHNwVTdzVG1wSUlRRy9FV1l5SEhKdncKLS0tIHUvMW1Z
8Z0hhblFMM2w0SjhtaForSTVsZ1Awc2M0L00zMzJ6Q3RmdnpGNEEKKoRm3+S/RmIY
9yHS6nUW4B4iW6pFrZwzbpIsPNkBYfOaBvPs6QaNrJu+/Vpmi00RW8OH2RPqVHz+e
10Ei4yyWyjYA==
11-----END AGE ENCRYPTED FILE-----
diff --git a/reveal/v5-000009/r34858612.ct b/reveal/v5-000009/r34858612.ct
new file mode 100644
index 0000000..c31eb26
--- /dev/null
+++ b/reveal/v5-000009/r34858612.ct
Binary files differ
diff --git a/reveal/v5-000009/r34858612.nostr.json b/reveal/v5-000009/r34858612.nostr.json
new file mode 100644
index 0000000..3ad376e
--- /dev/null
+++ b/reveal/v5-000009/r34858612.nostr.json
@@ -0,0 +1 @@
{"content":"-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHRsb2NrIDM0ODU4NjEyIDUyZGI5YmE3\nMGUwY2MwZjZlYWY3ODAzZGQwNzQ0N2ExZjU0Nzc3MzVmZDNmNjYxNzkyYmE5NDYw\nMGM4NGU5NzEKazBkWll5OTJ2N0s4NzdnYzJCSVAralhORU1FSVdYVFNXNGRaUWhj\nMWhMQjh0ek1LMG8rL2QvUVZNeG9DM1FXcwpGay9Gc2JtQ3U0MjNXL0NsZUQ5TUNh\nUDVYeHRmRGN5M1lDbXBpWGdsTmhVYk85SWJzZm5LVjdSRUZ4bGx0WnJWCkcwakUr\nRG5ndTk1SjFDd0liWGg3WXhqRU04SXBtM1hkcjBpdXU3NEtNS1UKLS0tIERFbzFh\nU1p3OFQydzJ4L05hTlpKNEtvK0xJd3RBVy93czFVRm9IanIrS0EKTjTP3MetuIDm\nLsvyZFsn7PJw/8xI4ghHIEZf0kAmP1Qcs4PTHfHCvx+SGbgJBdRpnHztshtswivz\nrOaKj0/MkA==\n-----END AGE ENCRYPTED FILE-----\n","tags":[["t","echo-ledger-reveal"],["round","34858612"],["reveal_at","2026-12-16T00:00:00.000000Z"],["chain","52db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971"],["digest","55248e7ceb674d6e8618adb5532cd7366956de5cdf353a587a41785436ec9464"],["ct","f36aa1b6a295fc1263af4a181f87d5abf64ceffb2122c946b4af7aa1af900461"],["seal","f7dd3d54a02d0aa327e76a1ec41d89f8b0fa700247dfad7ebf0c82ab889004c3"]]}
diff --git a/reveal/v5-000009/r34858612.tlock b/reveal/v5-000009/r34858612.tlock
new file mode 100644
index 0000000..0194b5b
--- /dev/null
+++ b/reveal/v5-000009/r34858612.tlock
@@ -0,0 +1,11 @@
1-----BEGIN AGE ENCRYPTED FILE-----
2YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHRsb2NrIDM0ODU4NjEyIDUyZGI5YmE3
3MGUwY2MwZjZlYWY3ODAzZGQwNzQ0N2ExZjU0Nzc3MzVmZDNmNjYxNzkyYmE5NDYw
4MGM4NGU5NzEKazBkWll5OTJ2N0s4NzdnYzJCSVAralhORU1FSVdYVFNXNGRaUWhj
5MWhMQjh0ek1LMG8rL2QvUVZNeG9DM1FXcwpGay9Gc2JtQ3U0MjNXL0NsZUQ5TUNh
6UDVYeHRmRGN5M1lDbXBpWGdsTmhVYk85SWJzZm5LVjdSRUZ4bGx0WnJWCkcwakUr
7RG5ndTk1SjFDd0liWGg3WXhqRU04SXBtM1hkcjBpdXU3NEtNS1UKLS0tIERFbzFh
8U1p3OFQydzJ4L05hTlpKNEtvK0xJd3RBVy93czFVRm9IanIrS0EKTjTP3MetuIDm
9LsvyZFsn7PJw/8xI4ghHIEZf0kAmP1Qcs4PTHfHCvx+SGbgJBdRpnHztshtswivz
10rOaKj0/MkA==
11-----END AGE ENCRYPTED FILE-----
diff --git a/reveal/v5-000009/r35607412.ct b/reveal/v5-000009/r35607412.ct
new file mode 100644
index 0000000..4aa26e7
--- /dev/null
+++ b/reveal/v5-000009/r35607412.ct
Binary files differ
diff --git a/reveal/v5-000009/r35607412.nostr.json b/reveal/v5-000009/r35607412.nostr.json
new file mode 100644
index 0000000..75a896d
--- /dev/null
+++ b/reveal/v5-000009/r35607412.nostr.json
@@ -0,0 +1 @@
{"content":"-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHRsb2NrIDM1NjA3NDEyIDUyZGI5YmE3\nMGUwY2MwZjZlYWY3ODAzZGQwNzQ0N2ExZjU0Nzc3MzVmZDNmNjYxNzkyYmE5NDYw\nMGM4NGU5NzEKa3ZaTUczNWxOcGQwVUZpRi96cXFGemJTSjUybW5XTVNhV1l2UDIv\nWjZ3d0M4UFB3WGZndFlVWWlIM3RWQ3JaWgpCaGFxQWJkbjhVbkJVZ3REaFFVSkls\nUVk3aEpIWmVYODRCZmxMODNuSnlwN3V5WTVNUWtoMFVlV3FxNGtEMUVOCmh6d0pq\ndEtTZ1gwYlZhOERoa0NRTGdLdWR6MlRudmhka2gwZHJBZGlEZ1kKLS0tIHlUNDhU\nQ2dINlVlM3dpVXExN0ROM1FVRFRVaGFOTmJRSmhvTUdiRWVES28KWZsne9YDR+9A\nJsWIYEciZLZDf1xPVnZFklvFiBaRvy0oLwLBOH+tJU8Dnj+5bAH4nwQwZMxA7xzP\nhQmFKmlZNg==\n-----END AGE ENCRYPTED FILE-----\n","tags":[["t","echo-ledger-reveal"],["round","35607412"],["reveal_at","2027-01-11T00:00:00.000000Z"],["chain","52db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971"],["digest","845593a308595ba65c5ef1a0ba2ef3dfe00307fff59098f0648a75ad663b3576"],["ct","4c58b42d0049610991bdcb0b75a6925025010e8154bb0ce88ad2c263bd2104a3"],["seal","f7dd3d54a02d0aa327e76a1ec41d89f8b0fa700247dfad7ebf0c82ab889004c3"]]}
diff --git a/reveal/v5-000009/r35607412.tlock b/reveal/v5-000009/r35607412.tlock
new file mode 100644
index 0000000..95af224
--- /dev/null
+++ b/reveal/v5-000009/r35607412.tlock
@@ -0,0 +1,11 @@
1-----BEGIN AGE ENCRYPTED FILE-----
2YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHRsb2NrIDM1NjA3NDEyIDUyZGI5YmE3
3MGUwY2MwZjZlYWY3ODAzZGQwNzQ0N2ExZjU0Nzc3MzVmZDNmNjYxNzkyYmE5NDYw
4MGM4NGU5NzEKa3ZaTUczNWxOcGQwVUZpRi96cXFGemJTSjUybW5XTVNhV1l2UDIv
5WjZ3d0M4UFB3WGZndFlVWWlIM3RWQ3JaWgpCaGFxQWJkbjhVbkJVZ3REaFFVSkls
6UVk3aEpIWmVYODRCZmxMODNuSnlwN3V5WTVNUWtoMFVlV3FxNGtEMUVOCmh6d0pq
7dEtTZ1gwYlZhOERoa0NRTGdLdWR6MlRudmhka2gwZHJBZGlEZ1kKLS0tIHlUNDhU
8Q2dINlVlM3dpVXExN0ROM1FVRFRVaGFOTmJRSmhvTUdiRWVES28KWZsne9YDR+9A
9JsWIYEciZLZDf1xPVnZFklvFiBaRvy0oLwLBOH+tJU8Dnj+5bAH4nwQwZMxA7xzP
10hQmFKmlZNg==
11-----END AGE ENCRYPTED FILE-----
diff --git a/reveal/v5-000009/r35780212.ct b/reveal/v5-000009/r35780212.ct
new file mode 100644
index 0000000..a18585d
--- /dev/null
+++ b/reveal/v5-000009/r35780212.ct
Binary files differ
diff --git a/reveal/v5-000009/r35780212.nostr.json b/reveal/v5-000009/r35780212.nostr.json
new file mode 100644
index 0000000..96cd51c
--- /dev/null
+++ b/reveal/v5-000009/r35780212.nostr.json
@@ -0,0 +1 @@
{"content":"-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHRsb2NrIDM1NzgwMjEyIDUyZGI5YmE3\nMGUwY2MwZjZlYWY3ODAzZGQwNzQ0N2ExZjU0Nzc3MzVmZDNmNjYxNzkyYmE5NDYw\nMGM4NGU5NzEKajcwTGNEZkFDc2JoNTNOSnM1ZEhzMTBkU2lHaERLb2dFdnVPSnUx\nRENpbkZhVXp3NFh1TURma3dORURQNmFWbwpGRHFyOWRlSjdtYnBEZVRHa3FyNm56\nYkFHRW1mc0pSZzl0b0RXSjJyRHAvYWxRd0VjZit1UXRiQ2JzODdiWVI1CkQ5MWtB\nRWhFWnVOQ1JFWmNtdVM3WkxOOHpEakNPWC85QWdpU0RmaE5vdWcKLS0tIFNVMW5Q\nUnFkQTh4WDBnWURVMGxNSGRRNjFodG1uMFhlUHdxTWxCMmw3NnMKOWZvTjNW63Gi\njQC+Y77BvRuQdODn9H+wPT9OjI5Sjc8RY9+QtRo99SKenqeOSDE0yzEC5NNqMKAG\n2vjdfpeYhQ==\n-----END AGE ENCRYPTED FILE-----\n","tags":[["t","echo-ledger-reveal"],["round","35780212"],["reveal_at","2027-01-17T00:00:00.000000Z"],["chain","52db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971"],["digest","52c5440c0bab82712bbeda92c0aae9bdb14524dec5474f98f153c0c3caebabab"],["ct","69922d4eb2d0aada00bf6b85a65eeadfc07a1d36db798dce154526cc939b2456"],["seal","f7dd3d54a02d0aa327e76a1ec41d89f8b0fa700247dfad7ebf0c82ab889004c3"]]}
diff --git a/reveal/v5-000009/r35780212.tlock b/reveal/v5-000009/r35780212.tlock
new file mode 100644
index 0000000..4317bb4
--- /dev/null
+++ b/reveal/v5-000009/r35780212.tlock
@@ -0,0 +1,11 @@
1-----BEGIN AGE ENCRYPTED FILE-----
2YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHRsb2NrIDM1NzgwMjEyIDUyZGI5YmE3
3MGUwY2MwZjZlYWY3ODAzZGQwNzQ0N2ExZjU0Nzc3MzVmZDNmNjYxNzkyYmE5NDYw
4MGM4NGU5NzEKajcwTGNEZkFDc2JoNTNOSnM1ZEhzMTBkU2lHaERLb2dFdnVPSnUx
5RENpbkZhVXp3NFh1TURma3dORURQNmFWbwpGRHFyOWRlSjdtYnBEZVRHa3FyNm56
6YkFHRW1mc0pSZzl0b0RXSjJyRHAvYWxRd0VjZit1UXRiQ2JzODdiWVI1CkQ5MWtB
7RWhFWnVOQ1JFWmNtdVM3WkxOOHpEakNPWC85QWdpU0RmaE5vdWcKLS0tIFNVMW5Q
8UnFkQTh4WDBnWURVMGxNSGRRNjFodG1uMFhlUHdxTWxCMmw3NnMKOWZvTjNW63Gi
9jQC+Y77BvRuQdODn9H+wPT9OjI5Sjc8RY9+QtRo99SKenqeOSDE0yzEC5NNqMKAG
102vjdfpeYhQ==
11-----END AGE ENCRYPTED FILE-----
diff --git a/reveal/v5-000009/r36701812.ct b/reveal/v5-000009/r36701812.ct
new file mode 100644
index 0000000..ea12948
--- /dev/null
+++ b/reveal/v5-000009/r36701812.ct
Binary files differ
diff --git a/reveal/v5-000009/r36701812.nostr.json b/reveal/v5-000009/r36701812.nostr.json
new file mode 100644
index 0000000..9355ae6
--- /dev/null
+++ b/reveal/v5-000009/r36701812.nostr.json
@@ -0,0 +1 @@
{"content":"-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHRsb2NrIDM2NzAxODEyIDUyZGI5YmE3\nMGUwY2MwZjZlYWY3ODAzZGQwNzQ0N2ExZjU0Nzc3MzVmZDNmNjYxNzkyYmE5NDYw\nMGM4NGU5NzEKc3RxTTFtYk9DQVpDZVZuL096Tkh4WG54QVlQdytuQjFEOTNLUDBB\nVktCR1NaRDdZVEdyWlNyYXNkaTZIVWF3RgpBbnZJMHMzNmhLRnBYdzhUZCs0Y1E4\nUk1wS2RCYTRZUGJTME45VkFFU3cvbCt0OFcwRXRlb2tKNW83UHhXR3VZCnJ3Qmtv\nNUxnZUdIeFEvSHZxOEtEc0hzYnFwcDFIZGEzZGhiOEpqeVJjM1kKLS0tIE1UbERC\neTZ2N3JxbmtFc3Yza3d6MEJnYnN3eFpTWVI2SFRRcmNwTzI5ckEKo1AaXmGdQyGh\nVjFrzUnpFwkkr8r/myFelEY7HZQpTo6pC13r4xqtArtzD93BBKVcxPb2yh3R/tno\ndNmSICX0KQ==\n-----END AGE ENCRYPTED FILE-----\n","tags":[["t","echo-ledger-reveal"],["round","36701812"],["reveal_at","2027-02-18T00:00:00.000000Z"],["chain","52db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971"],["digest","0ab0c1c04d5a9068858c8bdd2dd19dc8a9b6976099921543e7c796f979f9a149"],["ct","0ed974e08ff012d718c63fb6742830ab8e13f692af40abb21bb70559d729a766"],["seal","f7dd3d54a02d0aa327e76a1ec41d89f8b0fa700247dfad7ebf0c82ab889004c3"]]}
diff --git a/reveal/v5-000009/r36701812.tlock b/reveal/v5-000009/r36701812.tlock
new file mode 100644
index 0000000..3232d21
--- /dev/null
+++ b/reveal/v5-000009/r36701812.tlock
@@ -0,0 +1,11 @@
1-----BEGIN AGE ENCRYPTED FILE-----
2YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHRsb2NrIDM2NzAxODEyIDUyZGI5YmE3
3MGUwY2MwZjZlYWY3ODAzZGQwNzQ0N2ExZjU0Nzc3MzVmZDNmNjYxNzkyYmE5NDYw
4MGM4NGU5NzEKc3RxTTFtYk9DQVpDZVZuL096Tkh4WG54QVlQdytuQjFEOTNLUDBB
5VktCR1NaRDdZVEdyWlNyYXNkaTZIVWF3RgpBbnZJMHMzNmhLRnBYdzhUZCs0Y1E4
6Uk1wS2RCYTRZUGJTME45VkFFU3cvbCt0OFcwRXRlb2tKNW83UHhXR3VZCnJ3Qmtv
7NUxnZUdIeFEvSHZxOEtEc0hzYnFwcDFIZGEzZGhiOEpqeVJjM1kKLS0tIE1UbERC
8eTZ2N3JxbmtFc3Yza3d6MEJnYnN3eFpTWVI2SFRRcmNwTzI5ckEKo1AaXmGdQyGh
9VjFrzUnpFwkkr8r/myFelEY7HZQpTo6pC13r4xqtArtzD93BBKVcxPb2yh3R/tno
10dNmSICX0KQ==
11-----END AGE ENCRYPTED FILE-----
diff --git a/reveal/v5-000009/r36759412.ct b/reveal/v5-000009/r36759412.ct
new file mode 100644
index 0000000..3006bce
--- /dev/null
+++ b/reveal/v5-000009/r36759412.ct
Binary files differ
diff --git a/reveal/v5-000009/r36759412.nostr.json b/reveal/v5-000009/r36759412.nostr.json
new file mode 100644
index 0000000..752abfa
--- /dev/null
+++ b/reveal/v5-000009/r36759412.nostr.json
@@ -0,0 +1 @@
{"content":"-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHRsb2NrIDM2NzU5NDEyIDUyZGI5YmE3\nMGUwY2MwZjZlYWY3ODAzZGQwNzQ0N2ExZjU0Nzc3MzVmZDNmNjYxNzkyYmE5NDYw\nMGM4NGU5NzEKanBiUUptbFlESEs5aDlOUGlJcG1FL294WGZTeTA5bGZ2OFlOZkcy\nSXJvaVF6ODAzKzJTbTFNR0xIcEFNOUVlbgpGMFlZaXJJVjdROFNpdWViNmE3OVM1\nRmF4ZXkvL1ltZ1FLUkprQk5FaHkycENpQzNnOWRIVDlLTW4ySkdmQWhuCnVqZlpz\nVkZzeEFkVXA5SFZNUzlZVGdHWmFCNjFmSWlndlZRcUR3WlhzUHcKLS0tICs1L1po\neXo4bXllcFI4V1QybDZwQ3E5ZFRjZjQ2cUY5SGdIRW9ZMU9wMEUKCO4rwnIfMKV/\ncOXDSqsB7dbjK2DU3a5tvbvc6nY92m7bZSS46QN7cq0QD+ftOFDDRmXom5VoFYnv\nkkeRA65esA==\n-----END AGE ENCRYPTED FILE-----\n","tags":[["t","echo-ledger-reveal"],["round","36759412"],["reveal_at","2027-02-20T00:00:00.000000Z"],["chain","52db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971"],["digest","6f8619c39620c4b3fdefa009dcae3c4d4ab0640c3b2c2e42ba133acce35fa37e"],["ct","dc99f5ba0fa6aa20619cef01ead6edf1b57dea611eec4d00d2c340745fc495cf"],["seal","f7dd3d54a02d0aa327e76a1ec41d89f8b0fa700247dfad7ebf0c82ab889004c3"]]}
diff --git a/reveal/v5-000009/r36759412.tlock b/reveal/v5-000009/r36759412.tlock
new file mode 100644
index 0000000..c7e5a65
--- /dev/null
+++ b/reveal/v5-000009/r36759412.tlock
@@ -0,0 +1,11 @@
1-----BEGIN AGE ENCRYPTED FILE-----
2YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHRsb2NrIDM2NzU5NDEyIDUyZGI5YmE3
3MGUwY2MwZjZlYWY3ODAzZGQwNzQ0N2ExZjU0Nzc3MzVmZDNmNjYxNzkyYmE5NDYw
4MGM4NGU5NzEKanBiUUptbFlESEs5aDlOUGlJcG1FL294WGZTeTA5bGZ2OFlOZkcy
5SXJvaVF6ODAzKzJTbTFNR0xIcEFNOUVlbgpGMFlZaXJJVjdROFNpdWViNmE3OVM1
6RmF4ZXkvL1ltZ1FLUkprQk5FaHkycENpQzNnOWRIVDlLTW4ySkdmQWhuCnVqZlpz
7VkZzeEFkVXA5SFZNUzlZVGdHWmFCNjFmSWlndlZRcUR3WlhzUHcKLS0tICs1L1po
8eXo4bXllcFI4V1QybDZwQ3E5ZFRjZjQ2cUY5SGdIRW9ZMU9wMEUKCO4rwnIfMKV/
9cOXDSqsB7dbjK2DU3a5tvbvc6nY92m7bZSS46QN7cq0QD+ftOFDDRmXom5VoFYnv
10kkeRA65esA==
11-----END AGE ENCRYPTED FILE-----
diff --git a/reveal/v5-000009/r36932212.ct b/reveal/v5-000009/r36932212.ct
new file mode 100644
index 0000000..a002a87
--- /dev/null
+++ b/reveal/v5-000009/r36932212.ct
Binary files differ
diff --git a/reveal/v5-000009/r36932212.nostr.json b/reveal/v5-000009/r36932212.nostr.json
new file mode 100644
index 0000000..809054d
--- /dev/null
+++ b/reveal/v5-000009/r36932212.nostr.json
@@ -0,0 +1 @@
{"content":"-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHRsb2NrIDM2OTMyMjEyIDUyZGI5YmE3\nMGUwY2MwZjZlYWY3ODAzZGQwNzQ0N2ExZjU0Nzc3MzVmZDNmNjYxNzkyYmE5NDYw\nMGM4NGU5NzEKaExacVJ4ZzRudGd0bUdJVG9CWGZXcGRpc2p3WDQ5d3RyMkliaDF2\nb3h2MHRqQ3o1S2hxSXVkSTFPbE9UUzNLSwpEbXhoSXBxd1JUeU1VQU5veHVQVXho\nOWM0R29rZUpEK0lNM0tFRTRna3dBajVRNGZkUzJDdnBsZzlSMy82OXNtCld1aXZ2\nVGtkOUNOT0JIK24zQWQ5MUZ5WjgwQjBiRTc1REF6enJGS1kySkUKLS0tIFpBZlEv\nam8zYXhtQ2pMdmtFL0pZT3RuWVAxdlFTOG9GU0NVRTJjMEZSMjgKzyqKRQjOfjia\nPhbjKgXoBE8ZwRouvQXPHMT7JHZLx4O62sxUadoHaZLFRUrqzpqY43rv7AyiCAw8\nplzeBm3aFg==\n-----END AGE ENCRYPTED FILE-----\n","tags":[["t","echo-ledger-reveal"],["round","36932212"],["reveal_at","2027-02-26T00:00:00.000000Z"],["chain","52db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971"],["digest","39f3989cf148b42f7770109515c47b94e8aa84024af41701d6e8f05653e2e52a"],["ct","e64e34a52df4aaa782ec3e44171697b5fac729220c68dd611d4f533e3a52ed5e"],["seal","f7dd3d54a02d0aa327e76a1ec41d89f8b0fa700247dfad7ebf0c82ab889004c3"]]}
diff --git a/reveal/v5-000009/r36932212.tlock b/reveal/v5-000009/r36932212.tlock
new file mode 100644
index 0000000..4c651ca
--- /dev/null
+++ b/reveal/v5-000009/r36932212.tlock
@@ -0,0 +1,11 @@
1-----BEGIN AGE ENCRYPTED FILE-----
2YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHRsb2NrIDM2OTMyMjEyIDUyZGI5YmE3
3MGUwY2MwZjZlYWY3ODAzZGQwNzQ0N2ExZjU0Nzc3MzVmZDNmNjYxNzkyYmE5NDYw
4MGM4NGU5NzEKaExacVJ4ZzRudGd0bUdJVG9CWGZXcGRpc2p3WDQ5d3RyMkliaDF2
5b3h2MHRqQ3o1S2hxSXVkSTFPbE9UUzNLSwpEbXhoSXBxd1JUeU1VQU5veHVQVXho
6OWM0R29rZUpEK0lNM0tFRTRna3dBajVRNGZkUzJDdnBsZzlSMy82OXNtCld1aXZ2
7VGtkOUNOT0JIK24zQWQ5MUZ5WjgwQjBiRTc1REF6enJGS1kySkUKLS0tIFpBZlEv
8am8zYXhtQ2pMdmtFL0pZT3RuWVAxdlFTOG9GU0NVRTJjMEZSMjgKzyqKRQjOfjia
9PhbjKgXoBE8ZwRouvQXPHMT7JHZLx4O62sxUadoHaZLFRUrqzpqY43rv7AyiCAw8
10plzeBm3aFg==
11-----END AGE ENCRYPTED FILE-----
diff --git a/reveal/v5-000009/r37853812.ct b/reveal/v5-000009/r37853812.ct
new file mode 100644
index 0000000..05d74fd
--- /dev/null
+++ b/reveal/v5-000009/r37853812.ct
Binary files differ
diff --git a/reveal/v5-000009/r37853812.nostr.json b/reveal/v5-000009/r37853812.nostr.json
new file mode 100644
index 0000000..3958135
--- /dev/null
+++ b/reveal/v5-000009/r37853812.nostr.json
@@ -0,0 +1 @@
{"content":"-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHRsb2NrIDM3ODUzODEyIDUyZGI5YmE3\nMGUwY2MwZjZlYWY3ODAzZGQwNzQ0N2ExZjU0Nzc3MzVmZDNmNjYxNzkyYmE5NDYw\nMGM4NGU5NzEKbzF6MkdRczUzYWlWUlo0WVVaVzBXR1lTbVdNOUNhTEh2aWIyNWtI\naHQweTdoOHUxVU1EL0hJUE5HQUp0SytmNQpGYURMTGlzaHdwK1pPZGZ0S2RIVVBz\nUzl2dVQySlBGNEhtd3MyNUtmSGJSdnpKQ2FzQk5aVzdrd2lRemtHM012CldVdS9t\nSmRacENvUzJDT1VyOFFqRlVSTFFlTW5sbzZYUmJ4TWdwc3loQlEKLS0tIHZWeDl1\nWEVod1YxT1RzdTVvbEg0MHo4Y21pOXluUjk1RldBZnlQTXNBdWMK4tiyrgaGLTAv\nOmIHUfOxCVdho0/9fPM60qLNKPiSiYW/rUzrfobugaFoyRSKJK+BFEot+U6hqpSL\ndvQxUH94Zw==\n-----END AGE ENCRYPTED FILE-----\n","tags":[["t","echo-ledger-reveal"],["round","37853812"],["reveal_at","2027-03-30T00:00:00.000000Z"],["chain","52db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971"],["digest","1735ea3f806bfcec1d3a02ba9f47291744e9927c30ea3632f6155dc718c8c71f"],["ct","6da59a5b6f4881a7b7847924dacfe9bfdeb083edf1b6cd9cb72508de6b0efe16"],["seal","f7dd3d54a02d0aa327e76a1ec41d89f8b0fa700247dfad7ebf0c82ab889004c3"]]}
diff --git a/reveal/v5-000009/r37853812.tlock b/reveal/v5-000009/r37853812.tlock
new file mode 100644
index 0000000..051e358
--- /dev/null
+++ b/reveal/v5-000009/r37853812.tlock
@@ -0,0 +1,11 @@
1-----BEGIN AGE ENCRYPTED FILE-----
2YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHRsb2NrIDM3ODUzODEyIDUyZGI5YmE3
3MGUwY2MwZjZlYWY3ODAzZGQwNzQ0N2ExZjU0Nzc3MzVmZDNmNjYxNzkyYmE5NDYw
4MGM4NGU5NzEKbzF6MkdRczUzYWlWUlo0WVVaVzBXR1lTbVdNOUNhTEh2aWIyNWtI
5aHQweTdoOHUxVU1EL0hJUE5HQUp0SytmNQpGYURMTGlzaHdwK1pPZGZ0S2RIVVBz
6Uzl2dVQySlBGNEhtd3MyNUtmSGJSdnpKQ2FzQk5aVzdrd2lRemtHM012CldVdS9t
7SmRacENvUzJDT1VyOFFqRlVSTFFlTW5sbzZYUmJ4TWdwc3loQlEKLS0tIHZWeDl1
8WEVod1YxT1RzdTVvbEg0MHo4Y21pOXluUjk1RldBZnlQTXNBdWMK4tiyrgaGLTAv
9OmIHUfOxCVdho0/9fPM60qLNKPiSiYW/rUzrfobugaFoyRSKJK+BFEot+U6hqpSL
10dvQxUH94Zw==
11-----END AGE ENCRYPTED FILE-----
diff --git a/reveal/v5-000009/seal.json b/reveal/v5-000009/seal.json
new file mode 100644
index 0000000..929e4f9
--- /dev/null
+++ b/reveal/v5-000009/seal.json
@@ -0,0 +1,43 @@
1{
2 "algorithm": "sha256-live-v5",
3 "anchor_ref": "sha256:f7dd3d54a02d0aa327e76a1ec41d89f8b0fa700247dfad7ebf0c82ab889004c3",
4 "covers_after": "2026-10-05T22:14:57.492859Z",
5 "covers_through": "2026-10-06T22:21:37.282794Z",
6 "digest": "f7dd3d54a02d0aa327e76a1ec41d89f8b0fa700247dfad7ebf0c82ab889004c3",
7 "follows_seq": 39,
8 "n_forecasts": 2346,
9 "n_groups": 20,
10 "n_withheld": 2346,
11 "prev_digest": "8a0ebba38fedca4ec75b165081248fadcbae9c0d5db85e3b5681c8ebfd61e765",
12 "prev_seq": 8,
13 "sealed_at": "2026-10-06T22:22:21.438064Z",
14 "seq": 9,
15 "variant": {
16 "beacon": {
17 "chain_hash": "52db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971",
18 "genesis_time": 1692803367,
19 "period": 3,
20 "relays": [
21 "https://api.drand.sh",
22 "https://api2.drand.sh",
23 "https://api3.drand.sh",
24 "https://drand.cloudflare.com"
25 ],
26 "scheme": "bls-unchained-g1-rfc9380"
27 },
28 "cipher": "chacha20poly1305-zlib6-nonce0",
29 "gate": {
30 "default": "withheld: a kept salt can be released later; an opened text can never be withdrawn",
31 "opened": "none",
32 "why": "no decision by Echo yet"
33 },
34 "line": "numeric<TAB>open:<v4 line> | numeric<TAB>withheld:sha256(salt||v4 line)",
35 "reveal": "utc-day-after-close",
36 "salts": "key ring: one content a seal, one part a line",
37 "tool": {
38 "name": "tle",
39 "sha256": "69157d8c14a1d390d1b7744946288f83d4b10748471d5447f9abb77a5902c541",
40 "version": "tlock v1.2.0 -- github.com/drand/tlock"
41 }
42 }
43}