@aztec/archiver 0.73.0 → 0.75.0-commit.c03ba01a2a4122e43e90d5133ba017e54b90e9d2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (82) hide show
  1. package/dest/archiver/archiver.js +729 -711
  2. package/dest/archiver/archiver_store.js +4 -2
  3. package/dest/archiver/archiver_store_test_suite.js +385 -224
  4. package/dest/archiver/config.js +9 -11
  5. package/dest/archiver/data_retrieval.js +89 -65
  6. package/dest/archiver/errors.js +1 -2
  7. package/dest/archiver/index.js +0 -1
  8. package/dest/archiver/instrumentation.js +29 -17
  9. package/dest/archiver/kv_archiver_store/block_store.js +118 -127
  10. package/dest/archiver/kv_archiver_store/contract_class_store.js +43 -37
  11. package/dest/archiver/kv_archiver_store/contract_instance_store.js +7 -12
  12. package/dest/archiver/kv_archiver_store/kv_archiver_store.js +135 -158
  13. package/dest/archiver/kv_archiver_store/log_store.js +271 -256
  14. package/dest/archiver/kv_archiver_store/message_store.js +42 -48
  15. package/dest/archiver/kv_archiver_store/nullifier_store.js +35 -42
  16. package/dest/archiver/memory_archiver_store/l1_to_l2_message_store.js +15 -24
  17. package/dest/archiver/memory_archiver_store/memory_archiver_store.js +227 -231
  18. package/dest/archiver/structs/data_retrieval.js +5 -2
  19. package/dest/archiver/structs/published.js +1 -2
  20. package/dest/factory.js +30 -20
  21. package/dest/index.js +0 -1
  22. package/dest/rpc/index.js +5 -2
  23. package/dest/test/index.js +0 -1
  24. package/dest/test/mock_archiver.js +8 -13
  25. package/dest/test/mock_l1_to_l2_message_source.js +4 -4
  26. package/dest/test/mock_l2_block_source.js +68 -67
  27. package/package.json +14 -13
  28. package/src/archiver/archiver.ts +1 -1
  29. package/src/archiver/data_retrieval.ts +17 -3
  30. package/src/archiver/index.ts +1 -1
  31. package/dest/archiver/archiver.d.ts +0 -186
  32. package/dest/archiver/archiver.d.ts.map +0 -1
  33. package/dest/archiver/archiver_store.d.ts +0 -217
  34. package/dest/archiver/archiver_store.d.ts.map +0 -1
  35. package/dest/archiver/archiver_store_test_suite.d.ts +0 -8
  36. package/dest/archiver/archiver_store_test_suite.d.ts.map +0 -1
  37. package/dest/archiver/config.d.ts +0 -35
  38. package/dest/archiver/config.d.ts.map +0 -1
  39. package/dest/archiver/data_retrieval.d.ts +0 -71
  40. package/dest/archiver/data_retrieval.d.ts.map +0 -1
  41. package/dest/archiver/errors.d.ts +0 -4
  42. package/dest/archiver/errors.d.ts.map +0 -1
  43. package/dest/archiver/index.d.ts +0 -8
  44. package/dest/archiver/index.d.ts.map +0 -1
  45. package/dest/archiver/instrumentation.d.ts +0 -27
  46. package/dest/archiver/instrumentation.d.ts.map +0 -1
  47. package/dest/archiver/kv_archiver_store/block_store.d.ts +0 -87
  48. package/dest/archiver/kv_archiver_store/block_store.d.ts.map +0 -1
  49. package/dest/archiver/kv_archiver_store/contract_class_store.d.ts +0 -17
  50. package/dest/archiver/kv_archiver_store/contract_class_store.d.ts.map +0 -1
  51. package/dest/archiver/kv_archiver_store/contract_instance_store.d.ts +0 -13
  52. package/dest/archiver/kv_archiver_store/contract_instance_store.d.ts.map +0 -1
  53. package/dest/archiver/kv_archiver_store/kv_archiver_store.d.ts +0 -147
  54. package/dest/archiver/kv_archiver_store/kv_archiver_store.d.ts.map +0 -1
  55. package/dest/archiver/kv_archiver_store/log_store.d.ts +0 -47
  56. package/dest/archiver/kv_archiver_store/log_store.d.ts.map +0 -1
  57. package/dest/archiver/kv_archiver_store/message_store.d.ts +0 -33
  58. package/dest/archiver/kv_archiver_store/message_store.d.ts.map +0 -1
  59. package/dest/archiver/kv_archiver_store/nullifier_store.d.ts +0 -12
  60. package/dest/archiver/kv_archiver_store/nullifier_store.d.ts.map +0 -1
  61. package/dest/archiver/memory_archiver_store/l1_to_l2_message_store.d.ts +0 -23
  62. package/dest/archiver/memory_archiver_store/l1_to_l2_message_store.d.ts.map +0 -1
  63. package/dest/archiver/memory_archiver_store/memory_archiver_store.d.ts +0 -168
  64. package/dest/archiver/memory_archiver_store/memory_archiver_store.d.ts.map +0 -1
  65. package/dest/archiver/structs/data_retrieval.d.ts +0 -27
  66. package/dest/archiver/structs/data_retrieval.d.ts.map +0 -1
  67. package/dest/archiver/structs/published.d.ts +0 -11
  68. package/dest/archiver/structs/published.d.ts.map +0 -1
  69. package/dest/factory.d.ts +0 -10
  70. package/dest/factory.d.ts.map +0 -1
  71. package/dest/index.d.ts +0 -5
  72. package/dest/index.d.ts.map +0 -1
  73. package/dest/rpc/index.d.ts +0 -4
  74. package/dest/rpc/index.d.ts.map +0 -1
  75. package/dest/test/index.d.ts +0 -4
  76. package/dest/test/index.d.ts.map +0 -1
  77. package/dest/test/mock_archiver.d.ts +0 -22
  78. package/dest/test/mock_archiver.d.ts.map +0 -1
  79. package/dest/test/mock_l1_to_l2_message_source.d.ts +0 -16
  80. package/dest/test/mock_l1_to_l2_message_source.d.ts.map +0 -1
  81. package/dest/test/mock_l2_block_source.d.ts +0 -80
  82. package/dest/test/mock_l2_block_source.d.ts.map +0 -1
