@aztec/cli 0.8.9 → 0.8.10

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/README.md CHANGED
@@ -140,28 +140,28 @@ Deploys a compiled Aztec.nr contract to Aztec.
140
140
  Syntax:
141
141
 
142
142
  ```shell
143
- aztec-cli deploy <contractAbi> [options]
143
+ aztec-cli deploy <contractArtifact> [options]
144
144
  ```
145
145
 
146
146
  Options:
147
147
 
148
- - `-c, --contract-abi <fileLocation>`: Path to the compiled Aztec.nr contract's ABI file in JSON format. You can also use one of Aztec's example contracts found in [@aztec/noir-contracts](https://www.npmjs.com/package/@aztec/noir-contracts), e.g. PrivateTokenContractAbi. You can get a full ist of the available contracts with `aztec-cli example-contracts`
148
+ - `-c, --contract-artifact <fileLocation>`: Path to the compiled Aztec.nr contract's artifact file in JSON format. You can also use one of Aztec's example contracts found in [@aztec/noir-contracts](https://www.npmjs.com/package/@aztec/noir-contracts), e.g. PrivateTokenContractArtifact. You can get a full ist of the available contracts with `aztec-cli example-contracts`
149
149
  - `-a, --args <constructorArgs...>` (optional): Contract constructor arguments Default: [].
150
150
  - `-u, --rpc-url <string>`: URL of PXE Service. Default: `http://localhost:8080`.
151
151
  - `-k, --public-key <string>`: Public key of the deployer. If not provided, it will check the RPC for existing ones.
152
152
 
153
- This command deploys a compiled Aztec.nr contract to Aztec. It requires the path to the contract's ABI file in JSON format. Optionally, you can specify the public key of the deployer and provide constructor arguments for the contract. The command displays the address of the deployed contract.
153
+ This command deploys a compiled Aztec.nr contract to Aztec. It requires the path to the contract's artifact file in JSON format. Optionally, you can specify the public key of the deployer and provide constructor arguments for the contract. The command displays the address of the deployed contract.
154
154
 
155
155
  Example usage:
156
156
 
157
157
  ```shell
158
- aztec-cli deploy -c path/to/contract.abi.json -a ...args
158
+ aztec-cli deploy -c path/to/contract.artifact.json -a ...args
159
159
  ```
160
160
 
161
161
  With an Aztec example contract:
162
162
 
163
163
  ```shell
164
- aztec-cli deploy -c PrivateTokenContractAbi -a 333 0x134567890abcdef
164
+ aztec-cli deploy -c PrivateTokenContractArtifact -a 333 0x134567890abcdef
165
165
  ```
166
166
 
167
167
  ### check-deploy
@@ -313,7 +313,7 @@ Sends a transaction invoking a function on an Aztec contract.
313
313
  Syntax:
314
314
 
315
315
  ```shell
316
- aztec-cli send <functionName> --args [functionArgs...] --contract-abi <contractAbi> --contract-address <contractAddress> --private-key <senderPrivateKey>
316
+ aztec-cli send <functionName> --args [functionArgs...] --contract-artifact <contractArtifact> --contract-address <contractAddress> --private-key <senderPrivateKey>
317
317
  ```
318
318
 
319
319
  - `functionName`: Name of the function to call.
@@ -321,17 +321,17 @@ aztec-cli send <functionName> --args [functionArgs...] --contract-abi <contractA
321
321
  Options:
322
322
 
323
323
  - `'-a, --args [functionArgs...]` (optional): Function arguments. Default: [].
324
- - `-c, --contract-abi <fileLocation>`: The compiled contract's ABI in JSON format. You can also use one of Aztec's example contracts found in (@aztec/noir-contracts)[https://www.npmjs.com/package/@aztec/noir-contracts], e.g. PrivateTokenContractAbi.
324
+ - `-c, --contract-artifact <fileLocation>`: The compiled contract's artifact in JSON format. You can also use one of Aztec's example contracts found in (@aztec/noir-contracts)[https://www.npmjs.com/package/@aztec/noir-contracts], e.g. PrivateTokenContractArtifact.
325
325
  - `-ca, --contract-address <address>`: Address of the contract.
326
326
  - `-k, --private-key <string>`: The sender's private key.
327
327
  - `-u, --rpc-url <string>`: URL of PXE Service. Default: `http://localhost:8080`.
328
328
 
329
- This command calls a function on an Aztec contract. It requires the contract's ABI, address, function name, and optionally, function arguments. The command executes the function call and displays the transaction details.
329
+ This command calls a function on an Aztec contract. It requires the contract's artifact, address, function name, and optionally, function arguments. The command executes the function call and displays the transaction details.
330
330
 
331
331
  Example usage:
332
332
 
333
333
  ```shell
334
- aztec-cli send transfer -ca 0x123456789abcdef123456789abcdef12345678 -a 100 -c path/to/abi.json
334
+ aztec-cli send transfer -ca 0x123456789abcdef123456789abcdef12345678 -a 100 -c path/to/artifact.json
335
335
  ```
336
336
 
337
337
  ### call
@@ -342,7 +342,7 @@ Unlike transactions, view calls do not modify the state of the contract.
342
342
  Syntax:
343
343
 
344
344
  ```shell
345
- aztec-cli call <functionName> -a [functionArgs...] -c <contractAbi> -ca <contractAddress> -f <fromAddress>
345
+ aztec-cli call <functionName> -a [functionArgs...] -c <contractArtifact> -ca <contractAddress> -f <fromAddress>
346
346
  ```
347
347
 
348
348
  - `functionName`: Name of the function to view.
@@ -350,17 +350,17 @@ aztec-cli call <functionName> -a [functionArgs...] -c <contractAbi> -ca <contrac
350
350
  Options:
351
351
 
352
352
  - `'-a, --args [functionArgs...]` (optional): Function arguments. Default: [].
353
- - `-c, --contract-abi <fileLocation>`: The compiled contract's ABI in JSON format. You can also use one of Aztec's example contracts found in (@aztec/noir-contracts)[https://www.npmjs.com/package/@aztec/noir-contracts], e.g. PrivateTokenContractAbi.
353
+ - `-c, --contract-artifact <fileLocation>`: The compiled contract's artifact in JSON format. You can also use one of Aztec's example contracts found in (@aztec/noir-contracts)[https://www.npmjs.com/package/@aztec/noir-contracts], e.g. PrivateTokenContractArtifact.
354
354
  - `-ca, --contract-address <address>`: Address of the contract.
355
355
  - `-f, --from <string>`: Address of the caller. If empty, first account in the Private eXecution Environment (PXE) will be used.
356
356
  - `-u, --rpc-url <string>`: URL of PXE Service. Default: `http://localhost:8080`.
357
357
 
358
- This command simulates the execution of a view function on a deployed contract without modifying the state. It requires the contract's ABI, address, function name, and optionally, function arguments. The command displays the result of the view function.
358
+ This command simulates the execution of a view function on a deployed contract without modifying the state. It requires the contract's artifact, address, function name, and optionally, function arguments. The command displays the result of the view function.
359
359
 
360
360
  Example usage:
361
361
 
362
362
  ```shell
363
- aztec-cli call balanceOf -c path/to/contract.abi.json -ca 0x123456789abcdef123456789abcdef12345678 -a balanceOf 0xabcdef1234567890abcdef1234567890abcdef12
363
+ aztec-cli call balanceOf -c path/to/contract.artifact.json -ca 0x123456789abcdef123456789abcdef12345678 -a balanceOf 0xabcdef1234567890abcdef1234567890abcdef12
364
364
  ```
365
365
 
366
366
  ### parse-parameter-struct
@@ -370,19 +370,19 @@ Helper for parsing an encoded string into a contract's parameter struct.
370
370
  Syntax:
371
371
 
372
372
  ```shell
373
- aztec-cli parse-parameter-struct <encodedString> <contractAbi> <parameterName>
373
+ aztec-cli parse-parameter-struct <encodedString> <contractArtifact> <parameterName>
374
374
  ```
375
375
 
376
376
  - `encodedString`: The encoded hex string.
377
- - `contractAbi`: The compiled contract's ABI in JSON format.
377
+ - `contractArtifact`: The compiled contract's artifact in JSON format.
378
378
  - `parameterName`: The name of the struct parameter to decode into.
379
379
 
380
- This command is a helper for parsing an encoded hex string into a contract's parameter struct. It requires the encoded string, the contract's ABI, and the name of the struct parameter. The command decodes the string and displays the struct data.
380
+ This command is a helper for parsing an encoded hex string into a contract's parameter struct. It requires the encoded string, the contract's artifact, and the name of the struct parameter. The command decodes the string and displays the struct data.
381
381
 
382
382
  Example usage:
383
383
 
384
384
  ```shell
385
- aztec-cli parse-parameter-struct 0xabcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890 path/to/contract.abi.json paramName
385
+ aztec-cli parse-parameter-struct 0xabcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890 path/to/contract.artifact.json paramName
386
386
  ```
387
387
 
388
388
  ### get-logs
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAYA,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAM3D,OAAO,EAAE,OAAO,EAAU,MAAM,WAAW,CAAC;AA8B5C;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,KAAK,EAAE,WAAW,EAAE,WAAW,GAAG,OAAO,CAufxE"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAYA,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAM3D,OAAO,EAAE,OAAO,EAAU,MAAM,WAAW,CAAC;AA8B5C;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,KAAK,EAAE,WAAW,EAAE,WAAW,GAAG,OAAO,CA4gBxE"}
package/dest/index.js CHANGED
@@ -13,7 +13,7 @@ import { mnemonicToAccount } from 'viem/accounts';
13
13
  import { createCompatibleClient } from './client.js';
14
14
  import { encodeArgs, parseStructString } from './encoding.js';
15
15
  import { unboxContract } from './unbox.js';
16
- import { deployAztecContracts, getAbiFunction, getContractAbi, getExampleContractArtifacts, getTxSender, parseAztecAddress, parseField, parseFields, parsePartialAddress, parsePrivateKey, parsePublicKey, parseSaltFromHexString, parseTxHash, prepTx, } from './utils.js';
16
+ import { deployAztecContracts, getContractArtifact, getExampleContractArtifacts, getFunctionArtifact, getTxSender, parseAztecAddress, parseField, parseFields, parsePartialAddress, parsePrivateKey, parsePublicKey, parseSaltFromHexString, parseTxHash, prepTx, } from './utils.js';
17
17
  const accountCreationSalt = Fr.ZERO;
18
18
  const { ETHEREUM_HOST = 'http://localhost:8545', PRIVATE_KEY, API_KEY } = process.env;
19
19
  /**
@@ -89,23 +89,35 @@ export function getProgram(log, debugLogger) {
89
89
  .summary('Creates an aztec account that can be used for sending transactions.')
90
90
  .addOption(createPrivateKeyOption('Private key for note encryption and transaction signing. Uses random by default.', false))
91
91
  .addOption(pxeOption)
92
- .action(async (options) => {
93
- const client = await createCompatibleClient(options.rpcUrl, debugLogger);
94
- const privateKey = options.privateKey ?? GrumpkinScalar.random();
95
- const account = getSchnorrAccount(client, privateKey, privateKey, accountCreationSalt);
96
- const wallet = await account.waitDeploy();
97
- const { address, publicKey, partialAddress } = wallet.getCompleteAddress();
98
- log(`\nCreated new account:\n`);
92
+ // `options.wait` is default true. Passing `--no-wait` will set it to false.
93
+ // https://github.com/tj/commander.js#other-option-types-negatable-boolean-and-booleanvalue
94
+ .option('--no-wait', 'Skip waiting for the contract to be deployed. Print the hash of deployment transaction')
95
+ .action(async ({ rpcUrl, privateKey, wait }) => {
96
+ const client = await createCompatibleClient(rpcUrl, debugLogger);
97
+ const actualPrivateKey = privateKey ?? GrumpkinScalar.random();
98
+ const account = getSchnorrAccount(client, actualPrivateKey, actualPrivateKey, accountCreationSalt);
99
+ const { address, publicKey, partialAddress } = await account.getCompleteAddress();
100
+ const tx = await account.deploy();
101
+ const txHash = await tx.getTxHash();
102
+ debugLogger(`Account contract tx sent with hash ${txHash}`);
103
+ if (wait) {
104
+ log(`\nWaiting for account contract deployment...`);
105
+ await tx.wait();
106
+ }
107
+ else {
108
+ log(`\nAccount deployment transaction hash: ${txHash}\n`);
109
+ }
110
+ log(`\nNew account:\n`);
99
111
  log(`Address: ${address.toString()}`);
100
112
  log(`Public key: ${publicKey.toString()}`);
101
- if (!options.privateKey)
102
- log(`Private key: ${privateKey.toString(true)}`);
113
+ if (!privateKey)
114
+ log(`Private key: ${actualPrivateKey.toString(true)}`);
103
115
  log(`Partial address: ${partialAddress.toString()}`);
104
116
  });
105
117
  program
106
118
  .command('deploy')
107
119
  .description('Deploys a compiled Aztec.nr contract to Aztec.')
108
- .argument('<abi>', "A compiled Aztec.nr contract's ABI in JSON format or name of a contract ABI exported by @aztec/noir-contracts")
120
+ .argument('<artifact>', "A compiled Aztec.nr contract's artifact in JSON format or name of a contract artifact exported by @aztec/noir-contracts")
109
121
  .option('-a, --args <constructorArgs...>', 'Contract constructor arguments', [])
110
122
  .addOption(pxeOption)
111
123
  .option('-k, --public-key <string>', 'Optional encryption public key for this address. Set this value only if this contract is expected to receive private notes, which will be encrypted using this public key.', parsePublicKey)
@@ -113,16 +125,16 @@ export function getProgram(log, debugLogger) {
113
125
  // `options.wait` is default true. Passing `--no-wait` will set it to false.
114
126
  // https://github.com/tj/commander.js#other-option-types-negatable-boolean-and-booleanvalue
115
127
  .option('--no-wait', 'Skip waiting for the contract to be deployed. Print the hash of deployment transaction')
116
- .action(async (abiPath, { rpcUrl, publicKey, args: rawArgs, salt, wait }) => {
117
- const contractAbi = await getContractAbi(abiPath, log);
118
- const constructorAbi = contractAbi.functions.find(({ name }) => name === 'constructor');
128
+ .action(async (artifactPath, { rpcUrl, publicKey, args: rawArgs, salt, wait }) => {
129
+ const contractArtifact = await getContractArtifact(artifactPath, log);
130
+ const constructorArtifact = contractArtifact.functions.find(({ name }) => name === 'constructor');
119
131
  const client = await createCompatibleClient(rpcUrl, debugLogger);
120
- const deployer = new ContractDeployer(contractAbi, client, publicKey);
121
- const constructor = getAbiFunction(contractAbi, 'constructor');
132
+ const deployer = new ContractDeployer(contractArtifact, client, publicKey);
133
+ const constructor = getFunctionArtifact(contractArtifact, 'constructor');
122
134
  if (!constructor)
123
135
  throw new Error(`Constructor not found in contract ABI`);
124
136
  debugLogger(`Input arguments: ${rawArgs.map((x) => `"${x}"`).join(', ')}`);
125
- const args = encodeArgs(rawArgs, constructorAbi.parameters);
137
+ const args = encodeArgs(rawArgs, constructorArtifact.parameters);
126
138
  debugLogger(`Encoded arguments: ${args.join(', ')}`);
127
139
  const tx = deployer.deploy(...args).send({ contractAddressSalt: salt });
128
140
  const txHash = await tx.getTxHash();
@@ -294,17 +306,17 @@ export function getProgram(log, debugLogger) {
294
306
  .description('Calls a function on an Aztec contract.')
295
307
  .argument('<functionName>', 'Name of function to execute')
296
308
  .option('-a, --args [functionArgs...]', 'Function arguments', [])
297
- .requiredOption('-c, --contract-abi <fileLocation>', "A compiled Aztec.nr contract's ABI in JSON format or name of a contract ABI exported by @aztec/noir-contracts")
309
+ .requiredOption('-c, --contract-artifact <fileLocation>', "A compiled Aztec.nr contract's ABI in JSON format or name of a contract ABI exported by @aztec/noir-contracts")
298
310
  .requiredOption('-ca, --contract-address <address>', 'Aztec address of the contract.', parseAztecAddress)
299
311
  .addOption(createPrivateKeyOption("The sender's private key.", true))
300
312
  .addOption(pxeOption)
301
313
  .option('--no-wait', 'Print transaction hash without waiting for it to be mined')
302
314
  .action(async (functionName, options) => {
303
- const { functionArgs, contractAbi } = await prepTx(options.contractAbi, functionName, options.args, log);
315
+ const { functionArgs, contractArtifact } = await prepTx(options.contractArtifact, functionName, options.args, log);
304
316
  const { contractAddress, privateKey } = options;
305
317
  const client = await createCompatibleClient(options.rpcUrl, debugLogger);
306
318
  const wallet = await getSchnorrAccount(client, privateKey, privateKey, accountCreationSalt).getWallet();
307
- const contract = await Contract.at(contractAddress, contractAbi, wallet);
319
+ const contract = await Contract.at(contractAddress, contractArtifact, wallet);
308
320
  const tx = contract.methods[functionName](...functionArgs).send();
309
321
  log(`Transaction hash: ${(await tx.getTxHash()).toString()}`);
310
322
  if (options.wait) {
@@ -324,15 +336,15 @@ export function getProgram(log, debugLogger) {
324
336
  .description('Simulates the execution of a view (read-only) function on a deployed contract, without modifying state.')
325
337
  .argument('<functionName>', 'Name of function to call')
326
338
  .option('-a, --args [functionArgs...]', 'Function arguments', [])
327
- .requiredOption('-c, --contract-abi <fileLocation>', "A compiled Aztec.nr contract's ABI in JSON format or name of a contract ABI exported by @aztec/noir-contracts")
339
+ .requiredOption('-c, --contract-artifact <fileLocation>', "A compiled Aztec.nr contract's ABI in JSON format or name of a contract ABI exported by @aztec/noir-contracts")
328
340
  .requiredOption('-ca, --contract-address <address>', 'Aztec address of the contract.', parseAztecAddress)
329
341
  .option('-f, --from <string>', 'Aztec address of the caller. If empty, will use the first account from RPC.')
330
342
  .addOption(pxeOption)
331
343
  .action(async (functionName, options) => {
332
- const { functionArgs, contractAbi } = await prepTx(options.contractAbi, functionName, options.args, log);
333
- const fnAbi = getAbiFunction(contractAbi, functionName);
334
- if (fnAbi.parameters.length !== options.args.length) {
335
- throw Error(`Invalid number of args passed. Expected ${fnAbi.parameters.length}; Received: ${options.args.length}`);
344
+ const { functionArgs, contractArtifact } = await prepTx(options.contractArtifact, functionName, options.args, log);
345
+ const fnArtifact = getFunctionArtifact(contractArtifact, functionName);
346
+ if (fnArtifact.parameters.length !== options.args.length) {
347
+ throw Error(`Invalid number of args passed. Expected ${fnArtifact.parameters.length}; Received: ${options.args.length}`);
336
348
  }
337
349
  const client = await createCompatibleClient(options.rpcUrl, debugLogger);
338
350
  const from = await getTxSender(client, options.from);
@@ -358,11 +370,11 @@ export function getProgram(log, debugLogger) {
358
370
  .command('parse-parameter-struct')
359
371
  .description("Helper for parsing an encoded string into a contract's parameter struct.")
360
372
  .argument('<encodedString>', 'The encoded hex string')
361
- .requiredOption('-c, --contract-abi <fileLocation>', "A compiled Aztec.nr contract's ABI in JSON format or name of a contract ABI exported by @aztec/noir-contracts")
373
+ .requiredOption('-c, --contract-artifact <fileLocation>', "A compiled Aztec.nr contract's ABI in JSON format or name of a contract ABI exported by @aztec/noir-contracts")
362
374
  .requiredOption('-p, --parameter <parameterName>', 'The name of the struct parameter to decode into')
363
375
  .action(async (encodedString, options) => {
364
- const contractAbi = await getContractAbi(options.contractAbi, log);
365
- const parameterAbitype = contractAbi.functions
376
+ const contractArtifact = await getContractArtifact(options.contractArtifact, log);
377
+ const parameterAbitype = contractArtifact.functions
366
378
  .map(({ parameters }) => parameters)
367
379
  .flat()
368
380
  .find(({ name, type }) => name === options.parameter && type.kind === 'struct');
@@ -416,12 +428,12 @@ export function getProgram(log, debugLogger) {
416
428
  program
417
429
  .command('inspect-contract')
418
430
  .description('Shows list of external callable functions for a contract')
419
- .argument('<contractAbiFile>', `A compiled Noir contract's ABI in JSON format or name of a contract ABI exported by @aztec/noir-contracts`)
420
- .action(async (contractAbiFile) => {
421
- const contractAbi = await getContractAbi(contractAbiFile, debugLogger);
422
- const contractFns = contractAbi.functions.filter(f => !f.isInternal && f.name !== 'compute_note_hash_and_nullifier');
431
+ .argument('<contractArtifactFile>', `A compiled Noir contract's artifact in JSON format or name of a contract artifact exported by @aztec/noir-contracts`)
432
+ .action(async (contractArtifactFile) => {
433
+ const contractArtifact = await getContractArtifact(contractArtifactFile, debugLogger);
434
+ const contractFns = contractArtifact.functions.filter(f => !f.isInternal && f.name !== 'compute_note_hash_and_nullifier');
423
435
  if (contractFns.length === 0) {
424
- log(`No external functions found for contract ${contractAbi.name}`);
436
+ log(`No external functions found for contract ${contractArtifact.name}`);
425
437
  }
426
438
  for (const fn of contractFns) {
427
439
  const signature = decodeFunctionSignatureWithParameterNames(fn.name, fn.parameters);
@@ -433,4 +445,4 @@ export function getProgram(log, debugLogger) {
433
445
  generateNoirInterface(program, 'generate-noir-interface', log);
434
446
  return program;
435
447
  }
436
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFFBQVEsRUFDUixnQkFBZ0IsRUFDaEIsRUFBRSxFQUNGLGNBQWMsRUFDZCxZQUFZLEVBQ1osaUJBQWlCLEVBQ2pCLGlCQUFpQixFQUNqQixrQkFBa0IsR0FDbkIsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QixPQUFPLEVBQWMseUNBQXlDLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUM5RixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFM0QsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3RELE9BQU8sRUFBRSxlQUFlLEVBQUUscUJBQXFCLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMvRyxPQUFPLEVBQUUsZUFBZSxFQUFnQixhQUFhLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFNUUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDaEUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDNUMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLElBQUksQ0FBQztBQUNsQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN4QyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzlCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVsRCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDckQsT0FBTyxFQUFFLFVBQVUsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM5RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQzNDLE9BQU8sRUFDTCxvQkFBb0IsRUFDcEIsY0FBYyxFQUNkLGNBQWMsRUFDZCwyQkFBMkIsRUFDM0IsV0FBVyxFQUNYLGlCQUFpQixFQUNqQixVQUFVLEVBQ1YsV0FBVyxFQUNYLG1CQUFtQixFQUNuQixlQUFlLEVBQ2YsY0FBYyxFQUNkLHNCQUFzQixFQUN0QixXQUFXLEVBQ1gsTUFBTSxHQUNQLE1BQU0sWUFBWSxDQUFDO0FBRXBCLE1BQU0sbUJBQW1CLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQztBQUVwQyxNQUFNLEVBQUUsYUFBYSxHQUFHLHVCQUF1QixFQUFFLFdBQVcsRUFBRSxPQUFPLEVBQUUsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDO0FBRXRGOzs7OztHQUtHO0FBQ0gsTUFBTSxVQUFVLFVBQVUsQ0FBQyxHQUFVLEVBQUUsV0FBd0I7SUFDN0QsTUFBTSxPQUFPLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztJQUU5QixNQUFNLGVBQWUsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztJQUM1RixNQUFNLE9BQU8sR0FBVyxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxlQUFlLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQztJQUVyRixPQUFPLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxpQ0FBaUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUUxRixNQUFNLFNBQVMsR0FBRyxJQUFJLE1BQU0sQ0FBQyx3QkFBd0IsRUFBRSxnQkFBZ0IsQ0FBQztTQUNyRSxHQUFHLENBQUMsU0FBUyxDQUFDO1NBQ2QsT0FBTyxDQUFDLHVCQUF1QixDQUFDO1NBQ2hDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxDQUFDO0lBRTdCLE1BQU0sc0JBQXNCLEdBQUcsQ0FBQyxXQUFtQixFQUFFLFNBQWtCLEVBQUUsRUFBRSxDQUN6RSxJQUFJLE1BQU0sQ0FBQyw0QkFBNEIsRUFBRSxXQUFXLENBQUM7U0FDbEQsR0FBRyxDQUFDLGFBQWEsQ0FBQztTQUNsQixTQUFTLENBQUMsZUFBZSxDQUFDO1NBQzFCLG1CQUFtQixDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBRXBDLE9BQU87U0FDSixPQUFPLENBQUMscUJBQXFCLENBQUM7U0FDOUIsV0FBVyxDQUFDLHFEQUFxRCxDQUFDO1NBQ2xFLGNBQWMsQ0FDYix3QkFBd0IsRUFDeEIsK0VBQStFLEVBQy9FLGFBQWEsQ0FDZDtTQUNBLE1BQU0sQ0FBQyx3QkFBd0IsRUFBRSwrQkFBK0IsRUFBRSxPQUFPLENBQUM7U0FDMUUsY0FBYyxDQUFDLDRCQUE0QixFQUFFLHVDQUF1QyxFQUFFLFdBQVcsQ0FBQztTQUNsRyxNQUFNLENBQ0wseUJBQXlCLEVBQ3pCLG1DQUFtQyxFQUNuQyw2REFBNkQsQ0FDOUQ7U0FDQSxNQUFNLENBQUMsS0FBSyxFQUFDLE9BQU8sRUFBQyxFQUFFO1FBQ3RCLE1BQU0sRUFBRSxtQkFBbUIsRUFBRSxHQUFHLE1BQU0sb0JBQW9CLENBQ3hELE9BQU8sQ0FBQyxNQUFNLEVBQ2QsT0FBTyxDQUFDLE1BQU0sSUFBSSxFQUFFLEVBQ3BCLE9BQU8sQ0FBQyxVQUFVLEVBQ2xCLE9BQU8sQ0FBQyxRQUFRLEVBQ2hCLFdBQVcsQ0FDWixDQUFDO1FBQ0YsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ1YsR0FBRyxDQUFDLG1CQUFtQixtQkFBbUIsQ0FBQyxhQUFhLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZFLEdBQUcsQ0FBQyxxQkFBcUIsbUJBQW1CLENBQUMsZUFBZSxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUMzRSxHQUFHLENBQUMsMkJBQTJCLG1CQUFtQixDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDOUUsR0FBRyxDQUFDLDRCQUE0QixtQkFBbUIsQ0FBQyxhQUFhLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ2hGLEdBQUcsQ0FBQyx3Q0FBd0MsbUJBQW1CLENBQUMsZ0NBQWdDLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQy9HLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNaLENBQUMsQ0FBQyxDQUFDO0lBRUwsT0FBTztTQUNKLE9BQU8sQ0FBQyxzQkFBc0IsQ0FBQztTQUMvQixPQUFPLENBQUMsc0NBQXNDLENBQUM7U0FDL0MsV0FBVyxDQUNWLDRIQUE0SCxDQUM3SDtTQUNBLE1BQU0sQ0FDTCxnQkFBZ0IsRUFDaEIseUhBQXlILENBQzFIO1NBQ0EsTUFBTSxDQUFDLEtBQUssRUFBQyxPQUFPLEVBQUMsRUFBRTtRQUN0QixJQUFJLE9BQU8sQ0FBQztRQUNaLElBQUksU0FBUyxDQUFDO1FBQ2QsSUFBSSxPQUFPLENBQUMsUUFBUSxFQUFFO1lBQ3BCLE1BQU0sR0FBRyxHQUFHLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNoRCxzRkFBc0Y7WUFDdEYsTUFBTSxHQUFHLEdBQUcsY0FBYyxDQUFDLHVCQUF1QixDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxDQUFDLFVBQVcsQ0FBQyxDQUFDLENBQUM7WUFDNUYsU0FBUyxHQUFHLE1BQU0saUJBQWlCLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDMUM7YUFBTTtZQUNMLE1BQU0sR0FBRyxHQUFHLGNBQWMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNwQyxPQUFPLEdBQUcsR0FBRyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUM3QixTQUFTLEdBQUcsTUFBTSxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUMxQztRQUNELEdBQUcsQ0FBQyxrQkFBa0IsT0FBTyxpQkFBaUIsU0FBUyxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUMxRSxDQUFDLENBQUMsQ0FBQztJQUVMLE9BQU87U0FDSixPQUFPLENBQUMsMEJBQTBCLENBQUM7U0FDbkMsT0FBTyxDQUFDLHNDQUFzQyxDQUFDO1NBQy9DLFdBQVcsQ0FBQyxrRkFBa0YsQ0FBQztTQUMvRixNQUFNLENBQUMsS0FBSyxJQUFJLEVBQUU7UUFDakIsTUFBTSxNQUFNLEdBQUcsTUFBTSxxQkFBcUIsRUFBRSxDQUFDO1FBQzdDLE1BQU0sY0FBYyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN2RSxHQUFHLENBQUMsZ0JBQWdCLGNBQWMsRUFBRSxDQUFDLENBQUM7UUFDdEMsR0FBRyxDQUFDLFlBQVksTUFBTSxFQUFFLENBQUMsQ0FBQztJQUM1QixDQUFDLENBQUMsQ0FBQztJQUVMLE9BQU87U0FDSixPQUFPLENBQUMsZ0JBQWdCLENBQUM7U0FDekIsV0FBVyxDQUNWLHNRQUFzUSxDQUN2UTtTQUNBLE9BQU8sQ0FBQyxxRUFBcUUsQ0FBQztTQUM5RSxTQUFTLENBQ1Isc0JBQXNCLENBQUMsa0ZBQWtGLEVBQUUsS0FBSyxDQUFDLENBQ2xIO1NBQ0EsU0FBUyxDQUFDLFNBQVMsQ0FBQztTQUNwQixNQUFNLENBQUMsS0FBSyxFQUFDLE9BQU8sRUFBQyxFQUFFO1FBQ3RCLE1BQU0sTUFBTSxHQUFHLE1BQU0sc0JBQXNCLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxXQUFXLENBQUMsQ0FBQztRQUN6RSxNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsVUFBVSxJQUFJLGNBQWMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUVqRSxNQUFNLE9BQU8sR0FBRyxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO1FBQ3ZGLE1BQU0sTUFBTSxHQUFHLE1BQU0sT0FBTyxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQzFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLGNBQWMsRUFBRSxHQUFHLE1BQU0sQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBRTNFLEdBQUcsQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO1FBQ2hDLEdBQUcsQ0FBQyxvQkFBb0IsT0FBTyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUM5QyxHQUFHLENBQUMsb0JBQW9CLFNBQVMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDaEQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVO1lBQUUsR0FBRyxDQUFDLG9CQUFvQixVQUFVLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUM5RSxHQUFHLENBQUMsb0JBQW9CLGNBQWMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDdkQsQ0FBQyxDQUFDLENBQUM7SUFFTCxPQUFPO1NBQ0osT0FBTyxDQUFDLFFBQVEsQ0FBQztTQUNqQixXQUFXLENBQUMsZ0RBQWdELENBQUM7U0FDN0QsUUFBUSxDQUNQLE9BQU8sRUFDUCwrR0FBK0csQ0FDaEg7U0FDQSxNQUFNLENBQUMsaUNBQWlDLEVBQUUsZ0NBQWdDLEVBQUUsRUFBRSxDQUFDO1NBQy9FLFNBQVMsQ0FBQyxTQUFTLENBQUM7U0FDcEIsTUFBTSxDQUNMLDJCQUEyQixFQUMzQiw0S0FBNEssRUFDNUssY0FBYyxDQUNmO1NBQ0EsTUFBTSxDQUNMLHlCQUF5QixFQUN6QixpRkFBaUYsRUFDakYsc0JBQXNCLENBQ3ZCO1FBQ0QsNEVBQTRFO1FBQzVFLDJGQUEyRjtTQUMxRixNQUFNLENBQUMsV0FBVyxFQUFFLHdGQUF3RixDQUFDO1NBQzdHLE1BQU0sQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFO1FBQzFFLE1BQU0sV0FBVyxHQUFHLE1BQU0sY0FBYyxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQztRQUN2RCxNQUFNLGNBQWMsR0FBRyxXQUFXLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxDQUFDLElBQUksS0FBSyxhQUFhLENBQUMsQ0FBQztRQUV4RixNQUFNLE1BQU0sR0FBRyxNQUFNLHNCQUFzQixDQUFDLE1BQU0sRUFBRSxXQUFXLENBQUMsQ0FBQztRQUNqRSxNQUFNLFFBQVEsR0FBRyxJQUFJLGdCQUFnQixDQUFDLFdBQVcsRUFBRSxNQUFNLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFFdEUsTUFBTSxXQUFXLEdBQUcsY0FBYyxDQUFDLFdBQVcsRUFBRSxhQUFhLENBQUMsQ0FBQztRQUMvRCxJQUFJLENBQUMsV0FBVztZQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsdUNBQXVDLENBQUMsQ0FBQztRQUUzRSxXQUFXLENBQUMsb0JBQW9CLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFNLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2hGLE1BQU0sSUFBSSxHQUFHLFVBQVUsQ0FBQyxPQUFPLEVBQUUsY0FBZSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQzdELFdBQVcsQ0FBQyxzQkFBc0IsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7UUFFckQsTUFBTSxFQUFFLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLG1CQUFtQixFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFDeEUsTUFBTSxNQUFNLEdBQUcsTUFBTSxFQUFFLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDcEMsV0FBVyxDQUFDLDRCQUE0QixNQUFNLEVBQUUsQ0FBQyxDQUFDO1FBQ2xELElBQUksSUFBSSxFQUFFO1lBQ1IsTUFBTSxRQUFRLEdBQUcsTUFBTSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDakMsR0FBRyxDQUFDLDBCQUEwQixRQUFRLENBQUMsZUFBZ0IsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUM7U0FDekU7YUFBTTtZQUNMLEdBQUcsQ0FBQyxrQ0FBa0MsTUFBTSxJQUFJLENBQUMsQ0FBQztTQUNuRDtJQUNILENBQUMsQ0FBQyxDQUFDO0lBRUwsT0FBTztTQUNKLE9BQU8sQ0FBQyxjQUFjLENBQUM7U0FDdkIsV0FBVyxDQUFDLGtFQUFrRSxDQUFDO1NBQy9FLGNBQWMsQ0FDYixtQ0FBbUMsRUFDbkMsNkRBQTZELEVBQzdELGlCQUFpQixDQUNsQjtTQUNBLFNBQVMsQ0FBQyxTQUFTLENBQUM7U0FDcEIsTUFBTSxDQUFDLEtBQUssRUFBQyxPQUFPLEVBQUMsRUFBRTtRQUN0QixNQUFNLE1BQU0sR0FBRyxNQUFNLHNCQUFzQixDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDekUsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLGVBQWUsQ0FBQztRQUN4QyxNQUFNLFVBQVUsR0FBRyxNQUFNLGtCQUFrQixDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQztRQUM3RCxJQUFJLFVBQVU7WUFBRSxHQUFHLENBQUMsdUJBQXVCLE9BQU8sQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUM7O1lBQzlELEdBQUcsQ0FBQywwQkFBMEIsT0FBTyxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUM3RCxDQUFDLENBQUMsQ0FBQztJQUVMLE9BQU87U0FDSixPQUFPLENBQUMsZ0JBQWdCLENBQUM7U0FDekIsV0FBVyxDQUFDLHNEQUFzRCxDQUFDO1NBQ25FLFFBQVEsQ0FBQyxVQUFVLEVBQUUsNENBQTRDLEVBQUUsV0FBVyxDQUFDO1NBQy9FLFNBQVMsQ0FBQyxTQUFTLENBQUM7U0FDcEIsTUFBTSxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLEVBQUU7UUFDaEMsTUFBTSxNQUFNLEdBQUcsTUFBTSxzQkFBc0IsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQ3pFLE1BQU0sT0FBTyxHQUFHLE1BQU0sTUFBTSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNsRCxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ1osR0FBRyxDQUFDLHlDQUF5QyxNQUFNLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1NBQ25FO2FBQU07WUFDTCxHQUFHLENBQUMsNEJBQTRCLGFBQWEsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ25FO0lBQ0gsQ0FBQyxDQUFDLENBQUM7SUFFTCxPQUFPO1NBQ0osT0FBTyxDQUFDLG1CQUFtQixDQUFDO1NBQzVCLFdBQVcsQ0FBQyw4RUFBOEUsQ0FBQztTQUMzRixRQUFRLENBQUMsbUJBQW1CLEVBQUUsZ0NBQWdDLEVBQUUsaUJBQWlCLENBQUM7U0FDbEYsU0FBUyxDQUFDLFNBQVMsQ0FBQztTQUNwQixNQUFNLENBQUMsa0NBQWtDLEVBQUUsMERBQTBELEVBQUUsS0FBSyxDQUFDO1NBQzdHLE1BQU0sQ0FBQyxLQUFLLEVBQUUsZUFBZSxFQUFFLE9BQU8sRUFBRSxFQUFFO1FBQ3pDLE1BQU0sTUFBTSxHQUFHLE1BQU0sc0JBQXNCLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxXQUFXLENBQUMsQ0FBQztRQUN6RSxNQUFNLGlDQUFpQyxHQUFHLE9BQU8sQ0FBQyxlQUFlO1lBQy9ELENBQUMsQ0FBQyxNQUFNLE1BQU0sQ0FBQyx1QkFBdUIsQ0FBQyxlQUFlLENBQUM7WUFDdkQsQ0FBQyxDQUFDLE1BQU0sTUFBTSxDQUFDLGVBQWUsQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUVsRCxJQUFJLENBQUMsaUNBQWlDLEVBQUU7WUFDdEMsR0FBRyxDQUFDLDZCQUE2QixlQUFlLEVBQUUsQ0FBQyxDQUFDO1lBQ3BELE9BQU87U0FDUjtRQUNELElBQUksWUFBMEIsQ0FBQztRQUUvQixJQUFJLGNBQWMsSUFBSSxpQ0FBaUMsRUFBRTtZQUN2RCxZQUFZLEdBQUcsaUNBQWlDLENBQUMsWUFBWSxDQUFDO1NBQy9EO2FBQU07WUFDTCxZQUFZLEdBQUcsaUNBQWlDLENBQUM7U0FDbEQ7UUFDRCxHQUFHLENBQUMsK0JBQStCLFlBQVksQ0FBQyxlQUFlLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQzlFLEdBQUcsQ0FBQyxZQUFZLFlBQVksQ0FBQyxxQkFBcUIsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDakUsSUFBSSxVQUFVLElBQUksaUNBQWlDLEVBQUU7WUFDbkQsR0FBRyxDQUFDLGFBQWEsaUNBQWlDLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztTQUNoRTtRQUNELEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNaLENBQUMsQ0FBQyxDQUFDO0lBRUwsT0FBTztTQUNKLE9BQU8sQ0FBQyxVQUFVLENBQUM7U0FDbkIsV0FBVyxDQUFDLHNFQUFzRSxDQUFDO1NBQ25GLE1BQU0sQ0FBQyx1QkFBdUIsRUFBRSx3REFBd0QsQ0FBQztTQUN6RixNQUFNLENBQUMsMEJBQTBCLEVBQUUsNkNBQTZDLENBQUM7U0FDakYsU0FBUyxDQUFDLFNBQVMsQ0FBQztTQUNwQixNQUFNLENBQUMsS0FBSyxFQUFDLE9BQU8sRUFBQyxFQUFFO1FBQ3RCLE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEdBQUcsT0FBTyxDQUFDO1FBQ2hDLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDNUMsTUFBTSxVQUFVLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztRQUVqRCxNQUFNLE1BQU0sR0FBRyxNQUFNLHNCQUFzQixDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDekUsTUFBTSxJQUFJLEdBQUcsTUFBTSxNQUFNLENBQUMsa0JBQWtCLENBQUMsU0FBUyxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQ3BFLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ2hCLEdBQUcsQ0FBQywyQkFBMkIsU0FBUyxPQUFPLFNBQVMsR0FBRyxVQUFVLEVBQUUsQ0FBQyxDQUFDO1NBQzFFO2FBQU07WUFDTCxHQUFHLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztZQUN0QixhQUFhLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7U0FDdEY7SUFDSCxDQUFDLENBQUMsQ0FBQztJQUVMLE9BQU87U0FDSixPQUFPLENBQUMsb0JBQW9CLENBQUM7U0FDN0IsV0FBVyxDQUFDLGtDQUFrQyxDQUFDO1NBQy9DLGNBQWMsQ0FBQyw4QkFBOEIsRUFBRSw4QkFBOEIsRUFBRSxpQkFBaUIsQ0FBQztTQUNqRyxjQUFjLENBQUMsOEJBQThCLEVBQUUseUJBQXlCLEVBQUUsY0FBYyxDQUFDO1NBQ3pGLGNBQWMsQ0FDYix5Q0FBeUMsRUFDekMseURBQXlELEVBQ3pELG1CQUFtQixDQUNwQjtTQUNBLFNBQVMsQ0FBQyxTQUFTLENBQUM7U0FDcEIsTUFBTSxDQUFDLEtBQUssRUFBRSxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUU7UUFDL0QsTUFBTSxNQUFNLEdBQUcsTUFBTSxzQkFBc0IsQ0FBQyxNQUFNLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDakUsTUFBTSxNQUFNLENBQUMsaUJBQWlCLENBQUMsTUFBTSxlQUFlLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxTQUFTLEVBQUUsY0FBYyxDQUFDLENBQUMsQ0FBQztRQUNqRyxHQUFHLENBQUMsa0RBQWtELE9BQU8sSUFBSSxDQUFDLENBQUM7SUFDckUsQ0FBQyxDQUFDLENBQUM7SUFFTCxPQUFPO1NBQ0osT0FBTyxDQUFDLGNBQWMsQ0FBQztTQUN2QixXQUFXLENBQUMsZ0RBQWdELENBQUM7U0FDN0QsU0FBUyxDQUFDLFNBQVMsQ0FBQztTQUNwQixNQUFNLENBQUMsS0FBSyxFQUFFLE9BQVksRUFBRSxFQUFFO1FBQzdCLE1BQU0sTUFBTSxHQUFHLE1BQU0sc0JBQXNCLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxXQUFXLENBQUMsQ0FBQztRQUN6RSxNQUFNLFFBQVEsR0FBRyxNQUFNLE1BQU0sQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1FBQ3RELElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFO1lBQ3BCLEdBQUcsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1NBQzNCO2FBQU07WUFDTCxHQUFHLENBQUMsb0JBQW9CLENBQUMsQ0FBQztZQUMxQixLQUFLLE1BQU0sT0FBTyxJQUFJLFFBQVEsRUFBRTtnQkFDOUIsR0FBRyxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLENBQUM7YUFDakM7U0FDRjtJQUNILENBQUMsQ0FBQyxDQUFDO0lBRUwsT0FBTztTQUNKLE9BQU8sQ0FBQyxhQUFhLENBQUM7U0FDdEIsV0FBVyxDQUFDLDBDQUEwQyxDQUFDO1NBQ3ZELFFBQVEsQ0FBQyxXQUFXLEVBQUUsc0NBQXNDLEVBQUUsaUJBQWlCLENBQUM7U0FDaEYsU0FBUyxDQUFDLFNBQVMsQ0FBQztTQUNwQixNQUFNLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsRUFBRTtRQUNqQyxNQUFNLE1BQU0sR0FBRyxNQUFNLHNCQUFzQixDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDekUsTUFBTSxPQUFPLEdBQUcsTUFBTSxNQUFNLENBQUMsb0JBQW9CLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFM0QsSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNaLEdBQUcsQ0FBQyxtQkFBbUIsT0FBTyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQztTQUM5QzthQUFNO1lBQ0wsR0FBRyxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLENBQUM7U0FDakM7SUFDSCxDQUFDLENBQUMsQ0FBQztJQUVMLE9BQU87U0FDSixPQUFPLENBQUMsZ0JBQWdCLENBQUM7U0FDekIsV0FBVyxDQUFDLDRDQUE0QyxDQUFDO1NBQ3pELFNBQVMsQ0FBQyxTQUFTLENBQUM7U0FDcEIsTUFBTSxDQUFDLEtBQUssRUFBRSxPQUFZLEVBQUUsRUFBRTtRQUM3QixNQUFNLE1BQU0sR0FBRyxNQUFNLHNCQUFzQixDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDekUsTUFBTSxVQUFVLEdBQUcsTUFBTSxNQUFNLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDaEQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUU7WUFDdEIsR0FBRyxDQUFDLHNCQUFzQixDQUFDLENBQUM7U0FDN0I7YUFBTTtZQUNMLEdBQUcsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1lBQzVCLEtBQUssTUFBTSxTQUFTLElBQUksVUFBVSxFQUFFO2dCQUNsQyxHQUFHLENBQUMsU0FBUyxDQUFDLGdCQUFnQixFQUFFLENBQUMsQ0FBQzthQUNuQztTQUNGO0lBQ0gsQ0FBQyxDQUFDLENBQUM7SUFFTCxPQUFPO1NBQ0osT0FBTyxDQUFDLGVBQWUsQ0FBQztTQUN4QixXQUFXLENBQUMsMkNBQTJDLENBQUM7U0FDeEQsUUFBUSxDQUFDLFdBQVcsRUFBRSx3Q0FBd0MsRUFBRSxpQkFBaUIsQ0FBQztTQUNsRixTQUFTLENBQUMsU0FBUyxDQUFDO1NBQ3BCLE1BQU0sQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxFQUFFO1FBQ2pDLE1BQU0sTUFBTSxHQUFHLE1BQU0sc0JBQXNCLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxXQUFXLENBQUMsQ0FBQztRQUN6RSxNQUFNLFNBQVMsR0FBRyxNQUFNLE1BQU0sQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFckQsSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUNkLEdBQUcsQ0FBQyxxQkFBcUIsT0FBTyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQztTQUNoRDthQUFNO1lBQ0wsR0FBRyxDQUFDLFNBQVMsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLENBQUM7U0FDbkM7SUFDSCxDQUFDLENBQUMsQ0FBQztJQUVMLE9BQU87U0FDSixPQUFPLENBQUMsTUFBTSxDQUFDO1NBQ2YsV0FBVyxDQUFDLHdDQUF3QyxDQUFDO1NBQ3JELFFBQVEsQ0FBQyxnQkFBZ0IsRUFBRSw2QkFBNkIsQ0FBQztTQUN6RCxNQUFNLENBQUMsOEJBQThCLEVBQUUsb0JBQW9CLEVBQUUsRUFBRSxDQUFDO1NBQ2hFLGNBQWMsQ0FDYixtQ0FBbUMsRUFDbkMsK0dBQStHLENBQ2hIO1NBQ0EsY0FBYyxDQUFDLG1DQUFtQyxFQUFFLGdDQUFnQyxFQUFFLGlCQUFpQixDQUFDO1NBQ3hHLFNBQVMsQ0FBQyxzQkFBc0IsQ0FBQywyQkFBMkIsRUFBRSxJQUFJLENBQUMsQ0FBQztTQUNwRSxTQUFTLENBQUMsU0FBUyxDQUFDO1NBQ3BCLE1BQU0sQ0FBQyxXQUFXLEVBQUUsMkRBQTJELENBQUM7U0FDaEYsTUFBTSxDQUFDLEtBQUssRUFBRSxZQUFZLEVBQUUsT0FBTyxFQUFFLEVBQUU7UUFDdEMsTUFBTSxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsR0FBRyxNQUFNLE1BQU0sQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLFlBQVksRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ3pHLE1BQU0sRUFBRSxlQUFlLEVBQUUsVUFBVSxFQUFFLEdBQUcsT0FBTyxDQUFDO1FBRWhELE1BQU0sTUFBTSxHQUFHLE1BQU0sc0JBQXNCLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxXQUFXLENBQUMsQ0FBQztRQUN6RSxNQUFNLE1BQU0sR0FBRyxNQUFNLGlCQUFpQixDQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLG1CQUFtQixDQUFDLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDeEcsTUFBTSxRQUFRLEdBQUcsTUFBTSxRQUFRLENBQUMsRUFBRSxDQUFDLGVBQWUsRUFBRSxXQUFXLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDekUsTUFBTSxFQUFFLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQyxHQUFHLFlBQVksQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ2xFLEdBQUcsQ0FBQyxxQkFBcUIsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUM5RCxJQUFJLE9BQU8sQ0FBQyxJQUFJLEVBQUU7WUFDaEIsTUFBTSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7WUFFaEIsR0FBRyxDQUFDLDRCQUE0QixDQUFDLENBQUM7WUFFbEMsTUFBTSxPQUFPLEdBQUcsTUFBTSxFQUFFLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDdEMsR0FBRyxDQUFDLFdBQVcsT0FBTyxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUM7WUFDbkMsR0FBRyxDQUFDLGlCQUFpQixPQUFPLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztZQUM1QyxHQUFHLENBQUMsZUFBZSxPQUFPLENBQUMsU0FBUyxFQUFFLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7U0FDMUQ7YUFBTTtZQUNMLEdBQUcsQ0FBQyx5REFBeUQsQ0FBQyxDQUFDO1NBQ2hFO0lBQ0gsQ0FBQyxDQUFDLENBQUM7SUFFTCxPQUFPO1NBQ0osT0FBTyxDQUFDLE1BQU0sQ0FBQztTQUNmLFdBQVcsQ0FDVix5R0FBeUcsQ0FDMUc7U0FDQSxRQUFRLENBQUMsZ0JBQWdCLEVBQUUsMEJBQTBCLENBQUM7U0FDdEQsTUFBTSxDQUFDLDhCQUE4QixFQUFFLG9CQUFvQixFQUFFLEVBQUUsQ0FBQztTQUNoRSxjQUFjLENBQ2IsbUNBQW1DLEVBQ25DLCtHQUErRyxDQUNoSDtTQUNBLGNBQWMsQ0FBQyxtQ0FBbUMsRUFBRSxnQ0FBZ0MsRUFBRSxpQkFBaUIsQ0FBQztTQUN4RyxNQUFNLENBQUMscUJBQXFCLEVBQUUsNkVBQTZFLENBQUM7U0FDNUcsU0FBUyxDQUFDLFNBQVMsQ0FBQztTQUNwQixNQUFNLENBQUMsS0FBSyxFQUFFLFlBQVksRUFBRSxPQUFPLEVBQUUsRUFBRTtRQUN0QyxNQUFNLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxHQUFHLE1BQU0sTUFBTSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsWUFBWSxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFFekcsTUFBTSxLQUFLLEdBQUcsY0FBYyxDQUFDLFdBQVcsRUFBRSxZQUFZLENBQUMsQ0FBQztRQUN4RCxJQUFJLEtBQUssQ0FBQyxVQUFVLENBQUMsTUFBTSxLQUFLLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ25ELE1BQU0sS0FBSyxDQUNULDJDQUEyQyxLQUFLLENBQUMsVUFBVSxDQUFDLE1BQU0sZUFBZSxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUN2RyxDQUFDO1NBQ0g7UUFDRCxNQUFNLE1BQU0sR0FBRyxNQUFNLHNCQUFzQixDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDekUsTUFBTSxJQUFJLEdBQUcsTUFBTSxXQUFXLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNyRCxNQUFNLE1BQU0sR0FBRyxNQUFNLE1BQU0sQ0FBQyxNQUFNLENBQUMsWUFBWSxFQUFFLFlBQVksRUFBRSxPQUFPLENBQUMsZUFBZSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQzlGLEdBQUcsQ0FBQyxNQUFNLENBQUMsaUJBQWlCLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDL0MsQ0FBQyxDQUFDLENBQUM7SUFFTCxPQUFPO1NBQ0osT0FBTyxDQUFDLFVBQVUsQ0FBQztTQUNuQixXQUFXLENBQUMseUNBQXlDLENBQUM7U0FDdEQsUUFBUSxDQUFDLFdBQVcsRUFBRSxzQ0FBc0MsRUFBRSxpQkFBaUIsQ0FBQztTQUNoRixRQUFRLENBQUMsbUJBQW1CLEVBQUUsZ0NBQWdDLEVBQUUsaUJBQWlCLENBQUM7U0FDbEYsUUFBUSxDQUFDLGVBQWUsRUFBRSwrQkFBK0IsRUFBRSxVQUFVLENBQUM7U0FDdEUsUUFBUSxDQUFDLFVBQVUsRUFBRSw0Q0FBNEMsRUFBRSxXQUFXLENBQUM7U0FDL0UsY0FBYyxDQUFDLGtDQUFrQyxFQUFFLGdCQUFnQixFQUFFLEVBQUUsQ0FBQztTQUN4RSxTQUFTLENBQUMsU0FBUyxDQUFDO1NBQ3BCLE1BQU0sQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxFQUFFO1FBQ3ZFLE1BQU0sUUFBUSxHQUFHLElBQUksWUFBWSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztRQUNqRSxNQUFNLE1BQU0sR0FBRyxNQUFNLHNCQUFzQixDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDekUsTUFBTSxNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxlQUFlLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNoRixDQUFDLENBQUMsQ0FBQztJQUVMLGlFQUFpRTtJQUNqRSxPQUFPO1NBQ0osT0FBTyxDQUFDLHdCQUF3QixDQUFDO1NBQ2pDLFdBQVcsQ0FBQywwRUFBMEUsQ0FBQztTQUN2RixRQUFRLENBQUMsaUJBQWlCLEVBQUUsd0JBQXdCLENBQUM7U0FDckQsY0FBYyxDQUNiLG1DQUFtQyxFQUNuQywrR0FBK0csQ0FDaEg7U0FDQSxjQUFjLENBQUMsaUNBQWlDLEVBQUUsaURBQWlELENBQUM7U0FDcEcsTUFBTSxDQUFDLEtBQUssRUFBRSxhQUFhLEVBQUUsT0FBTyxFQUFFLEVBQUU7UUFDdkMsTUFBTSxXQUFXLEdBQUcsTUFBTSxjQUFjLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUNuRSxNQUFNLGdCQUFnQixHQUFHLFdBQVcsQ0FBQyxTQUFTO2FBQzNDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsVUFBVSxFQUFFLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQzthQUNuQyxJQUFJLEVBQUU7YUFDTixJQUFJLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLENBQUMsSUFBSSxLQUFLLE9BQU8sQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxRQUFRLENBQUMsQ0FBQztRQUNsRixJQUFJLENBQUMsZ0JBQWdCLEVBQUU7WUFDckIsR0FBRyxDQUFDLHVDQUF1QyxPQUFPLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQztZQUNoRSxPQUFPO1NBQ1I7UUFDRCxNQUFNLElBQUksR0FBRyxpQkFBaUIsQ0FBQyxhQUFhLEVBQUUsZ0JBQWdCLENBQUMsSUFBa0IsQ0FBQyxDQUFDO1FBQ25GLEdBQUcsQ0FBQyxvQkFBb0IsYUFBYSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDekQsQ0FBQyxDQUFDLENBQUM7SUFFTCxPQUFPO1NBQ0osT0FBTyxDQUFDLGNBQWMsQ0FBQztTQUN2QixXQUFXLENBQUMseUNBQXlDLENBQUM7U0FDdEQsU0FBUyxDQUFDLFNBQVMsQ0FBQztTQUNwQixNQUFNLENBQUMsS0FBSyxFQUFFLE9BQVksRUFBRSxFQUFFO1FBQzdCLE1BQU0sTUFBTSxHQUFHLE1BQU0sc0JBQXNCLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxXQUFXLENBQUMsQ0FBQztRQUN6RSxNQUFNLEdBQUcsR0FBRyxNQUFNLE1BQU0sQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUMxQyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDO0lBQ2xCLENBQUMsQ0FBQyxDQUFDO0lBRUwsT0FBTztTQUNKLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQztTQUM1QixXQUFXLENBQUMsNEVBQTRFLENBQUM7U0FDekYsTUFBTSxDQUFDLEtBQUssSUFBSSxFQUFFO1FBQ2pCLE1BQU0sUUFBUSxHQUFHLE1BQU0sMkJBQTJCLEVBQUUsQ0FBQztRQUNyRCxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3BDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUNuQyxDQUFDLENBQUMsQ0FBQztJQUVMLE9BQU87U0FDSixPQUFPLENBQUMsT0FBTyxDQUFDO1NBQ2hCLFdBQVcsQ0FDVixnSkFBZ0osQ0FDako7U0FDQSxRQUFRLENBQUMsZ0JBQWdCLEVBQUUsb0RBQW9ELENBQUM7U0FDaEYsUUFBUSxDQUFDLGtCQUFrQixFQUFFLGtGQUFrRixDQUFDO1NBQ2hILE1BQU0sQ0FBQyxLQUFLLEVBQUUsWUFBWSxFQUFFLGNBQWMsRUFBRSxFQUFFO1FBQzdDLE1BQU0sT0FBTyxHQUFXLGNBQWMsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUM7UUFDdkUsTUFBTSxhQUFhLENBQUMsWUFBWSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDM0QsQ0FBQyxDQUFDLENBQUM7SUFFTCxPQUFPO1NBQ0osT0FBTyxDQUFDLGVBQWUsQ0FBQztTQUN4QixXQUFXLENBQUMsaURBQWlELENBQUM7U0FDOUQsU0FBUyxDQUFDLFNBQVMsQ0FBQztTQUNwQixNQUFNLENBQUMsS0FBSyxFQUFDLE9BQU8sRUFBQyxFQUFFO1FBQ3RCLE1BQU0sTUFBTSxHQUFHLE1BQU0sc0JBQXNCLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxXQUFXLENBQUMsQ0FBQztRQUN6RSxNQUFNLElBQUksR0FBRyxNQUFNLE1BQU0sQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUN4QyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUN0QixHQUFHLENBQUMsb0JBQW9CLElBQUksQ0FBQyxjQUFjLElBQUksQ0FBQyxDQUFDO1FBQ2pELEdBQUcsQ0FBQyw2QkFBNkIsSUFBSSxDQUFDLHNCQUFzQixJQUFJLENBQUMsQ0FBQztRQUNsRSxHQUFHLENBQUMsYUFBYSxJQUFJLENBQUMsT0FBTyxJQUFJLENBQUMsQ0FBQztRQUNuQyxHQUFHLENBQUMscUJBQXFCLElBQUksQ0FBQyxlQUFlLElBQUksQ0FBQyxDQUFDO1FBQ25ELEdBQUcsQ0FBQyxtQkFBbUIsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGFBQWEsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDOUUsQ0FBQyxDQUFDLENBQUM7SUFFTCxPQUFPO1NBQ0osT0FBTyxDQUFDLGtCQUFrQixDQUFDO1NBQzNCLFdBQVcsQ0FBQywwREFBMEQsQ0FBQztTQUN2RSxRQUFRLENBQ1AsbUJBQW1CLEVBQ25CLDJHQUEyRyxDQUM1RztTQUNBLE1BQU0sQ0FBQyxLQUFLLEVBQUUsZUFBdUIsRUFBRSxFQUFFO1FBQ3hDLE1BQU0sV0FBVyxHQUFHLE1BQU0sY0FBYyxDQUFDLGVBQWUsRUFBRSxXQUFXLENBQUMsQ0FBQztRQUN2RSxNQUFNLFdBQVcsR0FBRyxXQUFXLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FDOUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxpQ0FBaUMsQ0FDbkUsQ0FBQztRQUNGLElBQUksV0FBVyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDNUIsR0FBRyxDQUFDLDRDQUE0QyxXQUFXLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztTQUNyRTtRQUNELEtBQUssTUFBTSxFQUFFLElBQUksV0FBVyxFQUFFO1lBQzVCLE1BQU0sU0FBUyxHQUFHLHlDQUF5QyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ3BGLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxZQUFZLElBQUksU0FBUyxFQUFFLENBQUMsQ0FBQztTQUN4QztJQUNILENBQUMsQ0FBQyxDQUFDO0lBRUwsZUFBZSxDQUFDLE9BQU8sRUFBRSxTQUFTLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDekMsMkJBQTJCLENBQUMsT0FBTyxFQUFFLHFCQUFxQixFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ2pFLHFCQUFxQixDQUFDLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUUvRCxPQUFPLE9BQU8sQ0FBQztBQUNqQixDQUFDIn0=
448
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFFBQVEsRUFDUixnQkFBZ0IsRUFDaEIsRUFBRSxFQUNGLGNBQWMsRUFDZCxZQUFZLEVBQ1osaUJBQWlCLEVBQ2pCLGlCQUFpQixFQUNqQixrQkFBa0IsR0FDbkIsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QixPQUFPLEVBQWMseUNBQXlDLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUM5RixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFM0QsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3RELE9BQU8sRUFBRSxlQUFlLEVBQUUscUJBQXFCLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMvRyxPQUFPLEVBQUUsZUFBZSxFQUFnQixhQUFhLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFNUUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDaEUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDNUMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLElBQUksQ0FBQztBQUNsQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN4QyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzlCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVsRCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDckQsT0FBTyxFQUFFLFVBQVUsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM5RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQzNDLE9BQU8sRUFDTCxv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
@@ -1,3 +1,3 @@
1
- import { ContractAbi } from '@aztec/foundation/abi';
2
- export declare const mockContractAbi: ContractAbi;
1
+ import { ContractArtifact } from '@aztec/foundation/abi';
2
+ export declare const mockContractArtifact: ContractArtifact;
3
3
  //# sourceMappingURL=mocks.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"mocks.d.ts","sourceRoot":"","sources":["../../src/test/mocks.ts"],"names":[],"mappings":"AAAA,OAAO,EAA0B,WAAW,EAAgB,MAAM,uBAAuB,CAAC;AAE1F,eAAO,MAAM,eAAe,EAAE,WA6D7B,CAAC"}
1
+ {"version":3,"file":"mocks.d.ts","sourceRoot":"","sources":["../../src/test/mocks.ts"],"names":[],"mappings":"AAAA,OAAO,EAA0B,gBAAgB,EAAgB,MAAM,uBAAuB,CAAC;AAE/F,eAAO,MAAM,oBAAoB,EAAE,gBA8DlC,CAAC"}
@@ -1,5 +1,5 @@
1
1
  import { ABIParameterVisibility, FunctionType } from '@aztec/foundation/abi';
2
- export const mockContractAbi = {
2
+ export const mockContractArtifact = {
3
3
  name: 'MockContract',
4
4
  functions: [
5
5
  {
@@ -60,5 +60,6 @@ export const mockContractAbi = {
60
60
  bytecode: 'mockBytecode',
61
61
  },
62
62
  ],
63
+ events: [],
63
64
  };
64
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9ja3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdGVzdC9tb2Nrcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsc0JBQXNCLEVBQWUsWUFBWSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFMUYsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFnQjtJQUMxQyxJQUFJLEVBQUUsY0FBYztJQUNwQixTQUFTLEVBQUU7UUFDVDtZQUNFLElBQUksRUFBRSxhQUFhO1lBQ25CLFlBQVksRUFBRSxZQUFZLENBQUMsTUFBTTtZQUNqQyxVQUFVLEVBQUUsS0FBSztZQUNqQixVQUFVLEVBQUU7Z0JBQ1Y7b0JBQ0UsSUFBSSxFQUFFLG1CQUFtQjtvQkFDekIsSUFBSSxFQUFFO3dCQUNKLElBQUksRUFBRSxPQUFPO3FCQUNkO29CQUNELFVBQVUsRUFBRSxzQkFBc0IsQ0FBQyxNQUFNO2lCQUMxQzthQUNGO1lBQ0QsV0FBVyxFQUFFLEVBQUU7WUFDZixRQUFRLEVBQUUscUJBQXFCO1NBQ2hDO1FBQ0Q7WUFDRSxJQUFJLEVBQUUsY0FBYztZQUNwQixZQUFZLEVBQUUsWUFBWSxDQUFDLE1BQU07WUFDakMsVUFBVSxFQUFFLEtBQUs7WUFDakIsVUFBVSxFQUFFO2dCQUNWO29CQUNFLElBQUksRUFBRSxZQUFZO29CQUNsQixJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFO29CQUN2QixVQUFVLEVBQUUsc0JBQXNCLENBQUMsTUFBTTtpQkFDMUM7Z0JBQ0Q7b0JBQ0UsSUFBSSxFQUFFLFdBQVc7b0JBQ2pCLElBQUksRUFBRSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUU7b0JBQ3pCLFVBQVUsRUFBRSxzQkFBc0IsQ0FBQyxNQUFNO2lCQUMxQztnQkFDRDtvQkFDRSxJQUFJLEVBQUUsY0FBYztvQkFDcEIsSUFBSSxFQUFFLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUU7b0JBQ3BELFVBQVUsRUFBRSxzQkFBc0IsQ0FBQyxNQUFNO2lCQUMxQztnQkFDRDtvQkFDRSxJQUFJLEVBQUUsWUFBWTtvQkFDbEIsSUFBSSxFQUFFLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsRUFBRTtvQkFDM0QsVUFBVSxFQUFFLHNCQUFzQixDQUFDLE1BQU07aUJBQzFDO2dCQUNEO29CQUNFLElBQUksRUFBRSxhQUFhO29CQUNuQixJQUFJLEVBQUU7d0JBQ0osSUFBSSxFQUFFLFFBQVE7d0JBQ2QsSUFBSSxFQUFFLFVBQVU7d0JBQ2hCLE1BQU0sRUFBRTs0QkFDTixFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxFQUFFOzRCQUM5QyxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxFQUFFO3lCQUNqRDtxQkFDRjtvQkFDRCxVQUFVLEVBQUUsc0JBQXNCLENBQUMsTUFBTTtpQkFDMUM7YUFDRjtZQUNELFdBQVcsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxDQUFDO1lBQ2xDLFFBQVEsRUFBRSxjQUFjO1NBQ3pCO0tBQ0Y7Q0FDRixDQUFDIn0=
65
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9ja3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdGVzdC9tb2Nrcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsc0JBQXNCLEVBQW9CLFlBQVksRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRS9GLE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFxQjtJQUNwRCxJQUFJLEVBQUUsY0FBYztJQUNwQixTQUFTLEVBQUU7UUFDVDtZQUNFLElBQUksRUFBRSxhQUFhO1lBQ25CLFlBQVksRUFBRSxZQUFZLENBQUMsTUFBTTtZQUNqQyxVQUFVLEVBQUUsS0FBSztZQUNqQixVQUFVLEVBQUU7Z0JBQ1Y7b0JBQ0UsSUFBSSxFQUFFLG1CQUFtQjtvQkFDekIsSUFBSSxFQUFFO3dCQUNKLElBQUksRUFBRSxPQUFPO3FCQUNkO29CQUNELFVBQVUsRUFBRSxzQkFBc0IsQ0FBQyxNQUFNO2lCQUMxQzthQUNGO1lBQ0QsV0FBVyxFQUFFLEVBQUU7WUFDZixRQUFRLEVBQUUscUJBQXFCO1NBQ2hDO1FBQ0Q7WUFDRSxJQUFJLEVBQUUsY0FBYztZQUNwQixZQUFZLEVBQUUsWUFBWSxDQUFDLE1BQU07WUFDakMsVUFBVSxFQUFFLEtBQUs7WUFDakIsVUFBVSxFQUFFO2dCQUNWO29CQUNFLElBQUksRUFBRSxZQUFZO29CQUNsQixJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFO29CQUN2QixVQUFVLEVBQUUsc0JBQXNCLENBQUMsTUFBTTtpQkFDMUM7Z0JBQ0Q7b0JBQ0UsSUFBSSxFQUFFLFdBQVc7b0JBQ2pCLElBQUksRUFBRSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUU7b0JBQ3pCLFVBQVUsRUFBRSxzQkFBc0IsQ0FBQyxNQUFNO2lCQUMxQztnQkFDRDtvQkFDRSxJQUFJLEVBQUUsY0FBYztvQkFDcEIsSUFBSSxFQUFFLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUU7b0JBQ3BELFVBQVUsRUFBRSxzQkFBc0IsQ0FBQyxNQUFNO2lCQUMxQztnQkFDRDtvQkFDRSxJQUFJLEVBQUUsWUFBWTtvQkFDbEIsSUFBSSxFQUFFLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsRUFBRTtvQkFDM0QsVUFBVSxFQUFFLHNCQUFzQixDQUFDLE1BQU07aUJBQzFDO2dCQUNEO29CQUNFLElBQUksRUFBRSxhQUFhO29CQUNuQixJQUFJLEVBQUU7d0JBQ0osSUFBSSxFQUFFLFFBQVE7d0JBQ2QsSUFBSSxFQUFFLFVBQVU7d0JBQ2hCLE1BQU0sRUFBRTs0QkFDTixFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxFQUFFOzRCQUM5QyxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxFQUFFO3lCQUNqRDtxQkFDRjtvQkFDRCxVQUFVLEVBQUUsc0JBQXNCLENBQUMsTUFBTTtpQkFDMUM7YUFDRjtZQUNELFdBQVcsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxDQUFDO1lBQ2xDLFFBQVEsRUFBRSxjQUFjO1NBQ3pCO0tBQ0Y7SUFDRCxNQUFNLEVBQUUsRUFBRTtDQUNYLENBQUMifQ==
package/dest/utils.d.ts CHANGED
@@ -1,19 +1,19 @@
1
1
  import { AztecAddress, Fr, GrumpkinScalar, PXE, Point, TxHash } from '@aztec/aztec.js';
2
- import { ContractAbi } from '@aztec/foundation/abi';
2
+ import { ContractArtifact } from '@aztec/foundation/abi';
3
3
  import { DebugLogger, LogFn } from '@aztec/foundation/log';
4
4
  /**
5
5
  * Helper type to dynamically import contracts.
6
6
  */
7
7
  interface ArtifactsType {
8
- [key: string]: ContractAbi;
8
+ [key: string]: ContractArtifact;
9
9
  }
10
10
  /**
11
11
  * Helper to get an ABI function or throw error if it doesn't exist.
12
- * @param abi - Contract's ABI in JSON format.
12
+ * @param artifact - Contract's build artifact in JSON format.
13
13
  * @param fnName - Function name to be found.
14
14
  * @returns The function's ABI.
15
15
  */
16
- export declare function getAbiFunction(abi: ContractAbi, fnName: string): import("@aztec/foundation/abi").FunctionAbi;
16
+ export declare function getFunctionArtifact(artifact: ContractArtifact, fnName: string): import("@aztec/foundation/abi").FunctionArtifact;
17
17
  /**
18
18
  * Function to execute the 'deployRollupContracts' command.
19
19
  * @param rpcUrl - The RPC URL of the ethereum node.
@@ -30,9 +30,9 @@ export declare function getExampleContractArtifacts(): Promise<ArtifactsType>;
30
30
  /**
31
31
  * Reads a file and converts it to an Aztec Contract ABI.
32
32
  * @param fileDir - The directory of the compiled contract ABI.
33
- * @returns The parsed ContractABI.
33
+ * @returns The parsed contract artifact.
34
34
  */
35
- export declare function getContractAbi(fileDir: string, log: LogFn): Promise<ContractAbi>;
35
+ export declare function getContractArtifact(fileDir: string, log: LogFn): Promise<ContractArtifact>;
36
36
  /**
37
37
  * Utility to select a TX sender either from user input
38
38
  * or from the first account that is found in a PXE instance.
@@ -44,7 +44,6 @@ export declare function getTxSender(pxe: PXE, _from?: string): Promise<AztecAddr
44
44
  /**
45
45
  * Performs necessary checks, conversions & operations to call a contract fn from the CLI.
46
46
  * @param contractFile - Directory of the compiled contract ABI.
47
- * @param contractAddress - Aztec Address of the contract.
48
47
  * @param functionName - Name of the function to be called.
49
48
  * @param _functionArgs - Arguments to call the function with.
50
49
  * @param log - Logger instance that will output to the CLI
@@ -52,7 +51,7 @@ export declare function getTxSender(pxe: PXE, _from?: string): Promise<AztecAddr
52
51
  */
53
52
  export declare function prepTx(contractFile: string, functionName: string, _functionArgs: string[], log: LogFn): Promise<{
54
53
  functionArgs: any[];
55
- contractAbi: ContractAbi;
54
+ contractArtifact: ContractArtifact;
56
55
  }>;
57
56
  /**
58
57
  * Removes the leading 0x from a hex string. If no leading 0x is found the string is returned unchanged.
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,EAAE,EAAE,cAAc,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAEvF,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAoB3D;;GAEG;AACH,UAAU,aAAa;IACrB,CAAC,GAAG,EAAE,MAAM,GAAG,WAAW,CAAC;CAC5B;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,+CAM9D;AAED;;;;;;GAMG;AACH,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,WAAW,wDA2BzB;AAED;;;GAGG;AACH,wBAAsB,2BAA2B,2BAGhD;AAED;;;;GAIG;AACH,wBAAsB,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,wBAuB/D;AAED;;;;;;GAMG;AACH,wBAAsB,WAAW,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,CAAC,EAAE,MAAM,yBAgBzD;AAED;;;;;;;;GAQG;AACH,wBAAsB,MAAM,CAAC,YAAY,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,KAAK;;;GAM3G;AAED;;;;GAIG;AACH,eAAO,MAAM,eAAe,QAAS,MAAM,WAK1C,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,MAAM,GAAG,EAAE,CActD;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,YAAY,CAM/D;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAMlD;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,KAAK,CAMvD;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,EAAE,CAMvD;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,cAAc,CAYlE;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,EAAE,CAyB5C;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,CAElD"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,EAAE,EAAE,cAAc,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAEvF,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAoB3D;;GAEG;AACH,UAAU,aAAa;IACrB,CAAC,GAAG,EAAE,MAAM,GAAG,gBAAgB,CAAC;CACjC;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,gBAAgB,EAAE,MAAM,EAAE,MAAM,oDAM7E;AAED;;;;;;GAMG;AACH,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,WAAW,wDA2BzB;AAED;;;GAGG;AACH,wBAAsB,2BAA2B,2BAGhD;AAED;;;;GAIG;AACH,wBAAsB,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,6BAuBpE;AAED;;;;;;GAMG;AACH,wBAAsB,WAAW,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,CAAC,EAAE,MAAM,yBAgBzD;AAED;;;;;;;GAOG;AACH,wBAAsB,MAAM,CAAC,YAAY,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,KAAK;;;GAM3G;AAED;;;;GAIG;AACH,eAAO,MAAM,eAAe,QAAS,MAAM,WAK1C,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,MAAM,GAAG,EAAE,CActD;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,YAAY,CAM/D;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAMlD;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,KAAK,CAMvD;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,EAAE,CAMvD;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,cAAc,CAYlE;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,EAAE,CAyB5C;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,CAElD"}
package/dest/utils.js CHANGED
@@ -7,12 +7,12 @@ import { mnemonicToAccount, privateKeyToAccount } from 'viem/accounts';
7
7
  import { encodeArgs } from './encoding.js';
8
8
  /**
9
9
  * Helper to get an ABI function or throw error if it doesn't exist.
10
- * @param abi - Contract's ABI in JSON format.
10
+ * @param artifact - Contract's build artifact in JSON format.
11
11
  * @param fnName - Function name to be found.
12
12
  * @returns The function's ABI.
13
13
  */
14
- export function getAbiFunction(abi, fnName) {
15
- const fn = abi.functions.find(({ name }) => name === fnName);
14
+ export function getFunctionArtifact(artifact, fnName) {
15
+ const fn = artifact.functions.find(({ name }) => name === fnName);
16
16
  if (!fn) {
17
17
  throw Error(`Function ${fnName} not found in contract ABI.`);
18
18
  }
@@ -63,9 +63,9 @@ export async function getExampleContractArtifacts() {
63
63
  /**
64
64
  * Reads a file and converts it to an Aztec Contract ABI.
65
65
  * @param fileDir - The directory of the compiled contract ABI.
66
- * @returns The parsed ContractABI.
66
+ * @returns The parsed contract artifact.
67
67
  */
68
- export async function getContractAbi(fileDir, log) {
68
+ export async function getContractArtifact(fileDir, log) {
69
69
  // first check if it's a noir-contracts example
70
70
  let contents;
71
71
  const artifacts = await getExampleContractArtifacts();
@@ -79,15 +79,15 @@ export async function getContractAbi(fileDir, log) {
79
79
  throw Error(`Contract ${fileDir} not found`);
80
80
  }
81
81
  // if not found, try reading as path directly
82
- let contractAbi;
82
+ let contractArtifact;
83
83
  try {
84
- contractAbi = JSON.parse(contents);
84
+ contractArtifact = JSON.parse(contents);
85
85
  }
86
86
  catch (err) {
87
87
  log('Invalid file used. Please try again.');
88
88
  throw err;
89
89
  }
90
- return contractAbi;
90
+ return contractArtifact;
91
91
  }
92
92
  /**
93
93
  * Utility to select a TX sender either from user input
@@ -118,17 +118,16 @@ export async function getTxSender(pxe, _from) {
118
118
  /**
119
119
  * Performs necessary checks, conversions & operations to call a contract fn from the CLI.
120
120
  * @param contractFile - Directory of the compiled contract ABI.
121
- * @param contractAddress - Aztec Address of the contract.
122
121
  * @param functionName - Name of the function to be called.
123
122
  * @param _functionArgs - Arguments to call the function with.
124
123
  * @param log - Logger instance that will output to the CLI
125
124
  * @returns Formatted contract address, function arguments and caller's aztec address.
126
125
  */
127
126
  export async function prepTx(contractFile, functionName, _functionArgs, log) {
128
- const contractAbi = await getContractAbi(contractFile, log);
129
- const functionAbi = getAbiFunction(contractAbi, functionName);
130
- const functionArgs = encodeArgs(_functionArgs, functionAbi.parameters);
131
- return { functionArgs, contractAbi };
127
+ const contractArtifact = await getContractArtifact(contractFile, log);
128
+ const functionArtifact = getFunctionArtifact(contractArtifact, functionName);
129
+ const functionArgs = encodeArgs(_functionArgs, functionArtifact.parameters);
130
+ return { functionArgs, contractArtifact };
132
131
  }
133
132
  /**
134
133
  * Removes the leading 0x from a hex string. If no leading 0x is found the string is returned unchanged.
@@ -264,4 +263,4 @@ export function parseField(field) {
264
263
  export function parseFields(fields) {
265
264
  return fields.map(parseField);
266
265
  }
267
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxFQUFFLEVBQUUsY0FBYyxFQUFPLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN2RixPQUFPLEVBQW9DLG1CQUFtQixFQUFFLGlCQUFpQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFHM0csT0FBTyxFQUNMLDRCQUE0QixFQUM1QixpQ0FBaUMsRUFDakMsUUFBUSxFQUNSLGFBQWEsRUFDYixTQUFTLEVBQ1QsY0FBYyxFQUNkLFdBQVcsRUFDWCxnQkFBZ0IsRUFDaEIsU0FBUyxFQUNULGNBQWMsR0FDZixNQUFNLHFCQUFxQixDQUFDO0FBRTdCLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNqRCxPQUFPLEVBQUUsTUFBTSxJQUFJLENBQUM7QUFDcEIsT0FBTyxFQUFFLGlCQUFpQixFQUFFLG1CQUFtQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXZFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFTM0M7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUsY0FBYyxDQUFDLEdBQWdCLEVBQUUsTUFBYztJQUM3RCxNQUFNLEVBQUUsR0FBRyxHQUFHLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxDQUFDLElBQUksS0FBSyxNQUFNLENBQUMsQ0FBQztJQUM3RCxJQUFJLENBQUMsRUFBRSxFQUFFO1FBQ1AsTUFBTSxLQUFLLENBQUMsWUFBWSxNQUFNLDZCQUE2QixDQUFDLENBQUM7S0FDOUQ7SUFDRCxPQUFPLEVBQUUsQ0FBQztBQUNaLENBQUM7QUFFRDs7Ozs7O0dBTUc7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLG9CQUFvQixDQUN4QyxNQUFjLEVBQ2QsTUFBYyxFQUNk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
266
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxFQUFFLEVBQUUsY0FBYyxFQUFPLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN2RixPQUFPLEVBQW9DLG1CQUFtQixFQUFFLGlCQUFpQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFHM0csT0FBTyxFQUNMLDRCQUE0QixFQUM1QixpQ0FBaUMsRUFDakMsUUFBUSxFQUNSLGFBQWEsRUFDYixTQUFTLEVBQ1QsY0FBYyxFQUNkLFdBQVcsRUFDWCxnQkFBZ0IsRUFDaEIsU0FBUyxFQUNULGNBQWMsR0FDZixNQUFNLHFCQUFxQixDQUFDO0FBRTdCLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNqRCxPQUFPLEVBQUUsTUFBTSxJQUFJLENBQUM7QUFDcEIsT0FBTyxFQUFFLGlCQUFpQixFQUFFLG1CQUFtQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXZFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFTM0M7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUsbUJBQW1CLENBQUMsUUFBMEIsRUFBRSxNQUFjO0lBQzVFLE1BQU0sRUFBRSxHQUFHLFFBQVEsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLENBQUMsSUFBSSxLQUFLLE1BQU0sQ0FBQyxDQUFDO0lBQ2xFLElBQUksQ0FBQyxFQUFFLEVBQUU7UUFDUCxNQUFNLEtBQUssQ0FBQyxZQUFZLE1BQU0sNkJBQTZCLENBQUMsQ0FBQztLQUM5RDtJQUNELE9BQU8sRUFBRSxDQUFDO0FBQ1osQ0FBQztBQUVEOzs7Ozs7R0FNRztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUsb0JBQW9CLENBQ3hDLE1BQWMsRUFDZCxNQUFjLEVBQ2QsVUFBa0IsRUFDbEIsUUFBZ0IsRUFDaEIsV0FBd0I7SUFFeEIsTUFBTSxPQUFPLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLFFBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLFVBQVUsRUFBRSxDQUFDLENBQUM7SUFDcEcsTUFBTSxLQUFLLEdBQUcsbUJBQW1CLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ2xELE1BQU0sV0FBVyxHQUFxQztRQUNwRCx5QkFBeUIsRUFBRTtZQUN6QixXQUFXLEVBQUUsNEJBQTRCO1lBQ3pDLGdCQUFnQixFQUFFLGlDQUFpQztTQUNwRDtRQUNELFFBQVEsRUFBRTtZQUNSLFdBQVcsRUFBRSxXQUFXO1lBQ3hCLGdCQUFnQixFQUFFLGdCQUFnQjtTQUNuQztRQUNELEtBQUssRUFBRTtZQUNMLFdBQVcsRUFBRSxRQUFRO1lBQ3JCLGdCQUFnQixFQUFFLGFBQWE7U0FDaEM7UUFDRCxNQUFNLEVBQUU7WUFDTixXQUFXLEVBQUUsU0FBUztZQUN0QixnQkFBZ0IsRUFBRSxjQUFjO1NBQ2pDO1FBQ0QsTUFBTSxFQUFFO1lBQ04sV0FBVyxFQUFFLFNBQVM7WUFDdEIsZ0JBQWdCLEVBQUUsY0FBYztTQUNqQztLQUNGLENBQUM7SUFDRixPQUFPLE1BQU0saUJBQWlCLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsS0FBSyxDQUFDLFNBQVMsRUFBRSxXQUFXLEVBQUUsV0FBVyxDQUFDLENBQUM7QUFDbkcsQ0FBQztBQUVEOzs7R0FHRztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUsMkJBQTJCO0lBQy9DLE1BQU0sU0FBUyxHQUFrQixNQUFNLE1BQU0sQ0FBQyxpQ0FBaUMsQ0FBQyxDQUFDO0lBQ2pGLE9BQU8sU0FBUyxDQUFDO0FBQ25CLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSxtQkFBbUIsQ0FBQyxPQUFlLEVBQUUsR0FBVTtJQUNuRSwrQ0FBK0M7SUFDL0MsSUFBSSxRQUFnQixDQUFDO0lBQ3JCLE1BQU0sU0FBUyxHQUFHLE1BQU0sMkJBQTJCLEVBQUUsQ0FBQztJQUN0RCxJQUFJLFNBQVMsQ0FBQyxPQUFPLENBQUMsRUFBRTtRQUN0QixPQUFPLFNBQVMsQ0FBQyxPQUFPLENBQXFCLENBQUM7S0FDL0M7SUFFRCxJQUFJO1FBQ0YsUUFBUSxHQUFHLEVBQUUsQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0tBQzdDO0lBQUMsTUFBTTtRQUNOLE1BQU0sS0FBSyxDQUFDLFlBQVksT0FBTyxZQUFZLENBQUMsQ0FBQztLQUM5QztJQUVELDZDQUE2QztJQUM3QyxJQUFJLGdCQUFrQyxDQUFDO0lBQ3ZDLElBQUk7UUFDRixnQkFBZ0IsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBcUIsQ0FBQztLQUM3RDtJQUFDLE9BQU8sR0FBRyxFQUFFO1FBQ1osR0FBRyxDQUFDLHNDQUFzQyxDQUFDLENBQUM7UUFDNUMsTUFBTSxHQUFHLENBQUM7S0FDWDtJQUNELE9BQU8sZ0JBQWdCLENBQUM7QUFDMUIsQ0FBQztBQUVEOzs7Ozs7R0FNRztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUsV0FBVyxDQUFDLEdBQVEsRUFBRSxLQUFjO0lBQ3hELElBQUksSUFBa0IsQ0FBQztJQUN2QixJQUFJLEtBQUssRUFBRTtRQUNULElBQUk7WUFDRixJQUFJLEdBQUcsWUFBWSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUN2QztRQUFDLE1BQU07WUFDTixNQUFNLElBQUksb0JBQW9CLENBQUMsaUNBQWlDLEtBQUssRUFBRSxDQUFDLENBQUM7U0FDMUU7S0FDRjtTQUFNO1FBQ0wsTUFBTSxRQUFRLEdBQUcsTUFBTSxHQUFHLENBQUMscUJBQXFCLEVBQUUsQ0FBQztRQUNuRCxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRTtZQUNwQixNQUFNLElBQUksS0FBSyxDQUFDLG9DQUFvQyxDQUFDLENBQUM7U0FDdkQ7UUFDRCxJQUFJLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztLQUM1QjtJQUNELE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQztBQUVEOzs7Ozs7O0dBT0c7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLE1BQU0sQ0FBQyxZQUFvQixFQUFFLFlBQW9CLEVBQUUsYUFBdUIsRUFBRSxHQUFVO0lBQzFHLE1BQU0sZ0JBQWdCLEdBQUcsTUFBTSxtQkFBbUIsQ0FBQyxZQUFZLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDdEUsTUFBTSxnQkFBZ0IsR0FBRyxtQkFBbUIsQ0FBQyxnQkFBZ0IsRUFBRSxZQUFZLENBQUMsQ0FBQztJQUM3RSxNQUFNLFlBQVksR0FBRyxVQUFVLENBQUMsYUFBYSxFQUFFLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBRTVFLE9BQU8sRUFBRSxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsQ0FBQztBQUM1QyxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRyxDQUFDLEdBQVcsRUFBRSxFQUFFO0lBQzdDLElBQUksR0FBRyxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksR0FBRyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRTtRQUMxQyxPQUFPLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDekI7SUFDRCxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUMsQ0FBQztBQUVGOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsc0JBQXNCLENBQUMsR0FBVztJQUNoRCxNQUFNLEdBQUcsR0FBRyxlQUFlLENBQUMsR0FBRyxDQUFDLENBQUM7SUFFakMsMkJBQTJCO0lBQzNCLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxFQUFFO1FBQzlCLE1BQU0sSUFBSSxvQkFBb0IsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO0tBQ3REO0lBRUQsNkNBQTZDO0lBQzdDLHFEQUFxRDtJQUNyRCxNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsTUFBTSxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztJQUV0RCxtQ0FBbUM7SUFDbkMsT0FBTyxFQUFFLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDbkQsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsaUJBQWlCLENBQUMsT0FBZTtJQUMvQyxJQUFJO1FBQ0YsT0FBTyxZQUFZLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0tBQ3pDO0lBQUMsTUFBTTtRQUNOLE1BQU0sSUFBSSxvQkFBb0IsQ0FBQyxvQkFBb0IsT0FBTyxFQUFFLENBQUMsQ0FBQztLQUMvRDtBQUNILENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLFdBQVcsQ0FBQyxNQUFjO0lBQ3hDLElBQUk7UUFDRixPQUFPLE1BQU0sQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7S0FDbEM7SUFBQyxNQUFNO1FBQ04sTUFBTSxJQUFJLG9CQUFvQixDQUFDLDZCQUE2QixNQUFNLEVBQUUsQ0FBQyxDQUFDO0tBQ3ZFO0FBQ0gsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsY0FBYyxDQUFDLFNBQWlCO0lBQzlDLElBQUk7UUFDRixPQUFPLEtBQUssQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUM7S0FDcEM7SUFBQyxPQUFPLEdBQUcsRUFBRTtRQUNaLE1BQU0sSUFBSSxvQkFBb0IsQ0FBQyx1QkFBdUIsU0FBUyxFQUFFLENBQUMsQ0FBQztLQUNwRTtBQUNILENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLG1CQUFtQixDQUFDLE9BQWU7SUFDakQsSUFBSTtRQUNGLE9BQU8sRUFBRSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztLQUMvQjtJQUFDLE9BQU8sR0FBRyxFQUFFO1FBQ1osTUFBTSxJQUFJLG9CQUFvQixDQUFDLDRCQUE0QixPQUFPLEVBQUUsQ0FBQyxDQUFDO0tBQ3ZFO0FBQ0gsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsZUFBZSxDQUFDLFVBQWtCO0lBQ2hELElBQUk7UUFDRixNQUFNLEtBQUssR0FBRyxjQUFjLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3BELCtDQUErQztRQUMvQyxJQUFJLEtBQUssQ0FBQyxNQUFNLEVBQUUsRUFBRTtZQUNsQixNQUFNLElBQUksS0FBSyxDQUFDLDhCQUE4QixDQUFDLENBQUM7U0FDakQ7UUFFRCxPQUFPLEtBQUssQ0FBQztLQUNkO0lBQUMsT0FBTyxHQUFHLEVBQUU7UUFDWixNQUFNLElBQUksb0JBQW9CLENBQUMsd0JBQXdCLFVBQVUsRUFBRSxDQUFDLENBQUM7S0FDdEU7QUFDSCxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSxVQUFVLENBQUMsS0FBYTtJQUN0QyxJQUFJO1FBQ0YsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksTUFBTSxDQUFDLGFBQWEsRUFBRSxDQUFDLGFBQWEsR0FBRyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQzVHLElBQUksS0FBSyxFQUFFO1lBQ1QsT0FBTyxFQUFFLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQzdCO1FBRUQsSUFBSSxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDckMsT0FBTyxJQUFJLEVBQUUsQ0FBQyxLQUFLLEtBQUssTUFBTSxDQUFDLENBQUM7U0FDakM7UUFFRCxNQUFNLFFBQVEsR0FBRyxDQUFDLEtBQUssSUFBSSxLQUFLLEtBQUssR0FBRyxDQUFDO1FBQ3pDLElBQUksUUFBUSxFQUFFO1lBQ1osT0FBTyxJQUFJLEVBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztTQUM5QjtRQUVELE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDckMsSUFBSSxRQUFRLEVBQUU7WUFDWixPQUFPLElBQUksRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDaEQ7UUFFRCxPQUFPLElBQUksRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0tBQzlCO0lBQUMsT0FBTyxHQUFHLEVBQUU7UUFDWixNQUFNLElBQUksb0JBQW9CLENBQUMsa0JBQWtCLEtBQUssRUFBRSxDQUFDLENBQUM7S0FDM0Q7QUFDSCxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSxXQUFXLENBQUMsTUFBZ0I7SUFDMUMsT0FBTyxNQUFNLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQ2hDLENBQUMifQ==
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aztec/cli",
3
- "version": "0.8.9",
3
+ "version": "0.8.10",
4
4
  "type": "module",
5
5
  "main": "./dest/index.js",
6
6
  "bin": {
@@ -34,13 +34,13 @@
34
34
  "rootDir": "./src"
35
35
  },
36
36
  "dependencies": {
37
- "@aztec/aztec.js": "0.8.9",
38
- "@aztec/ethereum": "0.8.9",
39
- "@aztec/foundation": "0.8.9",
40
- "@aztec/l1-artifacts": "0.8.9",
41
- "@aztec/noir-compiler": "0.8.9",
42
- "@aztec/noir-contracts": "0.8.9",
43
- "@aztec/types": "0.8.9",
37
+ "@aztec/aztec.js": "0.8.10",
38
+ "@aztec/ethereum": "0.8.10",
39
+ "@aztec/foundation": "0.8.10",
40
+ "@aztec/l1-artifacts": "0.8.10",
41
+ "@aztec/noir-compiler": "0.8.10",
42
+ "@aztec/noir-contracts": "0.8.10",
43
+ "@aztec/types": "0.8.10",
44
44
  "@libp2p/peer-id-factory": "^3.0.4",
45
45
  "commander": "^9.0.0",
46
46
  "jszip": "^3.10.1",
package/src/index.ts CHANGED
@@ -27,9 +27,9 @@ import { encodeArgs, parseStructString } from './encoding.js';
27
27
  import { unboxContract } from './unbox.js';
28
28
  import {
29
29
  deployAztecContracts,
30
- getAbiFunction,
31
- getContractAbi,
30
+ getContractArtifact,
32
31
  getExampleContractArtifacts,
32
+ getFunctionArtifact,
33
33
  getTxSender,
34
34
  parseAztecAddress,
35
35
  parseField,
@@ -150,18 +150,29 @@ export function getProgram(log: LogFn, debugLogger: DebugLogger): Command {
150
150
  createPrivateKeyOption('Private key for note encryption and transaction signing. Uses random by default.', false),
151
151
  )
152
152
  .addOption(pxeOption)
153
- .action(async options => {
154
- const client = await createCompatibleClient(options.rpcUrl, debugLogger);
155
- const privateKey = options.privateKey ?? GrumpkinScalar.random();
153
+ // `options.wait` is default true. Passing `--no-wait` will set it to false.
154
+ // https://github.com/tj/commander.js#other-option-types-negatable-boolean-and-booleanvalue
155
+ .option('--no-wait', 'Skip waiting for the contract to be deployed. Print the hash of deployment transaction')
156
+ .action(async ({ rpcUrl, privateKey, wait }) => {
157
+ const client = await createCompatibleClient(rpcUrl, debugLogger);
158
+ const actualPrivateKey = privateKey ?? GrumpkinScalar.random();
156
159
 
157
- const account = getSchnorrAccount(client, privateKey, privateKey, accountCreationSalt);
158
- const wallet = await account.waitDeploy();
159
- const { address, publicKey, partialAddress } = wallet.getCompleteAddress();
160
+ const account = getSchnorrAccount(client, actualPrivateKey, actualPrivateKey, accountCreationSalt);
161
+ const { address, publicKey, partialAddress } = await account.getCompleteAddress();
162
+ const tx = await account.deploy();
163
+ const txHash = await tx.getTxHash();
164
+ debugLogger(`Account contract tx sent with hash ${txHash}`);
165
+ if (wait) {
166
+ log(`\nWaiting for account contract deployment...`);
167
+ await tx.wait();
168
+ } else {
169
+ log(`\nAccount deployment transaction hash: ${txHash}\n`);
170
+ }
160
171
 
161
- log(`\nCreated new account:\n`);
172
+ log(`\nNew account:\n`);
162
173
  log(`Address: ${address.toString()}`);
163
174
  log(`Public key: ${publicKey.toString()}`);
164
- if (!options.privateKey) log(`Private key: ${privateKey.toString(true)}`);
175
+ if (!privateKey) log(`Private key: ${actualPrivateKey.toString(true)}`);
165
176
  log(`Partial address: ${partialAddress.toString()}`);
166
177
  });
167
178
 
@@ -169,8 +180,8 @@ export function getProgram(log: LogFn, debugLogger: DebugLogger): Command {
169
180
  .command('deploy')
170
181
  .description('Deploys a compiled Aztec.nr contract to Aztec.')
171
182
  .argument(
172
- '<abi>',
173
- "A compiled Aztec.nr contract's ABI in JSON format or name of a contract ABI exported by @aztec/noir-contracts",
183
+ '<artifact>',
184
+ "A compiled Aztec.nr contract's artifact in JSON format or name of a contract artifact exported by @aztec/noir-contracts",
174
185
  )
175
186
  .option('-a, --args <constructorArgs...>', 'Contract constructor arguments', [])
176
187
  .addOption(pxeOption)
@@ -187,18 +198,18 @@ export function getProgram(log: LogFn, debugLogger: DebugLogger): Command {
187
198
  // `options.wait` is default true. Passing `--no-wait` will set it to false.
188
199
  // https://github.com/tj/commander.js#other-option-types-negatable-boolean-and-booleanvalue
189
200
  .option('--no-wait', 'Skip waiting for the contract to be deployed. Print the hash of deployment transaction')
190
- .action(async (abiPath, { rpcUrl, publicKey, args: rawArgs, salt, wait }) => {
191
- const contractAbi = await getContractAbi(abiPath, log);
192
- const constructorAbi = contractAbi.functions.find(({ name }) => name === 'constructor');
201
+ .action(async (artifactPath, { rpcUrl, publicKey, args: rawArgs, salt, wait }) => {
202
+ const contractArtifact = await getContractArtifact(artifactPath, log);
203
+ const constructorArtifact = contractArtifact.functions.find(({ name }) => name === 'constructor');
193
204
 
194
205
  const client = await createCompatibleClient(rpcUrl, debugLogger);
195
- const deployer = new ContractDeployer(contractAbi, client, publicKey);
206
+ const deployer = new ContractDeployer(contractArtifact, client, publicKey);
196
207
 
197
- const constructor = getAbiFunction(contractAbi, 'constructor');
208
+ const constructor = getFunctionArtifact(contractArtifact, 'constructor');
198
209
  if (!constructor) throw new Error(`Constructor not found in contract ABI`);
199
210
 
200
211
  debugLogger(`Input arguments: ${rawArgs.map((x: any) => `"${x}"`).join(', ')}`);
201
- const args = encodeArgs(rawArgs, constructorAbi!.parameters);
212
+ const args = encodeArgs(rawArgs, constructorArtifact!.parameters);
202
213
  debugLogger(`Encoded arguments: ${args.join(', ')}`);
203
214
 
204
215
  const tx = deployer.deploy(...args).send({ contractAddressSalt: salt });
@@ -385,7 +396,7 @@ export function getProgram(log: LogFn, debugLogger: DebugLogger): Command {
385
396
  .argument('<functionName>', 'Name of function to execute')
386
397
  .option('-a, --args [functionArgs...]', 'Function arguments', [])
387
398
  .requiredOption(
388
- '-c, --contract-abi <fileLocation>',
399
+ '-c, --contract-artifact <fileLocation>',
389
400
  "A compiled Aztec.nr contract's ABI in JSON format or name of a contract ABI exported by @aztec/noir-contracts",
390
401
  )
391
402
  .requiredOption('-ca, --contract-address <address>', 'Aztec address of the contract.', parseAztecAddress)
@@ -393,12 +404,17 @@ export function getProgram(log: LogFn, debugLogger: DebugLogger): Command {
393
404
  .addOption(pxeOption)
394
405
  .option('--no-wait', 'Print transaction hash without waiting for it to be mined')
395
406
  .action(async (functionName, options) => {
396
- const { functionArgs, contractAbi } = await prepTx(options.contractAbi, functionName, options.args, log);
407
+ const { functionArgs, contractArtifact } = await prepTx(
408
+ options.contractArtifact,
409
+ functionName,
410
+ options.args,
411
+ log,
412
+ );
397
413
  const { contractAddress, privateKey } = options;
398
414
 
399
415
  const client = await createCompatibleClient(options.rpcUrl, debugLogger);
400
416
  const wallet = await getSchnorrAccount(client, privateKey, privateKey, accountCreationSalt).getWallet();
401
- const contract = await Contract.at(contractAddress, contractAbi, wallet);
417
+ const contract = await Contract.at(contractAddress, contractArtifact, wallet);
402
418
  const tx = contract.methods[functionName](...functionArgs).send();
403
419
  log(`Transaction hash: ${(await tx.getTxHash()).toString()}`);
404
420
  if (options.wait) {
@@ -423,19 +439,24 @@ export function getProgram(log: LogFn, debugLogger: DebugLogger): Command {
423
439
  .argument('<functionName>', 'Name of function to call')
424
440
  .option('-a, --args [functionArgs...]', 'Function arguments', [])
425
441
  .requiredOption(
426
- '-c, --contract-abi <fileLocation>',
442
+ '-c, --contract-artifact <fileLocation>',
427
443
  "A compiled Aztec.nr contract's ABI in JSON format or name of a contract ABI exported by @aztec/noir-contracts",
428
444
  )
429
445
  .requiredOption('-ca, --contract-address <address>', 'Aztec address of the contract.', parseAztecAddress)
430
446
  .option('-f, --from <string>', 'Aztec address of the caller. If empty, will use the first account from RPC.')
431
447
  .addOption(pxeOption)
432
448
  .action(async (functionName, options) => {
433
- const { functionArgs, contractAbi } = await prepTx(options.contractAbi, functionName, options.args, log);
449
+ const { functionArgs, contractArtifact } = await prepTx(
450
+ options.contractArtifact,
451
+ functionName,
452
+ options.args,
453
+ log,
454
+ );
434
455
 
435
- const fnAbi = getAbiFunction(contractAbi, functionName);
436
- if (fnAbi.parameters.length !== options.args.length) {
456
+ const fnArtifact = getFunctionArtifact(contractArtifact, functionName);
457
+ if (fnArtifact.parameters.length !== options.args.length) {
437
458
  throw Error(
438
- `Invalid number of args passed. Expected ${fnAbi.parameters.length}; Received: ${options.args.length}`,
459
+ `Invalid number of args passed. Expected ${fnArtifact.parameters.length}; Received: ${options.args.length}`,
439
460
  );
440
461
  }
441
462
  const client = await createCompatibleClient(options.rpcUrl, debugLogger);
@@ -465,13 +486,13 @@ export function getProgram(log: LogFn, debugLogger: DebugLogger): Command {
465
486
  .description("Helper for parsing an encoded string into a contract's parameter struct.")
466
487
  .argument('<encodedString>', 'The encoded hex string')
467
488
  .requiredOption(
468
- '-c, --contract-abi <fileLocation>',
489
+ '-c, --contract-artifact <fileLocation>',
469
490
  "A compiled Aztec.nr contract's ABI in JSON format or name of a contract ABI exported by @aztec/noir-contracts",
470
491
  )
471
492
  .requiredOption('-p, --parameter <parameterName>', 'The name of the struct parameter to decode into')
472
493
  .action(async (encodedString, options) => {
473
- const contractAbi = await getContractAbi(options.contractAbi, log);
474
- const parameterAbitype = contractAbi.functions
494
+ const contractArtifact = await getContractArtifact(options.contractArtifact, log);
495
+ const parameterAbitype = contractArtifact.functions
475
496
  .map(({ parameters }) => parameters)
476
497
  .flat()
477
498
  .find(({ name, type }) => name === options.parameter && type.kind === 'struct');
@@ -533,16 +554,16 @@ export function getProgram(log: LogFn, debugLogger: DebugLogger): Command {
533
554
  .command('inspect-contract')
534
555
  .description('Shows list of external callable functions for a contract')
535
556
  .argument(
536
- '<contractAbiFile>',
537
- `A compiled Noir contract's ABI in JSON format or name of a contract ABI exported by @aztec/noir-contracts`,
557
+ '<contractArtifactFile>',
558
+ `A compiled Noir contract's artifact in JSON format or name of a contract artifact exported by @aztec/noir-contracts`,
538
559
  )
539
- .action(async (contractAbiFile: string) => {
540
- const contractAbi = await getContractAbi(contractAbiFile, debugLogger);
541
- const contractFns = contractAbi.functions.filter(
560
+ .action(async (contractArtifactFile: string) => {
561
+ const contractArtifact = await getContractArtifact(contractArtifactFile, debugLogger);
562
+ const contractFns = contractArtifact.functions.filter(
542
563
  f => !f.isInternal && f.name !== 'compute_note_hash_and_nullifier',
543
564
  );
544
565
  if (contractFns.length === 0) {
545
- log(`No external functions found for contract ${contractAbi.name}`);
566
+ log(`No external functions found for contract ${contractArtifact.name}`);
546
567
  }
547
568
  for (const fn of contractFns) {
548
569
  const signature = decodeFunctionSignatureWithParameterNames(fn.name, fn.parameters);
package/src/test/mocks.ts CHANGED
@@ -1,6 +1,6 @@
1
- import { ABIParameterVisibility, ContractAbi, FunctionType } from '@aztec/foundation/abi';
1
+ import { ABIParameterVisibility, ContractArtifact, FunctionType } from '@aztec/foundation/abi';
2
2
 
3
- export const mockContractAbi: ContractAbi = {
3
+ export const mockContractArtifact: ContractArtifact = {
4
4
  name: 'MockContract',
5
5
  functions: [
6
6
  {
@@ -61,4 +61,5 @@ export const mockContractAbi: ContractAbi = {
61
61
  bytecode: 'mockBytecode',
62
62
  },
63
63
  ],
64
+ events: [],
64
65
  };
package/src/utils.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import { AztecAddress, Fr, GrumpkinScalar, PXE, Point, TxHash } from '@aztec/aztec.js';
2
2
  import { L1ContractArtifactsForDeployment, createEthereumChain, deployL1Contracts } from '@aztec/ethereum';
3
- import { ContractAbi } from '@aztec/foundation/abi';
3
+ import { ContractArtifact } from '@aztec/foundation/abi';
4
4
  import { DebugLogger, LogFn } from '@aztec/foundation/log';
5
5
  import {
6
6
  ContractDeploymentEmitterAbi,
@@ -25,17 +25,17 @@ import { encodeArgs } from './encoding.js';
25
25
  * Helper type to dynamically import contracts.
26
26
  */
27
27
  interface ArtifactsType {
28
- [key: string]: ContractAbi;
28
+ [key: string]: ContractArtifact;
29
29
  }
30
30
 
31
31
  /**
32
32
  * Helper to get an ABI function or throw error if it doesn't exist.
33
- * @param abi - Contract's ABI in JSON format.
33
+ * @param artifact - Contract's build artifact in JSON format.
34
34
  * @param fnName - Function name to be found.
35
35
  * @returns The function's ABI.
36
36
  */
37
- export function getAbiFunction(abi: ContractAbi, fnName: string) {
38
- const fn = abi.functions.find(({ name }) => name === fnName);
37
+ export function getFunctionArtifact(artifact: ContractArtifact, fnName: string) {
38
+ const fn = artifact.functions.find(({ name }) => name === fnName);
39
39
  if (!fn) {
40
40
  throw Error(`Function ${fnName} not found in contract ABI.`);
41
41
  }
@@ -95,14 +95,14 @@ export async function getExampleContractArtifacts() {
95
95
  /**
96
96
  * Reads a file and converts it to an Aztec Contract ABI.
97
97
  * @param fileDir - The directory of the compiled contract ABI.
98
- * @returns The parsed ContractABI.
98
+ * @returns The parsed contract artifact.
99
99
  */
100
- export async function getContractAbi(fileDir: string, log: LogFn) {
100
+ export async function getContractArtifact(fileDir: string, log: LogFn) {
101
101
  // first check if it's a noir-contracts example
102
102
  let contents: string;
103
103
  const artifacts = await getExampleContractArtifacts();
104
104
  if (artifacts[fileDir]) {
105
- return artifacts[fileDir] as ContractAbi;
105
+ return artifacts[fileDir] as ContractArtifact;
106
106
  }
107
107
 
108
108
  try {
@@ -112,14 +112,14 @@ export async function getContractAbi(fileDir: string, log: LogFn) {
112
112
  }
113
113
 
114
114
  // if not found, try reading as path directly
115
- let contractAbi: ContractAbi;
115
+ let contractArtifact: ContractArtifact;
116
116
  try {
117
- contractAbi = JSON.parse(contents) as ContractAbi;
117
+ contractArtifact = JSON.parse(contents) as ContractArtifact;
118
118
  } catch (err) {
119
119
  log('Invalid file used. Please try again.');
120
120
  throw err;
121
121
  }
122
- return contractAbi;
122
+ return contractArtifact;
123
123
  }
124
124
 
125
125
  /**
@@ -150,18 +150,17 @@ export async function getTxSender(pxe: PXE, _from?: string) {
150
150
  /**
151
151
  * Performs necessary checks, conversions & operations to call a contract fn from the CLI.
152
152
  * @param contractFile - Directory of the compiled contract ABI.
153
- * @param contractAddress - Aztec Address of the contract.
154
153
  * @param functionName - Name of the function to be called.
155
154
  * @param _functionArgs - Arguments to call the function with.
156
155
  * @param log - Logger instance that will output to the CLI
157
156
  * @returns Formatted contract address, function arguments and caller's aztec address.
158
157
  */
159
158
  export async function prepTx(contractFile: string, functionName: string, _functionArgs: string[], log: LogFn) {
160
- const contractAbi = await getContractAbi(contractFile, log);
161
- const functionAbi = getAbiFunction(contractAbi, functionName);
162
- const functionArgs = encodeArgs(_functionArgs, functionAbi.parameters);
159
+ const contractArtifact = await getContractArtifact(contractFile, log);
160
+ const functionArtifact = getFunctionArtifact(contractArtifact, functionName);
161
+ const functionArgs = encodeArgs(_functionArgs, functionArtifact.parameters);
163
162
 
164
- return { functionArgs, contractAbi };
163
+ return { functionArgs, contractArtifact };
165
164
  }
166
165
 
167
166
  /**