@mikeargento/bitgraph 1.9.1 → 1.10.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.
Files changed (248) hide show
  1. package/README.md +21 -21
  2. package/dist/fuse-cli.js +2 -2
  3. package/dist/fuse-cli.js.map +1 -1
  4. package/dist/fuse.d.ts +15 -1
  5. package/dist/fuse.d.ts.map +1 -1
  6. package/dist/fuse.js +29 -12
  7. package/dist/fuse.js.map +1 -1
  8. package/package.json +12 -8
  9. package/src/fuse-cli.ts +2 -2
  10. package/src/fuse.ts +46 -13
  11. package/dist/__tests__/audit-anchors.test.d.ts +0 -2
  12. package/dist/__tests__/audit-anchors.test.d.ts.map +0 -1
  13. package/dist/__tests__/audit-anchors.test.js +0 -152
  14. package/dist/__tests__/audit-anchors.test.js.map +0 -1
  15. package/dist/__tests__/audit-anomalies.test.d.ts +0 -2
  16. package/dist/__tests__/audit-anomalies.test.d.ts.map +0 -1
  17. package/dist/__tests__/audit-anomalies.test.js +0 -663
  18. package/dist/__tests__/audit-anomalies.test.js.map +0 -1
  19. package/dist/__tests__/audit-attestation.test.d.ts +0 -2
  20. package/dist/__tests__/audit-attestation.test.d.ts.map +0 -1
  21. package/dist/__tests__/audit-attestation.test.js +0 -403
  22. package/dist/__tests__/audit-attestation.test.js.map +0 -1
  23. package/dist/__tests__/audit-bench-smoke.test.d.ts +0 -2
  24. package/dist/__tests__/audit-bench-smoke.test.d.ts.map +0 -1
  25. package/dist/__tests__/audit-bench-smoke.test.js +0 -87
  26. package/dist/__tests__/audit-bench-smoke.test.js.map +0 -1
  27. package/dist/__tests__/audit-boundary.test.d.ts +0 -20
  28. package/dist/__tests__/audit-boundary.test.d.ts.map +0 -1
  29. package/dist/__tests__/audit-boundary.test.js +0 -84
  30. package/dist/__tests__/audit-boundary.test.js.map +0 -1
  31. package/dist/__tests__/audit-cli.test.d.ts +0 -2
  32. package/dist/__tests__/audit-cli.test.d.ts.map +0 -1
  33. package/dist/__tests__/audit-cli.test.js +0 -239
  34. package/dist/__tests__/audit-cli.test.js.map +0 -1
  35. package/dist/__tests__/audit-dependencies.test.d.ts +0 -2
  36. package/dist/__tests__/audit-dependencies.test.d.ts.map +0 -1
  37. package/dist/__tests__/audit-dependencies.test.js +0 -116
  38. package/dist/__tests__/audit-dependencies.test.js.map +0 -1
  39. package/dist/__tests__/audit-fixtures.d.ts +0 -265
  40. package/dist/__tests__/audit-fixtures.d.ts.map +0 -1
  41. package/dist/__tests__/audit-fixtures.js +0 -511
  42. package/dist/__tests__/audit-fixtures.js.map +0 -1
  43. package/dist/__tests__/audit-ingest.test.d.ts +0 -2
  44. package/dist/__tests__/audit-ingest.test.d.ts.map +0 -1
  45. package/dist/__tests__/audit-ingest.test.js +0 -473
  46. package/dist/__tests__/audit-ingest.test.js.map +0 -1
  47. package/dist/__tests__/audit-memory-ingest.test.d.ts +0 -12
  48. package/dist/__tests__/audit-memory-ingest.test.d.ts.map +0 -1
  49. package/dist/__tests__/audit-memory-ingest.test.js +0 -135
  50. package/dist/__tests__/audit-memory-ingest.test.js.map +0 -1
  51. package/dist/__tests__/audit-property.test.d.ts +0 -2
  52. package/dist/__tests__/audit-property.test.d.ts.map +0 -1
  53. package/dist/__tests__/audit-property.test.js +0 -771
  54. package/dist/__tests__/audit-property.test.js.map +0 -1
  55. package/dist/__tests__/audit-real-fixtures.test.d.ts +0 -2
  56. package/dist/__tests__/audit-real-fixtures.test.d.ts.map +0 -1
  57. package/dist/__tests__/audit-real-fixtures.test.js +0 -132
  58. package/dist/__tests__/audit-real-fixtures.test.js.map +0 -1
  59. package/dist/__tests__/audit-real-live.test.d.ts +0 -2
  60. package/dist/__tests__/audit-real-live.test.d.ts.map +0 -1
  61. package/dist/__tests__/audit-real-live.test.js +0 -107
  62. package/dist/__tests__/audit-real-live.test.js.map +0 -1
  63. package/dist/__tests__/audit-reconstruct.test.d.ts +0 -2
  64. package/dist/__tests__/audit-reconstruct.test.d.ts.map +0 -1
  65. package/dist/__tests__/audit-reconstruct.test.js +0 -287
  66. package/dist/__tests__/audit-reconstruct.test.js.map +0 -1
  67. package/dist/__tests__/audit-report.test.d.ts +0 -2
  68. package/dist/__tests__/audit-report.test.d.ts.map +0 -1
  69. package/dist/__tests__/audit-report.test.js +0 -186
  70. package/dist/__tests__/audit-report.test.js.map +0 -1
  71. package/dist/__tests__/audit-roundtrip.test.d.ts +0 -2
  72. package/dist/__tests__/audit-roundtrip.test.d.ts.map +0 -1
  73. package/dist/__tests__/audit-roundtrip.test.js +0 -368
  74. package/dist/__tests__/audit-roundtrip.test.js.map +0 -1
  75. package/dist/__tests__/audit-temporal.test.d.ts +0 -2
  76. package/dist/__tests__/audit-temporal.test.d.ts.map +0 -1
  77. package/dist/__tests__/audit-temporal.test.js +0 -364
  78. package/dist/__tests__/audit-temporal.test.js.map +0 -1
  79. package/dist/__tests__/audit-tiers.test.d.ts +0 -2
  80. package/dist/__tests__/audit-tiers.test.d.ts.map +0 -1
  81. package/dist/__tests__/audit-tiers.test.js +0 -282
  82. package/dist/__tests__/audit-tiers.test.js.map +0 -1
  83. package/dist/__tests__/audit-witness-real.test.d.ts +0 -19
  84. package/dist/__tests__/audit-witness-real.test.d.ts.map +0 -1
  85. package/dist/__tests__/audit-witness-real.test.js +0 -82
  86. package/dist/__tests__/audit-witness-real.test.js.map +0 -1
  87. package/dist/__tests__/audit-witness.test.d.ts +0 -2
  88. package/dist/__tests__/audit-witness.test.d.ts.map +0 -1
  89. package/dist/__tests__/audit-witness.test.js +0 -308
  90. package/dist/__tests__/audit-witness.test.js.map +0 -1
  91. package/dist/__tests__/canonical.test.d.ts +0 -2
  92. package/dist/__tests__/canonical.test.d.ts.map +0 -1
  93. package/dist/__tests__/canonical.test.js +0 -162
  94. package/dist/__tests__/canonical.test.js.map +0 -1
  95. package/dist/__tests__/chain-hash-anchor.test.d.ts +0 -22
  96. package/dist/__tests__/chain-hash-anchor.test.d.ts.map +0 -1
  97. package/dist/__tests__/chain-hash-anchor.test.js +0 -55
  98. package/dist/__tests__/chain-hash-anchor.test.js.map +0 -1
  99. package/dist/__tests__/commit-service.integration.test.d.ts +0 -2
  100. package/dist/__tests__/commit-service.integration.test.d.ts.map +0 -1
  101. package/dist/__tests__/commit-service.integration.test.js +0 -95
  102. package/dist/__tests__/commit-service.integration.test.js.map +0 -1
  103. package/dist/__tests__/constructor.test.d.ts +0 -2
  104. package/dist/__tests__/constructor.test.d.ts.map +0 -1
  105. package/dist/__tests__/constructor.test.js +0 -267
  106. package/dist/__tests__/constructor.test.js.map +0 -1
  107. package/dist/__tests__/declared-proof-fixture.d.ts +0 -66
  108. package/dist/__tests__/declared-proof-fixture.d.ts.map +0 -1
  109. package/dist/__tests__/declared-proof-fixture.js +0 -66
  110. package/dist/__tests__/declared-proof-fixture.js.map +0 -1
  111. package/dist/__tests__/fuse-inline.test.d.ts +0 -2
  112. package/dist/__tests__/fuse-inline.test.d.ts.map +0 -1
  113. package/dist/__tests__/fuse-inline.test.js +0 -181
  114. package/dist/__tests__/fuse-inline.test.js.map +0 -1
  115. package/dist/__tests__/fuse-placement.test.d.ts +0 -2
  116. package/dist/__tests__/fuse-placement.test.d.ts.map +0 -1
  117. package/dist/__tests__/fuse-placement.test.js +0 -31
  118. package/dist/__tests__/fuse-placement.test.js.map +0 -1
  119. package/dist/__tests__/fuse-roundtrip.test.d.ts +0 -2
  120. package/dist/__tests__/fuse-roundtrip.test.d.ts.map +0 -1
  121. package/dist/__tests__/fuse-roundtrip.test.js +0 -241
  122. package/dist/__tests__/fuse-roundtrip.test.js.map +0 -1
  123. package/dist/__tests__/fuse-sdk.test.d.ts +0 -2
  124. package/dist/__tests__/fuse-sdk.test.d.ts.map +0 -1
  125. package/dist/__tests__/fuse-sdk.test.js +0 -117
  126. package/dist/__tests__/fuse-sdk.test.js.map +0 -1
  127. package/dist/__tests__/fuse-set-sdk.test.d.ts +0 -2
  128. package/dist/__tests__/fuse-set-sdk.test.d.ts.map +0 -1
  129. package/dist/__tests__/fuse-set-sdk.test.js +0 -721
  130. package/dist/__tests__/fuse-set-sdk.test.js.map +0 -1
  131. package/dist/__tests__/fuse-set.test.d.ts +0 -2
  132. package/dist/__tests__/fuse-set.test.d.ts.map +0 -1
  133. package/dist/__tests__/fuse-set.test.js +0 -889
  134. package/dist/__tests__/fuse-set.test.js.map +0 -1
  135. package/dist/__tests__/fuse-set2.test.d.ts +0 -2
  136. package/dist/__tests__/fuse-set2.test.d.ts.map +0 -1
  137. package/dist/__tests__/fuse-set2.test.js +0 -294
  138. package/dist/__tests__/fuse-set2.test.js.map +0 -1
  139. package/dist/__tests__/fuse-vectors.test.d.ts +0 -2
  140. package/dist/__tests__/fuse-vectors.test.d.ts.map +0 -1
  141. package/dist/__tests__/fuse-vectors.test.js +0 -175
  142. package/dist/__tests__/fuse-vectors.test.js.map +0 -1
  143. package/dist/__tests__/fuse-verify.test.d.ts +0 -2
  144. package/dist/__tests__/fuse-verify.test.d.ts.map +0 -1
  145. package/dist/__tests__/fuse-verify.test.js +0 -250
  146. package/dist/__tests__/fuse-verify.test.js.map +0 -1
  147. package/dist/__tests__/hello-world.test.d.ts +0 -2
  148. package/dist/__tests__/hello-world.test.d.ts.map +0 -1
  149. package/dist/__tests__/hello-world.test.js +0 -9
  150. package/dist/__tests__/hello-world.test.js.map +0 -1
  151. package/dist/__tests__/mock-proof-fixture.d.ts +0 -15
  152. package/dist/__tests__/mock-proof-fixture.d.ts.map +0 -1
  153. package/dist/__tests__/mock-proof-fixture.js +0 -34
  154. package/dist/__tests__/mock-proof-fixture.js.map +0 -1
  155. package/dist/__tests__/policy-enforcement.test.d.ts +0 -2
  156. package/dist/__tests__/policy-enforcement.test.d.ts.map +0 -1
  157. package/dist/__tests__/policy-enforcement.test.js +0 -188
  158. package/dist/__tests__/policy-enforcement.test.js.map +0 -1
  159. package/dist/__tests__/proof-hash-regression.test.d.ts +0 -2
  160. package/dist/__tests__/proof-hash-regression.test.d.ts.map +0 -1
  161. package/dist/__tests__/proof-hash-regression.test.js +0 -95
  162. package/dist/__tests__/proof-hash-regression.test.js.map +0 -1
  163. package/dist/__tests__/proof-hash.test.d.ts +0 -2
  164. package/dist/__tests__/proof-hash.test.d.ts.map +0 -1
  165. package/dist/__tests__/proof-hash.test.js +0 -116
  166. package/dist/__tests__/proof-hash.test.js.map +0 -1
  167. package/dist/__tests__/proof-integrity.test.d.ts +0 -2
  168. package/dist/__tests__/proof-integrity.test.d.ts.map +0 -1
  169. package/dist/__tests__/proof-integrity.test.js +0 -454
  170. package/dist/__tests__/proof-integrity.test.js.map +0 -1
  171. package/dist/__tests__/realistic-proof-fixture.d.ts +0 -56
  172. package/dist/__tests__/realistic-proof-fixture.d.ts.map +0 -1
  173. package/dist/__tests__/realistic-proof-fixture.js +0 -57
  174. package/dist/__tests__/realistic-proof-fixture.js.map +0 -1
  175. package/dist/__tests__/run.test.d.ts +0 -2
  176. package/dist/__tests__/run.test.d.ts.map +0 -1
  177. package/dist/__tests__/run.test.js +0 -178
  178. package/dist/__tests__/run.test.js.map +0 -1
  179. package/dist/__tests__/verifier.test.d.ts +0 -2
  180. package/dist/__tests__/verifier.test.d.ts.map +0 -1
  181. package/dist/__tests__/verifier.test.js +0 -531
  182. package/dist/__tests__/verifier.test.js.map +0 -1
  183. package/dist/canonical.d.ts +0 -54
  184. package/dist/canonical.d.ts.map +0 -1
  185. package/dist/canonical.js +0 -119
  186. package/dist/canonical.js.map +0 -1
  187. package/dist/proof-hash.d.ts +0 -9
  188. package/dist/proof-hash.d.ts.map +0 -1
  189. package/dist/proof-hash.js +0 -75
  190. package/dist/proof-hash.js.map +0 -1
  191. package/dist/types.d.ts +0 -705
  192. package/dist/types.d.ts.map +0 -1
  193. package/dist/types.js +0 -3
  194. package/dist/types.js.map +0 -1
  195. package/dist/verifier.d.ts +0 -27
  196. package/dist/verifier.d.ts.map +0 -1
  197. package/dist/verifier.js +0 -844
  198. package/dist/verifier.js.map +0 -1
  199. package/src/__tests__/audit-anchors.test.ts +0 -188
  200. package/src/__tests__/audit-anomalies.test.ts +0 -815
  201. package/src/__tests__/audit-attestation.test.ts +0 -529
  202. package/src/__tests__/audit-bench-smoke.test.ts +0 -108
  203. package/src/__tests__/audit-boundary.test.ts +0 -96
  204. package/src/__tests__/audit-cli.test.ts +0 -288
  205. package/src/__tests__/audit-dependencies.test.ts +0 -141
  206. package/src/__tests__/audit-fixtures.ts +0 -736
  207. package/src/__tests__/audit-ingest.test.ts +0 -575
  208. package/src/__tests__/audit-memory-ingest.test.ts +0 -156
  209. package/src/__tests__/audit-property.test.ts +0 -892
  210. package/src/__tests__/audit-real-fixtures.test.ts +0 -153
  211. package/src/__tests__/audit-real-live.test.ts +0 -128
  212. package/src/__tests__/audit-reconstruct.test.ts +0 -353
  213. package/src/__tests__/audit-report.test.ts +0 -222
  214. package/src/__tests__/audit-roundtrip.test.ts +0 -464
  215. package/src/__tests__/audit-temporal.test.ts +0 -446
  216. package/src/__tests__/audit-tiers.test.ts +0 -343
  217. package/src/__tests__/audit-witness-real.test.ts +0 -92
  218. package/src/__tests__/audit-witness.test.ts +0 -345
  219. package/src/__tests__/canonical.test.ts +0 -253
  220. package/src/__tests__/chain-hash-anchor.test.ts +0 -67
  221. package/src/__tests__/commit-service.integration.test.ts +0 -117
  222. package/src/__tests__/constructor.test.ts +0 -340
  223. package/src/__tests__/declared-proof-fixture.ts +0 -65
  224. package/src/__tests__/fuse-inline.test.ts +0 -211
  225. package/src/__tests__/fuse-placement.test.ts +0 -32
  226. package/src/__tests__/fuse-roundtrip.test.ts +0 -243
  227. package/src/__tests__/fuse-sdk.test.ts +0 -142
  228. package/src/__tests__/fuse-set-sdk.test.ts +0 -852
  229. package/src/__tests__/fuse-set.test.ts +0 -1027
  230. package/src/__tests__/fuse-set2.test.ts +0 -343
  231. package/src/__tests__/fuse-vectors.test.ts +0 -218
  232. package/src/__tests__/fuse-verify.test.ts +0 -278
  233. package/src/__tests__/hello-world.test.ts +0 -10
  234. package/src/__tests__/mock-proof-fixture.ts +0 -36
  235. package/src/__tests__/policy-enforcement.test.ts +0 -226
  236. package/src/__tests__/proof-hash-regression.test.ts +0 -107
  237. package/src/__tests__/proof-hash.test.ts +0 -129
  238. package/src/__tests__/proof-integrity.test.ts +0 -576
  239. package/src/__tests__/real-fixtures/anchor-after-112762.json +0 -47
  240. package/src/__tests__/real-fixtures/anchor-with-ethereum-112758.json +0 -47
  241. package/src/__tests__/real-fixtures/live-proof-0.json +0 -42
  242. package/src/__tests__/real-fixtures/live-proof-1.json +0 -43
  243. package/src/__tests__/real-fixtures/live-proof-2.json +0 -43
  244. package/src/__tests__/real-fixtures/successor-112760.json +0 -38
  245. package/src/__tests__/real-fixtures/witness-25525146.json +0 -6
  246. package/src/__tests__/real-fixtures/witness-25525147.json +0 -6
  247. package/src/__tests__/realistic-proof-fixture.ts +0 -57
  248. package/src/__tests__/verifier.test.ts +0 -624