@@ -1,11 +0,0 @@
1
- /** Extends a type with L1 published info (block number, hash, and timestamp) */
2
- export type L1Published<T> = {
3
- data: T;
4
- l1: L1PublishedData;
5
- };
6
- export type L1PublishedData = {
7
- blockNumber: bigint;
8
- timestamp: bigint;
9
- blockHash: string;
10
- };
11
- //# sourceMappingURL=published.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"published.d.ts","sourceRoot":"","sources":["../../../src/archiver/structs/published.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,MAAM,MAAM,WAAW,CAAC,CAAC,IAAI;IAC3B,IAAI,EAAE,CAAC,CAAC;IACR,EAAE,EAAE,eAAe,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC"}
package/dest/factory.d.ts DELETED
@@ -1,10 +0,0 @@
1
- import { type BlobSinkClientInterface } from '@aztec/blob-sink/client';
2
- import { type ArchiverApi, type Service } from '@aztec/circuit-types';
3
- import { type Maybe } from '@aztec/foundation/types';
4
- import { type DataStoreConfig } from '@aztec/kv-store/config';
5
- import { type TelemetryClient } from '@aztec/telemetry-client';
6
- import { type ArchiverConfig } from './archiver/config.js';
7
- export declare function createArchiver(config: ArchiverConfig & DataStoreConfig, blobSinkClient: BlobSinkClientInterface, opts?: {
8
- blockUntilSync: boolean;
9
- }, telemetry?: TelemetryClient): Promise<ArchiverApi & Maybe<Service>>;
10
- //# sourceMappingURL=factory.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../src/factory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AACvE,OAAO,EAAE,KAAK,WAAW,EAAE,KAAK,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAQtE,OAAO,EAAE,KAAK,KAAK,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAM9D,OAAO,EAAE,KAAK,eAAe,EAAsB,MAAM,yBAAyB,CAAC;AAGnF,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAI3D,wBAAsB,cAAc,CAClC,MAAM,EAAE,cAAc,GAAG,eAAe,EACxC,cAAc,EAAE,uBAAuB,EACvC,IAAI,GAAE;IAAE,cAAc,EAAE,OAAO,CAAA;CAA6B,EAC5D,SAAS,GAAE,eAAsC,GAChD,OAAO,CAAC,WAAW,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAUvC"}
package/dest/index.d.ts DELETED
@@ -1,5 +0,0 @@
1
- export * from './archiver/index.js';
2
- export * from './factory.js';
3
- export * from './rpc/index.js';
4
- export { retrieveBlocksFromRollup, retrieveL2ProofVerifiedEvents } from './archiver/data_retrieval.js';
5
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC;AAE/B,OAAO,EAAE,wBAAwB,EAAE,6BAA6B,EAAE,MAAM,8BAA8B,CAAC"}
@@ -1,4 +0,0 @@
1
- import { type ArchiverApi } from '@aztec/circuit-types';
2
- export declare function createArchiverClient(url: string, fetch?: (host: string, rpcMethod: string, body: any, useApiEndpoints: boolean, extraHeaders?: Record<string, string> | undefined, noRetry?: boolean | undefined) => Promise<any>): ArchiverApi;
3
- export declare function createArchiverRpcServer(handler: ArchiverApi): import("@aztec/foundation/json-rpc/server").SafeJsonRpcServer;
4
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/rpc/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,WAAW,EAAqB,MAAM,sBAAsB,CAAC;AAI3E,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,2KAAmC,GAAG,WAAW,CAEvG;AAED,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,WAAW,iEAE3D"}
@@ -1,4 +0,0 @@
1
- export * from './mock_l2_block_source.js';
2
- export * from './mock_l1_to_l2_message_source.js';
3
- export * from './mock_archiver.js';
4
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/test/index.ts"],"names":[],"mappings":"AAAA,cAAc,2BAA2B,CAAC;AAC1C,cAAc,mCAAmC,CAAC;AAClD,cAAc,oBAAoB,CAAC"}
@@ -1,22 +0,0 @@
1
- import { type L1ToL2MessageSource, type L2Block, type L2BlockSource } from '@aztec/circuit-types';
2
- import { type Fr } from '@aztec/circuits.js';
3
- import { MockL2BlockSource } from './mock_l2_block_source.js';
4
- /**
5
- * A mocked implementation of the archiver that implements L2BlockSource and L1ToL2MessageSource.
6
- */
7
- export declare class MockArchiver extends MockL2BlockSource implements L2BlockSource, L1ToL2MessageSource {
8
- private messageSource;
9
- setL1ToL2Messages(blockNumber: number, msgs: Fr[]): void;
10
- getL1ToL2Messages(blockNumber: bigint): Promise<Fr[]>;
11
- getL1ToL2MessageIndex(_l1ToL2Message: Fr): Promise<bigint | undefined>;
12
- }
13
- /**
14
- * A mocked implementation of the archiver with a set of precomputed blocks and messages.
15
- */
16
- export declare class MockPrefilledArchiver extends MockArchiver {
17
- private precomputed;
18
- constructor(precomputed: L2Block[], messages: Fr[][]);
19
- setPrefilledBlocks(blocks: L2Block[], messages: Fr[][]): void;
20
- createBlocks(numBlocks: number): Promise<void>;
21
- }
22
- //# sourceMappingURL=mock_archiver.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"mock_archiver.d.ts","sourceRoot":"","sources":["../../src/test/mock_archiver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,mBAAmB,EAAE,KAAK,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAClG,OAAO,EAAE,KAAK,EAAE,EAAE,MAAM,oBAAoB,CAAC;AAG7C,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAE9D;;GAEG;AACH,qBAAa,YAAa,SAAQ,iBAAkB,YAAW,aAAa,EAAE,mBAAmB;IAC/F,OAAO,CAAC,aAAa,CAAkC;IAEhD,iBAAiB,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE;IAIxD,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,EAAE,EAAE,CAAC;IAIrD,qBAAqB,CAAC,cAAc,EAAE,EAAE,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;CAGvE;AAED;;GAEG;AACH,qBAAa,qBAAsB,SAAQ,YAAY;IACrD,OAAO,CAAC,WAAW,CAAY;gBAEnB,WAAW,EAAE,OAAO,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,EAAE;IAM7C,kBAAkB,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,EAAE;IAO7C,YAAY,CAAC,SAAS,EAAE,MAAM;CAW/C"}
@@ -1,16 +0,0 @@
1
- import { type L1ToL2MessageSource } from '@aztec/circuit-types';
2
- import { type Fr } from '@aztec/circuits.js';
3
- /**
4
- * A mocked implementation of L1ToL2MessageSource to be used in tests.
5
- */
6
- export declare class MockL1ToL2MessageSource implements L1ToL2MessageSource {
7
- private blockNumber;
8
- private messagesPerBlock;
9
- constructor(blockNumber: number);
10
- setL1ToL2Messages(blockNumber: number, msgs: Fr[]): void;
11
- setBlockNumber(blockNumber: number): void;
12
- getL1ToL2Messages(blockNumber: bigint): Promise<Fr[]>;
13
- getL1ToL2MessageIndex(_l1ToL2Message: Fr): Promise<bigint | undefined>;
14
- getBlockNumber(): Promise<number>;
15
- }
16
- //# sourceMappingURL=mock_l1_to_l2_message_source.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"mock_l1_to_l2_message_source.d.ts","sourceRoot":"","sources":["../../src/test/mock_l1_to_l2_message_source.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAChE,OAAO,EAAE,KAAK,EAAE,EAAE,MAAM,oBAAoB,CAAC;AAE7C;;GAEG;AACH,qBAAa,uBAAwB,YAAW,mBAAmB;IAGrD,OAAO,CAAC,WAAW;IAF/B,OAAO,CAAC,gBAAgB,CAA2B;gBAE/B,WAAW,EAAE,MAAM;IAEhC,iBAAiB,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE;IAIjD,cAAc,CAAC,WAAW,EAAE,MAAM;IAIzC,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,EAAE,EAAE,CAAC;IAIrD,qBAAqB,CAAC,cAAc,EAAE,EAAE,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAItE,cAAc,IAAI,OAAO,CAAC,MAAM,CAAC;CAGlC"}
@@ -1,80 +0,0 @@
1
- import { type L1RollupConstants, L2Block, type L2BlockSource, type L2Tips, type TxHash, TxReceipt } from '@aztec/circuit-types';
2
- import { type BlockHeader, EthAddress } from '@aztec/circuits.js';
3
- /**
4
- * A mocked implementation of L2BlockSource to be used in tests.
5
- */
6
- export declare class MockL2BlockSource implements L2BlockSource {
7
- protected l2Blocks: L2Block[];
8
- private provenEpochNumber;
9
- private provenBlockNumber;
10
- private log;
11
- createBlocks(numBlocks: number): Promise<void>;
12
- addBlocks(blocks: L2Block[]): void;
13
- removeBlocks(numBlocks: number): void;
14
- setProvenBlockNumber(provenBlockNumber: number): void;
15
- setProvenEpochNumber(provenEpochNumber: number): void;
16
- /**
17
- * Method to fetch the rollup contract address at the base-layer.
18
- * @returns The rollup address.
19
- */
20
- getRollupAddress(): Promise<EthAddress>;
21
- /**
22
- * Method to fetch the registry contract address at the base-layer.
23
- * @returns The registry address.
24
- */
25
- getRegistryAddress(): Promise<EthAddress>;
26
- /**
27
- * Gets the number of the latest L2 block processed by the block source implementation.
28
- * @returns In this mock instance, returns the number of L2 blocks that we've mocked.
29
- */
30
- getBlockNumber(): Promise<number>;
31
- getProvenBlockNumber(): Promise<number>;
32
- getProvenL2EpochNumber(): Promise<number | undefined>;
33
- /**
34
- * Gets an l2 block.
35
- * @param number - The block number to return (inclusive).
36
- * @returns The requested L2 block.
37
- */
38
- getBlock(number: number): Promise<L2Block>;
39
- /**
40
- * Gets up to `limit` amount of L2 blocks starting from `from`.
41
- * @param from - Number of the first block to return (inclusive).
42
- * @param limit - The maximum number of blocks to return.
43
- * @returns The requested mocked L2 blocks.
44
- */
45
- getBlocks(from: number, limit: number, proven?: boolean): Promise<L2Block[]>;
46
- getBlockHeader(number: number | 'latest'): Promise<BlockHeader | undefined>;
47
- getBlocksForEpoch(epochNumber: bigint): Promise<L2Block[]>;
48
- /**
49
- * Gets a tx effect.
50
- * @param txHash - The hash of a transaction which resulted in the returned tx effect.
51
- * @returns The requested tx effect.
52
- */
53
- getTxEffect(txHash: TxHash): Promise<{
54
- data: import("@aztec/circuit-types").TxEffect;
55
- l2BlockNumber: number;
56
- l2BlockHash: `0x${string}`;
57
- } | undefined>;
58
- /**
59
- * Gets a receipt of a settled tx.
60
- * @param txHash - The hash of a tx we try to get the receipt for.
61
- * @returns The requested tx receipt (or undefined if not found).
62
- */
63
- getSettledTxReceipt(txHash: TxHash): Promise<TxReceipt | undefined>;
64
- getL2Tips(): Promise<L2Tips>;
65
- getL2EpochNumber(): Promise<bigint>;
66
- getL2SlotNumber(): Promise<bigint>;
67
- isEpochComplete(_epochNumber: bigint): Promise<boolean>;
68
- getL1Constants(): Promise<L1RollupConstants>;
69
- /**
70
- * Starts the block source. In this mock implementation, this is a noop.
71
- * @returns A promise that signals the initialization of the l2 block source on completion.
72
- */
73
- start(): Promise<void>;
74
- /**
75
- * Stops the block source. In this mock implementation, this is a noop.
76
- * @returns A promise that signals the l2 block source is now stopped.
77
- */
78
- stop(): Promise<void>;
79
- }
80
- //# sourceMappingURL=mock_l2_block_source.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"mock_l2_block_source.d.ts","sourceRoot":"","sources":["../../src/test/mock_l2_block_source.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,iBAAiB,EACtB,OAAO,EAEP,KAAK,aAAa,EAClB,KAAK,MAAM,EACX,KAAK,MAAM,EACX,SAAS,EAGV,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,KAAK,WAAW,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAIlE;;GAEG;AACH,qBAAa,iBAAkB,YAAW,aAAa;IACrD,SAAS,CAAC,QAAQ,EAAE,OAAO,EAAE,CAAM;IAEnC,OAAO,CAAC,iBAAiB,CAAa;IACtC,OAAO,CAAC,iBAAiB,CAAa;IAEtC,OAAO,CAAC,GAAG,CAAiD;IAE/C,YAAY,CAAC,SAAS,EAAE,MAAM;IAUpC,SAAS,CAAC,MAAM,EAAE,OAAO,EAAE;IAK3B,YAAY,CAAC,SAAS,EAAE,MAAM;IAK9B,oBAAoB,CAAC,iBAAiB,EAAE,MAAM;IAI9C,oBAAoB,CAAC,iBAAiB,EAAE,MAAM;IAIrD;;;OAGG;IACH,gBAAgB,IAAI,OAAO,CAAC,UAAU,CAAC;IAIvC;;;OAGG;IACH,kBAAkB,IAAI,OAAO,CAAC,UAAU,CAAC;IAIzC;;;OAGG;IACI,cAAc;IAId,oBAAoB,IAAI,OAAO,CAAC,MAAM,CAAC;IAIvC,sBAAsB,IAAI,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAI5D;;;;OAIG;IACI,QAAQ,CAAC,MAAM,EAAE,MAAM;IAI9B;;;;;OAKG;IACI,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO;IAQ9D,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC;IAI3E,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAU1D;;;;OAIG;IACU,WAAW,CAAC,MAAM,EAAE,MAAM;;;;;IAWvC;;;;OAIG;IACU,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC;IAkB1E,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC;IAkBlC,gBAAgB,IAAI,OAAO,CAAC,MAAM,CAAC;IAInC,eAAe,IAAI,OAAO,CAAC,MAAM,CAAC;IAIlC,eAAe,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAIvD,cAAc,IAAI,OAAO,CAAC,iBAAiB,CAAC;IAI5C;;;OAGG;IACI,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAI7B;;;OAGG;IACI,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;CAG7B"}