zkjson 0.6.1 → 1.0.2

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 (187) hide show
  1. package/README.md +537 -0
  2. package/assets/collection.png +0 -0
  3. package/assets/db.png +0 -0
  4. package/assets/encode.png +0 -0
  5. package/assets/query.png +0 -0
  6. package/assets/rollup.png +0 -0
  7. package/assets/structure.png +0 -0
  8. package/assets/weavedb.png +0 -0
  9. package/assets/zkjson.png +0 -0
  10. package/benchmark/components/ui/avatar.jsx +49 -0
  11. package/benchmark/components/ui/checkbox.jsx +17 -0
  12. package/benchmark/components/ui/close-button.jsx +20 -0
  13. package/benchmark/components/ui/color-mode.jsx +89 -0
  14. package/benchmark/components/ui/dialog.jsx +54 -0
  15. package/benchmark/components/ui/drawer.jsx +44 -0
  16. package/benchmark/components/ui/field.jsx +22 -0
  17. package/benchmark/components/ui/input-group.jsx +39 -0
  18. package/benchmark/components/ui/popover.jsx +49 -0
  19. package/benchmark/components/ui/provider.jsx +12 -0
  20. package/benchmark/components/ui/radio.jsx +17 -0
  21. package/benchmark/components/ui/slider.jsx +107 -0
  22. package/benchmark/components/ui/tooltip.jsx +35 -0
  23. package/benchmark/jsconfig.json +7 -0
  24. package/benchmark/lib/cbor.js +387 -0
  25. package/benchmark/lib/msgpack.js +651 -0
  26. package/benchmark/next.config.mjs +6 -0
  27. package/benchmark/package.json +22 -0
  28. package/benchmark/pages/_app.js +9 -0
  29. package/benchmark/pages/_document.js +13 -0
  30. package/benchmark/pages/api/hello.js +5 -0
  31. package/benchmark/pages/index.js +438 -0
  32. package/benchmark/public/favicon.ico +0 -0
  33. package/benchmark/public/file.svg +1 -0
  34. package/benchmark/public/globe.svg +1 -0
  35. package/benchmark/public/next.svg +1 -0
  36. package/benchmark/public/vercel.svg +1 -0
  37. package/benchmark/public/window.svg +1 -0
  38. package/benchmark/yarn.lock +2448 -0
  39. package/circom/collection/collection.circom +32 -0
  40. package/circom/collection/compile.sh +10 -0
  41. package/circom/collection/gen.js +34 -0
  42. package/circom/collection/generateInput.js +10 -0
  43. package/circom/collection/index.circom +4 -0
  44. package/circom/collection/test.js +21 -0
  45. package/circom/collection/verifier.sol +247 -0
  46. package/circom/db/compile.sh +10 -0
  47. package/circom/db/db.circom +39 -0
  48. package/circom/db/gen.js +30 -0
  49. package/circom/db/generateInput.js +10 -0
  50. package/circom/db/index.circom +4 -0
  51. package/circom/db/test.js +21 -0
  52. package/circom/db/verifier.sol +261 -0
  53. package/circom/ipfs/calculate_total.circom +17 -0
  54. package/circom/ipfs/compile.sh +10 -0
  55. package/circom/ipfs/gen.js +18 -0
  56. package/circom/ipfs/generateInput.js +10 -0
  57. package/circom/ipfs/index.circom +4 -0
  58. package/circom/ipfs/ipfs.circom +62 -0
  59. package/circom/ipfs/parse.circom +289 -0
  60. package/circom/ipfs/sha256.circom +99 -0
  61. package/circom/ipfs/test.js +167 -0
  62. package/circom/ipfs/verifier.sol +261 -0
  63. package/circom/json/compile.sh +10 -0
  64. package/circom/json/gen.js +22 -0
  65. package/circom/json/gen2.js +21 -0
  66. package/circom/json/generateInput.js +20 -0
  67. package/circom/json/index.circom +4 -0
  68. package/circom/json/json.circom +81 -0
  69. package/circom/json/test.js +100 -0
  70. package/circom/json/verifier.sol +247 -0
  71. package/circom/query/compile.sh +10 -0
  72. package/circom/query/gen.js +28 -0
  73. package/circom/query/generateInput.js +11 -0
  74. package/circom/query/index.circom +4 -0
  75. package/circom/query/query.circom +58 -0
  76. package/circom/query/test.js +20 -0
  77. package/circom/query/verifier.sol +177 -0
  78. package/circom/rollup/compile.sh +10 -0
  79. package/circom/rollup/gen.js +36 -0
  80. package/circom/rollup/generateInput.js +11 -0
  81. package/circom/rollup/index.circom +4 -0
  82. package/circom/rollup/rollup.circom +43 -0
  83. package/circom/rollup/test.js +35 -0
  84. package/circom/rollup/verifier.sol +240 -0
  85. package/circom/scripts/ceremony.js +39 -0
  86. package/circom/scripts/ceremony.sh +6 -0
  87. package/circom/scripts/compile.js +113 -0
  88. package/circom/scripts/compile.sh +16 -0
  89. package/circom/utils/uint.circom +512 -0
  90. package/circom/utils/utils.circom +628 -0
  91. package/demos/arweave/jsconfig.json +7 -0
  92. package/demos/arweave/lib/ZKArweave.json +617 -0
  93. package/demos/arweave/lib/encoder.js +375 -0
  94. package/demos/arweave/next.config.js +6 -0
  95. package/demos/arweave/package.json +26 -0
  96. package/demos/arweave/pages/_app.js +9 -0
  97. package/demos/arweave/pages/_document.js +19 -0
  98. package/demos/arweave/pages/api/arweave.js +31 -0
  99. package/demos/arweave/pages/api/hello.js +5 -0
  100. package/demos/arweave/pages/index.js +869 -0
  101. package/demos/arweave/public/circuit.wasm +0 -0
  102. package/demos/arweave/public/circuit_final.zkey +0 -0
  103. package/demos/arweave/public/verification_key.json +149 -0
  104. package/demos/arweave/vercel.json +7 -0
  105. package/demos/arweave/yarn.lock +2510 -0
  106. package/demos/simple/jsconfig.json +7 -0
  107. package/demos/simple/lib/encoder.js +375 -0
  108. package/demos/simple/next.config.js +6 -0
  109. package/demos/simple/package.json +24 -0
  110. package/demos/simple/pages/_app.js +9 -0
  111. package/demos/simple/pages/_document.js +13 -0
  112. package/demos/simple/pages/api/hello.js +5 -0
  113. package/demos/simple/pages/index.js +342 -0
  114. package/demos/simple/public/circuit.wasm +0 -0
  115. package/demos/simple/public/circuit_final.zkey +0 -0
  116. package/demos/simple/public/verification_key.json +149 -0
  117. package/demos/simple/yarn.lock +2519 -0
  118. package/docs/README.md +17 -0
  119. package/docs/simple-zkjson.md +210 -0
  120. package/docs/solidity-contracts.md +216 -0
  121. package/docs/zk-circuits.md +125 -0
  122. package/docs/zkdb-rollup.md +218 -0
  123. package/docs/zkjson-sdk.md +254 -0
  124. package/docs/zkjson-v1_5.md +365 -0
  125. package/package.json +16 -7
  126. package/{contracts → sdk/contracts}/NORollup.sol +0 -2
  127. package/sdk/package.json +15 -0
  128. package/sdk/yarn.lock +881 -0
  129. package/solidity/README.md +13 -0
  130. package/solidity/arguments.js +4 -0
  131. package/solidity/contracts/NORollup.sol +13 -0
  132. package/solidity/contracts/OPRollup.sol +14 -0
  133. package/solidity/contracts/ZKIPFS.sol +95 -0
  134. package/solidity/contracts/ZKJson.sol +21 -0
  135. package/solidity/contracts/ZKQuery.sol +286 -0
  136. package/solidity/contracts/ZKRollup.sol +35 -0
  137. package/solidity/contracts/apps/NORU.sol +66 -0
  138. package/solidity/contracts/apps/SimpleJSON.sol +64 -0
  139. package/solidity/contracts/apps/SimpleOPRU.sol +67 -0
  140. package/solidity/contracts/apps/SimpleRU.sol +67 -0
  141. package/solidity/contracts/apps/Token.sol +12 -0
  142. package/solidity/contracts/apps/ZKArweave.sol +89 -0
  143. package/solidity/contracts/apps/ZKBridge.sol +74 -0
  144. package/solidity/contracts/apps/ZKNFT.sol +63 -0
  145. package/solidity/contracts/verifiers/verifier_db.sol +275 -0
  146. package/solidity/contracts/verifiers/verifier_ipfs.sol +464 -0
  147. package/solidity/contracts/verifiers/verifier_json.sol +261 -0
  148. package/solidity/contracts/verifiers/verifier_rollup.sol +240 -0
  149. package/solidity/package.json +27 -0
  150. package/solidity/scripts/deploy.js +33 -0
  151. package/solidity/test/NORU.js +66 -0
  152. package/solidity/test/ZKArweave.js +97 -0
  153. package/solidity/test/arweave.js +55 -0
  154. package/solidity/test/bridge.js +71 -0
  155. package/solidity/test/simple.js +76 -0
  156. package/solidity/test/simpleOPRU.js +98 -0
  157. package/solidity/test/simpleRU.js +94 -0
  158. package/solidity/test/zknft.js +98 -0
  159. package/solidity/yarn.lock +4152 -0
  160. package/test/test.js +304 -0
  161. /package/{circomlibjs.js → sdk/circomlibjs.js} +0 -0
  162. /package/{collection.js → sdk/collection.js} +0 -0
  163. /package/{contracts → sdk/contracts}/OPRollup.sol +0 -0
  164. /package/{contracts → sdk/contracts}/ZKIPFS.sol +0 -0
  165. /package/{contracts → sdk/contracts}/ZKJson.sol +0 -0
  166. /package/{contracts → sdk/contracts}/ZKQuery.sol +0 -0
  167. /package/{contracts → sdk/contracts}/ZKRollup.sol +0 -0
  168. /package/{contracts → sdk/contracts}/apps/SimpleJSON.sol +0 -0
  169. /package/{contracts → sdk/contracts}/apps/SimpleOPRU.sol +0 -0
  170. /package/{contracts → sdk/contracts}/apps/SimpleRU.sol +0 -0
  171. /package/{contracts → sdk/contracts}/apps/Token.sol +0 -0
  172. /package/{contracts → sdk/contracts}/apps/ZKArweave.sol +0 -0
  173. /package/{contracts → sdk/contracts}/apps/ZKBridge.sol +0 -0
  174. /package/{contracts → sdk/contracts}/apps/ZKNFT.sol +0 -0
  175. /package/{contracts → sdk/contracts}/verifiers/verifier_db.sol +0 -0
  176. /package/{contracts → sdk/contracts}/verifiers/verifier_ipfs.sol +0 -0
  177. /package/{contracts → sdk/contracts}/verifiers/verifier_json.sol +0 -0
  178. /package/{contracts → sdk/contracts}/verifiers/verifier_rollup.sol +0 -0
  179. /package/{db.js → sdk/db.js} +0 -0
  180. /package/{doc.js → sdk/doc.js} +0 -0
  181. /package/{encoder-v1_5.js → sdk/encoder-v1_5.js} +0 -0
  182. /package/{encoder.js → sdk/encoder.js} +0 -0
  183. /package/{index.js → sdk/index.js} +0 -0
  184. /package/{json.js → sdk/json.js} +0 -0
  185. /package/{nft.js → sdk/nft.js} +0 -0
  186. /package/{parse.js → sdk/parse.js} +0 -0
  187. /package/{uint.js → sdk/uint.js} +0 -0
