@secondlayer/verify 0.5.1 → 0.5.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.
- package/dist/index.d.ts +7 -7
- package/dist/index.js +76 -61
- package/dist/index.js.map +4 -4
- package/package.json +2 -1
package/dist/index.d.ts
CHANGED
|
@@ -277,6 +277,13 @@ declare class HeaderChain {
|
|
|
277
277
|
private medianTimePast;
|
|
278
278
|
private push;
|
|
279
279
|
}
|
|
280
|
+
/**
|
|
281
|
+
* Mainnet: Stacks block 9,055,251 (`10cb4e95…c5be`) holding the cycle 144
|
|
282
|
+
* signer set (31 signers, weight 4000), and Bitcoin block 967,680 (a
|
|
283
|
+
* retarget-period start at or below cycle 144's first burn block 968,450). Later blocks verify forward
|
|
284
|
+
* (burn height 967,680 or later); earlier ones by hash chain from 9,055,251.
|
|
285
|
+
*/
|
|
286
|
+
declare const MAINNET_CHECKPOINT: VerifyCheckpoint;
|
|
280
287
|
interface VerifyCheckpoint {
|
|
281
288
|
stacks: {
|
|
282
289
|
/** Raw Nakamoto header (hex) of a trusted block whose state holds `signerSet`. */
|
|
@@ -289,13 +296,6 @@ interface VerifyCheckpoint {
|
|
|
289
296
|
/** Retarget-boundary Bitcoin header at or below the first burn block of `stacks.cycle`. */
|
|
290
297
|
bitcoin: Checkpoint;
|
|
291
298
|
}
|
|
292
|
-
/**
|
|
293
|
-
* Mainnet: Stacks block 8,956,304 (`3914ea5f…74bb`) holding the cycle 143
|
|
294
|
-
* signer set (29 signers, weight 4000), and Bitcoin block 967,680 (a
|
|
295
|
-
* retarget-period start inside cycle 143). Later blocks verify forward
|
|
296
|
-
* (burn height 967,680 or later); earlier ones by hash chain from 8,956,304.
|
|
297
|
-
*/
|
|
298
|
-
declare const MAINNET_CHECKPOINT: VerifyCheckpoint;
|
|
299
299
|
/** Sortition preimage behind a consensus hash. */
|
|
300
300
|
interface BurnPreimage {
|
|
301
301
|
preimage: Bytes;
|
package/dist/index.js
CHANGED
|
@@ -897,72 +897,87 @@ function toRaw(item, height) {
|
|
|
897
897
|
}
|
|
898
898
|
return raw;
|
|
899
899
|
}
|
|
900
|
-
// src/checkpoint.ts
|
|
900
|
+
// src/checkpoint-mainnet.ts
|
|
901
901
|
var MAINNET_CHECKPOINT = {
|
|
902
902
|
stacks: {
|
|
903
903
|
header: [
|
|
904
|
-
"
|
|
905
|
-
"
|
|
906
|
-
"
|
|
907
|
-
"
|
|
908
|
-
"
|
|
909
|
-
"
|
|
910
|
-
"
|
|
911
|
-
"
|
|
912
|
-
"
|
|
913
|
-
"
|
|
914
|
-
"
|
|
915
|
-
"
|
|
916
|
-
"
|
|
917
|
-
"
|
|
918
|
-
"
|
|
919
|
-
"
|
|
920
|
-
"
|
|
921
|
-
"
|
|
922
|
-
"
|
|
923
|
-
"
|
|
924
|
-
"
|
|
925
|
-
"
|
|
926
|
-
"
|
|
904
|
+
"0100000000008a2c1300000066469e6fe824e36e45dbfb6f63201cc4847d12cae9c128c66d8e9a793304ef768e4728c6",
|
|
905
|
+
"7634484bd3dc868a787699dd8952c6b37cdeaefed8451304f9bf56fc8e9b5e8d80c716d8bece86dbe7e855348e71dc23",
|
|
906
|
+
"a3e7327ecf9ff95aa970430671f50a2ff6fd8c4ef444c4650ce456c8a10b5c8e084670e692000000006ab58f03003c14",
|
|
907
|
+
"9857675a089d271510492aa1e1decfd5c4a32e6f27f4aaaf299822bd0f83599991bc1ee5027e08f2181bcb1285d6f04b",
|
|
908
|
+
"a66cd3e4122f1565d266bcae019c0000001701e427ee3446da226d964aba82349d59691a8a9d087cd7519fd53b3ca555",
|
|
909
|
+
"e45f0746cd3e0c7cd196e2f8acf668c88aadb0e2bb3c185565d34f6475e13ac003929100b0bc28034cee5679858614f4",
|
|
910
|
+
"9e554f55cec31a7cd4cb3f56d6be284df984b3ea2b5e15744325c6d6de0648e3c14f8c4a0f15eb8c1d87693013b13390",
|
|
911
|
+
"36f8973900e0853aac5dd6dff18c20d8cf2196a22ed65bced9d5e75b932a0b05778763725a4490f514b85d5274099b3b",
|
|
912
|
+
"8a4cb02dd105bd85ea87276bad8a419d1e7ca4fe3601264cc97fc706ad2ae443baf9ea807e2c3ab2c0c561b847689ad9",
|
|
913
|
+
"57a2f7ea41c7749d9847dec5b6458693955a8367ee44bf16233db5bab24704470bfa820ebff200a51fd156df644335ba",
|
|
914
|
+
"e6d4e63c229ff0556aa75f98360fa0fa72439426e09d2964ffe74ebb628a04ad2493d1bf2c5548416afc0afafcbe57d1",
|
|
915
|
+
"d0c2e5d0f54b3a01222775d8bf237bde985b1a5199e3d2bc248fab425d338fb9102bbd860687b0e516c9a7891628ad3b",
|
|
916
|
+
"31e11dd447594fc9a3381dd62efe0fdf183a4d6e6d630ae6018c2a16339c484a26b239fbc04572bccc22435e90607a4e",
|
|
917
|
+
"01980614ebe4c6b5337ed06fb359e8f2db7add5e6da7f45e806a30a9d2abb8fc4841611c2bf13c9eb901463e39a7b64c",
|
|
918
|
+
"26d78deffd691be358fcfa03f28179da0f300aa4b045a59072c523e824372b172aec0a9ea71c568ab769b5672fa01ab1",
|
|
919
|
+
"3c36799ba4e85749722b012ab3b504a3ece80bf2186db6fe2407847fb6eef44206de958788b552c1226c034ccf34681f",
|
|
920
|
+
"d02f9f2f890b09a94b4002326ac836620a4daffc6a4149bc58a52600977d6a2b9aaf7adf6f5108dd2c9e05f169991907",
|
|
921
|
+
"0514fae6c4e0aeab2656b9a47581de7232198cef38d07d7fe1cd0238d88cac758280b2c633d0bab556ffe311010f0162",
|
|
922
|
+
"14ac30572c349981bc006617b43315b0d52efb06ea00c012f1269311340c8bd32615d24201279b3cd77d97adbb80b3e5",
|
|
923
|
+
"1a0ec357fc1b0865c826f292f4013df0c85f71124088fed20acc3160df54b6d9e0a454a5c7689239125acd4d613e6a2c",
|
|
924
|
+
"ed667e92d34d0548983d3c5d53468e00ec15bafc27b8946edae6aed04157008980f7c33cad51d44ff60d61a941cc62b3",
|
|
925
|
+
"e73a47e0cda51e564b01433866545640736823d42ae8b74ca35764812ebcf943a47b150f4e7f794c0216611051dd7000",
|
|
926
|
+
"c77ba1ce6a3a5d205b701c9d55fe5ac8730ec827deecfa8ad7800c331a839c4c705bc7708728128849ed5945b6020a38",
|
|
927
|
+
"7d1dbc08f8d4fb8449a722ee2e9f02b50023724701dc7a7c69b3025abfea79e67d7d7a5156c77072c9d58f4bf1cae2f5",
|
|
928
|
+
"f62f29527eb27f725f03d05986be28102ea27ee22052ef046ff1c6a4e09dc9a2c501f5231b9ff20a199c872f137b6ee5",
|
|
929
|
+
"cfd9ceb1df5973cd3ffab5a66fb6c89e58de550360f9933f6c5087d833e5b59b928405a676013e7377552bc6353fc852",
|
|
930
|
+
"94fd0083c761efba23bd276e82648135a4efcf73298bb13ef6e1cfbff37d3d99c757d46be3bffb5ec0fd46ffa849a1e5",
|
|
931
|
+
"813fcdb5d38ee95c5db3283bde0179c7a3b46e016b2418238b35dfeb9b84142f391702f71be43970e725576030102a7d",
|
|
932
|
+
"45acd6d834547636d6bc2a0bc559b9408edb460d5f4384ecefcdfad64e89923c30d83ed400a9009444429ec9a22789f2",
|
|
933
|
+
"31629ec51067c76a3d3802d0a4a625be9679c36ef12e2a888458bcdac4fe9ada9cfdea650a77a2b46fb760c144485f34",
|
|
934
|
+
"ac3ae7d5d70041eb4b36d08f7997747fb991d00c086644cc6ec1bf3f9bb53336e78358961d844d107bdb6e59977f9a9c",
|
|
935
|
+
"0d8f996efb36eed0d7fb8ce26fadc63cb9b79cc7795201a9ebee00b3818295c807c90ea8e6f9d0b4beee23003365ada5",
|
|
936
|
+
"4ca964390bc1c62bfe1a7e78084c384bef7ca2ed45241e818fefe1911d711fad5e13eff8ddf31000f08d21fc2a3b8c67",
|
|
937
|
+
"193fec9a326b8a49c0a9696fc66523014b9db5ed312a824a5bd87e29fbe3328d5f3ed05c3f38c7f4a6e4e53410830849",
|
|
938
|
+
"6a7458a149ff975101a957fd6ff8ce3d70bf0a9f5652aa6a87e27f3a8130d3f70558417cc3744d9b9b5879872467e520",
|
|
939
|
+
"f641c7253dc159cd1a0e2547d1c9a6ff3c45ce2d233e626fea0001000000010100000000"
|
|
927
940
|
].join(""),
|
|
928
|
-
cycle:
|
|
941
|
+
cycle: 144,
|
|
929
942
|
signerSet: [
|
|
930
|
-
"
|
|
931
|
-
"
|
|
943
|
+
"0a0b0000001f0c00000002067369676e65720516f5061b1c62f399ecc0db8cbb21f8d481af079a380677656967687401",
|
|
944
|
+
"0000000000000000000000000000027c0c00000002067369676e65720516a3bbf2a4133fbd5bd1880982957b7a760347",
|
|
932
945
|
"b2dc0677656967687401000000000000000000000000000000090c00000002067369676e657205164f72f6b5a9f5d863",
|
|
933
|
-
"
|
|
934
|
-
"
|
|
935
|
-
"
|
|
936
|
-
"
|
|
937
|
-
"
|
|
938
|
-
"
|
|
939
|
-
"
|
|
940
|
-
"
|
|
941
|
-
"
|
|
942
|
-
"
|
|
943
|
-
"
|
|
944
|
-
"
|
|
945
|
-
"
|
|
946
|
-
"
|
|
947
|
-
"
|
|
948
|
-
"
|
|
949
|
-
"
|
|
950
|
-
"
|
|
951
|
-
"
|
|
952
|
-
"
|
|
953
|
-
"
|
|
954
|
-
"
|
|
955
|
-
"
|
|
956
|
-
"
|
|
957
|
-
"
|
|
958
|
-
"
|
|
959
|
-
"
|
|
960
|
-
"
|
|
961
|
-
"
|
|
962
|
-
"
|
|
963
|
-
"
|
|
964
|
-
"
|
|
965
|
-
"
|
|
946
|
+
"34b2f0fe701db51a7a246f3d0677656967687401000000000000000000000000000000a90c00000002067369676e6572",
|
|
947
|
+
"0516f70ad5f98bb53d1ff1946e62096df4bf71cdb1b20677656967687401000000000000000000000000000000090c00",
|
|
948
|
+
"000002067369676e6572051653ec8b4f51c8286dad6f4ff81ca2a3409d2f382d06776569676874010000000000000000",
|
|
949
|
+
"00000000000000050c00000002067369676e65720516dba631825ff0f15c7c5946b560070f8f5f5747cb067765696768",
|
|
950
|
+
"7401000000000000000000000000000000240c00000002067369676e6572051600d058b39f4495b412ff7eada763eaa6",
|
|
951
|
+
"386eb90a06776569676874010000000000000000000000000000027c0c00000002067369676e65720516321ac33715d6",
|
|
952
|
+
"84d5e8d0cf427cd985576f64c6df06776569676874010000000000000000000000000000000b0c00000002067369676e",
|
|
953
|
+
"6572051671cfb41047d1833d24abc8f08a785182b769fd14067765696768740100000000000000000000000000000004",
|
|
954
|
+
"0c00000002067369676e6572051677a52718ba90fca67984166b2a084edb9b3bd8f10677656967687401000000000000",
|
|
955
|
+
"000000000000000000090c00000002067369676e65720516a54a20479b3b65a461a427b9161b78e64db58ba706776569",
|
|
956
|
+
"67687401000000000000000000000000000001f50c00000002067369676e65720516bc1a58c2a058a9e4150db25562e8",
|
|
957
|
+
"331ef8a4267c0677656967687401000000000000000000000000000000060c00000002067369676e657205161091d2da",
|
|
958
|
+
"4c9ee17a340171c0d23c4304b54ef43f0677656967687401000000000000000000000000000000670c00000002067369",
|
|
959
|
+
"676e6572051654d01a0973ed139736a1a43032a6a18d9295ec7206776569676874010000000000000000000000000000",
|
|
960
|
+
"00b50c00000002067369676e657205160c49f5b6c62f1163ddbb21f92aba86f17f7be488067765696768740100000000",
|
|
961
|
+
"0000000000000000000000670c00000002067369676e65720516ad16c79ac56b58f0797f78c534385367460626800677",
|
|
962
|
+
"656967687401000000000000000000000000000000670c00000002067369676e657205169689e56df00385b6bd81fb6b",
|
|
963
|
+
"7769d5b04088acb80677656967687401000000000000000000000000000000aa0c00000002067369676e65720516a4f7",
|
|
964
|
+
"f81412f4413771a48825cfbe2062a774d4e90677656967687401000000000000000000000000000002fe0c0000000206",
|
|
965
|
+
"7369676e65720516ed73a7398f1c3eb566f3bd7f4bd43f52adf33d8f0677656967687401000000000000000000000000",
|
|
966
|
+
"000000670c00000002067369676e65720516937b3b43e0d94c9ef8f171892bce949709e1d41f06776569676874010000",
|
|
967
|
+
"00000000000000000000000000240c00000002067369676e6572051631542aacfd6e04858181c3067b5eb07399ba89df",
|
|
968
|
+
"0677656967687401000000000000000000000000000000590c00000002067369676e6572051649f034cd1662a222dbc3",
|
|
969
|
+
"8a6acd64008ba7e557660677656967687401000000000000000000000000000000050c00000002067369676e65720516",
|
|
970
|
+
"a20f660dea498c169897a39cb89ce0d98856e5720677656967687401000000000000000000000000000000090c000000",
|
|
971
|
+
"02067369676e6572051652d58897b3678f3a758fa4b9270744fec0605b21067765696768740100000000000000000000",
|
|
972
|
+
"0000000000670c00000002067369676e6572051631733264626dc5fef36eb683a5069d89f63b64cc0677656967687401",
|
|
973
|
+
"000000000000000000000000000000090c00000002067369676e65720516d80db618c2def577604cd8e40a3940b5b639",
|
|
974
|
+
"b1ac06776569676874010000000000000000000000000000000a0c00000002067369676e657205162042a380d946a828",
|
|
975
|
+
"66465af8521a273efe6d2a600677656967687401000000000000000000000000000000470c00000002067369676e6572",
|
|
976
|
+
"051635e1b36efc22bc607db92f9100cb08e3473d60250677656967687401000000000000000000000000000000030c00",
|
|
977
|
+
"000002067369676e657205164843b97054e43dd1a8571fc1e72949c5bedfb7e906776569676874010000000000000000",
|
|
978
|
+
"000000000000004b0c00000002067369676e657205164883355670025c19ecae644ffa20e75ce1d730ad067765696768",
|
|
979
|
+
"7401000000000000000000000000000000090c00000002067369676e65720516089ffd0e0ecd61d9e3c8ee42ef94148a",
|
|
980
|
+
"cf88aa88067765696768740100000000000000000000000000000015"
|
|
966
981
|
].join("")
|
|
967
982
|
},
|
|
968
983
|
bitcoin: {
|
|
@@ -2205,5 +2220,5 @@ export {
|
|
|
2205
2220
|
verifySignerSignatures
|
|
2206
2221
|
};
|
|
2207
2222
|
|
|
2208
|
-
//# debugId=
|
|
2223
|
+
//# debugId=C611E693588430B164756E2164756E21
|
|
2209
2224
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../src/bytes.ts", "../src/header.ts", "../src/marf.ts", "../src/witness.ts", "../src/signers.ts", "../src/burn.ts", "../src/keys.ts", "../src/bitcoin/chain.ts", "../src/bitcoin/header.ts", "../src/bitcoin/pow.ts", "../src/checkpoint.ts", "../src/source.ts", "../src/state.ts", "../src/txs.ts", "../src/links.ts", "../src/verify-block.ts"],
|
|
3
|
+
"sources": ["../src/bytes.ts", "../src/header.ts", "../src/marf.ts", "../src/witness.ts", "../src/signers.ts", "../src/burn.ts", "../src/keys.ts", "../src/bitcoin/chain.ts", "../src/bitcoin/header.ts", "../src/bitcoin/pow.ts", "../src/checkpoint-mainnet.ts", "../src/source.ts", "../src/state.ts", "../src/txs.ts", "../src/links.ts", "../src/verify-block.ts"],
|
|
4
4
|
"sourcesContent": [
|
|
5
5
|
"// Byte helpers shared by every codec here. Browser-safe: no Buffer.\nimport { sha512_256 } from \"@noble/hashes/sha2.js\";\nimport { bytesToHex, concatBytes, hexToBytes } from \"@noble/hashes/utils.js\";\n\nexport type Bytes = Uint8Array;\n\nexport const hex = (b: Bytes): string => bytesToHex(b);\n\n/** Hex to bytes; tolerates a 0x prefix. */\nexport const unhex = (s: string): Bytes =>\n\thexToBytes(s.startsWith(\"0x\") ? s.slice(2) : s);\n\nexport const concat = (parts: Bytes[]): Bytes => concatBytes(...parts);\n\nexport const bytesEqual = (a: Bytes, b: Bytes): boolean => {\n\tif (a.length !== b.length) return false;\n\tfor (let i = 0; i < a.length; i++) if (a[i] !== b[i]) return false;\n\treturn true;\n};\n\n/** sha512/256 over the concatenation of `parts` (stacks-core TrieHasher). */\nexport const hashAll = (parts: Bytes[]): Bytes => {\n\tconst h = sha512_256.create();\n\tfor (const p of parts) h.update(p);\n\treturn h.digest();\n};\n\n/** Big-endian cursor over consensus-serialized bytes. Throws on overrun. */\nexport class Reader {\n\tpos = 0;\n\tconstructor(readonly buf: Bytes) {}\n\n\tbytes(n: number): Bytes {\n\t\tif (n < 0 || this.pos + n > this.buf.length)\n\t\t\tthrow new Error(`unexpected end of input at ${this.pos} reading ${n}`);\n\t\tconst out = this.buf.subarray(this.pos, this.pos + n);\n\t\tthis.pos += n;\n\t\treturn out;\n\t}\n\n\tprivate view(n: number): DataView {\n\t\tconst b = this.bytes(n);\n\t\treturn new DataView(b.buffer, b.byteOffset, n);\n\t}\n\n\tu8 = (): number => this.bytes(1)[0] as number;\n\tu16 = (): number => this.view(2).getUint16(0);\n\tu32 = (): number => this.view(4).getUint32(0);\n\tu64 = (): bigint => this.view(8).getBigUint64(0);\n\ti64 = (): bigint => this.view(8).getBigInt64(0);\n\n\t/** StacksMessageCodec Vec<T>: u32 count prefix, then items. */\n\tvec<T>(item: () => T, max: number): T[] {\n\t\tconst n = this.u32();\n\t\tif (n > max) throw new Error(`vec length ${n} exceeds ${max}`);\n\t\treturn Array.from({ length: n }, item);\n\t}\n\n\tget done(): boolean {\n\t\treturn this.pos === this.buf.length;\n\t}\n}\n",
|
|
6
6
|
"// Stacks block header codecs + identity hashes: Nakamoto (stackslib\n// chainstate/nakamoto/mod.rs NakamotoBlockHeader) and epoch 2.x\n// (chainstate/stacks/block.rs StacksBlockHeader).\nimport { sha512_256 } from \"@noble/hashes/sha2.js\";\nimport { type Bytes, Reader, concat, hashAll } from \"./bytes.ts\";\n\nexport interface NakamotoHeader {\n\t/** Low 7 bits = header version; high bit = shadow block. */\n\tversion: number;\n\tchainLength: bigint;\n\tburnSpent: bigint;\n\tconsensusHash: Bytes;\n\tparentBlockId: Bytes;\n\ttxMerkleRoot: Bytes;\n\tstateIndexRoot: Bytes;\n\ttimestamp: bigint;\n\tminerSignature: Bytes;\n\t/** 65-byte recoverable signatures: recovery id, r, s. */\n\tsignerSignatures: Bytes[];\n\t/** Header bytes minus the signer_signature vec: the signer sighash preimage. */\n\tsignerSighashPreimage: Bytes;\n\t/** Serialized header length; block bytes after this are the transactions. */\n\tbyteLength: number;\n}\n\n/** First header version whose sighash commits to `problematic_txs` (epoch 4.0). */\nconst NAKAMOTO_BLOCK_VERSION_EPOCH_4 = 1;\nconst MAX_SIGNERS = 4000;\nconst MAX_PROBLEMATIC_TXS = 1 << 16;\n\n/**\n * Parse the NakamotoBlockHeader at the start of raw block bytes\n * (`/v3/blocks/<id>`). Handles v0 and v1 (v1 appends `problematic_txs`).\n */\nexport function parseNakamotoHeader(raw: Bytes): NakamotoHeader {\n\tconst r = new Reader(raw);\n\tconst version = r.u8();\n\tconst chainLength = r.u64();\n\tconst burnSpent = r.u64();\n\tconst consensusHash = r.bytes(20);\n\tconst parentBlockId = r.bytes(32);\n\tconst txMerkleRoot = r.bytes(32);\n\tconst stateIndexRoot = r.bytes(32);\n\tconst timestamp = r.u64();\n\tconst minerSignature = r.bytes(65);\n\tconst sigStart = r.pos;\n\tconst signerSignatures = r.vec(() => r.bytes(65), MAX_SIGNERS);\n\tconst sigEnd = r.pos;\n\t// pox_treatment: BitVec<4000> = u16 bit length, then Vec<u8> of exactly ceil(len/8).\n\tconst bits = r.u16();\n\tif (bits === 0 || bits > MAX_SIGNERS)\n\t\tthrow new Error(`bad pox_treatment length ${bits}`);\n\tconst bitBytes = Math.ceil(bits / 8);\n\tif (r.u32() !== bitBytes) throw new Error(\"bad pox_treatment data length\");\n\tr.bytes(bitBytes);\n\tif ((version & 0x7f) >= NAKAMOTO_BLOCK_VERSION_EPOCH_4) {\n\t\t// problematic_txs: Vec<(u32 index, u8 marker)>\n\t\tr.vec(() => r.bytes(5), MAX_PROBLEMATIC_TXS);\n\t}\n\tconst end = r.pos;\n\treturn {\n\t\tversion,\n\t\tchainLength,\n\t\tburnSpent,\n\t\tconsensusHash,\n\t\tparentBlockId,\n\t\ttxMerkleRoot,\n\t\tstateIndexRoot,\n\t\ttimestamp,\n\t\tminerSignature,\n\t\tsignerSignatures,\n\t\tsignerSighashPreimage: concat([\n\t\t\traw.subarray(0, sigStart),\n\t\t\traw.subarray(sigEnd, end),\n\t\t]),\n\t\tbyteLength: end,\n\t};\n}\n\n/**\n * NakamotoBlockHeader::signer_signature_hash: sha512/256 over every header field\n * except the signer signatures. Also the header's block_hash.\n */\nexport const signerSignatureHash = (h: NakamotoHeader): Bytes =>\n\tsha512_256(h.signerSighashPreimage);\n\n/**\n * Epoch 2.x anchored block header. It commits to the parent's block hash, not\n * its index block hash, and carries no consensus hash: the source supplies\n * that, and `blockId` binds it to an id proven elsewhere.\n */\nexport interface Epoch2Header {\n\tversion: number;\n\t/** total_work.burn: burn spent on the fork so far. */\n\tburnSpent: bigint;\n\t/** total_work.work: the Stacks chain length (one per anchored block). */\n\tchainLength: bigint;\n\tvrfProof: Bytes;\n\tparentBlockHash: Bytes;\n\tparentMicroblock: Bytes;\n\tparentMicroblockSequence: number;\n\ttxMerkleRoot: Bytes;\n\t/** Covers the block and the parent microblock stream it confirms. */\n\tstateIndexRoot: Bytes;\n\tmicroblockPubkeyHash: Bytes;\n\t/** sha512/256 of the serialized header. */\n\tblockHash: Bytes;\n\tconsensusHash: Bytes;\n}\n\nexport type StacksHeader = NakamotoHeader | Epoch2Header;\n\n/** StacksBlockHeader is fixed width: no signatures, no variable fields. */\nexport const EPOCH2_HEADER_LENGTH = 247;\n\n/**\n * Parse the epoch 2.x StacksBlockHeader at the start of `raw` (a header from\n * `/v2/headers`, or block bytes from `/v2/blocks/<id>`), with the 20-byte\n * consensus hash of the sortition that elected it.\n */\nexport function parseEpoch2Header(\n\traw: Bytes,\n\tconsensusHash: Bytes,\n): Epoch2Header {\n\tif (consensusHash.length !== 20)\n\t\tthrow new Error(`consensus hash is ${consensusHash.length} bytes, not 20`);\n\tconst r = new Reader(raw);\n\tconst header: Omit<Epoch2Header, \"blockHash\" | \"consensusHash\"> = {\n\t\tversion: r.u8(),\n\t\tburnSpent: r.u64(),\n\t\tchainLength: r.u64(),\n\t\tvrfProof: r.bytes(80),\n\t\tparentBlockHash: r.bytes(32),\n\t\tparentMicroblock: r.bytes(32),\n\t\tparentMicroblockSequence: r.u16(),\n\t\ttxMerkleRoot: r.bytes(32),\n\t\tstateIndexRoot: r.bytes(32),\n\t\tmicroblockPubkeyHash: r.bytes(20),\n\t};\n\treturn {\n\t\t...header,\n\t\tblockHash: sha512_256(raw.subarray(0, EPOCH2_HEADER_LENGTH)),\n\t\tconsensusHash,\n\t};\n}\n\nexport const isEpoch2Header = (h: StacksHeader): h is Epoch2Header =>\n\t\"parentBlockHash\" in h;\n\n/**\n * StacksBlockId (index block hash) = sha512/256(block_hash || consensus_hash).\n * A Nakamoto block hash is its signer signature hash; a 2.x one hashes the\n * whole header.\n */\nexport const blockId = (h: StacksHeader): Bytes =>\n\thashAll([\n\t\tisEpoch2Header(h) ? h.blockHash : signerSignatureHash(h),\n\t\th.consensusHash,\n\t]);\n",
|
|
@@ -12,14 +12,14 @@
|
|
|
12
12
|
"/**\n * Minimal Bitcoin header-chain light client (SPV), mainnet rules only.\n *\n * Trust model: the checkpoint header is trusted as-is. Every header appended\n * after it must link to the current tip and satisfy proof-of-work, the\n * difficulty rule (unchanged bits mid-period, exact retarget every 2016\n * blocks), median-time-past, and the BIP34/66/65 minimum version.\n *\n * Append-only: there is no reorg handling. A header that does not extend the\n * tip (a fork, or a replay of a known header) is rejected. Callers that need\n * to follow reorgs should rebuild from a checkpoint safely below the fork.\n *\n * Not checked (needs wall-clock or block bodies): the \"time too far in the\n * future\" rule, and anything about transactions/merkle roots.\n */\n\nimport { bytesToHex, hexToBytes } from \"@noble/hashes/utils.js\";\nimport {\n\ttype BlockHeader,\n\tHEADER_SIZE,\n\theaderHash,\n\tparseHeader,\n\treverseBytes,\n} from \"./header.ts\";\nimport {\n\tRETARGET_INTERVAL,\n\tbitsToTarget,\n\tcheckProofOfWork,\n\theaderWork,\n\tnextRetargetBits,\n} from \"./pow.ts\";\n\n/** Number of previous blocks whose median timestamp a new block must exceed. */\nexport const MEDIAN_TIME_SPAN = 11;\n/** Mainnet height from which version ≥ 4 is required (BIP65; implies BIP34/66). */\nexport const BIP65_HEIGHT = 388_381;\n\nexport type HeaderRule =\n\t| \"checkpoint\"\n\t| \"format\"\n\t| \"prev-link\"\n\t| \"bits\"\n\t| \"retarget\"\n\t| \"median-time-past\"\n\t| \"version\"\n\t| \"proof-of-work\";\n\nexport class HeaderValidationError extends Error {\n\toverride readonly name = \"HeaderValidationError\";\n\tconstructor(\n\t\treadonly height: number,\n\t\treadonly rule: HeaderRule,\n\t\tdetail: string,\n\t) {\n\t\tsuper(`header at height ${height} failed ${rule}: ${detail}`);\n\t}\n}\n\nexport interface Checkpoint {\n\theight: number;\n\t/** Raw 80-byte header, bytes or hex. Trusted without validation. */\n\theader: Uint8Array | string;\n\t/**\n\t * Timestamp of the first block of the checkpoint's difficulty period\n\t * (height − height % 2016). Required when the checkpoint is not itself a\n\t * period start; needed to verify the next retarget.\n\t */\n\tperiodStartTime?: number;\n}\n\nexport interface ChainEntry {\n\theight: number;\n\t/** Display-order hex. */\n\thash: string;\n\theader: BlockHeader;\n\traw: Uint8Array;\n}\n\nconst hex8 = (n: number) => `0x${n.toString(16).padStart(8, \"0\")}`;\n\nexport class HeaderChain {\n\tprivate readonly entries: ChainEntry[] = [];\n\tprivate readonly heights = new Map<string, number>();\n\tprivate work = 0n;\n\n\tprivate constructor(\n\t\tprivate readonly base: number,\n\t\tprivate readonly periodStartTime: number,\n\t) {}\n\n\tstatic fromCheckpoint(checkpoint: Checkpoint): HeaderChain {\n\t\tconst { height } = checkpoint;\n\t\tif (!Number.isSafeInteger(height) || height < 0) {\n\t\t\tthrow new HeaderValidationError(\n\t\t\t\theight,\n\t\t\t\t\"checkpoint\",\n\t\t\t\t\"height must be a non-negative integer\",\n\t\t\t);\n\t\t}\n\t\tconst raw = toRaw(checkpoint.header, height);\n\t\tconst header = parseHeader(raw);\n\t\ttry {\n\t\t\tbitsToTarget(header.bits);\n\t\t} catch (err) {\n\t\t\tthrow new HeaderValidationError(\n\t\t\t\theight,\n\t\t\t\t\"checkpoint\",\n\t\t\t\t(err as Error).message,\n\t\t\t);\n\t\t}\n\t\tconst atPeriodStart = height % RETARGET_INTERVAL === 0;\n\t\tlet periodStartTime = checkpoint.periodStartTime;\n\t\tif (atPeriodStart) {\n\t\t\tif (periodStartTime !== undefined && periodStartTime !== header.time) {\n\t\t\t\tthrow new HeaderValidationError(\n\t\t\t\t\theight,\n\t\t\t\t\t\"checkpoint\",\n\t\t\t\t\t`periodStartTime ${periodStartTime} disagrees with the period-start checkpoint's own time ${header.time}`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tperiodStartTime = header.time;\n\t\t} else if (periodStartTime === undefined) {\n\t\t\tthrow new HeaderValidationError(\n\t\t\t\theight,\n\t\t\t\t\"checkpoint\",\n\t\t\t\t`periodStartTime is required for a checkpoint inside a difficulty period (period starts at ${height - (height % RETARGET_INTERVAL)})`,\n\t\t\t);\n\t\t}\n\t\tconst chain = new HeaderChain(height, periodStartTime);\n\t\tchain.push(raw, header);\n\t\treturn chain;\n\t}\n\n\tget tip(): ChainEntry {\n\t\treturn this.entries[this.entries.length - 1] as ChainEntry;\n\t}\n\n\t/** Work summed from the checkpoint (inclusive) to the tip; not chainwork since genesis. */\n\tget totalWork(): bigint {\n\t\treturn this.work;\n\t}\n\n\tget checkpointHeight(): number {\n\t\treturn this.base;\n\t}\n\n\t/** Height of a header in this chain by display-order hash, or undefined. */\n\theightOf(hashHex: string): number | undefined {\n\t\treturn this.heights.get(hashHex.toLowerCase());\n\t}\n\n\theaderAt(height: number): ChainEntry | undefined {\n\t\treturn this.entries[height - this.base];\n\t}\n\n\t/**\n\t * Validates and appends headers in order. All-or-nothing: if any header\n\t * fails, the chain is left exactly as it was and the error is thrown.\n\t */\n\tappend(headers: Iterable<Uint8Array | string>): void {\n\t\tconst before = this.entries.length;\n\t\tconst workBefore = this.work;\n\t\ttry {\n\t\t\tfor (const item of headers) {\n\t\t\t\tconst height = this.tip.height + 1;\n\t\t\t\tconst raw = toRaw(item, height);\n\t\t\t\tthis.validate(height, raw, parseHeader(raw));\n\t\t\t}\n\t\t} catch (err) {\n\t\t\tfor (const removed of this.entries.splice(before)) {\n\t\t\t\tthis.heights.delete(removed.hash);\n\t\t\t}\n\t\t\tthis.work = workBefore;\n\t\t\tthrow err;\n\t\t}\n\t}\n\n\tprivate validate(height: number, raw: Uint8Array, header: BlockHeader): void {\n\t\tconst prev = this.tip;\n\n\t\tif (header.prevHash !== prev.hash) {\n\t\t\tconst known = this.heights.get(header.prevHash);\n\t\t\tthrow new HeaderValidationError(\n\t\t\t\theight,\n\t\t\t\t\"prev-link\",\n\t\t\t\tknown === undefined\n\t\t\t\t\t? `prevHash ${header.prevHash} does not match tip ${prev.hash} at ${prev.height}`\n\t\t\t\t\t: `prevHash points at height ${known}, not the tip at ${prev.height} (forks/reorgs are not supported)`,\n\t\t\t);\n\t\t}\n\n\t\tconst expectedBits = this.expectedBits(height, prev);\n\t\tif (header.bits !== expectedBits) {\n\t\t\tconst atRetarget = height % RETARGET_INTERVAL === 0;\n\t\t\tthrow new HeaderValidationError(\n\t\t\t\theight,\n\t\t\t\tatRetarget ? \"retarget\" : \"bits\",\n\t\t\t\tatRetarget\n\t\t\t\t\t? `bits ${hex8(header.bits)} != retargeted ${hex8(expectedBits)}`\n\t\t\t\t\t: `bits ${hex8(header.bits)} != previous ${hex8(expectedBits)} (only height % ${RETARGET_INTERVAL} == 0 may change difficulty)`,\n\t\t\t);\n\t\t}\n\n\t\tconst mtp = this.medianTimePast();\n\t\tif (header.time <= mtp) {\n\t\t\tthrow new HeaderValidationError(\n\t\t\t\theight,\n\t\t\t\t\"median-time-past\",\n\t\t\t\t`time ${header.time} <= median of previous ${Math.min(MEDIAN_TIME_SPAN, this.entries.length)} blocks (${mtp})`,\n\t\t\t);\n\t\t}\n\n\t\tif (height >= BIP65_HEIGHT && header.version < 4) {\n\t\t\tthrow new HeaderValidationError(\n\t\t\t\theight,\n\t\t\t\t\"version\",\n\t\t\t\t`version ${header.version} < 4 (required from height ${BIP65_HEIGHT})`,\n\t\t\t);\n\t\t}\n\n\t\tconst hash = headerHash(raw);\n\t\tif (!checkProofOfWork(hash, header.bits)) {\n\t\t\tthrow new HeaderValidationError(\n\t\t\t\theight,\n\t\t\t\t\"proof-of-work\",\n\t\t\t\t`hash ${bytesToHex(reverseBytes(hash))} exceeds target for bits ${hex8(header.bits)}`,\n\t\t\t);\n\t\t}\n\n\t\tthis.push(raw, header, hash);\n\t}\n\n\tprivate expectedBits(height: number, prev: ChainEntry): number {\n\t\tif (height % RETARGET_INTERVAL !== 0) return prev.header.bits;\n\t\tconst firstHeight = height - RETARGET_INTERVAL;\n\t\tconst firstTime =\n\t\t\tfirstHeight < this.base\n\t\t\t\t? this.periodStartTime\n\t\t\t\t: (this.headerAt(firstHeight) as ChainEntry).header.time;\n\t\treturn nextRetargetBits(prev.header.bits, firstTime, prev.header.time);\n\t}\n\n\t/**\n\t * Median of the last 11 timestamps. Right after the checkpoint fewer are\n\t * known; like Core near genesis, the median of what is available is used.\n\t */\n\tprivate medianTimePast(): number {\n\t\tconst times = this.entries\n\t\t\t.slice(-MEDIAN_TIME_SPAN)\n\t\t\t.map((e) => e.header.time)\n\t\t\t.sort((a, b) => a - b);\n\t\treturn times[Math.floor(times.length / 2)] as number;\n\t}\n\n\tprivate push(raw: Uint8Array, header: BlockHeader, hash = headerHash(raw)) {\n\t\tconst height = this.base + this.entries.length;\n\t\tconst hashHex = bytesToHex(reverseBytes(hash));\n\t\tthis.entries.push({ height, hash: hashHex, header, raw });\n\t\tthis.heights.set(hashHex, height);\n\t\tthis.work += headerWork(header.bits);\n\t}\n}\n\nfunction toRaw(item: Uint8Array | string, height: number): Uint8Array {\n\tlet raw: Uint8Array;\n\ttry {\n\t\t// Copy so later mutation of the caller's buffer cannot alter the chain.\n\t\traw = typeof item === \"string\" ? hexToBytes(item) : Uint8Array.from(item);\n\t} catch {\n\t\tthrow new HeaderValidationError(\n\t\t\theight,\n\t\t\t\"format\",\n\t\t\t\"header is not valid hex\",\n\t\t);\n\t}\n\tif (raw.length !== HEADER_SIZE) {\n\t\tthrow new HeaderValidationError(\n\t\t\theight,\n\t\t\t\"format\",\n\t\t\t`header must be ${HEADER_SIZE} bytes, got ${raw.length}`,\n\t\t);\n\t}\n\treturn raw;\n}\n",
|
|
13
13
|
"/**\n * Bitcoin block header wire format: 80 bytes, all integers little-endian.\n *\n * version (i32) | prevHash (32) | merkleRoot (32) | time (u32) | bits (u32) | nonce (u32)\n *\n * Hashes are carried in display order (byte-reversed hex, as bitcoind and\n * explorers print them). `headerHash` returns the natural (internal) byte\n * order, which is what proof-of-work compares as a little-endian integer.\n */\n\nimport { sha256 } from \"@noble/hashes/sha2.js\";\nimport { bytesToHex, hexToBytes } from \"@noble/hashes/utils.js\";\n\nexport const HEADER_SIZE = 80;\n\nexport interface BlockHeader {\n\t/** Signed 32-bit version field. */\n\tversion: number;\n\t/** Display-order hex of the previous block hash. */\n\tprevHash: string;\n\t/** Display-order hex of the merkle root. */\n\tmerkleRoot: string;\n\t/** Unix timestamp, seconds. */\n\ttime: number;\n\t/** Compact-encoded target. */\n\tbits: number;\n\tnonce: number;\n}\n\nfunction toBytes(raw: Uint8Array | string): Uint8Array {\n\treturn typeof raw === \"string\" ? hexToBytes(raw) : raw;\n}\n\n/** Reverses byte order: natural <-> display. Returns a copy. */\nexport function reverseBytes(bytes: Uint8Array): Uint8Array {\n\treturn Uint8Array.from(bytes).reverse();\n}\n\nexport function parseHeader(raw: Uint8Array | string): BlockHeader {\n\tconst bytes = toBytes(raw);\n\tif (bytes.length !== HEADER_SIZE) {\n\t\tthrow new RangeError(\n\t\t\t`block header must be ${HEADER_SIZE} bytes, got ${bytes.length}`,\n\t\t);\n\t}\n\tconst view = new DataView(bytes.buffer, bytes.byteOffset, HEADER_SIZE);\n\treturn {\n\t\tversion: view.getInt32(0, true),\n\t\tprevHash: bytesToHex(reverseBytes(bytes.subarray(4, 36))),\n\t\tmerkleRoot: bytesToHex(reverseBytes(bytes.subarray(36, 68))),\n\t\ttime: view.getUint32(68, true),\n\t\tbits: view.getUint32(72, true),\n\t\tnonce: view.getUint32(76, true),\n\t};\n}\n\nexport function serializeHeader(header: BlockHeader): Uint8Array {\n\tconst bytes = new Uint8Array(HEADER_SIZE);\n\tconst view = new DataView(bytes.buffer);\n\tview.setInt32(0, header.version, true);\n\tbytes.set(reverseBytes(hexToBytes(header.prevHash)), 4);\n\tbytes.set(reverseBytes(hexToBytes(header.merkleRoot)), 36);\n\tview.setUint32(68, header.time, true);\n\tview.setUint32(72, header.bits, true);\n\tview.setUint32(76, header.nonce, true);\n\treturn bytes;\n}\n\n/** Double-SHA256 of the raw header, natural (internal) byte order. */\nexport function headerHash(raw: Uint8Array | string): Uint8Array {\n\tconst bytes = toBytes(raw);\n\tif (bytes.length !== HEADER_SIZE) {\n\t\tthrow new RangeError(\n\t\t\t`block header must be ${HEADER_SIZE} bytes, got ${bytes.length}`,\n\t\t);\n\t}\n\treturn sha256(sha256(bytes));\n}\n\n/** Block hash as display-order hex (what bitcoind prints). */\nexport function headerHashHex(raw: Uint8Array | string): string {\n\treturn bytesToHex(reverseBytes(headerHash(raw)));\n}\n",
|
|
14
14
|
"/**\n * Proof-of-work arithmetic, mirroring Bitcoin Core's arith_uint256\n * SetCompact/GetCompact, CheckProofOfWork, GetBlockProof and\n * CalculateNextWorkRequired (mainnet parameters only).\n */\n\n/** Mainnet powLimit, compact form. */\nexport const POW_LIMIT_BITS = 0x1d00ffff;\n/** Mainnet powLimit: 0x00000000ffff0000...0000. */\nexport const POW_LIMIT = 0xffffn << 208n;\n/** Blocks per difficulty period. */\nexport const RETARGET_INTERVAL = 2016;\n/** Two weeks, seconds. */\nexport const TARGET_TIMESPAN = 14 * 24 * 60 * 60;\n\nconst TWO_256 = 1n << 256n;\n\nexport interface DecodedCompact {\n\ttarget: bigint;\n\tnegative: boolean;\n\toverflow: boolean;\n}\n\n/** Core's arith_uint256::SetCompact, including its negative/overflow flags. */\nexport function decodeCompact(bits: number): DecodedCompact {\n\tconst size = bits >>> 24;\n\tlet word = bits & 0x007fffff;\n\tlet target: bigint;\n\tif (size <= 3) {\n\t\tword >>>= 8 * (3 - size);\n\t\ttarget = BigInt(word);\n\t} else {\n\t\ttarget = BigInt(word) << BigInt(8 * (size - 3));\n\t}\n\tconst negative = word !== 0 && (bits & 0x00800000) !== 0;\n\tconst overflow =\n\t\tword !== 0 &&\n\t\t(size > 34 || (word > 0xff && size > 33) || (word > 0xffff && size > 32));\n\treturn { target: target & (TWO_256 - 1n), negative, overflow };\n}\n\n/** Decodes compact bits to a target, throwing on negative/overflow/zero. */\nexport function bitsToTarget(bits: number): bigint {\n\tconst { target, negative, overflow } = decodeCompact(bits);\n\tif (negative || overflow || target === 0n) {\n\t\tthrow new RangeError(\n\t\t\t`bits 0x${bits.toString(16).padStart(8, \"0\")} do not encode a valid target`,\n\t\t);\n\t}\n\treturn target;\n}\n\n/** Core's arith_uint256::GetCompact for a non-negative target. */\nexport function targetToBits(target: bigint): number {\n\tif (target < 0n) throw new RangeError(\"target must be non-negative\");\n\tlet size = target === 0n ? 0 : Math.ceil(target.toString(2).length / 8);\n\tlet compact =\n\t\tsize <= 3\n\t\t\t? Number(target << BigInt(8 * (3 - size)))\n\t\t\t: Number(target >> BigInt(8 * (size - 3)));\n\tif (compact & 0x00800000) {\n\t\tcompact >>>= 8;\n\t\tsize += 1;\n\t}\n\treturn ((size << 24) | compact) >>> 0;\n}\n\n/** Interprets a natural-order hash as the little-endian 256-bit integer PoW compares. */\nexport function hashToBigInt(hash: Uint8Array): bigint {\n\tlet n = 0n;\n\tfor (let i = hash.length - 1; i >= 0; i--) {\n\t\tn = (n << 8n) | BigInt(hash[i] as number);\n\t}\n\treturn n;\n}\n\n/** Core's CheckProofOfWork: valid target ≤ powLimit and hash ≤ target. */\nexport function checkProofOfWork(hash: Uint8Array, bits: number): boolean {\n\tconst { target, negative, overflow } = decodeCompact(bits);\n\tif (negative || overflow || target === 0n || target > POW_LIMIT) {\n\t\treturn false;\n\t}\n\treturn hashToBigInt(hash) <= target;\n}\n\n/** Expected number of hashes for a block at `bits`: 2^256 / (target + 1). */\nexport function headerWork(bits: number): bigint {\n\tconst target = bitsToTarget(bits);\n\t// Core's GetBlockProof: (~target / (target + 1)) + 1, same value without overflow.\n\treturn (TWO_256 - 1n - target) / (target + 1n) + 1n;\n}\n\n/**\n * Core's CalculateNextWorkRequired. `firstTime` is the timestamp of the first\n * block of the closing period and `lastTime` of its last block, so the\n * measured span covers 2015 intervals, not 2016 (the well-known off-by-one\n * that consensus preserves).\n */\nexport function nextRetargetBits(\n\tlastBits: number,\n\tfirstTime: number,\n\tlastTime: number,\n): number {\n\tlet actual = lastTime - firstTime;\n\tif (actual < TARGET_TIMESPAN / 4) actual = TARGET_TIMESPAN / 4;\n\tif (actual > TARGET_TIMESPAN * 4) actual = TARGET_TIMESPAN * 4;\n\tlet target =\n\t\t(bitsToTarget(lastBits) * BigInt(actual)) / BigInt(TARGET_TIMESPAN);\n\tif (target > POW_LIMIT) target = POW_LIMIT;\n\treturn targetToBits(target);\n}\n",
|
|
15
|
-
"//
|
|
15
|
+
"// Generated by scripts/rotate-checkpoint.ts. Do not edit by hand.\n// Stacks block 9,055,251, cycle 144, Bitcoin height 967,680.\nimport type { VerifyCheckpoint } from \"./checkpoint.ts\";\n\n/**\n * Mainnet: Stacks block 9,055,251 (`10cb4e95…c5be`) holding the cycle 144\n * signer set (31 signers, weight 4000), and Bitcoin block 967,680 (a\n * retarget-period start at or below cycle 144's first burn block 968,450). Later blocks verify forward\n * (burn height 967,680 or later); earlier ones by hash chain from 9,055,251.\n */\nexport const MAINNET_CHECKPOINT: VerifyCheckpoint = {\n\tstacks: {\n\t\theader: [\n\t\t\t\"0100000000008a2c1300000066469e6fe824e36e45dbfb6f63201cc4847d12cae9c128c66d8e9a793304ef768e4728c6\",\n\t\t\t\"7634484bd3dc868a787699dd8952c6b37cdeaefed8451304f9bf56fc8e9b5e8d80c716d8bece86dbe7e855348e71dc23\",\n\t\t\t\"a3e7327ecf9ff95aa970430671f50a2ff6fd8c4ef444c4650ce456c8a10b5c8e084670e692000000006ab58f03003c14\",\n\t\t\t\"9857675a089d271510492aa1e1decfd5c4a32e6f27f4aaaf299822bd0f83599991bc1ee5027e08f2181bcb1285d6f04b\",\n\t\t\t\"a66cd3e4122f1565d266bcae019c0000001701e427ee3446da226d964aba82349d59691a8a9d087cd7519fd53b3ca555\",\n\t\t\t\"e45f0746cd3e0c7cd196e2f8acf668c88aadb0e2bb3c185565d34f6475e13ac003929100b0bc28034cee5679858614f4\",\n\t\t\t\"9e554f55cec31a7cd4cb3f56d6be284df984b3ea2b5e15744325c6d6de0648e3c14f8c4a0f15eb8c1d87693013b13390\",\n\t\t\t\"36f8973900e0853aac5dd6dff18c20d8cf2196a22ed65bced9d5e75b932a0b05778763725a4490f514b85d5274099b3b\",\n\t\t\t\"8a4cb02dd105bd85ea87276bad8a419d1e7ca4fe3601264cc97fc706ad2ae443baf9ea807e2c3ab2c0c561b847689ad9\",\n\t\t\t\"57a2f7ea41c7749d9847dec5b6458693955a8367ee44bf16233db5bab24704470bfa820ebff200a51fd156df644335ba\",\n\t\t\t\"e6d4e63c229ff0556aa75f98360fa0fa72439426e09d2964ffe74ebb628a04ad2493d1bf2c5548416afc0afafcbe57d1\",\n\t\t\t\"d0c2e5d0f54b3a01222775d8bf237bde985b1a5199e3d2bc248fab425d338fb9102bbd860687b0e516c9a7891628ad3b\",\n\t\t\t\"31e11dd447594fc9a3381dd62efe0fdf183a4d6e6d630ae6018c2a16339c484a26b239fbc04572bccc22435e90607a4e\",\n\t\t\t\"01980614ebe4c6b5337ed06fb359e8f2db7add5e6da7f45e806a30a9d2abb8fc4841611c2bf13c9eb901463e39a7b64c\",\n\t\t\t\"26d78deffd691be358fcfa03f28179da0f300aa4b045a59072c523e824372b172aec0a9ea71c568ab769b5672fa01ab1\",\n\t\t\t\"3c36799ba4e85749722b012ab3b504a3ece80bf2186db6fe2407847fb6eef44206de958788b552c1226c034ccf34681f\",\n\t\t\t\"d02f9f2f890b09a94b4002326ac836620a4daffc6a4149bc58a52600977d6a2b9aaf7adf6f5108dd2c9e05f169991907\",\n\t\t\t\"0514fae6c4e0aeab2656b9a47581de7232198cef38d07d7fe1cd0238d88cac758280b2c633d0bab556ffe311010f0162\",\n\t\t\t\"14ac30572c349981bc006617b43315b0d52efb06ea00c012f1269311340c8bd32615d24201279b3cd77d97adbb80b3e5\",\n\t\t\t\"1a0ec357fc1b0865c826f292f4013df0c85f71124088fed20acc3160df54b6d9e0a454a5c7689239125acd4d613e6a2c\",\n\t\t\t\"ed667e92d34d0548983d3c5d53468e00ec15bafc27b8946edae6aed04157008980f7c33cad51d44ff60d61a941cc62b3\",\n\t\t\t\"e73a47e0cda51e564b01433866545640736823d42ae8b74ca35764812ebcf943a47b150f4e7f794c0216611051dd7000\",\n\t\t\t\"c77ba1ce6a3a5d205b701c9d55fe5ac8730ec827deecfa8ad7800c331a839c4c705bc7708728128849ed5945b6020a38\",\n\t\t\t\"7d1dbc08f8d4fb8449a722ee2e9f02b50023724701dc7a7c69b3025abfea79e67d7d7a5156c77072c9d58f4bf1cae2f5\",\n\t\t\t\"f62f29527eb27f725f03d05986be28102ea27ee22052ef046ff1c6a4e09dc9a2c501f5231b9ff20a199c872f137b6ee5\",\n\t\t\t\"cfd9ceb1df5973cd3ffab5a66fb6c89e58de550360f9933f6c5087d833e5b59b928405a676013e7377552bc6353fc852\",\n\t\t\t\"94fd0083c761efba23bd276e82648135a4efcf73298bb13ef6e1cfbff37d3d99c757d46be3bffb5ec0fd46ffa849a1e5\",\n\t\t\t\"813fcdb5d38ee95c5db3283bde0179c7a3b46e016b2418238b35dfeb9b84142f391702f71be43970e725576030102a7d\",\n\t\t\t\"45acd6d834547636d6bc2a0bc559b9408edb460d5f4384ecefcdfad64e89923c30d83ed400a9009444429ec9a22789f2\",\n\t\t\t\"31629ec51067c76a3d3802d0a4a625be9679c36ef12e2a888458bcdac4fe9ada9cfdea650a77a2b46fb760c144485f34\",\n\t\t\t\"ac3ae7d5d70041eb4b36d08f7997747fb991d00c086644cc6ec1bf3f9bb53336e78358961d844d107bdb6e59977f9a9c\",\n\t\t\t\"0d8f996efb36eed0d7fb8ce26fadc63cb9b79cc7795201a9ebee00b3818295c807c90ea8e6f9d0b4beee23003365ada5\",\n\t\t\t\"4ca964390bc1c62bfe1a7e78084c384bef7ca2ed45241e818fefe1911d711fad5e13eff8ddf31000f08d21fc2a3b8c67\",\n\t\t\t\"193fec9a326b8a49c0a9696fc66523014b9db5ed312a824a5bd87e29fbe3328d5f3ed05c3f38c7f4a6e4e53410830849\",\n\t\t\t\"6a7458a149ff975101a957fd6ff8ce3d70bf0a9f5652aa6a87e27f3a8130d3f70558417cc3744d9b9b5879872467e520\",\n\t\t\t\"f641c7253dc159cd1a0e2547d1c9a6ff3c45ce2d233e626fea0001000000010100000000\",\n\t\t].join(\"\"),\n\t\tcycle: 144,\n\t\tsignerSet: [\n\t\t\t\"0a0b0000001f0c00000002067369676e65720516f5061b1c62f399ecc0db8cbb21f8d481af079a380677656967687401\",\n\t\t\t\"0000000000000000000000000000027c0c00000002067369676e65720516a3bbf2a4133fbd5bd1880982957b7a760347\",\n\t\t\t\"b2dc0677656967687401000000000000000000000000000000090c00000002067369676e657205164f72f6b5a9f5d863\",\n\t\t\t\"34b2f0fe701db51a7a246f3d0677656967687401000000000000000000000000000000a90c00000002067369676e6572\",\n\t\t\t\"0516f70ad5f98bb53d1ff1946e62096df4bf71cdb1b20677656967687401000000000000000000000000000000090c00\",\n\t\t\t\"000002067369676e6572051653ec8b4f51c8286dad6f4ff81ca2a3409d2f382d06776569676874010000000000000000\",\n\t\t\t\"00000000000000050c00000002067369676e65720516dba631825ff0f15c7c5946b560070f8f5f5747cb067765696768\",\n\t\t\t\"7401000000000000000000000000000000240c00000002067369676e6572051600d058b39f4495b412ff7eada763eaa6\",\n\t\t\t\"386eb90a06776569676874010000000000000000000000000000027c0c00000002067369676e65720516321ac33715d6\",\n\t\t\t\"84d5e8d0cf427cd985576f64c6df06776569676874010000000000000000000000000000000b0c00000002067369676e\",\n\t\t\t\"6572051671cfb41047d1833d24abc8f08a785182b769fd14067765696768740100000000000000000000000000000004\",\n\t\t\t\"0c00000002067369676e6572051677a52718ba90fca67984166b2a084edb9b3bd8f10677656967687401000000000000\",\n\t\t\t\"000000000000000000090c00000002067369676e65720516a54a20479b3b65a461a427b9161b78e64db58ba706776569\",\n\t\t\t\"67687401000000000000000000000000000001f50c00000002067369676e65720516bc1a58c2a058a9e4150db25562e8\",\n\t\t\t\"331ef8a4267c0677656967687401000000000000000000000000000000060c00000002067369676e657205161091d2da\",\n\t\t\t\"4c9ee17a340171c0d23c4304b54ef43f0677656967687401000000000000000000000000000000670c00000002067369\",\n\t\t\t\"676e6572051654d01a0973ed139736a1a43032a6a18d9295ec7206776569676874010000000000000000000000000000\",\n\t\t\t\"00b50c00000002067369676e657205160c49f5b6c62f1163ddbb21f92aba86f17f7be488067765696768740100000000\",\n\t\t\t\"0000000000000000000000670c00000002067369676e65720516ad16c79ac56b58f0797f78c534385367460626800677\",\n\t\t\t\"656967687401000000000000000000000000000000670c00000002067369676e657205169689e56df00385b6bd81fb6b\",\n\t\t\t\"7769d5b04088acb80677656967687401000000000000000000000000000000aa0c00000002067369676e65720516a4f7\",\n\t\t\t\"f81412f4413771a48825cfbe2062a774d4e90677656967687401000000000000000000000000000002fe0c0000000206\",\n\t\t\t\"7369676e65720516ed73a7398f1c3eb566f3bd7f4bd43f52adf33d8f0677656967687401000000000000000000000000\",\n\t\t\t\"000000670c00000002067369676e65720516937b3b43e0d94c9ef8f171892bce949709e1d41f06776569676874010000\",\n\t\t\t\"00000000000000000000000000240c00000002067369676e6572051631542aacfd6e04858181c3067b5eb07399ba89df\",\n\t\t\t\"0677656967687401000000000000000000000000000000590c00000002067369676e6572051649f034cd1662a222dbc3\",\n\t\t\t\"8a6acd64008ba7e557660677656967687401000000000000000000000000000000050c00000002067369676e65720516\",\n\t\t\t\"a20f660dea498c169897a39cb89ce0d98856e5720677656967687401000000000000000000000000000000090c000000\",\n\t\t\t\"02067369676e6572051652d58897b3678f3a758fa4b9270744fec0605b21067765696768740100000000000000000000\",\n\t\t\t\"0000000000670c00000002067369676e6572051631733264626dc5fef36eb683a5069d89f63b64cc0677656967687401\",\n\t\t\t\"000000000000000000000000000000090c00000002067369676e65720516d80db618c2def577604cd8e40a3940b5b639\",\n\t\t\t\"b1ac06776569676874010000000000000000000000000000000a0c00000002067369676e657205162042a380d946a828\",\n\t\t\t\"66465af8521a273efe6d2a600677656967687401000000000000000000000000000000470c00000002067369676e6572\",\n\t\t\t\"051635e1b36efc22bc607db92f9100cb08e3473d60250677656967687401000000000000000000000000000000030c00\",\n\t\t\t\"000002067369676e657205164843b97054e43dd1a8571fc1e72949c5bedfb7e906776569676874010000000000000000\",\n\t\t\t\"000000000000004b0c00000002067369676e657205164883355670025c19ecae644ffa20e75ce1d730ad067765696768\",\n\t\t\t\"7401000000000000000000000000000000090c00000002067369676e65720516089ffd0e0ecd61d9e3c8ee42ef94148a\",\n\t\t\t\"cf88aa88067765696768740100000000000000000000000000000015\",\n\t\t].join(\"\"),\n\t},\n\tbitcoin: {\n\t\theight: 967680,\n\t\theader:\n\t\t\t\"00000030410ccb1cba623e26f2e02f3fcb0e7f06f66998b68cb5010000000000000000003d16ae2558e8ec7b8dd369ee29bb2733fbd39bcc1058c681970a36a7f1a2bdea1135ae6ac51e0217480c3581\",\n\t},\n};\n",
|
|
16
16
|
"// Proof data sources. Everything a source returns is untrusted: verifyBlock\n// checks every byte against the checkpoint, so a lying source can make a\n// check fail but never pass.\nimport { type Bytes, unhex } from \"./bytes.ts\";\n\n/** Sortition preimage behind a consensus hash. */\nexport interface BurnPreimage {\n\tpreimage: Bytes;\n\t/** The source's claimed burn height: a hint for how far to sync Bitcoin headers, never trusted. */\n\tburnHeight: number;\n}\n\n/** Node RPC `/v2/clarity/marf/<path>?proof=1` answer. */\nexport interface MarfProofResponse {\n\t/** Value string as Clarity stored it (hex for Clarity values), 0x prefix tolerated. */\n\tdata: string;\n\t/** Consensus-serialized TrieMerkleProof. */\n\tproof: Bytes;\n}\n\n/** One storage-layer MARF write (`state_writes` row), in block write order. */\nexport interface StateWrite {\n\t/** Null for block-level writes outside any transaction. */\n\ttx_index: number | null;\n\tordinal: number;\n\t/** Full MARF key, e.g. `vm::<contract>::0::<map>::<key hex>`. */\n\tkey: string;\n\t/** Hex of the stored value string's UTF-8 bytes. */\n\tvalue_hex: string;\n}\n\n/** A `vm_events` write row, as the Index API serves it. */\nexport interface VmEventRow {\n\tevent_type: \"var_set\" | \"map_set\" | \"map_insert\" | \"map_delete\";\n\t/** The row's ordinal within the block. */\n\tevent_index: number;\n\ttx_id?: string;\n\ttx_index?: number;\n\tcontract_id: string;\n\tvar_name?: string | null;\n\tmap?: string | null;\n\traw_key?: string | null;\n\traw_value?: string | null;\n}\n\n/** An epoch 2.x header and the consensus hash its index block hash commits to. */\nexport interface Epoch2HeaderResponse {\n\t/** Consensus-serialized StacksBlockHeader. */\n\theader: Bytes;\n\tconsensusHash: Bytes;\n}\n\nexport interface ProofSource {\n\t/** Raw Nakamoto block bytes (header first), by block id or height. */\n\tgetBlock(ref: string | number): Promise<Bytes>;\n\t/**\n\t * Epoch 2.x block header by index block hash: blocks below the checkpoint\n\t * from before Nakamoto. Without it only Nakamoto blocks verify.\n\t */\n\tgetEpoch2Header?(blockId: string): Promise<Epoch2HeaderResponse>;\n\t/**\n\t * MARF inclusion proof for a 32-byte path at `tipId`; null when the key is\n\t * absent. Blocks below the checkpoint also ask for\n\t * `__MARF_BLOCK_HEIGHT_TO_HASH::<height>`, whose value is no stored string:\n\t * only `proof` is read for it.\n\t */\n\tgetMarfProof(\n\t\tpathHex: string,\n\t\ttipId: string,\n\t): Promise<MarfProofResponse | null>;\n\t/** State witness (wire v3) for a block. */\n\tgetWitness(blockId: string): Promise<Bytes>;\n\tgetBurnPreimage(consensusHash: string): Promise<BurnPreimage>;\n\t/** Raw 80-byte Bitcoin headers (hex or bytes) from height `from`. */\n\tgetBitcoinHeaders(from: number, count: number): Promise<(string | Bytes)[]>;\n\t/**\n\t * Every MARF write of the block, in ordinal order; null (or empty) when\n\t * the source has none for it. Names the block's diff.\n\t */\n\tgetStateWrites?(height: number): Promise<StateWrite[] | null>;\n\t/** Indexed vm_events write rows of the block, checked against its proven diff. */\n\tgetVmEvents?(height: number): Promise<VmEventRow[]>;\n}\n\nexport class SourceError extends Error {\n\toverride readonly name = \"SourceError\";\n\tconstructor(\n\t\treadonly url: string,\n\t\treadonly status: number | null,\n\t\tdetail: string,\n\t) {\n\t\tsuper(`${url}: ${detail}`);\n\t}\n}\n\ntype Fetch = (url: string, init?: RequestInit) => Promise<Response>;\n\ninterface HttpOptions {\n\theaders?: Record<string, string>;\n\tfetch?: Fetch;\n}\n\nconst MAX_ATTEMPTS = 3;\nconst MAX_RETRY_SECONDS = 10;\n\n/** GET with retries on 429 and 503 (honoring retry-after); null on 404. */\nasync function get(\n\turl: string,\n\topts: HttpOptions,\n\tattempt = 1,\n): Promise<Response | null> {\n\tconst doFetch = opts.fetch ?? fetch;\n\tlet res: Response;\n\ttry {\n\t\tres = await doFetch(url, { headers: opts.headers });\n\t} catch (err) {\n\t\tthrow new SourceError(url, null, (err as Error).message);\n\t}\n\tif (res.status === 404) return null;\n\tif ((res.status === 503 || res.status === 429) && attempt < MAX_ATTEMPTS) {\n\t\tconst header = res.headers.get(\"retry-after\");\n\t\tconst seconds = header === null ? 1 : Number(header);\n\t\tconst wait = Number.isFinite(seconds)\n\t\t\t? Math.min(Math.max(seconds, 0), MAX_RETRY_SECONDS)\n\t\t\t: 1;\n\t\tawait new Promise((r) => setTimeout(r, wait * 1000));\n\t\treturn get(url, opts, attempt + 1);\n\t}\n\tif (!res.ok) throw new SourceError(url, res.status, `HTTP ${res.status}`);\n\treturn res;\n}\n\nasync function getJson<T>(url: string, opts: HttpOptions): Promise<T | null> {\n\tconst res = await get(url, opts);\n\treturn res ? ((await res.json()) as T) : null;\n}\n\nasync function getBytes(url: string, opts: HttpOptions): Promise<Bytes | null> {\n\tconst res = await get(url, opts);\n\treturn res ? new Uint8Array(await res.arrayBuffer()) : null;\n}\n\nconst required = <T>(url: string, v: T | null): T => {\n\tif (v === null) throw new SourceError(url, 404, \"not found\");\n\treturn v;\n};\n\nconst trimSlash = (s: string) => s.replace(/\\/+$/, \"\");\n\ntype MarfJson = { data: string; proof?: string; marf_proof?: string };\n\ntype HeadersJson = { header?: unknown; consensus_hash?: unknown }[];\n\n/** The first entry of a node `/v2/headers/1?tip=<id>` answer: the tip itself. */\nconst toEpoch2 = (url: string, j: HeadersJson | null): Epoch2HeaderResponse => {\n\tconst tip = required(url, j)[0];\n\tif (typeof tip?.header !== \"string\" || typeof tip.consensus_hash !== \"string\")\n\t\tthrow new SourceError(url, 200, \"answer needs header and consensus_hash\");\n\treturn {\n\t\theader: unhex(tip.header),\n\t\tconsensusHash: unhex(tip.consensus_hash),\n\t};\n};\n\nconst toMarf = (url: string, j: MarfJson | null): MarfProofResponse | null => {\n\tif (j === null) return null;\n\tconst proof = j.proof ?? j.marf_proof;\n\tif (typeof proof !== \"string\" || typeof j.data !== \"string\")\n\t\tthrow new SourceError(url, 200, \"MARF answer needs data and proof\");\n\treturn { data: j.data, proof: unhex(proof) };\n};\n\n/** The hosted API. */\nexport const DEFAULT_API_URL = \"https://api.secondlayer.tools\";\n\nexport interface SecondlayerSourceOptions {\n\t/** API origin. Defaults to {@link DEFAULT_API_URL}. */\n\tbaseUrl?: string;\n\t/**\n\t * Optional. Proofs are keyless; a key raises the rate limit. Required for\n\t * `rows: true` (metered Index reads). Sent as `Authorization: Bearer`.\n\t */\n\tapiKey?: string;\n\tfetch?: Fetch;\n}\n\nconst VM_WRITE_TYPES = [\n\t\"var_set\",\n\t\"map_set\",\n\t\"map_insert\",\n\t\"map_delete\",\n] as const;\nconst PAGE = 1000;\n\n/** Follow `next_cursor` until a page comes back empty. Null when the first page 404s. */\nasync function pages<T>(\n\tfield: string,\n\turl: string,\n\thttp: HttpOptions,\n): Promise<T[] | null> {\n\tconst out: T[] = [];\n\tlet cursor: string | null = null;\n\tfor (;;) {\n\t\tconst page: string = cursor\n\t\t\t? `${url}&cursor=${encodeURIComponent(cursor)}`\n\t\t\t: url;\n\t\tconst j = await getJson<Record<string, unknown>>(page, http);\n\t\tif (j === null) return cursor === null ? null : out;\n\t\tconst rows = j[field];\n\t\tif (!Array.isArray(rows))\n\t\t\tthrow new SourceError(page, 200, `answer has no ${field} array`);\n\t\tout.push(...(rows as T[]));\n\t\tconst next = j.next_cursor;\n\t\tif (rows.length < PAGE || typeof next !== \"string\" || next === cursor)\n\t\t\treturn out;\n\t\tcursor = next;\n\t}\n}\n\n// Both sources keep their origin and account key in constructor closures, not\n// fields: nothing leaks through a spread, a log or JSON.stringify.\n\n/**\n * Every proof input from the Secondlayer API: `/v1/proofs/*` (free, rate\n * limited) for blocks, epoch 2.x headers, MARF proofs, witnesses, burn\n * preimages, Bitcoin headers and each block's state writes; the Index API\n * (metered rows) for vm_events, read only when verifyBlock gets `rows: true`.\n * Methods are own properties, so a partial source spreads over it:\n * `{ ...new SecondlayerProofSource(o), ...new NodeRpcProofSource(n) }`.\n */\nexport class SecondlayerProofSource implements ProofSource {\n\tgetBlock: (ref: string | number) => Promise<Bytes>;\n\tgetEpoch2Header: (blockId: string) => Promise<Epoch2HeaderResponse>;\n\tgetMarfProof: (\n\t\tpathHex: string,\n\t\ttipId: string,\n\t) => Promise<MarfProofResponse | null>;\n\tgetWitness: (blockId: string) => Promise<Bytes>;\n\tgetBurnPreimage: (consensusHash: string) => Promise<BurnPreimage>;\n\tgetBitcoinHeaders: (from: number, count: number) => Promise<string[]>;\n\tgetStateWrites: (height: number) => Promise<StateWrite[] | null>;\n\tgetVmEvents: (height: number) => Promise<VmEventRow[]>;\n\n\tconstructor(opts: SecondlayerSourceOptions = {}) {\n\t\tconst base = trimSlash(opts.baseUrl ?? DEFAULT_API_URL);\n\t\tconst http: HttpOptions = {\n\t\t\theaders: opts.apiKey ? { authorization: `Bearer ${opts.apiKey}` } : {},\n\t\t\tfetch: opts.fetch,\n\t\t};\n\n\t\tthis.getBlock = async (ref) => {\n\t\t\tconst url =\n\t\t\t\ttypeof ref === \"number\"\n\t\t\t\t\t? `${base}/v1/proofs/block/height/${ref}`\n\t\t\t\t\t: `${base}/v1/proofs/block/${ref}`;\n\t\t\treturn required(url, await getBytes(url, http));\n\t\t};\n\n\t\tthis.getEpoch2Header = async (blockId) => {\n\t\t\tconst url = `${base}/v1/proofs/epoch2-header/${blockId}`;\n\t\t\treturn toEpoch2(url, await getJson<HeadersJson>(url, http));\n\t\t};\n\n\t\tthis.getMarfProof = async (pathHex, tipId) => {\n\t\t\tconst url = `${base}/v1/proofs/marf/${pathHex}?tip=${tipId}`;\n\t\t\treturn toMarf(url, await getJson<MarfJson>(url, http));\n\t\t};\n\n\t\tthis.getWitness = async (blockId) => {\n\t\t\tconst url = `${base}/v1/proofs/witness/${blockId}`;\n\t\t\treturn required(url, await getBytes(url, http));\n\t\t};\n\n\t\tthis.getBurnPreimage = async (consensusHash) => {\n\t\t\tconst url = `${base}/v1/proofs/burn/${consensusHash}`;\n\t\t\tconst j = required(\n\t\t\t\turl,\n\t\t\t\tawait getJson<{ burn_height: number; preimage: string }>(url, http),\n\t\t\t);\n\t\t\treturn { preimage: unhex(j.preimage), burnHeight: j.burn_height };\n\t\t};\n\n\t\tthis.getBitcoinHeaders = async (from, count) => {\n\t\t\tconst url = `${base}/v1/proofs/bitcoin-headers?from=${from}&count=${count}`;\n\t\t\tconst j = required(\n\t\t\t\turl,\n\t\t\t\tawait getJson<{ from: number; headers: string[] }>(url, http),\n\t\t\t);\n\t\t\tif (j.from !== from)\n\t\t\t\tthrow new SourceError(url, 200, `headers start at ${j.from}`);\n\t\t\treturn j.headers;\n\t\t};\n\n\t\tthis.getStateWrites = async (height) => {\n\t\t\tconst url = `${base}/v1/proofs/writes/${height}`;\n\t\t\tconst j = await getJson<{ state_writes?: unknown }>(url, http);\n\t\t\tif (j === null) return null;\n\t\t\tif (!Array.isArray(j.state_writes))\n\t\t\t\tthrow new SourceError(url, 200, \"answer has no state_writes array\");\n\t\t\treturn j.state_writes as StateWrite[];\n\t\t};\n\n\t\tthis.getVmEvents = async (height) => {\n\t\t\tconst eventsUrl = (type: string) =>\n\t\t\t\t`${base}/v1/index/events?event_type=${type}&from_height=${height}&to_height=${height}&limit=${PAGE}`;\n\t\t\tif (!opts.apiKey)\n\t\t\t\tthrow new SourceError(\n\t\t\t\t\teventsUrl(VM_WRITE_TYPES[0]),\n\t\t\t\t\t401,\n\t\t\t\t\t\"rows: true reads metered Index events and needs an apiKey\",\n\t\t\t\t);\n\t\t\tconst out: VmEventRow[] = [];\n\t\t\tfor (const type of VM_WRITE_TYPES) {\n\t\t\t\tconst url = eventsUrl(type);\n\t\t\t\tout.push(...((await pages<VmEventRow>(\"events\", url, http)) ?? []));\n\t\t\t}\n\t\t\treturn out.sort((a, b) => a.event_index - b.event_index);\n\t\t};\n\t}\n}\n\nexport interface NodeRpcSourceOptions {\n\t/** Stacks node RPC origin, e.g. `http://localhost:20443`. */\n\tnodeUrl: string;\n\tfetch?: Fetch;\n}\n\n/**\n * Blocks, epoch 2.x headers and MARF proofs straight from a Stacks node's RPC.\n * Witnesses, burn preimages and Bitcoin headers need another source: spread\n * this over one.\n */\nexport class NodeRpcProofSource\n\timplements Pick<ProofSource, \"getBlock\" | \"getEpoch2Header\" | \"getMarfProof\">\n{\n\tgetBlock: (ref: string | number) => Promise<Bytes>;\n\tgetEpoch2Header: (blockId: string) => Promise<Epoch2HeaderResponse>;\n\tgetMarfProof: (\n\t\tpathHex: string,\n\t\ttipId: string,\n\t) => Promise<MarfProofResponse | null>;\n\n\tconstructor(opts: NodeRpcSourceOptions) {\n\t\tconst base = trimSlash(opts.nodeUrl);\n\t\tconst http: HttpOptions = { fetch: opts.fetch };\n\n\t\tthis.getBlock = async (ref) => {\n\t\t\tconst url =\n\t\t\t\ttypeof ref === \"number\"\n\t\t\t\t\t? `${base}/v3/blocks/height/${ref}`\n\t\t\t\t\t: `${base}/v3/blocks/${ref}`;\n\t\t\treturn required(url, await getBytes(url, http));\n\t\t};\n\n\t\tthis.getEpoch2Header = async (blockId) => {\n\t\t\tconst url = `${base}/v2/headers/1?tip=${blockId}`;\n\t\t\treturn toEpoch2(url, await getJson<HeadersJson>(url, http));\n\t\t};\n\n\t\tthis.getMarfProof = async (pathHex, tipId) => {\n\t\t\tconst url = `${base}/v2/clarity/marf/${pathHex}?tip=${tipId}&proof=1`;\n\t\t\treturn toMarf(url, await getJson<MarfJson>(url, http));\n\t\t};\n\t}\n}\n",
|
|
17
17
|
"// Steps 6-8 of verifyBlock: a block's state witness against its authenticated\n// header root, every leaf of its trie named, and indexed rows against the diff.\nimport { type Bytes, bytesEqual, hex, unhex } from \"./bytes.ts\";\nimport { dataVarKey } from \"./keys.ts\";\nimport {\n\tMARF_VALUE_SIZE,\n\theightToHashKey,\n\tmarfPath,\n\tmarfValue,\n} from \"./marf.ts\";\nimport type { StateWrite, VmEventRow } from \"./source.ts\";\nimport {\n\ttype WitnessLeaf,\n\tclassifyBlockDiff,\n\tparseWitness,\n} from \"./witness.ts\";\n\nexport interface DiffWrite {\n\t/** MARF key, when a state_writes row names the leaf. */\n\tkey?: string;\n\t/** Leaf path, hex. */\n\tpath: string;\n\t/** sha512/256 of the stored value string, hex. */\n\tvalueHash: string;\n\t/** Transaction of the last write; null for block-level writes. */\n\ttxIndex?: number | null;\n\t/** The stored value string (hex of a Clarity value) the leaf holds; named writes only. */\n\tvalue?: string;\n\t/** False when the source had no state_writes: the leaf may also be a carried copy. */\n\tnamed: boolean;\n}\n\nexport interface DiffLeaf {\n\tkey?: string;\n\tpath: string;\n\tvalueHash: string;\n}\n\nexport interface ProvenDiff {\n\t/** Every leaf is named (state_writes served) and classified. */\n\tnamed: boolean;\n\twrites: DiffWrite[];\n\t/** Unchanged values copied forward from the parent (proven at the parent). */\n\tcarried: DiffLeaf[];\n\t/** `__MARF_BLOCK_*` bookkeeping. */\n\tinternal: DiffLeaf[];\n}\n\nexport type StateFailureCode =\n\t| \"malformed\"\n\t| \"root-mismatch\"\n\t| \"bad-write\"\n\t| \"hidden-write\"\n\t| \"missing-write\"\n\t| \"key-not-written\"\n\t| \"value-mismatch\"\n\t| \"bad-row\";\n\nexport interface StateFailure {\n\tstep: \"witness\" | \"names\" | \"rows\";\n\tcode: StateFailureCode;\n\tmessage: string;\n\tkey?: string;\n\tpath?: string;\n\tordinal?: number;\n}\n\nexport interface BlockStateInput {\n\t/** MARF height of the block (its Stacks chain length). */\n\theight: number;\n\t/** Parent block id from the authenticated header. */\n\tparentBlockId: Bytes;\n\t/** state_index_root from the authenticated header. */\n\tstateRoot: Bytes;\n\twitness: Bytes;\n\t/** The block's state_writes; null when the source has none (names unavailable). */\n\twrites: StateWrite[] | null;\n\t/** Indexed rows to prove against the diff. */\n\trows?: VmEventRow[];\n\t/**\n\t * Leaves of the parent's own trie, from a parent witness whose root the\n\t * caller checked against the parent header: each is the parent state's\n\t * value at its path. Resolves carried leaves without a proof per leaf.\n\t */\n\tparentLeaves?: WitnessLeaf[];\n\t/**\n\t * True iff the leaf's value is stored at its path in the parent's state\n\t * (proven by the caller). Asked only with state_writes, for leaves the\n\t * parent's own trie does not explain.\n\t */\n\tparentHolds?: (leaf: WitnessLeaf) => Promise<boolean>;\n}\n\nexport interface BlockStateResult {\n\tdiff?: ProvenDiff;\n\trowsChecked: number;\n\tnotes: string[];\n\tfailures: StateFailure[];\n}\n\nconst INTERNAL = {\n\tself: \"__MARF_BLOCK_HEIGHT_SELF\",\n\thashToHeight: \"__MARF_BLOCK_HASH_TO_HEIGHT\",\n} as const;\n\n/** MARFValue of a u32 height: little-endian in the first 4 bytes. */\nconst heightValue = (h: number): string => {\n\tconst v = new Uint8Array(MARF_VALUE_SIZE);\n\tnew DataView(v.buffer).setUint32(0, h, true);\n\treturn hex(v);\n};\n/** 40-byte MARFValue hex of a 32-byte hash or block id (zero tail). */\nconst padded = (b32: Bytes): string => `${hex(b32)}${\"00\".repeat(8)}`;\n\n/**\n * The `__MARF_BLOCK_*` entries block `height` writes (stacks-core index/marf.rs).\n * The parent's are fixed by the header. The block's own id is not known while\n * its trie is built, so `HEIGHT_TO_HASH::{height}` holds a temporary hash; its\n * value is taken from the witness and must map back to `height`.\n */\nfunction internalEntries(\n\theight: number,\n\tparentBlockId: Bytes,\n\tleaves: WitnessLeaf[],\n): [key: string, valueHex: string][] {\n\tconst out: [string, string][] = [[INTERNAL.self, heightValue(height)]];\n\tconst ownKey = heightToHashKey(height);\n\tconst ownPath = marfPath(ownKey);\n\tconst own = leaves.find((l) => bytesEqual(l.path, ownPath));\n\tif (own) {\n\t\tout.push([ownKey, padded(own.valueHash)]);\n\t\tout.push([\n\t\t\t`${INTERNAL.hashToHeight}::${hex(own.valueHash)}`,\n\t\t\theightValue(height),\n\t\t]);\n\t}\n\tif (height > 0) {\n\t\tout.push([heightToHashKey(height - 1), padded(parentBlockId)]);\n\t\tout.push([\n\t\t\t`${INTERNAL.hashToHeight}::${hex(parentBlockId)}`,\n\t\t\theightValue(height - 1),\n\t\t]);\n\t}\n\treturn out;\n}\n\nconst utf8 = new TextDecoder(\"utf-8\", { fatal: true });\nconst strip0x = (s: string) => (s.startsWith(\"0x\") ? s.slice(2) : s);\nconst leafHex = (l: WitnessLeaf): DiffLeaf => ({\n\tpath: hex(l.path),\n\tvalueHash: hex(l.valueHash),\n});\n\n/** Last write per key, in ordinal order, with its value as the stored string. */\nfunction lastWrites(\n\twrites: StateWrite[],\n\tfailures: StateFailure[],\n): Map<string, { value: string; txIndex: number | null }> {\n\tconst out = new Map<string, { value: string; txIndex: number | null }>();\n\tfor (const w of [...writes].sort((a, b) => a.ordinal - b.ordinal)) {\n\t\ttry {\n\t\t\tout.set(w.key, {\n\t\t\t\tvalue: utf8.decode(unhex(strip0x(w.value_hex))),\n\t\t\t\ttxIndex: w.tx_index,\n\t\t\t});\n\t\t} catch {\n\t\t\tfailures.push({\n\t\t\t\tstep: \"names\",\n\t\t\t\tcode: \"bad-write\",\n\t\t\t\tmessage: `state write ${w.ordinal} value is not UTF-8 hex`,\n\t\t\t\tkey: w.key,\n\t\t\t\tordinal: w.ordinal,\n\t\t\t});\n\t\t}\n\t}\n\treturn out;\n}\n\n/** The MARF key and stored value string a vm_events row writes (mirrors clarity_db.rs). */\nfunction rowWrite(row: VmEventRow): [key: string, value: string] {\n\tconst need = (v: string | null | undefined, name: string): string => {\n\t\tif (!v) throw new Error(`${row.event_type} row has no ${name}`);\n\t\treturn v;\n\t};\n\tif (row.event_type === \"var_set\")\n\t\treturn [\n\t\t\tdataVarKey(row.contract_id, need(row.var_name, \"var_name\")),\n\t\t\tstrip0x(need(row.raw_value, \"raw_value\")).toLowerCase(),\n\t\t];\n\tconst key = `vm::${row.contract_id}::0::${need(row.map, \"map\")}::${strip0x(need(row.raw_key, \"raw_key\")).toLowerCase()}`;\n\tif (row.event_type === \"map_delete\") return [key, \"09\"];\n\t// put_value stores map entries as (some value).\n\treturn [key, `0a${strip0x(need(row.raw_value, \"raw_value\")).toLowerCase()}`];\n}\n\n/**\n * Rows against the block's leaves: every row's key must be a leaf, and the\n * last row per key must carry the leaf's value.\n */\nfunction checkRows(\n\trows: VmEventRow[],\n\tleaves: WitnessLeaf[],\n\tfailures: StateFailure[],\n): number {\n\tconst byPath = new Map(leaves.map((l) => [hex(l.path), l]));\n\tconst named: { row: VmEventRow; key: string; path: string; value: string }[] =\n\t\t[];\n\tfor (const row of [...rows].sort((a, b) => a.event_index - b.event_index)) {\n\t\ttry {\n\t\t\tconst [key, value] = rowWrite(row);\n\t\t\tnamed.push({ row, key, path: hex(marfPath(key)), value });\n\t\t} catch (err) {\n\t\t\tfailures.push({\n\t\t\t\tstep: \"rows\",\n\t\t\t\tcode: \"bad-row\",\n\t\t\t\tmessage: (err as Error).message,\n\t\t\t\tordinal: row.event_index,\n\t\t\t});\n\t\t}\n\t}\n\tconst last = new Map(named.map((n, i) => [n.path, i]));\n\tnamed.forEach((n, i) => {\n\t\tconst leaf = byPath.get(n.path);\n\t\tconst at = { key: n.key, path: n.path, ordinal: n.row.event_index };\n\t\tif (!leaf)\n\t\t\tfailures.push({\n\t\t\t\tstep: \"rows\",\n\t\t\t\tcode: \"key-not-written\",\n\t\t\t\tmessage: `${n.row.event_type} row ${n.row.event_index} names a key the block did not write`,\n\t\t\t\t...at,\n\t\t\t});\n\t\telse if (\n\t\t\tlast.get(n.path) === i &&\n\t\t\tpadded(leaf.valueHash) !== hex(marfValue(n.value))\n\t\t)\n\t\t\tfailures.push({\n\t\t\t\tstep: \"rows\",\n\t\t\t\tcode: \"value-mismatch\",\n\t\t\t\tmessage: `${n.row.event_type} row ${n.row.event_index} value differs from the block's leaf`,\n\t\t\t\t...at,\n\t\t\t});\n\t});\n\treturn named.length;\n}\n\n/**\n * Verify block state against an authenticated header: the witness must\n * recompute `stateRoot`, then every leaf is classified. With state_writes,\n * any leaf that is not a named write, a carried parent value or MARF\n * bookkeeping is a hidden write. Without them the diff is still proven\n * (every leaf is in the block): carried leaves are told apart only through\n * `parentLeaves`, and the remaining writes come back unnamed.\n */\nexport async function verifyBlockState(\n\tinput: BlockStateInput,\n): Promise<BlockStateResult> {\n\tconst out: BlockStateResult = { rowsChecked: 0, notes: [], failures: [] };\n\tlet witness: ReturnType<typeof parseWitness>;\n\ttry {\n\t\twitness = parseWitness(input.witness);\n\t} catch (err) {\n\t\tout.failures.push({\n\t\t\tstep: \"witness\",\n\t\t\tcode: \"malformed\",\n\t\t\tmessage: (err as Error).message,\n\t\t});\n\t\treturn out;\n\t}\n\tif (!bytesEqual(witness.root, input.stateRoot)) {\n\t\tout.failures.push({\n\t\t\tstep: \"witness\",\n\t\t\tcode: \"root-mismatch\",\n\t\t\tmessage: `witness root ${hex(witness.root)} != header state_index_root ${hex(input.stateRoot)}`,\n\t\t});\n\t\treturn out;\n\t}\n\tconst { leaves } = witness;\n\tconst internal = internalEntries(input.height, input.parentBlockId, leaves);\n\tconst named = input.writes !== null;\n\tconst last = lastWrites(input.writes ?? [], out.failures);\n\tconst writes = [...last].map(([k, w]): [string, string] => [k, w.value]);\n\t// First pass with no parent values finds the leaves that need one.\n\tconst first = classifyBlockDiff({\n\t\tleaves,\n\t\twrites,\n\t\tinternal,\n\t\tparentValue: () => undefined,\n\t});\n\tconst inParent = new Map(\n\t\t(input.parentLeaves ?? []).map((l) => [hex(l.path), hex(l.valueHash)]),\n\t);\n\tconst carried = new Map<string, string>();\n\tfor (const leaf of first.hidden) {\n\t\tconst pathHex = hex(leaf.path);\n\t\tif (\n\t\t\tinParent.get(pathHex) === hex(leaf.valueHash) ||\n\t\t\t(named && (await input.parentHolds?.(leaf)))\n\t\t)\n\t\t\tcarried.set(pathHex, padded(leaf.valueHash));\n\t}\n\tconst d = classifyBlockDiff({\n\t\tleaves,\n\t\twrites,\n\t\tinternal,\n\t\tparentValue: (p) => carried.get(p),\n\t});\n\tout.diff = {\n\t\tnamed,\n\t\twrites: named\n\t\t\t? d.writes.map((l) => ({\n\t\t\t\t\t...leafHex(l),\n\t\t\t\t\tkey: l.key,\n\t\t\t\t\ttxIndex: last.get(l.key)?.txIndex ?? null,\n\t\t\t\t\tvalue: last.get(l.key)?.value,\n\t\t\t\t\tnamed: true,\n\t\t\t\t}))\n\t\t\t: // Without names every unexplained leaf is a write we cannot label.\n\t\t\t\td.hidden.map((l) => ({ ...leafHex(l), named: false })),\n\t\tcarried: d.carried.map(leafHex),\n\t\tinternal: d.internal.map((l) => ({ ...leafHex(l), key: l.key })),\n\t};\n\tif (!named)\n\t\tout.notes.push(\n\t\t\t`source has no state_writes for block ${input.height}: ${d.hidden.length} written leaves are proven in the block but unnamed`,\n\t\t);\n\telse {\n\t\tfor (const l of d.hidden)\n\t\t\tout.failures.push({\n\t\t\t\tstep: \"names\",\n\t\t\t\tcode: \"hidden-write\",\n\t\t\t\tmessage: `leaf ${hex(l.path)} is not a named write, a carried parent value or MARF bookkeeping`,\n\t\t\t\tpath: hex(l.path),\n\t\t\t});\n\t\tfor (const key of d.missing)\n\t\t\tout.failures.push({\n\t\t\t\tstep: \"names\",\n\t\t\t\tcode: \"missing-write\",\n\t\t\t\tmessage: `state write ${key} has no leaf holding its value`,\n\t\t\t\tkey,\n\t\t\t\tpath: hex(marfPath(key)),\n\t\t\t});\n\t}\n\tif (input.rows) out.rowsChecked = checkRows(input.rows, leaves, out.failures);\n\treturn out;\n}\n",
|
|
18
18
|
"// A Nakamoto block's transactions against its header's tx_merkle_root\n// (stacks-common util/hash.rs MerkleTree, MerkleHashFunc = Sha512Trunc256Sum).\nimport { sha512_256 } from \"@noble/hashes/sha2.js\";\nimport { splitTransactions } from \"@secondlayer/stacks/transactions\";\nimport { type Bytes, bytesEqual, concat, hex } from \"./bytes.ts\";\nimport type { NakamotoHeader } from \"./header.ts\";\n\nexport interface BlockTransaction {\n\t/** sha512/256 of the transaction bytes, hex. */\n\ttxid: string;\n\t/** The consensus-serialized transaction. */\n\traw: Bytes;\n}\n\nconst LEAF_TAG = new Uint8Array([0x00]);\nconst NODE_TAG = new Uint8Array([0x01]);\n\n/**\n * tx_merkle_root over txids: leaf = H(0x00 ‖ txid), node = H(0x01 ‖ l ‖ r),\n * an odd level duplicates its last node, and a lone leaf is still paired with\n * itself (one-tx blocks hash H(0x01 ‖ leaf ‖ leaf)).\n */\nexport function txMerkleRoot(txids: Bytes[]): Bytes {\n\tif (txids.length === 0) throw new Error(\"no transactions\");\n\tlet level = txids.map((t) => sha512_256(concat([LEAF_TAG, t])));\n\tdo {\n\t\tif (level.length % 2 === 1) level.push(level[level.length - 1] as Bytes);\n\t\tconst next: Bytes[] = [];\n\t\tfor (let i = 0; i < level.length; i += 2) {\n\t\t\tnext.push(\n\t\t\t\tsha512_256(\n\t\t\t\t\tconcat([NODE_TAG, level[i] as Bytes, level[i + 1] as Bytes]),\n\t\t\t\t),\n\t\t\t);\n\t\t}\n\t\tlevel = next;\n\t} while (level.length > 1);\n\treturn level[0] as Bytes;\n}\n\nexport class TransactionsError extends Error {\n\tconstructor(\n\t\treadonly code: \"malformed\" | \"tx-root-mismatch\",\n\t\tmessage: string,\n\t) {\n\t\tsuper(message);\n\t}\n}\n\n/**\n * The block's transactions, each hashed to its txid, checked against the\n * header's tx_merkle_root. The body after `header.byteLength` is a u32 count\n * then the transactions back to back. Null when the bytes are the header\n * alone (a source that serves headers only): nothing to check. Throws\n * {@link TransactionsError} on a malformed body, trailing bytes or a root\n * mismatch.\n */\nexport function blockTransactions(\n\traw: Bytes,\n\theader: NakamotoHeader,\n): BlockTransaction[] | null {\n\tconst body = raw.subarray(header.byteLength);\n\tif (body.length === 0) return null;\n\tif (body.length < 4)\n\t\tthrow new TransactionsError(\"malformed\", \"block body has no tx count\");\n\tconst count = new DataView(\n\t\tbody.buffer,\n\t\tbody.byteOffset,\n\t\tbody.byteLength,\n\t).getUint32(0);\n\tif (count === 0)\n\t\tthrow new TransactionsError(\"malformed\", \"block has no transactions\");\n\tlet txs: Bytes[];\n\ttry {\n\t\ttxs = splitTransactions(body.subarray(4), count);\n\t} catch (err) {\n\t\tthrow new TransactionsError(\n\t\t\t\"malformed\",\n\t\t\t`transactions do not parse: ${(err as Error).message}`,\n\t\t);\n\t}\n\tconst used = txs.reduce((n, t) => n + t.length, 4);\n\tif (used !== body.length)\n\t\tthrow new TransactionsError(\n\t\t\t\"malformed\",\n\t\t\t`${body.length - used} bytes after the block's ${count} transactions`,\n\t\t);\n\tconst ids = txs.map((t) => sha512_256(t));\n\tconst root = txMerkleRoot(ids);\n\tif (!bytesEqual(root, header.txMerkleRoot))\n\t\tthrow new TransactionsError(\n\t\t\t\"tx-root-mismatch\",\n\t\t\t`transactions hash to ${hex(root)}, header tx_merkle_root is ${hex(header.txMerkleRoot)}`,\n\t\t);\n\treturn txs.map((t, i) => ({ txid: hex(ids[i] as Bytes), raw: t }));\n}\n",
|
|
19
19
|
"import { unhex } from \"./bytes.ts\";\nimport type { VerifyCheckpoint } from \"./checkpoint.ts\";\nimport { parseNakamotoHeader } from \"./header.ts\";\nimport type { BlockVerification, VerifyStep } from \"./verify-block.ts\";\n\nexport type LinkStatus = \"ok\" | \"failed\" | \"skipped\";\n\nexport interface LinkLine {\n\tstep: VerifyStep;\n\tlabel: string;\n\tstatus: LinkStatus;\n\t/** What the link proved, why it failed, or why it was not checked. */\n\tdetail: string;\n}\n\n/** The chain of links, in the order verifyBlock walks them. */\nexport const LINKS: readonly { step: VerifyStep; label: string }[] = [\n\t{ step: \"ancestry\", label: \"ancestry\" },\n\t{ step: \"block\", label: \"block\" },\n\t{ step: \"bitcoin\", label: \"bitcoin\" },\n\t{ step: \"burn\", label: \"burn\" },\n\t{ step: \"signer-set\", label: \"cycle\" },\n\t{ step: \"signatures\", label: \"signatures\" },\n\t{ step: \"txs\", label: \"txs\" },\n\t{ step: \"witness\", label: \"state root\" },\n\t{ step: \"names\", label: \"diff\" },\n\t{ step: \"rows\", label: \"rows\" },\n];\n\nconst n = (v: number | bigint) => v.toLocaleString(\"en-US\");\n\n/** What each link proved, for the human view. */\nfunction linkDetail(\n\tstep: VerifyStep,\n\tr: BlockVerification,\n\tcp: VerifyCheckpoint,\n): string {\n\tswitch (step) {\n\t\tcase \"ancestry\": {\n\t\t\tconst a = r.ancestry;\n\t\t\tif (!a) return \"\";\n\t\t\tconst checkpoint = parseNakamotoHeader(unhex(cp.stacks.header));\n\t\t\tconst start =\n\t\t\t\ta.fromHeight === Number(checkpoint.chainLength)\n\t\t\t\t\t? `the checkpoint ${n(a.fromHeight)}`\n\t\t\t\t\t: `block ${n(a.fromHeight)}`;\n\t\t\treturn a.via === \"marf\"\n\t\t\t\t? `${n(r.height ?? 0)} proven in the state of ${start} (one MARF proof)`\n\t\t\t\t: `${n(r.height ?? 0)} reached from ${start} by parent links`;\n\t\t}\n\t\tcase \"block\":\n\t\t\treturn `${n(r.height ?? 0)} ${r.blockId}`;\n\t\tcase \"bitcoin\":\n\t\t\treturn `headers ${n(cp.bitcoin.height)}..${n(r.burnHeight ?? 0)}, proof-of-work and retargets checked`;\n\t\tcase \"burn\":\n\t\t\treturn `height ${n(r.burnHeight ?? 0)} ${r.bitcoinBlockHash}`;\n\t\tcase \"signer-set\":\n\t\t\treturn r.cycle === cp.stacks.cycle\n\t\t\t\t? `${r.cycle}, the checkpoint's own signer set`\n\t\t\t\t: `${r.cycle}, signer set proven forward from checkpoint cycle ${cp.stacks.cycle}`;\n\t\tcase \"signatures\":\n\t\t\treturn `${n(r.signerWeight ?? 0n)} / ${n(r.totalWeight ?? 0n)} weight signed, threshold ${n(r.threshold ?? 0n)}`;\n\t\tcase \"txs\":\n\t\t\treturn `${n(r.transactions?.length ?? 0)} transactions match the tx merkle root`;\n\t\tcase \"witness\":\n\t\t\treturn `${r.stateRoot} matches the witness`;\n\t\tcase \"names\": {\n\t\t\tconst d = r.diff;\n\t\t\tif (!d) return \"\";\n\t\t\tconst named = d.writes.filter((w) => w.named).length;\n\t\t\tconst written = named\n\t\t\t\t? `${d.writes.length} written (${named} named, ${d.writes.length - named} unnamed)`\n\t\t\t\t: `${d.writes.length} written (unnamed)`;\n\t\t\treturn `${written}, ${d.carried.length} carried, ${d.internal.length} internal`;\n\t\t}\n\t\tcase \"rows\":\n\t\t\treturn `${n(r.rowsChecked ?? 0)} vm_events rows match the diff`;\n\t}\n}\n\n/**\n * Links a block below the checkpoint skips: its id is pinned by hash from a\n * trusted descendant, so no signer set or signatures; the burn block is bound\n * only when the synced Bitcoin chain reaches it.\n */\nfunction notNeeded(step: VerifyStep, r: BlockVerification): boolean {\n\tif (!r.ancestry) return false;\n\tif (step === \"bitcoin\" || step === \"burn\") return r.burnHeight === undefined;\n\treturn step === \"signer-set\" || step === \"signatures\";\n}\n\n/**\n * One line per link, then the verdict: the human view of a verification,\n * shared by the CLI and the browser checker. Ancestry appears only below the\n * checkpoint. `rows` says whether the caller asked for the rows link.\n */\nexport function describeLinks(\n\tr: BlockVerification,\n\tcp: VerifyCheckpoint,\n\topts: { rows?: boolean } = {},\n): { lines: LinkLine[]; verdict: { ok: boolean; text: string } } {\n\tconst first = r.failures[0];\n\tconst broken = first\n\t\t? LINKS.findIndex((l) => l.step === first.step)\n\t\t: LINKS.length;\n\tconst lines: LinkLine[] = [];\n\tfor (const [i, link] of LINKS.entries()) {\n\t\tconst { step, label } = link;\n\t\tconst failure = r.failures.find((f) => f.step === step);\n\t\t// Ancestry is a link only below the checkpoint.\n\t\tif (step === \"ancestry\" && !failure && !r.ancestry) continue;\n\t\tconst skipped = (detail: string): LinkLine => ({\n\t\t\tstep,\n\t\t\tlabel,\n\t\t\tstatus: \"skipped\",\n\t\t\tdetail,\n\t\t});\n\t\tif (failure)\n\t\t\tlines.push({ step, label, status: \"failed\", detail: failure.message });\n\t\telse if (step === \"rows\" && !opts.rows)\n\t\t\tlines.push(skipped(\"not checked (pass --rows)\"));\n\t\telse if (i > broken)\n\t\t\tlines.push(skipped(\"not checked: an earlier link is broken\"));\n\t\telse if (notNeeded(step, r))\n\t\t\tlines.push(\n\t\t\t\tskipped(\"not needed: the block is hash-chained to the checkpoint\"),\n\t\t\t);\n\t\telse if (step === \"rows\" && r.rowsChecked === undefined)\n\t\t\tlines.push(skipped(\"not checked: the source serves no indexed rows\"));\n\t\telse if (step === \"txs\" && r.transactions === undefined)\n\t\t\tlines.push(\n\t\t\t\tskipped(\n\t\t\t\t\t\"not checked: no transaction bytes (epoch 2.x, or the source served the header only)\",\n\t\t\t\t),\n\t\t\t);\n\t\telse\n\t\t\tlines.push({\n\t\t\t\tstep,\n\t\t\t\tlabel,\n\t\t\t\tstatus: \"ok\",\n\t\t\t\tdetail: linkDetail(step, r, cp),\n\t\t\t});\n\t}\n\n\tif (!first) {\n\t\tconst from = n(parseNakamotoHeader(unhex(cp.stacks.header)).chainLength);\n\t\treturn {\n\t\t\tlines,\n\t\t\tverdict: {\n\t\t\t\tok: true,\n\t\t\t\ttext: `Block ${n(r.height ?? 0)} is proven. Trusted: only the checkpoint (Stacks ${from}, Bitcoin ${n(cp.bitcoin.height)}).`,\n\t\t\t},\n\t\t};\n\t}\n\tconst label = LINKS[broken]?.label ?? first.step;\n\treturn {\n\t\tlines,\n\t\tverdict: {\n\t\t\tok: false,\n\t\t\ttext:\n\t\t\t\tfirst.code === \"unavailable\"\n\t\t\t\t\t? `Could not check the ${label} link: the source could not serve it.`\n\t\t\t\t\t: `Not proven: the ${label} link is broken.`,\n\t\t},\n\t};\n}\n",
|
|
20
20
|
"// verifyBlock: the end-to-end trustless check for one Stacks block.\n//\n// At or above the checkpoint, forward:\n// checkpoint ─▶ bitcoin headers (PoW) ─▶ burn height ─▶ cycle ─▶ signer set[cycle] (MARF-proven)\n// ─▶ header N (signatures ≥ 70%) ─▶ txs N (tx merkle root) ─▶ witness N (root)\n// ─▶ named diff ─▶ indexed rows\n//\n// Below it, backward: a trusted descendant's id commits to every ancestor by\n// hash, so no signatures are needed:\n// checkpoint ─▶ id N (parent links, or one MARF proof of __MARF_BLOCK_HEIGHT_TO_HASH::N)\n// ─▶ header N (hashes to id N) ─▶ txs N ─▶ witness N (root) ─▶ named diff ─▶ indexed rows\n//\n// Every input comes from an untrusted ProofSource; only the checkpoint is trusted.\nimport { uintCV } from \"@secondlayer/stacks/clarity\";\nimport { HeaderChain, HeaderValidationError } from \"./bitcoin/chain.ts\";\nimport {\n\tMAINNET_PREPARE_LENGTH,\n\tcycleStart,\n\trewardCycle,\n\tverifyConsensusPreimage,\n} from \"./burn.ts\";\nimport { type Bytes, bytesEqual, hex, unhex } from \"./bytes.ts\";\nimport { MAINNET_CHECKPOINT, type VerifyCheckpoint } from \"./checkpoint.ts\";\nimport {\n\ttype Epoch2Header,\n\ttype NakamotoHeader,\n\ttype StacksHeader,\n\tblockId,\n\tisEpoch2Header,\n\tparseEpoch2Header,\n\tparseNakamotoHeader,\n\tsignerSignatureHash,\n} from \"./header.ts\";\nimport { mapEntryKey } from \"./keys.ts\";\nimport {\n\tMARF_VALUE_SIZE,\n\theightToHashKey,\n\tmarfPath,\n\tmarfProofAncestors,\n\tmarfProofValue,\n\tmarfValue,\n\tverifyMarfProof,\n} from \"./marf.ts\";\nimport {\n\tSIGNERS_CONTRACT,\n\ttype SignerSet,\n\tdecodeSignerSet,\n\tverifySignerSignatures,\n} from \"./signers.ts\";\nimport type { BurnPreimage, ProofSource, StateWrite } from \"./source.ts\";\nimport {\n\ttype ProvenDiff,\n\ttype StateFailureCode,\n\tverifyBlockState,\n} from \"./state.ts\";\nimport {\n\ttype BlockTransaction,\n\tTransactionsError,\n\tblockTransactions,\n} from \"./txs.ts\";\nimport { type WitnessLeaf, parseWitness } from \"./witness.ts\";\n\nexport type VerifyStep =\n\t| \"ancestry\"\n\t| \"block\"\n\t| \"bitcoin\"\n\t| \"burn\"\n\t| \"signer-set\"\n\t| \"signatures\"\n\t| \"txs\"\n\t| \"witness\"\n\t| \"names\"\n\t| \"rows\";\n\nexport type VerifyFailureCode =\n\t| StateFailureCode\n\t/** The source could not serve something the step needs. */\n\t| \"unavailable\"\n\t| \"id-mismatch\"\n\t/** The block's transactions do not hash to its header's tx_merkle_root. */\n\t| \"tx-root-mismatch\"\n\t| \"height-mismatch\"\n\t| \"invalid-header\"\n\t| \"preimage-mismatch\"\n\t| \"burn-not-in-chain\"\n\t| \"before-checkpoint\"\n\t/** The block is not the checkpoint chain's block at its height. */\n\t| \"not-ancestor\"\n\t| \"ancestry-proof-invalid\"\n\t| \"anchor-not-found\"\n\t| \"anchor-outside-window\"\n\t| \"anchor-unsigned\"\n\t| \"set-proof-invalid\"\n\t| \"below-threshold\"\n\t| \"unknown-signer\"\n\t| \"duplicate-signer\"\n\t| \"bad-signature\";\n\nexport interface VerifyFailure {\n\tstep: VerifyStep;\n\tcode: VerifyFailureCode;\n\tmessage: string;\n\t/** Reward cycle being proven (signer-set step). */\n\tcycle?: number;\n\t/** Block the failure is about, when not the target. */\n\tblockId?: string;\n\tkey?: string;\n\tpath?: string;\n\tordinal?: number;\n}\n\n/** How a block below the checkpoint was tied to it. */\nexport interface Ancestry {\n\t/** Trusted descendant it was proven from: the checkpoint, or a block proven below it earlier. */\n\tfromHeight: number;\n\tfromBlockId: string;\n\t/**\n\t * `parents`: each header hashes to the parent id its child commits to.\n\t * `marf`: one MARF proof of `__MARF_BLOCK_HEIGHT_TO_HASH::<height>` against\n\t * the descendant's state root.\n\t */\n\tvia: \"parents\" | \"marf\";\n}\n\nexport interface BlockVerification {\n\t/**\n\t * Every step passed. At or above the checkpoint: header, burn binding,\n\t * signatures, state root, names and rows. Below it: ancestry, header,\n\t * state root, names and rows (and the burn binding when Bitcoin reaches it).\n\t */\n\tok: boolean;\n\theight?: number;\n\tblockId?: string;\n\t/** Nakamoto block hash (the header's signer sighash), hex. Absent for epoch 2.x. */\n\tblockHash?: string;\n\t/** The header's consensus hash, hex. */\n\tconsensusHash?: string;\n\t/** Nakamoto header timestamp, Unix seconds. Absent for epoch 2.x. */\n\ttimestamp?: number;\n\t/** The header's state_index_root, hex: what the witness must hash to. */\n\tstateRoot?: string;\n\t/** Set for blocks below the checkpoint, which need no signatures. */\n\tancestry?: Ancestry;\n\tcycle?: number;\n\tburnHeight?: number;\n\t/** Display-order hex. */\n\tbitcoinBlockHash?: string;\n\tsignerWeight?: bigint;\n\ttotalWeight?: bigint;\n\tthreshold?: bigint;\n\t/**\n\t * The block's transactions, checked against the header's tx_merkle_root.\n\t * Absent for epoch 2.x blocks and when the source served the header only.\n\t */\n\ttransactions?: BlockTransaction[];\n\tdiff?: ProvenDiff;\n\t/** Every state_writes row the names step checked, in ordinal order. */\n\twrites?: StateWrite[];\n\t/** vm_events rows proven against the diff. */\n\trowsChecked?: number;\n\tnotes: string[];\n\t/** Empty when ok. The first entry is the first broken link. */\n\tfailures: VerifyFailure[];\n}\n\nexport interface VerifyOptions {\n\tsource: ProofSource;\n\t/** Defaults to MAINNET_CHECKPOINT. */\n\tcheckpoint?: VerifyCheckpoint;\n\t/**\n\t * Also prove the block's indexed vm_events rows against its diff: reads\n\t * the source's `getVmEvents`, which bill as Index rows on the Secondlayer\n\t * API. Off by default. Naming the diff's writes (`getStateWrites`, free on\n\t * `/v1/proofs`) is always on when the source has them.\n\t */\n\trows?: boolean;\n\t/**\n\t * Called once per link as it passes, in the order the verifier proves them.\n\t * Failures arrive in the result, not here.\n\t */\n\tonStep?: (step: VerifyStep) => void;\n}\n\nclass Broken extends Error {\n\tconstructor(readonly failure: VerifyFailure) {\n\t\tsuper(failure.message);\n\t}\n}\n\nconst fail = (f: VerifyFailure): never => {\n\tthrow new Broken(f);\n};\n\n/** Run a source call; a throw becomes an `unavailable` failure of `step`. */\nasync function fetchFor<T>(\n\tstep: VerifyStep,\n\twhat: string,\n\tcall: () => Promise<T>,\n\textra: Partial<VerifyFailure> = {},\n): Promise<T> {\n\ttry {\n\t\treturn await call();\n\t} catch (err) {\n\t\tif (err instanceof Broken) throw err;\n\t\treturn fail({\n\t\t\tstep,\n\t\t\tcode: \"unavailable\",\n\t\t\tmessage: `${what}: ${(err as Error).message}`,\n\t\t\t...extra,\n\t\t});\n\t}\n}\n\nconst BITCOIN_BATCH = 2016;\n/**\n * Below the checkpoint, ancestors this close to a trusted block are reached by\n * parent links (one block fetch each); farther ones by one MARF proof, which\n * costs the proof plus a header per ancestor trie it crosses.\n */\nconst MAX_WALK = 16;\n\n/** A block position for the anchor search; `burn` is a source hint. */\nexport interface SearchPoint {\n\theight: number;\n\tburn?: number;\n}\n\n/**\n * Find a block whose burn height lies in `[window[0], window[1])`, between\n * `lo` and `hi` (exclusive). Interpolates on burn height, falling back to\n * bisection whenever a probe fails to halve the bracket. Burn heights here\n * are unproven hints: the caller authenticates whatever this returns.\n */\nexport async function findAnchor<T extends SearchPoint & { burn: number }>(\n\tlow: SearchPoint,\n\thigh: SearchPoint,\n\twindow: readonly [number, number],\n\tprobe: (height: number) => Promise<T>,\n\tmaxProbes = 32,\n): Promise<T | null> {\n\tlet [lo, hi] = [low, high];\n\tconst target = (window[0] + window[1]) / 2;\n\tlet bisect = false;\n\tfor (let i = 0; i < maxProbes; i++) {\n\t\tconst span = hi.height - lo.height;\n\t\tif (span <= 1) return null;\n\t\tlet h = Math.floor((lo.height + hi.height) / 2);\n\t\tif (\n\t\t\t!bisect &&\n\t\t\tlo.burn !== undefined &&\n\t\t\thi.burn !== undefined &&\n\t\t\thi.burn > lo.burn\n\t\t)\n\t\t\th =\n\t\t\t\tlo.height +\n\t\t\t\tMath.round(((target - lo.burn) * span) / (hi.burn - lo.burn));\n\t\th = Math.min(Math.max(h, lo.height + 1), hi.height - 1);\n\t\tconst p = await probe(h);\n\t\tif (p.height <= lo.height || p.height >= hi.height) return null;\n\t\tif (p.burn >= window[0] && p.burn < window[1]) return p;\n\t\tif (p.burn < window[0]) lo = p;\n\t\telse hi = p;\n\t\tbisect = hi.height - lo.height > span / 2;\n\t}\n\treturn null;\n}\n\ninterface Probe extends SearchPoint {\n\tburn: number;\n\theader: NakamotoHeader;\n\tid: string;\n}\n\n/**\n * Verifies blocks from one checkpoint against one source, caching the Bitcoin\n * header chain, proven signer sets and fetched headers across calls.\n */\nexport class BlockVerifier {\n\tprivate readonly source: ProofSource;\n\tprivate readonly checkpoint: VerifyCheckpoint;\n\tprivate readonly rows: boolean;\n\tprivate readonly onStep?: (step: VerifyStep) => void;\n\tprivate readonly chain: HeaderChain;\n\t/** Proven signer sets by cycle. */\n\tprivate readonly sets = new Map<number, SignerSet>();\n\t/** Where each proven set was anchored: the lower bound for the next search. */\n\tprivate readonly anchors = new Map<number, SearchPoint>();\n\t/** Headers fetched by id, each checked to hash to it. */\n\tprivate readonly headers = new Map<string, StacksHeader>();\n\t/** Blocks proven on the checkpoint's chain below it, by height. */\n\tprivate readonly below = new Map<\n\t\tnumber,\n\t\t{ id: string; ancestry: Ancestry }\n\t>();\n\tprivate readonly burns = new Map<\n\t\tstring,\n\t\t{ burnHeight: number; hash: string }\n\t>();\n\t/** Unverified source answers by consensus hash. */\n\tprivate readonly preimages = new Map<string, BurnPreimage>();\n\t/** Raw bytes of the last few blocks fetched, so the txs step reuses the\n\t * block an ancestry walk just read. Bounded: blocks can be megabytes. */\n\tprivate readonly raws = new Map<string, Bytes>();\n\tprivate readonly start: { header: NakamotoHeader; id: string };\n\n\tconstructor(opts: VerifyOptions) {\n\t\tthis.source = opts.source;\n\t\tthis.checkpoint = opts.checkpoint ?? MAINNET_CHECKPOINT;\n\t\tthis.rows = opts.rows ?? false;\n\t\tthis.onStep = opts.onStep;\n\t\tconst { stacks } = this.checkpoint;\n\t\tconst header = parseNakamotoHeader(unhex(stacks.header));\n\t\tthis.start = { header, id: hex(blockId(header)) };\n\t\tthis.headers.set(this.start.id, header);\n\t\tthis.sets.set(stacks.cycle, decodeSignerSet(stacks.signerSet));\n\t\tthis.chain = HeaderChain.fromCheckpoint(this.checkpoint.bitcoin);\n\t}\n\n\t/** Verify one block by id (hex) or height. Never throws for bad source data. */\n\tasync verify(ref: string | number): Promise<BlockVerification> {\n\t\tconst out: BlockVerification = { ok: false, notes: [], failures: [] };\n\t\ttry {\n\t\t\tawait this.run(ref, out);\n\t\t} catch (err) {\n\t\t\tif (!(err instanceof Broken)) throw err;\n\t\t\tout.failures.unshift(err.failure);\n\t\t}\n\t\tout.ok = out.failures.length === 0;\n\t\treturn out;\n\t}\n\n\t/** Report a passed link. A throwing callback must not break verification. */\n\tprivate passed(step: VerifyStep): void {\n\t\ttry {\n\t\t\tthis.onStep?.(step);\n\t\t} catch {}\n\t}\n\n\tprivate async run(\n\t\tref: string | number,\n\t\tout: BlockVerification,\n\t): Promise<void> {\n\t\tconst start = Number(this.start.header.chainLength);\n\t\tif (typeof ref === \"number\" && ref < start)\n\t\t\treturn this.runBelow(ref, undefined, out);\n\t\tlet header: StacksHeader;\n\t\tif (typeof ref === \"string\") {\n\t\t\tconst id = ref.replace(/^0x/, \"\").toLowerCase();\n\t\t\theader = await this.header(id, \"block\");\n\t\t\tconst height = Number(header.chainLength);\n\t\t\tif (height < start) return this.runBelow(height, id, out);\n\t\t\tif (isEpoch2Header(header))\n\t\t\t\tfail({\n\t\t\t\t\tstep: \"block\",\n\t\t\t\t\tcode: \"invalid-header\",\n\t\t\t\t\tmessage: `epoch 2.x block ${id} claims height ${height}, at or above the checkpoint`,\n\t\t\t\t});\n\t\t} else {\n\t\t\tconst raw = await fetchFor(\"block\", `block ${ref}`, () =>\n\t\t\t\tthis.source.getBlock(ref),\n\t\t\t);\n\t\t\theader = parseHeader(raw, \"block\");\n\t\t\tthis.rememberRaw(hex(blockId(header)), raw);\n\t\t}\n\t\tconst id = hex(blockId(header));\n\t\tconst height = Number(header.chainLength);\n\t\tif (typeof ref === \"number\" && height !== ref)\n\t\t\tfail({\n\t\t\t\tstep: \"block\",\n\t\t\t\tcode: \"height-mismatch\",\n\t\t\t\tmessage: `source returned height ${height} for ${ref}`,\n\t\t\t});\n\t\tawait this.runForward(header as NakamotoHeader, id, out);\n\t}\n\n\t/** At or above the checkpoint: Bitcoin, burn binding, signer set, signatures, state. */\n\tprivate async runForward(\n\t\theader: NakamotoHeader,\n\t\tid: string,\n\t\tout: BlockVerification,\n\t): Promise<void> {\n\t\tconst height = Number(header.chainLength);\n\t\tout.height = height;\n\t\tout.blockId = id;\n\t\tdescribeHeader(header, out);\n\t\tthis.passed(\"block\");\n\n\t\tconst burn = await this.bindBurn(header, \"burn\");\n\t\tconst cycle = rewardCycle(burn.burnHeight);\n\t\tout.burnHeight = burn.burnHeight;\n\t\tout.bitcoinBlockHash = burn.hash;\n\t\tout.cycle = cycle;\n\t\tthis.passed(\"bitcoin\");\n\t\tthis.passed(\"burn\");\n\n\t\tconst set = await this.signerSet(cycle, {\n\t\t\theight,\n\t\t\tburn: burn.burnHeight,\n\t\t});\n\t\tthis.passed(\"signer-set\");\n\t\tconst sig = verifySignerSignatures(header, set);\n\t\tout.signerWeight = sig.signedWeight;\n\t\tout.totalWeight = sig.totalWeight;\n\t\tout.threshold = sig.threshold;\n\t\tif (!sig.valid) fail(signatureFailure(sig, \"signatures\", cycle));\n\t\tthis.passed(\"signatures\");\n\t\tawait this.checkTransactions(header, id, out);\n\t\tawait this.verifyState(header, id, out);\n\t}\n\n\t/**\n\t * Below the checkpoint: prove the checkpoint chain's id at `height` (and\n\t * that it is `claimed`, when the caller asked by id), then the header that\n\t * hashes to it, then its state. Signatures add nothing to a header pinned\n\t * by hash from a trusted descendant.\n\t */\n\tprivate async runBelow(\n\t\theight: number,\n\t\tclaimed: string | undefined,\n\t\tout: BlockVerification,\n\t): Promise<void> {\n\t\tout.height = height;\n\t\tconst { id, ancestry } = await this.ancestor(height);\n\t\tout.ancestry = ancestry;\n\t\tif (claimed !== undefined && claimed !== id)\n\t\t\tfail({\n\t\t\t\tstep: \"ancestry\",\n\t\t\t\tcode: \"not-ancestor\",\n\t\t\t\tmessage: `block ${claimed} is not on the checkpoint's chain: its block at height ${height} is ${id}`,\n\t\t\t\tblockId: claimed,\n\t\t\t});\n\t\tthis.passed(\"ancestry\");\n\t\tconst header = await this.header(id, \"block\");\n\t\tif (Number(header.chainLength) !== height)\n\t\t\tfail({\n\t\t\t\tstep: \"block\",\n\t\t\t\tcode: \"height-mismatch\",\n\t\t\t\tmessage: `block ${id} claims height ${header.chainLength}, proven at ${height}`,\n\t\t\t});\n\t\tout.blockId = id;\n\t\tdescribeHeader(header, out);\n\t\tthis.passed(\"block\");\n\t\tawait this.bindBurnBelow(header, out);\n\t\tawait this.checkTransactions(header, id, out);\n\t\tawait this.verifyState(header, id, out);\n\t}\n\n\tprivate rememberRaw(id: string, raw: Bytes): void {\n\t\tthis.raws.delete(id);\n\t\tthis.raws.set(id, raw);\n\t\twhile (this.raws.size > 4) {\n\t\t\tconst oldest = this.raws.keys().next().value as string;\n\t\t\tthis.raws.delete(oldest);\n\t\t}\n\t}\n\n\t/**\n\t * The block's transactions against the authenticated header's\n\t * tx_merkle_root: binds every txid, sender, type and call target to the\n\t * signed (or hash-linked) header.\n\t */\n\tprivate async checkTransactions(\n\t\theader: StacksHeader,\n\t\tid: string,\n\t\tout: BlockVerification,\n\t): Promise<void> {\n\t\tif (isEpoch2Header(header)) {\n\t\t\tout.notes.push(\"epoch 2.x: transactions not checked\");\n\t\t\treturn;\n\t\t}\n\t\tconst raw =\n\t\t\tthis.raws.get(id) ??\n\t\t\t(await fetchFor(\"txs\", `block ${id}`, () => this.source.getBlock(id)));\n\t\tlet txs: BlockTransaction[] | null;\n\t\ttry {\n\t\t\ttxs = blockTransactions(raw, header);\n\t\t} catch (err) {\n\t\t\tif (!(err instanceof TransactionsError)) throw err;\n\t\t\treturn fail({ step: \"txs\", code: err.code, message: err.message });\n\t\t}\n\t\tif (txs === null) {\n\t\t\tout.notes.push(\n\t\t\t\t`transactions not checked: the source served block ${id}'s header only`,\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\t\tout.transactions = txs;\n\t\tthis.passed(\"txs\");\n\t}\n\n\t/**\n\t * The checkpoint chain's block id at `height`, from the nearest trusted\n\t * block above it: parent links when within MAX_WALK, else one MARF proof.\n\t */\n\tprivate async ancestor(\n\t\theight: number,\n\t): Promise<{ id: string; ancestry: Ancestry }> {\n\t\tconst known = this.below.get(height);\n\t\tif (known) return known;\n\t\tconst from = this.nearestAbove(height);\n\t\tif (from.height - height <= MAX_WALK) {\n\t\t\tconst walked = await this.walk(from, height);\n\t\t\tif (walked) return walked;\n\t\t}\n\t\treturn this.jump(this.nearestAbove(height), height);\n\t}\n\n\t/** The lowest trusted block above `height`: the checkpoint or one proven below it. */\n\tprivate nearestAbove(height: number): { height: number; id: string } {\n\t\tlet best = {\n\t\t\theight: Number(this.start.header.chainLength),\n\t\t\tid: this.start.id,\n\t\t};\n\t\tfor (const [h, { id }] of this.below)\n\t\t\tif (h > height && h < best.height) best = { height: h, id };\n\t\treturn best;\n\t}\n\n\t/**\n\t * Follow parent ids down from `from`: each parent header must hash to the\n\t * id its child committed to. Null when a 2.x header stops the walk: it\n\t * commits to its parent's block hash, not the parent's id.\n\t */\n\tprivate async walk(\n\t\tfrom: { height: number; id: string },\n\t\theight: number,\n\t): Promise<{ id: string; ancestry: Ancestry } | null> {\n\t\tconst ancestry: Ancestry = {\n\t\t\tfromHeight: from.height,\n\t\t\tfromBlockId: from.id,\n\t\t\tvia: \"parents\",\n\t\t};\n\t\tlet child = await this.header(from.id, \"ancestry\");\n\t\tfor (let h = from.height - 1; h >= height; h--) {\n\t\t\tif (isEpoch2Header(child)) return null;\n\t\t\tconst id = hex(child.parentBlockId);\n\t\t\tconst parent = await this.header(id, \"ancestry\", { blockId: id });\n\t\t\tif (Number(parent.chainLength) !== h)\n\t\t\t\tfail({\n\t\t\t\t\tstep: \"ancestry\",\n\t\t\t\t\tcode: \"height-mismatch\",\n\t\t\t\t\tmessage: `parent ${id} claims height ${parent.chainLength}, expected ${h}`,\n\t\t\t\t\tblockId: id,\n\t\t\t\t});\n\t\t\tthis.below.set(h, { id, ancestry });\n\t\t\tchild = parent;\n\t\t}\n\t\treturn this.below.get(height) ?? null;\n\t}\n\n\t/**\n\t * Read the id at `height` from `from`'s state: block `height + 1` wrote it\n\t * to `__MARF_BLOCK_HEIGHT_TO_HASH::<height>`, and the proof must recompute\n\t * `from`'s state root through the header of every trie it crosses.\n\t */\n\tprivate async jump(\n\t\tfrom: { height: number; id: string },\n\t\theight: number,\n\t): Promise<{ id: string; ancestry: Ancestry }> {\n\t\tconst at = { blockId: from.id };\n\t\tconst tip = await this.header(from.id, \"ancestry\", at);\n\t\tconst key = heightToHashKey(height);\n\t\tconst path = marfPath(key);\n\t\tconst answer = await fetchFor(\n\t\t\t\"ancestry\",\n\t\t\t`${key} at ${from.id}`,\n\t\t\t() => this.source.getMarfProof(hex(path), from.id),\n\t\t\tat,\n\t\t);\n\t\tif (!answer)\n\t\t\treturn fail({\n\t\t\t\tstep: \"ancestry\",\n\t\t\t\tcode: \"unavailable\",\n\t\t\t\tmessage: `source has no MARF proof of ${key} at block ${from.height}, ${from.height - height} blocks up; parent links reach ${MAX_WALK}`,\n\t\t\t\t...at,\n\t\t\t});\n\t\t// A block id fills the first 32 bytes of the MARFValue; the tail is zero.\n\t\tconst value = marfProofValue(answer.proof) ?? new Uint8Array();\n\t\tconst proven =\n\t\t\tvalue.length === MARF_VALUE_SIZE &&\n\t\t\tvalue.subarray(32).every((b) => b === 0) &&\n\t\t\t(await this.proveAt(tip, path, value, answer.proof, \"ancestry\", at));\n\t\tif (!proven)\n\t\t\treturn fail({\n\t\t\t\tstep: \"ancestry\",\n\t\t\t\tcode: \"ancestry-proof-invalid\",\n\t\t\t\tmessage: `${key} is not proven in block ${from.height}'s state`,\n\t\t\t\t...at,\n\t\t\t});\n\t\tconst ancestry: Ancestry = {\n\t\t\tfromHeight: from.height,\n\t\t\tfromBlockId: from.id,\n\t\t\tvia: \"marf\",\n\t\t};\n\t\tconst found = { id: hex(value.subarray(0, 32)), ancestry };\n\t\tthis.below.set(height, found);\n\t\treturn found;\n\t}\n\n\t/**\n\t * Below the checkpoint the hash chain already pins the block; still bind\n\t * its burn block when the Bitcoin checkpoint reaches it. The burn height\n\t * here is the source's hint, so a low one only skips this extra check.\n\t */\n\tprivate async bindBurnBelow(\n\t\theader: StacksHeader,\n\t\tout: BlockVerification,\n\t): Promise<void> {\n\t\tlet hint: number;\n\t\ttry {\n\t\t\thint = await this.burnHint(header);\n\t\t} catch (err) {\n\t\t\tout.notes.push(`burn block not checked: ${(err as Error).message}`);\n\t\t\treturn;\n\t\t}\n\t\tif (hint < this.chain.checkpointHeight) {\n\t\t\tout.notes.push(\n\t\t\t\t`burn block not checked: its height ${hint} is below the Bitcoin checkpoint ${this.chain.checkpointHeight}`,\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\t\tconst burn = await this.bindBurn(header, \"burn\");\n\t\tout.burnHeight = burn.burnHeight;\n\t\tout.bitcoinBlockHash = burn.hash;\n\t\tthis.passed(\"bitcoin\");\n\t\tthis.passed(\"burn\");\n\t}\n\n\t/** Witness against the authenticated header's root, then the named diff and rows. */\n\tprivate async verifyState(\n\t\theader: StacksHeader,\n\t\tid: string,\n\t\tout: BlockVerification,\n\t): Promise<void> {\n\t\tconst src = this.source;\n\t\tconst height = Number(header.chainLength);\n\t\tconst witness = await fetchFor(\"witness\", `witness ${id}`, () =>\n\t\t\tsrc.getWitness(id),\n\t\t);\n\t\tconst writes = await this.stateWrites(height, out.notes);\n\t\tif (writes) out.writes = writes;\n\t\tconst { getVmEvents }: Partial<ProofSource> = this.rows ? src : {};\n\t\tconst rows = getVmEvents\n\t\t\t? await fetchFor(\"rows\", `vm_events ${height}`, () =>\n\t\t\t\t\tgetVmEvents.call(src, height),\n\t\t\t\t)\n\t\t\t: undefined;\n\t\tconst parent = isEpoch2Header(header)\n\t\t\t? epoch2ParentId(witness, header)\n\t\t\t: header.parentBlockId;\n\t\tconst parentId = parent && hex(parent);\n\t\tconst state = await verifyBlockState({\n\t\t\theight,\n\t\t\t// Null only when the witness fails its root check, which fails the block.\n\t\t\tparentBlockId: parent ?? new Uint8Array(32),\n\t\t\tstateRoot: header.stateIndexRoot,\n\t\t\twitness,\n\t\t\twrites,\n\t\t\trows,\n\t\t\tparentLeaves: parentId\n\t\t\t\t? await this.parentLeaves(parentId, out.notes)\n\t\t\t\t: undefined,\n\t\t\tparentHolds: async (leaf) =>\n\t\t\t\tparentId ? this.parentHolds(parentId, leaf) : false,\n\t\t});\n\t\tout.diff = state.diff;\n\t\tif (rows) out.rowsChecked = state.rowsChecked;\n\t\tout.notes.push(...state.notes);\n\t\tout.failures.push(...state.failures);\n\t\t// Links pass in order up to the first one with a failure.\n\t\tconst broken = new Set(state.failures.map((f) => f.step));\n\t\tfor (const step of [\"witness\", \"names\", \"rows\"] as const) {\n\t\t\tif (broken.has(step) || (step === \"rows\" && !rows)) break;\n\t\t\tthis.passed(step);\n\t\t}\n\t}\n\n\t/**\n\t * The block's state writes, to name its diff. Optional evidence: a source\n\t * with none for the block (404, empty) or that fails leaves the diff\n\t * proven but unnamed, with a note, never a failure.\n\t */\n\tprivate async stateWrites(\n\t\theight: number,\n\t\tnotes: string[],\n\t): Promise<StateWrite[] | null> {\n\t\tconst { getStateWrites } = this.source;\n\t\tif (!getStateWrites) return null;\n\t\ttry {\n\t\t\tconst writes = await getStateWrites.call(this.source, height);\n\t\t\treturn writes?.length ? writes : null;\n\t\t} catch (err) {\n\t\t\tnotes.push(\n\t\t\t\t`state writes for block ${height} unavailable: ${(err as Error).message}`,\n\t\t\t);\n\t\t\treturn null;\n\t\t}\n\t}\n\n\t/** Header by id, from the cache or the source; it must hash to `id`. */\n\tprivate async header(\n\t\tid: string,\n\t\tstep: VerifyStep,\n\t\textra: Partial<VerifyFailure> = {},\n\t): Promise<StacksHeader> {\n\t\tconst known = this.headers.get(id);\n\t\tif (known) return known;\n\t\tconst header = await this.fetchHeader(id, step, extra);\n\t\tif (hex(blockId(header)) !== id)\n\t\t\tfail({\n\t\t\t\tstep,\n\t\t\t\tcode: \"id-mismatch\",\n\t\t\t\tmessage: `source returned another block for ${id}`,\n\t\t\t\tblockId: id,\n\t\t\t\t...extra,\n\t\t\t});\n\t\tthis.headers.set(id, header);\n\t\treturn header;\n\t}\n\n\t/**\n\t * A Nakamoto block by id, or when the source has none (epoch 2.x blocks are\n\t * not served as Nakamoto blocks) its epoch 2.x header.\n\t */\n\tprivate async fetchHeader(\n\t\tid: string,\n\t\tstep: VerifyStep,\n\t\textra: Partial<VerifyFailure>,\n\t): Promise<StacksHeader> {\n\t\tconst src = this.source;\n\t\tlet raw: Bytes;\n\t\ttry {\n\t\t\traw = await src.getBlock(id);\n\t\t\tthis.rememberRaw(id, raw);\n\t\t} catch (err) {\n\t\t\tconst reason = `block ${id}: ${(err as Error).message}`;\n\t\t\tconst { getEpoch2Header } = src;\n\t\t\tif (!getEpoch2Header)\n\t\t\t\treturn fail({ step, code: \"unavailable\", message: reason, ...extra });\n\t\t\tconst e2 = await fetchFor(\n\t\t\t\tstep,\n\t\t\t\t`${reason}; epoch 2.x header`,\n\t\t\t\t() => getEpoch2Header.call(src, id),\n\t\t\t\textra,\n\t\t\t);\n\t\t\ttry {\n\t\t\t\treturn parseEpoch2Header(e2.header, e2.consensusHash);\n\t\t\t} catch (parseErr) {\n\t\t\t\treturn fail({\n\t\t\t\t\tstep,\n\t\t\t\t\tcode: \"invalid-header\",\n\t\t\t\t\tmessage: `epoch 2.x header ${id} does not parse: ${(parseErr as Error).message}`,\n\t\t\t\t\t...extra,\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\treturn parseHeader(raw, step);\n\t}\n\n\t/**\n\t * Prove `value` at `path` in `tip`'s state, fetching the header of every\n\t * ancestor trie the proof crosses.\n\t */\n\tprivate async proveAt(\n\t\ttip: StacksHeader,\n\t\tpath: Bytes,\n\t\tvalue: Bytes,\n\t\tproof: Bytes,\n\t\tstep: VerifyStep,\n\t\textra: Partial<VerifyFailure> = {},\n\t): Promise<boolean> {\n\t\tconst headers = [tip];\n\t\tfor (const id of marfProofAncestors(proof))\n\t\t\theaders.push(await this.header(id, step, extra));\n\t\treturn verifyMarfProof({\n\t\t\tproof,\n\t\t\tpath,\n\t\t\tvalue,\n\t\t\troot: tip.stateIndexRoot,\n\t\t\theaders,\n\t\t});\n\t}\n\n\t/**\n\t * The parent's own trie leaves, from its witness checked against the\n\t * parent header. Optional evidence: when the source cannot serve it,\n\t * carried leaves fall back to per-leaf proofs (named) or stay unlabeled.\n\t */\n\tprivate async parentLeaves(\n\t\tparentId: string,\n\t\tnotes: string[],\n\t): Promise<WitnessLeaf[] | undefined> {\n\t\ttry {\n\t\t\tconst parent = await this.header(parentId, \"names\");\n\t\t\tconst w = parseWitness(await this.source.getWitness(parentId));\n\t\t\tif (bytesEqual(w.root, parent.stateIndexRoot)) return w.leaves;\n\t\t\tnotes.push(`parent witness ${parentId} root does not match its header`);\n\t\t} catch (err) {\n\t\t\tnotes.push(\n\t\t\t\t`parent witness ${parentId} unavailable: ${(err as Error).message}`,\n\t\t\t);\n\t\t}\n\t\treturn undefined;\n\t}\n\n\t/**\n\t * A carried leaf holds the parent's value. The parent header is\n\t * authenticated by hash: its id is committed in the authenticated child\n\t * (its header, or for 2.x its own trie).\n\t */\n\tprivate async parentHolds(\n\t\tparentId: string,\n\t\tleaf: WitnessLeaf,\n\t): Promise<boolean> {\n\t\tconst parent = await this.header(parentId, \"names\");\n\t\tconst pathHex = hex(leaf.path);\n\t\tconst answer = await fetchFor(\"names\", `MARF ${pathHex} at parent`, () =>\n\t\t\tthis.source.getMarfProof(pathHex, parentId),\n\t\t);\n\t\tif (!answer) return false;\n\t\tconst value = new Uint8Array(MARF_VALUE_SIZE);\n\t\tvalue.set(leaf.valueHash);\n\t\treturn this.proveAt(parent, leaf.path, value, answer.proof, \"names\");\n\t}\n\n\t/** Consensus hash -> PoW-verified burn block, via the sortition preimage. */\n\tprivate async bindBurn(\n\t\theader: StacksHeader,\n\t\tstep: VerifyStep,\n\t\textra: Partial<VerifyFailure> = {},\n\t): Promise<{ burnHeight: number; hash: string }> {\n\t\tconst ch = hex(header.consensusHash);\n\t\tconst known = this.burns.get(ch);\n\t\tif (known) return known;\n\t\tconst bp = await fetchFor(\n\t\t\tstep,\n\t\t\t`burn preimage ${ch}`,\n\t\t\t() => this.preimage(ch),\n\t\t\textra,\n\t\t);\n\t\tconst hash = verifyConsensusPreimage(header.consensusHash, bp.preimage);\n\t\tif (!hash)\n\t\t\treturn fail({\n\t\t\t\tstep,\n\t\t\t\tcode: \"preimage-mismatch\",\n\t\t\t\tmessage: `preimage does not hash to consensus hash ${ch}`,\n\t\t\t\t...extra,\n\t\t\t});\n\t\tif (bp.burnHeight < this.chain.checkpointHeight)\n\t\t\tfail({\n\t\t\t\tstep,\n\t\t\t\tcode: \"before-checkpoint\",\n\t\t\t\tmessage: `burn height ${bp.burnHeight} is below the Bitcoin checkpoint ${this.chain.checkpointHeight}`,\n\t\t\t\t...extra,\n\t\t\t});\n\t\tawait this.syncBitcoin(bp.burnHeight);\n\t\tconst burnHeight = this.chain.heightOf(hash);\n\t\tif (burnHeight === undefined)\n\t\t\treturn fail({\n\t\t\t\tstep,\n\t\t\t\tcode: \"burn-not-in-chain\",\n\t\t\t\tmessage: `burn block ${hash} is not in the verified Bitcoin chain (synced ${this.chain.checkpointHeight}..${this.chain.tip.height})`,\n\t\t\t\t...extra,\n\t\t\t});\n\t\tconst bound = { burnHeight, hash };\n\t\tthis.burns.set(ch, bound);\n\t\treturn bound;\n\t}\n\n\t/** Extend the Bitcoin chain to `height`, validating PoW, retarget and MTP. */\n\tprivate async syncBitcoin(height: number): Promise<void> {\n\t\twhile (this.chain.tip.height < height) {\n\t\t\tconst from = this.chain.tip.height + 1;\n\t\t\tconst count = Math.min(BITCOIN_BATCH, height - from + 1);\n\t\t\tconst headers = await fetchFor(\"bitcoin\", `bitcoin headers ${from}`, () =>\n\t\t\t\tthis.source.getBitcoinHeaders(from, count),\n\t\t\t);\n\t\t\tif (headers.length === 0)\n\t\t\t\tfail({\n\t\t\t\t\tstep: \"bitcoin\",\n\t\t\t\t\tcode: \"unavailable\",\n\t\t\t\t\tmessage: `source has no Bitcoin headers from ${from}`,\n\t\t\t\t});\n\t\t\ttry {\n\t\t\t\tthis.chain.append(headers);\n\t\t\t} catch (err) {\n\t\t\t\tif (!(err instanceof HeaderValidationError)) throw err;\n\t\t\t\tfail({ step: \"bitcoin\", code: \"invalid-header\", message: err.message });\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * The proven signer set for `cycle`. Walks forward from the checkpoint:\n\t * set c+1 is read from an anchor block in c+1's prepare phase, whose\n\t * header set c signed.\n\t */\n\tprivate async signerSet(\n\t\tcycle: number,\n\t\ttarget: SearchPoint,\n\t): Promise<SignerSet> {\n\t\tconst known = this.sets.get(cycle);\n\t\tif (known) return known;\n\t\tconst first = this.checkpoint.stacks.cycle;\n\t\tif (cycle < first)\n\t\t\tfail({\n\t\t\t\tstep: \"signer-set\",\n\t\t\t\tcode: \"before-checkpoint\",\n\t\t\t\tmessage: `cycle ${cycle} precedes the checkpoint's cycle ${first}`,\n\t\t\t\tcycle,\n\t\t\t});\n\t\tlet lo = await this.startPoint();\n\t\tfor (let c = first; c < cycle; c++) {\n\t\t\tconst next = this.sets.get(c + 1);\n\t\t\tif (next) {\n\t\t\t\tlo = this.anchors.get(c + 1) ?? lo;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst anchor = await this.locateAnchor(c + 1, lo, target);\n\t\t\tthis.sets.set(c + 1, await this.proveNextSet(c + 1, anchor));\n\t\t\tthis.anchors.set(c + 1, anchor);\n\t\t\tlo = anchor;\n\t\t}\n\t\treturn this.sets.get(cycle) as SignerSet;\n\t}\n\n\t/** The checkpoint block as a search bound; its burn height is a source hint. */\n\tprivate async startPoint(): Promise<SearchPoint> {\n\t\tconst { header } = this.start;\n\t\tconst height = Number(header.chainLength);\n\t\ttry {\n\t\t\treturn { height, burn: await this.burnHint(header) };\n\t\t} catch {\n\t\t\treturn { height };\n\t\t}\n\t}\n\n\tprivate async burnHint(header: StacksHeader): Promise<number> {\n\t\tconst ch = hex(header.consensusHash);\n\t\treturn (\n\t\t\tthis.burns.get(ch)?.burnHeight ?? (await this.preimage(ch)).burnHeight\n\t\t);\n\t}\n\n\tprivate async preimage(ch: string): Promise<BurnPreimage> {\n\t\tlet bp = this.preimages.get(ch);\n\t\tif (!bp) {\n\t\t\tbp = await this.source.getBurnPreimage(ch);\n\t\t\tthis.preimages.set(ch, bp);\n\t\t}\n\t\treturn bp;\n\t}\n\n\tprivate async locateAnchor(\n\t\tcycle: number,\n\t\tlo: SearchPoint,\n\t\thi: SearchPoint,\n\t): Promise<Probe> {\n\t\tconst start = cycleStart(cycle);\n\t\tconst window = [start - MAINNET_PREPARE_LENGTH, start] as const;\n\t\tconst probe = async (h: number): Promise<Probe> => {\n\t\t\tconst raw = await fetchFor(\n\t\t\t\t\"signer-set\",\n\t\t\t\t`block at height ${h}`,\n\t\t\t\t() => this.source.getBlock(h),\n\t\t\t\t{ cycle },\n\t\t\t);\n\t\t\tconst header = parseHeader(raw, \"signer-set\");\n\t\t\tconst id = hex(blockId(header));\n\t\t\tthis.headers.set(id, header);\n\t\t\tconst burn = await fetchFor(\n\t\t\t\t\"signer-set\",\n\t\t\t\t`burn hint for block ${id}`,\n\t\t\t\t() => this.burnHint(header),\n\t\t\t\t{ cycle, blockId: id },\n\t\t\t);\n\t\t\treturn { height: Number(header.chainLength), burn, header, id };\n\t\t};\n\t\tconst anchor = await findAnchor(lo, hi, window, probe);\n\t\tif (!anchor)\n\t\t\treturn fail({\n\t\t\t\tstep: \"signer-set\",\n\t\t\t\tcode: \"anchor-not-found\",\n\t\t\t\tmessage: `no block with a burn height in ${window[0]}..${window[1] - 1} (cycle ${cycle} prepare phase) between heights ${lo.height} and ${hi.height}`,\n\t\t\t\tcycle,\n\t\t\t});\n\t\treturn anchor;\n\t}\n\n\t/**\n\t * Set `cycle` from `anchor`: the anchor must be bound to a burn block in\n\t * `cycle`'s prepare phase, be signed by the set of the cycle that burn\n\t * height dictates (`cycle - 1`), and hold set `cycle` in its state (MARF\n\t * proof). Adjacent sets overlap enough that one block can clear both, so\n\t * the set is always chosen by proven burn height, never by which passes.\n\t */\n\tprivate async proveNextSet(cycle: number, anchor: Probe): Promise<SignerSet> {\n\t\tconst at = { cycle, blockId: anchor.id };\n\t\tconst { burnHeight } = await this.bindBurn(anchor.header, \"signer-set\", at);\n\t\tconst start = cycleStart(cycle);\n\t\tif (burnHeight < start - MAINNET_PREPARE_LENGTH || burnHeight >= start)\n\t\t\tfail({\n\t\t\t\tstep: \"signer-set\",\n\t\t\t\tcode: \"anchor-outside-window\",\n\t\t\t\tmessage: `anchor burn height ${burnHeight} is outside cycle ${cycle}'s prepare phase ${start - MAINNET_PREPARE_LENGTH}..${start - 1}`,\n\t\t\t\t...at,\n\t\t\t});\n\t\tconst signing = rewardCycle(burnHeight);\n\t\tconst sig = verifySignerSignatures(\n\t\t\tanchor.header,\n\t\t\tthis.sets.get(signing) as SignerSet,\n\t\t);\n\t\tif (!sig.valid)\n\t\t\tfail({\n\t\t\t\t...signatureFailure(sig, \"signer-set\", signing),\n\t\t\t\t...at,\n\t\t\t\tcode: \"anchor-unsigned\",\n\t\t\t});\n\n\t\tconst path = marfPath(\n\t\t\tmapEntryKey(SIGNERS_CONTRACT, \"cycle-signer-set\", uintCV(cycle)),\n\t\t);\n\t\tconst answer = await fetchFor(\n\t\t\t\"signer-set\",\n\t\t\t`signer set ${cycle} at ${anchor.id}`,\n\t\t\t() => this.source.getMarfProof(hex(path), anchor.id),\n\t\t\tat,\n\t\t);\n\t\tconst value = answer?.data.replace(/^0x/, \"\") ?? \"\";\n\t\tconst proven =\n\t\t\tanswer !== null &&\n\t\t\t(await this.proveAt(\n\t\t\t\tanchor.header,\n\t\t\t\tpath,\n\t\t\t\tmarfValue(value),\n\t\t\t\tanswer.proof,\n\t\t\t\t\"signer-set\",\n\t\t\t\tat,\n\t\t\t));\n\t\tif (!proven)\n\t\t\tfail({\n\t\t\t\tstep: \"signer-set\",\n\t\t\t\tcode: \"set-proof-invalid\",\n\t\t\t\tmessage: `signer set ${cycle} is not proven in anchor ${anchor.id}'s state`,\n\t\t\t\t...at,\n\t\t\t});\n\t\tlet set: SignerSet;\n\t\ttry {\n\t\t\tset = decodeSignerSet(value);\n\t\t} catch (err) {\n\t\t\treturn fail({\n\t\t\t\tstep: \"signer-set\",\n\t\t\t\tcode: \"set-proof-invalid\",\n\t\t\t\tmessage: `signer set ${cycle}: ${(err as Error).message}`,\n\t\t\t\t...at,\n\t\t\t});\n\t\t}\n\t\treturn set;\n\t}\n}\n\n/** The authenticated header's identity fields, for callers that rebuild the block. */\nfunction describeHeader(header: StacksHeader, out: BlockVerification): void {\n\tout.stateRoot = hex(header.stateIndexRoot);\n\tout.consensusHash = hex(header.consensusHash);\n\tif (!isEpoch2Header(header)) {\n\t\tout.blockHash = hex(signerSignatureHash(header));\n\t\tout.timestamp = Number(header.timestamp);\n\t}\n}\n\nfunction parseHeader(raw: Bytes, step: VerifyStep): NakamotoHeader {\n\ttry {\n\t\treturn parseNakamotoHeader(raw);\n\t} catch (err) {\n\t\treturn fail({\n\t\t\tstep,\n\t\t\tcode: \"invalid-header\",\n\t\t\tmessage: `block bytes do not parse: ${(err as Error).message}`,\n\t\t});\n\t}\n}\n\n/**\n * A 2.x header commits only to its parent's block hash; the parent's id is in\n * the block's own trie at `__MARF_BLOCK_HEIGHT_TO_HASH::<height - 1>`. Read\n * from a witness whose root matches the header, else null.\n */\nfunction epoch2ParentId(witness: Bytes, header: Epoch2Header): Bytes | null {\n\tconst height = Number(header.chainLength);\n\tif (height === 0) return null;\n\ttry {\n\t\tconst w = parseWitness(witness);\n\t\tif (!bytesEqual(w.root, header.stateIndexRoot)) return null;\n\t\tconst path = marfPath(heightToHashKey(height - 1));\n\t\treturn w.leaves.find((l) => bytesEqual(l.path, path))?.valueHash ?? null;\n\t} catch {\n\t\treturn null;\n\t}\n}\n\nfunction signatureFailure(\n\tsig: ReturnType<typeof verifySignerSignatures>,\n\tstep: VerifyStep,\n\tcycle: number,\n): VerifyFailure {\n\tconst weight = `${sig.signedWeight}/${sig.totalWeight} signed, threshold ${sig.threshold}`;\n\tif (sig.unknown.length)\n\t\treturn {\n\t\t\tstep,\n\t\t\tcode: \"unknown-signer\",\n\t\t\tmessage: `${sig.unknown.length} signer(s) not in cycle ${cycle}'s set (${weight})`,\n\t\t\tcycle,\n\t\t};\n\tif (sig.duplicates.length)\n\t\treturn {\n\t\t\tstep,\n\t\t\tcode: \"duplicate-signer\",\n\t\t\tmessage: `${sig.duplicates.length} duplicate signature(s) (${weight})`,\n\t\t\tcycle,\n\t\t};\n\tif (sig.invalid)\n\t\treturn {\n\t\t\tstep,\n\t\t\tcode: \"bad-signature\",\n\t\t\tmessage: `${sig.invalid} signature(s) do not recover (${weight})`,\n\t\t\tcycle,\n\t\t};\n\treturn {\n\t\tstep,\n\t\tcode: \"below-threshold\",\n\t\tmessage: `cycle ${cycle} signers: ${weight}`,\n\t\tcycle,\n\t};\n}\n\n/** One-shot: verify a block from a checkpoint (MAINNET_CHECKPOINT by default). */\nexport const verifyBlock = (\n\tref: string | number,\n\topts: VerifyOptions,\n): Promise<BlockVerification> => new BlockVerifier(opts).verify(ref);\n"
|
|
21
21
|
],
|
|
22
|
-
"mappings": ";AACA;AACA;AAIO,IAAM,MAAM,CAAC,MAAqB,WAAW,CAAC;AAG9C,IAAM,QAAQ,CAAC,MACrB,WAAW,EAAE,WAAW,IAAI,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC;AAExC,IAAM,SAAS,CAAC,UAA0B,YAAY,GAAG,KAAK;AAE9D,IAAM,aAAa,CAAC,GAAU,MAAsB;AAAA,EAC1D,IAAI,EAAE,WAAW,EAAE;AAAA,IAAQ,OAAO;AAAA,EAClC,SAAS,IAAI,EAAG,IAAI,EAAE,QAAQ;AAAA,IAAK,IAAI,EAAE,OAAO,EAAE;AAAA,MAAI,OAAO;AAAA,EAC7D,OAAO;AAAA;AAID,IAAM,UAAU,CAAC,UAA0B;AAAA,EACjD,MAAM,IAAI,WAAW,OAAO;AAAA,EAC5B,WAAW,KAAK;AAAA,IAAO,EAAE,OAAO,CAAC;AAAA,EACjC,OAAO,EAAE,OAAO;AAAA;AAAA;AAIV,MAAM,OAAO;AAAA,EAEE;AAAA,EADrB,MAAM;AAAA,EACN,WAAW,CAAU,KAAY;AAAA,IAAZ;AAAA;AAAA,EAErB,KAAK,CAAC,GAAkB;AAAA,IACvB,IAAI,IAAI,KAAK,KAAK,MAAM,IAAI,KAAK,IAAI;AAAA,MACpC,MAAM,IAAI,MAAM,8BAA8B,KAAK,eAAe,GAAG;AAAA,IACtE,MAAM,MAAM,KAAK,IAAI,SAAS,KAAK,KAAK,KAAK,MAAM,CAAC;AAAA,IACpD,KAAK,OAAO;AAAA,IACZ,OAAO;AAAA;AAAA,EAGA,IAAI,CAAC,GAAqB;AAAA,IACjC,MAAM,IAAI,KAAK,MAAM,CAAC;AAAA,IACtB,OAAO,IAAI,SAAS,EAAE,QAAQ,EAAE,YAAY,CAAC;AAAA;AAAA,EAG9C,KAAK,MAAc,KAAK,MAAM,CAAC,EAAE;AAAA,EACjC,MAAM,MAAc,KAAK,KAAK,CAAC,EAAE,UAAU,CAAC;AAAA,EAC5C,MAAM,MAAc,KAAK,KAAK,CAAC,EAAE,UAAU,CAAC;AAAA,EAC5C,MAAM,MAAc,KAAK,KAAK,CAAC,EAAE,aAAa,CAAC;AAAA,EAC/C,MAAM,MAAc,KAAK,KAAK,CAAC,EAAE,YAAY,CAAC;AAAA,EAG9C,GAAM,CAAC,MAAe,KAAkB;AAAA,IACvC,MAAM,IAAI,KAAK,IAAI;AAAA,IACnB,IAAI,IAAI;AAAA,MAAK,MAAM,IAAI,MAAM,cAAc,aAAa,KAAK;AAAA,IAC7D,OAAO,MAAM,KAAK,EAAE,QAAQ,EAAE,GAAG,IAAI;AAAA;AAAA,MAGlC,IAAI,GAAY;AAAA,IACnB,OAAO,KAAK,QAAQ,KAAK,IAAI;AAAA;AAE/B;;AC1DA,uBAAS;AAuBT,IAAM,iCAAiC;AACvC,IAAM,cAAc;AACpB,IAAM,sBAAsB,KAAK;AAM1B,SAAS,mBAAmB,CAAC,KAA4B;AAAA,EAC/D,MAAM,IAAI,IAAI,OAAO,GAAG;AAAA,EACxB,MAAM,UAAU,EAAE,GAAG;AAAA,EACrB,MAAM,cAAc,EAAE,IAAI;AAAA,EAC1B,MAAM,YAAY,EAAE,IAAI;AAAA,EACxB,MAAM,gBAAgB,EAAE,MAAM,EAAE;AAAA,EAChC,MAAM,gBAAgB,EAAE,MAAM,EAAE;AAAA,EAChC,MAAM,eAAe,EAAE,MAAM,EAAE;AAAA,EAC/B,MAAM,iBAAiB,EAAE,MAAM,EAAE;AAAA,EACjC,MAAM,YAAY,EAAE,IAAI;AAAA,EACxB,MAAM,iBAAiB,EAAE,MAAM,EAAE;AAAA,EACjC,MAAM,WAAW,EAAE;AAAA,EACnB,MAAM,mBAAmB,EAAE,IAAI,MAAM,EAAE,MAAM,EAAE,GAAG,WAAW;AAAA,EAC7D,MAAM,SAAS,EAAE;AAAA,EAEjB,MAAM,OAAO,EAAE,IAAI;AAAA,EACnB,IAAI,SAAS,KAAK,OAAO;AAAA,IACxB,MAAM,IAAI,MAAM,4BAA4B,MAAM;AAAA,EACnD,MAAM,WAAW,KAAK,KAAK,OAAO,CAAC;AAAA,EACnC,IAAI,EAAE,IAAI,MAAM;AAAA,IAAU,MAAM,IAAI,MAAM,+BAA+B;AAAA,EACzE,EAAE,MAAM,QAAQ;AAAA,EAChB,KAAK,UAAU,QAAS,gCAAgC;AAAA,IAEvD,EAAE,IAAI,MAAM,EAAE,MAAM,CAAC,GAAG,mBAAmB;AAAA,EAC5C;AAAA,EACA,MAAM,MAAM,EAAE;AAAA,EACd,OAAO;AAAA,IACN;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,uBAAuB,OAAO;AAAA,MAC7B,IAAI,SAAS,GAAG,QAAQ;AAAA,MACxB,IAAI,SAAS,QAAQ,GAAG;AAAA,IACzB,CAAC;AAAA,IACD,YAAY;AAAA,EACb;AAAA;AAOM,IAAM,sBAAsB,CAAC,MACnC,YAAW,EAAE,qBAAqB;AA6B5B,IAAM,uBAAuB;AAO7B,SAAS,iBAAiB,CAChC,KACA,eACe;AAAA,EACf,IAAI,cAAc,WAAW;AAAA,IAC5B,MAAM,IAAI,MAAM,qBAAqB,cAAc,sBAAsB;AAAA,EAC1E,MAAM,IAAI,IAAI,OAAO,GAAG;AAAA,EACxB,MAAM,SAA4D;AAAA,IACjE,SAAS,EAAE,GAAG;AAAA,IACd,WAAW,EAAE,IAAI;AAAA,IACjB,aAAa,EAAE,IAAI;AAAA,IACnB,UAAU,EAAE,MAAM,EAAE;AAAA,IACpB,iBAAiB,EAAE,MAAM,EAAE;AAAA,IAC3B,kBAAkB,EAAE,MAAM,EAAE;AAAA,IAC5B,0BAA0B,EAAE,IAAI;AAAA,IAChC,cAAc,EAAE,MAAM,EAAE;AAAA,IACxB,gBAAgB,EAAE,MAAM,EAAE;AAAA,IAC1B,sBAAsB,EAAE,MAAM,EAAE;AAAA,EACjC;AAAA,EACA,OAAO;AAAA,OACH;AAAA,IACH,WAAW,YAAW,IAAI,SAAS,GAAG,oBAAoB,CAAC;AAAA,IAC3D;AAAA,EACD;AAAA;AAGM,IAAM,iBAAiB,CAAC,OAC9B,qBAAqB;AAOf,IAAM,UAAU,CAAC,MACvB,QAAQ;AAAA,EACP,eAAe,CAAC,IAAI,EAAE,YAAY,oBAAoB,CAAC;AAAA,EACvD,EAAE;AACH,CAAC;;AC3JF,uBAAS;AAYF,IAAM,kBAAkB;AAExB,IAAM,SAAS;AAAA,EACrB,OAAO;AAAA,EACP,MAAM;AAAA,EACN,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,SAAS;AACV;AAGO,IAAM,iBAAmD;AAAA,GAC9D,OAAO,QAAQ;AAAA,GACf,OAAO,SAAS;AAAA,GAChB,OAAO,SAAS;AAAA,GAChB,OAAO,UAAU;AACnB;AAGO,IAAM,YAAY,CAAC,QAAyB,KAAK,SAAU;AAgB3D,IAAM,WAAW,CAAC,QACxB,YAAW,IAAI,YAAY,EAAE,OAAO,GAAG,CAAC;AAOlC,IAAM,kBAAkB,CAAC,WAC/B,gCAAgC;AAG1B,SAAS,SAAS,CAAC,OAAsB;AAAA,EAC/C,MAAM,IAAI,IAAI,WAAW,eAAe;AAAA,EACxC,EAAE,IAAI,YAAW,IAAI,YAAY,EAAE,OAAO,KAAK,CAAC,CAAC;AAAA,EACjD,OAAO;AAAA;AAKR,SAAS,YAAY,CAAC,MAAoB;AAAA,EACzC,IAAI,KAAK,SAAS;AAAA,IAAI,MAAM,IAAI,MAAM,gCAAgC;AAAA,EACtE,OAAO,OAAO,CAAC,WAAW,GAAG,KAAK,MAAM,GAAG,IAAI,CAAC;AAAA;AAI1C,IAAM,WAAW,CAAC,MAAa,UACrC,QAAQ,CAAC,WAAW,GAAG,OAAO,IAAI,GAAG,aAAa,IAAI,GAAG,KAAK,CAAC;AAGzD,SAAS,QAAQ,CAAC,MAAgB,UAA0B;AAAA,EAClE,MAAM,QAAiB,CAAC,WAAW,GAAG,KAAK,EAAE,CAAC;AAAA,EAC9C,WAAW,KAAK,KAAK;AAAA,IACpB,MAAM,KAAK,WAAW,GAAG,EAAE,IAAI,EAAE,GAAG,GAAG,EAAE,SAAS;AAAA,EACnD,MAAM,KAAK,aAAa,KAAK,IAAI,GAAG,GAAG,QAAQ;AAAA,EAC/C,OAAO,QAAQ,KAAK;AAAA;AAMrB,IAAM,aAAa;AAAA,EAClB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACD;AACA,IAAM,YAAsC;AAAA,EAC3C,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,SAAS;AACV;AAaA,SAAS,WAAW,CAAC,OAA2B;AAAA,EAC/C,MAAM,IAAI,IAAI,OAAO,KAAK;AAAA,EAC1B,MAAM,OAAO,MAAM,EAAE,MAAM,EAAE;AAAA,EAC7B,MAAM,QAAQ,EAAE,IAAI,MAAiB;AAAA,IACpC,MAAM,OAAO,WAAW,EAAE,GAAG;AAAA,IAC7B,IAAI,CAAC;AAAA,MAAM,MAAM,IAAI,MAAM,qBAAqB;AAAA,IAChD,IAAI,SAAS;AAAA,MACZ,OAAO,EAAE,MAAM,KAAK,EAAE,IAAI,GAAG,QAAQ,EAAE,IAAI,MAAM,KAAK,EAAE,EAAE;AAAA,IAC3D,MAAM,MAAM,EAAE,GAAG;AAAA,IACjB,IAAI,SAAS;AAAA,MACZ,OAAO;AAAA,QACN;AAAA,QACA;AAAA,QACA,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAAA,QACrB,OAAO,EAAE,MAAM,eAAe;AAAA,MAC/B;AAAA,IACD,MAAM,OAAiB;AAAA,MACtB,IAAI,EAAE,GAAG;AAAA,MACT,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAAA,MACrB,MAAM,EAAE,IACP,OAAO,EAAE,IAAI,EAAE,GAAG,GAAG,KAAK,EAAE,GAAG,GAAG,WAAW,EAAE,MAAM,EAAE,EAAE,IACzD,GACD;AAAA,IACD;AAAA,IACA,MAAM,SAAS,MAAM,KAAK,EAAE,QAAQ,UAAU,QAAQ,EAAE,GAAG,IAAI;AAAA,IAC/D,OAAO,EAAE,MAAM,KAAK,MAAM,OAAO;AAAA,KAC/B,KAAK,EAAE;AAAA,EACV,IAAI,CAAC,EAAE;AAAA,IAAM,MAAM,IAAI,MAAM,4BAA4B;AAAA,EACzD,OAAO;AAAA;AAKR,IAAM,UAAU,CAAC,MAChB,GAAG,SAAS;AAEb,IAAM,aAAa,CAAC,GAAgB,MAAc;AAAA,EACjD,IAAI,IAAI,IAAI;AAAA,EACZ,OAAO,IAAI,EAAE,UAAU,CAAC,QAAQ,EAAE,EAAE;AAAA,IAAG;AAAA,EACvC,OAAO;AAAA;AAGR,SAAS,gBAAgB,CAAC,MAAgB,WAAgC;AAAA,EACzE,MAAM,QAAQ,UAAU,KAAK;AAAA,EAC7B,IAAI,KAAK,KAAK,KAAK,WAAW;AAAA,IAAO,OAAO;AAAA,EAC5C,MAAM,MAAe,CAAC;AAAA,EACtB,IAAI,KAAK;AAAA,EACT,WAAW,KAAK,KAAK,KAAK,MAAM;AAAA,IAC/B,IAAI,EAAE,OAAO,OAAO,SAAS,EAAE,QAAQ,KAAK;AAAA,MAAK,IAAI,KAAK,SAAS;AAAA,IAC9D;AAAA,MACJ,MAAM,IAAI,KAAK,OAAO;AAAA,MACtB,IAAI,CAAC;AAAA,QAAG,OAAO;AAAA,MACf,IAAI,KAAK,CAAC;AAAA;AAAA,EAEZ;AAAA,EACA,OAAO,IAAI,WAAW,QAAQ,SAAS,KAAK,MAAM,GAAG,IAAI;AAAA;AAG1D,SAAS,aAAa,CAAC,KAAkB,OAA4B;AAAA,EACpE,IAAI,IAAkB;AAAA,EACtB,WAAW,KAAK,KAAK;AAAA,IACpB,IAAI,EAAE,SAAS,WAAW,CAAC;AAAA,MAAG,OAAO;AAAA,IACrC,IAAI,EAAE,SAAS,SAAS,SAAS,EAAE,MAAM,EAAE,KAAK,IAAI,iBAAiB,GAAG,CAAC;AAAA,EAC1E;AAAA,EACA,OAAO;AAAA;AAGR,SAAS,iBAAiB,CAAC,KAAgC;AAAA,EAC1D,MAAM,QAAiB,CAAC;AAAA,EACxB,WAAW,KAAK,KAAK;AAAA,IACpB,IAAI,EAAE,SAAS;AAAA,MAAS,OAAO;AAAA,IAE/B,IAAI,EAAE,SAAS;AAAA,MAAQ,MAAM,KAAK,EAAE,IAAI;AAAA,IACnC;AAAA,YAAM,KAAK,WAAW,GAAG,EAAE,GAAG,GAAG,EAAE,KAAK,IAAI;AAAA,EAClD;AAAA,EACA,OAAO,OAAO,MAAM,QAAQ,CAAC;AAAA;AAG9B,SAAS,YAAY,CAAC,GAAgB,cAA8B;AAAA,EACnE,IAAI,EAAE,IAAI,SAAS;AAAA,IAAQ,OAAO;AAAA,EAClC,IAAI,IAAI;AAAA,EACR,IAAI,OAAc,IAAI;AAAA,EACtB,OAAO,IAAI,EAAE,QAAQ;AAAA,IACpB,MAAM,IAAI,WAAW,GAAG,CAAC;AAAA,IACzB,MAAM,SAAS,kBAAkB,EAAE,MAAM,GAAG,CAAC,CAAC;AAAA,IAC9C,IAAI,CAAC;AAAA,MAAQ,OAAO;AAAA,IACpB,IAAI,MAAM,GAAG;AAAA,MACZ,IAAI,CAAC,WAAW,QAAQ,YAAY;AAAA,QAAG,OAAO;AAAA,MAC9C,OAAO;AAAA,IACR,EAAO,SACN,OAAO,SAAS,KAAK,UACrB,CAAC,WAAW,KAAK,SAAS,GAAG,OAAO,MAAM,GAAG,MAAM;AAAA,MAEnD,OAAO;AAAA,IACR,IAAI;AAAA,IACJ,IAAI,KAAK,EAAE;AAAA,MAAQ,OAAO;AAAA,IAC1B,IAAI,IAAI,IAAI;AAAA,IACZ,OAAO,IAAI,EAAE,UAAU,QAAQ,EAAE,EAAE;AAAA,MAAG;AAAA,IACtC,IAAI;AAAA,EACL;AAAA,EACA,OAAO;AAAA;AAIR,SAAS,SAAS,CACjB,MACA,KACA,UACA,QACe;AAAA,EACf,IAAI,QAAQ;AAAA,IAAI,OAAO;AAAA,EACvB,MAAM,MAAe,OAAO,CAAC,IAAI,IAAI,CAAC;AAAA,EACtC,IAAI,KAAK;AAAA,EACT,SAAS,IAAI,EAAG,IAAI,OAAO,SAAS,GAAG,KAAK;AAAA,IAC3C,IAAI,MAAM,OAAO,OAAO,CAAC;AAAA,MAAG,IAAI,KAAK,QAAQ;AAAA,IACxC;AAAA,MACJ,MAAM,IAAI,OAAO;AAAA,MACjB,IAAI,CAAC;AAAA,QAAG,OAAO;AAAA,MACf,IAAI,KAAK,CAAC;AAAA;AAAA,EAEZ;AAAA,EACA,OAAO,QAAQ,GAAG;AAAA;AAGnB,SAAS,WAAW,CACnB,OACA,MACA,OACA,MACA,aACU;AAAA,EACV,IAAI,CAAC,aAAa,OAAO,IAAI;AAAA,IAAG,OAAO;AAAA,EACvC,MAAM,QAAQ,MAAM;AAAA,EACpB,IAAI,OAAO,SAAS,UAAU,CAAC,WAAW,MAAM,OAAO,KAAK;AAAA,IAAG,OAAO;AAAA,EAEtE,IAAI,IAAI;AAAA,EACR,IAAI,IAAI,WAAW,OAAO,CAAC;AAAA,EAC3B,MAAM,WAAW,cAChB,MAAM,MAAM,GAAG,CAAC,GAChB,SAAS,MAAM,MAAM,MAAM,KAAK,CACjC;AAAA,EACA,IAAI,CAAC;AAAA,IAAU,OAAO;AAAA,EAGtB,IAAI;AAAA,EACJ,MAAM,OAAO,MAAM;AAAA,EACnB,IAAI,CAAC,QAAQ,IAAI,KAAK,KAAK,QAAQ;AAAA,IAAI,OAAO;AAAA,EAC9C,IAAI,WACH,KAAK,OAAO,WAAW,IAAI,WAAW,QAAQ,CAAC,UAAU,GAAG,KAAK,MAAM,CAAC;AAAA,EAEzE,KAAK;AAAA,EACL,IAAI,KAAK,MAAM;AAAA,IAAQ,OAAO,WAAW,MAAM,QAAQ;AAAA,EACvD,IAAI,YAAY,YAAY,IAAI,IAAI,QAAQ,CAAC;AAAA,EAC7C,IAAI,CAAC,aAAa,QAAQ,MAAM,EAAE;AAAA,IAAG,OAAO;AAAA,EAE5C,OAAO,IAAI,MAAM,QAAQ;AAAA,IACxB,IAAI,WAAW,OAAO,CAAC;AAAA,IAEvB,MAAM,eAAe,cAAc,MAAM,MAAM,GAAG,CAAC,GAAG,SAAS;AAAA,IAC/D,IAAI,CAAC;AAAA,MAAc,OAAO;AAAA,IAC1B,IAAI;AAAA,IACJ,IAAI,KAAK,MAAM;AAAA,MAAQ,OAAO;AAAA,IAE9B,IAAI;AAAA,IACJ,OAAO,IAAI,MAAM,QAAQ;AAAA,MACxB,MAAM,IAAI,MAAM;AAAA,MAChB,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,QAAQ;AAAA,QAAI;AAAA,MACjC;AAAA,IACD;AAAA,IACA,KAAK;AAAA,IACL,IAAI,IAAI;AAAA,MAAG,OAAO;AAAA,IAClB,IAAI,cAAc;AAAA,IAClB,WAAW,KAAK,MAAM,MAAM,GAAG,CAAC,GAAG;AAAA,MAClC,IAAI,CAAC,QAAQ,CAAC;AAAA,QAAG,OAAO;AAAA,MACxB,MAAM,IAAI,UAAU,MAAM,EAAE,KAAK,aAAa,EAAE,MAAM;AAAA,MACtD,IAAI,CAAC;AAAA,QAAG,OAAO;AAAA,MACf,cAAc;AAAA,IACf;AAAA,IACA,MAAM,WAAW,MAAM;AAAA,IACvB,IAAI,CAAC,QAAQ,QAAQ;AAAA,MAAG,OAAO;AAAA,IAC/B,MAAM,OAAO,UACZ,cACA,SAAS,KACT,aACA,SAAS,MACV;AAAA,IACA,IAAI,CAAC;AAAA,MAAM,OAAO;AAAA,IAClB,WAAW;AAAA,IACX,YAAY,YAAY,IAAI,IAAI,QAAQ,CAAC;AAAA,IACzC,IAAI,CAAC;AAAA,MAAW,OAAO;AAAA,IACvB,IAAI,IAAI;AAAA,IACR,IAAI,WAAW,UAAU,IAAI;AAAA,MAAG;AAAA,EACjC;AAAA,EACA,OAAO,WAAW,MAAM,QAAQ;AAAA;AAU1B,SAAS,kBAAkB,CAAC,OAAwB;AAAA,EAC1D,IAAI;AAAA,EACJ,IAAI;AAAA,IACH,QAAQ,YAAY,KAAK;AAAA,IACxB,MAAM;AAAA,IACP,OAAO,CAAC;AAAA;AAAA,EAET,MAAM,MAAM,IAAI;AAAA,EAChB,WAAW,KAAK,OAAO;AAAA,IACtB,IAAI,EAAE,SAAS,UAAU,EAAE,SAAS;AAAA,MAAS;AAAA,IAC7C,MAAM,MAAM,EAAE,KAAK,KAAK,KACvB,CAAC,MAAM,EAAE,OAAO,OAAO,SAAS,EAAE,QAAQ,EAAE,GAC7C;AAAA,IACA,IAAI,OAAO,UAAU,IAAI,EAAE;AAAA,MAAG,IAAI,IAAI,IAAI,IAAI,SAAS,CAAC;AAAA,EACzD;AAAA,EACA,OAAO,CAAC,GAAG,GAAG;AAAA;AAQR,SAAS,cAAc,CAAC,OAA4B;AAAA,EAC1D,IAAI;AAAA,IACH,MAAM,OAAO,YAAY,KAAK,EAAE;AAAA,IAChC,OAAO,MAAM,SAAS,SAAS,KAAK,QAAQ;AAAA,IAC3C,MAAM;AAAA,IACP,OAAO;AAAA;AAAA;AA2BF,SAAS,eAAe,CAAC,OAAgC;AAAA,EAC/D,MAAM,cAAc,IAAI;AAAA,EACxB,WAAW,KAAK,MAAM;AAAA,IACrB,YAAY,IAAI,IAAI,EAAE,cAAc,GAAG,QAAQ,CAAC,CAAC;AAAA,EAClD,IAAI;AAAA,IACH,MAAM,QAAQ,YAAY,MAAM,KAAK;AAAA,IACrC,OAAO,YAAY,OAAO,MAAM,MAAM,MAAM,OAAO,MAAM,MAAM,WAAW;AAAA,IACzE,MAAM;AAAA,IACP,OAAO;AAAA;AAAA;;ACjWT,IAAM,kBAAkB;AACxB,IAAM,WAAW;AAEV,IAAM,kBAA8B,MAC1C,kEACD;AACA,IAAM,aAAa,IAAI,WAAW,EAAE;AAsB7B,SAAS,YAAY,CAAC,OAA4B;AAAA,EACxD,MAAM,IAAI,IAAI,OAAO,KAAK;AAAA,EAC1B,MAAM,UAAU,EAAE,GAAG;AAAA,EACrB,IAAI,YAAY;AAAA,IACf,MAAM,IAAI,MAAM,+BAA+B,SAAS;AAAA,EACzD,MAAM,gBAAgB,MAAM,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,MAAM,EAAE,MAAM,EAAE,CAAC;AAAA,EACvE,MAAM,aAAa,MAAM,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,MAAM,EAAE,MAAM,EAAE,CAAC;AAAA,EACpE,MAAM,SAAwB,CAAC;AAAA,EAC/B,MAAM,OAAO,IAAI;AAAA,EACjB,IAAI,QAAQ;AAAA,EAEZ,MAAM,WAAW,CAAC,QAAkB,eAAqC;AAAA,IACxE;AAAA,IACA,MAAM,KAAK,EAAE,GAAG;AAAA,IAChB,IAAI,eAAe,QAAQ,OAAO;AAAA,MACjC,MAAM,IAAI,MACT,YAAY,oCAAoC,YACjD;AAAA,IACD,MAAM,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC;AAAA,IAC3B,MAAM,QAAQ,OAAO,SAAS,KAAK;AAAA,IACnC,IAAI,OAAO,OAAO,MAAM;AAAA,MACvB,IAAI,UAAU;AAAA,QACb,MAAM,IAAI,MAAM,sCAAsC;AAAA,MACvD,MAAM,YAAY,EAAE,MAAM,EAAE;AAAA,MAC5B,MAAM,OAAO,WAAW,KAAK,CAAC,GAAG,QAAQ,GAAG,IAAI,CAAC;AAAA,MACjD,MAAM,MAAM,IAAI,IAAI;AAAA,MACpB,IAAI,KAAK,IAAI,GAAG;AAAA,QAAG,MAAM,IAAI,MAAM,kBAAkB,KAAK;AAAA,MAC1D,KAAK,IAAI,GAAG;AAAA,MACZ,OAAO,KAAK,EAAE,MAAM,MAAM,UAAU,CAAC;AAAA,MACrC,OAAO,SAAS,MAAM,SAAS,SAAS,CAAC;AAAA,IAC1C;AAAA,IACA,MAAM,QAAQ,eAAe;AAAA,IAC7B,IAAI,UAAU;AAAA,MAAW,MAAM,IAAI,MAAM,eAAe,IAAI;AAAA,IAC5D,IAAI,SAAS;AAAA,MAAU,MAAM,IAAI,MAAM,kCAAkC;AAAA,IACzE,MAAM,IAAI,EAAE,IAAI;AAAA,IAChB,IAAI,MAAM;AAAA,MACT,MAAM,IAAI,MAAM,WAAW,UAAU,oBAAoB,OAAO;AAAA,IACjE,MAAM,OAAkB,CAAC;AAAA,IACzB,SAAS,IAAI,EAAG,IAAI,GAAG,KAAK;AAAA,MAC3B,MAAM,MAAM,EAAE,GAAG;AAAA,MACjB,IAAI,QAAQ,OAAO,OAAO;AAAA,QACzB,KAAK,KAAK,EAAE,IAAI,KAAK,KAAK,GAAG,WAAW,WAAW,CAAC;AAAA,QACpD;AAAA,MACD;AAAA,MACA,MAAM,MAAM,EAAE,GAAG;AAAA,MACjB,IAAI,CAAC,UAAU,GAAG,GAAG;AAAA,QACpB,KAAK,KAAK,EAAE,IAAI,KAAK,KAAK,WAAW,WAAW,CAAC;AAAA,QACjD;AAAA,MACD;AAAA,MACA,MAAM,QAAQ,WAAW,EAAE,IAAI;AAAA,MAC/B,IAAI,CAAC;AAAA,QAAO,MAAM,IAAI,MAAM,kCAAkC;AAAA,MAC9D,KAAK,KAAK,EAAE,IAAI,KAAK,KAAK,WAAW,MAAM,CAAC;AAAA,IAC7C;AAAA,IACA,MAAM,cAAc,CAAC,GAAG,QAAQ,GAAG,IAAI;AAAA,IACvC,MAAM,WAAW,KAAK,IAAI,CAAC,MAAM;AAAA,MAChC,IAAI,EAAE,OAAO,OAAO;AAAA,QAAO,OAAO;AAAA,MAClC,IAAI,UAAU,EAAE,EAAE;AAAA,QAAG,OAAO,EAAE;AAAA,MAC9B,OAAO,SAAS,CAAC,GAAG,aAAa,EAAE,GAAG,GAAG,EAAE,EAAE;AAAA,KAC7C;AAAA,IACD,OAAO,SAAS,EAAE,IAAI,MAAM,KAAK,GAAG,QAAQ;AAAA;AAAA,EAG7C,MAAM,WAAW,SAAS,CAAC,GAAG,IAAI;AAAA,EAClC,IAAI,CAAC,EAAE;AAAA,IAAM,MAAM,IAAI,MAAM,8BAA8B;AAAA,EAC3D,MAAM,OACL,cAAc,WAAW,IACtB,WACA,QAAQ,CAAC,UAAU,GAAG,aAAa,CAAC;AAAA,EACxC,OAAO,EAAE,MAAM,eAAe,QAAQ,MAAM;AAAA;AAG7C,IAAM,WAAW,CAAC,cAA4B;AAAA,EAC7C,MAAM,IAAI,IAAI,WAAW,eAAe;AAAA,EACxC,EAAE,IAAI,SAAS;AAAA,EACf,OAAO;AAAA;AAIR,IAAM,YAAY,CAAC,MAAmB,UACrC,MAAM,WAAW,mBACjB,WAAW,SAAS,KAAK,SAAS,GAAG,KAAK;AAgC3C,IAAM,kBAAkB;AAOjB,SAAS,iBAAiB,CAAC,OAAkC;AAAA,EACnE,MAAM,SAAS,YAAY,MAAM,QAAQ,CAAC,MAAM,UAAU,CAAC,CAAC;AAAA,EAC5D,MAAM,WAAW,YAAY,MAAM,UAAU,CAAC,MAAM;AAAA,IACnD,MAAM,QAAQ,MAAM,CAAC;AAAA,IACrB,IAAI,MAAM,WAAW;AAAA,MACpB,MAAM,IAAI,MAAM,0BAA0B,uBAAuB;AAAA,IAClE,OAAO;AAAA,GACP;AAAA,EACD,aAAa,SAAS,SAAS,OAAO;AAAA,IACrC,IAAI,CAAC,IAAI,WAAW,eAAe;AAAA,MAClC,MAAM,IAAI,MACT,gCAAgC,oBAAoB,KACrD;AAAA,EAEF,MAAM,MAAiB;AAAA,IACtB,QAAQ,CAAC;AAAA,IACT,SAAS,CAAC;AAAA,IACV,UAAU,CAAC;AAAA,IACX,QAAQ,CAAC;AAAA,IACT,SAAS,CAAC;AAAA,IACV,UAAU;AAAA,EACX;AAAA,EACA,MAAM,UAAU,IAAI;AAAA,EACpB,WAAW,QAAQ,MAAM,QAAQ;AAAA,IAChC,MAAM,UAAU,IAAI,KAAK,IAAI;AAAA,IAC7B,MAAM,QAAQ,OAAO,IAAI,OAAO;AAAA,IAChC,IAAI,SAAS,UAAU,MAAM,MAAM,KAAK,GAAG;AAAA,MAC1C,IAAI,OAAO,KAAK,KAAK,MAAM,KAAK,MAAM,IAAI,CAAC;AAAA,MAC3C,QAAQ,IAAI,OAAO;AAAA,MACnB;AAAA,IACD;AAAA,IACA,MAAM,cAAc,SAAS,IAAI,OAAO;AAAA,IACxC,IAAI,eAAe,UAAU,MAAM,YAAY,KAAK,GAAG;AAAA,MACtD,IAAI,SAAS,KAAK,KAAK,MAAM,KAAK,YAAY,IAAI,CAAC;AAAA,MACnD;AAAA,IACD;AAAA,IACA,MAAM,SAAS,QAAQ,YAAY,MAAM,YAAY,OAAO;AAAA,IAC5D,IAAI,WAAW,aAAa,UAAU,MAAM,MAAM,MAAM,CAAC;AAAA,MACxD,IAAI,QAAQ,KAAK,IAAI;AAAA,IACjB;AAAA,UAAI,OAAO,KAAK,IAAI;AAAA,EAC1B;AAAA,EACA,YAAY,WAAW,UAAU;AAAA,IAChC,IAAI,CAAC,QAAQ,IAAI,OAAO;AAAA,MAAG,IAAI,QAAQ,KAAK,GAAG;AAAA,EAChD,IAAI,WAAW,IAAI,OAAO,WAAW,KAAK,IAAI,QAAQ,WAAW;AAAA,EACjE,OAAO;AAAA;AAGR,SAAS,WAAW,CACnB,QACA,SAC6C;AAAA,EAC7C,MAAM,SAAS,IAAI;AAAA,EACnB,YAAY,KAAK,UAAU,QAAQ;AAAA,IAClC,MAAM,UAAU,IAAI,SAAS,GAAG,CAAC;AAAA,IACjC,IAAI,OAAO,IAAI,OAAO;AAAA,MAAG,MAAM,IAAI,MAAM,yBAAyB,KAAK;AAAA,IACvE,OAAO,IAAI,SAAS,EAAE,KAAK,OAAO,QAAQ,KAAK,EAAE,CAAC;AAAA,EACnD;AAAA,EACA,OAAO;AAAA;;ACzOR;AACA;AACA;AAKA,IAAM,gBAAgB;AAGf,IAAM,mBAAmB;AASzB,SAAS,eAAe,CAAC,OAAkC;AAAA,EACjE,MAAM,KAAK,cAAc,OAAO,UAAU,WAAW,QAAQ,IAAI,KAAK,CAAC;AAAA,EACvE,IAAI,GAAG,SAAS,UAAU,GAAG,MAAM,SAAS;AAAA,IAC3C,MAAM,IAAI,MAAM,sCAAsC;AAAA,EACvD,MAAM,MAAiB,IAAI;AAAA,EAC3B,WAAW,SAAS,GAAG,MAAM,OAAO;AAAA,IACnC,IAAI,MAAM,SAAS;AAAA,MAAS,MAAM,IAAI,MAAM,8BAA8B;AAAA,IAC1E,QAAQ,QAAQ,WAAW,MAAM;AAAA,IACjC,IAAI,QAAQ,SAAS,aAAa,QAAQ,SAAS;AAAA,MAClD,MAAM,IAAI,MAAM,qDAAqD;AAAA,IACtE,IAAI,IAAI,IAAI,OAAO,KAAK;AAAA,MACvB,MAAM,IAAI,MAAM,oBAAoB,OAAO,OAAO;AAAA,IACnD,IAAI,IAAI,OAAO,OAAO,OAAO,OAAO,KAAK,CAAC;AAAA,EAC3C;AAAA,EACA,OAAO;AAAA;AAyBD,SAAS,sBAAsB,CACrC,QACA,KACc;AAAA,EACd,MAAM,MAAM,oBAAoB,MAAM;AAAA,EACtC,IAAI,cAAc;AAAA,EAClB,WAAW,KAAK,IAAI,OAAO;AAAA,IAAG,eAAe;AAAA,EAC7C,MAAM,aAAa,cAAc,KAAK,MAAM;AAAA,EAC5C,MAAM,MAAmB;AAAA,IACxB,OAAO;AAAA,IACP,cAAc;AAAA,IACd;AAAA,IACA;AAAA,IACA,SAAS,CAAC;AAAA,IACV,SAAS,CAAC;AAAA,IACV,YAAY,CAAC;AAAA,IACb,SAAS;AAAA,EACV;AAAA,EACA,MAAM,OAAO,IAAI;AAAA,EACjB,WAAW,OAAO,OAAO,kBAAkB;AAAA,IAC1C,MAAM,MAAM,cAAc,KAAK,GAAG;AAAA,IAClC,IAAI,CAAC;AAAA,MAAK,IAAI;AAAA,IACT,SAAI,KAAK,IAAI,GAAG;AAAA,MAAG,IAAI,WAAW,KAAK,GAAG;AAAA,IAC1C;AAAA,MACJ,KAAK,IAAI,GAAG;AAAA,MACZ,MAAM,SAAS,IAAI,IAAI,GAAG;AAAA,MAC1B,IAAI,WAAW;AAAA,QAAW,IAAI,QAAQ,KAAK,GAAG;AAAA,MACzC;AAAA,QACJ,IAAI,QAAQ,KAAK,GAAG;AAAA,QACpB,IAAI,gBAAgB;AAAA;AAAA;AAAA,EAGvB;AAAA,EACA,IAAI,QACH,cAAc,MACd,IAAI,gBAAgB,aACpB,IAAI,QAAQ,WAAW,KACvB,IAAI,WAAW,WAAW,KAC1B,IAAI,YAAY;AAAA,EACjB,OAAO;AAAA;AAIR,SAAS,aAAa,CAAC,KAAY,KAA2B;AAAA,EAC7D,IAAI;AAAA,IACH,MAAM,IAAI,UAAU,UAAU,UAAU,KAAK,WAAW;AAAA,IACxD,IAAI,EAAE,SAAS;AAAA,MAAG,OAAO;AAAA,IACzB,MAAM,SAAS,EAAE,iBAAiB,GAAG,EAAE,QAAQ,IAAI;AAAA,IACnD,OAAO,WAAW,eAAe,IAAI,QAAQ,MAAM,CAAC,CAAC;AAAA,IACpD,MAAM;AAAA,IACP,OAAO;AAAA;AAAA;;ACrGT;AACA;AAGA,IAAM,kBAAkB,WAAW,GAAG,IAAI,GAAG,GAAG,CAAC;AACjD,IAAM,YAAY;AAClB,IAAM,UAAU;AAOT,SAAS,uBAAuB,CACtC,eACA,UACgB;AAAA,EAChB,IAAI,cAAc,WAAW,MAAM,SAAS,SAAS;AAAA,IAAS,OAAO;AAAA,EACrE,IAAI,CAAC,WAAW,SAAS,SAAS,GAAG,SAAS,GAAG,eAAe;AAAA,IAC/D,OAAO;AAAA,EACR,IAAI,CAAC,WAAW,UAAU,OAAO,QAAQ,CAAC,GAAG,aAAa;AAAA,IAAG,OAAO;AAAA,EACpE,OAAO,IAAI,SAAS,SAAS,WAAW,OAAO,CAAC;AAAA;AAI1C,IAAM,4BAA4B;AAClC,IAAM,8BAA8B;AAEpC,IAAM,yBAAyB;AAG/B,IAAM,aAAa,CACzB,OACA,kBAA0B,2BAC1B,cAAsB,gCACV,kBAAkB,QAAQ;AAGhC,SAAS,WAAW,CAC1B,YACA,kBAA0B,2BAC1B,cAAsB,6BACb;AAAA,EACT,IAAI,aAAa;AAAA,IAChB,MAAM,IAAI,MAAM,eAAe,0CAA0C;AAAA,EAC1E,OAAO,KAAK,OAAO,aAAa,mBAAmB,WAAW;AAAA;;ACpD/D;AACA;AAIA,IAAM,YAAY,EAAE,SAAS,GAAG,UAAU,GAAG,eAAe,EAAE;AAGvD,SAAS,WAAW,CAC1B,YACA,SACA,KACS;AAAA,EACT,OAAO,OAAO,eAAe,UAAU,YAAY,YAAY,YAAY,GAAG;AAAA;AAIxE,SAAS,UAAU,CAAC,YAAoB,SAAyB;AAAA,EACvE,OAAO,OAAO,eAAe,UAAU,aAAa;AAAA;AAO9C,SAAS,YAAY,CAC3B,YACA,WACA,QACS;AAAA,EACT,OAAO,OAAO,eAAe,UAAU,kBAAkB,cAAc,cAAc,MAAM;AAAA;AAG5F,SAAS,aAAa,CAAC,WAA2B;AAAA,EACjD,MAAM,MAAM,UAAU,QAAQ,GAAG;AAAA,EACjC,MAAM,UAAU,QAAQ,KAAK,YAAY,UAAU,MAAM,GAAG,GAAG;AAAA,EAC/D,OAAO,SAAS,WAAW,iBAAiB,OAAO;AAAA,EACnD,MAAM,SAAS,CAAC,SAAS,MAAM,KAAK,MAAM,OAAO,CAAC,CAAC;AAAA,EACnD,IAAI,QAAQ;AAAA,IAAI,OAAO,KAAK,UAAU,EAAE,UAAU,OAAO,CAAC;AAAA,EAC1D,OAAO,KAAK,UAAU;AAAA,IACrB,UAAU,EAAE,QAAQ,MAAM,UAAU,MAAM,MAAM,CAAC,EAAE;AAAA,EACpD,CAAC;AAAA;;AC3BF,uBAAS,2BAAY;;;ACNrB,mBAAS;AACT,uBAAS,2BAAY;AAEd,IAAM,cAAc;AAgB3B,SAAS,OAAO,CAAC,KAAsC;AAAA,EACtD,OAAO,OAAO,QAAQ,WAAW,YAAW,GAAG,IAAI;AAAA;AAI7C,SAAS,YAAY,CAAC,OAA+B;AAAA,EAC3D,OAAO,WAAW,KAAK,KAAK,EAAE,QAAQ;AAAA;AAGhC,SAAS,WAAW,CAAC,KAAuC;AAAA,EAClE,MAAM,QAAQ,QAAQ,GAAG;AAAA,EACzB,IAAI,MAAM,WAAW,aAAa;AAAA,IACjC,MAAM,IAAI,WACT,wBAAwB,0BAA0B,MAAM,QACzD;AAAA,EACD;AAAA,EACA,MAAM,OAAO,IAAI,SAAS,MAAM,QAAQ,MAAM,YAAY,WAAW;AAAA,EACrE,OAAO;AAAA,IACN,SAAS,KAAK,SAAS,GAAG,IAAI;AAAA,IAC9B,UAAU,YAAW,aAAa,MAAM,SAAS,GAAG,EAAE,CAAC,CAAC;AAAA,IACxD,YAAY,YAAW,aAAa,MAAM,SAAS,IAAI,EAAE,CAAC,CAAC;AAAA,IAC3D,MAAM,KAAK,UAAU,IAAI,IAAI;AAAA,IAC7B,MAAM,KAAK,UAAU,IAAI,IAAI;AAAA,IAC7B,OAAO,KAAK,UAAU,IAAI,IAAI;AAAA,EAC/B;AAAA;AAgBM,SAAS,UAAU,CAAC,KAAsC;AAAA,EAChE,MAAM,QAAQ,QAAQ,GAAG;AAAA,EACzB,IAAI,MAAM,WAAW,aAAa;AAAA,IACjC,MAAM,IAAI,WACT,wBAAwB,0BAA0B,MAAM,QACzD;AAAA,EACD;AAAA,EACA,OAAO,QAAO,QAAO,KAAK,CAAC;AAAA;;;ACnErB,IAAM,YAAY,WAAW;AAE7B,IAAM,oBAAoB;AAE1B,IAAM,kBAAkB,KAAK,KAAK,KAAK;AAE9C,IAAM,UAAU,MAAM;AASf,SAAS,aAAa,CAAC,MAA8B;AAAA,EAC3D,MAAM,OAAO,SAAS;AAAA,EACtB,IAAI,OAAO,OAAO;AAAA,EAClB,IAAI;AAAA,EACJ,IAAI,QAAQ,GAAG;AAAA,IACd,UAAU,KAAK,IAAI;AAAA,IACnB,SAAS,OAAO,IAAI;AAAA,EACrB,EAAO;AAAA,IACN,SAAS,OAAO,IAAI,KAAK,OAAO,KAAK,OAAO,EAAE;AAAA;AAAA,EAE/C,MAAM,WAAW,SAAS,MAAM,OAAO,aAAgB;AAAA,EACvD,MAAM,WACL,SAAS,MACR,OAAO,MAAO,OAAO,OAAQ,OAAO,MAAQ,OAAO,SAAU,OAAO;AAAA,EACtE,OAAO,EAAE,QAAQ,SAAU,UAAU,IAAK,UAAU,SAAS;AAAA;AAIvD,SAAS,YAAY,CAAC,MAAsB;AAAA,EAClD,QAAQ,QAAQ,UAAU,aAAa,cAAc,IAAI;AAAA,EACzD,IAAI,YAAY,YAAY,WAAW,IAAI;AAAA,IAC1C,MAAM,IAAI,WACT,UAAU,KAAK,SAAS,EAAE,EAAE,SAAS,GAAG,GAAG,gCAC5C;AAAA,EACD;AAAA,EACA,OAAO;AAAA;AAID,SAAS,YAAY,CAAC,QAAwB;AAAA,EACpD,IAAI,SAAS;AAAA,IAAI,MAAM,IAAI,WAAW,6BAA6B;AAAA,EACnE,IAAI,OAAO,WAAW,KAAK,IAAI,KAAK,KAAK,OAAO,SAAS,CAAC,EAAE,SAAS,CAAC;AAAA,EACtE,IAAI,UACH,QAAQ,IACL,OAAO,UAAU,OAAO,KAAK,IAAI,KAAK,CAAC,IACvC,OAAO,UAAU,OAAO,KAAK,OAAO,EAAE,CAAC;AAAA,EAC3C,IAAI,UAAU,SAAY;AAAA,IACzB,aAAa;AAAA,IACb,QAAQ;AAAA,EACT;AAAA,EACA,QAAS,QAAQ,KAAM,aAAa;AAAA;AAI9B,SAAS,YAAY,CAAC,MAA0B;AAAA,EACtD,IAAI,IAAI;AAAA,EACR,SAAS,IAAI,KAAK,SAAS,EAAG,KAAK,GAAG,KAAK;AAAA,IAC1C,IAAK,KAAK,KAAM,OAAO,KAAK,EAAY;AAAA,EACzC;AAAA,EACA,OAAO;AAAA;AAID,SAAS,gBAAgB,CAAC,MAAkB,MAAuB;AAAA,EACzE,QAAQ,QAAQ,UAAU,aAAa,cAAc,IAAI;AAAA,EACzD,IAAI,YAAY,YAAY,WAAW,MAAM,SAAS,WAAW;AAAA,IAChE,OAAO;AAAA,EACR;AAAA,EACA,OAAO,aAAa,IAAI,KAAK;AAAA;AAIvB,SAAS,UAAU,CAAC,MAAsB;AAAA,EAChD,MAAM,SAAS,aAAa,IAAI;AAAA,EAEhC,QAAQ,UAAU,KAAK,WAAW,SAAS,MAAM;AAAA;AAS3C,SAAS,gBAAgB,CAC/B,UACA,WACA,UACS;AAAA,EACT,IAAI,SAAS,WAAW;AAAA,EACxB,IAAI,SAAS,kBAAkB;AAAA,IAAG,SAAS,kBAAkB;AAAA,EAC7D,IAAI,SAAS,kBAAkB;AAAA,IAAG,SAAS,kBAAkB;AAAA,EAC7D,IAAI,SACF,aAAa,QAAQ,IAAI,OAAO,MAAM,IAAK,OAAO,eAAe;AAAA,EACnE,IAAI,SAAS;AAAA,IAAW,SAAS;AAAA,EACjC,OAAO,aAAa,MAAM;AAAA;;;AF5EpB,IAAM,mBAAmB;AAEzB,IAAM,eAAe;AAAA;AAYrB,MAAM,8BAA8B,MAAM;AAAA,EAGtC;AAAA,EACA;AAAA,EAHQ,OAAO;AAAA,EACzB,WAAW,CACD,QACA,MACT,QACC;AAAA,IACD,MAAM,oBAAoB,iBAAiB,SAAS,QAAQ;AAAA,IAJnD;AAAA,IACA;AAAA;AAKX;AAsBA,IAAM,OAAO,CAAC,MAAc,KAAK,EAAE,SAAS,EAAE,EAAE,SAAS,GAAG,GAAG;AAAA;AAExD,MAAM,YAAY;AAAA,EAMN;AAAA,EACA;AAAA,EAND,UAAwB,CAAC;AAAA,EACzB,UAAU,IAAI;AAAA,EACvB,OAAO;AAAA,EAEP,WAAW,CACD,MACA,iBAChB;AAAA,IAFgB;AAAA,IACA;AAAA;AAAA,SAGX,cAAc,CAAC,YAAqC;AAAA,IAC1D,QAAQ,WAAW;AAAA,IACnB,IAAI,CAAC,OAAO,cAAc,MAAM,KAAK,SAAS,GAAG;AAAA,MAChD,MAAM,IAAI,sBACT,QACA,cACA,uCACD;AAAA,IACD;AAAA,IACA,MAAM,MAAM,MAAM,WAAW,QAAQ,MAAM;AAAA,IAC3C,MAAM,SAAS,YAAY,GAAG;AAAA,IAC9B,IAAI;AAAA,MACH,aAAa,OAAO,IAAI;AAAA,MACvB,OAAO,KAAK;AAAA,MACb,MAAM,IAAI,sBACT,QACA,cACC,IAAc,OAChB;AAAA;AAAA,IAED,MAAM,gBAAgB,SAAS,sBAAsB;AAAA,IACrD,IAAI,kBAAkB,WAAW;AAAA,IACjC,IAAI,eAAe;AAAA,MAClB,IAAI,oBAAoB,aAAa,oBAAoB,OAAO,MAAM;AAAA,QACrE,MAAM,IAAI,sBACT,QACA,cACA,mBAAmB,yEAAyE,OAAO,MACpG;AAAA,MACD;AAAA,MACA,kBAAkB,OAAO;AAAA,IAC1B,EAAO,SAAI,oBAAoB,WAAW;AAAA,MACzC,MAAM,IAAI,sBACT,QACA,cACA,6FAA6F,SAAU,SAAS,oBACjH;AAAA,IACD;AAAA,IACA,MAAM,QAAQ,IAAI,YAAY,QAAQ,eAAe;AAAA,IACrD,MAAM,KAAK,KAAK,MAAM;AAAA,IACtB,OAAO;AAAA;AAAA,MAGJ,GAAG,GAAe;AAAA,IACrB,OAAO,KAAK,QAAQ,KAAK,QAAQ,SAAS;AAAA;AAAA,MAIvC,SAAS,GAAW;AAAA,IACvB,OAAO,KAAK;AAAA;AAAA,MAGT,gBAAgB,GAAW;AAAA,IAC9B,OAAO,KAAK;AAAA;AAAA,EAIb,QAAQ,CAAC,SAAqC;AAAA,IAC7C,OAAO,KAAK,QAAQ,IAAI,QAAQ,YAAY,CAAC;AAAA;AAAA,EAG9C,QAAQ,CAAC,QAAwC;AAAA,IAChD,OAAO,KAAK,QAAQ,SAAS,KAAK;AAAA;AAAA,EAOnC,MAAM,CAAC,SAA8C;AAAA,IACpD,MAAM,SAAS,KAAK,QAAQ;AAAA,IAC5B,MAAM,aAAa,KAAK;AAAA,IACxB,IAAI;AAAA,MACH,WAAW,QAAQ,SAAS;AAAA,QAC3B,MAAM,SAAS,KAAK,IAAI,SAAS;AAAA,QACjC,MAAM,MAAM,MAAM,MAAM,MAAM;AAAA,QAC9B,KAAK,SAAS,QAAQ,KAAK,YAAY,GAAG,CAAC;AAAA,MAC5C;AAAA,MACC,OAAO,KAAK;AAAA,MACb,WAAW,WAAW,KAAK,QAAQ,OAAO,MAAM,GAAG;AAAA,QAClD,KAAK,QAAQ,OAAO,QAAQ,IAAI;AAAA,MACjC;AAAA,MACA,KAAK,OAAO;AAAA,MACZ,MAAM;AAAA;AAAA;AAAA,EAIA,QAAQ,CAAC,QAAgB,KAAiB,QAA2B;AAAA,IAC5E,MAAM,OAAO,KAAK;AAAA,IAElB,IAAI,OAAO,aAAa,KAAK,MAAM;AAAA,MAClC,MAAM,QAAQ,KAAK,QAAQ,IAAI,OAAO,QAAQ;AAAA,MAC9C,MAAM,IAAI,sBACT,QACA,aACA,UAAU,YACP,YAAY,OAAO,+BAA+B,KAAK,WAAW,KAAK,WACvE,6BAA6B,yBAAyB,KAAK,yCAC/D;AAAA,IACD;AAAA,IAEA,MAAM,eAAe,KAAK,aAAa,QAAQ,IAAI;AAAA,IACnD,IAAI,OAAO,SAAS,cAAc;AAAA,MACjC,MAAM,aAAa,SAAS,sBAAsB;AAAA,MAClD,MAAM,IAAI,sBACT,QACA,aAAa,aAAa,QAC1B,aACG,QAAQ,KAAK,OAAO,IAAI,mBAAmB,KAAK,YAAY,MAC5D,QAAQ,KAAK,OAAO,IAAI,iBAAiB,KAAK,YAAY,oBAAoB,+CAClF;AAAA,IACD;AAAA,IAEA,MAAM,MAAM,KAAK,eAAe;AAAA,IAChC,IAAI,OAAO,QAAQ,KAAK;AAAA,MACvB,MAAM,IAAI,sBACT,QACA,oBACA,QAAQ,OAAO,8BAA8B,KAAK,IAAI,kBAAkB,KAAK,QAAQ,MAAM,aAAa,MACzG;AAAA,IACD;AAAA,IAEA,IAAI,UAAU,gBAAgB,OAAO,UAAU,GAAG;AAAA,MACjD,MAAM,IAAI,sBACT,QACA,WACA,WAAW,OAAO,qCAAqC,eACxD;AAAA,IACD;AAAA,IAEA,MAAM,OAAO,WAAW,GAAG;AAAA,IAC3B,IAAI,CAAC,iBAAiB,MAAM,OAAO,IAAI,GAAG;AAAA,MACzC,MAAM,IAAI,sBACT,QACA,iBACA,QAAQ,YAAW,aAAa,IAAI,CAAC,6BAA6B,KAAK,OAAO,IAAI,GACnF;AAAA,IACD;AAAA,IAEA,KAAK,KAAK,KAAK,QAAQ,IAAI;AAAA;AAAA,EAGpB,YAAY,CAAC,QAAgB,MAA0B;AAAA,IAC9D,IAAI,SAAS,sBAAsB;AAAA,MAAG,OAAO,KAAK,OAAO;AAAA,IACzD,MAAM,cAAc,SAAS;AAAA,IAC7B,MAAM,YACL,cAAc,KAAK,OAChB,KAAK,kBACJ,KAAK,SAAS,WAAW,EAAiB,OAAO;AAAA,IACtD,OAAO,iBAAiB,KAAK,OAAO,MAAM,WAAW,KAAK,OAAO,IAAI;AAAA;AAAA,EAO9D,cAAc,GAAW;AAAA,IAChC,MAAM,QAAQ,KAAK,QACjB,MAAM,CAAC,gBAAgB,EACvB,IAAI,CAAC,MAAM,EAAE,OAAO,IAAI,EACxB,KAAK,CAAC,GAAG,MAAM,IAAI,CAAC;AAAA,IACtB,OAAO,MAAM,KAAK,MAAM,MAAM,SAAS,CAAC;AAAA;AAAA,EAGjC,IAAI,CAAC,KAAiB,QAAqB,OAAO,WAAW,GAAG,GAAG;AAAA,IAC1E,MAAM,SAAS,KAAK,OAAO,KAAK,QAAQ;AAAA,IACxC,MAAM,UAAU,YAAW,aAAa,IAAI,CAAC;AAAA,IAC7C,KAAK,QAAQ,KAAK,EAAE,QAAQ,MAAM,SAAS,QAAQ,IAAI,CAAC;AAAA,IACxD,KAAK,QAAQ,IAAI,SAAS,MAAM;AAAA,IAChC,KAAK,QAAQ,WAAW,OAAO,IAAI;AAAA;AAErC;AAEA,SAAS,KAAK,CAAC,MAA2B,QAA4B;AAAA,EACrE,IAAI;AAAA,EACJ,IAAI;AAAA,IAEH,MAAM,OAAO,SAAS,WAAW,YAAW,IAAI,IAAI,WAAW,KAAK,IAAI;AAAA,IACvE,MAAM;AAAA,IACP,MAAM,IAAI,sBACT,QACA,UACA,yBACD;AAAA;AAAA,EAED,IAAI,IAAI,WAAW,aAAa;AAAA,IAC/B,MAAM,IAAI,sBACT,QACA,UACA,kBAAkB,0BAA0B,IAAI,QACjD;AAAA,EACD;AAAA,EACA,OAAO;AAAA;;AGrPD,IAAM,qBAAuC;AAAA,EACnD,QAAQ;AAAA,IACP,QAAQ;AAAA,MACP;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACD,EAAE,KAAK,EAAE;AAAA,IACT,OAAO;AAAA,IACP,WAAW;AAAA,MACV;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACD,EAAE,KAAK,EAAE;AAAA,EACV;AAAA,EACA,SAAS;AAAA,IACR,QAAQ;AAAA,IACR,QACC;AAAA,EACF;AACD;;ACzBO,MAAM,oBAAoB,MAAM;AAAA,EAG5B;AAAA,EACA;AAAA,EAHQ,OAAO;AAAA,EACzB,WAAW,CACD,KACA,QACT,QACC;AAAA,IACD,MAAM,GAAG,QAAQ,QAAQ;AAAA,IAJhB;AAAA,IACA;AAAA;AAKX;AASA,IAAM,eAAe;AACrB,IAAM,oBAAoB;AAG1B,eAAe,GAAG,CACjB,KACA,MACA,UAAU,GACiB;AAAA,EAC3B,MAAM,UAAU,KAAK,SAAS;AAAA,EAC9B,IAAI;AAAA,EACJ,IAAI;AAAA,IACH,MAAM,MAAM,QAAQ,KAAK,EAAE,SAAS,KAAK,QAAQ,CAAC;AAAA,IACjD,OAAO,KAAK;AAAA,IACb,MAAM,IAAI,YAAY,KAAK,MAAO,IAAc,OAAO;AAAA;AAAA,EAExD,IAAI,IAAI,WAAW;AAAA,IAAK,OAAO;AAAA,EAC/B,KAAK,IAAI,WAAW,OAAO,IAAI,WAAW,QAAQ,UAAU,cAAc;AAAA,IACzE,MAAM,SAAS,IAAI,QAAQ,IAAI,aAAa;AAAA,IAC5C,MAAM,UAAU,WAAW,OAAO,IAAI,OAAO,MAAM;AAAA,IACnD,MAAM,OAAO,OAAO,SAAS,OAAO,IACjC,KAAK,IAAI,KAAK,IAAI,SAAS,CAAC,GAAG,iBAAiB,IAChD;AAAA,IACH,MAAM,IAAI,QAAQ,CAAC,MAAM,WAAW,GAAG,OAAO,IAAI,CAAC;AAAA,IACnD,OAAO,IAAI,KAAK,MAAM,UAAU,CAAC;AAAA,EAClC;AAAA,EACA,IAAI,CAAC,IAAI;AAAA,IAAI,MAAM,IAAI,YAAY,KAAK,IAAI,QAAQ,QAAQ,IAAI,QAAQ;AAAA,EACxE,OAAO;AAAA;AAGR,eAAe,OAAU,CAAC,KAAa,MAAsC;AAAA,EAC5E,MAAM,MAAM,MAAM,IAAI,KAAK,IAAI;AAAA,EAC/B,OAAO,MAAQ,MAAM,IAAI,KAAK,IAAW;AAAA;AAG1C,eAAe,QAAQ,CAAC,KAAa,MAA0C;AAAA,EAC9E,MAAM,MAAM,MAAM,IAAI,KAAK,IAAI;AAAA,EAC/B,OAAO,MAAM,IAAI,WAAW,MAAM,IAAI,YAAY,CAAC,IAAI;AAAA;AAGxD,IAAM,WAAW,CAAI,KAAa,MAAmB;AAAA,EACpD,IAAI,MAAM;AAAA,IAAM,MAAM,IAAI,YAAY,KAAK,KAAK,WAAW;AAAA,EAC3D,OAAO;AAAA;AAGR,IAAM,YAAY,CAAC,MAAc,EAAE,QAAQ,QAAQ,EAAE;AAOrD,IAAM,WAAW,CAAC,KAAa,MAAgD;AAAA,EAC9E,MAAM,MAAM,SAAS,KAAK,CAAC,EAAE;AAAA,EAC7B,IAAI,OAAO,KAAK,WAAW,YAAY,OAAO,IAAI,mBAAmB;AAAA,IACpE,MAAM,IAAI,YAAY,KAAK,KAAK,wCAAwC;AAAA,EACzE,OAAO;AAAA,IACN,QAAQ,MAAM,IAAI,MAAM;AAAA,IACxB,eAAe,MAAM,IAAI,cAAc;AAAA,EACxC;AAAA;AAGD,IAAM,SAAS,CAAC,KAAa,MAAiD;AAAA,EAC7E,IAAI,MAAM;AAAA,IAAM,OAAO;AAAA,EACvB,MAAM,QAAQ,EAAE,SAAS,EAAE;AAAA,EAC3B,IAAI,OAAO,UAAU,YAAY,OAAO,EAAE,SAAS;AAAA,IAClD,MAAM,IAAI,YAAY,KAAK,KAAK,kCAAkC;AAAA,EACnE,OAAO,EAAE,MAAM,EAAE,MAAM,OAAO,MAAM,KAAK,EAAE;AAAA;AAIrC,IAAM,kBAAkB;AAa/B,IAAM,iBAAiB;AAAA,EACtB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACD;AACA,IAAM,OAAO;AAGb,eAAe,KAAQ,CACtB,OACA,KACA,MACsB;AAAA,EACtB,MAAM,MAAW,CAAC;AAAA,EAClB,IAAI,SAAwB;AAAA,EAC5B,UAAS;AAAA,IACR,MAAM,OAAe,SAClB,GAAG,cAAc,mBAAmB,MAAM,MAC1C;AAAA,IACH,MAAM,IAAI,MAAM,QAAiC,MAAM,IAAI;AAAA,IAC3D,IAAI,MAAM;AAAA,MAAM,OAAO,WAAW,OAAO,OAAO;AAAA,IAChD,MAAM,OAAO,EAAE;AAAA,IACf,IAAI,CAAC,MAAM,QAAQ,IAAI;AAAA,MACtB,MAAM,IAAI,YAAY,MAAM,KAAK,iBAAiB,aAAa;AAAA,IAChE,IAAI,KAAK,GAAI,IAAY;AAAA,IACzB,MAAM,OAAO,EAAE;AAAA,IACf,IAAI,KAAK,SAAS,QAAQ,OAAO,SAAS,YAAY,SAAS;AAAA,MAC9D,OAAO;AAAA,IACR,SAAS;AAAA,EACV;AAAA;AAAA;AAcM,MAAM,uBAA8C;AAAA,EAC1D;AAAA,EACA;AAAA,EACA;AAAA,EAIA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEA,WAAW,CAAC,OAAiC,CAAC,GAAG;AAAA,IAChD,MAAM,OAAO,UAAU,KAAK,WAAW,eAAe;AAAA,IACtD,MAAM,OAAoB;AAAA,MACzB,SAAS,KAAK,SAAS,EAAE,eAAe,UAAU,KAAK,SAAS,IAAI,CAAC;AAAA,MACrE,OAAO,KAAK;AAAA,IACb;AAAA,IAEA,KAAK,WAAW,OAAO,QAAQ;AAAA,MAC9B,MAAM,MACL,OAAO,QAAQ,WACZ,GAAG,+BAA+B,QAClC,GAAG,wBAAwB;AAAA,MAC/B,OAAO,SAAS,KAAK,MAAM,SAAS,KAAK,IAAI,CAAC;AAAA;AAAA,IAG/C,KAAK,kBAAkB,OAAO,YAAY;AAAA,MACzC,MAAM,MAAM,GAAG,gCAAgC;AAAA,MAC/C,OAAO,SAAS,KAAK,MAAM,QAAqB,KAAK,IAAI,CAAC;AAAA;AAAA,IAG3D,KAAK,eAAe,OAAO,SAAS,UAAU;AAAA,MAC7C,MAAM,MAAM,GAAG,uBAAuB,eAAe;AAAA,MACrD,OAAO,OAAO,KAAK,MAAM,QAAkB,KAAK,IAAI,CAAC;AAAA;AAAA,IAGtD,KAAK,aAAa,OAAO,YAAY;AAAA,MACpC,MAAM,MAAM,GAAG,0BAA0B;AAAA,MACzC,OAAO,SAAS,KAAK,MAAM,SAAS,KAAK,IAAI,CAAC;AAAA;AAAA,IAG/C,KAAK,kBAAkB,OAAO,kBAAkB;AAAA,MAC/C,MAAM,MAAM,GAAG,uBAAuB;AAAA,MACtC,MAAM,IAAI,SACT,KACA,MAAM,QAAmD,KAAK,IAAI,CACnE;AAAA,MACA,OAAO,EAAE,UAAU,MAAM,EAAE,QAAQ,GAAG,YAAY,EAAE,YAAY;AAAA;AAAA,IAGjE,KAAK,oBAAoB,OAAO,MAAM,UAAU;AAAA,MAC/C,MAAM,MAAM,GAAG,uCAAuC,cAAc;AAAA,MACpE,MAAM,IAAI,SACT,KACA,MAAM,QAA6C,KAAK,IAAI,CAC7D;AAAA,MACA,IAAI,EAAE,SAAS;AAAA,QACd,MAAM,IAAI,YAAY,KAAK,KAAK,oBAAoB,EAAE,MAAM;AAAA,MAC7D,OAAO,EAAE;AAAA;AAAA,IAGV,KAAK,iBAAiB,OAAO,WAAW;AAAA,MACvC,MAAM,MAAM,GAAG,yBAAyB;AAAA,MACxC,MAAM,IAAI,MAAM,QAAoC,KAAK,IAAI;AAAA,MAC7D,IAAI,MAAM;AAAA,QAAM,OAAO;AAAA,MACvB,IAAI,CAAC,MAAM,QAAQ,EAAE,YAAY;AAAA,QAChC,MAAM,IAAI,YAAY,KAAK,KAAK,kCAAkC;AAAA,MACnE,OAAO,EAAE;AAAA;AAAA,IAGV,KAAK,cAAc,OAAO,WAAW;AAAA,MACpC,MAAM,YAAY,CAAC,SAClB,GAAG,mCAAmC,oBAAoB,oBAAoB,gBAAgB;AAAA,MAC/F,IAAI,CAAC,KAAK;AAAA,QACT,MAAM,IAAI,YACT,UAAU,eAAe,EAAE,GAC3B,KACA,2DACD;AAAA,MACD,MAAM,MAAoB,CAAC;AAAA,MAC3B,WAAW,QAAQ,gBAAgB;AAAA,QAClC,MAAM,MAAM,UAAU,IAAI;AAAA,QAC1B,IAAI,KAAK,GAAK,MAAM,MAAkB,UAAU,KAAK,IAAI,KAAM,CAAC,CAAE;AAAA,MACnE;AAAA,MACA,OAAO,IAAI,KAAK,CAAC,GAAG,MAAM,EAAE,cAAc,EAAE,WAAW;AAAA;AAAA;AAG1D;AAAA;AAaO,MAAM,mBAEb;AAAA,EACC;AAAA,EACA;AAAA,EACA;AAAA,EAKA,WAAW,CAAC,MAA4B;AAAA,IACvC,MAAM,OAAO,UAAU,KAAK,OAAO;AAAA,IACnC,MAAM,OAAoB,EAAE,OAAO,KAAK,MAAM;AAAA,IAE9C,KAAK,WAAW,OAAO,QAAQ;AAAA,MAC9B,MAAM,MACL,OAAO,QAAQ,WACZ,GAAG,yBAAyB,QAC5B,GAAG,kBAAkB;AAAA,MACzB,OAAO,SAAS,KAAK,MAAM,SAAS,KAAK,IAAI,CAAC;AAAA;AAAA,IAG/C,KAAK,kBAAkB,OAAO,YAAY;AAAA,MACzC,MAAM,MAAM,GAAG,yBAAyB;AAAA,MACxC,OAAO,SAAS,KAAK,MAAM,QAAqB,KAAK,IAAI,CAAC;AAAA;AAAA,IAG3D,KAAK,eAAe,OAAO,SAAS,UAAU;AAAA,MAC7C,MAAM,MAAM,GAAG,wBAAwB,eAAe;AAAA,MACtD,OAAO,OAAO,KAAK,MAAM,QAAkB,KAAK,IAAI,CAAC;AAAA;AAAA;AAGxD;;ACxQA,IAAM,WAAW;AAAA,EAChB,MAAM;AAAA,EACN,cAAc;AACf;AAGA,IAAM,cAAc,CAAC,MAAsB;AAAA,EAC1C,MAAM,IAAI,IAAI,WAAW,eAAe;AAAA,EACxC,IAAI,SAAS,EAAE,MAAM,EAAE,UAAU,GAAG,GAAG,IAAI;AAAA,EAC3C,OAAO,IAAI,CAAC;AAAA;AAGb,IAAM,SAAS,CAAC,QAAuB,GAAG,IAAI,GAAG,IAAI,KAAK,OAAO,CAAC;AAQlE,SAAS,eAAe,CACvB,QACA,eACA,QACoC;AAAA,EACpC,MAAM,MAA0B,CAAC,CAAC,SAAS,MAAM,YAAY,MAAM,CAAC,CAAC;AAAA,EACrE,MAAM,SAAS,gBAAgB,MAAM;AAAA,EACrC,MAAM,UAAU,SAAS,MAAM;AAAA,EAC/B,MAAM,MAAM,OAAO,KAAK,CAAC,MAAM,WAAW,EAAE,MAAM,OAAO,CAAC;AAAA,EAC1D,IAAI,KAAK;AAAA,IACR,IAAI,KAAK,CAAC,QAAQ,OAAO,IAAI,SAAS,CAAC,CAAC;AAAA,IACxC,IAAI,KAAK;AAAA,MACR,GAAG,SAAS,iBAAiB,IAAI,IAAI,SAAS;AAAA,MAC9C,YAAY,MAAM;AAAA,IACnB,CAAC;AAAA,EACF;AAAA,EACA,IAAI,SAAS,GAAG;AAAA,IACf,IAAI,KAAK,CAAC,gBAAgB,SAAS,CAAC,GAAG,OAAO,aAAa,CAAC,CAAC;AAAA,IAC7D,IAAI,KAAK;AAAA,MACR,GAAG,SAAS,iBAAiB,IAAI,aAAa;AAAA,MAC9C,YAAY,SAAS,CAAC;AAAA,IACvB,CAAC;AAAA,EACF;AAAA,EACA,OAAO;AAAA;AAGR,IAAM,OAAO,IAAI,YAAY,SAAS,EAAE,OAAO,KAAK,CAAC;AACrD,IAAM,UAAU,CAAC,MAAe,EAAE,WAAW,IAAI,IAAI,EAAE,MAAM,CAAC,IAAI;AAClE,IAAM,UAAU,CAAC,OAA8B;AAAA,EAC9C,MAAM,IAAI,EAAE,IAAI;AAAA,EAChB,WAAW,IAAI,EAAE,SAAS;AAC3B;AAGA,SAAS,UAAU,CAClB,QACA,UACyD;AAAA,EACzD,MAAM,MAAM,IAAI;AAAA,EAChB,WAAW,KAAK,CAAC,GAAG,MAAM,EAAE,KAAK,CAAC,GAAG,MAAM,EAAE,UAAU,EAAE,OAAO,GAAG;AAAA,IAClE,IAAI;AAAA,MACH,IAAI,IAAI,EAAE,KAAK;AAAA,QACd,OAAO,KAAK,OAAO,MAAM,QAAQ,EAAE,SAAS,CAAC,CAAC;AAAA,QAC9C,SAAS,EAAE;AAAA,MACZ,CAAC;AAAA,MACA,MAAM;AAAA,MACP,SAAS,KAAK;AAAA,QACb,MAAM;AAAA,QACN,MAAM;AAAA,QACN,SAAS,eAAe,EAAE;AAAA,QAC1B,KAAK,EAAE;AAAA,QACP,SAAS,EAAE;AAAA,MACZ,CAAC;AAAA;AAAA,EAEH;AAAA,EACA,OAAO;AAAA;AAIR,SAAS,QAAQ,CAAC,KAA+C;AAAA,EAChE,MAAM,OAAO,CAAC,GAA8B,SAAyB;AAAA,IACpE,IAAI,CAAC;AAAA,MAAG,MAAM,IAAI,MAAM,GAAG,IAAI,yBAAyB,MAAM;AAAA,IAC9D,OAAO;AAAA;AAAA,EAER,IAAI,IAAI,eAAe;AAAA,IACtB,OAAO;AAAA,MACN,WAAW,IAAI,aAAa,KAAK,IAAI,UAAU,UAAU,CAAC;AAAA,MAC1D,QAAQ,KAAK,IAAI,WAAW,WAAW,CAAC,EAAE,YAAY;AAAA,IACvD;AAAA,EACD,MAAM,MAAM,OAAO,IAAI,mBAAmB,KAAK,IAAI,KAAK,KAAK,MAAM,QAAQ,KAAK,IAAI,SAAS,SAAS,CAAC,EAAE,YAAY;AAAA,EACrH,IAAI,IAAI,eAAe;AAAA,IAAc,OAAO,CAAC,KAAK,IAAI;AAAA,EAEtD,OAAO,CAAC,KAAK,KAAK,QAAQ,KAAK,IAAI,WAAW,WAAW,CAAC,EAAE,YAAY,GAAG;AAAA;AAO5E,SAAS,SAAS,CACjB,MACA,QACA,UACS;AAAA,EACT,MAAM,SAAS,IAAI,IAAI,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,GAAG,CAAC,CAAC,CAAC;AAAA,EAC1D,MAAM,QACL,CAAC;AAAA,EACF,WAAW,OAAO,CAAC,GAAG,IAAI,EAAE,KAAK,CAAC,GAAG,MAAM,EAAE,cAAc,EAAE,WAAW,GAAG;AAAA,IAC1E,IAAI;AAAA,MACH,OAAO,KAAK,SAAS,SAAS,GAAG;AAAA,MACjC,MAAM,KAAK,EAAE,KAAK,KAAK,MAAM,IAAI,SAAS,GAAG,CAAC,GAAG,MAAM,CAAC;AAAA,MACvD,OAAO,KAAK;AAAA,MACb,SAAS,KAAK;AAAA,QACb,MAAM;AAAA,QACN,MAAM;AAAA,QACN,SAAU,IAAc;AAAA,QACxB,SAAS,IAAI;AAAA,MACd,CAAC;AAAA;AAAA,EAEH;AAAA,EACA,MAAM,OAAO,IAAI,IAAI,MAAM,IAAI,CAAC,GAAG,MAAM,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;AAAA,EACrD,MAAM,QAAQ,CAAC,GAAG,MAAM;AAAA,IACvB,MAAM,OAAO,OAAO,IAAI,EAAE,IAAI;AAAA,IAC9B,MAAM,KAAK,EAAE,KAAK,EAAE,KAAK,MAAM,EAAE,MAAM,SAAS,EAAE,IAAI,YAAY;AAAA,IAClE,IAAI,CAAC;AAAA,MACJ,SAAS,KAAK;AAAA,QACb,MAAM;AAAA,QACN,MAAM;AAAA,QACN,SAAS,GAAG,EAAE,IAAI,kBAAkB,EAAE,IAAI;AAAA,WACvC;AAAA,MACJ,CAAC;AAAA,IACG,SACJ,KAAK,IAAI,EAAE,IAAI,MAAM,KACrB,OAAO,KAAK,SAAS,MAAM,IAAI,UAAU,EAAE,KAAK,CAAC;AAAA,MAEjD,SAAS,KAAK;AAAA,QACb,MAAM;AAAA,QACN,MAAM;AAAA,QACN,SAAS,GAAG,EAAE,IAAI,kBAAkB,EAAE,IAAI;AAAA,WACvC;AAAA,MACJ,CAAC;AAAA,GACF;AAAA,EACD,OAAO,MAAM;AAAA;AAWd,eAAsB,gBAAgB,CACrC,OAC4B;AAAA,EAC5B,MAAM,MAAwB,EAAE,aAAa,GAAG,OAAO,CAAC,GAAG,UAAU,CAAC,EAAE;AAAA,EACxE,IAAI;AAAA,EACJ,IAAI;AAAA,IACH,UAAU,aAAa,MAAM,OAAO;AAAA,IACnC,OAAO,KAAK;AAAA,IACb,IAAI,SAAS,KAAK;AAAA,MACjB,MAAM;AAAA,MACN,MAAM;AAAA,MACN,SAAU,IAAc;AAAA,IACzB,CAAC;AAAA,IACD,OAAO;AAAA;AAAA,EAER,IAAI,CAAC,WAAW,QAAQ,MAAM,MAAM,SAAS,GAAG;AAAA,IAC/C,IAAI,SAAS,KAAK;AAAA,MACjB,MAAM;AAAA,MACN,MAAM;AAAA,MACN,SAAS,gBAAgB,IAAI,QAAQ,IAAI,gCAAgC,IAAI,MAAM,SAAS;AAAA,IAC7F,CAAC;AAAA,IACD,OAAO;AAAA,EACR;AAAA,EACA,QAAQ,WAAW;AAAA,EACnB,MAAM,WAAW,gBAAgB,MAAM,QAAQ,MAAM,eAAe,MAAM;AAAA,EAC1E,MAAM,QAAQ,MAAM,WAAW;AAAA,EAC/B,MAAM,OAAO,WAAW,MAAM,UAAU,CAAC,GAAG,IAAI,QAAQ;AAAA,EACxD,MAAM,SAAS,CAAC,GAAG,IAAI,EAAE,IAAI,EAAE,GAAG,OAAyB,CAAC,GAAG,EAAE,KAAK,CAAC;AAAA,EAEvE,MAAM,QAAQ,kBAAkB;AAAA,IAC/B;AAAA,IACA;AAAA,IACA;AAAA,IACA,aAAa,MAAG;AAAA,MAAG;AAAA;AAAA,EACpB,CAAC;AAAA,EACD,MAAM,WAAW,IAAI,KACnB,MAAM,gBAAgB,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,EAAE,SAAS,CAAC,CAAC,CACtE;AAAA,EACA,MAAM,UAAU,IAAI;AAAA,EACpB,WAAW,QAAQ,MAAM,QAAQ;AAAA,IAChC,MAAM,UAAU,IAAI,KAAK,IAAI;AAAA,IAC7B,IACC,SAAS,IAAI,OAAO,MAAM,IAAI,KAAK,SAAS,KAC3C,SAAU,MAAM,MAAM,cAAc,IAAI;AAAA,MAEzC,QAAQ,IAAI,SAAS,OAAO,KAAK,SAAS,CAAC;AAAA,EAC7C;AAAA,EACA,MAAM,IAAI,kBAAkB;AAAA,IAC3B;AAAA,IACA;AAAA,IACA;AAAA,IACA,aAAa,CAAC,MAAM,QAAQ,IAAI,CAAC;AAAA,EAClC,CAAC;AAAA,EACD,IAAI,OAAO;AAAA,IACV;AAAA,IACA,QAAQ,QACL,EAAE,OAAO,IAAI,CAAC,OAAO;AAAA,SAClB,QAAQ,CAAC;AAAA,MACZ,KAAK,EAAE;AAAA,MACP,SAAS,KAAK,IAAI,EAAE,GAAG,GAAG,WAAW;AAAA,MACrC,OAAO,KAAK,IAAI,EAAE,GAAG,GAAG;AAAA,MACxB,OAAO;AAAA,IACR,EAAE,IAEF,EAAE,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ,CAAC,GAAG,OAAO,MAAM,EAAE;AAAA,IACvD,SAAS,EAAE,QAAQ,IAAI,OAAO;AAAA,IAC9B,UAAU,EAAE,SAAS,IAAI,CAAC,OAAO,KAAK,QAAQ,CAAC,GAAG,KAAK,EAAE,IAAI,EAAE;AAAA,EAChE;AAAA,EACA,IAAI,CAAC;AAAA,IACJ,IAAI,MAAM,KACT,wCAAwC,MAAM,WAAW,EAAE,OAAO,2DACnE;AAAA,EACI;AAAA,IACJ,WAAW,KAAK,EAAE;AAAA,MACjB,IAAI,SAAS,KAAK;AAAA,QACjB,MAAM;AAAA,QACN,MAAM;AAAA,QACN,SAAS,QAAQ,IAAI,EAAE,IAAI;AAAA,QAC3B,MAAM,IAAI,EAAE,IAAI;AAAA,MACjB,CAAC;AAAA,IACF,WAAW,OAAO,EAAE;AAAA,MACnB,IAAI,SAAS,KAAK;AAAA,QACjB,MAAM;AAAA,QACN,MAAM;AAAA,QACN,SAAS,eAAe;AAAA,QACxB;AAAA,QACA,MAAM,IAAI,SAAS,GAAG,CAAC;AAAA,MACxB,CAAC;AAAA;AAAA,EAEH,IAAI,MAAM;AAAA,IAAM,IAAI,cAAc,UAAU,MAAM,MAAM,QAAQ,IAAI,QAAQ;AAAA,EAC5E,OAAO;AAAA;;ACrVR,uBAAS;AACT;AAWA,IAAM,WAAW,IAAI,WAAW,CAAC,CAAI,CAAC;AACtC,IAAM,WAAW,IAAI,WAAW,CAAC,CAAI,CAAC;AAO/B,SAAS,YAAY,CAAC,OAAuB;AAAA,EACnD,IAAI,MAAM,WAAW;AAAA,IAAG,MAAM,IAAI,MAAM,iBAAiB;AAAA,EACzD,IAAI,QAAQ,MAAM,IAAI,CAAC,MAAM,YAAW,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;AAAA,EAC9D,GAAG;AAAA,IACF,IAAI,MAAM,SAAS,MAAM;AAAA,MAAG,MAAM,KAAK,MAAM,MAAM,SAAS,EAAW;AAAA,IACvE,MAAM,OAAgB,CAAC;AAAA,IACvB,SAAS,IAAI,EAAG,IAAI,MAAM,QAAQ,KAAK,GAAG;AAAA,MACzC,KAAK,KACJ,YACC,OAAO,CAAC,UAAU,MAAM,IAAa,MAAM,IAAI,EAAW,CAAC,CAC5D,CACD;AAAA,IACD;AAAA,IACA,QAAQ;AAAA,EACT,SAAS,MAAM,SAAS;AAAA,EACxB,OAAO,MAAM;AAAA;AAAA;AAGP,MAAM,0BAA0B,MAAM;AAAA,EAElC;AAAA,EADV,WAAW,CACD,MACT,SACC;AAAA,IACD,MAAM,OAAO;AAAA,IAHJ;AAAA;AAKX;AAUO,SAAS,iBAAiB,CAChC,KACA,QAC4B;AAAA,EAC5B,MAAM,OAAO,IAAI,SAAS,OAAO,UAAU;AAAA,EAC3C,IAAI,KAAK,WAAW;AAAA,IAAG,OAAO;AAAA,EAC9B,IAAI,KAAK,SAAS;AAAA,IACjB,MAAM,IAAI,kBAAkB,aAAa,4BAA4B;AAAA,EACtE,MAAM,QAAQ,IAAI,SACjB,KAAK,QACL,KAAK,YACL,KAAK,UACN,EAAE,UAAU,CAAC;AAAA,EACb,IAAI,UAAU;AAAA,IACb,MAAM,IAAI,kBAAkB,aAAa,2BAA2B;AAAA,EACrE,IAAI;AAAA,EACJ,IAAI;AAAA,IACH,MAAM,kBAAkB,KAAK,SAAS,CAAC,GAAG,KAAK;AAAA,IAC9C,OAAO,KAAK;AAAA,IACb,MAAM,IAAI,kBACT,aACA,8BAA+B,IAAc,SAC9C;AAAA;AAAA,EAED,MAAM,OAAO,IAAI,OAAO,CAAC,GAAG,MAAM,IAAI,EAAE,QAAQ,CAAC;AAAA,EACjD,IAAI,SAAS,KAAK;AAAA,IACjB,MAAM,IAAI,kBACT,aACA,GAAG,KAAK,SAAS,gCAAgC,oBAClD;AAAA,EACD,MAAM,MAAM,IAAI,IAAI,CAAC,MAAM,YAAW,CAAC,CAAC;AAAA,EACxC,MAAM,OAAO,aAAa,GAAG;AAAA,EAC7B,IAAI,CAAC,WAAW,MAAM,OAAO,YAAY;AAAA,IACxC,MAAM,IAAI,kBACT,oBACA,wBAAwB,IAAI,IAAI,+BAA+B,IAAI,OAAO,YAAY,GACvF;AAAA,EACD,OAAO,IAAI,IAAI,CAAC,GAAG,OAAO,EAAE,MAAM,IAAI,IAAI,EAAW,GAAG,KAAK,EAAE,EAAE;AAAA;;AC9E3D,IAAM,QAAwD;AAAA,EACpE,EAAE,MAAM,YAAY,OAAO,WAAW;AAAA,EACtC,EAAE,MAAM,SAAS,OAAO,QAAQ;AAAA,EAChC,EAAE,MAAM,WAAW,OAAO,UAAU;AAAA,EACpC,EAAE,MAAM,QAAQ,OAAO,OAAO;AAAA,EAC9B,EAAE,MAAM,cAAc,OAAO,QAAQ;AAAA,EACrC,EAAE,MAAM,cAAc,OAAO,aAAa;AAAA,EAC1C,EAAE,MAAM,OAAO,OAAO,MAAM;AAAA,EAC5B,EAAE,MAAM,WAAW,OAAO,aAAa;AAAA,EACvC,EAAE,MAAM,SAAS,OAAO,OAAO;AAAA,EAC/B,EAAE,MAAM,QAAQ,OAAO,OAAO;AAC/B;AAEA,IAAM,IAAI,CAAC,MAAuB,EAAE,eAAe,OAAO;AAG1D,SAAS,UAAU,CAClB,MACA,GACA,IACS;AAAA,EACT,QAAQ;AAAA,SACF,YAAY;AAAA,MAChB,MAAM,IAAI,EAAE;AAAA,MACZ,IAAI,CAAC;AAAA,QAAG,OAAO;AAAA,MACf,MAAM,aAAa,oBAAoB,MAAM,GAAG,OAAO,MAAM,CAAC;AAAA,MAC9D,MAAM,QACL,EAAE,eAAe,OAAO,WAAW,WAAW,IAC3C,kBAAkB,EAAE,EAAE,UAAU,MAChC,SAAS,EAAE,EAAE,UAAU;AAAA,MAC3B,OAAO,EAAE,QAAQ,SACd,GAAG,EAAE,EAAE,UAAU,CAAC,4BAA4B,2BAC9C,GAAG,EAAE,EAAE,UAAU,CAAC,kBAAkB;AAAA,IACxC;AAAA,SACK;AAAA,MACJ,OAAO,GAAG,EAAE,EAAE,UAAU,CAAC,MAAM,EAAE;AAAA,SAC7B;AAAA,MACJ,OAAO,WAAW,EAAE,GAAG,QAAQ,MAAM,MAAM,EAAE,EAAE,cAAc,CAAC;AAAA,SAC1D;AAAA,MACJ,OAAO,UAAU,EAAE,EAAE,cAAc,CAAC,MAAM,EAAE;AAAA,SACxC;AAAA,MACJ,OAAO,EAAE,UAAU,GAAG,OAAO,QAC1B,GAAG,EAAE,2CACL,GAAG,EAAE,0DAA0D,GAAG,OAAO;AAAA,SACxE;AAAA,MACJ,OAAO,GAAG,EAAE,EAAE,gBAAgB,EAAE,OAAO,EAAE,EAAE,eAAe,EAAE,8BAA8B,EAAE,EAAE,aAAa,EAAE;AAAA,SACzG;AAAA,MACJ,OAAO,GAAG,EAAE,EAAE,cAAc,UAAU,CAAC;AAAA,SACnC;AAAA,MACJ,OAAO,GAAG,EAAE;AAAA,SACR,SAAS;AAAA,MACb,MAAM,IAAI,EAAE;AAAA,MACZ,IAAI,CAAC;AAAA,QAAG,OAAO;AAAA,MACf,MAAM,QAAQ,EAAE,OAAO,OAAO,CAAC,MAAM,EAAE,KAAK,EAAE;AAAA,MAC9C,MAAM,UAAU,QACb,GAAG,EAAE,OAAO,mBAAmB,gBAAgB,EAAE,OAAO,SAAS,mBACjE,GAAG,EAAE,OAAO;AAAA,MACf,OAAO,GAAG,YAAY,EAAE,QAAQ,mBAAmB,EAAE,SAAS;AAAA,IAC/D;AAAA,SACK;AAAA,MACJ,OAAO,GAAG,EAAE,EAAE,eAAe,CAAC;AAAA;AAAA;AASjC,SAAS,SAAS,CAAC,MAAkB,GAA+B;AAAA,EACnE,IAAI,CAAC,EAAE;AAAA,IAAU,OAAO;AAAA,EACxB,IAAI,SAAS,aAAa,SAAS;AAAA,IAAQ,OAAO,EAAE,eAAe;AAAA,EACnE,OAAO,SAAS,gBAAgB,SAAS;AAAA;AAQnC,SAAS,aAAa,CAC5B,GACA,IACA,OAA2B,CAAC,GACoC;AAAA,EAChE,MAAM,QAAQ,EAAE,SAAS;AAAA,EACzB,MAAM,SAAS,QACZ,MAAM,UAAU,CAAC,MAAM,EAAE,SAAS,MAAM,IAAI,IAC5C,MAAM;AAAA,EACT,MAAM,QAAoB,CAAC;AAAA,EAC3B,YAAY,GAAG,SAAS,MAAM,QAAQ,GAAG;AAAA,IACxC,QAAQ,MAAM,UAAU;AAAA,IACxB,MAAM,UAAU,EAAE,SAAS,KAAK,CAAC,MAAM,EAAE,SAAS,IAAI;AAAA,IAEtD,IAAI,SAAS,cAAc,CAAC,WAAW,CAAC,EAAE;AAAA,MAAU;AAAA,IACpD,MAAM,UAAU,CAAC,YAA8B;AAAA,MAC9C;AAAA,MACA;AAAA,MACA,QAAQ;AAAA,MACR;AAAA,IACD;AAAA,IACA,IAAI;AAAA,MACH,MAAM,KAAK,EAAE,MAAM,OAAO,QAAQ,UAAU,QAAQ,QAAQ,QAAQ,CAAC;AAAA,IACjE,SAAI,SAAS,UAAU,CAAC,KAAK;AAAA,MACjC,MAAM,KAAK,QAAQ,2BAA2B,CAAC;AAAA,IAC3C,SAAI,IAAI;AAAA,MACZ,MAAM,KAAK,QAAQ,wCAAwC,CAAC;AAAA,IACxD,SAAI,UAAU,MAAM,CAAC;AAAA,MACzB,MAAM,KACL,QAAQ,yDAAyD,CAClE;AAAA,IACI,SAAI,SAAS,UAAU,EAAE,gBAAgB;AAAA,MAC7C,MAAM,KAAK,QAAQ,gDAAgD,CAAC;AAAA,IAChE,SAAI,SAAS,SAAS,EAAE,iBAAiB;AAAA,MAC7C,MAAM,KACL,QACC,qFACD,CACD;AAAA,IAEA;AAAA,YAAM,KAAK;AAAA,QACV;AAAA,QACA;AAAA,QACA,QAAQ;AAAA,QACR,QAAQ,WAAW,MAAM,GAAG,EAAE;AAAA,MAC/B,CAAC;AAAA,EACH;AAAA,EAEA,IAAI,CAAC,OAAO;AAAA,IACX,MAAM,OAAO,EAAE,oBAAoB,MAAM,GAAG,OAAO,MAAM,CAAC,EAAE,WAAW;AAAA,IACvE,OAAO;AAAA,MACN;AAAA,MACA,SAAS;AAAA,QACR,IAAI;AAAA,QACJ,MAAM,SAAS,EAAE,EAAE,UAAU,CAAC,qDAAqD,iBAAiB,EAAE,GAAG,QAAQ,MAAM;AAAA,MACxH;AAAA,IACD;AAAA,EACD;AAAA,EACA,MAAM,QAAQ,MAAM,SAAS,SAAS,MAAM;AAAA,EAC5C,OAAO;AAAA,IACN;AAAA,IACA,SAAS;AAAA,MACR,IAAI;AAAA,MACJ,MACC,MAAM,SAAS,gBACZ,uBAAuB,+CACvB,mBAAmB;AAAA,IACxB;AAAA,EACD;AAAA;;ACvJD;AA0KA,MAAM,eAAe,MAAM;AAAA,EACL;AAAA,EAArB,WAAW,CAAU,SAAwB;AAAA,IAC5C,MAAM,QAAQ,OAAO;AAAA,IADD;AAAA;AAGtB;AAEA,IAAM,OAAO,CAAC,MAA4B;AAAA,EACzC,MAAM,IAAI,OAAO,CAAC;AAAA;AAInB,eAAe,QAAW,CACzB,MACA,MACA,MACA,QAAgC,CAAC,GACpB;AAAA,EACb,IAAI;AAAA,IACH,OAAO,MAAM,KAAK;AAAA,IACjB,OAAO,KAAK;AAAA,IACb,IAAI,eAAe;AAAA,MAAQ,MAAM;AAAA,IACjC,OAAO,KAAK;AAAA,MACX;AAAA,MACA,MAAM;AAAA,MACN,SAAS,GAAG,SAAU,IAAc;AAAA,SACjC;AAAA,IACJ,CAAC;AAAA;AAAA;AAIH,IAAM,gBAAgB;AAMtB,IAAM,WAAW;AAcjB,eAAsB,UAAoD,CACzE,KACA,MACA,QACA,OACA,YAAY,IACQ;AAAA,EACpB,KAAK,IAAI,MAAM,CAAC,KAAK,IAAI;AAAA,EACzB,MAAM,UAAU,OAAO,KAAK,OAAO,MAAM;AAAA,EACzC,IAAI,SAAS;AAAA,EACb,SAAS,IAAI,EAAG,IAAI,WAAW,KAAK;AAAA,IACnC,MAAM,OAAO,GAAG,SAAS,GAAG;AAAA,IAC5B,IAAI,QAAQ;AAAA,MAAG,OAAO;AAAA,IACtB,IAAI,IAAI,KAAK,OAAO,GAAG,SAAS,GAAG,UAAU,CAAC;AAAA,IAC9C,IACC,CAAC,UACD,GAAG,SAAS,aACZ,GAAG,SAAS,aACZ,GAAG,OAAO,GAAG;AAAA,MAEb,IACC,GAAG,SACH,KAAK,OAAQ,SAAS,GAAG,QAAQ,QAAS,GAAG,OAAO,GAAG,KAAK;AAAA,IAC9D,IAAI,KAAK,IAAI,KAAK,IAAI,GAAG,GAAG,SAAS,CAAC,GAAG,GAAG,SAAS,CAAC;AAAA,IACtD,MAAM,IAAI,MAAM,MAAM,CAAC;AAAA,IACvB,IAAI,EAAE,UAAU,GAAG,UAAU,EAAE,UAAU,GAAG;AAAA,MAAQ,OAAO;AAAA,IAC3D,IAAI,EAAE,QAAQ,OAAO,MAAM,EAAE,OAAO,OAAO;AAAA,MAAI,OAAO;AAAA,IACtD,IAAI,EAAE,OAAO,OAAO;AAAA,MAAI,KAAK;AAAA,IACxB;AAAA,WAAK;AAAA,IACV,SAAS,GAAG,SAAS,GAAG,SAAS,OAAO;AAAA,EACzC;AAAA,EACA,OAAO;AAAA;AAAA;AAaD,MAAM,cAAc;AAAA,EACT;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEA,OAAO,IAAI;AAAA,EAEX,UAAU,IAAI;AAAA,EAEd,UAAU,IAAI;AAAA,EAEd,QAAQ,IAAI;AAAA,EAIZ,QAAQ,IAAI;AAAA,EAKZ,YAAY,IAAI;AAAA,EAGhB,OAAO,IAAI;AAAA,EACX;AAAA,EAEjB,WAAW,CAAC,MAAqB;AAAA,IAChC,KAAK,SAAS,KAAK;AAAA,IACnB,KAAK,aAAa,KAAK,cAAc;AAAA,IACrC,KAAK,OAAO,KAAK,QAAQ;AAAA,IACzB,KAAK,SAAS,KAAK;AAAA,IACnB,QAAQ,WAAW,KAAK;AAAA,IACxB,MAAM,SAAS,oBAAoB,MAAM,OAAO,MAAM,CAAC;AAAA,IACvD,KAAK,QAAQ,EAAE,QAAQ,IAAI,IAAI,QAAQ,MAAM,CAAC,EAAE;AAAA,IAChD,KAAK,QAAQ,IAAI,KAAK,MAAM,IAAI,MAAM;AAAA,IACtC,KAAK,KAAK,IAAI,OAAO,OAAO,gBAAgB,OAAO,SAAS,CAAC;AAAA,IAC7D,KAAK,QAAQ,YAAY,eAAe,KAAK,WAAW,OAAO;AAAA;AAAA,OAI1D,OAAM,CAAC,KAAkD;AAAA,IAC9D,MAAM,MAAyB,EAAE,IAAI,OAAO,OAAO,CAAC,GAAG,UAAU,CAAC,EAAE;AAAA,IACpE,IAAI;AAAA,MACH,MAAM,KAAK,IAAI,KAAK,GAAG;AAAA,MACtB,OAAO,KAAK;AAAA,MACb,IAAI,EAAE,eAAe;AAAA,QAAS,MAAM;AAAA,MACpC,IAAI,SAAS,QAAQ,IAAI,OAAO;AAAA;AAAA,IAEjC,IAAI,KAAK,IAAI,SAAS,WAAW;AAAA,IACjC,OAAO;AAAA;AAAA,EAIA,MAAM,CAAC,MAAwB;AAAA,IACtC,IAAI;AAAA,MACH,KAAK,SAAS,IAAI;AAAA,MACjB,MAAM;AAAA;AAAA,OAGK,IAAG,CAChB,KACA,KACgB;AAAA,IAChB,MAAM,QAAQ,OAAO,KAAK,MAAM,OAAO,WAAW;AAAA,IAClD,IAAI,OAAO,QAAQ,YAAY,MAAM;AAAA,MACpC,OAAO,KAAK,SAAS,KAAK,WAAW,GAAG;AAAA,IACzC,IAAI;AAAA,IACJ,IAAI,OAAO,QAAQ,UAAU;AAAA,MAC5B,MAAM,KAAK,IAAI,QAAQ,OAAO,EAAE,EAAE,YAAY;AAAA,MAC9C,SAAS,MAAM,KAAK,OAAO,IAAI,OAAO;AAAA,MACtC,MAAM,SAAS,OAAO,OAAO,WAAW;AAAA,MACxC,IAAI,SAAS;AAAA,QAAO,OAAO,KAAK,SAAS,QAAQ,IAAI,GAAG;AAAA,MACxD,IAAI,eAAe,MAAM;AAAA,QACxB,KAAK;AAAA,UACJ,MAAM;AAAA,UACN,MAAM;AAAA,UACN,SAAS,mBAAmB,oBAAoB;AAAA,QACjD,CAAC;AAAA,IACH,EAAO;AAAA,MACN,MAAM,MAAM,MAAM,SAAS,SAAS,SAAS,OAAO,MACnD,KAAK,OAAO,SAAS,GAAG,CACzB;AAAA,MACA,SAAS,aAAY,KAAK,OAAO;AAAA,MACjC,KAAK,YAAY,IAAI,QAAQ,MAAM,CAAC,GAAG,GAAG;AAAA;AAAA,IAE3C,MAAM,KAAK,IAAI,QAAQ,MAAM,CAAC;AAAA,IAC9B,MAAM,SAAS,OAAO,OAAO,WAAW;AAAA,IACxC,IAAI,OAAO,QAAQ,YAAY,WAAW;AAAA,MACzC,KAAK;AAAA,QACJ,MAAM;AAAA,QACN,MAAM;AAAA,QACN,SAAS,0BAA0B,cAAc;AAAA,MAClD,CAAC;AAAA,IACF,MAAM,KAAK,WAAW,QAA0B,IAAI,GAAG;AAAA;AAAA,OAI1C,WAAU,CACvB,QACA,IACA,KACgB;AAAA,IAChB,MAAM,SAAS,OAAO,OAAO,WAAW;AAAA,IACxC,IAAI,SAAS;AAAA,IACb,IAAI,UAAU;AAAA,IACd,eAAe,QAAQ,GAAG;AAAA,IAC1B,KAAK,OAAO,OAAO;AAAA,IAEnB,MAAM,OAAO,MAAM,KAAK,SAAS,QAAQ,MAAM;AAAA,IAC/C,MAAM,QAAQ,YAAY,KAAK,UAAU;AAAA,IACzC,IAAI,aAAa,KAAK;AAAA,IACtB,IAAI,mBAAmB,KAAK;AAAA,IAC5B,IAAI,QAAQ;AAAA,IACZ,KAAK,OAAO,SAAS;AAAA,IACrB,KAAK,OAAO,MAAM;AAAA,IAElB,MAAM,MAAM,MAAM,KAAK,UAAU,OAAO;AAAA,MACvC;AAAA,MACA,MAAM,KAAK;AAAA,IACZ,CAAC;AAAA,IACD,KAAK,OAAO,YAAY;AAAA,IACxB,MAAM,MAAM,uBAAuB,QAAQ,GAAG;AAAA,IAC9C,IAAI,eAAe,IAAI;AAAA,IACvB,IAAI,cAAc,IAAI;AAAA,IACtB,IAAI,YAAY,IAAI;AAAA,IACpB,IAAI,CAAC,IAAI;AAAA,MAAO,KAAK,iBAAiB,KAAK,cAAc,KAAK,CAAC;AAAA,IAC/D,KAAK,OAAO,YAAY;AAAA,IACxB,MAAM,KAAK,kBAAkB,QAAQ,IAAI,GAAG;AAAA,IAC5C,MAAM,KAAK,YAAY,QAAQ,IAAI,GAAG;AAAA;AAAA,OASzB,SAAQ,CACrB,QACA,SACA,KACgB;AAAA,IAChB,IAAI,SAAS;AAAA,IACb,QAAQ,IAAI,aAAa,MAAM,KAAK,SAAS,MAAM;AAAA,IACnD,IAAI,WAAW;AAAA,IACf,IAAI,YAAY,aAAa,YAAY;AAAA,MACxC,KAAK;AAAA,QACJ,MAAM;AAAA,QACN,MAAM;AAAA,QACN,SAAS,SAAS,iEAAiE,aAAa;AAAA,QAChG,SAAS;AAAA,MACV,CAAC;AAAA,IACF,KAAK,OAAO,UAAU;AAAA,IACtB,MAAM,SAAS,MAAM,KAAK,OAAO,IAAI,OAAO;AAAA,IAC5C,IAAI,OAAO,OAAO,WAAW,MAAM;AAAA,MAClC,KAAK;AAAA,QACJ,MAAM;AAAA,QACN,MAAM;AAAA,QACN,SAAS,SAAS,oBAAoB,OAAO,0BAA0B;AAAA,MACxE,CAAC;AAAA,IACF,IAAI,UAAU;AAAA,IACd,eAAe,QAAQ,GAAG;AAAA,IAC1B,KAAK,OAAO,OAAO;AAAA,IACnB,MAAM,KAAK,cAAc,QAAQ,GAAG;AAAA,IACpC,MAAM,KAAK,kBAAkB,QAAQ,IAAI,GAAG;AAAA,IAC5C,MAAM,KAAK,YAAY,QAAQ,IAAI,GAAG;AAAA;AAAA,EAG/B,WAAW,CAAC,IAAY,KAAkB;AAAA,IACjD,KAAK,KAAK,OAAO,EAAE;AAAA,IACnB,KAAK,KAAK,IAAI,IAAI,GAAG;AAAA,IACrB,OAAO,KAAK,KAAK,OAAO,GAAG;AAAA,MAC1B,MAAM,SAAS,KAAK,KAAK,KAAK,EAAE,KAAK,EAAE;AAAA,MACvC,KAAK,KAAK,OAAO,MAAM;AAAA,IACxB;AAAA;AAAA,OAQa,kBAAiB,CAC9B,QACA,IACA,KACgB;AAAA,IAChB,IAAI,eAAe,MAAM,GAAG;AAAA,MAC3B,IAAI,MAAM,KAAK,qCAAqC;AAAA,MACpD;AAAA,IACD;AAAA,IACA,MAAM,MACL,KAAK,KAAK,IAAI,EAAE,KACf,MAAM,SAAS,OAAO,SAAS,MAAM,MAAM,KAAK,OAAO,SAAS,EAAE,CAAC;AAAA,IACrE,IAAI;AAAA,IACJ,IAAI;AAAA,MACH,MAAM,kBAAkB,KAAK,MAAM;AAAA,MAClC,OAAO,KAAK;AAAA,MACb,IAAI,EAAE,eAAe;AAAA,QAAoB,MAAM;AAAA,MAC/C,OAAO,KAAK,EAAE,MAAM,OAAO,MAAM,IAAI,MAAM,SAAS,IAAI,QAAQ,CAAC;AAAA;AAAA,IAElE,IAAI,QAAQ,MAAM;AAAA,MACjB,IAAI,MAAM,KACT,qDAAqD,kBACtD;AAAA,MACA;AAAA,IACD;AAAA,IACA,IAAI,eAAe;AAAA,IACnB,KAAK,OAAO,KAAK;AAAA;AAAA,OAOJ,SAAQ,CACrB,QAC8C;AAAA,IAC9C,MAAM,QAAQ,KAAK,MAAM,IAAI,MAAM;AAAA,IACnC,IAAI;AAAA,MAAO,OAAO;AAAA,IAClB,MAAM,OAAO,KAAK,aAAa,MAAM;AAAA,IACrC,IAAI,KAAK,SAAS,UAAU,UAAU;AAAA,MACrC,MAAM,SAAS,MAAM,KAAK,KAAK,MAAM,MAAM;AAAA,MAC3C,IAAI;AAAA,QAAQ,OAAO;AAAA,IACpB;AAAA,IACA,OAAO,KAAK,KAAK,KAAK,aAAa,MAAM,GAAG,MAAM;AAAA;AAAA,EAI3C,YAAY,CAAC,QAAgD;AAAA,IACpE,IAAI,OAAO;AAAA,MACV,QAAQ,OAAO,KAAK,MAAM,OAAO,WAAW;AAAA,MAC5C,IAAI,KAAK,MAAM;AAAA,IAChB;AAAA,IACA,YAAY,KAAK,SAAS,KAAK;AAAA,MAC9B,IAAI,IAAI,UAAU,IAAI,KAAK;AAAA,QAAQ,OAAO,EAAE,QAAQ,GAAG,GAAG;AAAA,IAC3D,OAAO;AAAA;AAAA,OAQM,KAAI,CACjB,MACA,QACqD;AAAA,IACrD,MAAM,WAAqB;AAAA,MAC1B,YAAY,KAAK;AAAA,MACjB,aAAa,KAAK;AAAA,MAClB,KAAK;AAAA,IACN;AAAA,IACA,IAAI,QAAQ,MAAM,KAAK,OAAO,KAAK,IAAI,UAAU;AAAA,IACjD,SAAS,IAAI,KAAK,SAAS,EAAG,KAAK,QAAQ,KAAK;AAAA,MAC/C,IAAI,eAAe,KAAK;AAAA,QAAG,OAAO;AAAA,MAClC,MAAM,KAAK,IAAI,MAAM,aAAa;AAAA,MAClC,MAAM,SAAS,MAAM,KAAK,OAAO,IAAI,YAAY,EAAE,SAAS,GAAG,CAAC;AAAA,MAChE,IAAI,OAAO,OAAO,WAAW,MAAM;AAAA,QAClC,KAAK;AAAA,UACJ,MAAM;AAAA,UACN,MAAM;AAAA,UACN,SAAS,UAAU,oBAAoB,OAAO,yBAAyB;AAAA,UACvE,SAAS;AAAA,QACV,CAAC;AAAA,MACF,KAAK,MAAM,IAAI,GAAG,EAAE,IAAI,SAAS,CAAC;AAAA,MAClC,QAAQ;AAAA,IACT;AAAA,IACA,OAAO,KAAK,MAAM,IAAI,MAAM,KAAK;AAAA;AAAA,OAQpB,KAAI,CACjB,MACA,QAC8C;AAAA,IAC9C,MAAM,KAAK,EAAE,SAAS,KAAK,GAAG;AAAA,IAC9B,MAAM,MAAM,MAAM,KAAK,OAAO,KAAK,IAAI,YAAY,EAAE;AAAA,IACrD,MAAM,MAAM,gBAAgB,MAAM;AAAA,IAClC,MAAM,OAAO,SAAS,GAAG;AAAA,IACzB,MAAM,SAAS,MAAM,SACpB,YACA,GAAG,UAAU,KAAK,MAClB,MAAM,KAAK,OAAO,aAAa,IAAI,IAAI,GAAG,KAAK,EAAE,GACjD,EACD;AAAA,IACA,IAAI,CAAC;AAAA,MACJ,OAAO,KAAK;AAAA,QACX,MAAM;AAAA,QACN,MAAM;AAAA,QACN,SAAS,+BAA+B,gBAAgB,KAAK,WAAW,KAAK,SAAS,wCAAwC;AAAA,WAC3H;AAAA,MACJ,CAAC;AAAA,IAEF,MAAM,QAAQ,eAAe,OAAO,KAAK,KAAK,IAAI;AAAA,IAClD,MAAM,SACL,MAAM,WAAW,mBACjB,MAAM,SAAS,EAAE,EAAE,MAAM,CAAC,MAAM,MAAM,CAAC,KACtC,MAAM,KAAK,QAAQ,KAAK,MAAM,OAAO,OAAO,OAAO,YAAY,EAAE;AAAA,IACnE,IAAI,CAAC;AAAA,MACJ,OAAO,KAAK;AAAA,QACX,MAAM;AAAA,QACN,MAAM;AAAA,QACN,SAAS,GAAG,8BAA8B,KAAK;AAAA,WAC5C;AAAA,MACJ,CAAC;AAAA,IACF,MAAM,WAAqB;AAAA,MAC1B,YAAY,KAAK;AAAA,MACjB,aAAa,KAAK;AAAA,MAClB,KAAK;AAAA,IACN;AAAA,IACA,MAAM,QAAQ,EAAE,IAAI,IAAI,MAAM,SAAS,GAAG,EAAE,CAAC,GAAG,SAAS;AAAA,IACzD,KAAK,MAAM,IAAI,QAAQ,KAAK;AAAA,IAC5B,OAAO;AAAA;AAAA,OAQM,cAAa,CAC1B,QACA,KACgB;AAAA,IAChB,IAAI;AAAA,IACJ,IAAI;AAAA,MACH,OAAO,MAAM,KAAK,SAAS,MAAM;AAAA,MAChC,OAAO,KAAK;AAAA,MACb,IAAI,MAAM,KAAK,2BAA4B,IAAc,SAAS;AAAA,MAClE;AAAA;AAAA,IAED,IAAI,OAAO,KAAK,MAAM,kBAAkB;AAAA,MACvC,IAAI,MAAM,KACT,sCAAsC,wCAAwC,KAAK,MAAM,kBAC1F;AAAA,MACA;AAAA,IACD;AAAA,IACA,MAAM,OAAO,MAAM,KAAK,SAAS,QAAQ,MAAM;AAAA,IAC/C,IAAI,aAAa,KAAK;AAAA,IACtB,IAAI,mBAAmB,KAAK;AAAA,IAC5B,KAAK,OAAO,SAAS;AAAA,IACrB,KAAK,OAAO,MAAM;AAAA;AAAA,OAIL,YAAW,CACxB,QACA,IACA,KACgB;AAAA,IAChB,MAAM,MAAM,KAAK;AAAA,IACjB,MAAM,SAAS,OAAO,OAAO,WAAW;AAAA,IACxC,MAAM,UAAU,MAAM,SAAS,WAAW,WAAW,MAAM,MAC1D,IAAI,WAAW,EAAE,CAClB;AAAA,IACA,MAAM,SAAS,MAAM,KAAK,YAAY,QAAQ,IAAI,KAAK;AAAA,IACvD,IAAI;AAAA,MAAQ,IAAI,SAAS;AAAA,IACzB,QAAQ,gBAAsC,KAAK,OAAO,MAAM,CAAC;AAAA,IACjE,MAAM,OAAO,cACV,MAAM,SAAS,QAAQ,aAAa,UAAU,MAC9C,YAAY,KAAK,KAAK,MAAM,CAC7B,IACC;AAAA,IACH,MAAM,SAAS,eAAe,MAAM,IACjC,eAAe,SAAS,MAAM,IAC9B,OAAO;AAAA,IACV,MAAM,WAAW,UAAU,IAAI,MAAM;AAAA,IACrC,MAAM,QAAQ,MAAM,iBAAiB;AAAA,MACpC;AAAA,MAEA,eAAe,UAAU,IAAI,WAAW,EAAE;AAAA,MAC1C,WAAW,OAAO;AAAA,MAClB;AAAA,MACA;AAAA,MACA;AAAA,MACA,cAAc,WACX,MAAM,KAAK,aAAa,UAAU,IAAI,KAAK,IAC3C;AAAA,MACH,aAAa,OAAO,SACnB,WAAW,KAAK,YAAY,UAAU,IAAI,IAAI;AAAA,IAChD,CAAC;AAAA,IACD,IAAI,OAAO,MAAM;AAAA,IACjB,IAAI;AAAA,MAAM,IAAI,cAAc,MAAM;AAAA,IAClC,IAAI,MAAM,KAAK,GAAG,MAAM,KAAK;AAAA,IAC7B,IAAI,SAAS,KAAK,GAAG,MAAM,QAAQ;AAAA,IAEnC,MAAM,SAAS,IAAI,IAAI,MAAM,SAAS,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC;AAAA,IACxD,WAAW,QAAQ,CAAC,WAAW,SAAS,MAAM,GAAY;AAAA,MACzD,IAAI,OAAO,IAAI,IAAI,KAAM,SAAS,UAAU,CAAC;AAAA,QAAO;AAAA,MACpD,KAAK,OAAO,IAAI;AAAA,IACjB;AAAA;AAAA,OAQa,YAAW,CACxB,QACA,OAC+B;AAAA,IAC/B,QAAQ,mBAAmB,KAAK;AAAA,IAChC,IAAI,CAAC;AAAA,MAAgB,OAAO;AAAA,IAC5B,IAAI;AAAA,MACH,MAAM,SAAS,MAAM,eAAe,KAAK,KAAK,QAAQ,MAAM;AAAA,MAC5D,OAAO,QAAQ,SAAS,SAAS;AAAA,MAChC,OAAO,KAAK;AAAA,MACb,MAAM,KACL,0BAA0B,uBAAwB,IAAc,SACjE;AAAA,MACA,OAAO;AAAA;AAAA;AAAA,OAKK,OAAM,CACnB,IACA,MACA,QAAgC,CAAC,GACT;AAAA,IACxB,MAAM,QAAQ,KAAK,QAAQ,IAAI,EAAE;AAAA,IACjC,IAAI;AAAA,MAAO,OAAO;AAAA,IAClB,MAAM,SAAS,MAAM,KAAK,YAAY,IAAI,MAAM,KAAK;AAAA,IACrD,IAAI,IAAI,QAAQ,MAAM,CAAC,MAAM;AAAA,MAC5B,KAAK;AAAA,QACJ;AAAA,QACA,MAAM;AAAA,QACN,SAAS,qCAAqC;AAAA,QAC9C,SAAS;AAAA,WACN;AAAA,MACJ,CAAC;AAAA,IACF,KAAK,QAAQ,IAAI,IAAI,MAAM;AAAA,IAC3B,OAAO;AAAA;AAAA,OAOM,YAAW,CACxB,IACA,MACA,OACwB;AAAA,IACxB,MAAM,MAAM,KAAK;AAAA,IACjB,IAAI;AAAA,IACJ,IAAI;AAAA,MACH,MAAM,MAAM,IAAI,SAAS,EAAE;AAAA,MAC3B,KAAK,YAAY,IAAI,GAAG;AAAA,MACvB,OAAO,KAAK;AAAA,MACb,MAAM,SAAS,SAAS,OAAQ,IAAc;AAAA,MAC9C,QAAQ,oBAAoB;AAAA,MAC5B,IAAI,CAAC;AAAA,QACJ,OAAO,KAAK,EAAE,MAAM,MAAM,eAAe,SAAS,WAAW,MAAM,CAAC;AAAA,MACrE,MAAM,KAAK,MAAM,SAChB,MACA,GAAG,4BACH,MAAM,gBAAgB,KAAK,KAAK,EAAE,GAClC,KACD;AAAA,MACA,IAAI;AAAA,QACH,OAAO,kBAAkB,GAAG,QAAQ,GAAG,aAAa;AAAA,QACnD,OAAO,UAAU;AAAA,QAClB,OAAO,KAAK;AAAA,UACX;AAAA,UACA,MAAM;AAAA,UACN,SAAS,oBAAoB,sBAAuB,SAAmB;AAAA,aACpE;AAAA,QACJ,CAAC;AAAA;AAAA;AAAA,IAGH,OAAO,aAAY,KAAK,IAAI;AAAA;AAAA,OAOf,QAAO,CACpB,KACA,MACA,OACA,OACA,MACA,QAAgC,CAAC,GACd;AAAA,IACnB,MAAM,UAAU,CAAC,GAAG;AAAA,IACpB,WAAW,MAAM,mBAAmB,KAAK;AAAA,MACxC,QAAQ,KAAK,MAAM,KAAK,OAAO,IAAI,MAAM,KAAK,CAAC;AAAA,IAChD,OAAO,gBAAgB;AAAA,MACtB;AAAA,MACA;AAAA,MACA;AAAA,MACA,MAAM,IAAI;AAAA,MACV;AAAA,IACD,CAAC;AAAA;AAAA,OAQY,aAAY,CACzB,UACA,OACqC;AAAA,IACrC,IAAI;AAAA,MACH,MAAM,SAAS,MAAM,KAAK,OAAO,UAAU,OAAO;AAAA,MAClD,MAAM,IAAI,aAAa,MAAM,KAAK,OAAO,WAAW,QAAQ,CAAC;AAAA,MAC7D,IAAI,WAAW,EAAE,MAAM,OAAO,cAAc;AAAA,QAAG,OAAO,EAAE;AAAA,MACxD,MAAM,KAAK,kBAAkB,yCAAyC;AAAA,MACrE,OAAO,KAAK;AAAA,MACb,MAAM,KACL,kBAAkB,yBAA0B,IAAc,SAC3D;AAAA;AAAA,IAED;AAAA;AAAA,OAQa,YAAW,CACxB,UACA,MACmB;AAAA,IACnB,MAAM,SAAS,MAAM,KAAK,OAAO,UAAU,OAAO;AAAA,IAClD,MAAM,UAAU,IAAI,KAAK,IAAI;AAAA,IAC7B,MAAM,SAAS,MAAM,SAAS,SAAS,QAAQ,qBAAqB,MACnE,KAAK,OAAO,aAAa,SAAS,QAAQ,CAC3C;AAAA,IACA,IAAI,CAAC;AAAA,MAAQ,OAAO;AAAA,IACpB,MAAM,QAAQ,IAAI,WAAW,eAAe;AAAA,IAC5C,MAAM,IAAI,KAAK,SAAS;AAAA,IACxB,OAAO,KAAK,QAAQ,QAAQ,KAAK,MAAM,OAAO,OAAO,OAAO,OAAO;AAAA;AAAA,OAItD,SAAQ,CACrB,QACA,MACA,QAAgC,CAAC,GACe;AAAA,IAChD,MAAM,KAAK,IAAI,OAAO,aAAa;AAAA,IACnC,MAAM,QAAQ,KAAK,MAAM,IAAI,EAAE;AAAA,IAC/B,IAAI;AAAA,MAAO,OAAO;AAAA,IAClB,MAAM,KAAK,MAAM,SAChB,MACA,iBAAiB,MACjB,MAAM,KAAK,SAAS,EAAE,GACtB,KACD;AAAA,IACA,MAAM,OAAO,wBAAwB,OAAO,eAAe,GAAG,QAAQ;AAAA,IACtE,IAAI,CAAC;AAAA,MACJ,OAAO,KAAK;AAAA,QACX;AAAA,QACA,MAAM;AAAA,QACN,SAAS,4CAA4C;AAAA,WAClD;AAAA,MACJ,CAAC;AAAA,IACF,IAAI,GAAG,aAAa,KAAK,MAAM;AAAA,MAC9B,KAAK;AAAA,QACJ;AAAA,QACA,MAAM;AAAA,QACN,SAAS,eAAe,GAAG,8CAA8C,KAAK,MAAM;AAAA,WACjF;AAAA,MACJ,CAAC;AAAA,IACF,MAAM,KAAK,YAAY,GAAG,UAAU;AAAA,IACpC,MAAM,aAAa,KAAK,MAAM,SAAS,IAAI;AAAA,IAC3C,IAAI,eAAe;AAAA,MAClB,OAAO,KAAK;AAAA,QACX;AAAA,QACA,MAAM;AAAA,QACN,SAAS,cAAc,qDAAqD,KAAK,MAAM,qBAAqB,KAAK,MAAM,IAAI;AAAA,WACxH;AAAA,MACJ,CAAC;AAAA,IACF,MAAM,QAAQ,EAAE,YAAY,KAAK;AAAA,IACjC,KAAK,MAAM,IAAI,IAAI,KAAK;AAAA,IACxB,OAAO;AAAA;AAAA,OAIM,YAAW,CAAC,QAA+B;AAAA,IACxD,OAAO,KAAK,MAAM,IAAI,SAAS,QAAQ;AAAA,MACtC,MAAM,OAAO,KAAK,MAAM,IAAI,SAAS;AAAA,MACrC,MAAM,QAAQ,KAAK,IAAI,eAAe,SAAS,OAAO,CAAC;AAAA,MACvD,MAAM,UAAU,MAAM,SAAS,WAAW,mBAAmB,QAAQ,MACpE,KAAK,OAAO,kBAAkB,MAAM,KAAK,CAC1C;AAAA,MACA,IAAI,QAAQ,WAAW;AAAA,QACtB,KAAK;AAAA,UACJ,MAAM;AAAA,UACN,MAAM;AAAA,UACN,SAAS,sCAAsC;AAAA,QAChD,CAAC;AAAA,MACF,IAAI;AAAA,QACH,KAAK,MAAM,OAAO,OAAO;AAAA,QACxB,OAAO,KAAK;AAAA,QACb,IAAI,EAAE,eAAe;AAAA,UAAwB,MAAM;AAAA,QACnD,KAAK,EAAE,MAAM,WAAW,MAAM,kBAAkB,SAAS,IAAI,QAAQ,CAAC;AAAA;AAAA,IAExE;AAAA;AAAA,OAQa,UAAS,CACtB,OACA,QACqB;AAAA,IACrB,MAAM,QAAQ,KAAK,KAAK,IAAI,KAAK;AAAA,IACjC,IAAI;AAAA,MAAO,OAAO;AAAA,IAClB,MAAM,QAAQ,KAAK,WAAW,OAAO;AAAA,IACrC,IAAI,QAAQ;AAAA,MACX,KAAK;AAAA,QACJ,MAAM;AAAA,QACN,MAAM;AAAA,QACN,SAAS,SAAS,yCAAyC;AAAA,QAC3D;AAAA,MACD,CAAC;AAAA,IACF,IAAI,KAAK,MAAM,KAAK,WAAW;AAAA,IAC/B,SAAS,IAAI,MAAO,IAAI,OAAO,KAAK;AAAA,MACnC,MAAM,OAAO,KAAK,KAAK,IAAI,IAAI,CAAC;AAAA,MAChC,IAAI,MAAM;AAAA,QACT,KAAK,KAAK,QAAQ,IAAI,IAAI,CAAC,KAAK;AAAA,QAChC;AAAA,MACD;AAAA,MACA,MAAM,SAAS,MAAM,KAAK,aAAa,IAAI,GAAG,IAAI,MAAM;AAAA,MACxD,KAAK,KAAK,IAAI,IAAI,GAAG,MAAM,KAAK,aAAa,IAAI,GAAG,MAAM,CAAC;AAAA,MAC3D,KAAK,QAAQ,IAAI,IAAI,GAAG,MAAM;AAAA,MAC9B,KAAK;AAAA,IACN;AAAA,IACA,OAAO,KAAK,KAAK,IAAI,KAAK;AAAA;AAAA,OAIb,WAAU,GAAyB;AAAA,IAChD,QAAQ,WAAW,KAAK;AAAA,IACxB,MAAM,SAAS,OAAO,OAAO,WAAW;AAAA,IACxC,IAAI;AAAA,MACH,OAAO,EAAE,QAAQ,MAAM,MAAM,KAAK,SAAS,MAAM,EAAE;AAAA,MAClD,MAAM;AAAA,MACP,OAAO,EAAE,OAAO;AAAA;AAAA;AAAA,OAIJ,SAAQ,CAAC,QAAuC;AAAA,IAC7D,MAAM,KAAK,IAAI,OAAO,aAAa;AAAA,IACnC,OACC,KAAK,MAAM,IAAI,EAAE,GAAG,eAAe,MAAM,KAAK,SAAS,EAAE,GAAG;AAAA;AAAA,OAIhD,SAAQ,CAAC,IAAmC;AAAA,IACzD,IAAI,KAAK,KAAK,UAAU,IAAI,EAAE;AAAA,IAC9B,IAAI,CAAC,IAAI;AAAA,MACR,KAAK,MAAM,KAAK,OAAO,gBAAgB,EAAE;AAAA,MACzC,KAAK,UAAU,IAAI,IAAI,EAAE;AAAA,IAC1B;AAAA,IACA,OAAO;AAAA;AAAA,OAGM,aAAY,CACzB,OACA,IACA,IACiB;AAAA,IACjB,MAAM,QAAQ,WAAW,KAAK;AAAA,IAC9B,MAAM,SAAS,CAAC,QAAQ,wBAAwB,KAAK;AAAA,IACrD,MAAM,QAAQ,OAAO,MAA8B;AAAA,MAClD,MAAM,MAAM,MAAM,SACjB,cACA,mBAAmB,KACnB,MAAM,KAAK,OAAO,SAAS,CAAC,GAC5B,EAAE,MAAM,CACT;AAAA,MACA,MAAM,SAAS,aAAY,KAAK,YAAY;AAAA,MAC5C,MAAM,KAAK,IAAI,QAAQ,MAAM,CAAC;AAAA,MAC9B,KAAK,QAAQ,IAAI,IAAI,MAAM;AAAA,MAC3B,MAAM,OAAO,MAAM,SAClB,cACA,uBAAuB,MACvB,MAAM,KAAK,SAAS,MAAM,GAC1B,EAAE,OAAO,SAAS,GAAG,CACtB;AAAA,MACA,OAAO,EAAE,QAAQ,OAAO,OAAO,WAAW,GAAG,MAAM,QAAQ,GAAG;AAAA;AAAA,IAE/D,MAAM,SAAS,MAAM,WAAW,IAAI,IAAI,QAAQ,KAAK;AAAA,IACrD,IAAI,CAAC;AAAA,MACJ,OAAO,KAAK;AAAA,QACX,MAAM;AAAA,QACN,MAAM;AAAA,QACN,SAAS,kCAAkC,OAAO,OAAO,OAAO,KAAK,YAAY,wCAAwC,GAAG,cAAc,GAAG;AAAA,QAC7I;AAAA,MACD,CAAC;AAAA,IACF,OAAO;AAAA;AAAA,OAUM,aAAY,CAAC,OAAe,QAAmC;AAAA,IAC5E,MAAM,KAAK,EAAE,OAAO,SAAS,OAAO,GAAG;AAAA,IACvC,QAAQ,eAAe,MAAM,KAAK,SAAS,OAAO,QAAQ,cAAc,EAAE;AAAA,IAC1E,MAAM,QAAQ,WAAW,KAAK;AAAA,IAC9B,IAAI,aAAa,QAAQ,0BAA0B,cAAc;AAAA,MAChE,KAAK;AAAA,QACJ,MAAM;AAAA,QACN,MAAM;AAAA,QACN,SAAS,sBAAsB,+BAA+B,yBAAyB,QAAQ,2BAA2B,QAAQ;AAAA,WAC/H;AAAA,MACJ,CAAC;AAAA,IACF,MAAM,UAAU,YAAY,UAAU;AAAA,IACtC,MAAM,MAAM,uBACX,OAAO,QACP,KAAK,KAAK,IAAI,OAAO,CACtB;AAAA,IACA,IAAI,CAAC,IAAI;AAAA,MACR,KAAK;AAAA,WACD,iBAAiB,KAAK,cAAc,OAAO;AAAA,WAC3C;AAAA,QACH,MAAM;AAAA,MACP,CAAC;AAAA,IAEF,MAAM,OAAO,SACZ,YAAY,kBAAkB,oBAAoB,OAAO,KAAK,CAAC,CAChE;AAAA,IACA,MAAM,SAAS,MAAM,SACpB,cACA,cAAc,YAAY,OAAO,MACjC,MAAM,KAAK,OAAO,aAAa,IAAI,IAAI,GAAG,OAAO,EAAE,GACnD,EACD;AAAA,IACA,MAAM,QAAQ,QAAQ,KAAK,QAAQ,OAAO,EAAE,KAAK;AAAA,IACjD,MAAM,SACL,WAAW,QACV,MAAM,KAAK,QACX,OAAO,QACP,MACA,UAAU,KAAK,GACf,OAAO,OACP,cACA,EACD;AAAA,IACD,IAAI,CAAC;AAAA,MACJ,KAAK;AAAA,QACJ,MAAM;AAAA,QACN,MAAM;AAAA,QACN,SAAS,cAAc,iCAAiC,OAAO;AAAA,WAC5D;AAAA,MACJ,CAAC;AAAA,IACF,IAAI;AAAA,IACJ,IAAI;AAAA,MACH,MAAM,gBAAgB,KAAK;AAAA,MAC1B,OAAO,KAAK;AAAA,MACb,OAAO,KAAK;AAAA,QACX,MAAM;AAAA,QACN,MAAM;AAAA,QACN,SAAS,cAAc,UAAW,IAAc;AAAA,WAC7C;AAAA,MACJ,CAAC;AAAA;AAAA,IAEF,OAAO;AAAA;AAET;AAGA,SAAS,cAAc,CAAC,QAAsB,KAA8B;AAAA,EAC3E,IAAI,YAAY,IAAI,OAAO,cAAc;AAAA,EACzC,IAAI,gBAAgB,IAAI,OAAO,aAAa;AAAA,EAC5C,IAAI,CAAC,eAAe,MAAM,GAAG;AAAA,IAC5B,IAAI,YAAY,IAAI,oBAAoB,MAAM,CAAC;AAAA,IAC/C,IAAI,YAAY,OAAO,OAAO,SAAS;AAAA,EACxC;AAAA;AAGD,SAAS,YAAW,CAAC,KAAY,MAAkC;AAAA,EAClE,IAAI;AAAA,IACH,OAAO,oBAAoB,GAAG;AAAA,IAC7B,OAAO,KAAK;AAAA,IACb,OAAO,KAAK;AAAA,MACX;AAAA,MACA,MAAM;AAAA,MACN,SAAS,6BAA8B,IAAc;AAAA,IACtD,CAAC;AAAA;AAAA;AASH,SAAS,cAAc,CAAC,SAAgB,QAAoC;AAAA,EAC3E,MAAM,SAAS,OAAO,OAAO,WAAW;AAAA,EACxC,IAAI,WAAW;AAAA,IAAG,OAAO;AAAA,EACzB,IAAI;AAAA,IACH,MAAM,IAAI,aAAa,OAAO;AAAA,IAC9B,IAAI,CAAC,WAAW,EAAE,MAAM,OAAO,cAAc;AAAA,MAAG,OAAO;AAAA,IACvD,MAAM,OAAO,SAAS,gBAAgB,SAAS,CAAC,CAAC;AAAA,IACjD,OAAO,EAAE,OAAO,KAAK,CAAC,MAAM,WAAW,EAAE,MAAM,IAAI,CAAC,GAAG,aAAa;AAAA,IACnE,MAAM;AAAA,IACP,OAAO;AAAA;AAAA;AAIT,SAAS,gBAAgB,CACxB,KACA,MACA,OACgB;AAAA,EAChB,MAAM,SAAS,GAAG,IAAI,gBAAgB,IAAI,iCAAiC,IAAI;AAAA,EAC/E,IAAI,IAAI,QAAQ;AAAA,IACf,OAAO;AAAA,MACN;AAAA,MACA,MAAM;AAAA,MACN,SAAS,GAAG,IAAI,QAAQ,iCAAiC,gBAAgB;AAAA,MACzE;AAAA,IACD;AAAA,EACD,IAAI,IAAI,WAAW;AAAA,IAClB,OAAO;AAAA,MACN;AAAA,MACA,MAAM;AAAA,MACN,SAAS,GAAG,IAAI,WAAW,kCAAkC;AAAA,MAC7D;AAAA,IACD;AAAA,EACD,IAAI,IAAI;AAAA,IACP,OAAO;AAAA,MACN;AAAA,MACA,MAAM;AAAA,MACN,SAAS,GAAG,IAAI,wCAAwC;AAAA,MACxD;AAAA,IACD;AAAA,EACD,OAAO;AAAA,IACN;AAAA,IACA,MAAM;AAAA,IACN,SAAS,SAAS,kBAAkB;AAAA,IACpC;AAAA,EACD;AAAA;AAIM,IAAM,cAAc,CAC1B,KACA,SACgC,IAAI,cAAc,IAAI,EAAE,OAAO,GAAG;",
|
|
23
|
-
"debugId": "
|
|
22
|
+
"mappings": "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",
|
|
23
|
+
"debugId": "C611E693588430B164756E2164756E21",
|
|
24
24
|
"names": []
|
|
25
25
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@secondlayer/verify",
|
|
3
|
-
"version": "0.5.
|
|
3
|
+
"version": "0.5.2",
|
|
4
4
|
"description": "Check a Stacks block yourself: Bitcoin headers, signer signatures and MARF state proofs, from one trusted checkpoint.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -24,6 +24,7 @@
|
|
|
24
24
|
"dev": "bunup --watch",
|
|
25
25
|
"test": "bun test",
|
|
26
26
|
"typecheck": "tsc --noEmit",
|
|
27
|
+
"rotate-checkpoint": "bun scripts/rotate-checkpoint.ts",
|
|
27
28
|
"prepublishOnly": "bun run build"
|
|
28
29
|
},
|
|
29
30
|
"dependencies": {
|