proofpress 0.1.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -6,41 +6,32 @@
6
6
  [//]: # (ob:de7999eb)
7
7
  # Proofpress
8
8
 
9
+ [//]: # (ob:7542280e)
10
+ [![npm version](https://img.shields.io/npm/v/proofpress.svg)](https://www.npmjs.com/package/proofpress)
11
+ [![CI](https://github.com/chenmingtang830/proofpress/actions/workflows/ci.yml/badge.svg)](https://github.com/chenmingtang830/proofpress/actions/workflows/ci.yml)
12
+ [![License: Apache-2.0](https://img.shields.io/badge/license-Apache--2.0-blue.svg)](LICENSE)
13
+
9
14
  [//]: # (ob:e667d986)
10
- Proofpress is the trust layer for multiplayer AI: an open, agent-native ledger
11
- that travels with the artifact.
15
+ **The trust layer for multiplayer AI.**
12
16
 
13
17
  [//]: # (ob:0e0e9d9a)
14
- Humans and agents can produce a document quickly, but the decisions that shaped
15
- its final form are usually scattered across chat sessions, Slack, meetings, and
16
- somebody's memory. Git is excellent when the work already lives in Git; most
17
- knowledge artifacts do not. Proofpress keeps a shared, checkable record of
18
- accepted changes, stated reasons, consequential rejections, and their relation
19
- to the artifact itself—so that history can travel with the work.
20
-
21
- [//]: # (ob:cc376e2b)
22
- Think C2PA, but for knowledge work: a portable, inspectable record of the
23
- history admitted into an artifact. This is an analogy, not a claim of C2PA
24
- compatibility, signed authorship, or complete capture.
18
+ Proofpress is an open, agent-native ledger that travels with Markdown and
19
+ static HTML artifacts—even when Git does not. It keeps accepted changes,
20
+ stated reasons, and consequential rejections tied to the work.
25
21
 
26
22
  [//]: # (ob:6ef36a68)
27
- > Git made code collaborative. Proofpress makes intelligence cumulative.
23
+ > Git made code collaborative. Proofpress makes intelligence compound.
28
24
 
29
- [//]: # (ob:169d8523)
30
- ## Status
25
+ [//]: # (ob:cd8c1f66)
26
+ Think C2PA for knowledge work: a portable, inspectable record of admitted
27
+ history—not a claim of C2PA compatibility, signed authorship, or complete
28
+ capture.
31
29
 
32
- [//]: # (ob:d6f9f208)
33
- Proofpress is a V0 reference implementation. The CLI is usable and its portable
34
- artifact behaviors are covered by black-box tests, but the embedded carrier and
35
- command interfaces may still change before a stable release. The npm package is
36
- published under the `next` tag while these interfaces settle.
37
-
38
- [//]: # (ob:19210f53)
39
- ## Install the alpha
30
+ [//]: # (ob:cc376e2b)
31
+ ## Install
40
32
 
41
- [//]: # (ob:989f25ec)
42
- Proofpress keeps its zero-dependency Python engine and adds a thin npm launcher
43
- plus repository setup command. Python 3 and Git are required:
33
+ [//]: # (ob:d6f9f208)
34
+ Requires Python 3.11+, Git, and Node 22+:
44
35
 
45
36
  [//]: # (ob:7b197ac1)
46
37
  ```sh
@@ -50,231 +41,112 @@ npx --no-install proofpress setup --agent codex
50
41
  ```
51
42
 
52
43
  [//]: # (ob:5ae48e1b)
53
- `setup` installs a package-aware adapter and writes
54
- `.proofpress/manifest.json`. It is idempotent and supports `codex`, `claude`,
55
- `cursor`, or `all`. Portable history remains opt-in per artifact.
56
-
57
- [//]: # (ob:da019dfc)
58
- `proofpress@0.1.0` is the current stable release channel. The deprecated
59
- `0.0.1` placeholder is no longer the default install.
44
+ `setup` installs the agent adapter and writes `.proofpress/manifest.json`. Use
45
+ `--agent claude`, `cursor`, or `all` for another supported harness.
60
46
 
61
47
  [//]: # (ob:4273537d)
62
- ## Verify a portable handoff in five minutes
48
+ ## Create a portable document
63
49
 
64
50
  [//]: # (ob:1160e434)
65
- The [portable handoff demo](examples/portable-handoff/) contains one neutral
66
- community-planning document with a real, embedded v1 → v2 ledger. In a clean
67
- Git repository, install `proofpress`, copy only `strategy.md`, then run
68
- `inspect`, `import`, and `verify`. The recipient needs neither the source
69
- repository nor the original session.
51
+ Run these commands on a Markdown or static HTML file:
70
52
 
71
53
  [//]: # (ob:2b655d31)
72
- To add a visible, transparent distribution mark to a repository README:
73
-
74
- [//]: # (ob:d4916c37)
75
54
  ```sh
76
- npx --no-install proofpress setup --agent codex --badge README.md
55
+ npx --no-install proofpress policy proposal.md portable
56
+ npx --no-install proofpress anchor proposal.md
57
+ npx --no-install proofpress snapshot proposal.md --kind agent --author codex \
58
+ --why "accepted the smaller launch scope"
59
+ npx --no-install proofpress verify proposal.md
77
60
  ```
78
61
 
79
62
  [//]: # (ob:5796ae98)
80
- The badge says that revision provenance uses Proofpress; it is not an
81
- instruction for agents to download or execute software. Installed adapters use
82
- `npx --no-install`, so an agent can use an existing local installation but
83
- cannot silently fetch the package.
84
-
85
- [//]: # (ob:e7b4f799)
86
- ## Single-file install
87
-
88
- [//]: # (ob:d8cafbd3)
89
- Proofpress is a single Python file with no third-party runtime dependencies:
90
-
91
- [//]: # (ob:0b5b4916)
92
- ```sh
93
- git clone https://github.com/chenmingtang830/proofpress.git
94
- cd proofpress
95
- python3 proofpress.py --help
96
- ```
97
-
98
- [//]: # (ob:166fd594)
99
- To use it in another repository, vendor `proofpress.py` at that repository's
100
- root and install the matching adapter from [`skills/`](skills/).
63
+ The policy is sticky. Each accepted snapshot refreshes the hidden capsule in
64
+ the file. Source code stays in Git; Proofpress manages only Markdown and static
65
+ HTML knowledge artifacts.
101
66
 
102
67
  [//]: # (ob:949eb6a5)
103
- ## What “portable” means
68
+ ## Hand off a document
104
69
 
105
70
  [//]: # (ob:2173502c)
106
- Turn portability on once:
107
-
108
- [//]: # (ob:c44f6768)
109
- ```sh
110
- python3 proofpress.py policy proposal.md portable
111
- ```
112
-
113
- [//]: # (ob:79416c44)
114
- The setting is sticky. Later accepted revisions refresh a compact, hidden
115
- capsule inside the carrier file. Send the original file to a collaborator and
116
- their agent can inspect and import its history without access to your Git repo,
117
- chat session, or Proofpress ledger ref.
71
+ Send the original file. The recipient does not need your repository, session,
72
+ or local ledger:
118
73
 
119
74
  [//]: # (ob:af7113fa)
120
75
  ```sh
121
- python3 proofpress.py inspect proposal.md
122
- python3 proofpress.py import proposal.md
123
- python3 proofpress.py log proposal.md
76
+ npx --no-install proofpress inspect proposal.md
77
+ npx --no-install proofpress import proposal.md
78
+ npx --no-install proofpress log proposal.md
124
79
  ```
125
80
 
126
- [//]: # (ob:bfc931ca)
127
- The capsule is declarative data, not agent instructions. It is tamper-evident
128
- for accidental drift and inconsistent rewrites, but V0 does not claim signed
129
- authorship or protection from wholesale malicious replacement.
130
-
131
- [//]: # (ob:839fc8a1)
132
- Portable carriers include a non-rendering discovery marker with
133
- `Verifiable revision history by Proofpress` and the project URL. The capsule's
134
- canonical discovery object names `proofpress@latest`. An agent may explain
135
- this provenance and offer installation, but must obtain user consent before
136
- downloading or executing anything.
137
-
138
- [//]: # (ob:cc095bd4)
139
- ## Static HTML carrier
140
-
141
- [//]: # (ob:e6463f5e)
142
- Proofpress also supports static `.html` and `.htm` artifacts. `anchor` writes a
143
- stable `data-proofpress-id` onto supported visible blocks (headings, paragraphs,
144
- list items, block quotes, preformatted blocks, table cells, and figure captions).
145
- The metadata marker lives in `<head>`; a portable capsule is a non-executing
146
- `application/vnd.proofpress+json` data block before `</body>`.
147
-
148
- [//]: # (ob:b8abc9df)
149
- ```sh
150
- python3 proofpress.py policy launch-plan.html portable
151
- python3 proofpress.py anchor launch-plan.html
152
- python3 proofpress.py snapshot launch-plan.html --kind agent --author codex \
153
- --why "made the accepted review scope explicit"
154
- python3 proofpress.py verify launch-plan.html
155
- ```
81
+ [//]: # (ob:5e991c72)
82
+ ### GitHub or a raw file
156
83
 
157
- [//]: # (ob:00768820)
158
- This is a static-HTML carrier MVP, not a framework or CMS integration. Proofpress
159
- does not yet promise round-trip preservation through React/Vue builds, HTML
160
- sanitizers, editors, or CMS pipelines; if they strip transport data, the file
161
- degrades to an ordinary HTML artifact `identify` can still recognize it
162
- locally, but its provenance does not come back.
84
+ [//]: # (ob:398568bb)
85
+ | Route | What travels |
86
+ |---|---|
87
+ | GitHub | The file and capsule move through ordinary commits and pull requests |
88
+ | Outside Git | The raw file carries its own public history |
89
+
90
+ [//]: # (ob:a908fde7)
91
+ `refs/proofpress/ledger` remains the complete local working record. Portable
92
+ files do not depend on it: their capsule crosses the repository boundary with
93
+ the file. A team that also wants to share the complete ledger must run
94
+ `npx --no-install proofpress sync` explicitly; an ordinary `git push` does not
95
+ push the special ref.
163
96
 
164
97
  [//]: # (ob:226a29fd)
165
- ## What gets recorded
98
+ ## What is—and is not—recorded
166
99
 
167
100
  [//]: # (ob:cfc1c3aa)
168
- Proofpress records accepted artifact versions, their computed block changes,
169
- explicit actor roles, the reason for the change, and consequential rejected
170
- directions when the authoring agent supplies them. The account is checked
171
- against the actual artifact diff.
101
+ Proofpress records accepted versions, computed block changes, stated actor
102
+ roles, reasons, and consequential rejections. Claims are checked against the
103
+ actual document diff.
172
104
 
173
105
  [//]: # (ob:5e0b34ed)
174
- It does not automatically store raw prompts, transcripts, tool traces, casual
175
- brainstorming, or every save. A fallback hook checks Git candidates and current
176
- paths already admitted to the ledger, including Git-ignored artifacts. It can
177
- preserve an otherwise missed version, but identifies itself only as
178
- `recorded_by`; it does not guess who wrote the content or why. Harness skills
179
- can also capture a specific existing file before an agent edits it, keeping
180
- unattributed human drift separate from the agent's revision.
181
-
182
- [//]: # (ob:d8387b0b)
183
- ## Privacy modes
184
-
185
- [//]: # (ob:5df13acf)
186
- Each artifact has one policy:
187
-
188
- [//]: # (ob:3b52e3b3)
189
- - `portable`: future accepted versions refresh the embedded capsule.
190
- - `local`: versions stay in the local/Git ledger; the current capsule is
191
-
192
- [//]: # (ob:126978a2)
193
- removed.
194
-
195
- [//]: # (ob:0890e114)
196
- - `ignored`: future capture is skipped.
197
-
198
- [//]: # (ob:c6642117)
199
- Switching from portable to local cannot recall copies already sent. Re-enabling
200
- portable starts a clean lineage at the current body, so private-interval actors,
201
- reasons, rejected paths, event IDs, and omitted-event counts do not leak.
202
-
203
- [//]: # (ob:18995a53)
204
- For a one-off history-free copy, use:
205
-
206
- [//]: # (ob:f28051ef)
207
- ```sh
208
- python3 proofpress.py clean proposal.md --output proposal-clean.md
209
- ```
210
-
211
- [//]: # (ob:bfac82a8)
212
- ## Core workflow
213
-
214
- [//]: # (ob:706dcea3)
215
- ```sh
216
- python3 proofpress.py anchor proposal.md
217
- python3 proofpress.py snapshot proposal.md --kind agent --author codex \
218
- --produced-by codex --recorded-by codex \
219
- --attribution-basis harness_attested \
220
- --note "incorporated review" --claims /tmp/claims.json \
221
- --why "the team chose the smaller launch scope"
222
- python3 proofpress.py verify proposal.md
223
- ```
106
+ It does not automatically store raw prompts, transcripts, private reasoning,
107
+ tool traces, casual brainstorming, or every save. See the
108
+ [privacy boundary](docs/PRIVACY_AND_DISCLOSURE.md) for the complete rules.
224
109
 
225
- [//]: # (ob:33e05aa8)
226
- Use `--rejected` only for consequential dead branches that future collaborators
227
- should not repeat. Source code stays in Git; Proofpress is for Markdown and
228
- static HTML knowledge artifacts.
110
+ [//]: # (ob:47f21d3a)
111
+ ## Merge parallel copies
229
112
 
230
- [//]: # (ob:59769c11)
231
- ## Merged lineage and stripped copies
113
+ [//]: # (ob:55bcd98e)
114
+ Keep every original copy. First, ask Proofpress to find the common ancestor and
115
+ report only genuine block conflicts:
232
116
 
233
- [//]: # (ob:91a8deb1)
234
- When one document merges several Proofpress-managed sources, record the
235
- upstream references — identity, head version, and digest, never copied
236
- history:
237
-
238
- [//]: # (ob:100c5aa7)
117
+ [//]: # (ob:8f498c01)
239
118
  ```sh
240
- python3 proofpress.py merge-lineage proposal.md \
241
- --from research-a.md --from research-b.md
119
+ npx --no-install proofpress merge-plan proposal-alice.md \
120
+ --from proposal-bob.md --json
242
121
  ```
243
122
 
244
- [//]: # (ob:144c3d60)
245
- When a copy lost its metadata and capsule (pasted as plain text, reformatted,
246
- sanitized), the ledger can still recognize it by a deterministic content
247
- fingerprint:
123
+ [//]: # (ob:d4ed0d79)
124
+ After an agent or user resolves the visible body, record the reunion:
248
125
 
249
- [//]: # (ob:28dec45f)
126
+ [//]: # (ob:74883804)
250
127
  ```sh
251
- python3 proofpress.py identify pasted-copy.md
128
+ npx --no-install proofpress anchor proposal-alice.md
129
+ npx --no-install proofpress merge proposal-alice.md --from proposal-bob.md \
130
+ --kind agent --author codex --why "resolved the parallel review copies"
131
+ npx --no-install proofpress verify proposal-alice.md
252
132
  ```
253
133
 
254
- [//]: # (ob:b705ac38)
255
- `identify` answers identity "this is that artifact" — on a machine holding
256
- the ledger. It does not restore history or prove the copy was never altered,
257
- and a copy with wording changes intentionally does not match.
134
+ [//]: # (ob:1575e201)
135
+ Same-document branches become `parents`. Other source documents remain
136
+ `ingredients`; record those with `merge-lineage`.
258
137
 
259
138
  [//]: # (ob:2a955c60)
260
- ## Surfaces
139
+ ## Go deeper
261
140
 
262
141
  [//]: # (ob:8deed5b3)
263
- - `proofpress.py`: zero-dependency engine and CLI.
264
- - npm package: thin cross-platform launcher and idempotent repository setup.
265
- - `refs/proofpress/ledger`: local/Git-backed ledger, separate from branches.
266
- - `skills/`: Claude Code, Codex, Cursor, and Pi authoring contracts plus
267
-
268
- [//]: # (ob:1f7d312f)
269
- best-effort fallback hooks.
270
-
271
- [//]: # (ob:605a678d)
272
- - Embedded portable capsule: path-independent handoff outside Git.
273
-
274
- [//]: # (ob:820f39ab)
275
- Start with the [documentation index](docs/README.md). The executable behavior is
276
- defined by the [Portable Artifact V0 contract](docs/PORTABLE_ARTIFACT_SPEC.md),
277
- with its disclosure limits in
278
- [Privacy Boundaries for Portable Artifacts](docs/PRIVACY_AND_DISCLOSURE.md).
279
-
280
- [//]: # (proofpress:meta:eyJhcnRpZmFjdF9pZCI6InBwXzU1NmIxMTVkZTcxMWIwY2QzM2VlZDI2MCIsInBvbGljeSI6ImxvY2FsIiwicHJvb2ZwcmVzcyI6MX0)
142
+ - [Five-minute portable handoff demo](examples/portable-handoff/README.md)
143
+ - [Documentation map](docs/README.md)
144
+ - [Executable V1 contract](docs/PORTABLE_ARTIFACT_SPEC.md)
145
+ - [Privacy boundaries](docs/PRIVACY_AND_DISCLOSURE.md)
146
+ - [Agent adapters](skills/README.md)
147
+ - [Contributing](CONTRIBUTING.md) · [Changelog](CHANGELOG.md) ·
148
+ [Security](SECURITY.md) · [Code of Conduct](CODE_OF_CONDUCT.md)
149
+
150
+ [//]: # (proofpress:meta:eyJhcnRpZmFjdF9pZCI6InBwXzU1NmIxMTVkZTcxMWIwY2QzM2VlZDI2MCIsInBvbGljeSI6InBvcnRhYmxlIiwicG9ydGFibGVfaGVhZCI6IjExZjBkYzYzIiwicG9ydGFibGVfaGVhZF9ldmVudCI6InBwZV9mMDBlZDU2NGU1MTJiYjM4NTQ1OTc3NTgiLCJwb3J0YWJsZV9saW5lYWdlX2lkIjoicHBsX2UyOWYxODUxZTBiNDhhYTFkNDIxM2ZjMiIsInByb29mcHJlc3MiOjF9)
151
+ [//]: # (proofpress:discovery:Verifiable revision history by Proofpress | https://github.com/chenmingtang830/proofpress)
152
+ [//]: # (proofpress:capsule:eNrtfUlzI0eW5l-JYR1KqiLI2BdKLevsVFYpbbRZZkptbck0wsPdg4hKIAKFCJDJkmRWp5n72FifZq7zF-Y-P6UOYzb_Yt5zD19AAkEsTNTScVAKBCJ8ff627z1_P52QRVsWhLZXJTu5OJnPr6Iozj0vYjzxvNylLAg4Z37snpye5DW7u2LlNW9aeLaZED-KL3KWpTGlCaFe4foeTUKX5MxjhZe6bhb5LI6TLOXcZRmJkziOaZxzFgVFknI3iwtol5UNrW_44u7k4if8o71qyTX0MCUtdnUKH3I-hS9-5IuyKEk-5c6C35RNWVfOBJ6vF3dOfud8v6jrYr7gTQPvzAl9T645Tmrl60X9Bw7TXS6wwUnbzpuL8_Prsp0s8zNaz87phFezsrpuSXWdBu75ytsL_sdlCZ-vlg1fXNG6angFa9EulvyX05MJJ7iIHiwEo3FwIr-54jfiIVhcflW4Lkw-Dnnk-XkepFEYZUkSpTiyetHi1K6mZcVh5GpHplfcz2A1I4-7eZgS4rHQ94KC-nI63eiuKJk3yylM2Mdx0nrBmpOLtz-ddN3_dAK7XC8a_CR_5uwqhyV_e0Jrxj-cvIMZKGqAjl-9ePblNy_OZuzkdCciIW27KPNlC3tzlZOmbHCZyaLCIcJvsKFcNLlsJ_UCB_O-rLDV5g5-mcEvFZnhrslBnZ408CK0dXJRLadTGCKdwMZwObV8WtP38GzMaZJ4eQiPw560_ANO4JP_--__9f_9r3__FL7suiCMib7nSDz8Fr75fO6QaXld_dPlCYVV4ovLky8uK8f5vJxdO82CwvekaXjbnE_r6_qsubm-PIE3Wvi-IzZorr2bCzIjC3Lyy6kZFaxOlmU8XxnVCo1uHNevVmm56wGpCShzpRMOxwtP4B6dmKecsnHaCXeAjpvWmZI7vnCKeuHMltO2nMu_n728cEjl1HNenTqkZ9oud3kGh32PEX21nJGqgW6YAwegahuHQpdA42xJuUMcVtPlDL534BTS99O7UwcITYyc8Z4RURokMff32Yg3k7J67zz3v38m-8JVeV_Vt1POrrlzWy_ew6o46uieOmXVzIG9CBbVM6KYF0FM4nSPEX3h_L5snRlh3MEjAv9MgT3WC9KWN_zMoht45j2HrYXmp0DjvKJ9a-TFGUsjP1gZ0euWtMt-Qv2Vox_qoVIWF1nhu-mOrVuTcc-8M1fRKV0uFkgGjVzoaj4DeTDlpIEFABkh5ELfXDPfc4toda4vK2htOn1ksuapntlmKUw24nTX9q3pvud8DnsHJ-BPfFGPGIdjx2ALQcjdAeOsHF5dg5iQR4Wxpm-6Se5lKJ53Hc54PG4mlxWubimfdkajhtxwGM6NYyQPPvIBfqrqkXoOfjQDQjJdGVBEeJhyL995QMCJl_OxGk2DJ09K-RG5JQtYDUbmwMTFqtwuShA2l9X4TI60j1ET18tYsfN-jc0a_LOgz_EGAu2I00HZVfHpmfNm0jOc0E-CKEjYynCE6nNn8RoH2mJ1UcBqOAUcfQeUlmXLH6HfbZt55Dx7XuzyMAiffIhvYPHePnif8Vn97hP-gczmU96cq99H3e_nnzo4ip4l9fM4iljgPf14azx-0AZqo0ICtAsQYTAA3H7UZZUyBOx48d5p4Xkgh3ndlH3jZWHmxSC1nny8-kw_PLCK9YhDBr8KCSxkDD6bE3bdd6STLCY8Sz8KQWDf3GnIHR4u0hrdH0YNyi0ByeaAQt5Ywu8z4J19PJEneViAerYqkIDMgaqKEkZabiUO1r_RJwhTSoqcBYf0u6q3EacRryvBIFq5BXvGqWpYrnLBRjD79s5ZLKu27NPb8ihHsjtkaB15gTnl0GkN8mkXA6uHvLw4LliUhYeMDY4qEAnSBVAfqWrg0wt1FMGAPHWAlBiodxZXP5vfjR0guL6jmoWg4sckWhnavyKZ_uXP_0MR_l_-_D-dGQfG8Ag99b3XQ1W-BxLD9enhY3izXFTdcS2nJVANUFQN5-uiT70OwwIs-_Tw3jvymQtKDpyVjYBRTUvQf-BL2DIyBctU8xWQ8uNxD_kkWQjsNAyfYH2AHQGDbGEH8PA1Ldghd2fO10SoHZRy0D-YZlANfCpg_BM4pbTuWUJSgCEdFOQjL2FnndhruPpoH4fnWebRxF8Z4pvbuhN4MEZnQcrpIxT-K2f9Kz3EHWRpFKd5fkjHoMyVYCuB5fTVMj8VKto3II5ZfVudf_Xmm68l10S1sRRGp_CkYAc3fNq3bZmbFmDmHzK075btg7HVixK0ezKFt2_l0LSB3rV75rxse5X-vKBZ4FFyyNCQ2NVawAAYp1Mi7UyHkZacgoRppaEu-O9iSVHRaXBsfUNLg6ygKfEOGdr3SqOgZLEoweSDEdDpkqGXoKqr0QLNpQWeUu1cFAoYnNLbXk-Bm0U5Cx_YqSV1BJ103W1hEj98o9eLE8ZBEfFD-rXUAjJtaqdZznEtkUmJdsZnk3Y2HQsqF5_hY-fXa_oIKSU5BevokKFtw9enZFnRyWg-JZUYqGbuPTzJdUHspL57yNjeTEqlR4kXR_aLzjc_ft-RuVMsyIyjxweOp_P8m9dAcX0Whx8TPyvYQ45-zVuUC9IDu40-cP-FHjqiBfVoQMgBvVpk1HmRjVxT9AKqknCyNIJdlQsQbrO5VOQ3rUfE3TwI-SHrAVyF1aDli-1YtvUMtwuUvjsHEQAumCWQ1mzeNp0ZRhel_KNP9rI0SJPcve8dLG8IUOUMSO4xpe3-sz37E7HCCwgt9uvrBaETswcT0jioYsvz06egBXnk8yAP9ut1BBpxdxTHF06xbJfoaVEkoShBazoopvgs59iOJQWmYAqvqvR-nCUp8fcblAP9zYCts7M-iybNXO554d7zLq8rICxmpg3SUPwfVb_35Xy-0v-DKdI4Dn3PS_br_zUYcXSCIqwAojY2dFs70D4oB5RUeBTg6KAFT-t5yZH1LxCF6nF-plkWkWhPYvgd8D6CZDdCM77D3kaw8-iInoMRBSZWHykWfupGHt_zAPTKETrlEizQ5sFoVC9b4Evyyx45ksOBSn2yasE8R56C_L6Y1rePsID7z_awgMSNGeUk2K-v3hUgIEBhfzZq90XPEgQBdyOy7xL8AIb1eARaF2KrcGCAQoAtI1giMNI_LkFHLIFkGSyIky9woLxz5hR9QiNL4ox6q5riN3xxDaylQ0mFOoNeNjyM3SF4ZLO2aqBnB8Ok8D0W3AO4YOzTKdfnsC4EJ2xAZ9Cw1WOm0ZZt9MmXKKcsS_mTDk3r2miJgBlQO5LtCChcoFHAkma4qGfOf-Z87nChbgsjps8MKMIspa73pGPtPR9ijELD1GdkREB4cmQWl5eXNmj04IAwUF5clmRPOlxhYdWzGdJghcsGyyqBC4lqdk2cOc-qztBCQBTeyHuVzyRMQalxw-Mt7T3Wo5dVP9_n3IuSiPtPTAjPQCSWFTD_xpkhqJ1zI0HXNDm2QhzGfd4-j6SM50871n-d8EqochrfFpSKrnggCWCbRicfAakQ5F5NvVxQ3pz2SXrXpcDSk2MfMMVYbVEsThcI5D4yCEMasNh9-qUlQjcBrQnoAP07M94SdGAI1q8cHJ_MSSNsnMYBDlFWvU5fH4iAhlFxvKUtGYrQAsxlMcwRzkicr37PZ56AVKdB-rQDVYNBZ0JzK7wv4pv2zvnLn_-7c3nSdka1kPDqaF2eiF_rqjd8xCdZFNF7ZPB6uYAWHpXs1mM9QhL2jrPonjm0TQ-j-9jAxQN03oLln3_98uyyGonohDmhfaYQydPYv2cVbjMgRyhnaCIoneozi8tJwgaTAKQ07u98mQNXduZ8gZhJH5Pz3cQr8mSfBQKzaDptzmFpnk8J-uOeA0mein8_wP-Wi6ZenIr1-b50ZBAYjt_2jj9cnyJhgefvsz45b9oRLwp0KhZA9Dmh751JXb9v-gzHGA5NnKRsjwV4oUzf-_twAUTQTkbwZkctrUZDa-EC7lmA1HeLICP5zuN53cLhk2ggUsBbdbqJQKRxLB_efQJfNuc63O9TjE4AE_7D_fV5d6pCCU86o_-Kgq0pw_nELyo8kF-lWeKSmEcRY0HK8iwPSebHwroA3VG0qZZHSQugXvp-XpeC9Uj8XMb8qb8w5O8dhkmiu8NqwQ6dtBoRQZl7RlU2ddFeFUCXfDFflF3wZpN7F5QlBQ2TmCVeVMQ88eMsCmlKPTf2OUkCxl2acvgxKvDRPCesSDIShh4jLhUAHXoZRRCm3K2LOPsFFhqjJH3Xj0duMvLjN25yEQYXfvxb171wkRV2K45OjYyx0OMhEIj59qeniNwU1CYDKyekmaClU3gxicM0osJiF21YsZYdIR4eRInORvwNvr8tWTuBX9IU_pjw8nrSdn9Bm5-fz79Yc2y70aZREhdB6sWZG6jRWjGY3WgfD63smmNZjDp_kuYizkU0Z0VbPgja2z2IEhX6USUBFRFQuLishMSUwFNjDq7axrPNs_cS4JIuKdwi52q4VihmN9xDIixph2mKITYTAvbyZYX6VCGwKpjrTMiaZbOUXlmK8b4L1KnoooYFouJFGc_bnDqvp8CMT0Eb4winNkIqXFZNPeMYaP5r1NNm9eLuTJiYsLj8A-WgtsDgblGrw0EJd7x0eYF-B-uIOBA-_5kzA23vsjKxmhrr6AzYlVBJGW5HcFYw3lPJjLrQLXRMg4p0WWmfZxeCfCoQAwH3kkbMaNXZIb0hcq644NJVvuBTwX1hq-uVvUXVlE8LUJGaWq6xCm3HLZIkYSgCZ95DDUD2jMTAlVIRdCmowQqDVaDbAdGtemFwOJeVGiths7LFRSlxfjBwTbqORlow_ILAeb9T0AoFhXuGTeFQLitEE2CNZAQCrDLwFiQioSw0k3J-6tQScpjyVvtkexYjKjKaJ0Uch5wYNqYjcLvFOCSw1oFTs5zKJ3s2JXY9n6fEz2imxmHF3SoG1R9S27VFSApKmp94pNBzsqJsH3KnnQNo3TP_zAVDfj4hZx6YJVKpaFb4mZbiim80F6J90H0F1eI-3_0JVM8HFsdlhQavAuFxQxsLt1NEc-rg4PkCGGReA-VLKit5d6I6GhQHyzqf8Eo9lUF3BE-1GPGoi8kTmgpsZyk5SBdAqnAMyVru6uVlVXEkOmBuHyQ18-uFVJsaqXj1bHRaMJbSFORsluiNNkHHZqN7w4m7xtw48lJQo7jPtBC2Iowf7vTOscME48QqQQUShUVBNJ8uGys8qgsL7JxVZ6qpQLSCBwc5f-cTZBebl4aysMjcPEgI1WLKClDuZnNY6LFaiNGo29WdAx43mdWKocR-kLGcAJfV3NUKalaTOCRcGUd2DktdFmDBnP0B5MtYxFWUwtaezUGLhsEK37XC-cdi6ONT-CBMr_EpNEeFxTUWLHMMo4BWtD9X8ewFnxEYJKglLawPGojbKBwpLVw_C4QCqTmQiaRWi3BAjDQqHXOEt1rUNMbuGTQwRu8M5ZN6ymCYJaLBoDqipt5pKQWB067WvE8osCLLMX4AFHU1fCvy2pzRA0OmlXrmpUHAIp_HCdUswURRa4G8f_iz3EI41xVfgrYwFXJ0tgQN7U74vCsRDaP0O6FIYCgymZ4avPbGc_7yX_6bc-N3-iiQnHCfIbR2WeExtwMm1Vmy9nh8Kn1tAv8ZNzAO4JvoqBqLUIEKo1BhKztFAmm1nOF8xpKhj2_EYo_l7sPWlyAuYLTIi2GreSmCNoWzSvg_LyuLQ1X1YjV6qlM1e4ggx1S8lBReSDUNW7HialcOCPLGgUmDrI8pRiQkRUiSPNVM0QoBv88U94nd5o42Cx9hbhkHgRP6jLmxXhMrvNui1H3jsssuhgMowYobE9pnZ5TACqJaMK0JQ8bFP3AKJ8xBuxw555kSnCihJRNtsCeY2f3VAcJqpB6q4ROMAob_8Q-wcXgmJJrePS9FPOwmHB-Jrzcl2hwIZ_KWTmyloYewCEj_wGdRQn29iFbMuaXqbRtB3jVcFH6c5SzlaaRFjxVUvtYq3S1EfCbYrlQZQNPqIVs_LmiKCb-eUXOsKPJVst0vJrw5g6dgK9iK0F_vIh-NJnw6f4S6g8xPc-qyiMae0cF1dLk58XvHisuToB79NQwXnpGiWp1YpKEZ6aI7lBYgojzeagfqu0-6T5_2kBmL04BngUdAF9G6oQlIN2S2Y2C5WizQcYARFEnOtNCyYs3VYu0QM64cSwHNcoocxdPjtsLIVynnycLBFbd1wfhjQZEGqXbsWBHiFoPbN9IbzFe0XSYlCNUKGUkXQyujkIXy08UX4lE8c15z6R4wokscUSFHjBlaL6SHRPoRDD9TUd2CwoQ0Fcp_5-5XSh6e9xpsfBx6IzgsWDkLI9RPV9wzQl-0vXNCHcBJKtFcaLWxlSC2sMYvK8FNz2WraJ19hribWEQrfK-sbsi0ZLCWtl6Fk5aOCNHICJUIy7MgDD51rkZTjv6QaV2_B4nXQRzA2ytyQ8opNtdzbBIWuFEUhDQ3Is4Kwd-G_B4NpbcelXuyxZPT-nr1sV46Bu0VLMPCixPPWCEmSl8f_h1i7pUKECQ0CbwgKsy5t8LwTYbk3kH18PSiXl5PgMygc7K4k9pqidGaCsuSKuF8OZ0KwxLsoObMGQPlNZZ8OJeUOdbUSC6rhuOGt4YqFfmukpDEPz4DQwQIbDZCkhYi_ry5qyieeRABxRL0aKRIK-SF4eHR9Cv0AZuCe-guJoFXcF5QN9NOGyuHoFvXQzIC1Cprg0A45zpWoGM1UZ2GaaDC1dGxOPKW7xLfB6uGyB8E25Hu6utlia8i0o-HWpoRnYCUmr8FJneYS59LjLMkYCzNmB-pFbFSFyxevG8iAq4TGE58MQJWjbDbZSUUTUrFXxiUBiaHks_owQV-gy2pSBzJkX70DPeS7krploR10X5JR0bAtLzTZ1Gg34KlyuE4o8CHPShr6VVBG1ZE9vQwKRpzsBejMAk1nGGlTihN74BECNg7YDFbX6oyVl5sp7tExfnh1ddSHHSbg8oOSKS6wrhsq8M6F4_jzR6NrTP9s7zhZWzFN83IHWjmIgIDJR3snmVMYP9g8PLFirYuN0hE-dQ5Uj0e3C7ysMLIH9hvOATKoMC10DaFUMCqO_R_XfeRaVBEfsoyIEyjr5hckVXP7VaZH0qdB54apEWQksAzIJNOBnmozu-c2gEsUwZnjTsfk-CQkmbGeHpGZj9GpQjdbHUP6BKQNq8j0UHnk24ScCxwka4XZD5pTkHslyK4hs_wvOCjzh-XtTg90DJCQ0SgArIV4GmSZjkouJLNF-W1CrDGo_vp2WWFhKVDdTqa1RjP-HMcyBfjz2wFwuIRkvr1JgOdk_kcDqCgmPObill-tt8K95pgJd3YJc1AJ-cIRX0x7vMjUZ5itB3ITE0aVs7MDqrsxgyYR4Lu7r-36fGmguWZ1O3DjkYjjCDoTuBoJDla5z5QkVu3kzvn8kTAIwK1sjVgfuvAUZ9zcXKBybWXJ5sGIR08a8bc75OgYDhHxGPU0yq7lfxj4Ky9U3m0e99GepBpdDz_jgsNblaCWQiaS8VGGDKs4AnpNVA6zSsOB-_8xyUcmmU5ZUDhOBA4daQq2_JPwKRPHc5QB2lO1Qjm5ZyjuEQPiZCgdzIo2dLbpKjDxUcFAMaGQ2Zc6PIIKnea1CqCIkKurIAtNBjAlhE6Fa2vKxiOgxa20LgV3ivMB8N2jeCrZ-j1oX3Io5fGjBJCPDc0NqNJhrpnkm6R26TEIXpKUwaGe5hrFmzSnR5yyp2zlzrupOHdy0qRsyOuzoJ9n3L5Ugf5Cg1KmD_iFcnJ1oHAqCcwUB2lXmLwaxMAJc8est1pKaN_Z1K0wvCB3IQeI1BpoXJco27XdgexXUI_enKsLIqe7XET6iY8YsSLuDEadG6WUu0PSLWqp_gNxqYCsWEoACjQCzFekAIwVUHyMkQcER2Q_auRWXKajQCVgFqZULNlyEIHGQBvIe2k0cC_xpw7RF1q-6edJoSrC22NumQeWzK-FD0IbFOCjHiMUJW9xWMOZ70xGU7dyZAHCbdIwvXS000QubFuVRt_tmLuXi-RIEEVBBFcdzaDCOSCfYXFANZ65nwl70hzpNdH6FFS2KucI-BqoKlD39S4LoUl0Akr7eNE1oLDOxVIoBB-YBZ317LBhCYYA9JpvdpUEsqqoCds49eN1gX7aMlPo4SEYDd71PgidTadOepbZMgpl2KWoz0b-aHnavI0SXNdk7smwilR7QWgWxVRkrra2LBy47rGD8l36xQQEfc5FiwVmtCvgFRCo1PSqHaTSGr9bAUTM4rMmqhA5WLOE-K6MYnCQjsxrKS6bja9iXLKLA2zmPmEIKaspavJnTPrsmc-nBowC3Pi-9SlVAtxK0VOhTUekPaGKDWC-6_4CEQX2LxI-7qFBoMhGwVnmfyfdmXpUeETmMEcibblI9QNQMJPpRBAsaDjfRRzF6GdKNQxtsB5-WWn09aSLY3k14KN6_QZGEKfFCXc82mUFlnkG7jQZO51a7VvNp7adw8EakQpxsKoTqwEvW1U18eS7jAXRDzzuDsroEEQBkGUpzQwrgCdmGe4yRbJdopBRV4YuRE0a3QRK_9umwk-mlP3UL1eXY3HNesu-o6NwNpWkJ2SJeY79bR1v-ZI3K_p3L9dUz-Kobags6NXYzFHD7JW1y9P4Gfhxmic83Y2P5efRZzBPY1fOJk4mYFYrhspupoZQm_K8JCq_6Ma__Z-TZakse9mIUkMqGGlJ3a7dkjKYce8LM86CFzYu-WUdY6-OSfAR14LkFmGgyHzNtGFqwAb9qpDmWQUo-UHWBOD2HPyCy_PfTdxA9eEVVh5kOYY7JvGqPRpOAchCj-XaV-kldloeY_3T0tUfCYPvCzM8yTytepuZSre92TtkWZYCZflXIIEpHl_WVkbBK8VpY6_RDczELmSsGjgNB20InzDYGgJM0ACDOiWrgrQK9o-IDTNCi9M8iglTO-Zld64DZ95PDcRTqSUiOrnvM4li8FT-8iZKhKe56mb-4UJgbQyGm0_657piNyxUhtg2aQRpTZEvC_cclJfzhGKghaW-GLDoUc8LnqtoYeilZEeKG6benqD5hmIZhEAJVUoEOdgPnaokVbhUfeVTLu5FyOILS0r4Js9OwmHrkjcKEJFSksMk025h8R4mAq5bufXbPqG7Va0sFmuKM6t102GLHSHuPPXyLO8Nde2ZtFPZ1nguhHY5Lkfa73F5Hd263dIcqYEhbRnTEEMaCvD6Ubu00B7wlMx7hJHxqo1udRdBOiDrEswkzBYBQ1oLiN7VFArhpGqhEsRGDBeyXSUIX7QMyrxNYahwDT5QoQgybc6dAo06OoaFOhSjEp6o7ox9kgEMIk85ga8sCLVrDxUfZfK_kmkK4dkOQcxggIfLBxcBxw-OpFUit-pWGRjFuN-yEvhTzumIbaQaeS257gVfhAEccKi1IqINmmr2zPOvpxTcYyQPZAFnYyIdbb0l_njlJ0EaepxEnMaGco2Kav2LuyZbwot4E5oZ_mp8RiyT08tz8YGJx6iNQT0HSC9WVmhh4AqL8NlZWUz9VkEvgd2YJCGqa_hCCvXdStgfLdEVeU1jFxeRGEO2ohWEazcVdXxwYmnzoygcckdDCAV5qFZVuEP0j6bBZeuLgWFSZZ-o5w3MNNb0nQET6YizwU2TIi77meERm-FV_Za-RSFo7lC3V0403RnIhjorDe1KecxjQuXaeKzEmUt_Kk3A9bA-9zN0pi5hV5sKynW8oPsne2K4XEXMqxc5P6gZtOKDCEVYS4BVxPKfD_UXPpQNqD9Fxa0rxwpI_QgokLcef9WXFubvRI8iWkU-C4oRyYgzCTkajfK_pm2Gi_t96aFNM5cj2ZuZsI5rExcsyt7p9hW6JdF1_502eNXyoPYywvmMy80fiWTgasXZLfUWh1cGrh-RrwsjUwqjsm21ZPcP41WmAo9Xigvzdy8SPwi94yubvJrzSVyeyfOIuQohpzzCbkpMcgCkSQOLBiV2DvZojZ3nik_5o-e3qOu7e-_e_Xm2b98_eLq2as3L3_37Pmbq9ffv3iOfQGrEYND8YI4O8gaNGmn5Uz4fsEceKucrv-CaBXBpBlhpz7ot1GdvXr547Pn_3b17Nsvr758-fr519-9_uGVnNiDVOBfcEHXFBZB1_P9siKiSIlwcNz_fn0ZElllRXgyuh9elcA-F-yvXaFEKNv7FSjZqv7BrGaILLCDb6q3GqqWcJBwb96-PRHpF_CdSOw6effuYX639AJtGvma1mUu9w9zJnxLEhiTaRyNmJwFK2AemdMlkSmgpgtDEANayStTyWibJr_VUNSZRUXX5LndT_hqa2clRQWGciYXQy3wTydgT-EyIVfvPP5rk-CkeaFWALUD6O_GTqfDpO2tk-hBs8zyPEtIFJMwS4KYhkFY-JmerZ0db2eG2xnzP_090-P2twrorHrd14X_y_q0-cfuEHiaiwICUK5SL8sISQsQncwnBfFCSjg63Qs_yorCZ74bkjgkaUTzJM85SN2o4H6cC-V7w5TuXxXgeRdhcuGma64K8FOgGRjJcFXAcFXAcFXAcFXAcFXAf8yrApI4L0Lm53kSbHlVgL_dVQEvW5lAbvEtC2_f-U4A596VAKsw2h53AuiwjQ5EOPBOAEdeCYDOtOFOgOFOgOFOgDUZoWEYRHGSF4m77Z0A_nAnwHAnwHAnwHAnwHAnwHAnwHAnwHAnwHAnwHAnwHAnwHAnwHAnwHAnwHAnwHAnwHAnwHAnwHAnwHAnwHAnwHAnwHAnwHAnwHAnwHAnwHAnwHAnwHAnwHAnwHAnwHAnwHAnwHAnwHAnwHAnwHAnwHAnwHAnwHAnwHAnwHAnwHAnwHAnwHAnwHAnwHAnwHAnwN_onQBWgqjJnV5JON0-D9vK3jy4LSv3b7uc7jVCpTfPfIu2HgzKyqQ5rCErncM09Fyk4NtRA5YPY6cJW-kbhzb_YOhWEsKhbWtVS6-vCeZ_8nFbwcem7a-6uB0rkXjXtbaijvdu9yGhmWBJ06iMunOEZ10F2-06WitWcv-G5WUFdrNWqOD-zT4kNQPOm1YFOF82oDYLNU1oqfCHhdTvtCAWUP8kfazZSg1hf5wOLNeo6eAb6bpZ9Y_uujaWJ_SAlh9e12G8e0_ZrOXMecpmLWPGIu0arFlQ8xa7LqllzOzYmtYWVVNWQrhpyrTQgat4p4h0rB2YMd638iYlfNuRPJIzrls2qck7tNybu6zlgUlU3rbpQzKZd72-pn8kh-Su9p5Mndm39UgOSf3rUQWslLRdaGrbnDU9Y5OgtgcV7JzB1qc8m_S0Hdd-v_y1nrW3ss62HcohaWl9VoDJvNpxUZ4sNUsNxcrD2npRDkjU6lkUKwthl5Hsm6bQMxIr6H_r03NAVkCvuahD3ncUQVvFxBtrWQfA78Eudo6Q7yMCE8j9lCdjY6R3z8mwwp23p8f946H75JcJ8duBCraIAdQasQn427aDXSMCtaVmwv-27eqQ-MAeRdMK3dt2JL2xfZpuTCDfDjPcM9JPMwoT1rdtp4fE_fVpzSZobtuR7BtVp7q0QuiehGk8FmPXwzSs-LkdjuoWAXZaXptouieZ66Phdj2TtWLEth3LIUFkfd4IE6-1w7LvG9ClbS0TE7Btr4cEDfQdOgPhPwlVPI7x9-nZBqTfaVn2RPH7nBwGSX-SZdkRatdMweDqWw_jYOC9j1oM2rq95Nsfju3zXhu4dQdZuTce26cNGMB1-zXZDZHVHi4Dv24_6f3x2Z5JWzDs1lrDATjtyVaXYlvQ3cabqF9xac0tF120nQj2EqnyQISIvyo_yalaDUkQMiCNdHbgJpjvqP1akOBR-93m8vGP0a-FNh61XwucPGq_Fmp51H4tRPO4-2vQzqP2ayGhx11ng5Qed50NmHrUfi2s9aj9WmDscffXwLXHlQsGwj0yXWlk97j82QC-x52vgYOPK38NXnxceWQA5eOeI4M4H7VfC5s-ar8WkP1An_6Y22tQ66N2ayDtY3Zrwd3H7PZhtZzjdGuA7GN2a4HWR52tAbGP2a2FWB_33Gp0-pjdWlD0Mbu1YOdjdmthzMfs1gKUj7q3Bj0-KrswaPJR99ZAx0dlFwYmPi5z1JjwMbu1kOJjdmuhxkflyQYiPipJGQT5qOzCYMhHXWQDGB-zWws0Pq4E0gDxUeWtgY2Pem4NQnxULmXg4KMaIwYPPuoBMuDvUbs1MO8xu7Uw3aOeW4PhHnWRDVR7VEo2uOxRZ2tA2GN2awGyR7UKDPr60btdV3IXkyHkXedFUVIRdbMC5sq3R0W5aORt3Zw0GMeItxVTUu1UbjfzSeHStPBgg2kSUEoozxh1N5Xb1dVVHy-3O6R6DqmeQ6rnkOo5pHoOqZ5DqueQ6jmkeg6pnkOq55DqOaR6DqmeQ6rnkOo5pHoOqZ5DqueQ6jmkeg6pnkOq55DqOaR6DqmeQ6rn8VM97yGCwDayPM8SEsUkzJIALNMgLHx0l6BGLW631T7ECz841WO8CN1fThXkaGOF2ItUS7EPo_arj1cdl1ODmF5xPyu8FBQKNw9TQjwGmlVQUFQUm7por6xL3MUbTe5dpH7mhRlP8zgvwsyNwsBnSZH7UeLyNCGBF_MsC1yaxV5CvCD1WMJSkuR-nkRJkbnbThCfOPFdPx65yciP33jeRZRceOFvXffCxVbMCiQRc4MiC07sdfnpKa7uleVjBd6qbs0uvJjEYRpRoYXJC6U5TRIvtwp2fD4H9REU3X-6PKEc63ldnnyB0uTzcnbtNAsK35Om4W1zPq2v67Pm5hr4GZm28L1lbuJv8P1tydoJ_JKm8MeEl9eTtvsL2vz8fP5F7z3ucQF7EGeurnEF88yyjNsV85wVjLenWl7ik4jwIufENdWDNf78sCbmtSifa5cqcuxKRUTWXhSHXN17L7i8LNredCWjVQlSYPh4imQ5y99bBQ97LgAPSFD4bpaDJNDXrVswt1XcCdoTDc95Pe_qyAuHSleakD8sQqTrUysTDW_dpp0v6FZUdzLVHbuKHA3FK59FXUhxUT06drGO5YzzVpY5lvELM1iLvgv6C8ZSmgLZZokpEK0Rd3NBf68rXddVdN00d_3Qi_VN8Bbk3jX2SlZGapSjNDjFPZDj_RbBCC_9bU-pB8pCOP15kBCqq2wluQcckD6sWYS3-itH9GiEZTtHjN9YOkq_w3o06tjAzn7tx0qF-WEUA4dISaErF1oxBWoSouGxmkFj6lw6oObN264YQVfpaGxVhj4HTbgsQNaKymjjM-cHrO4y1kMUSsD41BlTIfrHorbpGPoYC8tC-W1NNe3unvEeSmIRS0Ie8JhxX9flMtENVhm8Phh_M3ERPwPLwc2oT0zJFRPeoIhrKWosNboeVCPLZ2jWAbOzOQeygz5i8zmoHYT5ua87teIediiSvd7T_Fer3ScrLWmX0BGq48VpGAaJz6M01QLPCvOwKnl1K2Y5yqXrTA1WT7rzX3VVviYlaHumQBrWElAMf8uKeNJ8bKSFvUbYXFZ71MVz0yAPcx7FYaCPuhWCYs7F-lCRzQciykDLABU3Jolm3VYMiioIwTvZouvNyQV5I4pB03JeyopRXUGXClQW5w4WawWz6UoFnF5WWLZduLpktZKeowPGgRtFQUjzWNerIAWoRkFBti3JU2Hl4Habg1DORAW8LZ4EZWiXmo5BBGwnKfyCeKbstI7JsaoNbghy2bx_QZyA3p4AvzR1cK2onK7pn51XYJRw52dZd1wpND9fVj-PRiPxH3xUvf8s9lVAj7YLYCbr_8gq77reOnJIWXUOWNJSFGUS9Stk6853pixJ166aVuefl7A3HpHOelWq18_rIoQUWUSpD6LPD3iiOaoVNKTIYkP9nE776RDulVI62tyWsTMrRZFAfHNZZlvqSrISuq7bk8tKI9KrZsklMVd46QZ0cCzm3Vf31nVDFiVJGtItqsf3Bvz0UAxIP5YnDIwEd79S8qaC_Iba8YLTCaUSVuay6irH68LBm-rES4zwuSzMij6NruS7Y1V8v6y6ku9a7X2k5DsN46TwSMFdwj5GyfeuUHI3O6zwDhLjYRl4p78K_GvO5ezezjv4SJHTo_VpBL2tUPICnUJ9ShawHhIlPAWlva_4qbMp3KlHnOSMFCGYdPDv5mKnmwqYnjm_w_jmU1Ezc30NU1XB1K5ciqUtBeMWIlfV1exI8h-igKkfsKCgkcui1N1cwFRWDSWqOiksjqg52lXClAwLgwNEdSZR6NtUPnSG6qAfuzqoR-MQLDUCzDbZXB30Ndj0I83cNBRzv6jnmfOdNK6kSmqKdUrZBkOxi21-ZnYay1gLN-K9Kp59RZmzIPSSxE8fq79nRx5u5hFFlNAk9X1GOe0rwPf2dyVY2sAuUXPR4lQ5WRmf1e8-4R8IMj2Q8t3vo-53yw2KpfTefrniL52R-QNvqXjshalftktBMvHu96ucG0joUd4t3ntm2-LwTudmNyO770keCpD9gxQgWxtzu64twthxYm8pqAReEcd7jOjNpKzeO8_9758JjcTYt6hSX1ga8akyybqQUqDCp72MslYJWjAFKnyli2XTjqbkTlSPbfk16utCcRdFKXe9ePJ5DZYAVR6PBw2iuqLZlQnVkWbNY9cSqXXtmw5wsuVUbPTI3lZHHnRhv87gubNNO7tFV2IbCehl9XVXy5V_mIOYwzr0YjG1tUNBfyXtprQ2VUdWuIZaLEh6jXV5HyzZ7QStJAyDRuMLn5bsRc9ZOMCtHLidEt7A7k58sL4jz0vhYxHlHISXqNG9NuFNQzh_vwlvA2vZzFq2T4fU2KAc04V_aqOEv6yH_Y4CfGZ56BMauGGY-fCfGxAvpkXux0URuGB8FZQWseuCxp7FYZxlcZrHnEepF6IuJ9t-bHIPQE__wg0vvGgN6ElZ7KVekA-g50cGPTlFRkZy7vaBnr_5DXraBKd2pNjDcwNSoy3n8u9nL89-85uecsxpwOOCBXlIos1A5b3chcqp57w6lZbXqJIB4V3R9gdA6opr_LJaAWKVQ3wzxIp-OZk0o71Syvkk2xKR8Fv4m5y2lD49lDnITnrsoKjIaJ4ACwu5Kd9s-Gy3KIewT0u094IBWZgQF8ynWB8Ai7tqEGR_pokQAlgks7IVOHKnu8B2yDBqoZvhI6J19DvBkPNyWrbo5odDhz47ob83k3IunF3KOXVZdQG2A5w8wMkDnDzAyQOcPMDJA5w8wMkDnDzAyQOcPMDJA5w8wMkDnDzAyQOcPMDJf6NwchKFPlAv3wPJePuf3qL7p1N53n2irlgpZ9dnzaTkU9aclfU5PHN-Y6ma6J7-9CnQnk3I0XrA1ZroeszwmUiNg9GeOs9fSk0MmRfoYkJnWzaY5Pu-ETpFZ8IvxAkWbpt-JHQN7ir2gmnBU1cK6pSp9MZ5KrRq0F_w6GxAJgmr561-CPNahb8BSAcYjmoeBPD1UucoLxdAlGhoVKCZoXY_J_S9-jVfllPWzXoncDKmzAviiJI8pZHH8yTnRZrxdBM4qaGWx8HJf0xC3R7cvY9weTbC5f2yHsA6CnwX0jRnCYkT1-UhzWhRBGkUcC_zEi_ywjDwsoT5KU94ErokZV6ecphCCjY-DbMi2WZya-A7L1sP37muTzlx-QDffWT4Lg9DEuR-FsncU6n0mlPaNXfI4TNP397ensEjf2jEzV0dr7IeB3UBOnr-0ryxzUVfzXl3kfG5ujijOafl2d1seo53sPF7gzisSTnEr6VIuXCewSQmfOSfuRvXRIzhvBNCo-4FfGOUT5dqcF-_fP7i29cvPt287QPM-teDWVmSRjEo8xEP_I8Fs2rdYABZB5B1AFkHkHUAWQeQdQBZB5B1AFkHkHUAWQeQdQBZB5B1AFkHkHUAWQeQ9e8QZF1IkBVdrR8TaG34tLhCP_zi6VHWncusVctZznFR3749CfDW3uDM82Bx3p542Ijvn7x799cpRGZZP3sX9XrQqCXtDihQ9LAwhZEOT9nsoZWK1gPUFo30ZOtKFauTGwsQ-dJo0YB0B_bifoBSQsqFuJxa1Fmk8g7bs02kcsReLSI6Yq8WlR2xV4sIjzlXQ6Mfu9d1EQl0r6a1t2q1j51CEJI4izOwtpKQ8jT1QGvN8szzNxYE1XDx4yEIAxcfuPgKF98--mXNxczxL-ujFo4TsxEWiR8HOYOTEmRxypgbc0LiLIGT4_uhW7i5F5MsTqIC9GVWkIJEDFPLgyiLC3_zlB5EagQXbrI-UiMtCsLcMB4iNYZIjSFSY4jUGCI1hkiNXSI1fPRcxcQtvDzZIVIDdLDf3o_W8P0hWmOI1vibiNZw_SQmKejnru89Gq3RRyK9MRt9L66L3OilxSPEb_T1P0RxDFEcvVEccRL4QQZGZJb4j0Zx9FHa2liO3hfWRHT0PT_EdQxxHUNcxxDXMcR1_APEdUQBSxiYI26UF4_GdfRJhf8Q0R2Fm8Zgg7upSx6N7thBe7WiIx5d4r9ipMcO-u0Q77FbvEfCCzClgH9kRtsf4j164j3EU89xLCJGorp-98nz77598-rlv_zw5uW3vxfC4f_8b3hEiGVQWeH3r559-_sXX3-nfsTT8fY1zG1RtiBqXr94_sOrl2_-zbyKxg96meoKr3nGDr58cfXd766goy9_eP5myO1_gqgTS3O1EK71lsBeOfVWB5tB5ikR3Ev4iB-W-5Umg-AQYEkoh3JzV9GuBiS8hYns6iptrYygIQYq3gh0cfUW6KvqZu8NsHTDcTr28VZGiNC9hLAX_L6e40aB-qD6Blpdo9XLjnfCpwvXBc4Thzzy_DwP0iiMwM6K0ocrJhzj-qpye2VQMee8S3NXQLZG0x4Hsp-WMLYH4NdAhquZ6wYRPAoKGnHqZT5PEliOCIyjMPNCj_lJFBcFC3juRn4aJUHgJqlfZBGoSGEW-BlJch5EvudvntIDFDS8CPyLcF2NXc8rXEbjocbugIIOKOiAgg4o6ICCDijogIIOKOiAgg4o6ICCDijogIIeGQXlJC6SMASbMPE-Lgr6vebEOOYGqF7QPONzPCQgP8r2AtspF3qdBEbKN6OkqHjbfOaZ03Iyk8o5mTa1c0vQbQ3qMLp2-L1RSk1-hkbFYole7V6Of1fRsfbQTO8-E_aB2roxmF-w6s1kbCG9-Lfk8NJ9hRxzAG4H4HYAbgfgdgBuB-B2AG4H4PYfEbh998v_B4IL3CY)
@@ -0,0 +1,6 @@
1
+ <svg width="48" height="48" viewBox="0 0 48 48" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <title>Proofpress — on dark</title>
3
+ <desc>A light document outline with a teal proof point, for dark backgrounds.</desc>
4
+ <rect x="7" y="4" width="28" height="36" stroke="#F0EEE8" stroke-width="3"/>
5
+ <circle cx="35" cy="36" r="9" fill="#4AAEC2"/>
6
+ </svg>
@@ -0,0 +1,6 @@
1
+ <svg width="48" height="48" viewBox="0 0 48 48" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <title>Proofpress — on light</title>
3
+ <desc>A dark document outline with a teal proof point, for light backgrounds.</desc>
4
+ <rect x="7" y="4" width="28" height="36" stroke="#101013" stroke-width="3"/>
5
+ <circle cx="35" cy="36" r="9" fill="#2E8FA3"/>
6
+ </svg>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "proofpress",
3
- "version": "0.1.0",
3
+ "version": "0.2.0",
4
4
  "description": "The trust layer for multiplayer AI: an open, agent-native ledger for knowledge artifacts",
5
5
  "license": "Apache-2.0",
6
6
  "bin": {
@@ -20,7 +20,7 @@
20
20
  "prepublishOnly": "npm test && npm run pack:check"
21
21
  },
22
22
  "engines": {
23
- "node": ">=18"
23
+ "node": ">=22"
24
24
  },
25
25
  "keywords": [
26
26
  "provenance",
@@ -36,5 +36,9 @@
36
36
  "homepage": "https://github.com/chenmingtang830/proofpress#readme",
37
37
  "bugs": {
38
38
  "url": "https://github.com/chenmingtang830/proofpress/issues"
39
+ },
40
+ "publishConfig": {
41
+ "access": "public",
42
+ "provenance": true
39
43
  }
40
44
  }