@@ -0,0 +1,342 @@
1
+ import Head from "next/head"
2
+ import Link from "next/link"
3
+ import { Select, Box, Flex, Input, Textarea } from "@chakra-ui/react"
4
+ import { useState, useEffect } from "react"
5
+ import { map } from "ramda"
6
+ import {
7
+ encode,
8
+ encodeVal,
9
+ encodePath,
10
+ decodePath,
11
+ pad,
12
+ toSignal,
13
+ } from "zkjson"
14
+ const snarkjs = require("snarkjs")
15
+ import { flattenPath, _encode } from "../lib/encoder"
16
+ export default function Home() {
17
+ const [signals, setSignals] = useState(null)
18
+ const [proof, setProof] = useState(null)
19
+ const [result, setResult] = useState(null)
20
+ const [type, setType] = useState("number")
21
+ const [json, setJSON] = useState("")
22
+ const [path, setPath] = useState("")
23
+ const [num, setNum] = useState("")
24
+ const [bool, setBool] = useState(true)
25
+ const [str, setStr] = useState("")
26
+ let valid = false
27
+ try {
28
+ let _j = null
29
+ eval("_j = " + json)
30
+ valid = true
31
+ } catch (e) {}
32
+ return (
33
+ <>
34
+ <Head>
35
+ <title>zkJSON Demo</title>
36
+ <meta name="description" content="Zero Knowledge Provable JSON" />
37
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
38
+ <link rel="icon" href="/favicon.ico" />
39
+ </Head>
40
+ <Flex w="100%" h="100%" justify="center" p={4} fontSize="14px">
41
+ <Box>
42
+ <Flex align="center" justify="center" w="750px">
43
+ <Box fontSize="30px" fontWeight="bold" color="#5037C6">
44
+ zkJSON
45
+ </Box>
46
+ <Box ml={4}>Zero Knowledge Provable JSON</Box>
47
+ </Flex>
48
+ <Box
49
+ w="750px"
50
+ bg="#eee"
51
+ py={2}
52
+ px={8}
53
+ mt={4}
54
+ sx={{ borderRadius: "10px" }}
55
+ >
56
+ <Box align="center" mt={4} color="#5037C6">
57
+ Using a zero knowledge circuit, you can prove any data in JSON
58
+ without revealing the JSON itself.
59
+ </Box>
60
+ <Box mt={4}>
61
+ <Flex>
62
+ <Box as="label" color={valid ? "" : "crimson"}>
63
+ JSON (private, this data won't be revealed){" "}
64
+ {valid ? "" : "Invalid JSON"}
65
+ </Box>
66
+ <Box flex={1} />
67
+ <Box
68
+ mr={2}
69
+ color="#5037C6"
70
+ sx={{
71
+ textDecoration: "underline",
72
+ cursor: "pointer",
73
+ ":hover": { opacity: 0.75 },
74
+ }}
75
+ onClick={() => {
76
+ const rand = (i, start = 0) =>
77
+ Math.floor(Math.random() * i) + start
78
+ let alpha = [
79
+ "a",
80
+ "b",
81
+ "c",
82
+ "d",
83
+ "e",
84
+ "f",
85
+ "g",
86
+ "h",
87
+ "i",
88
+ "j",
89
+ "k",
90
+ "l",
91
+ ]
92
+ const getOBJ = () => {
93
+ let obj = {}
94
+ let num = rand(3) + 3
95
+ for (let i = 0; i < num; i++) {
96
+ const type = rand(6)
97
+ if (type === 2) {
98
+ obj[alpha[rand(alpha.length)]] = rand(10)
99
+ } else if (type === 3) {
100
+ obj[alpha[rand(alpha.length)]] =
101
+ alpha[rand(alpha.length)]
102
+ } else if (type === 1) {
103
+ obj[alpha[rand(alpha.length)]] = rand(2) === 0
104
+ } else if (type === 4) {
105
+ obj[alpha[rand(alpha.length)]] = [
106
+ rand(10),
107
+ rand(10),
108
+ rand(10),
109
+ ]
110
+ } else if (type === 0) {
111
+ obj[alpha[rand(alpha.length)]] = rand(2) === null
112
+ } else if (type === 5) {
113
+ obj[alpha[rand(alpha.length)]] = getOBJ()
114
+ }
115
+ }
116
+ return obj
117
+ }
118
+ setJSON(JSON.stringify(getOBJ()))
119
+ }}
120
+ >
121
+ generate
122
+ </Box>
123
+ </Flex>
124
+ <Textarea
125
+ bg="white"
126
+ placeholder="{ a : 1 }"
127
+ value={json}
128
+ onChange={e => setJSON(e.target.value)}
129
+ />
130
+ </Box>
131
+ <Box mt={4}>
132
+ <Flex>
133
+ <Box as="label">Path (public)</Box> <Box flex={1} />
134
+ <Box
135
+ mr={2}
136
+ color="#5037C6"
137
+ sx={{
138
+ textDecoration: "underline",
139
+ cursor: "pointer",
140
+ ":hover": { opacity: 0.75 },
141
+ }}
142
+ onClick={() => {
143
+ const rand = (i, start = 0) =>
144
+ Math.floor(Math.random() * i) + start
145
+ const enc = _encode(JSON.parse(json))
146
+ const v = enc[rand(enc.length)]
147
+ setPath(decodePath(flattenPath(v[0])))
148
+ }}
149
+ >
150
+ generate
151
+ </Box>
152
+ </Flex>
153
+ <Input
154
+ bg="white"
155
+ placeholder="a"
156
+ value={path}
157
+ onChange={e => setPath(e.target.value)}
158
+ />
159
+ </Box>
160
+ <Box mt={4}>
161
+ <Flex>
162
+ <Box flex={1} pr={4}>
163
+ <Box as="label">Data Type (public)</Box>
164
+ <Select
165
+ value={type}
166
+ onChange={e => setType(e.target.value)}
167
+ bg="white"
168
+ >
169
+ {map(v => <option>{v}</option>)([
170
+ "null",
171
+ "boolean",
172
+ "number",
173
+ "string",
174
+ ])}
175
+ </Select>
176
+ </Box>
177
+ <Box flex={1} pl={4}>
178
+ <Box as="label">Value (public)</Box>
179
+ {type === "string" ? (
180
+ <Input
181
+ placeholder="1"
182
+ bg="white"
183
+ value={str}
184
+ onChange={e => setStr(e.target.value)}
185
+ />
186
+ ) : type === "number" ? (
187
+ <Input
188
+ placeholder="1"
189
+ bg="white"
190
+ value={num}
191
+ onChange={e => {
192
+ if (!Number.isNaN(e.target.value * 1)) {
193
+ setNum(e.target.value)
194
+ }
195
+ }}
196
+ />
197
+ ) : type === "null" ? (
198
+ <Input
199
+ placeholder="1"
200
+ bg="white"
201
+ value="null"
202
+ disabled={true}
203
+ />
204
+ ) : (
205
+ <Select
206
+ value={bool}
207
+ onChange={e =>
208
+ setBool(e.target.value === "true" ? true : false)
209
+ }
210
+ bg="white"
211
+ >
212
+ {map(v => (
213
+ <option value={v === "true" ? true : false}>{v}</option>
214
+ ))(["true", "false"])}
215
+ </Select>
216
+ )}
217
+ </Box>
218
+ </Flex>
219
+ </Box>
220
+ <Flex justify="center" mt={4}>
221
+ <Flex
222
+ py={3}
223
+ bg={valid ? "#5037C6" : "#aaa"}
224
+ w="100%"
225
+ justify="center"
226
+ color="white"
227
+ fontSize="16px"
228
+ sx={{
229
+ borderRadius: "5px",
230
+ cursor: valid ? "pointer" : "default",
231
+ ":hover": { opacity: 0.75 },
232
+ }}
233
+ onClick={async () => {
234
+ if (valid) {
235
+ let _json = null
236
+ try {
237
+ eval("_json = " + json)
238
+ } catch (e) {}
239
+ _json = pad(toSignal(encode(_json)), 256)
240
+ const _path = pad(toSignal(encodePath(path)), 5)
241
+ let _val =
242
+ type === "number"
243
+ ? num * 1
244
+ : type === "string"
245
+ ? str
246
+ : type === "boolean"
247
+ ? bool
248
+ : null
249
+ const _val2 = pad(toSignal(encodeVal(_val)), 5)
250
+ const { proof, publicSignals } =
251
+ await snarkjs.groth16.fullProve(
252
+ { json: _json, path: _path, val: _val2 },
253
+ "circuit.wasm",
254
+ "circuit_final.zkey"
255
+ )
256
+ setSignals(publicSignals)
257
+ setProof(proof)
258
+ setResult(null)
259
+ }
260
+ }}
261
+ >
262
+ Generate Proof
263
+ </Flex>
264
+ </Flex>
265
+ <Box mt={6}>
266
+ <Box as="label">Public Signals</Box>
267
+ <Textarea
268
+ bg="white"
269
+ value={JSON.stringify(signals)}
270
+ fontSize="10px"
271
+ disabled={true}
272
+ />
273
+ </Box>
274
+ <Box mt={4}>
275
+ <Box as="label">Proof</Box>
276
+ <Textarea
277
+ bg="white"
278
+ value={JSON.stringify(proof)}
279
+ fontSize="10px"
280
+ disabled={true}
281
+ />
282
+ </Box>
283
+ <Flex justify="center" mt={4}>
284
+ <Flex
285
+ py={3}
286
+ w="100%"
287
+ bg={proof ? "#5037C6" : "#aaa"}
288
+ justify="center"
289
+ color="white"
290
+ fontSize="16px"
291
+ sx={{
292
+ borderRadius: "5px",
293
+ cursor: proof ? "pointer" : "default",
294
+ ":hover": { opacity: 0.75 },
295
+ }}
296
+ onClick={async () => {
297
+ if (proof) {
298
+ const vkey = await fetch("verification_key.json").then(
299
+ function (res) {
300
+ return res.json()
301
+ }
302
+ )
303
+ const res = await snarkjs.groth16.verify(
304
+ vkey,
305
+ signals,
306
+ proof
307
+ )
308
+ setResult(res)
309
+ }
310
+ }}
311
+ >
312
+ Verify Proof
313
+ </Flex>
314
+ </Flex>
315
+ <Flex justify="center" mt={6} fontSize="20px">
316
+ <Flex
317
+ fontWeight="bold"
318
+ h="70px"
319
+ bg="white"
320
+ w="100%"
321
+ mb={4}
322
+ justify="center"
323
+ align="center"
324
+ color="#5037C6"
325
+ sx={{ borderRadius: "5px" }}
326
+ >
327
+ {result
328
+ ? `VALID ( ${signals[0] === "1" ? "exist" : "not exist"} )`
329
+ : ""}
330
+ </Flex>
331
+ </Flex>
332
+ </Box>
333
+ <Flex justify="center" mt={4} color="#5037C6">
334
+ <Link href="https://github.com/weavedb/zkjson" target="_blank">
335
+ Built by WeaveDB
336
+ </Link>
337
+ </Flex>
338
+ </Box>
339
+ </Flex>
340
+ </>
341
+ )
342
+ }
Binary file
@@ -0,0 +1,149 @@
1
+ {
2
+ "protocol": "groth16",
3
+ "curve": "bn128",
4
+ "nPublic": 12,
5
+ "vk_alpha_1": [
6
+ "20906723375066628996538723964948705883807515490851236717549543933647949219571",
7
+ "16603277405602064515576336929405274585704793668006611444340674010517699111175",
8
+ "1"
9
+ ],
10
+ "vk_beta_2": [
11
+ [
12
+ "2598197794696234583089212408001367512889853689394097760090270035862816362448",
13
+ "15094144295718056060696456976805274960280819890173699163580614297205641683890"
14
+ ],
15
+ [
16
+ "17948608722772603517072567060031950359342932415845723852078363636578090462964",
17
+ "13019389669452630605176375079598340867413494236340581417103700533129069013294"
18
+ ],
19
+ [
20
+ "1",
21
+ "0"
22
+ ]
23
+ ],
24
+ "vk_gamma_2": [
25
+ [
26
+ "10857046999023057135944570762232829481370756359578518086990519993285655852781",
27
+ "11559732032986387107991004021392285783925812861821192530917403151452391805634"
28
+ ],
29
+ [
30
+ "8495653923123431417604973247489272438418190587263600148770280649306958101930",
31
+ "4082367875863433681332203403145435568316851327593401208105741076214120093531"
32
+ ],
33
+ [
34
+ "1",
35
+ "0"
36
+ ]
37
+ ],
38
+ "vk_delta_2": [
39
+ [
40
+ "15520575756658013837683278837606855996748441404177081834144665047696535354396",
41
+ "10711072566124686834265841982715732378697448459012409505902998706903901541084"
42
+ ],
43
+ [
44
+ "18602518854483670884905553918154837342133779460402958263587772213821882545891",
45
+ "21670795361216273264901615496631029269219518939720252741040441908211802206706"
46
+ ],
47
+ [
48
+ "1",
49
+ "0"
50
+ ]
51
+ ],
52
+ "vk_alphabeta_12": [
53
+ [
54
+ [
55
+ "12474611102233718866490708245674223823179908264800813022477257119053614163132",
56
+ "19638923536391672813008675588811600469590660017381971590485853473118727526175"
57
+ ],
58
+ [
59
+ "16107488476924656661834598442681605942094353782607193169840313830538871273023",
60
+ "17490735369486042718859641940585608932279159487520676351901268258970747883134"
61
+ ],
62
+ [
63
+ "7527593643954722488554251757140899302585601025455438925504608502742089873340",
64
+ "3742017767886794788902981825363284368305107208244176715207488775845979234421"
65
+ ]
66
+ ],
67
+ [
68
+ [
69
+ "6196645528503356645410022864048334785007631624439101890087629340834596920449",
70
+ "11382571521501085696191499568585567625302967914657355634223492663644507989170"
71
+ ],
72
+ [
73
+ "21243113262754674736956480709100146006917208130404149582605613807117145963965",
74
+ "11368558209297805634728327300607481542009318809835375455921783989682060449080"
75
+ ],
76
+ [
77
+ "3278479966045108546410706555014734125203250776751525560389552766634128824145",
78
+ "15726477296338580745181895727220747569103127004127982994488818525133292360522"
79
+ ]
80
+ ]
81
+ ],
82
+ "IC": [
83
+ [
84
+ "11086791052709537593958527982551466373543557342479473456486918346706557110272",
85
+ "20506728735254563637401848289764804706365355653222631223947955738675551382105",
86
+ "1"
87
+ ],
88
+ [
89
+ "3395672018504856885331557568801382430991065622809977080049087938633695466505",
90
+ "16008515660025396265007279223380117478922266924915694760300639683710667540804",
91
+ "1"
92
+ ],
93
+ [
94
+ "21765086794018723313508040688349754864858333265049520578918793850946099000275",
95
+ "697811386339903182398036069234656900767187661360875928460814734795207770242",
96
+ "1"
97
+ ],
98
+ [
99
+ "19890134840469468860269808836413274874961102551504281644286795822862783578836",
100
+ "10501563686653873312925081348712045837799559277882754134863746661191456585317",
101
+ "1"
102
+ ],
103
+ [
104
+ "3369539760301949842926296294765952701286437018123521538030683232199073077793",
105
+ "17029305206701174018920590641604979023986372135961726666915339433517762654894",
106
+ "1"
107
+ ],
108
+ [
109
+ "16249858468384073197585049724261300836640451596079332252974671216468387477562",
110
+ "15430518669979717234332245816406403303816581724709051740811390921375347110404",
111
+ "1"
112
+ ],
113
+ [
114
+ "15005432332128787752647304265070458721246744260154464921566645180007742802279",
115
+ "12228853074973908182958795852882093001137862796451033278357411806506635324421",
116
+ "1"
117
+ ],
118
+ [
119
+ "8279149102391716348028737479566814742618645832848275208331642895717107868296",
120
+ "9028245630419080537816021983399031211599915437683007034212436702559232452386",
121
+ "1"
122
+ ],
123
+ [
124
+ "9920315178591554201395269399878868095438996004668427910727172420497691574268",
125
+ "13977539708344722958417991918934496531835259337681036150638988886470196226252",
126
+ "1"
127
+ ],
128
+ [
129
+ "64865284880675837338119066159408029670824664912895548295809933993597129855",
130
+ "16596614162936398597796948615700133880646516840294055167278997135786201638865",
131
+ "1"
132
+ ],
133
+ [
134
+ "20041216278333661355857000399562164892538427870735609885548447419114215265900",
135
+ "7188425125877597681508434156838946918685965411196380330181753494345911319474",
136
+ "1"
137
+ ],
138
+ [
139
+ "10344667596317540812042141319424780533548696928275174590606414302423871416439",
140
+ "15177912543756596934916481207669485500307163540835148656062032711878901603531",
141
+ "1"
142
+ ],
143
+ [
144
+ "3003572233500184455318954446784006239696026573012811847295348627074111281539",
145
+ "6485361686957307324235352983357156310358934769793375149333110905137006337248",
146
+ "1"
147
+ ]
148
+ ]
149
+ }