@@ -1,368 +0,0 @@
1
- // Copyright (c) Argento Computing Inc. All rights reserved. See LICENSE.
2
- /**
3
- * Export round trip (Phase 5, mandatory per the build brief): a synthetic
4
- * epoch (real signed chain, an interleaved Ethereum anchor, and a valid
5
- * offline witness) goes through the archive builder, the resulting .tar.gz
6
- * goes through the full audit pipeline, and the report must come back
7
- * completely clean. Also covers the open-epoch snapshot manifest round
8
- * trip, builder determinism, and conformance of the website's independent
9
- * export assembly (website/src/lib/export-epoch.ts, imported by a spawned
10
- * node process under type stripping) against the reference builder,
11
- * byte for byte.
12
- *
13
- * All data is synthetic and local. No network, no live ledger, ever.
14
- */
15
- import { describe, it, before } from "node:test";
16
- import * as assert from "node:assert/strict";
17
- import { execFile } from "node:child_process";
18
- import { promisify } from "node:util";
19
- import { readFile, writeFile } from "node:fs/promises";
20
- import { join } from "node:path";
21
- import { fileURLToPath, pathToFileURL } from "node:url";
22
- import { createRequire } from "node:module";
23
- import { keccak_256 } from "@noble/hashes/sha3";
24
- import { buildBundleArchive, runAudit, computeExitFlags, buildJsonReport, } from "@mikeargento/bitgraph-audit";
25
- import { utf8, makeCounterChain, makeAnchorProof, makeEthereumHeader, makeTempDir, storedProofJson, } from "./audit-fixtures.js";
26
- const execFileAsync = promisify(execFile);
27
- const EPOCH_ID = "epoch-roundtrip-1";
28
- const CHAIN_ID = "bitgraph:main";
29
- const MEASUREMENT = "test-measurement-roundtrip";
30
- const GENERATED_AT = "2026-07-10T00:00:00Z";
31
- const BLOCK_NUMBER = 987654;
32
- const BLOCK_TIMESTAMP = 1_720_000_000;
33
- const pad12 = (counter) => counter.padStart(12, "0");
34
- const toSafe = (value) => value.replace(/\+/g, "-").replace(/\//g, "_").replace(/=+$/, "");
35
- /**
36
- * One epoch, one signer, one chain, enclave-shaped counters:
37
- * user proofs at slot/commit 1/2 and 3/4, an Ethereum anchor at 5/6, then
38
- * user proofs at 7/8 and 9/10, all prevB64-linked into one intact chain.
39
- * The anchor's block hash is the Keccak-256 of a synthetic RLP header, so
40
- * the witness verifies fully offline.
41
- */
42
- async function makeSyntheticEpoch() {
43
- const part1 = await makeCounterChain({
44
- epochId: EPOCH_ID,
45
- pairs: [
46
- { slot: "1", commit: "2" },
47
- { slot: "3", commit: "4" },
48
- ],
49
- chainId: CHAIN_ID,
50
- measurement: MEASUREMENT,
51
- payloadPrefix: "rt-part1",
52
- });
53
- const { headerBytes, headerRlpHex } = makeEthereumHeader({
54
- blockNumber: BLOCK_NUMBER,
55
- timestamp: BLOCK_TIMESTAMP,
56
- });
57
- const blockHash = `0x${Buffer.from(keccak_256(headerBytes)).toString("hex")}`;
58
- const anchor = await makeAnchorProof({
59
- blockHash,
60
- blockNumber: BLOCK_NUMBER,
61
- key: part1.key,
62
- epochId: EPOCH_ID,
63
- counter: "6",
64
- slotCounter: "5",
65
- prevB64: part1.proofs[1].chainHash,
66
- chainId: CHAIN_ID,
67
- measurement: MEASUREMENT,
68
- });
69
- const part2 = await makeCounterChain({
70
- epochId: EPOCH_ID,
71
- pairs: [
72
- { slot: "7", commit: "8" },
73
- { slot: "9", commit: "10" },
74
- ],
75
- key: part1.key,
76
- chainId: CHAIN_ID,
77
- measurement: MEASUREMENT,
78
- payloadPrefix: "rt-part2",
79
- prevB64OfFirst: anchor.chainHash,
80
- });
81
- const userProofs = [...part1.proofs, ...part2.proofs];
82
- const witness = {
83
- version: "bitgraph-anchor-witness/1",
84
- headerRlpHex,
85
- blockNumber: BLOCK_NUMBER,
86
- blockHash,
87
- };
88
- const members = [
89
- ...part1.proofs.map((p) => ({ proof: p.proof, proofHash: p.proofHash })),
90
- { proof: anchor.proof, proofHash: anchor.proofHash },
91
- ...part2.proofs.map((p) => ({ proof: p.proof, proofHash: p.proofHash })),
92
- ];
93
- return { userProofs, anchor, blockHash, witness, members };
94
- }
95
- function builderInput(epoch, extras) {
96
- return {
97
- proofs: epoch.userProofs.map((p) => ({ proof: p.proof, storedProofHash: p.proofHash })),
98
- anchors: [{ proof: epoch.anchor.proof, storedProofHash: epoch.anchor.proofHash }],
99
- witnesses: [{ path: `witnesses/${BLOCK_NUMBER}.json`, witness: epoch.witness }],
100
- artifactFiles: [
101
- ...epoch.userProofs.map((p, i) => ({ name: `payload-${i}.bin`, bytes: p.bytes })),
102
- { name: "anchor-block-hash.txt", bytes: utf8(epoch.blockHash) },
103
- ],
104
- epochIds: [EPOCH_ID],
105
- chainIds: [CHAIN_ID],
106
- generatedAt: GENERATED_AT,
107
- ...extras,
108
- };
109
- }
110
- /** Every clean-report assertion in one place, shared by the variants. */
111
- function assertCleanAudit(result, expected) {
112
- const expectedWitnesses = expected.verifiedWitnesses ?? 1;
113
- const flags = computeExitFlags(result);
114
- assert.equal(flags.code, 0, "exit flags must be 0 (clean)");
115
- assert.equal(result.ingest.counts.observed, 5);
116
- assert.equal(result.ingest.counts.unsupportedVersion, 0);
117
- assert.equal(result.ingest.counts.exactDuplicates, 0);
118
- assert.equal(result.ingest.counts.semanticDuplicates, 0);
119
- assert.deepEqual(result.ingest.findings, [], "zero ingest findings");
120
- assert.equal(result.verification.total, 5);
121
- assert.equal(result.verification.verified, expected.verified);
122
- assert.equal(result.verification.failed, 0);
123
- assert.equal(result.verification.artifactUnavailable, expected.artifactUnavailable);
124
- assert.equal(result.verification.chainless, 0);
125
- assert.deepEqual(result.anomalies.anomalies, [], "zero chain anomalies");
126
- assert.deepEqual(result.anomalies.divergences, [], "zero divergences");
127
- assert.deepEqual(result.authorities.anomalies, [], "zero authority anomalies");
128
- assert.deepEqual(result.anchors.findings, [], "zero anchor findings");
129
- assert.deepEqual(result.witnesses.findings, [], "zero witness findings");
130
- assert.deepEqual(result.attestations.findings, [], "zero attestation findings");
131
- // One partition, one intact component.
132
- assert.equal(result.reconstruction.partitions.length, 1);
133
- assert.equal(result.reconstruction.partitions[0].components.length, 1);
134
- assert.equal(result.reconstruction.partitions[0].components[0].memberProofHashes.length, 5);
135
- // Manifest: recognized, valid, contents hash verifies, counts match.
136
- const manifest = result.ingest.manifest;
137
- assert.ok(manifest, "manifest present");
138
- assert.equal(manifest.parsed, true);
139
- assert.equal(manifest.recognized, true);
140
- assert.deepEqual(manifest.problems, []);
141
- assert.ok(manifest.contentsHash, "manifest declared a contents hash");
142
- assert.equal(manifest.contentsHash.match, true, "manifest contents hash verifies");
143
- assert.equal(manifest.manifest["proofCount"], result.ingest.counts.observed, "manifest proofCount matches observed");
144
- assert.deepEqual(manifest.manifest["epochIds"], [EPOCH_ID]);
145
- assert.deepEqual(manifest.manifest["chainIds"], [CHAIN_ID]);
146
- assert.deepEqual(manifest.manifest["counterRanges"], [
147
- { epochId: EPOCH_ID, chainId: CHAIN_ID, min: "2", max: "10" },
148
- ]);
149
- // The anchor is identified from its signed attribution regardless of
150
- // witness presence. When the bundle carries a witness (the reference
151
- // builder variants), it verifies fully offline and yields the header
152
- // timestamp as evidence; website exports carry no witnesses because the
153
- // ledger stores neither witnesses nor artifacts.
154
- assert.equal(result.anchors.anchors.length, 1);
155
- assert.equal(result.anchors.anchors[0].blockNumber, String(BLOCK_NUMBER));
156
- const outcomes = result.witnesses.outcomes.filter((o) => o.verified);
157
- assert.equal(outcomes.length, expectedWitnesses, "verified witness outcomes");
158
- if (expectedWitnesses > 0) {
159
- assert.equal(outcomes[0].timestamp, BLOCK_TIMESTAMP);
160
- assert.equal(outcomes[0].blockNumber, String(BLOCK_NUMBER));
161
- }
162
- // Report-level verdicts.
163
- const report = buildJsonReport(result);
164
- assert.equal(report.summary.chainIntact, true, "chain intact");
165
- assert.deepEqual(report.summary.anomalyCountsByCode, {});
166
- assert.equal(report.summary.temporal.anchorsWithVerifiedWitness, expectedWitnesses);
167
- assert.equal(report.summary.exit.code, 0);
168
- }
169
- describe("export round trip: buildBundleArchive -> runAudit", () => {
170
- let epoch;
171
- before(async () => {
172
- epoch = await makeSyntheticEpoch();
173
- });
174
- it("closed-epoch archive with artifacts audits completely clean", async () => {
175
- const archive = buildBundleArchive(builderInput(epoch));
176
- const dir = await makeTempDir("bitgraph-roundtrip-closed-");
177
- const bundlePath = join(dir, "bundle.tar.gz");
178
- await writeFile(bundlePath, archive);
179
- const result = await runAudit(bundlePath);
180
- assertCleanAudit(result, { verified: 5, artifactUnavailable: 0 });
181
- assert.equal(result.ingest.container, "tar-gz");
182
- assert.equal(result.ingest.manifest.manifest["artifactsIncluded"], true);
183
- assert.equal(result.ingest.manifest.manifest["openEpochs"], undefined);
184
- });
185
- it("open-epoch snapshot: openEpochs round-trips through the manifest and audits clean", async () => {
186
- const openEpochs = [{ epochId: EPOCH_ID, counterAtSnapshot: "10" }];
187
- const archive = buildBundleArchive(builderInput(epoch, { openEpochs }));
188
- const dir = await makeTempDir("bitgraph-roundtrip-open-");
189
- const bundlePath = join(dir, "bundle.tar.gz");
190
- await writeFile(bundlePath, archive);
191
- const result = await runAudit(bundlePath);
192
- assertCleanAudit(result, { verified: 5, artifactUnavailable: 0 });
193
- assert.deepEqual(result.ingest.manifest.manifest["openEpochs"], openEpochs, "openEpochs round-trips");
194
- });
195
- it("is deterministic: the same input produces a byte-identical archive", () => {
196
- const a = buildBundleArchive(builderInput(epoch));
197
- const c = buildBundleArchive(builderInput(epoch));
198
- assert.ok(Buffer.from(a).equals(Buffer.from(c)), "two builds of the same input are byte-identical");
199
- });
200
- it("rejects producer-conformance violations deterministically", async () => {
201
- // Non-bitgraph/1 member.
202
- assert.throws(() => buildBundleArchive({
203
- proofs: [{ proof: { version: "occ/1" } }],
204
- epochIds: [],
205
- chainIds: [],
206
- }), /only bitgraph\/1 proofs/);
207
- // storedProofHash disagreeing with the computed canonical hash.
208
- assert.throws(() => buildBundleArchive({
209
- proofs: [{ proof: epoch.userProofs[0].proof, storedProofHash: "bm90LXRoZS1oYXNo" }],
210
- epochIds: [EPOCH_ID],
211
- chainIds: [CHAIN_ID],
212
- }), /storedProofHash does not match/);
213
- // Duplicate canonical identity.
214
- assert.throws(() => buildBundleArchive({
215
- proofs: [
216
- { proof: epoch.userProofs[0].proof },
217
- { proof: epoch.userProofs[0].proof },
218
- ],
219
- epochIds: [EPOCH_ID],
220
- chainIds: [CHAIN_ID],
221
- }), /duplicate proof/);
222
- // Unsafe witness path.
223
- assert.throws(() => buildBundleArchive({
224
- proofs: [{ proof: epoch.userProofs[0].proof }],
225
- witnesses: [{ path: "../escape.json", witness: {} }],
226
- epochIds: [EPOCH_ID],
227
- chainIds: [CHAIN_ID],
228
- }), /unsafe component/);
229
- });
230
- });
231
- // ---------------------------------------------------------------------------
232
- // Website conformance: the independent assembly in
233
- // website/src/lib/export-epoch.ts must produce a spec-conformant bundle,
234
- // byte-identical to the reference builder for the same input. The website
235
- // lib is imported by a SPAWNED node process under type stripping (it is
236
- // self-contained: node builtins only), because the website's tsconfig and
237
- // package scope are separate from the root project.
238
- // ---------------------------------------------------------------------------
239
- const WEBSITE_LIB_PATH = fileURLToPath(new URL("../../website/src/lib/export-epoch.ts", import.meta.url));
240
- // The website lib is TypeScript and self-contained (node builtins only).
241
- // Transpile it to plain ESM with the TypeScript compiler rather than relying
242
- // on the Node runtime to strip types: native type stripping is on by default
243
- // only on Node 22.6 and up, so importing the .ts directly fails on the Node 20
244
- // floor that CI runs against. Transpiling here makes the spawned runner import
245
- // work identically on every supported Node version.
246
- const tsRequire = createRequire(import.meta.url);
247
- async function transpileWebsiteLib(destDir) {
248
- const ts = tsRequire("typescript");
249
- const source = await readFile(WEBSITE_LIB_PATH, "utf8");
250
- const js = ts.transpileModule(source, {
251
- compilerOptions: {
252
- module: ts.ModuleKind.ESNext,
253
- target: ts.ScriptTarget.ES2022,
254
- },
255
- }).outputText;
256
- const libPath = join(destDir, "export-epoch.mjs");
257
- await writeFile(libPath, js);
258
- return pathToFileURL(libPath).href;
259
- }
260
- const RUNNER_SOURCE = `
261
- const [configPath] = process.argv.slice(2);
262
- const { readFile, writeFile } = await import("node:fs/promises");
263
- const config = JSON.parse(await readFile(configPath, "utf8"));
264
- const mod = await import(config.libUrl);
265
- const source = {
266
- listProofKeys: async () => config.proofKeys,
267
- listAnchorKeys: async () => config.anchorKeys,
268
- getObjectText: async (key) => Object.hasOwn(config.objects, key) ? config.objects[key] : null,
269
- getCurrentEpochSafeId: async () => config.currentSafeId,
270
- };
271
- const result = await mod.exportEpoch(source, config.safeEpochId, config.generatedAt);
272
- if (result === null) {
273
- console.error("exportEpoch returned null");
274
- process.exit(2);
275
- }
276
- await writeFile(config.outPath, result.archive);
277
- await writeFile(config.metaPath, JSON.stringify({
278
- open: result.open,
279
- proofCount: result.proofCount,
280
- epochId: result.epochId,
281
- maxCounter: result.maxCounter,
282
- skipped: result.skipped,
283
- }));
284
- `;
285
- async function runWebsiteExport(epoch, opts) {
286
- const dir = await makeTempDir("bitgraph-roundtrip-website-");
287
- const safeEpoch = toSafe(EPOCH_ID);
288
- // The in-memory ledger view: stored-form proofs under proofs/{epoch}/,
289
- // plus the anchors/ index copy of the anchor (extra unsigned "ethereum"
290
- // field, no hash suffix in the key) that the exporter must dedup, never
291
- // mirror.
292
- const objects = {};
293
- const proofKeys = [];
294
- for (const member of epoch.members) {
295
- const counter = member.proof.commit.counter ?? "0";
296
- const key = `proofs/${safeEpoch}/${pad12(counter)}-${toSafe(member.proofHash)}.json`;
297
- objects[key] = storedProofJson(member.proof, member.proofHash);
298
- proofKeys.push(key);
299
- }
300
- proofKeys.sort();
301
- const anchorIndexKey = `anchors/${safeEpoch}/${pad12("6")}.json`;
302
- objects[anchorIndexKey] = JSON.stringify({
303
- ...JSON.parse(storedProofJson(epoch.anchor.proof, epoch.anchor.proofHash)),
304
- ethereum: { blockNumber: BLOCK_NUMBER, blockHash: epoch.blockHash },
305
- });
306
- const runnerPath = join(dir, "runner.mjs");
307
- const configPath = join(dir, "config.json");
308
- const outPath = join(dir, "website-export.tar.gz");
309
- const metaPath = join(dir, "meta.json");
310
- const libUrl = await transpileWebsiteLib(dir);
311
- await writeFile(runnerPath, RUNNER_SOURCE);
312
- await writeFile(configPath, JSON.stringify({
313
- libUrl,
314
- safeEpochId: safeEpoch,
315
- currentSafeId: opts.open ? safeEpoch : "some-other-epoch",
316
- generatedAt: GENERATED_AT,
317
- proofKeys,
318
- anchorKeys: [anchorIndexKey],
319
- objects,
320
- outPath,
321
- metaPath,
322
- }));
323
- await execFileAsync(process.execPath, [runnerPath, configPath]);
324
- const meta = JSON.parse(await readFile(metaPath, "utf8"));
325
- return { archivePath: outPath, meta };
326
- }
327
- describe("export round trip: website export-epoch conformance", () => {
328
- let epoch;
329
- before(async () => {
330
- epoch = await makeSyntheticEpoch();
331
- });
332
- it("closed-epoch website export is byte-identical to the reference builder and audits clean", async () => {
333
- const { archivePath, meta } = await runWebsiteExport(epoch, { open: false });
334
- assert.equal(meta.open, false);
335
- assert.equal(meta.proofCount, 5);
336
- assert.equal(meta.epochId, EPOCH_ID);
337
- assert.equal(meta.maxCounter, "10");
338
- // Exactly one skip: the anchors/ index copy, deduped by stored proofHash.
339
- assert.equal(meta.skipped, 1);
340
- const websiteArchive = await readFile(archivePath);
341
- // Reference builder, same input: all five members under proofs/ (the
342
- // website exports the proofs/ listing, where anchors already live), no
343
- // witnesses or artifacts (the ledger stores neither).
344
- const reference = buildBundleArchive({
345
- proofs: epoch.members.map((m) => ({ proof: m.proof, storedProofHash: m.proofHash })),
346
- epochIds: [EPOCH_ID],
347
- chainIds: [CHAIN_ID],
348
- generatedAt: GENERATED_AT,
349
- });
350
- assert.ok(websiteArchive.equals(Buffer.from(reference)), "website assembly is byte-identical to the reference builder for the same input");
351
- const result = await runAudit(archivePath);
352
- // No artifact bytes in a ledger export: every member is
353
- // artifact-unavailable at the integrity tier, and that is not a failure.
354
- assertCleanAudit(result, { verified: 0, artifactUnavailable: 5, verifiedWitnesses: 0 });
355
- assert.equal(result.ingest.manifest.manifest["artifactsIncluded"], false);
356
- assert.equal(result.ingest.manifest.manifest["openEpochs"], undefined);
357
- });
358
- it("open-epoch website export carries the openEpochs snapshot and audits clean", async () => {
359
- const { archivePath, meta } = await runWebsiteExport(epoch, { open: true });
360
- assert.equal(meta.open, true);
361
- const result = await runAudit(archivePath);
362
- assertCleanAudit(result, { verified: 0, artifactUnavailable: 5, verifiedWitnesses: 0 });
363
- assert.deepEqual(result.ingest.manifest.manifest["openEpochs"], [
364
- { epochId: EPOCH_ID, counterAtSnapshot: "10" },
365
- ]);
366
- });
367
- });
368
- //# sourceMappingURL=audit-roundtrip.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"audit-roundtrip.test.js","sourceRoot":"","sources":["../../src/__tests__/audit-roundtrip.test.ts"],"names":[],"mappings":"AAAA,yEAAyE;AAEzE;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AACjD,OAAO,KAAK,MAAM,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAEhD,OAAO,EACL,kBAAkB,EAClB,QAAQ,EACR,gBAAgB,EAChB,eAAe,GAGhB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAEL,IAAI,EACJ,gBAAgB,EAChB,eAAe,EACf,kBAAkB,EAClB,WAAW,EACX,eAAe,GAEhB,MAAM,qBAAqB,CAAC;AAE7B,MAAM,aAAa,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;AAE1C,MAAM,QAAQ,GAAG,mBAAmB,CAAC;AACrC,MAAM,QAAQ,GAAG,eAAe,CAAC;AACjC,MAAM,WAAW,GAAG,4BAA4B,CAAC;AACjD,MAAM,YAAY,GAAG,sBAAsB,CAAC;AAC5C,MAAM,YAAY,GAAG,MAAM,CAAC;AAC5B,MAAM,eAAe,GAAG,aAAa,CAAC;AAEtC,MAAM,KAAK,GAAG,CAAC,OAAe,EAAU,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;AACrE,MAAM,MAAM,GAAG,CAAC,KAAa,EAAU,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;AAa3G;;;;;;GAMG;AACH,KAAK,UAAU,kBAAkB;IAC/B,MAAM,KAAK,GAAG,MAAM,gBAAgB,CAAC;QACnC,OAAO,EAAE,QAAQ;QACjB,KAAK,EAAE;YACL,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE;YAC1B,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE;SAC3B;QACD,OAAO,EAAE,QAAQ;QACjB,WAAW,EAAE,WAAW;QACxB,aAAa,EAAE,UAAU;KAC1B,CAAC,CAAC;IAEH,MAAM,EAAE,WAAW,EAAE,YAAY,EAAE,GAAG,kBAAkB,CAAC;QACvD,WAAW,EAAE,YAAY;QACzB,SAAS,EAAE,eAAe;KAC3B,CAAC,CAAC;IACH,MAAM,SAAS,GAAG,KAAK,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;IAC9E,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC;QACnC,SAAS;QACT,WAAW,EAAE,YAAY;QACzB,GAAG,EAAE,KAAK,CAAC,GAAG;QACd,OAAO,EAAE,QAAQ;QACjB,OAAO,EAAE,GAAG;QACZ,WAAW,EAAE,GAAG;QAChB,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAE,CAAC,SAAS;QACnC,OAAO,EAAE,QAAQ;QACjB,WAAW,EAAE,WAAW;KACzB,CAAC,CAAC;IAEH,MAAM,KAAK,GAAG,MAAM,gBAAgB,CAAC;QACnC,OAAO,EAAE,QAAQ;QACjB,KAAK,EAAE;YACL,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE;YAC1B,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE;SAC5B;QACD,GAAG,EAAE,KAAK,CAAC,GAAG;QACd,OAAO,EAAE,QAAQ;QACjB,WAAW,EAAE,WAAW;QACxB,aAAa,EAAE,UAAU;QACzB,cAAc,EAAE,MAAM,CAAC,SAAS;KACjC,CAAC,CAAC;IAEH,MAAM,UAAU,GAAG,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC;IACtD,MAAM,OAAO,GAA4B;QACvC,OAAO,EAAE,2BAA2B;QACpC,YAAY;QACZ,WAAW,EAAE,YAAY;QACzB,SAAS;KACV,CAAC;IACF,MAAM,OAAO,GAAuD;QAClE,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC;QACxE,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE;QACpD,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC;KACzE,CAAC;IACF,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;AAC7D,CAAC;AAED,SAAS,YAAY,CAAC,KAAqB,EAAE,MAAoC;IAC/E,OAAO;QACL,MAAM,EAAE,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,KAA2C,EAAE,eAAe,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC;QAC7H,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,KAA2C,EAAE,eAAe,EAAE,KAAK,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;QACvH,SAAS,EAAE,CAAC,EAAE,IAAI,EAAE,aAAa,YAAY,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC;QAC/E,aAAa,EAAE;YACb,GAAG,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,WAAW,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;YACjF,EAAE,IAAI,EAAE,uBAAuB,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE;SAChE;QACD,QAAQ,EAAE,CAAC,QAAQ,CAAC;QACpB,QAAQ,EAAE,CAAC,QAAQ,CAAC;QACpB,WAAW,EAAE,YAAY;QACzB,GAAG,MAAM;KACV,CAAC;AACJ,CAAC;AAED,yEAAyE;AACzE,SAAS,gBAAgB,CAAC,MAAmB,EAAE,QAAuF;IACpI,MAAM,iBAAiB,GAAG,QAAQ,CAAC,iBAAiB,IAAI,CAAC,CAAC;IAC1D,MAAM,KAAK,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC;IACvC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,EAAE,8BAA8B,CAAC,CAAC;IAE5D,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;IAC/C,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,kBAAkB,EAAE,CAAC,CAAC,CAAC;IACzD,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC;IACtD,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,kBAAkB,EAAE,CAAC,CAAC,CAAC;IACzD,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE,EAAE,sBAAsB,CAAC,CAAC;IAErE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IAC3C,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,YAAY,CAAC,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAC9D,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IAC5C,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,YAAY,CAAC,mBAAmB,EAAE,QAAQ,CAAC,mBAAmB,CAAC,CAAC;IACpF,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,YAAY,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;IAE/C,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC,SAAS,EAAE,EAAE,EAAE,sBAAsB,CAAC,CAAC;IACzE,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC,WAAW,EAAE,EAAE,EAAE,kBAAkB,CAAC,CAAC;IACvE,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,WAAW,CAAC,SAAS,EAAE,EAAE,EAAE,0BAA0B,CAAC,CAAC;IAC/E,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,EAAE,sBAAsB,CAAC,CAAC;IACtE,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,EAAE,uBAAuB,CAAC,CAAC;IACzE,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,YAAY,CAAC,QAAQ,EAAE,EAAE,EAAE,2BAA2B,CAAC,CAAC;IAEhF,uCAAuC;IACvC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IACzD,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,CAAE,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IACxE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,CAAE,CAAC,UAAU,CAAC,CAAC,CAAE,CAAC,iBAAiB,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IAE9F,qEAAqE;IACrE,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC;IACxC,MAAM,CAAC,EAAE,CAAC,QAAQ,EAAE,kBAAkB,CAAC,CAAC;IACxC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IACpC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;IACxC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;IACxC,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,YAAY,EAAE,mCAAmC,CAAC,CAAC;IACtE,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAC,KAAK,EAAE,IAAI,EAAE,iCAAiC,CAAC,CAAC;IACnF,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAS,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,sCAAsC,CAAC,CAAC;IACtH,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,QAAS,CAAC,UAAU,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC7D,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,QAAS,CAAC,UAAU,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC7D,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,QAAS,CAAC,eAAe,CAAC,EAAE;QACpD,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE;KAC9D,CAAC,CAAC;IAEH,qEAAqE;IACrE,qEAAqE;IACrE,qEAAqE;IACrE,wEAAwE;IACxE,iDAAiD;IACjD,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IAC/C,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAE,CAAC,WAAW,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC;IAC3E,MAAM,QAAQ,GAAG,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;IACrE,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,iBAAiB,EAAE,2BAA2B,CAAC,CAAC;IAC9E,IAAI,iBAAiB,GAAG,CAAC,EAAE,CAAC;QAC1B,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAE,CAAC,SAAS,EAAE,eAAe,CAAC,CAAC;QACtD,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAE,CAAC,WAAW,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC;IAC/D,CAAC;IAED,yBAAyB;IACzB,MAAM,MAAM,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;IACvC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,WAAW,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC;IAC/D,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,mBAAmB,EAAE,EAAE,CAAC,CAAC;IACzD,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,0BAA0B,EAAE,iBAAiB,CAAC,CAAC;IACpF,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;AAC5C,CAAC;AAED,QAAQ,CAAC,mDAAmD,EAAE,GAAG,EAAE;IACjE,IAAI,KAAqB,CAAC;IAC1B,MAAM,CAAC,KAAK,IAAI,EAAE;QAChB,KAAK,GAAG,MAAM,kBAAkB,EAAE,CAAC;IACrC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6DAA6D,EAAE,KAAK,IAAI,EAAE;QAC3E,MAAM,OAAO,GAAG,kBAAkB,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC;QACxD,MAAM,GAAG,GAAG,MAAM,WAAW,CAAC,4BAA4B,CAAC,CAAC;QAC5D,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,eAAe,CAAC,CAAC;QAC9C,MAAM,SAAS,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QAErC,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,UAAU,CAAC,CAAC;QAC1C,gBAAgB,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,mBAAmB,EAAE,CAAC,EAAE,CAAC,CAAC;QAClE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;QAChD,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,QAAS,CAAC,QAAS,CAAC,mBAAmB,CAAC,EAAE,IAAI,CAAC,CAAC;QAC3E,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,QAAS,CAAC,QAAS,CAAC,YAAY,CAAC,EAAE,SAAS,CAAC,CAAC;IAC3E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mFAAmF,EAAE,KAAK,IAAI,EAAE;QACjG,MAAM,UAAU,GAAG,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,iBAAiB,EAAE,IAAI,EAAE,CAAC,CAAC;QACpE,MAAM,OAAO,GAAG,kBAAkB,CAAC,YAAY,CAAC,KAAK,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC;QACxE,MAAM,GAAG,GAAG,MAAM,WAAW,CAAC,0BAA0B,CAAC,CAAC;QAC1D,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,eAAe,CAAC,CAAC;QAC9C,MAAM,SAAS,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QAErC,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,UAAU,CAAC,CAAC;QAC1C,gBAAgB,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,mBAAmB,EAAE,CAAC,EAAE,CAAC,CAAC;QAClE,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,QAAS,CAAC,QAAS,CAAC,YAAY,CAAC,EAAE,UAAU,EAAE,wBAAwB,CAAC,CAAC;IAC1G,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oEAAoE,EAAE,GAAG,EAAE;QAC5E,MAAM,CAAC,GAAG,kBAAkB,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC;QAClD,MAAM,CAAC,GAAG,kBAAkB,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC;QAClD,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,iDAAiD,CAAC,CAAC;IACtG,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2DAA2D,EAAE,KAAK,IAAI,EAAE;QACzE,yBAAyB;QACzB,MAAM,CAAC,MAAM,CACX,GAAG,EAAE,CACH,kBAAkB,CAAC;YACjB,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,CAAC;YACzC,QAAQ,EAAE,EAAE;YACZ,QAAQ,EAAE,EAAE;SACb,CAAC,EACJ,yBAAyB,CAC1B,CAAC;QACF,gEAAgE;QAChE,MAAM,CAAC,MAAM,CACX,GAAG,EAAE,CACH,kBAAkB,CAAC;YACjB,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC,CAAE,CAAC,KAA2C,EAAE,eAAe,EAAE,kBAAkB,EAAE,CAAC;YAC1H,QAAQ,EAAE,CAAC,QAAQ,CAAC;YACpB,QAAQ,EAAE,CAAC,QAAQ,CAAC;SACrB,CAAC,EACJ,gCAAgC,CACjC,CAAC;QACF,gCAAgC;QAChC,MAAM,CAAC,MAAM,CACX,GAAG,EAAE,CACH,kBAAkB,CAAC;YACjB,MAAM,EAAE;gBACN,EAAE,KAAK,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC,CAAE,CAAC,KAA2C,EAAE;gBAC3E,EAAE,KAAK,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC,CAAE,CAAC,KAA2C,EAAE;aAC5E;YACD,QAAQ,EAAE,CAAC,QAAQ,CAAC;YACpB,QAAQ,EAAE,CAAC,QAAQ,CAAC;SACrB,CAAC,EACJ,iBAAiB,CAClB,CAAC;QACF,uBAAuB;QACvB,MAAM,CAAC,MAAM,CACX,GAAG,EAAE,CACH,kBAAkB,CAAC;YACjB,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC,CAAE,CAAC,KAA2C,EAAE,CAAC;YACrF,SAAS,EAAE,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;YACpD,QAAQ,EAAE,CAAC,QAAQ,CAAC;YACpB,QAAQ,EAAE,CAAC,QAAQ,CAAC;SACrB,CAAC,EACJ,kBAAkB,CACnB,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,8EAA8E;AAC9E,mDAAmD;AACnD,yEAAyE;AACzE,0EAA0E;AAC1E,wEAAwE;AACxE,0EAA0E;AAC1E,oDAAoD;AACpD,8EAA8E;AAE9E,MAAM,gBAAgB,GAAG,aAAa,CACpC,IAAI,GAAG,CAAC,uCAAuC,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAClE,CAAC;AAEF,yEAAyE;AACzE,6EAA6E;AAC7E,6EAA6E;AAC7E,+EAA+E;AAC/E,+EAA+E;AAC/E,oDAAoD;AACpD,MAAM,SAAS,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACjD,KAAK,UAAU,mBAAmB,CAAC,OAAe;IAChD,MAAM,EAAE,GAAG,SAAS,CAAC,YAAY,CAAgC,CAAC;IAClE,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAC;IACxD,MAAM,EAAE,GAAG,EAAE,CAAC,eAAe,CAAC,MAAM,EAAE;QACpC,eAAe,EAAE;YACf,MAAM,EAAE,EAAE,CAAC,UAAU,CAAC,MAAM;YAC5B,MAAM,EAAE,EAAE,CAAC,YAAY,CAAC,MAAM;SAC/B;KACF,CAAC,CAAC,UAAU,CAAC;IACd,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE,kBAAkB,CAAC,CAAC;IAClD,MAAM,SAAS,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IAC7B,OAAO,aAAa,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC;AACrC,CAAC;AAED,MAAM,aAAa,GAAG;;;;;;;;;;;;;;;;;;;;;;;;CAwBrB,CAAC;AAOF,KAAK,UAAU,gBAAgB,CAAC,KAAqB,EAAE,IAAuB;IAC5E,MAAM,GAAG,GAAG,MAAM,WAAW,CAAC,6BAA6B,CAAC,CAAC;IAC7D,MAAM,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;IAEnC,uEAAuE;IACvE,wEAAwE;IACxE,wEAAwE;IACxE,UAAU;IACV,MAAM,OAAO,GAA2B,EAAE,CAAC;IAC3C,MAAM,SAAS,GAAa,EAAE,CAAC;IAC/B,KAAK,MAAM,MAAM,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;QACnC,MAAM,OAAO,GAAI,MAAM,CAAC,KAAK,CAAC,MAA+B,CAAC,OAAO,IAAI,GAAG,CAAC;QAC7E,MAAM,GAAG,GAAG,UAAU,SAAS,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC;QACrF,OAAO,CAAC,GAAG,CAAC,GAAG,eAAe,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;QAC/D,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACtB,CAAC;IACD,SAAS,CAAC,IAAI,EAAE,CAAC;IACjB,MAAM,cAAc,GAAG,WAAW,SAAS,IAAI,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC;IACjE,OAAO,CAAC,cAAc,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC;QACvC,GAAI,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,CAA6B;QACvG,QAAQ,EAAE,EAAE,WAAW,EAAE,YAAY,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE;KACpE,CAAC,CAAC;IAEH,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;IAC3C,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC;IAC5C,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,uBAAuB,CAAC,CAAC;IACnD,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;IACxC,MAAM,MAAM,GAAG,MAAM,mBAAmB,CAAC,GAAG,CAAC,CAAC;IAC9C,MAAM,SAAS,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;IAC3C,MAAM,SAAS,CACb,UAAU,EACV,IAAI,CAAC,SAAS,CAAC;QACb,MAAM;QACN,WAAW,EAAE,SAAS;QACtB,aAAa,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,kBAAkB;QACzD,WAAW,EAAE,YAAY;QACzB,SAAS;QACT,UAAU,EAAE,CAAC,cAAc,CAAC;QAC5B,OAAO;QACP,OAAO;QACP,QAAQ;KACT,CAAC,CACH,CAAC;IAEF,MAAM,aAAa,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC,CAAC;IAChE,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAuB,CAAC;IAChF,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AACxC,CAAC;AAED,QAAQ,CAAC,qDAAqD,EAAE,GAAG,EAAE;IACnE,IAAI,KAAqB,CAAC;IAC1B,MAAM,CAAC,KAAK,IAAI,EAAE;QAChB,KAAK,GAAG,MAAM,kBAAkB,EAAE,CAAC;IACrC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yFAAyF,EAAE,KAAK,IAAI,EAAE;QACvG,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,GAAG,MAAM,gBAAgB,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QAC7E,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAC/B,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;QACjC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QACrC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;QACpC,0EAA0E;QAC1E,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QAE9B,MAAM,cAAc,GAAG,MAAM,QAAQ,CAAC,WAAW,CAAC,CAAC;QAEnD,qEAAqE;QACrE,uEAAuE;QACvE,sDAAsD;QACtD,MAAM,SAAS,GAAG,kBAAkB,CAAC;YACnC,MAAM,EAAE,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,KAA2C,EAAE,eAAe,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC;YAC1H,QAAQ,EAAE,CAAC,QAAQ,CAAC;YACpB,QAAQ,EAAE,CAAC,QAAQ,CAAC;YACpB,WAAW,EAAE,YAAY;SAC1B,CAAC,CAAC;QACH,MAAM,CAAC,EAAE,CACP,cAAc,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAC7C,gFAAgF,CACjF,CAAC;QAEF,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,WAAW,CAAC,CAAC;QAC3C,wDAAwD;QACxD,yEAAyE;QACzE,gBAAgB,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,mBAAmB,EAAE,CAAC,EAAE,iBAAiB,EAAE,CAAC,EAAE,CAAC,CAAC;QACxF,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,QAAS,CAAC,QAAS,CAAC,mBAAmB,CAAC,EAAE,KAAK,CAAC,CAAC;QAC5E,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,QAAS,CAAC,QAAS,CAAC,YAAY,CAAC,EAAE,SAAS,CAAC,CAAC;IAC3E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4EAA4E,EAAE,KAAK,IAAI,EAAE;QAC1F,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,GAAG,MAAM,gBAAgB,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QAC5E,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAE9B,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,WAAW,CAAC,CAAC;QAC3C,gBAAgB,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,mBAAmB,EAAE,CAAC,EAAE,iBAAiB,EAAE,CAAC,EAAE,CAAC,CAAC;QACxF,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,QAAS,CAAC,QAAS,CAAC,YAAY,CAAC,EAAE;YAChE,EAAE,OAAO,EAAE,QAAQ,EAAE,iBAAiB,EAAE,IAAI,EAAE;SAC/C,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=audit-temporal.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"audit-temporal.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/audit-temporal.test.ts"],"names":[],"mappings":""}