proofpress 0.1.0-alpha.2 → 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 +93 -199
- package/assets/logo-on-dark.svg +6 -0
- package/assets/logo-on-light.svg +6 -0
- package/package.json +7 -3
- package/proofpress.py +682 -58
- package/skills/README.md +34 -71
- package/skills/claude-code/proofpress/SKILL.md +15 -19
- package/skills/codex/AGENTS-snippet.md +15 -19
- package/skills/cursor/proofpress/SKILL.md +15 -19
- package/skills/pi/proofpress-skill.md +15 -19
package/README.md
CHANGED
|
@@ -6,253 +6,147 @@
|
|
|
6
6
|
[//]: # (ob:de7999eb)
|
|
7
7
|
# Proofpress
|
|
8
8
|
|
|
9
|
+
[//]: # (ob:7542280e)
|
|
10
|
+
[](https://www.npmjs.com/package/proofpress)
|
|
11
|
+
[](https://github.com/chenmingtang830/proofpress/actions/workflows/ci.yml)
|
|
12
|
+
[](LICENSE)
|
|
13
|
+
|
|
9
14
|
[//]: # (ob:e667d986)
|
|
10
|
-
|
|
11
|
-
changed what, when, and why, checked against the artifact itself.
|
|
15
|
+
**The trust layer for multiplayer AI.**
|
|
12
16
|
|
|
13
17
|
[//]: # (ob:0e0e9d9a)
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
artifacts do not. Proofpress keeps the accepted version history and consequential
|
|
18
|
-
decisions attached to a Markdown or static HTML artifact so that history can
|
|
19
|
-
travel with it.
|
|
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.
|
|
20
21
|
|
|
21
|
-
[//]: # (ob:
|
|
22
|
-
|
|
22
|
+
[//]: # (ob:6ef36a68)
|
|
23
|
+
> Git made code collaborative. Proofpress makes intelligence compound.
|
|
23
24
|
|
|
24
|
-
[//]: # (ob:
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
published under the `next` tag while these interfaces settle.
|
|
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.
|
|
29
29
|
|
|
30
|
-
[//]: # (ob:
|
|
31
|
-
## Install
|
|
30
|
+
[//]: # (ob:cc376e2b)
|
|
31
|
+
## Install
|
|
32
32
|
|
|
33
|
-
[//]: # (ob:
|
|
34
|
-
|
|
35
|
-
plus repository setup command. Python 3 and Git are required:
|
|
33
|
+
[//]: # (ob:d6f9f208)
|
|
34
|
+
Requires Python 3.11+, Git, and Node 22+:
|
|
36
35
|
|
|
37
36
|
[//]: # (ob:7b197ac1)
|
|
38
37
|
```sh
|
|
39
|
-
npm install --save-dev proofpress
|
|
38
|
+
npm install --save-dev proofpress
|
|
40
39
|
npx --no-install proofpress --version
|
|
41
40
|
npx --no-install proofpress setup --agent codex
|
|
42
41
|
```
|
|
43
42
|
|
|
44
43
|
[//]: # (ob:5ae48e1b)
|
|
45
|
-
`setup` installs
|
|
46
|
-
|
|
47
|
-
`cursor`, or `all`. Portable history remains opt-in per artifact.
|
|
48
|
-
|
|
49
|
-
[//]: # (ob:2b655d31)
|
|
50
|
-
To add a visible, transparent distribution mark to a repository README:
|
|
51
|
-
|
|
52
|
-
[//]: # (ob:d4916c37)
|
|
53
|
-
```sh
|
|
54
|
-
npx --no-install proofpress setup --agent codex --badge README.md
|
|
55
|
-
```
|
|
56
|
-
|
|
57
|
-
[//]: # (ob:5796ae98)
|
|
58
|
-
The badge says that revision provenance uses Proofpress; it is not an
|
|
59
|
-
instruction for agents to download or execute software. Installed adapters use
|
|
60
|
-
`npx --no-install`, so an agent can use an existing local installation but
|
|
61
|
-
cannot silently fetch the package.
|
|
44
|
+
`setup` installs the agent adapter and writes `.proofpress/manifest.json`. Use
|
|
45
|
+
`--agent claude`, `cursor`, or `all` for another supported harness.
|
|
62
46
|
|
|
63
|
-
[//]: # (ob:
|
|
64
|
-
##
|
|
47
|
+
[//]: # (ob:4273537d)
|
|
48
|
+
## Create a portable document
|
|
65
49
|
|
|
66
|
-
[//]: # (ob:
|
|
67
|
-
|
|
50
|
+
[//]: # (ob:1160e434)
|
|
51
|
+
Run these commands on a Markdown or static HTML file:
|
|
68
52
|
|
|
69
|
-
[//]: # (ob:
|
|
53
|
+
[//]: # (ob:2b655d31)
|
|
70
54
|
```sh
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
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
|
|
74
60
|
```
|
|
75
61
|
|
|
76
|
-
[//]: # (ob:
|
|
77
|
-
|
|
78
|
-
|
|
62
|
+
[//]: # (ob:5796ae98)
|
|
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.
|
|
79
66
|
|
|
80
67
|
[//]: # (ob:949eb6a5)
|
|
81
|
-
##
|
|
68
|
+
## Hand off a document
|
|
82
69
|
|
|
83
70
|
[//]: # (ob:2173502c)
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
[//]: # (ob:c44f6768)
|
|
87
|
-
```sh
|
|
88
|
-
python3 proofpress.py policy proposal.md portable
|
|
89
|
-
```
|
|
90
|
-
|
|
91
|
-
[//]: # (ob:79416c44)
|
|
92
|
-
The setting is sticky. Later accepted revisions refresh a compact, hidden
|
|
93
|
-
capsule inside the carrier file. Send the original file to a collaborator and
|
|
94
|
-
their agent can inspect and import its history without access to your Git repo,
|
|
95
|
-
chat session, or Proofpress ledger ref.
|
|
71
|
+
Send the original file. The recipient does not need your repository, session,
|
|
72
|
+
or local ledger:
|
|
96
73
|
|
|
97
74
|
[//]: # (ob:af7113fa)
|
|
98
75
|
```sh
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
76
|
+
npx --no-install proofpress inspect proposal.md
|
|
77
|
+
npx --no-install proofpress import proposal.md
|
|
78
|
+
npx --no-install proofpress log proposal.md
|
|
102
79
|
```
|
|
103
80
|
|
|
104
|
-
[//]: # (ob:
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
canonical discovery object also names `proofpress@next`. An agent may explain
|
|
113
|
-
this provenance and offer installation, but must obtain user consent before
|
|
114
|
-
downloading or executing anything.
|
|
115
|
-
|
|
116
|
-
[//]: # (ob:cc095bd4)
|
|
117
|
-
## Static HTML carrier
|
|
118
|
-
|
|
119
|
-
[//]: # (ob:e6463f5e)
|
|
120
|
-
Proofpress also supports static `.html` and `.htm` artifacts. `anchor` writes a
|
|
121
|
-
stable `data-proofpress-id` onto supported visible blocks (headings, paragraphs,
|
|
122
|
-
list items, block quotes, preformatted blocks, table cells, and figure captions).
|
|
123
|
-
The metadata marker lives in `<head>`; a portable capsule is a non-executing
|
|
124
|
-
`application/vnd.proofpress+json` data block before `</body>`.
|
|
125
|
-
|
|
126
|
-
[//]: # (ob:b8abc9df)
|
|
127
|
-
```sh
|
|
128
|
-
python3 proofpress.py policy launch-plan.html portable
|
|
129
|
-
python3 proofpress.py anchor launch-plan.html
|
|
130
|
-
python3 proofpress.py snapshot launch-plan.html --kind agent --author codex \
|
|
131
|
-
--why "made the accepted review scope explicit"
|
|
132
|
-
python3 proofpress.py verify launch-plan.html
|
|
133
|
-
```
|
|
81
|
+
[//]: # (ob:5e991c72)
|
|
82
|
+
### GitHub or a raw file
|
|
83
|
+
|
|
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 |
|
|
134
89
|
|
|
135
|
-
[//]: # (ob:
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
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.
|
|
141
96
|
|
|
142
97
|
[//]: # (ob:226a29fd)
|
|
143
|
-
## What
|
|
98
|
+
## What is—and is not—recorded
|
|
144
99
|
|
|
145
100
|
[//]: # (ob:cfc1c3aa)
|
|
146
|
-
Proofpress records accepted
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
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.
|
|
150
104
|
|
|
151
105
|
[//]: # (ob:5e0b34ed)
|
|
152
|
-
It does not automatically store raw prompts, transcripts,
|
|
153
|
-
brainstorming, or every save.
|
|
154
|
-
|
|
155
|
-
preserve an otherwise missed version, but identifies itself only as
|
|
156
|
-
`recorded_by`; it does not guess who wrote the content or why. Harness skills
|
|
157
|
-
can also capture a specific existing file before an agent edits it, keeping
|
|
158
|
-
unattributed human drift separate from the agent's revision.
|
|
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.
|
|
159
109
|
|
|
160
|
-
[//]: # (ob:
|
|
161
|
-
##
|
|
110
|
+
[//]: # (ob:47f21d3a)
|
|
111
|
+
## Merge parallel copies
|
|
162
112
|
|
|
163
|
-
[//]: # (ob:
|
|
164
|
-
|
|
113
|
+
[//]: # (ob:55bcd98e)
|
|
114
|
+
Keep every original copy. First, ask Proofpress to find the common ancestor and
|
|
115
|
+
report only genuine block conflicts:
|
|
165
116
|
|
|
166
|
-
[//]: # (ob:
|
|
167
|
-
- `portable`: future accepted versions refresh the embedded capsule.
|
|
168
|
-
- `local`: versions stay in the local/Git ledger; the current capsule is
|
|
169
|
-
|
|
170
|
-
[//]: # (ob:126978a2)
|
|
171
|
-
removed.
|
|
172
|
-
|
|
173
|
-
[//]: # (ob:0890e114)
|
|
174
|
-
- `ignored`: future capture is skipped.
|
|
175
|
-
|
|
176
|
-
[//]: # (ob:c6642117)
|
|
177
|
-
Switching from portable to local cannot recall copies already sent. Re-enabling
|
|
178
|
-
portable starts a clean lineage at the current body, so private-interval actors,
|
|
179
|
-
reasons, rejected paths, event IDs, and omitted-event counts do not leak.
|
|
180
|
-
|
|
181
|
-
[//]: # (ob:18995a53)
|
|
182
|
-
For a one-off history-free copy, use:
|
|
183
|
-
|
|
184
|
-
[//]: # (ob:f28051ef)
|
|
117
|
+
[//]: # (ob:8f498c01)
|
|
185
118
|
```sh
|
|
186
|
-
|
|
119
|
+
npx --no-install proofpress merge-plan proposal-alice.md \
|
|
120
|
+
--from proposal-bob.md --json
|
|
187
121
|
```
|
|
188
122
|
|
|
189
|
-
[//]: # (ob:
|
|
190
|
-
|
|
123
|
+
[//]: # (ob:d4ed0d79)
|
|
124
|
+
After an agent or user resolves the visible body, record the reunion:
|
|
191
125
|
|
|
192
|
-
[//]: # (ob:
|
|
126
|
+
[//]: # (ob:74883804)
|
|
193
127
|
```sh
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
--
|
|
197
|
-
|
|
198
|
-
--note "incorporated review" --claims /tmp/claims.json \
|
|
199
|
-
--why "the team chose the smaller launch scope"
|
|
200
|
-
python3 proofpress.py verify proposal.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
|
|
201
132
|
```
|
|
202
133
|
|
|
203
|
-
[//]: # (ob:
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
static HTML knowledge artifacts.
|
|
207
|
-
|
|
208
|
-
[//]: # (ob:59769c11)
|
|
209
|
-
## Merged lineage and stripped copies
|
|
210
|
-
|
|
211
|
-
[//]: # (ob:91a8deb1)
|
|
212
|
-
When one document merges several Proofpress-managed sources, record the
|
|
213
|
-
upstream references — identity, head version, and digest, never copied
|
|
214
|
-
history:
|
|
215
|
-
|
|
216
|
-
[//]: # (ob:100c5aa7)
|
|
217
|
-
```sh
|
|
218
|
-
python3 proofpress.py merge-lineage proposal.md \
|
|
219
|
-
--from research-a.md --from research-b.md
|
|
220
|
-
```
|
|
221
|
-
|
|
222
|
-
[//]: # (ob:144c3d60)
|
|
223
|
-
When a copy lost its metadata and capsule (pasted as plain text, reformatted,
|
|
224
|
-
sanitized), the ledger can still recognize it by a deterministic content
|
|
225
|
-
fingerprint:
|
|
226
|
-
|
|
227
|
-
[//]: # (ob:28dec45f)
|
|
228
|
-
```sh
|
|
229
|
-
python3 proofpress.py identify pasted-copy.md
|
|
230
|
-
```
|
|
231
|
-
|
|
232
|
-
[//]: # (ob:b705ac38)
|
|
233
|
-
`identify` answers identity — "this is that artifact" — on a machine holding
|
|
234
|
-
the ledger. It does not restore history or prove the copy was never altered,
|
|
235
|
-
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`.
|
|
236
137
|
|
|
237
138
|
[//]: # (ob:2a955c60)
|
|
238
|
-
##
|
|
139
|
+
## Go deeper
|
|
239
140
|
|
|
240
141
|
[//]: # (ob:8deed5b3)
|
|
241
|
-
-
|
|
242
|
-
-
|
|
243
|
-
-
|
|
244
|
-
-
|
|
245
|
-
|
|
246
|
-
[
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
[//]: # (
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
[//]: # (ob:820f39ab)
|
|
253
|
-
Start with the [documentation index](docs/README.md). The executable behavior is
|
|
254
|
-
defined by the [Portable Artifact V0 contract](docs/PORTABLE_ARTIFACT_SPEC.md),
|
|
255
|
-
with its disclosure limits in
|
|
256
|
-
[Privacy Boundaries for Portable Artifacts](docs/PRIVACY_AND_DISCLOSURE.md).
|
|
257
|
-
|
|
258
|
-
[//]: # (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,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "proofpress",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "
|
|
3
|
+
"version": "0.2.0",
|
|
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": {
|
|
7
7
|
"proofpress": "bin/proofpress.js"
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
"prepublishOnly": "npm test && npm run pack:check"
|
|
21
21
|
},
|
|
22
22
|
"engines": {
|
|
23
|
-
"node": ">=
|
|
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
|
}
|