@aztec/prover-client 0.42.0 → 0.43.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dest/config.d.ts.map +1 -1
- package/dest/config.js +12 -8
- package/dest/mocks/test_context.d.ts.map +1 -1
- package/dest/mocks/test_context.js +2 -1
- package/dest/orchestrator/block-building-helpers.d.ts +5 -5
- package/dest/orchestrator/orchestrator.js +3 -3
- package/dest/prover-agent/memory-proving-queue.d.ts +14 -1
- package/dest/prover-agent/memory-proving-queue.d.ts.map +1 -1
- package/dest/prover-agent/memory-proving-queue.js +77 -11
- package/dest/prover-agent/prover-agent.d.ts.map +1 -1
- package/dest/prover-agent/prover-agent.js +32 -13
- package/dest/tx-prover/tx-prover.d.ts.map +1 -1
- package/dest/tx-prover/tx-prover.js +4 -2
- package/package.json +9 -9
- package/src/config.ts +13 -6
- package/src/mocks/test_context.ts +1 -0
- package/src/orchestrator/orchestrator.ts +2 -2
- package/src/prover-agent/memory-proving-queue.ts +98 -12
- package/src/prover-agent/prover-agent.ts +40 -15
- package/src/tx-prover/tx-prover.ts +4 -1
package/dest/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAIzD;;GAEG;AACH,MAAM,MAAM,kBAAkB,GAAG,YAAY,GAAG;IAC9C,0DAA0D;IAC1D,oBAAoB,EAAE,MAAM,CAAC;IAC7B,kCAAkC;IAClC,cAAc,EAAE,MAAM,CAAC;IACvB,2CAA2C;IAC3C,kBAAkB,EAAE,MAAM,CAAC;IAC3B,gCAAgC;IAChC,YAAY,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,gBAAgB,IAAI,kBAAkB,
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAIzD;;GAEG;AACH,MAAM,MAAM,kBAAkB,GAAG,YAAY,GAAG;IAC9C,0DAA0D;IAC1D,oBAAoB,EAAE,MAAM,CAAC;IAC7B,kCAAkC;IAClC,cAAc,EAAE,MAAM,CAAC;IACvB,2CAA2C;IAC3C,kBAAkB,EAAE,MAAM,CAAC;IAC3B,gCAAgC;IAChC,YAAY,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,gBAAgB,IAAI,kBAAkB,CAqCrD"}
|
package/dest/config.js
CHANGED
|
@@ -7,15 +7,13 @@ import { tmpdir } from 'os';
|
|
|
7
7
|
export function getProverEnvVars() {
|
|
8
8
|
const { AZTEC_NODE_URL, ACVM_WORKING_DIRECTORY = tmpdir(), ACVM_BINARY_PATH = '', BB_WORKING_DIRECTORY = tmpdir(), BB_BINARY_PATH = '',
|
|
9
9
|
/** @deprecated */
|
|
10
|
-
PROVER_AGENTS = '1', PROVER_AGENT_ENABLED = '1', PROVER_AGENT_CONCURRENCY = PROVER_AGENTS, PROVER_AGENT_POLL_INTERVAL_MS = '100', PROVER_REAL_PROOFS = '', } = process.env;
|
|
10
|
+
PROVER_AGENTS = '1', PROVER_AGENT_ENABLED = '1', PROVER_AGENT_CONCURRENCY = PROVER_AGENTS, PROVER_AGENT_POLL_INTERVAL_MS = '100', PROVER_REAL_PROOFS = '', PROVER_JOB_TIMEOUT_MS = '60000', PROVER_JOB_POLL_INTERVAL_MS = '1000', } = process.env;
|
|
11
11
|
const realProofs = ['1', 'true'].includes(PROVER_REAL_PROOFS);
|
|
12
12
|
const proverAgentEnabled = ['1', 'true'].includes(PROVER_AGENT_ENABLED);
|
|
13
|
-
const
|
|
14
|
-
const
|
|
15
|
-
const
|
|
16
|
-
const
|
|
17
|
-
? parsedProverAgentPollInterval
|
|
18
|
-
: 100;
|
|
13
|
+
const proverAgentConcurrency = safeParseNumber(PROVER_AGENT_CONCURRENCY, 1);
|
|
14
|
+
const proverAgentPollInterval = safeParseNumber(PROVER_AGENT_POLL_INTERVAL_MS, 100);
|
|
15
|
+
const proverJobTimeoutMs = safeParseNumber(PROVER_JOB_TIMEOUT_MS, 60000);
|
|
16
|
+
const proverJobPollIntervalMs = safeParseNumber(PROVER_JOB_POLL_INTERVAL_MS, 1000);
|
|
19
17
|
return {
|
|
20
18
|
acvmWorkingDirectory: ACVM_WORKING_DIRECTORY,
|
|
21
19
|
acvmBinaryPath: ACVM_BINARY_PATH,
|
|
@@ -26,6 +24,12 @@ export function getProverEnvVars() {
|
|
|
26
24
|
proverAgentPollInterval,
|
|
27
25
|
proverAgentConcurrency,
|
|
28
26
|
nodeUrl: AZTEC_NODE_URL,
|
|
27
|
+
proverJobPollIntervalMs,
|
|
28
|
+
proverJobTimeoutMs,
|
|
29
29
|
};
|
|
30
30
|
}
|
|
31
|
-
|
|
31
|
+
function safeParseNumber(value, defaultValue) {
|
|
32
|
+
const parsedValue = parseInt(value, 10);
|
|
33
|
+
return Number.isSafeInteger(parsedValue) ? parsedValue : defaultValue;
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2NvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sSUFBSSxDQUFDO0FBZ0I1Qjs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLGdCQUFnQjtJQUM5QixNQUFNLEVBQ0osY0FBYyxFQUNkLHNCQUFzQixHQUFHLE1BQU0sRUFBRSxFQUNqQyxnQkFBZ0IsR0FBRyxFQUFFLEVBQ3JCLG9CQUFvQixHQUFHLE1BQU0sRUFBRSxFQUMvQixjQUFjLEdBQUcsRUFBRTtJQUNuQixrQkFBa0I7SUFDbEIsYUFBYSxHQUFHLEdBQUcsRUFDbkIsb0JBQW9CLEdBQUcsR0FBRyxFQUMxQix3QkFBd0IsR0FBRyxhQUFhLEVBQ3hDLDZCQUE2QixHQUFHLEtBQUssRUFDckMsa0JBQWtCLEdBQUcsRUFBRSxFQUN2QixxQkFBcUIsR0FBRyxPQUFPLEVBQy9CLDJCQUEyQixHQUFHLE1BQU0sR0FDckMsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDO0lBRWhCLE1BQU0sVUFBVSxHQUFHLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0lBQzlELE1BQU0sa0JBQWtCLEdBQUcsQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUMsUUFBUSxDQUFDLG9CQUFvQixDQUFDLENBQUM7SUFDeEUsTUFBTSxzQkFBc0IsR0FBRyxlQUFlLENBQUMsd0JBQXdCLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDNUUsTUFBTSx1QkFBdUIsR0FBRyxlQUFlLENBQUMsNkJBQTZCLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDcEYsTUFBTSxrQkFBa0IsR0FBRyxlQUFlLENBQUMscUJBQXFCLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDekUsTUFBTSx1QkFBdUIsR0FBRyxlQUFlLENBQUMsMkJBQTJCLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFFbkYsT0FBTztRQUNMLG9CQUFvQixFQUFFLHNCQUFzQjtRQUM1QyxjQUFjLEVBQUUsZ0JBQWdCO1FBQ2hDLFlBQVksRUFBRSxjQUFjO1FBQzVCLGtCQUFrQixFQUFFLG9CQUFvQjtRQUN4QyxVQUFVO1FBQ1Ysa0JBQWtCO1FBQ2xCLHVCQUF1QjtRQUN2QixzQkFBc0I7UUFDdEIsT0FBTyxFQUFFLGNBQWM7UUFDdkIsdUJBQXVCO1FBQ3ZCLGtCQUFrQjtLQUNuQixDQUFDO0FBQ0osQ0FBQztBQUVELFNBQVMsZUFBZSxDQUFDLEtBQWEsRUFBRSxZQUFvQjtJQUMxRCxNQUFNLFdBQVcsR0FBRyxRQUFRLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ3hDLE9BQU8sTUFBTSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUM7QUFDeEUsQ0FBQyJ9
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test_context.d.ts","sourceRoot":"","sources":["../../src/mocks/test_context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EACL,KAAK,WAAW,EAEhB,KAAK,WAAW,EAEhB,KAAK,mBAAmB,EACxB,KAAK,EAAE,EACP,KAAK,WAAW,EACjB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,KAAK,GAAG,EACR,eAAe,EAEf,KAAK,SAAS,EACd,KAAK,SAAS,EAEf,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,KAAK,EAAE,EAAE,MAAM,0BAA0B,CAAC;AACnD,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEzD,OAAO,EACL,KAAK,2BAA2B,EAChC,KAAK,eAAe,EACpB,KAAK,qBAAqB,EAE1B,KAAK,cAAc,EACnB,eAAe,EAEf,KAAK,kBAAkB,EAEvB,KAAK,kBAAkB,EACxB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,KAAK,oBAAoB,EAAe,MAAM,oBAAoB,CAAC;AAG5E,OAAO,EAAE,KAAK,SAAS,EAAQ,MAAM,oBAAoB,CAAC;AAG1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AAEtE,OAAO,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AAsB9D,qBAAa,WAAW;IAGb,cAAc,EAAE,SAAS,CAAC,cAAc,CAAC;IACzC,iBAAiB,EAAE,SAAS,CAAC,2BAA2B,CAAC;IACzD,kBAAkB,EAAE,SAAS,CAAC,kBAAkB,CAAC;IACjD,eAAe,EAAE,eAAe;IAChC,kBAAkB,EAAE,kBAAkB;IACtC,eAAe,EAAE,eAAe;IAChC,QAAQ,EAAE,oBAAoB;IAC9B,MAAM,EAAE,mBAAmB;IAC3B,WAAW,EAAE,WAAW;IACxB,YAAY,EAAE,mBAAmB;IACjC,WAAW,EAAE,MAAM;IACnB,oBAAoB,EAAE,MAAM,EAAE;IAC9B,MAAM,EAAE,WAAW;IAdrB,WAAW,EAAE,WAAW,CAAC;gBAEvB,cAAc,EAAE,SAAS,CAAC,cAAc,CAAC,EACzC,iBAAiB,EAAE,SAAS,CAAC,2BAA2B,CAAC,EACzD,kBAAkB,EAAE,SAAS,CAAC,kBAAkB,CAAC,EACjD,eAAe,EAAE,eAAe,EAChC,kBAAkB,EAAE,kBAAkB,EACtC,eAAe,EAAE,eAAe,EAChC,QAAQ,EAAE,oBAAoB,EAC9B,MAAM,EAAE,mBAAmB,EAC3B,WAAW,EAAE,WAAW,EACxB,YAAY,EAAE,mBAAmB,EACjC,WAAW,EAAE,MAAM,EACnB,oBAAoB,EAAE,MAAM,EAAE,EAC9B,MAAM,EAAE,WAAW;WAKf,GAAG,CACd,MAAM,EAAE,WAAW,EACnB,WAAW,SAAI,EACf,YAAY,GAAE,CAAC,QAAQ,EAAE,cAAc,KAAK,OAAO,CAAC,mBAAmB,CACV,EAC7D,WAAW,SAAI;
|
|
1
|
+
{"version":3,"file":"test_context.d.ts","sourceRoot":"","sources":["../../src/mocks/test_context.ts"],"names":[],"mappings":"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"}
|
|
@@ -76,6 +76,7 @@ export class TestContext {
|
|
|
76
76
|
const queue = new MemoryProvingQueue();
|
|
77
77
|
const orchestrator = new ProvingOrchestrator(actualDb, queue);
|
|
78
78
|
const agent = new ProverAgent(localProver, proverCount);
|
|
79
|
+
queue.start();
|
|
79
80
|
agent.start(queue);
|
|
80
81
|
return new this(publicExecutor, publicContractsDB, publicWorldStateDB, processor, simulationProvider, globalVariables, actualDb, localProver, agent, orchestrator, blockNumber, [config?.directoryToCleanup ?? ''], logger);
|
|
81
82
|
}
|
|
@@ -113,4 +114,4 @@ export class TestContext {
|
|
|
113
114
|
return await this.publicProcessor.process(txs, maxTransactions, blockProver, txValidator);
|
|
114
115
|
}
|
|
115
116
|
}
|
|
116
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
117
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdF9jb250ZXh0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL21vY2tzL3Rlc3RfY29udGV4dC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFVQSxPQUFPLEVBRUwsZUFBZSxFQUNmLE1BQU0sRUFHTix1QkFBdUIsR0FDeEIsTUFBTSxvQkFBb0IsQ0FBQztBQUc1QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDckQsT0FBTyxFQUlMLDRCQUE0QixFQUU1QixlQUFlLEVBQ2YsZ0NBQWdDLEVBRWhDLGFBQWEsR0FFZCxNQUFNLGtCQUFrQixDQUFDO0FBQzFCLE9BQU8sRUFBNkIsV0FBVyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFNUUsT0FBTyxLQUFLLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDbEMsT0FBTyxFQUFrQixJQUFJLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUUxRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxvREFBb0QsQ0FBQztBQUN2RixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUN0RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUM3RSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDOUQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLHFCQUFxQixFQUFFLFdBQVcsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUV6RixNQUFNLGlCQUFpQjtJQUNyQixZQUFvQixZQUFpQyxFQUFVLG1CQUFtQix1QkFBdUIsRUFBRTtRQUF2RixpQkFBWSxHQUFaLFlBQVksQ0FBcUI7UUFBVSxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQTRCO0lBQUcsQ0FBQztJQUMvRyxhQUFhLENBQUMsTUFBYyxFQUFFLGVBQWdDLEVBQUUsY0FBb0I7UUFDbEYsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEVBQUUs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
|
|
@@ -21,11 +21,11 @@ export declare function getTreeSnapshot(id: MerkleTreeId, db: MerkleTreeOperatio
|
|
|
21
21
|
export declare function getKernelDataFor(tx: ProcessedTx, vk: VerificationKeyData): KernelData;
|
|
22
22
|
export declare function makeEmptyMembershipWitness<N extends number>(height: N): MembershipWitness<N>;
|
|
23
23
|
export declare function processPublicDataUpdateRequests(tx: ProcessedTx, db: MerkleTreeOperations): Promise<{
|
|
24
|
-
lowPublicDataWritesPreimages: [PublicDataTreeLeafPreimage, PublicDataTreeLeafPreimage, PublicDataTreeLeafPreimage, PublicDataTreeLeafPreimage, PublicDataTreeLeafPreimage, PublicDataTreeLeafPreimage, PublicDataTreeLeafPreimage, PublicDataTreeLeafPreimage, PublicDataTreeLeafPreimage, PublicDataTreeLeafPreimage, PublicDataTreeLeafPreimage, PublicDataTreeLeafPreimage, PublicDataTreeLeafPreimage, PublicDataTreeLeafPreimage, PublicDataTreeLeafPreimage, PublicDataTreeLeafPreimage, PublicDataTreeLeafPreimage, PublicDataTreeLeafPreimage, PublicDataTreeLeafPreimage, PublicDataTreeLeafPreimage, PublicDataTreeLeafPreimage, PublicDataTreeLeafPreimage, PublicDataTreeLeafPreimage, PublicDataTreeLeafPreimage, PublicDataTreeLeafPreimage, PublicDataTreeLeafPreimage, PublicDataTreeLeafPreimage, PublicDataTreeLeafPreimage, PublicDataTreeLeafPreimage, PublicDataTreeLeafPreimage, PublicDataTreeLeafPreimage, PublicDataTreeLeafPreimage];
|
|
25
|
-
lowPublicDataWritesMembershipWitnesses: [MembershipWitness<40>, MembershipWitness<40>, MembershipWitness<40>, MembershipWitness<40>, MembershipWitness<40>, MembershipWitness<40>, MembershipWitness<40>, MembershipWitness<40>, MembershipWitness<40>, MembershipWitness<40>, MembershipWitness<40>, MembershipWitness<40>, MembershipWitness<40>, MembershipWitness<40>, MembershipWitness<40>, MembershipWitness<40>, MembershipWitness<40>, MembershipWitness<40>, MembershipWitness<40>, MembershipWitness<40>, MembershipWitness<40>, MembershipWitness<40>, MembershipWitness<40>, MembershipWitness<40>, MembershipWitness<40>, MembershipWitness<40>, MembershipWitness<40>, MembershipWitness<40>, MembershipWitness<40>, MembershipWitness<40>, MembershipWitness<40>, MembershipWitness<40>];
|
|
26
|
-
newPublicDataSubtreeSiblingPath: [Fr, Fr, Fr, Fr, Fr, Fr, Fr, Fr, Fr, Fr, Fr, Fr, Fr, Fr, Fr, Fr, Fr, Fr, Fr, Fr, Fr, Fr, Fr, Fr, Fr, Fr, Fr, Fr, Fr, Fr, Fr, Fr, Fr, Fr
|
|
27
|
-
sortedPublicDataWrites: [PublicDataTreeLeaf, PublicDataTreeLeaf, PublicDataTreeLeaf, PublicDataTreeLeaf, PublicDataTreeLeaf, PublicDataTreeLeaf, PublicDataTreeLeaf, PublicDataTreeLeaf, PublicDataTreeLeaf, PublicDataTreeLeaf, PublicDataTreeLeaf, PublicDataTreeLeaf, PublicDataTreeLeaf, PublicDataTreeLeaf, PublicDataTreeLeaf, PublicDataTreeLeaf, PublicDataTreeLeaf, PublicDataTreeLeaf, PublicDataTreeLeaf, PublicDataTreeLeaf, PublicDataTreeLeaf, PublicDataTreeLeaf, PublicDataTreeLeaf, PublicDataTreeLeaf, PublicDataTreeLeaf, PublicDataTreeLeaf, PublicDataTreeLeaf, PublicDataTreeLeaf, PublicDataTreeLeaf, PublicDataTreeLeaf, PublicDataTreeLeaf, PublicDataTreeLeaf];
|
|
28
|
-
sortedPublicDataWritesIndexes: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number];
|
|
24
|
+
lowPublicDataWritesPreimages: [PublicDataTreeLeafPreimage, PublicDataTreeLeafPreimage, PublicDataTreeLeafPreimage, PublicDataTreeLeafPreimage, PublicDataTreeLeafPreimage, PublicDataTreeLeafPreimage, PublicDataTreeLeafPreimage, PublicDataTreeLeafPreimage, PublicDataTreeLeafPreimage, PublicDataTreeLeafPreimage, PublicDataTreeLeafPreimage, PublicDataTreeLeafPreimage, PublicDataTreeLeafPreimage, PublicDataTreeLeafPreimage, PublicDataTreeLeafPreimage, PublicDataTreeLeafPreimage, PublicDataTreeLeafPreimage, PublicDataTreeLeafPreimage, PublicDataTreeLeafPreimage, PublicDataTreeLeafPreimage, PublicDataTreeLeafPreimage, PublicDataTreeLeafPreimage, PublicDataTreeLeafPreimage, PublicDataTreeLeafPreimage, PublicDataTreeLeafPreimage, PublicDataTreeLeafPreimage, PublicDataTreeLeafPreimage, PublicDataTreeLeafPreimage, PublicDataTreeLeafPreimage, PublicDataTreeLeafPreimage, PublicDataTreeLeafPreimage, PublicDataTreeLeafPreimage, PublicDataTreeLeafPreimage, PublicDataTreeLeafPreimage, PublicDataTreeLeafPreimage, PublicDataTreeLeafPreimage, PublicDataTreeLeafPreimage, PublicDataTreeLeafPreimage, PublicDataTreeLeafPreimage, PublicDataTreeLeafPreimage, PublicDataTreeLeafPreimage, PublicDataTreeLeafPreimage, PublicDataTreeLeafPreimage, PublicDataTreeLeafPreimage, PublicDataTreeLeafPreimage, PublicDataTreeLeafPreimage, PublicDataTreeLeafPreimage, PublicDataTreeLeafPreimage, PublicDataTreeLeafPreimage, PublicDataTreeLeafPreimage, PublicDataTreeLeafPreimage, PublicDataTreeLeafPreimage, PublicDataTreeLeafPreimage, PublicDataTreeLeafPreimage, PublicDataTreeLeafPreimage, PublicDataTreeLeafPreimage, PublicDataTreeLeafPreimage, PublicDataTreeLeafPreimage, PublicDataTreeLeafPreimage, PublicDataTreeLeafPreimage, PublicDataTreeLeafPreimage, PublicDataTreeLeafPreimage, PublicDataTreeLeafPreimage, PublicDataTreeLeafPreimage];
|
|
25
|
+
lowPublicDataWritesMembershipWitnesses: [MembershipWitness<40>, MembershipWitness<40>, MembershipWitness<40>, MembershipWitness<40>, MembershipWitness<40>, MembershipWitness<40>, MembershipWitness<40>, MembershipWitness<40>, MembershipWitness<40>, MembershipWitness<40>, MembershipWitness<40>, MembershipWitness<40>, MembershipWitness<40>, MembershipWitness<40>, MembershipWitness<40>, MembershipWitness<40>, MembershipWitness<40>, MembershipWitness<40>, MembershipWitness<40>, MembershipWitness<40>, MembershipWitness<40>, MembershipWitness<40>, MembershipWitness<40>, MembershipWitness<40>, MembershipWitness<40>, MembershipWitness<40>, MembershipWitness<40>, MembershipWitness<40>, MembershipWitness<40>, MembershipWitness<40>, MembershipWitness<40>, MembershipWitness<40>, MembershipWitness<40>, MembershipWitness<40>, MembershipWitness<40>, MembershipWitness<40>, MembershipWitness<40>, MembershipWitness<40>, MembershipWitness<40>, MembershipWitness<40>, MembershipWitness<40>, MembershipWitness<40>, MembershipWitness<40>, MembershipWitness<40>, MembershipWitness<40>, MembershipWitness<40>, MembershipWitness<40>, MembershipWitness<40>, MembershipWitness<40>, MembershipWitness<40>, MembershipWitness<40>, MembershipWitness<40>, MembershipWitness<40>, MembershipWitness<40>, MembershipWitness<40>, MembershipWitness<40>, MembershipWitness<40>, MembershipWitness<40>, MembershipWitness<40>, MembershipWitness<40>, MembershipWitness<40>, MembershipWitness<40>, MembershipWitness<40>, MembershipWitness<40>];
|
|
26
|
+
newPublicDataSubtreeSiblingPath: [Fr, Fr, Fr, Fr, Fr, Fr, Fr, Fr, Fr, Fr, Fr, Fr, Fr, Fr, Fr, Fr, Fr, Fr, Fr, Fr, Fr, Fr, Fr, Fr, Fr, Fr, Fr, Fr, Fr, Fr, Fr, Fr, Fr, Fr];
|
|
27
|
+
sortedPublicDataWrites: [PublicDataTreeLeaf, PublicDataTreeLeaf, PublicDataTreeLeaf, PublicDataTreeLeaf, PublicDataTreeLeaf, PublicDataTreeLeaf, PublicDataTreeLeaf, PublicDataTreeLeaf, PublicDataTreeLeaf, PublicDataTreeLeaf, PublicDataTreeLeaf, PublicDataTreeLeaf, PublicDataTreeLeaf, PublicDataTreeLeaf, PublicDataTreeLeaf, PublicDataTreeLeaf, PublicDataTreeLeaf, PublicDataTreeLeaf, PublicDataTreeLeaf, PublicDataTreeLeaf, PublicDataTreeLeaf, PublicDataTreeLeaf, PublicDataTreeLeaf, PublicDataTreeLeaf, PublicDataTreeLeaf, PublicDataTreeLeaf, PublicDataTreeLeaf, PublicDataTreeLeaf, PublicDataTreeLeaf, PublicDataTreeLeaf, PublicDataTreeLeaf, PublicDataTreeLeaf, PublicDataTreeLeaf, PublicDataTreeLeaf, PublicDataTreeLeaf, PublicDataTreeLeaf, PublicDataTreeLeaf, PublicDataTreeLeaf, PublicDataTreeLeaf, PublicDataTreeLeaf, PublicDataTreeLeaf, PublicDataTreeLeaf, PublicDataTreeLeaf, PublicDataTreeLeaf, PublicDataTreeLeaf, PublicDataTreeLeaf, PublicDataTreeLeaf, PublicDataTreeLeaf, PublicDataTreeLeaf, PublicDataTreeLeaf, PublicDataTreeLeaf, PublicDataTreeLeaf, PublicDataTreeLeaf, PublicDataTreeLeaf, PublicDataTreeLeaf, PublicDataTreeLeaf, PublicDataTreeLeaf, PublicDataTreeLeaf, PublicDataTreeLeaf, PublicDataTreeLeaf, PublicDataTreeLeaf, PublicDataTreeLeaf, PublicDataTreeLeaf, PublicDataTreeLeaf];
|
|
28
|
+
sortedPublicDataWritesIndexes: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number];
|
|
29
29
|
}>;
|
|
30
30
|
export declare function getSubtreeSiblingPath(treeId: MerkleTreeId, subtreeHeight: number, db: MerkleTreeOperations): Promise<Fr[]>;
|
|
31
31
|
export declare function getMembershipWitnessFor<N extends number>(value: Fr, treeId: MerkleTreeId, height: N, db: MerkleTreeOperations): Promise<MembershipWitness<N>>;
|
|
@@ -3,7 +3,7 @@ import { BlockProofError, PROVING_STATUS, } from '@aztec/circuit-types/interface
|
|
|
3
3
|
import { AGGREGATION_OBJECT_LENGTH, AvmCircuitInputs, BaseParityInputs, Fr, L1_TO_L2_MSG_SUBTREE_HEIGHT, L1_TO_L2_MSG_SUBTREE_SIBLING_PATH_LENGTH, NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP, NUM_BASE_PARITY_PER_ROOT_PARITY, RootParityInputs, VerificationKeyData, makeEmptyProof, } from '@aztec/circuits.js';
|
|
4
4
|
import { makeTuple } from '@aztec/foundation/array';
|
|
5
5
|
import { padArrayEnd } from '@aztec/foundation/collection';
|
|
6
|
-
import {
|
|
6
|
+
import { AbortError } from '@aztec/foundation/error';
|
|
7
7
|
import { createDebugLogger } from '@aztec/foundation/log';
|
|
8
8
|
import { promiseWithResolvers } from '@aztec/foundation/promise';
|
|
9
9
|
import { BufferReader } from '@aztec/foundation/serialize';
|
|
@@ -304,7 +304,7 @@ export class ProvingOrchestrator {
|
|
|
304
304
|
await callback(result);
|
|
305
305
|
}
|
|
306
306
|
catch (err) {
|
|
307
|
-
if (err instanceof
|
|
307
|
+
if (err instanceof AbortError) {
|
|
308
308
|
// operation was cancelled, probably because the block was cancelled
|
|
309
309
|
// drop this result
|
|
310
310
|
return;
|
|
@@ -571,4 +571,4 @@ function extractAggregationObject(proof, numPublicInputs) {
|
|
|
571
571
|
const buffer = proof.buffer.subarray(Fr.SIZE_IN_BYTES * (numPublicInputs - AGGREGATION_OBJECT_LENGTH), Fr.SIZE_IN_BYTES * numPublicInputs);
|
|
572
572
|
return BufferReader.asReader(buffer).readArray(AGGREGATION_OBJECT_LENGTH, Fr);
|
|
573
573
|
}
|
|
574
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JjaGVzdHJhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL29yY2hlc3RyYXRvci9vcmNoZXN0cmF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLElBQUksRUFDSixPQUFPLEVBQ1AsWUFBWSxFQUdaLGdCQUFnQixFQUNoQixFQUFFLEVBRUYsb0JBQW9CLEVBQ3BCLHNCQUFzQixFQUN0QixVQUFVLEdBQ1gsTUFBTSxzQkFBc0IsQ0FBQztBQUM5QixPQUFPLEVBQ0wsZUFBZSxFQUVmLGNBQWMsR0FLZixNQUFNLGlDQUFpQyxDQUFDO0FBQ3pDLE9BQU8sRUFDTCx5QkFBeUIsRUFDekIsZ0JBQWdCLEVBRWhCLGdCQUFnQixFQUVoQixFQUFFLEVBSUYsMkJBQTJCLEVBQzNCLHdDQUF3QyxFQUV4QyxtQ0FBbUMsRUFDbkMsK0JBQStCLEVBTS9CLGdCQUFnQixFQUVoQixtQkFBbUIsRUFFbkIsY0FBYyxHQUNmLE1BQU0sb0JBQW9CLENBQUM7QUFDNUIsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3BELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDMUQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDakUsT0FBTyxFQUFFLFlBQVksRUFBYyxNQUFNLDZCQUE2QixDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUd6RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRS9CLE9BQU8sRUFDTCxvQkFBb0IsRUFDcEIsdUJBQXVCLEVBQ3ZCLGtCQUFrQixFQUNsQixxQkFBcUIsRUFDckIsZUFBZSxFQUNmLG9CQUFvQixFQUNwQixrQkFBa0IsRUFDbEIsVUFBVSxHQUNYLE1BQU0sNkJBQTZCLENBQUM7QUFDckMsT0FBTyxFQUE2QixZQUFZLEVBQXNCLE1BQU0sb0JBQW9CLENBQUM7QUFDakcsT0FBTyxFQUFFLGVBQWUsRUFBRSxjQUFjLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUV4RSxNQUFNLE1BQU0sR0FBRyxpQkFBaUIsQ0FBQyxtQ0FBbUMsQ0FBQyxDQUFDO0FBRXRFOzs7Ozs7Ozs7R0FTRztBQUVIOztHQUVHO0FBQ0gsTUFBTSxPQUFPLG1CQUFtQjtJQUs5QixZQUFvQixFQUF3QixFQUFVLE1BQTJCLEVBQVUsYUFBc0I7UUFBN0YsT0FBRSxHQUFGLEVBQUUsQ0FBc0I7UUFBVSxXQUFNLEdBQU4sTUFBTSxDQUFxQjtRQUFVLGtCQUFhLEdBQWIsYUFBYSxDQUFTO1FBSnpHLGlCQUFZLEdBQTZCLFNBQVMsQ0FBQztRQUNuRCx1QkFBa0IsR0FBc0IsRUFBRSxDQUFDO1FBQzNDLGNBQVMsR0FBbUMsU0FBUyxDQUFDO0lBRXNELENBQUM7SUFFckg7O09BRUc7SUFDSSxLQUFLO1FBQ1YsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7SUFDN0IsQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDSSxLQUFLLENBQUMsYUFBYSxDQUN4QixNQUFjLEVBQ2QsZUFBZ0MsRUFDaEMsY0FBb0IsRUFDcEIsZ0JBQWtDO1FBRWxDLDJDQUEyQztRQUMzQyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ3hCLElBQUksQ0FBQyxhQUFhLEdBQUcsTUFBTSxJQUFJLENBQUMsRUFBRSxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFDMUQsQ0FBQztRQUVELDhEQUE4RDtRQUM5RCwrRUFBK0U7UUFDL0UsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLElBQUksTUFBTSxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQzdFLE1BQU0sSUFBSSxLQUFLLENBQUMsOEVBQThFLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFDM0csQ0FBQztRQUNELCtEQUErRDtRQUMvRCxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDbkIsTUFBTSxDQUFDLElBQUksQ0FBQywyQkFBMkIsTUFBTSxlQUFlLENBQUMsQ0FBQztRQUM5RCxtRUFBbUU7UUFDbkUsSUFBSSxnQkFBZ0IsR0FBdUIsRUFBRSxDQUFDO1FBQzlDLElBQUksb0JBQTJFLENBQUM7UUFDaEYsSUFBSSxDQUFDO1lBQ0gsb0JBQW9CLEdBQUcsV0FBVyxDQUFDLGNBQWMsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLG1DQUFtQyxDQUFDLENBQUM7UUFDbkcsQ0FBQztRQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7WUFDYixNQUFNLElBQUksS0FBSyxDQUFDLDRCQUE0QixDQUFDLENBQUM7UUFDaEQsQ0FBQztRQUNELGdCQUFnQixHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxNQUFNLEVBQUUsK0JBQStCLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUNsRixnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsb0JBQW9CLEVBQUUsQ0FBQyxDQUFDLENBQ3BELENBQUM7UUFFRixNQUFNLG1CQUFtQixHQUFHLE1BQU0sZUFBZSxDQUFDLFlBQVksQ0FBQyxxQkFBcUIsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7UUFFL0YsTUFBTSx3Q0FBd0MsR0FBRyxNQUFNLHFCQUFxQixDQUMxRSxZQUFZLENBQUMscUJBQXFCLEVBQ2xDLDJCQUEyQixFQUMzQixJQUFJLENBQUMsRUFBRSxDQUNSLENBQUM7UUFFRixNQUFNLG1DQUFtQyxHQUFHLFNBQVMsQ0FDbkQsd0NBQXdDLEVBQ3hDLENBQUMsQ0FBQyxFQUFFLENBQ0YsQ0FBQyxHQUFHLHdDQUF3QyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsd0NBQXdDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQzdHLENBQUMsQ0FDRixDQUFDO1FBRUYsOERBQThEO1FBQzlELE1BQU0sSUFBSSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUFDLHFCQUFxQixFQUFFLG9CQUFvQixDQUFDLENBQUM7UUFFckYsTUFBTSxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxHQUFHLG9CQUFvQixFQUFpQixDQUFDO1FBQ3JGLE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQzVCLENBQUMsTUFBTSxFQUFpQixFQUFFLENBQUMsQ0FBQztZQUMxQixNQUFNLEVBQUUsY0FBYyxDQUFDLE9BQU87WUFDOUIsTUFBTTtTQUNQLENBQUMsQ0FDSCxDQUFDO1FBRUYsTUFBTSxZQUFZLEdBQUcsSUFBSSxZQUFZLENBQ25DLE1BQU0sRUFDTixPQUFPLEVBQ1AsTUFBTSxFQUNOLGVBQWUsRUFDZixvQkFBb0IsRUFDcEIsZ0JBQWdCLENBQUMsTUFBTSxFQUN2QixtQkFBbUIsRUFDbkIsbUNBQW1DLEVBQ25DLGdCQUFnQixDQUNqQixDQUFDO1FBRUYsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ2pELElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxZQUFZLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDdEUsQ0FBQztRQUVELElBQUksQ0FBQyxZQUFZLEdBQUcsWUFBWSxDQUFDO1FBRWpDLE1BQU0sTUFBTSxHQUFrQjtZQUM1QixjQUFjLEVBQUUsT0FBTztTQUN4QixDQUFDO1FBQ0YsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVEOzs7T0FHRztJQUNJLEtBQUssQ0FBQyxRQUFRLENBQUMsRUFBZTtRQUNuQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3ZCLE1BQU0sSUFBSSxLQUFLLENBQUMsc0VBQXNFLENBQUMsQ0FBQztRQUMxRixDQUFDO1FBRUQsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsdUJBQXVCLEVBQUUsRUFBRSxDQUFDO1lBQ2pELE1BQU0sSUFBSSxLQUFLLENBQUMsMkNBQTJDLENBQUMsQ0FBQztRQUMvRCxDQUFDO1FBRUQsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBRWYsTUFBTSxDQUFDLElBQUksQ0FBQyx5QkFBeUIsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7UUFFaEQsTUFBTSxDQUFDLE1BQU0sRUFBRSxhQUFhLENBQUMsR0FBRyxNQUFNLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ3JGLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsYUFBYSxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDdkUsQ0FBQztJQUVEOztPQUVHO0lBQ0ksS0FBSyxDQUFDLGlCQUFpQjtRQUM1QixJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3ZCLE1BQU0sSUFBSSxLQUFLLENBQUMsOEZBQThGLENBQUMsQ0FBQztRQUNsSCxDQUFDO1FBRUQsd0RBQXdEO1FBQ3hELE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsb0JBQW9CLENBQUM7UUFDOUYsSUFBSSxjQUFjLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDekIsT0FBTztRQUNULENBQUM7UUFFRCxNQUFNLENBQUMsS0FBSyxDQUFDLHVCQUF1QixjQUFjLHFCQUFxQixDQUFDLENBQUM7UUFDekUsb0NBQW9DO1FBQ3BDLHlFQUF5RTtRQUN6RSxxQkFBcUI7UUFDckIsbURBQW1EO1FBQ25ELE1BQU0saUJBQWlCLEdBQUcsb0JBQW9CLENBQzVDLElBQUksQ0FBQyxhQUFhLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxFQUMxRCxJQUFJLENBQUMsWUFBWSxDQUFDLGVBQWUsQ0FBQyxPQUFPLEVBQ3pDLElBQUksQ0FBQyxZQUFZLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FDMUMsQ0FBQztRQUNGLE1BQU0sUUFBUSxHQUFpRSxFQUFFLENBQUM7UUFDbEYsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLGNBQWMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ3hDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLEdBQUcsTUFBTSxJQUFJLENBQUMsa0JBQWtCLENBQUMsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQy9GLE1BQU0sT0FBTyxHQUFHO2dCQUNkLE1BQU07Z0JBQ04sUUFBUTthQUNULENBQUM7WUFDRixRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3pCLENBQUM7UUFFRCwwQkFBMEI7UUFDMUIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsUUFBUSxFQUFFLGlCQUFpQixDQUFDLENBQUM7SUFDekUsQ0FBQztJQUVELDREQUE0RDtJQUM1RCxzRkFBc0Y7SUFDOUUsaUJBQWlCLENBQ3ZCLFlBQTBCLEVBQzFCLFFBQXNFLEVBQ3RFLGlCQUE4QjtRQUU5QixJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNuQiwwQ0FBMEM7WUFDMUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxhQUFhLFFBQVEsQ0FBQyxNQUFNLGlEQUFpRCxDQUFDLENBQUM7WUFDNUYsSUFBSSxDQUFDLHdCQUF3QixDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLFlBQVksQ0FBQyxDQUFDO1lBQ3RFLE9BQU87UUFDVCxDQUFDO1FBQ0QsTUFBTSxDQUFDLEtBQUssQ0FBQyx5REFBeUQsUUFBUSxDQUFDLE1BQU0sV0FBVyxDQUFDLENBQUM7UUFDbEcsSUFBSSxDQUFDLGVBQWUsQ0FDbEIsWUFBWSxFQUNaLE1BQU0sQ0FBQyxFQUFFLENBQ1AsSUFBSSxDQUFDLE1BQU0sQ0FBQywwQkFBMEIsQ0FDcEM7WUFDRSxxSEFBcUg7WUFDckgsb0hBQW9IO1lBQ3BILDRFQUE0RTtZQUM1RSxPQUFPLEVBQUUsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsT0FBTztZQUMzRCxPQUFPLEVBQUUsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsT0FBTztZQUMzRCxNQUFNLEVBQUUsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxnQkFBZ0I7U0FDMUQsRUFDRCxNQUFNLENBQ1AsRUFDSCxNQUFNLENBQUMsRUFBRTtZQUNQLE1BQU0sQ0FBQyxLQUFLLENBQUMsaURBQWlELFFBQVEsQ0FBQyxNQUFNLGNBQWMsQ0FBQyxDQUFDO1lBQzdGLElBQUksQ0FBQyxTQUFTLEdBQUcsc0JBQXNCLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDaEQsSUFBSSxDQUFDLHdCQUF3QixDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBQ3hFLENBQUMsQ0FDRixDQUFDO0lBQ0osQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ssd0JBQXdCLENBQzlCLFFBQXNFLEVBQ3RFLFNBQTZCLEVBQzdCLFlBQTBCO1FBRTFCLHNGQUFzRjtRQUN0Rix5Q0FBeUM7UUFDekMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUN6QyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxFQUFFLEdBQUcsU0FBUyxDQUFDLGVBQWUsQ0FBQztZQUM3RCxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEdBQUcsU0FBUyxDQUFDLGNBQWMsQ0FBQztZQUMvRCxJQUFJLENBQUMsaUJBQWlCLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLFNBQVMsRUFBRSxZQUFZLENBQUMsQ0FBQztRQUM1RixDQUFDO0lBQ0gsQ0FBQztJQUVEOztPQUVHO0lBQ0ksV0FBVztRQUNoQixLQUFLLE1BQU0sVUFBVSxJQUFJLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1lBQ2pELFVBQVUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNyQixDQUFDO1FBRUQsSUFBSSxDQUFDLFlBQVksRUFBRSxNQUFNLEVBQUUsQ0FBQztJQUM5QixDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksS0FBSyxDQUFDLGFBQWE7UUFDeEIsSUFBSSxDQUFDO1lBQ0gsSUFDRSxDQUFDLElBQUksQ0FBQyxZQUFZO2dCQUNsQixDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsc0JBQXNCO2dCQUN6QyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsVUFBVTtnQkFDN0IsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLHNCQUFzQixFQUN6QyxDQUFDO2dCQUNELE1BQU0sSUFBSSxLQUFLLENBQUMsMEVBQTBFLENBQUMsQ0FBQztZQUM5RixDQUFDO1lBQ0QsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUM1QixNQUFNLElBQUksS0FBSyxDQUFDLHlCQUF5QixDQUFDLENBQUM7WUFDN0MsQ0FBQztZQUVELE1BQU0saUJBQWlCLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxzQkFBc0IsQ0FBQztZQUVuRSxNQUFNLEVBQUUsS0FBSyxDQUFDLG9DQUFvQyxDQUFDLENBQUM7WUFDcEQsTUFBTSxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUV0RCxNQUFNLGtCQUFrQixDQUFDLGlCQUFpQixFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUVyRCxvRkFBb0Y7WUFDcEYsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDO1lBQzFELE1BQU0saUJBQWlCLEdBQWUsSUFBSSxDQUFDLFlBQWEsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQ25GLFVBQVUsQ0FBQyxjQUFjLENBQUMsV0FBVyxFQUFFLE9BQU8sQ0FBQyxDQUNoRCxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7WUFDMUMsTUFBTSxTQUFTLEdBQUcsSUFBSSxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQztZQUU5QyxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDO2dCQUNqQyxPQUFPLEVBQUUsaUJBQWlCLENBQUMsT0FBTztnQkFDbEMsTUFBTSxFQUFFLGlCQUFpQixDQUFDLE1BQU07Z0JBQ2hDLElBQUksRUFBRSxTQUFTO2FBQ2hCLENBQUMsQ0FBQztZQUVILElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUMsTUFBTSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDO2dCQUN4RyxNQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO2dCQUNqQyxNQUFNLElBQUksS0FBSyxDQUNiLDhCQUE4QixPQUFPLENBQUMsSUFBSTtxQkFDdkMsaUJBQWlCLEVBQUU7cUJBQ25CLFFBQVEsQ0FBQyxLQUFLLENBQUMsT0FBTyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsaUJBQWlCLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUN0RyxDQUFDO1lBQ0osQ0FBQztZQUVELE1BQU0sQ0FBQyxJQUFJLENBQUMsNkJBQTZCLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1lBRTVELElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxHQUFHLE9BQU8sQ0FBQztZQUVsQyxNQUFNLFdBQVcsR0FBZ0I7Z0JBQy9CLEtBQUssRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLFVBQVU7Z0JBQ25DLGlCQUFpQixFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsc0JBQXNCO2dCQUMzRCxLQUFLLEVBQUUsT0FBTzthQUNmLENBQUM7WUFFRixZQUFZLENBQUMsY0FBYyxFQUFFO2dCQUMzQixLQUFLLEVBQUUsT0FBTyxDQUFDLFFBQVEsRUFBRTtnQkFDekIsS0FBSyxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRTtnQkFDOUMsaUJBQWlCLEVBQUUsV0FBVyxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQzthQUN4RSxDQUFDLENBQUM7WUFFSCxPQUFPLFdBQVcsQ0FBQztRQUNyQixDQUFDO1FBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztZQUNiLE1BQU0sSUFBSSxlQUFlLENBQ3ZCLEdBQUcsSUFBSSxPQUFPLEdBQUcsS0FBSyxRQUFRLElBQUksU0FBUyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUN0RixJQUFJLENBQUMsWUFBWSxFQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FDcEUsQ0FBQztRQUNKLENBQUM7SUFDSCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNLLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxFQUFlLEVBQUUsWUFBMEI7UUFDMUUsNERBQTREO1FBQzVELHVHQUF1RztRQUN2RyxNQUFNLDZCQUE2QixHQUFHLFlBQVksQ0FBQyw2QkFBNkIsQ0FBQyxvQkFBb0IsQ0FBQztRQUV0RyxNQUFNLFFBQVEsR0FBRyxNQUFNLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxZQUFZLEVBQUUsRUFBRSxFQUFFLDZCQUE2QixDQUFDLENBQUM7UUFDckcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2QsOEJBQThCO1lBQzlCLE1BQU0sSUFBSSxLQUFLLENBQUMsaUVBQWlFLENBQUMsQ0FBQztRQUNyRixDQUFDO1FBQ0QsT0FBTyxRQUFRLENBQUM7SUFDbEIsQ0FBQztJQUVPLGlCQUFpQixDQUN2QixNQUF3QixFQUN4QixhQUE0QixFQUM1QixFQUFlLEVBQ2YsWUFBMEI7UUFFMUIsTUFBTSxjQUFjLEdBQUcsSUFBSSxjQUFjLENBQ3ZDLEVBQUUsRUFDRixNQUFNLEVBQ04sYUFBYSxFQUNiLFlBQVksQ0FBQyw2QkFBNkIsQ0FBQyw0QkFBNEIsQ0FDeEUsQ0FBQztRQUNGLE1BQU0sT0FBTyxHQUFHLFlBQVksQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDdEQsTUFBTSxnQkFBZ0IsR0FBRyxjQUFjLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztRQUM5RCxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUN0QixzREFBc0Q7WUFDdEQsTUFBTSxDQUFDLEtBQUssQ0FBQyxpQ0FBaUMsT0FBTyxFQUFFLENBQUMsQ0FBQztZQUN6RCxJQUFJLENBQUMsaUJBQWlCLENBQUMsWUFBWSxFQUFFLE1BQU0sQ0FBQyxPQUFPLENBQUMsRUFBRSxjQUFjLENBQUMsQ0FBQztZQUN0RSxPQUFPO1FBQ1QsQ0FBQztRQUNELGdEQUFnRDtRQUNoRCxxR0FBcUc7UUFDckcsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLGdCQUFnQixFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDMUMsTUFBTSxDQUFDLEtBQUssQ0FBQyx3QkFBd0IsQ0FBQyxXQUFXLE9BQU8sRUFBRSxDQUFDLENBQUM7WUFDNUQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzNDLENBQUM7SUFDSCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSyxlQUFlLENBQ3JCLFlBQXNDLEVBQ3RDLE9BQTRDLEVBQzVDLFFBQTZDO1FBRTdDLElBQUksQ0FBQyxZQUFZLEVBQUUsV0FBVyxFQUFFLEVBQUUsQ0FBQztZQUNqQyxNQUFNLENBQUMsS0FBSyxDQUFDLDBDQUEwQyxDQUFDLENBQUM7WUFDekQsT0FBTztRQUNULENBQUM7UUFFRCxNQUFNLFVBQVUsR0FBRyxJQUFJLGVBQWUsRUFBRSxDQUFDO1FBQ3pDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7UUFFekMsOEdBQThHO1FBQzlHLDhFQUE4RTtRQUM5RSxNQUFNLE9BQU8sR0FBRyxLQUFLLElBQUksRUFBRTtZQUN6QixJQUFJLENBQUM7Z0JBQ0gsc0VBQXNFO2dCQUN0RSxJQUFJLFVBQVUsQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUM7b0JBQzlCLE9BQU87Z0JBQ1QsQ0FBQztnQkFFRCxNQUFNLE1BQU0sR0FBRyxNQUFNLE9BQU8sQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQ2hELElBQUksQ0FBQyxZQUFZLEVBQUUsV0FBVyxFQUFFLEVBQUUsQ0FBQztvQkFDakMsTUFBTSxDQUFDLEtBQUssQ0FBQywwQ0FBMEMsQ0FBQyxDQUFDO29CQUN6RCxPQUFPO2dCQUNULENBQUM7Z0JBRUQsNkRBQTZEO2dCQUM3RCxrRUFBa0U7Z0JBQ2xFLElBQUksVUFBVSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQztvQkFDOUIsT0FBTztnQkFDVCxDQUFDO2dCQUVELE1BQU0sUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3pCLENBQUM7WUFBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO2dCQUNiLElBQUksR0FBRyxZQUFZLFlBQVksRUFBRSxDQUFDO29CQUNoQyxvRUFBb0U7b0JBQ3BFLG1CQUFtQjtvQkFDbkIsT0FBTztnQkFDVCxDQUFDO2dCQUVELE1BQU0sQ0FBQyxLQUFLLENBQUMsK0JBQStCLENBQUMsQ0FBQztnQkFDOUMsWUFBYSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUM7WUFDakMsQ0FBQztvQkFBUyxDQUFDO2dCQUNULE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUM7Z0JBQzFELElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7b0JBQ2YsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQzNDLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQyxDQUFDO1FBRUYsOERBQThEO1FBQzlELFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUN4QixDQUFDO0lBRUQsdUZBQXVGO0lBQy9FLEtBQUssQ0FBQyx1QkFBdUIsQ0FDbkMsWUFBc0MsRUFDdEMsRUFBZSxFQUNmLFFBQTZCO1FBRTdCLElBQUksQ0FBQyxZQUFZLEVBQUUsV0FBVyxFQUFFLEVBQUUsQ0FBQztZQUNqQyxNQUFNLENBQUMsS0FBSyxDQUFDLGlEQUFpRCxDQUFDLENBQUM7WUFDaEUsT0FBTztRQUNULENBQUM7UUFDRCxNQUFNLE1BQU0sR0FBRyxNQUFNLG9CQUFvQixDQUFDLEVBQUUsRUFBRSxZQUFZLENBQUMsZUFBZSxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDL0YsTUFBTSxRQUFRLEdBQUcsQ0FBQyxZQUFZLENBQUMsY0FBYyxFQUFFLFlBQVksQ0FBQyxjQUFjLEVBQUUsWUFBWSxDQUFDLGdCQUFnQixDQUFDLENBQUMsR0FBRyxDQUM1RyxLQUFLLEVBQUUsRUFBZ0IsRUFBRSxFQUFFO1lBQ3pCLE9BQU8sRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7UUFDaEUsQ0FBQyxDQUNGLENBQUM7UUFDRixNQUFNLGFBQWEsR0FBa0IsSUFBSSxHQUFHLENBQUMsQ0FBQyxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUU3RyxJQUFJLENBQUMsWUFBWSxFQUFFLFdBQVcsRUFBRSxFQUFFLENBQUM7WUFDakMsTUFBTSxDQUFDLEtBQUssQ0FBQywrQ0FBK0MsQ0FBQyxDQUFDO1lBQzlELE9BQU87UUFDVCxDQUFDO1FBQ0QsT0FBTyxDQUFDLE1BQU0sRUFBRSxhQUFhLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBRUQsNERBQTREO0lBQ3BELGdCQUFnQixDQUN0QixZQUEwQixFQUMxQixZQUFvQixFQUNwQixZQUFvQixFQUNwQixXQUlDO1FBRUQsTUFBTSxVQUFVLEdBQUcsWUFBWSxHQUFHLEVBQUUsQ0FBQztRQUNyQyxNQUFNLHFCQUFxQixHQUFHLFlBQVksSUFBSSxFQUFFLENBQUM7UUFDakQsTUFBTSxVQUFVLEdBQUcsRUFBRSxJQUFJLFVBQVUsR0FBRyxFQUFFLEdBQUcscUJBQXFCLENBQUM7UUFDakUsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3JDLE1BQU0sZ0JBQWdCLEdBQUcsTUFBTSxDQUFDLFlBQVksR0FBRyxFQUFFLENBQUMsQ0FBQztRQUNuRCxNQUFNLEtBQUssR0FBRyxZQUFZLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxFQUFFLGdCQUFnQixFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQ3RGLE9BQU8sRUFBRSxLQUFLLEVBQUUscUJBQXFCLEVBQUUsVUFBVSxFQUFFLGNBQWMsRUFBRSxZQUFZLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7SUFDOUcsQ0FBQztJQUVELGlIQUFpSDtJQUNqSCwrREFBK0Q7SUFDdkQsaUJBQWlCLENBQUMsWUFBc0MsRUFBRSxLQUFhLEVBQUUsRUFBa0I7UUFDakcsSUFBSSxDQUFDLFlBQVksRUFBRSxXQUFXLEVBQUUsRUFBRSxDQUFDO1lBQ2pDLE1BQU0sQ0FBQyxLQUFLLENBQUMsd0NBQXdDLENBQUMsQ0FBQztZQUN2RCxPQUFPO1FBQ1QsQ0FBQztRQUNELElBQ0UsQ0FBQyxFQUFFLENBQUMsZ0JBQWdCLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMscUJBQXFCO2FBQ25FLFFBQVEsRUFBRTthQUNWLE1BQU0sQ0FBQyxFQUFFLENBQUMsV0FBVyxDQUFDLGlCQUFpQixDQUFDLElBQUksRUFBRSxDQUFDLEVBQ2xELENBQUM7WUFDRCxZQUFZLENBQUMsTUFBTSxDQUNqQixzQ0FDRSxFQUFFLENBQUMsZ0JBQWdCLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMscUJBQ2xELFFBQVEsRUFBRSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsV0FBVyxDQUFDLGlCQUFpQixDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FDakUsQ0FBQztZQUNGLE9BQU87UUFDVCxDQUFDO1FBQ0QsSUFDRSxDQUFDLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxpQkFBaUI7YUFDL0QsUUFBUSxFQUFFO2FBQ1YsTUFBTSxDQUFDLEVBQUUsQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQzlDLENBQUM7WUFDRCwrRUFBK0U7WUFDL0UsWUFBWSxDQUFDLE1BQU0sQ0FDakIsaUNBQ0UsRUFBRSxDQUFDLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLGlCQUNsRCxRQUFRLEVBQUUsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUM3RCxDQUFDO1lBQ0YsT0FBTztRQUNULENBQUM7UUFDRCxJQUNFLENBQUMsRUFBRSxDQUFDLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLG1CQUFtQjthQUNqRSxRQUFRLEVBQUU7YUFDVixNQUFNLENBQUMsRUFBRSxDQUFDLFdBQVcsQ0FBQyxlQUFlLENBQUMsSUFBSSxFQUFFLENBQUMsRUFDaEQsQ0FBQztZQUNELFlBQVksQ0FBQyxNQUFNLENBQ2pCLG1DQUNFLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxtQkFDbEQsUUFBUSxFQUFFLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxXQUFXLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FDL0QsQ0FBQztZQUNGLE9BQU87UUFDVCxDQUFDO1FBRUQsTUFBTSxDQUFDLEtBQUssQ0FDVix5Q0FDRSxFQUFFLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLEVBQ2hELFFBQVEsRUFBRSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FDekMsQ0FBQztRQUVGLElBQUksQ0FBQyxlQUFlLENBQ2xCLFlBQVksRUFDWixNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsa0JBQWtCLENBQUMsRUFBRSxDQUFDLGdCQUFnQixFQUFFLE1BQU0sQ0FBQyxFQUNyRSxNQUFNLENBQUMsRUFBRTtZQUNQLE1BQU0sQ0FBQyxLQUFLLENBQUMsMENBQTBDLEVBQUUsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUN6RixvQkFBb0IsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDMUQsTUFBTSxZQUFZLEdBQUcsWUFBWSxDQUFDLGNBQWMsR0FBRyxFQUFFLENBQUM7WUFDdEQsSUFBSSxDQUFDLDZCQUE2QixDQUFDLFlBQVksRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFO2dCQUNwRSxNQUFNLENBQUMsTUFBTTtnQkFDYixNQUFNLENBQUMsS0FBSztnQkFDWixNQUFNLENBQUMsZUFBZSxDQUFDLFdBQVc7YUFDbkMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUNGLENBQUM7SUFDSixDQUFDO0lBRUQsa0hBQWtIO0lBQ2xILCtEQUErRDtJQUN2RCxrQkFBa0IsQ0FDeEIsWUFBMEIsRUFDMUIsS0FBYSxFQUNiLEtBQWEsRUFDYixjQUFvQztRQUVwQyxNQUFNLE1BQU0sR0FBRyx1QkFBdUIsQ0FDcEMsQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBRSxFQUFFLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFFLEVBQUUsY0FBYyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBRSxDQUFDLEVBQzNGLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUUsRUFBRSxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBRSxFQUFFLGNBQWMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUUsQ0FBQyxDQUM1RixDQUFDO1FBRUYsSUFBSSxDQUFDLGVBQWUsQ0FDbEIsWUFBWSxFQUNaLE1BQU0sQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLEVBQ3pELE1BQU0sQ0FBQyxFQUFFO1lBQ1AsSUFBSSxDQUFDLDZCQUE2QixDQUFDLFlBQVksRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFO2dCQUM3RCxNQUFNLENBQUMsTUFBTTtnQkFDYixNQUFNLENBQUMsS0FBSztnQkFDWixNQUFNLENBQUMsZUFBZSxDQUFDLFdBQVc7YUFDbkMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUNGLENBQUM7SUFDSixDQUFDO0lBRUQsbUNBQW1DO0lBQzNCLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxZQUFzQztRQUNwRSxJQUFJLENBQUMsWUFBWSxFQUFFLFdBQVcsRUFBRSxFQUFFLENBQUM7WUFDakMsTUFBTSxDQUFDLEtBQUssQ0FBQyxnREFBZ0QsQ0FBQyxDQUFDO1lBQy9ELE9BQU87UUFDVCxDQUFDO1FBQ0QsTUFBTSxjQUFjLEdBQUcsWUFBWSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0RCxNQUFNLGVBQWUsR0FBRyxZQUFZLENBQUMsb0JBQXFCLENBQUM7UUFFM0QsTUFBTSxNQUFNLEdBQUcsTUFBTSxrQkFBa0IsQ0FDckMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUUsRUFDekIsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUUsRUFDekIsY0FBYyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBRSxFQUNuQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBRSxFQUN6QixjQUFjLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBRSxFQUN6QixjQUFjLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFFLEVBQ25DLGVBQWUsRUFDZixZQUFZLENBQUMsaUJBQWlCLEVBQzlCLFlBQVksQ0FBQyxtQkFBbUIsRUFDaEMsWUFBWSxDQUFDLDBCQUEwQixFQUN2QyxJQUFJLENBQUMsRUFBRSxDQUNSLENBQUM7UUFFRixJQUFJLENBQUMsZUFBZSxDQUNsQixZQUFZLEVBQ1osTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsRUFDeEQsTUFBTSxDQUFDLEVBQUU7WUFDUCxZQUFZLENBQUMsc0JBQXNCLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztZQUNwRCxZQUFZLENBQUMsc0JBQXNCLEdBQUcsd0JBQXdCLENBQzVELE1BQU0sQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUN4QixNQUFNLENBQUMsZUFBZSxDQUFDLGVBQWUsQ0FDdkMsQ0FBQztZQUNGLFlBQVksQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUM7WUFFbkQsTUFBTSxhQUFhLEdBQWtCO2dCQUNuQyxNQUFNLEVBQUUsY0FBYyxDQUFDLE9BQU87YUFDL0IsQ0FBQztZQUNGLFlBQVksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDdEMsQ0FBQyxDQUNGLENBQUM7SUFDSixDQUFDO0lBRUQsaUdBQWlHO0lBQ2pHLCtEQUErRDtJQUN2RCx3QkFBd0IsQ0FBQyxZQUEwQixFQUFFLE1BQXdCLEVBQUUsS0FBYTtRQUNsRyxJQUFJLENBQUMsZUFBZSxDQUNsQixZQUFZLEVBQ1osTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsRUFDeEQsU0FBUyxDQUFDLEVBQUU7WUFDVixZQUFZLENBQUMsbUJBQW1CLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ25ELElBQUksWUFBWSxDQUFDLHdCQUF3QixFQUFFLEVBQUUsQ0FBQztnQkFDNUMsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLGdCQUFnQixDQUMzQyxZQUFZLENBQUMsZUFHWixDQUNGLENBQUM7Z0JBQ0YsSUFBSSxDQUFDLHdCQUF3QixDQUFDLFlBQVksRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO1lBQ2hFLENBQUM7UUFDSCxDQUFDLENBQ0YsQ0FBQztJQUNKLENBQUM7SUFFRCxzREFBc0Q7SUFDdEQsNkRBQTZEO0lBQ3JELHdCQUF3QixDQUFDLFlBQXNDLEVBQUUsTUFBd0I7UUFDL0YsSUFBSSxDQUFDLGVBQWUsQ0FDbEIsWUFBWSxFQUNaLE1BQU0sQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLEVBQ3hELEtBQUssRUFBQyxTQUFTLEVBQUMsRUFBRTtZQUNoQixZQUFhLENBQUMsb0JBQW9CLEdBQUcsU0FBUyxDQUFDO1lBQy9DLE1BQU0sSUFBSSxDQUFDLHlCQUF5QixDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ3JELENBQUMsQ0FDRixDQUFDO0lBQ0osQ0FBQztJQUVPLEtBQUssQ0FBQyx5QkFBeUIsQ0FBQyxZQUFzQztRQUM1RSxJQUFJLENBQUMsWUFBWSxFQUFFLG9CQUFvQixFQUFFLEVBQUUsQ0FBQztZQUMxQyxNQUFNLENBQUMsS0FBSyxDQUFDLDJCQUEyQixDQUFDLENBQUM7WUFDMUMsT0FBTztRQUNULENBQUM7UUFDRCxNQUFNLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ssNkJBQTZCLENBQ25DLFlBQTBCLEVBQzFCLFlBQW9CLEVBQ3BCLFlBQW9CLEVBQ3BCLGNBSUM7UUFFRCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsWUFBWSxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsY0FBYyxDQUFDLENBQUM7UUFFL0YsNENBQTRDO1FBQzVDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDbEIsT0FBTztRQUNULENBQUM7UUFFRCxJQUFJLE1BQU0sQ0FBQyxVQUFVLEtBQUssRUFBRSxFQUFFLENBQUM7WUFDN0Isa0NBQWtDO1lBQ2xDLEtBQUssSUFBSSxDQUFDLHlCQUF5QixDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ3BELENBQUM7YUFBTSxDQUFDO1lBQ04sNEJBQTRCO1lBQzVCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxZQUFZLEVBQUUsTUFBTSxDQUFDLFVBQVUsRUFBRSxNQUFNLENBQUMscUJBQXFCLEVBQUUsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ2hILENBQUM7SUFDSCxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ssU0FBUyxDQUFDLFlBQXNDLEVBQUUsT0FBZSxFQUFFLGFBQXFCO1FBQzlGLElBQUksQ0FBQyxZQUFZLEVBQUUsV0FBVyxFQUFFLEVBQUUsQ0FBQztZQUNqQyxNQUFNLENBQUMsS0FBSyxDQUFDLG9EQUFvRCxDQUFDLENBQUM7WUFDbkUsT0FBTztRQUNULENBQUM7UUFFRCxNQUFNLGNBQWMsR0FBRyxZQUFZLENBQUMsaUJBQWlCLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDL0QsTUFBTSxjQUFjLEdBQUcsY0FBYyxDQUFDLHNCQUFzQixDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBRTVFLHNGQUFzRjtRQUN0RixJQUFJLGNBQWMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUM3Qix5SEFBeUg7WUFDekgsb0hBQW9IO1lBQ3BILE1BQU0sWUFBWSxHQUFHLEtBQUssRUFBRSxNQUFtQixFQUFFLEVBQUU7Z0JBQ2pELE1BQU0sTUFBTSxHQUFxQixJQUFJLGdCQUFnQixDQUNuRCxjQUFjLENBQUMsU0FBVSxDQUFDLFFBQVEsRUFDbEMsY0FBYyxDQUFDLFNBQVUsQ0FBQyxRQUFRLEVBQ2xDLGNBQWMsQ0FBQyxTQUFVLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLFlBQVksRUFDcEYsY0FBYyxDQUFDLFNBQVUsQ0FBQyxRQUFRLENBQ25DLENBQUM7Z0JBQ0YsSUFBSSxDQUFDO29CQUNILE9BQU8sTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7Z0JBQ3ZELENBQUM7Z0JBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztvQkFDYixJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsa0JBQWtCLEVBQUUsQ0FBQzt3QkFDbkMsTUFBTSxHQUFHLENBQUM7b0JBQ1osQ0FBQzt5QkFBTSxDQUFDO3dCQUNOLE1BQU0sQ0FBQyxJQUFJLENBQUMsMENBQTBDLEdBQUcsRUFBRSxDQUFDLENBQUM7d0JBQzdELE1BQU0sQ0FBQyxJQUFJLENBQUMsZ0VBQWdFLENBQUMsQ0FBQzt3QkFDOUUsT0FBTyxFQUFFLEtBQUssRUFBRSxjQUFjLEVBQUUsRUFBRSxlQUFlLEVBQUUsbUJBQW1CLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQztvQkFDdEYsQ0FBQztnQkFDSCxDQUFDO1lBQ0gsQ0FBQyxDQUFDO1lBQ0YsSUFBSSxDQUFDLGVBQWUsQ0FBQyxZQUFZLEVBQUUsWUFBWSxFQUFFLFVBQVUsQ0FBQyxFQUFFO2dCQUM1RCxNQUFNLENBQUMsS0FBSyxDQUFDLGdDQUFnQyxhQUFhLGdCQUFnQixPQUFPLEVBQUUsQ0FBQyxDQUFDO2dCQUNyRixJQUFJLENBQUMsMkJBQTJCLENBQUMsWUFBWSxFQUFFLE9BQU8sRUFBRSxhQUFhLEVBQUUsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzNGLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsMkJBQTJCLENBQUMsWUFBWSxFQUFFLE9BQU8sRUFBRSxhQUFhLEVBQUUsWUFBWSxDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUM7UUFDeEcsQ0FBQztJQUNILENBQUM7SUFFTywyQkFBMkIsQ0FDakMsWUFBMEIsRUFDMUIsT0FBZSxFQUNmLGFBQXFCLEVBQ3JCLE9BQWM7UUFFZCxNQUFNLGNBQWMsR0FBRyxZQUFZLENBQUMsaUJBQWlCLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDL0QsTUFBTSxhQUFhLEdBQUcsY0FBYyxDQUFDLDhCQUE4QixDQUFDLGFBQWEsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUM1RixJQUFJLGFBQWEsQ0FBQyxJQUFJLEtBQUssZUFBZSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ2pELElBQUksYUFBYSxDQUFDLFFBQVEsS0FBSyxTQUFTLEVBQUUsQ0FBQztnQkFDekMseUJBQXlCO2dCQUN6QixNQUFNLElBQUksS0FBSyxDQUFDLDRFQUE0RSxDQUFDLENBQUM7WUFDaEcsQ0FBQztZQUNELE1BQU0sQ0FBQyxLQUFLLENBQUMsbUNBQW1DLE9BQU8sY0FBYyxhQUFhLEVBQUUsQ0FBQyxDQUFDO1lBQ3RGLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxZQUFZLEVBQUUsT0FBTyxFQUFFLGFBQWEsQ0FBQyxDQUFDO1FBQ2pFLENBQUM7SUFDSCxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ssbUJBQW1CLENBQUMsWUFBc0MsRUFBRSxPQUFlLEVBQUUsYUFBcUI7UUFDeEcsSUFBSSxDQUFDLFlBQVksRUFBRSxXQUFXLEVBQUUsRUFBRSxDQUFDO1lBQ2pDLE1BQU0sQ0FBQyxLQUFLLENBQUMsK0RBQStELENBQUMsQ0FBQztZQUM5RSxPQUFPO1FBQ1QsQ0FBQztRQUVELE1BQU0sY0FBYyxHQUFHLFlBQVksQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUMvRCxNQUFNLE9BQU8sR0FBRyxjQUFjLENBQUMsc0JBQXNCLENBQUMsYUFBYSxDQUFDLENBQUMsbUJBQW1CLENBQUM7UUFFekYsSUFBSSxDQUFDLGVBQWUsQ0FDbEIsWUFBWSxFQUNaLENBQUMsTUFBTSxFQUF1RyxFQUFFO1lBQzlHLElBQUksT0FBTyxDQUFDLElBQUksS0FBSyxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDM0MsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLGtCQUFrQixDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQztZQUN6RCxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLG9CQUFvQixDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQztZQUMzRCxDQUFDO1FBQ0gsQ0FBQyxFQUNELE1BQU0sQ0FBQyxFQUFFO1lBQ1AsTUFBTSxpQkFBaUIsR0FBRyxjQUFjLENBQUMsa0NBQWtDLENBQ3pFLGFBQWEsRUFDYixNQUFNLENBQUMsS0FBSyxFQUNaLE1BQU0sQ0FBQyxlQUFlLENBQ3ZCLENBQUM7WUFDRix3Q0FBd0M7WUFDeEMsSUFBSSxpQkFBaUIsQ0FBQyxJQUFJLEtBQUssZUFBZSxDQUFDLFNBQVMsRUFBRSxDQUFDO2dCQUN6RCxnQ0FBZ0M7Z0JBQ2hDLE9BQU87WUFDVCxDQUFDO1lBRUQsSUFBSSxpQkFBaUIsQ0FBQyxJQUFJLEtBQUssZUFBZSxDQUFDLFNBQVMsRUFBRSxDQUFDO2dCQUN6RCxxRkFBcUY7Z0JBQ3JGLE1BQU0sQ0FBQyxLQUFLLENBQUMscUNBQXFDLE9BQU8seUJBQXlCLENBQUMsQ0FBQztnQkFDcEYseUZBQXlGO2dCQUN6RixjQUFjLENBQUMsZ0JBQWdCLENBQUMsVUFBVSxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDO2dCQUNoRSxjQUFjLENBQUMsZ0JBQWdCLENBQUMsVUFBVSxDQUFDLEVBQUUsR0FBRyxNQUFNLENBQUMsZUFBZSxDQUFDO2dCQUN2RSxJQUFJLENBQUMsaUJBQWlCLENBQUMsWUFBWSxFQUFFLE1BQU0sQ0FBQyxPQUFPLENBQUMsRUFBRSxjQUFjLENBQUMsQ0FBQztnQkFDdEUsT0FBTztZQUNULENBQUM7WUFDRCxrREFBa0Q7WUFDbEQsSUFBSSxpQkFBaUIsQ0FBQyxRQUFRLEtBQUssU0FBUyxFQUFFLENBQUM7Z0JBQzdDLHlCQUF5QjtnQkFDekIsTUFBTSxJQUFJLEtBQUssQ0FBQyxnRkFBZ0YsQ0FBQyxDQUFDO1lBQ3BHLENBQUM7WUFFRCxJQUFJLENBQUMsbUJBQW1CLENBQUMsWUFBWSxFQUFFLE9BQU8sRUFBRSxhQUFhLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDckUsQ0FBQyxDQUNGLENBQUM7SUFDSixDQUFDO0NBQ0Y7QUFFRCxTQUFTLHdCQUF3QixDQUFDLEtBQVksRUFBRSxlQUF1QjtJQUNyRSxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FDbEMsRUFBRSxDQUFDLGFBQWEsR0FBRyxDQUFDLGVBQWUsR0FBRyx5QkFBeUIsQ0FBQyxFQUNoRSxFQUFFLENBQUMsYUFBYSxHQUFHLGVBQWUsQ0FDbkMsQ0FBQztJQUNGLE9BQU8sWUFBWSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxTQUFTLENBQUMseUJBQXlCLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDaEYsQ0FBQyJ9
|
|
574
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JjaGVzdHJhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL29yY2hlc3RyYXRvci9vcmNoZXN0cmF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLElBQUksRUFDSixPQUFPLEVBQ1AsWUFBWSxFQUdaLGdCQUFnQixFQUNoQixFQUFFLEVBRUYsb0JBQW9CLEVBQ3BCLHNCQUFzQixFQUN0QixVQUFVLEdBQ1gsTUFBTSxzQkFBc0IsQ0FBQztBQUM5QixPQUFPLEVBQ0wsZUFBZSxFQUVmLGNBQWMsR0FLZixNQUFNLGlDQUFpQyxDQUFDO0FBQ3pDLE9BQU8sRUFDTCx5QkFBeUIsRUFDekIsZ0JBQWdCLEVBRWhCLGdCQUFnQixFQUVoQixFQUFFLEVBSUYsMkJBQTJCLEVBQzNCLHdDQUF3QyxFQUV4QyxtQ0FBbUMsRUFDbkMsK0JBQStCLEVBTS9CLGdCQUFnQixFQUVoQixtQkFBbUIsRUFFbkIsY0FBYyxHQUNmLE1BQU0sb0JBQW9CLENBQUM7QUFDNUIsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3BELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDckQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDMUQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDakUsT0FBTyxFQUFFLFlBQVksRUFBYyxNQUFNLDZCQUE2QixDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUd6RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRS9CLE9BQU8sRUFDTCxvQkFBb0IsRUFDcEIsdUJBQXVCLEVBQ3ZCLGtCQUFrQixFQUNsQixxQkFBcUIsRUFDckIsZUFBZSxFQUNmLG9C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
|
|
@@ -5,16 +5,29 @@ import type { AvmCircuitInputs, BaseOrMergeRollupPublicInputs, BaseParityInputs,
|
|
|
5
5
|
* The queue accumulates jobs and provides them to agents in FIFO order.
|
|
6
6
|
*/
|
|
7
7
|
export declare class MemoryProvingQueue implements ServerCircuitProver, ProvingJobSource {
|
|
8
|
+
/** Timeout the job if an agent doesn't report back in this time */
|
|
9
|
+
private jobTimeoutMs;
|
|
8
10
|
private generateId;
|
|
11
|
+
private timeSource;
|
|
9
12
|
private log;
|
|
10
13
|
private queue;
|
|
11
14
|
private jobsInProgress;
|
|
12
|
-
|
|
15
|
+
private runningPromise;
|
|
16
|
+
constructor(
|
|
17
|
+
/** Timeout the job if an agent doesn't report back in this time */
|
|
18
|
+
jobTimeoutMs?: number,
|
|
19
|
+
/** How often to check for timed out jobs */
|
|
20
|
+
pollingIntervalMs?: number, generateId?: () => string, timeSource?: () => number);
|
|
21
|
+
start(): void;
|
|
22
|
+
stop(): Promise<void>;
|
|
13
23
|
getProvingJob({ timeoutSec }?: {
|
|
14
24
|
timeoutSec?: number | undefined;
|
|
15
25
|
}): Promise<ProvingJob<ProvingRequest> | undefined>;
|
|
16
26
|
resolveProvingJob<T extends ProvingRequestType>(jobId: string, result: ProvingRequestResult<T>): Promise<void>;
|
|
17
27
|
rejectProvingJob(jobId: string, err: any): Promise<void>;
|
|
28
|
+
heartbeat(jobId: string): Promise<void>;
|
|
29
|
+
isJobRunning(jobId: string): boolean;
|
|
30
|
+
private poll;
|
|
18
31
|
private enqueue;
|
|
19
32
|
getEmptyPrivateKernelProof(inputs: PrivateKernelEmptyInputData, signal?: AbortSignal): Promise<PublicInputsAndRecursiveProof<KernelCircuitPublicInputs>>;
|
|
20
33
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"memory-proving-queue.d.ts","sourceRoot":"","sources":["../../src/prover-agent/memory-proving-queue.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,uBAAuB,EAC5B,KAAK,UAAU,EACf,KAAK,gBAAgB,EACrB,KAAK,cAAc,EACnB,KAAK,oBAAoB,EACzB,kBAAkB,EAClB,KAAK,6BAA6B,EAClC,KAAK,0BAA0B,EAC/B,KAAK,uBAAuB,EAC5B,KAAK,mBAAmB,EACzB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EACV,gBAAgB,EAChB,6BAA6B,EAC7B,gBAAgB,EAChB,gBAAgB,EAChB,yBAAyB,EACzB,iBAAiB,EACjB,6BAA6B,EAC7B,2BAA2B,EAC3B,+BAA+B,EAC/B,sBAAsB,EACtB,eAAe,EACf,gBAAgB,EAChB,gBAAgB,EAChB,sBAAsB,EACvB,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"memory-proving-queue.d.ts","sourceRoot":"","sources":["../../src/prover-agent/memory-proving-queue.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,32 +1,74 @@
|
|
|
1
1
|
import { ProvingRequestType, } from '@aztec/circuit-types';
|
|
2
2
|
import { randomBytes } from '@aztec/foundation/crypto';
|
|
3
|
-
import {
|
|
3
|
+
import { AbortError, TimeoutError } from '@aztec/foundation/error';
|
|
4
4
|
import { MemoryFifo } from '@aztec/foundation/fifo';
|
|
5
5
|
import { createDebugLogger } from '@aztec/foundation/log';
|
|
6
|
-
import { promiseWithResolvers } from '@aztec/foundation/promise';
|
|
6
|
+
import { RunningPromise, promiseWithResolvers } from '@aztec/foundation/promise';
|
|
7
7
|
const MAX_RETRIES = 3;
|
|
8
8
|
const defaultIdGenerator = () => randomBytes(4).toString('hex');
|
|
9
|
+
const defaultTimeSource = () => Date.now();
|
|
9
10
|
/**
|
|
10
11
|
* A helper class that sits in between services that need proofs created and agents that can create them.
|
|
11
12
|
* The queue accumulates jobs and provides them to agents in FIFO order.
|
|
12
13
|
*/
|
|
13
14
|
export class MemoryProvingQueue {
|
|
14
|
-
constructor(
|
|
15
|
+
constructor(
|
|
16
|
+
/** Timeout the job if an agent doesn't report back in this time */
|
|
17
|
+
jobTimeoutMs = 60 * 1000,
|
|
18
|
+
/** How often to check for timed out jobs */
|
|
19
|
+
pollingIntervalMs = 1000, generateId = defaultIdGenerator, timeSource = defaultTimeSource) {
|
|
20
|
+
this.jobTimeoutMs = jobTimeoutMs;
|
|
15
21
|
this.generateId = generateId;
|
|
22
|
+
this.timeSource = timeSource;
|
|
16
23
|
this.log = createDebugLogger('aztec:prover-client:prover-pool:queue');
|
|
17
24
|
this.queue = new MemoryFifo();
|
|
18
25
|
this.jobsInProgress = new Map();
|
|
26
|
+
this.poll = () => {
|
|
27
|
+
const now = this.timeSource();
|
|
28
|
+
for (const job of this.jobsInProgress.values()) {
|
|
29
|
+
if (job.signal?.aborted) {
|
|
30
|
+
this.jobsInProgress.delete(job.id);
|
|
31
|
+
continue;
|
|
32
|
+
}
|
|
33
|
+
if (job.heartbeat + this.jobTimeoutMs < now) {
|
|
34
|
+
this.log.warn(`Job ${job.id} type=${ProvingRequestType[job.request.type]} has timed out`);
|
|
35
|
+
this.jobsInProgress.delete(job.id);
|
|
36
|
+
job.heartbeat = 0;
|
|
37
|
+
this.queue.put(job);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
};
|
|
41
|
+
this.runningPromise = new RunningPromise(this.poll, pollingIntervalMs);
|
|
42
|
+
}
|
|
43
|
+
start() {
|
|
44
|
+
if (this.runningPromise.isRunning()) {
|
|
45
|
+
this.log.warn('Proving queue is already running');
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
this.runningPromise.start();
|
|
49
|
+
this.log.info('Proving queue started');
|
|
50
|
+
}
|
|
51
|
+
async stop() {
|
|
52
|
+
if (!this.runningPromise.isRunning()) {
|
|
53
|
+
this.log.warn('Proving queue is already stopped');
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
await this.runningPromise.stop();
|
|
57
|
+
this.log.info('Proving queue stopped');
|
|
19
58
|
}
|
|
20
59
|
async getProvingJob({ timeoutSec = 1 } = {}) {
|
|
60
|
+
if (!this.runningPromise.isRunning()) {
|
|
61
|
+
throw new Error('Proving queue is not running. Start the queue before getting jobs.');
|
|
62
|
+
}
|
|
21
63
|
try {
|
|
22
64
|
const job = await this.queue.get(timeoutSec);
|
|
23
65
|
if (!job) {
|
|
24
66
|
return undefined;
|
|
25
67
|
}
|
|
26
68
|
if (job.signal?.aborted) {
|
|
27
|
-
this.log.debug(`Job ${job.id} type=${job.request.type} has been aborted`);
|
|
28
69
|
return undefined;
|
|
29
70
|
}
|
|
71
|
+
job.heartbeat = this.timeSource();
|
|
30
72
|
this.jobsInProgress.set(job.id, job);
|
|
31
73
|
return {
|
|
32
74
|
id: job.id,
|
|
@@ -41,21 +83,28 @@ export class MemoryProvingQueue {
|
|
|
41
83
|
}
|
|
42
84
|
}
|
|
43
85
|
resolveProvingJob(jobId, result) {
|
|
86
|
+
if (!this.runningPromise.isRunning()) {
|
|
87
|
+
throw new Error('Proving queue is not running.');
|
|
88
|
+
}
|
|
44
89
|
const job = this.jobsInProgress.get(jobId);
|
|
45
90
|
if (!job) {
|
|
46
|
-
|
|
91
|
+
this.log.warn(`Job id=${jobId} not found. Can't resolve`);
|
|
92
|
+
return Promise.resolve();
|
|
47
93
|
}
|
|
48
94
|
this.jobsInProgress.delete(jobId);
|
|
49
|
-
if (job.signal?.aborted) {
|
|
50
|
-
|
|
95
|
+
if (!job.signal?.aborted) {
|
|
96
|
+
job.resolve(result);
|
|
51
97
|
}
|
|
52
|
-
job.resolve(result);
|
|
53
98
|
return Promise.resolve();
|
|
54
99
|
}
|
|
55
100
|
rejectProvingJob(jobId, err) {
|
|
101
|
+
if (!this.runningPromise.isRunning()) {
|
|
102
|
+
throw new Error('Proving queue is not running.');
|
|
103
|
+
}
|
|
56
104
|
const job = this.jobsInProgress.get(jobId);
|
|
57
105
|
if (!job) {
|
|
58
|
-
|
|
106
|
+
this.log.warn(`Job id=${jobId} not found. Can't reject`);
|
|
107
|
+
return Promise.resolve();
|
|
59
108
|
}
|
|
60
109
|
this.jobsInProgress.delete(jobId);
|
|
61
110
|
if (job.signal?.aborted) {
|
|
@@ -72,7 +121,23 @@ export class MemoryProvingQueue {
|
|
|
72
121
|
}
|
|
73
122
|
return Promise.resolve();
|
|
74
123
|
}
|
|
124
|
+
heartbeat(jobId) {
|
|
125
|
+
if (!this.runningPromise.isRunning()) {
|
|
126
|
+
throw new Error('Proving queue is not running.');
|
|
127
|
+
}
|
|
128
|
+
const job = this.jobsInProgress.get(jobId);
|
|
129
|
+
if (job) {
|
|
130
|
+
job.heartbeat = this.timeSource();
|
|
131
|
+
}
|
|
132
|
+
return Promise.resolve();
|
|
133
|
+
}
|
|
134
|
+
isJobRunning(jobId) {
|
|
135
|
+
return this.jobsInProgress.has(jobId);
|
|
136
|
+
}
|
|
75
137
|
enqueue(request, signal) {
|
|
138
|
+
if (!this.runningPromise.isRunning()) {
|
|
139
|
+
return Promise.reject(new Error('Proving queue is not running.'));
|
|
140
|
+
}
|
|
76
141
|
const { promise, resolve, reject } = promiseWithResolvers();
|
|
77
142
|
const item = {
|
|
78
143
|
id: this.generateId(),
|
|
@@ -82,9 +147,10 @@ export class MemoryProvingQueue {
|
|
|
82
147
|
resolve,
|
|
83
148
|
reject,
|
|
84
149
|
attempts: 1,
|
|
150
|
+
heartbeat: 0,
|
|
85
151
|
};
|
|
86
152
|
if (signal) {
|
|
87
|
-
signal.addEventListener('abort', () => reject(new
|
|
153
|
+
signal.addEventListener('abort', () => reject(new AbortError('Operation has been aborted')));
|
|
88
154
|
}
|
|
89
155
|
this.log.debug(`Adding id=${item.id} type=${ProvingRequestType[request.type]} proving job to queue depth=${this.queue.length()}`);
|
|
90
156
|
// TODO (alexg) remove the `any`
|
|
@@ -184,4 +250,4 @@ export class MemoryProvingQueue {
|
|
|
184
250
|
return Promise.reject('not implemented');
|
|
185
251
|
}
|
|
186
252
|
}
|
|
187
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
253
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVtb3J5LXByb3ZpbmctcXVldWUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcHJvdmVyLWFnZW50L21lbW9yeS1wcm92aW5nLXF1ZXVlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFNTCxrQkFBa0IsR0FLbkIsTUFBTSxzQkFBc0IsQ0FBQztBQWlCOUIsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDbkUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3BELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzFELE9BQU8sRUFBNkIsY0FBYyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFVNUcsTUFBTSxXQUFXLEdBQUcsQ0FBQyxDQUFDO0FBRXRCLE1BQU0sa0JBQWtCLEdBQUcsR0FBRyxFQUFFLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNoRSxNQUFNLGlCQUFpQixHQUFHLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUUzQzs7O0dBR0c7QUFDSCxNQUFNLE9BQU8sa0JBQWtCO0lBTzdCO0lBQ0UsbUVBQW1FO0lBQzNELGVBQWUsRUFBRSxHQUFHLElBQUk7SUFDaEMsNENBQTRDO0lBQzVDLGlCQUFpQixHQUFHLElBQUksRUFDaEIsYUFBYSxrQkFBa0IsRUFDL0IsYUFBYSxpQkFBaUI7UUFKOUIsaUJBQVksR0FBWixZQUFZLENBQVk7UUFHeEIsZUFBVSxHQUFWLFVBQVUsQ0FBcUI7UUFDL0IsZUFBVSxHQUFWLFVBQVUsQ0FBb0I7UUFaaEMsUUFBRyxHQUFHLGlCQUFpQixDQUFDLHVDQUF1QyxDQUFDLENBQUM7UUFDakUsVUFB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
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prover-agent.d.ts","sourceRoot":"","sources":["../../src/prover-agent/prover-agent.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,gBAAgB,EAIrB,KAAK,mBAAmB,EACzB,MAAM,sBAAsB,CAAC;AAO9B;;GAEG;AACH,qBAAa,WAAW;IAKpB,iDAAiD;IACjD,OAAO,CAAC,aAAa;IACrB,8DAA8D;IAC9D,OAAO,CAAC,cAAc;IACtB,oCAAoC;IACpC,OAAO,CAAC,cAAc;IACtB,OAAO,CAAC,GAAG;IAVb,OAAO,CAAC,gBAAgB,
|
|
1
|
+
{"version":3,"file":"prover-agent.d.ts","sourceRoot":"","sources":["../../src/prover-agent/prover-agent.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,gBAAgB,EAIrB,KAAK,mBAAmB,EACzB,MAAM,sBAAsB,CAAC;AAO9B;;GAEG;AACH,qBAAa,WAAW;IAKpB,iDAAiD;IACjD,OAAO,CAAC,aAAa;IACrB,8DAA8D;IAC9D,OAAO,CAAC,cAAc;IACtB,oCAAoC;IACpC,OAAO,CAAC,cAAc;IACtB,OAAO,CAAC,GAAG;IAVb,OAAO,CAAC,gBAAgB,CAAmC;IAC3D,OAAO,CAAC,cAAc,CAAC,CAAiB;;IAGtC,iDAAiD;IACzC,aAAa,EAAE,mBAAmB;IAC1C,8DAA8D;IACtD,cAAc,SAAI;IAC1B,oCAAoC;IAC5B,cAAc,SAAM,EACpB,GAAG,yCAAwD;IAGrE,iBAAiB,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI;IAO/C,gBAAgB,CAAC,aAAa,EAAE,mBAAmB,GAAG,IAAI;IAI1D,SAAS;IAIT,KAAK,CAAC,SAAS,EAAE,gBAAgB,GAAG,IAAI;IA8BlC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;YAWb,IAAI;IA8BlB,OAAO,CAAC,QAAQ;CAmDjB"}
|
|
@@ -18,7 +18,7 @@ export class ProverAgent {
|
|
|
18
18
|
this.maxConcurrency = maxConcurrency;
|
|
19
19
|
this.pollIntervalMs = pollIntervalMs;
|
|
20
20
|
this.log = log;
|
|
21
|
-
this.inFlightPromises = new
|
|
21
|
+
this.inFlightPromises = new Map();
|
|
22
22
|
}
|
|
23
23
|
setMaxConcurrency(maxConcurrency) {
|
|
24
24
|
if (maxConcurrency < 1) {
|
|
@@ -37,18 +37,26 @@ export class ProverAgent {
|
|
|
37
37
|
throw new Error('Agent is already running');
|
|
38
38
|
}
|
|
39
39
|
this.runningPromise = new RunningPromise(async () => {
|
|
40
|
+
for (const jobId of this.inFlightPromises.keys()) {
|
|
41
|
+
await jobSource.heartbeat(jobId);
|
|
42
|
+
}
|
|
40
43
|
while (this.inFlightPromises.size < this.maxConcurrency) {
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
44
|
+
try {
|
|
45
|
+
const job = await jobSource.getProvingJob();
|
|
46
|
+
if (!job) {
|
|
47
|
+
// job source is fully drained, sleep for a bit and try again
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
const promise = this.work(jobSource, job).finally(() => this.inFlightPromises.delete(job.id));
|
|
51
|
+
this.inFlightPromises.set(job.id, promise);
|
|
52
|
+
}
|
|
53
|
+
catch (err) {
|
|
54
|
+
this.log.warn(`Error processing job: ${err}`);
|
|
45
55
|
}
|
|
46
|
-
const promise = this.work(jobSource, job).finally(() => this.inFlightPromises.delete(promise));
|
|
47
|
-
this.inFlightPromises.add(promise);
|
|
48
56
|
}
|
|
49
57
|
}, this.pollIntervalMs);
|
|
50
58
|
this.runningPromise.start();
|
|
51
|
-
this.log.info(
|
|
59
|
+
this.log.info(`Agent started with concurrency=${this.maxConcurrency}`);
|
|
52
60
|
}
|
|
53
61
|
async stop() {
|
|
54
62
|
if (!this.runningPromise?.isRunning()) {
|
|
@@ -60,13 +68,24 @@ export class ProverAgent {
|
|
|
60
68
|
}
|
|
61
69
|
async work(jobSource, job) {
|
|
62
70
|
try {
|
|
71
|
+
this.log.debug(`Picked up proving job id=${job.id} type=${ProvingRequestType[job.request.type]}`);
|
|
63
72
|
const [time, result] = await elapsed(this.getProof(job.request));
|
|
64
|
-
|
|
65
|
-
|
|
73
|
+
if (this.isRunning()) {
|
|
74
|
+
this.log.debug(`Processed proving job id=${job.id} type=${ProvingRequestType[job.request.type]} duration=${time}ms`);
|
|
75
|
+
await jobSource.resolveProvingJob(job.id, result);
|
|
76
|
+
}
|
|
77
|
+
else {
|
|
78
|
+
this.log.debug(`Dropping proving job id=${job.id} type=${ProvingRequestType[job.request.type]} duration=${time}ms: agent stopped`);
|
|
79
|
+
}
|
|
66
80
|
}
|
|
67
81
|
catch (err) {
|
|
68
|
-
this.
|
|
69
|
-
|
|
82
|
+
if (this.isRunning()) {
|
|
83
|
+
this.log.error(`Error processing proving job id=${job.id} type=${ProvingRequestType[job.request.type]}: ${err}`);
|
|
84
|
+
await jobSource.rejectProvingJob(job.id, new ProvingError(err?.message ?? String(err)));
|
|
85
|
+
}
|
|
86
|
+
else {
|
|
87
|
+
this.log.debug(`Dropping proving job id=${job.id} type=${ProvingRequestType[job.request.type]}: agent stopped: ${err}`);
|
|
88
|
+
}
|
|
70
89
|
}
|
|
71
90
|
}
|
|
72
91
|
getProof(request) {
|
|
@@ -112,4 +131,4 @@ export class ProverAgent {
|
|
|
112
131
|
}
|
|
113
132
|
}
|
|
114
133
|
}
|
|
115
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
134
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmVyLWFnZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Byb3Zlci1hZ2VudC9wcm92ZXItYWdlbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUtMLGtCQUFrQixHQUVuQixNQUFNLHNCQUFzQixDQUFDO0FBQzlCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzFELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNuRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFbEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRWxEOztHQUVHO0FBQ0gsTUFBTSxPQUFPLFdBQVc7SUFJdEI7SUFDRSxpREFBaUQ7SUFDekMsYUFBa0M7SUFDMUMsOERBQThEO0lBQ3RELGlCQUFpQixDQUFDO0lBQzFCLG9DQUFvQztJQUM1QixpQkFBaUIsR0FBRyxFQUNwQixNQUFNLGlCQUFpQixDQUFDLGtDQUFrQyxDQUFDO1FBTDNELGtCQUFhLEdBQWIsYUFBYSxDQUFxQjtRQUVsQyxtQkFBYyxHQUFkLGNBQWMsQ0FBSTtRQUVsQixtQkFBYyxHQUFkLGNBQWMsQ0FBTTtRQUNwQixRQUFHLEdBQUgsR0FBRyxDQUF3RDtRQVY3RCxxQkFBZ0IsR0FBRyxJQUFJLEdBQUcsRUFBd0IsQ0FBQztJQVd4RCxDQUFDO0lBRUosaUJBQWlCLENBQUMsY0FBc0I7UUFDdEMsSUFBSSxjQUFjLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDdkIsTUFBTSxJQUFJLEtBQUssQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFDO1FBQ3BELENBQUM7UUFDRCxJQUFJLENBQUMsY0FBYyxHQUFHLGNBQWMsQ0FBQztJQUN2QyxDQUFDO0lBRUQsZ0JBQWdCLENBQUMsYUFBa0M7UUFDakQsSUFBSSxDQUFDLGFBQWEsR0FBRyxhQUFhLENBQUM7SUFDckMsQ0FBQztJQUVE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
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tx-prover.d.ts","sourceRoot":"","sources":["../../src/tx-prover/tx-prover.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EACL,KAAK,WAAW,EAChB,KAAK,YAAY,EACjB,KAAK,gBAAgB,EACrB,KAAK,aAAa,EAEnB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,KAAK,EAAE,EAAE,KAAK,eAAe,EAAE,KAAK,MAAM,EAAE,KAAK,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAEvG,OAAO,EAAE,KAAK,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAEjE,OAAO,EAAE,KAAK,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAKvD;;GAEG;AACH,qBAAa,QAAS,YAAW,YAAY;IAMzC,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,sBAAsB;IAC9B,OAAO,CAAC,GAAG;IACX,OAAO,CAAC,KAAK,CAAC;IARhB,OAAO,CAAC,YAAY,CAAsB;IAC1C,OAAO,CAAC,KAAK,
|
|
1
|
+
{"version":3,"file":"tx-prover.d.ts","sourceRoot":"","sources":["../../src/tx-prover/tx-prover.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EACL,KAAK,WAAW,EAChB,KAAK,YAAY,EACjB,KAAK,gBAAgB,EACrB,KAAK,aAAa,EAEnB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,KAAK,EAAE,EAAE,KAAK,eAAe,EAAE,KAAK,MAAM,EAAE,KAAK,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAEvG,OAAO,EAAE,KAAK,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAEjE,OAAO,EAAE,KAAK,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAKvD;;GAEG;AACH,qBAAa,QAAS,YAAW,YAAY;IAMzC,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,sBAAsB;IAC9B,OAAO,CAAC,GAAG;IACX,OAAO,CAAC,KAAK,CAAC;IARhB,OAAO,CAAC,YAAY,CAAsB;IAC1C,OAAO,CAAC,KAAK,CAAqB;IAClC,OAAO,CAAC,OAAO,CAAS;IAExB,OAAO;IAWD,kBAAkB,CAAC,MAAM,EAAE,OAAO,CAAC,kBAAkB,GAAG;QAAE,GAAG,EAAE,gBAAgB,CAAA;KAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAuBxG;;OAEG;IACI,KAAK;IAWZ;;OAEG;IACU,IAAI;IASjB;;;;;;OAMG;WACiB,GAAG,CACrB,MAAM,EAAE,kBAAkB,EAC1B,GAAG,EAAE,gBAAgB,EACrB,sBAAsB,EAAE,sBAAsB,EAC9C,aAAa,CAAC,EAAE,MAAM;mBAeH,kBAAkB;IAYvC;;;;;OAKG;IACU,aAAa,CACxB,MAAM,EAAE,MAAM,EACd,eAAe,EAAE,eAAe,EAChC,iBAAiB,EAAE,EAAE,EAAE,GACtB,OAAO,CAAC,aAAa,CAAC;IAMzB;;;OAGG;IACI,QAAQ,CAAC,EAAE,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAI/C;;OAEG;IACI,WAAW,IAAI,IAAI;IAI1B;;OAEG;IACI,aAAa,IAAI,OAAO,CAAC,WAAW,CAAC;IAI5C;;;OAGG;IACI,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC;IAIlC,mBAAmB,IAAI,gBAAgB;CAG/C"}
|
|
@@ -12,8 +12,8 @@ export class TxProver {
|
|
|
12
12
|
this.worldStateSynchronizer = worldStateSynchronizer;
|
|
13
13
|
this.vks = vks;
|
|
14
14
|
this.agent = agent;
|
|
15
|
-
this.queue = new MemoryProvingQueue();
|
|
16
15
|
this.running = false;
|
|
16
|
+
this.queue = new MemoryProvingQueue(config.proverJobTimeoutMs, config.proverJobPollIntervalMs);
|
|
17
17
|
this.orchestrator = new ProvingOrchestrator(worldStateSynchronizer.getLatest(), this.queue, initialHeader);
|
|
18
18
|
}
|
|
19
19
|
async updateProverConfig(config) {
|
|
@@ -41,6 +41,7 @@ export class TxProver {
|
|
|
41
41
|
return Promise.resolve();
|
|
42
42
|
}
|
|
43
43
|
this.running = true;
|
|
44
|
+
this.queue.start();
|
|
44
45
|
this.agent?.start(this.queue);
|
|
45
46
|
return Promise.resolve();
|
|
46
47
|
}
|
|
@@ -53,6 +54,7 @@ export class TxProver {
|
|
|
53
54
|
}
|
|
54
55
|
this.running = false;
|
|
55
56
|
await this.agent?.stop();
|
|
57
|
+
await this.queue.stop();
|
|
56
58
|
}
|
|
57
59
|
/**
|
|
58
60
|
* Creates a new prover client and starts it
|
|
@@ -119,4 +121,4 @@ export class TxProver {
|
|
|
119
121
|
return this.queue;
|
|
120
122
|
}
|
|
121
123
|
}
|
|
122
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
124
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHgtcHJvdmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3R4LXByb3Zlci90eC1wcm92ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLG9CQUFvQixFQUFFLGlCQUFpQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFVM0UsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFJdkQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDdEUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFDN0UsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBRTlEOztHQUVHO0FBQ0gsTUFBTSxPQUFPLFFBQVE7SUFLbkIsWUFDVSxNQUEwQixFQUMxQixzQkFBOEMsRUFDOUMsR0FBcUIsRUFDckIsS0FBbUIsRUFDM0IsYUFBc0I7UUFKZCxXQUFNLEdBQU4sTUFBTSxDQUFvQjtRQUMxQiwyQkFBc0IsR0FBdEIsc0JBQXNCLENBQXdCO1FBQzlDLFFBQUcsR0FBSCxHQUFHLENBQWtCO1FBQ3JCLFVBQUssR0FBTCxLQUFLLENBQWM7UUFOckIsWUFBTyxHQUFHLEtBQUssQ0FBQztRQVN0QixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksa0JBQWtCLENBQUMsTUFBTSxDQUFDLGtCQUFrQixFQUFFLE1BQU0sQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO1FBQy9GLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxtQkFBbUIsQ0FBQyxzQkFBc0IsQ0FBQyxTQUFTLEVBQUUsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLGFBQWEsQ0FBQyxDQUFDO0lBQzdHLENBQUM7SUFFRCxLQUFLLENBQUMsa0JBQWtCLENBQUMsTUFBK0Q7UUFDdEYsTUFBTSxTQUFTLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxNQUFNLEVBQUUsQ0FB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
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aztec/prover-client",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.43.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"exports": {
|
|
6
6
|
".": "./dest/index.js",
|
|
@@ -50,14 +50,14 @@
|
|
|
50
50
|
]
|
|
51
51
|
},
|
|
52
52
|
"dependencies": {
|
|
53
|
-
"@aztec/bb-prover": "0.
|
|
54
|
-
"@aztec/circuit-types": "0.
|
|
55
|
-
"@aztec/circuits.js": "0.
|
|
56
|
-
"@aztec/foundation": "0.
|
|
57
|
-
"@aztec/kv-store": "0.
|
|
58
|
-
"@aztec/noir-protocol-circuits-types": "0.
|
|
59
|
-
"@aztec/simulator": "0.
|
|
60
|
-
"@aztec/world-state": "0.
|
|
53
|
+
"@aztec/bb-prover": "0.43.0",
|
|
54
|
+
"@aztec/circuit-types": "0.43.0",
|
|
55
|
+
"@aztec/circuits.js": "0.43.0",
|
|
56
|
+
"@aztec/foundation": "0.43.0",
|
|
57
|
+
"@aztec/kv-store": "0.43.0",
|
|
58
|
+
"@aztec/noir-protocol-circuits-types": "0.43.0",
|
|
59
|
+
"@aztec/simulator": "0.43.0",
|
|
60
|
+
"@aztec/world-state": "0.43.0",
|
|
61
61
|
"@noir-lang/types": "portal:../../noir/packages/types",
|
|
62
62
|
"commander": "^9.0.0",
|
|
63
63
|
"lodash.chunk": "^4.2.0",
|
package/src/config.ts
CHANGED
|
@@ -34,16 +34,16 @@ export function getProverEnvVars(): ProverClientConfig {
|
|
|
34
34
|
PROVER_AGENT_CONCURRENCY = PROVER_AGENTS,
|
|
35
35
|
PROVER_AGENT_POLL_INTERVAL_MS = '100',
|
|
36
36
|
PROVER_REAL_PROOFS = '',
|
|
37
|
+
PROVER_JOB_TIMEOUT_MS = '60000',
|
|
38
|
+
PROVER_JOB_POLL_INTERVAL_MS = '1000',
|
|
37
39
|
} = process.env;
|
|
38
40
|
|
|
39
41
|
const realProofs = ['1', 'true'].includes(PROVER_REAL_PROOFS);
|
|
40
42
|
const proverAgentEnabled = ['1', 'true'].includes(PROVER_AGENT_ENABLED);
|
|
41
|
-
const
|
|
42
|
-
const
|
|
43
|
-
const
|
|
44
|
-
const
|
|
45
|
-
? parsedProverAgentPollInterval
|
|
46
|
-
: 100;
|
|
43
|
+
const proverAgentConcurrency = safeParseNumber(PROVER_AGENT_CONCURRENCY, 1);
|
|
44
|
+
const proverAgentPollInterval = safeParseNumber(PROVER_AGENT_POLL_INTERVAL_MS, 100);
|
|
45
|
+
const proverJobTimeoutMs = safeParseNumber(PROVER_JOB_TIMEOUT_MS, 60000);
|
|
46
|
+
const proverJobPollIntervalMs = safeParseNumber(PROVER_JOB_POLL_INTERVAL_MS, 1000);
|
|
47
47
|
|
|
48
48
|
return {
|
|
49
49
|
acvmWorkingDirectory: ACVM_WORKING_DIRECTORY,
|
|
@@ -55,5 +55,12 @@ export function getProverEnvVars(): ProverClientConfig {
|
|
|
55
55
|
proverAgentPollInterval,
|
|
56
56
|
proverAgentConcurrency,
|
|
57
57
|
nodeUrl: AZTEC_NODE_URL,
|
|
58
|
+
proverJobPollIntervalMs,
|
|
59
|
+
proverJobTimeoutMs,
|
|
58
60
|
};
|
|
59
61
|
}
|
|
62
|
+
|
|
63
|
+
function safeParseNumber(value: string, defaultValue: number): number {
|
|
64
|
+
const parsedValue = parseInt(value, 10);
|
|
65
|
+
return Number.isSafeInteger(parsedValue) ? parsedValue : defaultValue;
|
|
66
|
+
}
|
|
@@ -48,7 +48,7 @@ import {
|
|
|
48
48
|
} from '@aztec/circuits.js';
|
|
49
49
|
import { makeTuple } from '@aztec/foundation/array';
|
|
50
50
|
import { padArrayEnd } from '@aztec/foundation/collection';
|
|
51
|
-
import {
|
|
51
|
+
import { AbortError } from '@aztec/foundation/error';
|
|
52
52
|
import { createDebugLogger } from '@aztec/foundation/log';
|
|
53
53
|
import { promiseWithResolvers } from '@aztec/foundation/promise';
|
|
54
54
|
import { BufferReader, type Tuple } from '@aztec/foundation/serialize';
|
|
@@ -475,7 +475,7 @@ export class ProvingOrchestrator {
|
|
|
475
475
|
|
|
476
476
|
await callback(result);
|
|
477
477
|
} catch (err) {
|
|
478
|
-
if (err instanceof
|
|
478
|
+
if (err instanceof AbortError) {
|
|
479
479
|
// operation was cancelled, probably because the block was cancelled
|
|
480
480
|
// drop this result
|
|
481
481
|
return;
|
|
@@ -27,21 +27,23 @@ import type {
|
|
|
27
27
|
RootRollupPublicInputs,
|
|
28
28
|
} from '@aztec/circuits.js';
|
|
29
29
|
import { randomBytes } from '@aztec/foundation/crypto';
|
|
30
|
-
import {
|
|
30
|
+
import { AbortError, TimeoutError } from '@aztec/foundation/error';
|
|
31
31
|
import { MemoryFifo } from '@aztec/foundation/fifo';
|
|
32
32
|
import { createDebugLogger } from '@aztec/foundation/log';
|
|
33
|
-
import { type PromiseWithResolvers, promiseWithResolvers } from '@aztec/foundation/promise';
|
|
33
|
+
import { type PromiseWithResolvers, RunningPromise, promiseWithResolvers } from '@aztec/foundation/promise';
|
|
34
34
|
|
|
35
35
|
type ProvingJobWithResolvers<T extends ProvingRequest = ProvingRequest> = {
|
|
36
36
|
id: string;
|
|
37
37
|
request: T;
|
|
38
38
|
signal?: AbortSignal;
|
|
39
39
|
attempts: number;
|
|
40
|
+
heartbeat: number;
|
|
40
41
|
} & PromiseWithResolvers<ProvingRequestResult<T['type']>>;
|
|
41
42
|
|
|
42
43
|
const MAX_RETRIES = 3;
|
|
43
44
|
|
|
44
45
|
const defaultIdGenerator = () => randomBytes(4).toString('hex');
|
|
46
|
+
const defaultTimeSource = () => Date.now();
|
|
45
47
|
|
|
46
48
|
/**
|
|
47
49
|
* A helper class that sits in between services that need proofs created and agents that can create them.
|
|
@@ -52,9 +54,44 @@ export class MemoryProvingQueue implements ServerCircuitProver, ProvingJobSource
|
|
|
52
54
|
private queue = new MemoryFifo<ProvingJobWithResolvers>();
|
|
53
55
|
private jobsInProgress = new Map<string, ProvingJobWithResolvers>();
|
|
54
56
|
|
|
55
|
-
|
|
57
|
+
private runningPromise: RunningPromise;
|
|
58
|
+
|
|
59
|
+
constructor(
|
|
60
|
+
/** Timeout the job if an agent doesn't report back in this time */
|
|
61
|
+
private jobTimeoutMs = 60 * 1000,
|
|
62
|
+
/** How often to check for timed out jobs */
|
|
63
|
+
pollingIntervalMs = 1000,
|
|
64
|
+
private generateId = defaultIdGenerator,
|
|
65
|
+
private timeSource = defaultTimeSource,
|
|
66
|
+
) {
|
|
67
|
+
this.runningPromise = new RunningPromise(this.poll, pollingIntervalMs);
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
public start() {
|
|
71
|
+
if (this.runningPromise.isRunning()) {
|
|
72
|
+
this.log.warn('Proving queue is already running');
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
this.runningPromise.start();
|
|
77
|
+
this.log.info('Proving queue started');
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
public async stop() {
|
|
81
|
+
if (!this.runningPromise.isRunning()) {
|
|
82
|
+
this.log.warn('Proving queue is already stopped');
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
await this.runningPromise.stop();
|
|
87
|
+
this.log.info('Proving queue stopped');
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
public async getProvingJob({ timeoutSec = 1 } = {}): Promise<ProvingJob<ProvingRequest> | undefined> {
|
|
91
|
+
if (!this.runningPromise.isRunning()) {
|
|
92
|
+
throw new Error('Proving queue is not running. Start the queue before getting jobs.');
|
|
93
|
+
}
|
|
56
94
|
|
|
57
|
-
async getProvingJob({ timeoutSec = 1 } = {}): Promise<ProvingJob<ProvingRequest> | undefined> {
|
|
58
95
|
try {
|
|
59
96
|
const job = await this.queue.get(timeoutSec);
|
|
60
97
|
if (!job) {
|
|
@@ -62,10 +99,10 @@ export class MemoryProvingQueue implements ServerCircuitProver, ProvingJobSource
|
|
|
62
99
|
}
|
|
63
100
|
|
|
64
101
|
if (job.signal?.aborted) {
|
|
65
|
-
this.log.debug(`Job ${job.id} type=${job.request.type} has been aborted`);
|
|
66
102
|
return undefined;
|
|
67
103
|
}
|
|
68
104
|
|
|
105
|
+
job.heartbeat = this.timeSource();
|
|
69
106
|
this.jobsInProgress.set(job.id, job);
|
|
70
107
|
return {
|
|
71
108
|
id: job.id,
|
|
@@ -81,25 +118,33 @@ export class MemoryProvingQueue implements ServerCircuitProver, ProvingJobSource
|
|
|
81
118
|
}
|
|
82
119
|
|
|
83
120
|
resolveProvingJob<T extends ProvingRequestType>(jobId: string, result: ProvingRequestResult<T>): Promise<void> {
|
|
121
|
+
if (!this.runningPromise.isRunning()) {
|
|
122
|
+
throw new Error('Proving queue is not running.');
|
|
123
|
+
}
|
|
124
|
+
|
|
84
125
|
const job = this.jobsInProgress.get(jobId);
|
|
85
126
|
if (!job) {
|
|
86
|
-
|
|
127
|
+
this.log.warn(`Job id=${jobId} not found. Can't resolve`);
|
|
128
|
+
return Promise.resolve();
|
|
87
129
|
}
|
|
88
130
|
|
|
89
131
|
this.jobsInProgress.delete(jobId);
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
return Promise.resolve();
|
|
132
|
+
if (!job.signal?.aborted) {
|
|
133
|
+
job.resolve(result);
|
|
93
134
|
}
|
|
94
135
|
|
|
95
|
-
job.resolve(result);
|
|
96
136
|
return Promise.resolve();
|
|
97
137
|
}
|
|
98
138
|
|
|
99
139
|
rejectProvingJob(jobId: string, err: any): Promise<void> {
|
|
140
|
+
if (!this.runningPromise.isRunning()) {
|
|
141
|
+
throw new Error('Proving queue is not running.');
|
|
142
|
+
}
|
|
143
|
+
|
|
100
144
|
const job = this.jobsInProgress.get(jobId);
|
|
101
145
|
if (!job) {
|
|
102
|
-
|
|
146
|
+
this.log.warn(`Job id=${jobId} not found. Can't reject`);
|
|
147
|
+
return Promise.resolve();
|
|
103
148
|
}
|
|
104
149
|
|
|
105
150
|
this.jobsInProgress.delete(jobId);
|
|
@@ -123,10 +168,50 @@ export class MemoryProvingQueue implements ServerCircuitProver, ProvingJobSource
|
|
|
123
168
|
return Promise.resolve();
|
|
124
169
|
}
|
|
125
170
|
|
|
171
|
+
public heartbeat(jobId: string): Promise<void> {
|
|
172
|
+
if (!this.runningPromise.isRunning()) {
|
|
173
|
+
throw new Error('Proving queue is not running.');
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
const job = this.jobsInProgress.get(jobId);
|
|
177
|
+
if (job) {
|
|
178
|
+
job.heartbeat = this.timeSource();
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
return Promise.resolve();
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
public isJobRunning(jobId: string): boolean {
|
|
185
|
+
return this.jobsInProgress.has(jobId);
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
private poll = () => {
|
|
189
|
+
const now = this.timeSource();
|
|
190
|
+
|
|
191
|
+
for (const job of this.jobsInProgress.values()) {
|
|
192
|
+
if (job.signal?.aborted) {
|
|
193
|
+
this.jobsInProgress.delete(job.id);
|
|
194
|
+
continue;
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
if (job.heartbeat + this.jobTimeoutMs < now) {
|
|
198
|
+
this.log.warn(`Job ${job.id} type=${ProvingRequestType[job.request.type]} has timed out`);
|
|
199
|
+
|
|
200
|
+
this.jobsInProgress.delete(job.id);
|
|
201
|
+
job.heartbeat = 0;
|
|
202
|
+
this.queue.put(job);
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
};
|
|
206
|
+
|
|
126
207
|
private enqueue<T extends ProvingRequest>(
|
|
127
208
|
request: T,
|
|
128
209
|
signal?: AbortSignal,
|
|
129
210
|
): Promise<ProvingRequestResult<T['type']>> {
|
|
211
|
+
if (!this.runningPromise.isRunning()) {
|
|
212
|
+
return Promise.reject(new Error('Proving queue is not running.'));
|
|
213
|
+
}
|
|
214
|
+
|
|
130
215
|
const { promise, resolve, reject } = promiseWithResolvers<ProvingRequestResult<T['type']>>();
|
|
131
216
|
const item: ProvingJobWithResolvers<T> = {
|
|
132
217
|
id: this.generateId(),
|
|
@@ -136,10 +221,11 @@ export class MemoryProvingQueue implements ServerCircuitProver, ProvingJobSource
|
|
|
136
221
|
resolve,
|
|
137
222
|
reject,
|
|
138
223
|
attempts: 1,
|
|
224
|
+
heartbeat: 0,
|
|
139
225
|
};
|
|
140
226
|
|
|
141
227
|
if (signal) {
|
|
142
|
-
signal.addEventListener('abort', () => reject(new
|
|
228
|
+
signal.addEventListener('abort', () => reject(new AbortError('Operation has been aborted')));
|
|
143
229
|
}
|
|
144
230
|
|
|
145
231
|
this.log.debug(
|
|
@@ -16,7 +16,7 @@ import { ProvingError } from './proving-error.js';
|
|
|
16
16
|
* A helper class that encapsulates a circuit prover and connects it to a job source.
|
|
17
17
|
*/
|
|
18
18
|
export class ProverAgent {
|
|
19
|
-
private inFlightPromises = new
|
|
19
|
+
private inFlightPromises = new Map<string, Promise<any>>();
|
|
20
20
|
private runningPromise?: RunningPromise;
|
|
21
21
|
|
|
22
22
|
constructor(
|
|
@@ -50,20 +50,28 @@ export class ProverAgent {
|
|
|
50
50
|
}
|
|
51
51
|
|
|
52
52
|
this.runningPromise = new RunningPromise(async () => {
|
|
53
|
+
for (const jobId of this.inFlightPromises.keys()) {
|
|
54
|
+
await jobSource.heartbeat(jobId);
|
|
55
|
+
}
|
|
56
|
+
|
|
53
57
|
while (this.inFlightPromises.size < this.maxConcurrency) {
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
+
try {
|
|
59
|
+
const job = await jobSource.getProvingJob();
|
|
60
|
+
if (!job) {
|
|
61
|
+
// job source is fully drained, sleep for a bit and try again
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
const promise = this.work(jobSource, job).finally(() => this.inFlightPromises.delete(job.id));
|
|
66
|
+
this.inFlightPromises.set(job.id, promise);
|
|
67
|
+
} catch (err) {
|
|
68
|
+
this.log.warn(`Error processing job: ${err}`);
|
|
58
69
|
}
|
|
59
|
-
|
|
60
|
-
const promise = this.work(jobSource, job).finally(() => this.inFlightPromises.delete(promise));
|
|
61
|
-
this.inFlightPromises.add(promise);
|
|
62
70
|
}
|
|
63
71
|
}, this.pollIntervalMs);
|
|
64
72
|
|
|
65
73
|
this.runningPromise.start();
|
|
66
|
-
this.log.info(
|
|
74
|
+
this.log.info(`Agent started with concurrency=${this.maxConcurrency}`);
|
|
67
75
|
}
|
|
68
76
|
|
|
69
77
|
async stop(): Promise<void> {
|
|
@@ -79,14 +87,31 @@ export class ProverAgent {
|
|
|
79
87
|
|
|
80
88
|
private async work(jobSource: ProvingJobSource, job: ProvingJob<ProvingRequest>): Promise<void> {
|
|
81
89
|
try {
|
|
90
|
+
this.log.debug(`Picked up proving job id=${job.id} type=${ProvingRequestType[job.request.type]}`);
|
|
82
91
|
const [time, result] = await elapsed(this.getProof(job.request));
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
92
|
+
if (this.isRunning()) {
|
|
93
|
+
this.log.debug(
|
|
94
|
+
`Processed proving job id=${job.id} type=${ProvingRequestType[job.request.type]} duration=${time}ms`,
|
|
95
|
+
);
|
|
96
|
+
await jobSource.resolveProvingJob(job.id, result);
|
|
97
|
+
} else {
|
|
98
|
+
this.log.debug(
|
|
99
|
+
`Dropping proving job id=${job.id} type=${
|
|
100
|
+
ProvingRequestType[job.request.type]
|
|
101
|
+
} duration=${time}ms: agent stopped`,
|
|
102
|
+
);
|
|
103
|
+
}
|
|
87
104
|
} catch (err) {
|
|
88
|
-
this.
|
|
89
|
-
|
|
105
|
+
if (this.isRunning()) {
|
|
106
|
+
this.log.error(
|
|
107
|
+
`Error processing proving job id=${job.id} type=${ProvingRequestType[job.request.type]}: ${err}`,
|
|
108
|
+
);
|
|
109
|
+
await jobSource.rejectProvingJob(job.id, new ProvingError((err as any)?.message ?? String(err)));
|
|
110
|
+
} else {
|
|
111
|
+
this.log.debug(
|
|
112
|
+
`Dropping proving job id=${job.id} type=${ProvingRequestType[job.request.type]}: agent stopped: ${err}`,
|
|
113
|
+
);
|
|
114
|
+
}
|
|
90
115
|
}
|
|
91
116
|
}
|
|
92
117
|
|
|
@@ -21,7 +21,7 @@ import { ProverAgent } from '../prover-agent/prover-agent.js';
|
|
|
21
21
|
*/
|
|
22
22
|
export class TxProver implements ProverClient {
|
|
23
23
|
private orchestrator: ProvingOrchestrator;
|
|
24
|
-
private queue
|
|
24
|
+
private queue: MemoryProvingQueue;
|
|
25
25
|
private running = false;
|
|
26
26
|
|
|
27
27
|
private constructor(
|
|
@@ -31,6 +31,7 @@ export class TxProver implements ProverClient {
|
|
|
31
31
|
private agent?: ProverAgent,
|
|
32
32
|
initialHeader?: Header,
|
|
33
33
|
) {
|
|
34
|
+
this.queue = new MemoryProvingQueue(config.proverJobTimeoutMs, config.proverJobPollIntervalMs);
|
|
34
35
|
this.orchestrator = new ProvingOrchestrator(worldStateSynchronizer.getLatest(), this.queue, initialHeader);
|
|
35
36
|
}
|
|
36
37
|
|
|
@@ -66,6 +67,7 @@ export class TxProver implements ProverClient {
|
|
|
66
67
|
}
|
|
67
68
|
|
|
68
69
|
this.running = true;
|
|
70
|
+
this.queue.start();
|
|
69
71
|
this.agent?.start(this.queue);
|
|
70
72
|
return Promise.resolve();
|
|
71
73
|
}
|
|
@@ -79,6 +81,7 @@ export class TxProver implements ProverClient {
|
|
|
79
81
|
}
|
|
80
82
|
this.running = false;
|
|
81
83
|
await this.agent?.stop();
|
|
84
|
+
await this.queue.stop();
|
|
82
85
|
}
|
|
83
86
|
|
|
84
87
|
/**
|