@fuel-ts/account 0.100.3 → 0.100.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (67) hide show
  1. package/dist/account.d.ts +71 -3
  2. package/dist/account.d.ts.map +1 -1
  3. package/dist/connectors/fuel-connector.d.ts +3 -3
  4. package/dist/connectors/fuel-connector.d.ts.map +1 -1
  5. package/dist/index.global.js +1506 -221
  6. package/dist/index.global.js.map +1 -1
  7. package/dist/index.js +2222 -1027
  8. package/dist/index.js.map +1 -1
  9. package/dist/index.mjs +2021 -828
  10. package/dist/index.mjs.map +1 -1
  11. package/dist/predicate/predicate.d.ts +9 -4
  12. package/dist/predicate/predicate.d.ts.map +1 -1
  13. package/dist/providers/__generated__/operations.d.ts +1187 -76
  14. package/dist/providers/__generated__/operations.d.ts.map +1 -1
  15. package/dist/providers/assemble-tx-helpers.d.ts +39 -0
  16. package/dist/providers/assemble-tx-helpers.d.ts.map +1 -0
  17. package/dist/providers/fuel-graphql-subscriber.d.ts +28 -0
  18. package/dist/providers/fuel-graphql-subscriber.d.ts.map +1 -1
  19. package/dist/providers/index.d.ts +1 -0
  20. package/dist/providers/index.d.ts.map +1 -1
  21. package/dist/providers/provider.d.ts +85 -6
  22. package/dist/providers/provider.d.ts.map +1 -1
  23. package/dist/providers/resource.d.ts +4 -1
  24. package/dist/providers/resource.d.ts.map +1 -1
  25. package/dist/providers/transaction-request/helpers.d.ts +3 -3
  26. package/dist/providers/transaction-request/helpers.d.ts.map +1 -1
  27. package/dist/providers/transaction-request/input.d.ts +2 -0
  28. package/dist/providers/transaction-request/input.d.ts.map +1 -1
  29. package/dist/providers/transaction-request/output.d.ts +6 -0
  30. package/dist/providers/transaction-request/output.d.ts.map +1 -1
  31. package/dist/providers/transaction-request/script-transaction-request.d.ts +11 -0
  32. package/dist/providers/transaction-request/script-transaction-request.d.ts.map +1 -1
  33. package/dist/providers/transaction-request/transaction-request.d.ts +3 -3
  34. package/dist/providers/transaction-request/transaction-request.d.ts.map +1 -1
  35. package/dist/providers/transaction-response/getAllDecodedLogs.d.ts.map +1 -1
  36. package/dist/providers/transaction-response/transaction-response.d.ts +54 -15
  37. package/dist/providers/transaction-response/transaction-response.d.ts.map +1 -1
  38. package/dist/providers/transaction-summary/assemble-transaction-summary.d.ts +12 -1
  39. package/dist/providers/transaction-summary/assemble-transaction-summary.d.ts.map +1 -1
  40. package/dist/providers/transaction-summary/get-transaction-summary.d.ts.map +1 -1
  41. package/dist/providers/transaction-summary/status.d.ts +16 -2
  42. package/dist/providers/transaction-summary/status.d.ts.map +1 -1
  43. package/dist/providers/transaction-summary/types.d.ts +85 -4
  44. package/dist/providers/transaction-summary/types.d.ts.map +1 -1
  45. package/dist/providers/utils/handle-gql-error-message.d.ts.map +1 -1
  46. package/dist/providers/utils/index.d.ts +1 -0
  47. package/dist/providers/utils/index.d.ts.map +1 -1
  48. package/dist/providers/utils/parse-graphql-response.d.ts +12 -0
  49. package/dist/providers/utils/parse-graphql-response.d.ts.map +1 -0
  50. package/dist/providers/utils/serialization.d.ts +9 -0
  51. package/dist/providers/utils/serialization.d.ts.map +1 -1
  52. package/dist/providers/utils/transaction-response-serialization.d.ts +8 -0
  53. package/dist/providers/utils/transaction-response-serialization.d.ts.map +1 -0
  54. package/dist/test-utils/launchNode.d.ts.map +1 -1
  55. package/dist/test-utils/setup-test-provider-and-wallets.d.ts.map +1 -1
  56. package/dist/test-utils.global.js +1500 -205
  57. package/dist/test-utils.global.js.map +1 -1
  58. package/dist/test-utils.js +2091 -901
  59. package/dist/test-utils.js.map +1 -1
  60. package/dist/test-utils.mjs +1938 -742
  61. package/dist/test-utils.mjs.map +1 -1
  62. package/dist/utils/deployScriptOrPredicate.d.ts.map +1 -1
  63. package/dist/utils/split-coins-into-batches.d.ts +3 -0
  64. package/dist/utils/split-coins-into-batches.d.ts.map +1 -0
  65. package/package.json +15 -15
  66. package/dist/providers/utils/helpers.d.ts +0 -14
  67. package/dist/providers/utils/helpers.d.ts.map +0 -1
@@ -7970,9 +7970,9 @@
7970
7970
  }
7971
7971
  });
7972
7972
 
7973
- // ../../node_modules/.pnpm/@fuels+vm-asm@0.59.1/node_modules/@fuels/vm-asm/dist/node/index.cjs
7973
+ // ../../node_modules/.pnpm/@fuels+vm-asm@0.60.2/node_modules/@fuels/vm-asm/dist/node/index.cjs
7974
7974
  var require_node = __commonJS({
7975
- "../../node_modules/.pnpm/@fuels+vm-asm@0.59.1/node_modules/@fuels/vm-asm/dist/node/index.cjs"(exports) {
7975
+ "../../node_modules/.pnpm/@fuels+vm-asm@0.60.2/node_modules/@fuels/vm-asm/dist/node/index.cjs"(exports) {
7976
7976
  "use strict";
7977
7977
  var wasm$1;
7978
7978
  var cachedTextDecoder = typeof TextDecoder !== "undefined" ? new TextDecoder("utf-8", { ignoreBOM: true, fatal: true }) : { decode: /* @__PURE__ */ __name(() => {
@@ -8711,7 +8711,12 @@
8711
8711
  * r" Get memory address of base asset ID
8712
8712
  */
8713
8713
  BaseAssetId: 6,
8714
- "6": "BaseAssetId"
8714
+ "6": "BaseAssetId",
8715
+ /**
8716
+ * r" Get gas price for block
8717
+ */
8718
+ GetGasPrice: 7,
8719
+ "7": "GetGasPrice"
8715
8720
  });
8716
8721
  var GTFArgs2 = Object.freeze({
8717
8722
  /**
@@ -9043,7 +9048,82 @@
9043
9048
  * r" Set `$rA` to `tx.policies[count_ones(0b11111 & tx.policyTypes) - 1].expiration`
9044
9049
  */
9045
9050
  PolicyExpiration: 1285,
9046
- "1285": "PolicyExpiration"
9051
+ "1285": "PolicyExpiration",
9052
+ /**
9053
+ * r" Set `$rA` to `Memory address of tx.root`
9054
+ */
9055
+ UploadRoot: 1536,
9056
+ "1536": "UploadRoot",
9057
+ /**
9058
+ * r" Set `$rA` to `tx.witnessIndex`
9059
+ */
9060
+ UploadWitnessIndex: 1537,
9061
+ "1537": "UploadWitnessIndex",
9062
+ /**
9063
+ * r" Set `$rA` to `tx.subsectionIndex`
9064
+ */
9065
+ UploadSubsectionIndex: 1538,
9066
+ "1538": "UploadSubsectionIndex",
9067
+ /**
9068
+ * r" Set `$rA` to `tx.subsectionsNumber`
9069
+ */
9070
+ UploadSubsectionsCount: 1539,
9071
+ "1539": "UploadSubsectionsCount",
9072
+ /**
9073
+ * r" Set `$rA` to `tx.proofSetCount`
9074
+ */
9075
+ UploadProofSetCount: 1540,
9076
+ "1540": "UploadProofSetCount",
9077
+ /**
9078
+ * r" Set `$rA` to `Memory address of tx.proofSet[$rB]`
9079
+ */
9080
+ UploadProofSetAtIndex: 1541,
9081
+ "1541": "UploadProofSetAtIndex",
9082
+ /**
9083
+ * r" Set `$rA` to `Memory address of tx.id`
9084
+ */
9085
+ BlobId: 1792,
9086
+ "1792": "BlobId",
9087
+ /**
9088
+ * r" Set `$rA` to `tx.witnessIndex`
9089
+ */
9090
+ BlobWitnessIndex: 1793,
9091
+ "1793": "BlobWitnessIndex",
9092
+ /**
9093
+ * r" Set `$rA` to `Memory address of tx.purpose`
9094
+ */
9095
+ UpgradePurpose: 2048,
9096
+ "2048": "UpgradePurpose",
9097
+ /**
9098
+ * r" Set `$rA` to `tx.inputsCount`
9099
+ */
9100
+ TxInputsCount: 2304,
9101
+ "2304": "TxInputsCount",
9102
+ /**
9103
+ * r" Set `$rA` to `tx.outputsCount`
9104
+ */
9105
+ TxOutputsCount: 2305,
9106
+ "2305": "TxOutputsCount",
9107
+ /**
9108
+ * r" Set `$rA` to `tx.witnessesCount`
9109
+ */
9110
+ TxWitnessesCount: 2306,
9111
+ "2306": "TxWitnessesCount",
9112
+ /**
9113
+ * r" Set `$rA` to `Memory address of tx.inputs[$rB]`
9114
+ */
9115
+ TxInputAtIndex: 2307,
9116
+ "2307": "TxInputAtIndex",
9117
+ /**
9118
+ * r" Set `$rA` to `Memory address of t.outputs[$rB]`
9119
+ */
9120
+ TxOutputAtIndex: 2308,
9121
+ "2308": "TxOutputAtIndex",
9122
+ /**
9123
+ * r" Set `$rA` to `Memory address of tx.witnesses[$rB]`
9124
+ */
9125
+ TxWitnessAtIndex: 2309,
9126
+ "2309": "TxWitnessAtIndex"
9047
9127
  });
9048
9128
  var MathOp = Object.freeze({
9049
9129
  /**
@@ -9399,7 +9479,27 @@
9399
9479
  * r" Given input contract does not exist.
9400
9480
  */
9401
9481
  InputContractDoesNotExist: 60,
9402
- "60": "InputContractDoesNotExist"
9482
+ "60": "InputContractDoesNotExist",
9483
+ /**
9484
+ * r" Storage slot in Create not found
9485
+ */
9486
+ StorageSlotsNotFound: 61,
9487
+ "61": "StorageSlotsNotFound",
9488
+ /**
9489
+ * r" Proof in Upload not found
9490
+ */
9491
+ ProofInUploadNotFound: 62,
9492
+ "62": "ProofInUploadNotFound",
9493
+ /**
9494
+ * r" Invalid purpose type in Upgrade
9495
+ */
9496
+ InvalidUpgradePurposeType: 63,
9497
+ "63": "InvalidUpgradePurposeType",
9498
+ /**
9499
+ * r" Cannot get gas price in predicate
9500
+ */
9501
+ CanNotGetGasPriceInPredicate: 64,
9502
+ "64": "CanNotGetGasPriceInPredicate"
9403
9503
  });
9404
9504
  var ADDFinalization = typeof FinalizationRegistry === "undefined" ? { register: /* @__PURE__ */ __name(() => {
9405
9505
  }, "register"), unregister: /* @__PURE__ */ __name(() => {
@@ -16917,11 +17017,11 @@
16917
17017
  }
16918
17018
  __name(_loadWasmModule, "_loadWasmModule");
16919
17019
  function wasm(imports) {
16920
- return _loadWasmModule(1, null, "AGFzbQEAAAABOgpgA39/fwF/YAF/AX9gBH9/f38Bf2ACf38AYAJ/fwF/YAABf2AFf39/f38Bf2ABfwBgA39/fwBgAAACGAEDd2JnEF9fd2JpbmRnZW5fdGhyb3cAAwOBAv8BAQEDAwMDAwMBAQMDAQEBAwMBAQEEAQMDAwEBAwEBAQQCAQMCAgICAgIDAwMEBAQEBAQEBAEBAQMDAAICBAQEBAQEBAQEBAABAQgDAwQBAQEBAQEBAgcDAQAAAQEDBwcBAwEDAgIBAQEAAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQEBAQEBBQEBAQEEAAQBBgICAwMAAgAHAQgEAQQBCQMBAQcBBQUFBQUFBQUFBQUFBQUFBQUFBQMGBgICBAIGBgAACAAEBQMBABEGCQF/AUGAgMAACwe9Td0FBm1lbW9yeQIAFl9fd2JnX2NvbXBhcmVhcmdzX2ZyZWUAEBpfX3diZ19nZXRfY29tcGFyZWFyZ3NfbW9kZQBIGl9fd2JnX3NldF9jb21wYXJlYXJnc19tb2RlADgiX193YmdfZ2V0X2NvbXBhcmVhcmdzX2luZGlyZWN0X3JocwBJIl9fd2JnX3NldF9jb21wYXJlYXJnc19pbmRpcmVjdF9yaHMASxJjb21wYXJlYXJnc190b19pbW0AWBRjb21wYXJlYXJnc19mcm9tX2ltbQAfFV9fd2JnX2dldF9tYXRoYXJnc19vcABIFV9fd2JnX3NldF9tYXRoYXJnc19vcAA5El9fd2JnX211bGFyZ3NfZnJlZQARHl9fd2JnX2dldF9tdWxhcmdzX2luZGlyZWN0X3JocwBIHl9fd2JnX3NldF9tdWxhcmdzX2luZGlyZWN0X3JocwBMEl9fd2JnX2RpdmFyZ3NfZnJlZQAjHl9fd2JnX2dldF9kaXZhcmdzX2luZGlyZWN0X3JocwC7AR5fX3diZ19zZXRfZGl2YXJnc19pbmRpcmVjdF9yaHMAYxtfX3diZ19wYW5pY2luc3RydWN0aW9uX2ZyZWUAFyFwYW5pY2luc3RydWN0aW9uX2Vycm9yX3R5cGVzY3JpcHQATRdwYW5pY2luc3RydWN0aW9uX3JlYXNvbgBbHHBhbmljaW5zdHJ1Y3Rpb25faW5zdHJ1Y3Rpb24AXAxnbV9mcm9tX2FyZ3MA1wENZ3RmX2Zyb21fYXJncwDPAQdnbV9hcmdzAIoBCGd0Zl9hcmdzAGkOd2RjbV9mcm9tX2FyZ3MAOw53ZG9wX2Zyb21fYXJncwA7DndkbWxfZnJvbV9hcmdzADwOd2Rkdl9mcm9tX2FyZ3MAywEJd2RjbV9hcmdzACQJd3FjbV9hcmdzACUJd2RvcF9hcmdzACYJd3FvcF9hcmdzACcJd2RtbF9hcmdzACgJd3FtbF9hcmdzACkJd2Rkdl9hcmdzAGQJd3Fkdl9hcmdzAGUQX193YmdfaW1tMDZfZnJlZQAqEF9fd2JnX2ltbTEyX2ZyZWUAKxBfX3diZ19pbW0xOF9mcmVlACwOX193YmdfYWRkX2ZyZWUAGA9fX3diZ19ub29wX2ZyZWUABxJhZGRfbmV3X3R5cGVzY3JpcHQAWQZhZGRfcmEANQZhZGRfcmIAEgZhZGRfcmMAGgNhZGQAxwEDYW5kAIwBA2RpdgCNAQJlcQCOAQNleHAAjwECZ3QAkAECbHQAkQEEbWxvZwCSAQRtcm9vAJMBBG1vZF8AlAEFbW92ZV8APQNtdWwAlQEDbm90AD4Cb3IAlgEDc2xsAJcBA3NybACYAQNzdWIAmQEDeG9yAJoBBG1sZHYAagNyZXQAvAEEcmV0ZAA/E2Fsb2NfbmV3X3R5cGVzY3JpcHQAYAdhbG9jX3JhACIEYWxvYwC9AQNtY2wAQANtY3AAmwEDbWVxAGsTYmhzaF9uZXdfdHlwZXNjcmlwdAAgBGJoc2gALQRiaGVpAL4BBGJ1cm4AQQRjYWxsAGwDY2NwAG0EY3JvbwBCBGNzaXoAQwJjYgC/AQNsZGMAbgNsb2cAbwRsb2dkAHAEbWludABEBHJ2cnQAwAEEc2N3cQCcAQNzcncAnQEEc3J3cQBxA3N3dwCeAQRzd3dxAHICdHIAnwEDdHJvAHMEZWNrMQCgAQRlY3IxAKEBBGVkMTkAdARrMjU2AKIBBHMyNTYAowEEdGltZQBFE25vb3BfbmV3X3R5cGVzY3JpcHQAwQEEbm9vcADfAQRmbGFnAMIBA2JhbACkAQNqbXAAwwEDam5lAKUBA3NtbwB1E2FkZGlfbmV3X3R5cGVzY3JpcHQAWgphZGRpX2ltbTEyAAkEYWRkaQCmAQRhbmRpAKcBBGRpdmkAqAEEZXhwaQCpAQRtb2RpAKoBBG11bGkAqwEDb3JpAKwBBHNsbGkArQEEc3JsaQCuAQRzdWJpAK8BBHhvcmkAsAEEam5laQCxAQJsYgCyAQJsdwCzAQJzYgC0AQJzdwC1AQRtY3BpALYBEmd0Zl9uZXdfdHlwZXNjcmlwdADRAQNndGYAtwEEbWNsaQAuEWdtX25ld190eXBlc2NyaXB0AEYIZ21faW1tMTgADQJnbQAvBG1vdmkAMARqbnppADEEam1wZgAyE2ptcGJfbmV3X3R5cGVzY3JpcHQAFQRqbXBiADMEam56ZgC4AQRqbnpiALkBBGpuZWYAdgpqbmViX2ltbTA2ADYEam5lYgB3AmppAE4TY2ZlaV9uZXdfdHlwZXNjcmlwdAA3CmNmZWlfaW1tMjQACgRjZmVpAE8EY2ZzaQBQA2NmZQDEAQNjZnMAxQEEcHNobABRBHBzaGgAUgRwb3BsAFMEcG9waABUE3dkY21fbmV3X3R5cGVzY3JpcHQAzAEEd2RjbQB4BHdxY20AeQR3ZG9wAHoEd3FvcAB7BHdkbWwAfAR3cW1sAH0Ed2RkdgB+BHdxZHYAfwR3ZG1kAIABBHdxbWQAgQEEd2RhbQCCAQR3cWFtAIMBBHdkbW0AhAEEd3FtbQCFAQRlY2FsAIYBBGJzaXoANBNibGRkX25ld190eXBlc2NyaXB0AFUHYmxkZF9yZAA2BGJsZGQAhwEEZWNvcACIAQRlcGFyAIkBFl9fd2JnX2luc3RydWN0aW9uX2ZyZWUADBRpbnN0cnVjdGlvbl90b19ieXRlcwAGEGluc3RydWN0aW9uX3NpemUA8QERcmVnaWRfbmV3X2NoZWNrZWQAugEJcmVnaWRfYmFsAOABCnJlZ2lkX2NnYXMA4QEJcmVnaWRfZXJyAOIBCnJlZ2lkX2ZsYWcA4wEIcmVnaWRfZnAA5AEKcmVnaWRfZ2dhcwDlAQhyZWdpZF9ocADmAQhyZWdpZF9pcwDnAQhyZWdpZF9vZgDoAQlyZWdpZF9vbmUA6QEIcmVnaWRfcGMA6gEJcmVnaWRfcmV0AOsBCnJlZ2lkX3JldGwA7AEIcmVnaWRfc3AA7QEJcmVnaWRfc3BwAO4BDnJlZ2lkX3dyaXRhYmxlAO8BCnJlZ2lkX3plcm8A8AEUcmVnaWRfbmV3X3R5cGVzY3JpcHQA2wELcmVnaWRfdG9fdTgA3AESYW5kX25ld190eXBlc2NyaXB0AFkSZGl2X25ld190eXBlc2NyaXB0AFkRZXFfbmV3X3R5cGVzY3JpcHQAWRJleHBfbmV3X3R5cGVzY3JpcHQAWRFndF9uZXdfdHlwZXNjcmlwdABZEWx0X25ld190eXBlc2NyaXB0AFkTbWxvZ19uZXdfdHlwZXNjcmlwdABZE21yb29fbmV3X3R5cGVzY3JpcHQAWRJtb2RfbmV3X3R5cGVzY3JpcHQAWRJtdWxfbmV3X3R5cGVzY3JpcHQAWRFvcl9uZXdfdHlwZXNjcmlwdABZEnNsbF9uZXdfdHlwZXNjcmlwdABZEnNybF9uZXdfdHlwZXNjcmlwdABZEnN1Yl9uZXdfdHlwZXNjcmlwdABZEnhvcl9uZXdfdHlwZXNjcmlwdABZEm1jcF9uZXdfdHlwZXNjcmlwdABZE3Njd3FfbmV3X3R5cGVzY3JpcHQAWRJzcndfbmV3X3R5cGVzY3JpcHQAWRJzd3dfbmV3X3R5cGVzY3JpcHQAWRF0cl9uZXdfdHlwZXNjcmlwdABZE2VjazFfbmV3X3R5cGVzY3JpcHQAWRNlY3IxX25ld190eXBlc2NyaXB0AFkTazI1Nl9uZXdfdHlwZXNjcmlwdABZE3MyNTZfbmV3X3R5cGVzY3JpcHQAWRJiYWxfbmV3X3R5cGVzY3JpcHQAWRJqbmVfbmV3X3R5cGVzY3JpcHQAWRNhbmRpX25ld190eXBlc2NyaXB0AFoTZGl2aV9uZXdfdHlwZXNjcmlwdABaE2V4cGlfbmV3X3R5cGVzY3JpcHQAWhNtb2RpX25ld190eXBlc2NyaXB0AFoTbXVsaV9uZXdfdHlwZXNjcmlwdABaEm9yaV9uZXdfdHlwZXNjcmlwdABaE3NsbGlfbmV3X3R5cGVzY3JpcHQAWhNzcmxpX25ld190eXBlc2NyaXB0AFoTc3ViaV9uZXdfdHlwZXNjcmlwdABaE3hvcmlfbmV3X3R5cGVzY3JpcHQAWhNqbmVpX25ld190eXBlc2NyaXB0AFoRbGJfbmV3X3R5cGVzY3JpcHQAWhFsd19uZXdfdHlwZXNjcmlwdABaEXNiX25ld190eXBlc2NyaXB0AFoRc3dfbmV3X3R5cGVzY3JpcHQAWhNtY3BpX25ld190eXBlc2NyaXB0AFoTam56Zl9uZXdfdHlwZXNjcmlwdABaE2puemJfbmV3X3R5cGVzY3JpcHQAWhFqaV9uZXdfdHlwZXNjcmlwdAA3E2Nmc2lfbmV3X3R5cGVzY3JpcHQANxNwc2hsX25ld190eXBlc2NyaXB0ADcTcHNoaF9uZXdfdHlwZXNjcmlwdAA3E3BvcGxfbmV3X3R5cGVzY3JpcHQANxNwb3BoX25ld190eXBlc2NyaXB0ADcTbW92aV9uZXdfdHlwZXNjcmlwdAAVE21jbGlfbmV3X3R5cGVzY3JpcHQAFRNqbnppX25ld190eXBlc2NyaXB0ABUTam1wZl9uZXdfdHlwZXNjcmlwdAAVEm5vdF9uZXdfdHlwZXNjcmlwdAAgE3JldGRfbmV3X3R5cGVzY3JpcHQAIBNtb3ZlX25ld190eXBlc2NyaXB0ACASbWNsX25ld190eXBlc2NyaXB0ACATYnVybl9uZXdfdHlwZXNjcmlwdAAgE2Nyb29fbmV3X3R5cGVzY3JpcHQAIBNjc2l6X25ld190eXBlc2NyaXB0ACATbWludF9uZXdfdHlwZXNjcmlwdAAgE3RpbWVfbmV3X3R5cGVzY3JpcHQAIBNic2l6X25ld190eXBlc2NyaXB0ACAGcmV0X3JhACIHYmhlaV9yYQAiBWNiX3JhACIHcnZydF9yYQAiB2ZsYWdfcmEAIgZqbXBfcmEAIghqaV9pbW0yNAAKCmNmc2lfaW1tMjQACgZjZmVfcmEAIgZjZnNfcmEAIgpwc2hsX2ltbTI0AAoKcHNoaF9pbW0yNAAKCnBvcGxfaW1tMjQACgpwb3BoX2ltbTI0AAoTbWxkdl9uZXdfdHlwZXNjcmlwdABVEm1lcV9uZXdfdHlwZXNjcmlwdABVEmNjcF9uZXdfdHlwZXNjcmlwdABVEmxvZ19uZXdfdHlwZXNjcmlwdABVE2xvZ2RfbmV3X3R5cGVzY3JpcHQAVRNzcndxX25ld190eXBlc2NyaXB0AFUTc3d3cV9uZXdfdHlwZXNjcmlwdABVEnRyb19uZXdfdHlwZXNjcmlwdABVE2VkMTlfbmV3X3R5cGVzY3JpcHQAVRJzbW9fbmV3X3R5cGVzY3JpcHQAVRJsZGNfbmV3X3R5cGVzY3JpcHQAVRNqbmVmX25ld190eXBlc2NyaXB0AFUTd2RtZF9uZXdfdHlwZXNjcmlwdABVE3dxbWRfbmV3X3R5cGVzY3JpcHQAVRN3ZGFtX25ld190eXBlc2NyaXB0AFUTd3FhbV9uZXdfdHlwZXNjcmlwdABVE3dkbW1fbmV3X3R5cGVzY3JpcHQAVRN3cW1tX25ld190eXBlc2NyaXB0AFUTZWNhbF9uZXdfdHlwZXNjcmlwdABVE2NhbGxfbmV3X3R5cGVzY3JpcHQAVRNlY29wX25ld190eXBlc2NyaXB0AFUTZXBhcl9uZXdfdHlwZXNjcmlwdABVE19fd2JnX21hdGhhcmdzX2ZyZWUAEB9fX3diZ19zZXRfbWF0aGFyZ3NfaW5kaXJlY3RfcmhzAEseX193Ymdfc2V0X211bGFyZ3NfaW5kaXJlY3RfbGhzAEsfX193YmdfZ2V0X21hdGhhcmdzX2luZGlyZWN0X3JocwBJHl9fd2JnX2dldF9tdWxhcmdzX2luZGlyZWN0X2xocwBJEnJldF9uZXdfdHlwZXNjcmlwdABgE2JoZWlfbmV3X3R5cGVzY3JpcHQAYBFjYl9uZXdfdHlwZXNjcmlwdABgE3J2cnRfbmV3X3R5cGVzY3JpcHQAYBNmbGFnX25ld190eXBlc2NyaXB0AGASam1wX25ld190eXBlc2NyaXB0AGASY2ZlX25ld190eXBlc2NyaXB0AGASY2ZzX25ld190eXBlc2NyaXB0AGAPX193Ymdfam1wZl9mcmVlABgPX193Ymdfc3ViaV9mcmVlABgNX193YmdfamlfZnJlZQAYD19fd2JnX2VjYWxfZnJlZQAYD19fd2JnX3BvcGxfZnJlZQAYDl9fd2JnX2xkY19mcmVlABgPX193Ymdfd2RtbF9mcmVlABgNX193YmdfbHdfZnJlZQAYD19fd2JnX3dxbWxfZnJlZQAYD19fd2JnX2V4cGlfZnJlZQAYD19fd2JnX2puZWZfZnJlZQAYDl9fd2JnX3Nyd19mcmVlABgPX193YmdfYmxkZF9mcmVlABgOX193YmdfbWNwX2ZyZWUAGA9fX3diZ193ZG9wX2ZyZWUAGA9fX3diZ190aW1lX2ZyZWUAGA9fX3diZ19zcndxX2ZyZWUAGA5fX3diZ19jZmVfZnJlZQAYDV9fd2JnX2x0X2ZyZWUAGA9fX3diZ19ydnJ0X2ZyZWUAGA9fX3diZ19kaXZpX2ZyZWUAGA9fX3diZ19tbGR2X2ZyZWUAGA1fX3diZ19sYl9mcmVlABgNX193YmdfY2JfZnJlZQAYDl9fd2JnX2xvZ19mcmVlABgOX193YmdfbWNsX2ZyZWUAGA9fX3diZ193cW1tX2ZyZWUAGA9fX3diZ19zd3dxX2ZyZWUAGA9fX3diZ19idXJuX2ZyZWUAGA5fX3diZ194b3JfZnJlZQAYDl9fd2JnX2V4cF9mcmVlABgPX193Ymdfd3FvcF9mcmVlABgPX193YmdfczI1Nl9mcmVlABgPX193Ymdfd2RhbV9mcmVlABgPX193Ymdfam5lYl9mcmVlABgPX193YmdfbW92aV9mcmVlABgOX193Ymdfam1wX2ZyZWUAGA5fX3diZ19zbW9fZnJlZQAYD19fd2JnX2Joc2hfZnJlZQAYD19fd2JnX211bGlfZnJlZQAYD19fd2JnX21vZGlfZnJlZQAYDl9fd2JnX3Ryb19mcmVlABgPX193Ymdfc2N3cV9mcmVlABgPX193Ymdfd3FjbV9mcmVlABgPX193Ymdfd3FtZF9mcmVlABgPX193YmdfZWNyMV9mcmVlABgNX193Ymdfc3dfZnJlZQAYD19fd2JnX2xvZ2RfZnJlZQAYD19fd2JnX21pbnRfZnJlZQAYD19fd2JnX3dkbWRfZnJlZQAYD19fd2JnX3hvcmlfZnJlZQAYD19fd2JnX2FuZGlfZnJlZQAYD19fd2JnX3NybGlfZnJlZQAYD19fd2JnX2NhbGxfZnJlZQAYD19fd2JnX21vdmVfZnJlZQAYDV9fd2JnX2VxX2ZyZWUAGA9fX3diZ19qbmVpX2ZyZWUAGA9fX3diZ19lZDE5X2ZyZWUAGA9fX3diZ19wc2hoX2ZyZWUAGA5fX3diZ19zbGxfZnJlZQAYD19fd2JnX2FkZGlfZnJlZQAYD19fd2JnX2puemJfZnJlZQAYDl9fd2JnX3N3d19mcmVlABgOX193YmdfY2NwX2ZyZWUAGA9fX3diZ19qbXBiX2ZyZWUAGA9fX3diZ19tbG9nX2ZyZWUAGA9fX3diZ19tY3BpX2ZyZWUAGA1fX3diZ19ndF9mcmVlABgPX193YmdfYnNpel9mcmVlABgPX193Ymdfam56aV9mcmVlABgOX193Ymdfc3ViX2ZyZWUAGA5fX3diZ19kaXZfZnJlZQAYDl9fd2JnX2puZV9mcmVlABgOX193YmdfcmV0X2ZyZWUAGA9fX3diZ19lY29wX2ZyZWUAGA9fX3diZ19yZXRkX2ZyZWUAGA1fX3diZ19vcl9mcmVlABgPX193YmdfY2ZzaV9mcmVlABgPX193YmdfcG9waF9mcmVlABgOX193YmdfYmFsX2ZyZWUAGA9fX3diZ193ZGR2X2ZyZWUAGA9fX3diZ19tcm9vX2ZyZWUAGA9fX3diZ19rMjU2X2ZyZWUAGA1fX3diZ190cl9mcmVlABgOX193YmdfY2ZzX2ZyZWUAGA9fX3diZ193cWFtX2ZyZWUAGA1fX3diZ19zYl9mcmVlABgOX193YmdfZ3RmX2ZyZWUAGA9fX3diZ19qbnpmX2ZyZWUAGA9fX3diZ19mbGFnX2ZyZWUAGA5fX3diZ19tZXFfZnJlZQAYD19fd2JnX2VwYXJfZnJlZQAYD19fd2JnX21jbGlfZnJlZQAYD19fd2JnX3dkY21fZnJlZQAYD19fd2JnX2NmZWlfZnJlZQAYD19fd2JnX2Fsb2NfZnJlZQAYDV9fd2JnX2dtX2ZyZWUAGA9fX3diZ193cWR2X2ZyZWUAGA5fX3diZ19zcmxfZnJlZQAYDl9fd2JnX25vdF9mcmVlABgPX193YmdfY3Npel9mcmVlABgOX193YmdfbW9kX2ZyZWUAGA9fX3diZ193ZG1tX2ZyZWUAGA9fX3diZ19zbGxpX2ZyZWUAGA9fX3diZ19iaGVpX2ZyZWUAGA9fX3diZ19lY2sxX2ZyZWUAGA9fX3diZ19wc2hsX2ZyZWUAGA9fX3diZ19jcm9vX2ZyZWUAGA5fX3diZ19tdWxfZnJlZQAYDl9fd2JnX2FuZF9mcmVlABgOX193Ymdfb3JpX2ZyZWUAGBN3cWR2X25ld190eXBlc2NyaXB0AMwBE3dxbWxfbmV3X3R5cGVzY3JpcHQAzAETd2RtbF9uZXdfdHlwZXNjcmlwdADMARN3cW9wX25ld190eXBlc2NyaXB0AMwBE3dkb3BfbmV3X3R5cGVzY3JpcHQAzAETd3FjbV9uZXdfdHlwZXNjcmlwdADMARN3ZGR2X25ld190eXBlc2NyaXB0AMwBDndxY21fZnJvbV9hcmdzADsKd3Fkdl9pbW0wNgA2CndxbWxfaW1tMDYANgp3ZG1sX2ltbTA2ADYKd3FvcF9pbW0wNgA2Cndkb3BfaW1tMDYANgp3cWNtX2ltbTA2ADYKd2Rkdl9pbW0wNgA2CndkY21faW1tMDYANgpqbmVmX2ltbTA2ADYJbGRjX2ltbTA2ADYOd3Fkdl9mcm9tX2FyZ3MAywEOd3FvcF9mcm9tX2FyZ3MAOwVnbV9yYQA1BWd0X3JjABoFZ3RfcmIAEgVndF9yYQA1BWxiX3JiABIFbGJfcmEANQVsdF9yYwAaBWx0X3JiABIFbHRfcmEANQhsd19pbW0xMgAJBWx3X3JiABIFbHdfcmEANQVvcl9yYwAaBW9yX3JiABIFb3JfcmEANQhzYl9pbW0xMgAJBXNiX3JiABIFc2JfcmEANQhzd19pbW0xMgAJBXN3X3JiABIFc3dfcmEANQV0cl9yYwAaBXRyX3JiABIFdHJfcmEANQVlcV9yYwAaBWVxX3JiABIFZXFfcmEANQZhbmRfcmMAGgZhbmRfcmIAEgZhbmRfcmEANQZiYWxfcmMAGgZiYWxfcmIAEgZiYWxfcmEANQZjY3BfcmMAGgZjY3BfcmIAEgZjY3BfcmEANQZkaXZfcmMAGgZkaXZfcmIAEgZkaXZfcmEANQZleHBfcmMAGgZleHBfcmIAEgZleHBfcmEANQhsYl9pbW0xMgAJBmd0Zl9yYgASBmd0Zl9yYQA1BmpuZV9yYwAaBmpuZV9yYgASBmpuZV9yYQA1BmxkY19yYwAaBmxkY19yYgASBmxkY19yYQA1BmxvZ19yZAA2BmxvZ19yYwAaBmxvZ19yYgASBmxvZ19yYQA1Bm1jbF9yYgASBm1jbF9yYQA1Bm1jcF9yYwAaBm1jcF9yYgASBm1jcF9yYQA1Bm1lcV9yZAA2Bm1lcV9yYwAaBm1lcV9yYgASBm1lcV9yYQA1Bm1vZF9yYwAaBm1vZF9yYgASBm1vZF9yYQA1Bm11bF9yYwAaBm11bF9yYgASBm11bF9yYQA1Bm5vdF9yYgASBm5vdF9yYQA1CW9yaV9pbW0xMgAJBm9yaV9yYgASBm9yaV9yYQA1BnNsbF9yYwAaBnNsbF9yYgASBnNsbF9yYQA1BnNtb19yZAA2BnNtb19yYwAaBnNtb19yYgASBnNtb19yYQA1BnNybF9yYwAaBnNybF9yYgASBnNybF9yYQA1BnNyd19yYwAaBnNyd19yYgASBnNyd19yYQA1BnN1Yl9yYwAaBnN1Yl9yYgASBnN1Yl9yYQA1BnN3d19yYwAaBnN3d19yYgASBnN3d19yYQA1BnRyb19yZAA2BnRyb19yYwAaBnRyb19yYgASBnRyb19yYQA1Bnhvcl9yYwAaBnhvcl9yYgASBnhvcl9yYQA1CWd0Zl9pbW0xMgAJB2FkZGlfcmIAEgdhZGRpX3JhADUKYW5kaV9pbW0xMgAJB2FuZGlfcmIAEgdhbmRpX3JhADUHYmhzaF9yYgASB2Joc2hfcmEANQZjY3BfcmQANgdibGRkX3JjABoHYmxkZF9yYgASB2JsZGRfcmEANQdic2l6X3JiABIHYnNpel9yYQA1B2J1cm5fcmIAEgdidXJuX3JhADUHY2FsbF9yZAA2B2NhbGxfcmMAGgdjYWxsX3JiABIHY2FsbF9yYQA1B2Nyb29fcmIAEgdjcm9vX3JhADUHY3Npel9yYgASB2NzaXpfcmEANQpkaXZpX2ltbTEyAAkHZGl2aV9yYgASB2RpdmlfcmEANQdlY2FsX3JkADYHZWNhbF9yYwAaB2VjYWxfcmIAEgdlY2FsX3JhADUHZWNrMV9yYwAaB2VjazFfcmIAEgdlY2sxX3JhADUHZWNvcF9yZAA2B2Vjb3BfcmMAGgdlY29wX3JiABIHZWNvcF9yYQA1B2VjcjFfcmMAGgdlY3IxX3JiABIHZWNyMV9yYQA1B2VkMTlfcmQANgdlZDE5X3JjABoHZWQxOV9yYgASB2VkMTlfcmEANQdlcGFyX3JkADYHZXBhcl9yYwAaB2VwYXJfcmIAEgdlcGFyX3JhADUKZXhwaV9pbW0xMgAJB2V4cGlfcmIAEgdleHBpX3JhADUKam1wYl9pbW0xOAANB2ptcGJfcmEANQpqbXBmX2ltbTE4AA0Ham1wZl9yYQA1B2puZWJfcmMAGgdqbmViX3JiABIHam5lYl9yYQA1B2puZWZfcmMAGgdqbmVmX3JiABIHam5lZl9yYQA1CmpuZWlfaW1tMTIACQdqbmVpX3JiABIHam5laV9yYQA1CmpuemJfaW1tMTIACQdqbnpiX3JiABIHam56Yl9yYQA1CmpuemZfaW1tMTIACQdqbnpmX3JiABIHam56Zl9yYQA1CmpuemlfaW1tMTgADQdqbnppX3JhADUHazI1Nl9yYwAaB2syNTZfcmIAEgdrMjU2X3JhADUHbG9nZF9yZAA2B2xvZ2RfcmMAGgdsb2dkX3JiABIHbG9nZF9yYQA1Cm1jbGlfaW1tMTgADQdtY2xpX3JhADUKbWNwaV9pbW0xMgAJB21jcGlfcmIAEgdtY3BpX3JhADUHbWludF9yYgASB21pbnRfcmEANQdtbGR2X3JkADYHbWxkdl9yYwAaB21sZHZfcmIAEgdtbGR2X3JhADUHbWxvZ19yYwAaB21sb2dfcmIAEgdtbG9nX3JhADUKbW9kaV9pbW0xMgAJB21vZGlfcmIAEgdtb2RpX3JhADUHbW92ZV9yYgASB21vdmVfcmEANQptb3ZpX2ltbTE4AA0HbW92aV9yYQA1B21yb29fcmMAGgdtcm9vX3JiABIHbXJvb19yYQA1Cm11bGlfaW1tMTIACQdtdWxpX3JiABIHbXVsaV9yYQA1B3JldGRfcmIAEgdyZXRkX3JhADUHczI1Nl9yYwAaB3MyNTZfcmIAEgdzMjU2X3JhADUHc2N3cV9yYwAaB3Njd3FfcmIAEgdzY3dxX3JhADUKc2xsaV9pbW0xMgAJB3NsbGlfcmIAEgdzbGxpX3JhADUKc3JsaV9pbW0xMgAJB3NybGlfcmIAEgdzcmxpX3JhADUHc3J3cV9yZAA2B3Nyd3FfcmMAGgdzcndxX3JiABIHc3J3cV9yYQA1CnN1YmlfaW1tMTIACQdzdWJpX3JiABIHc3ViaV9yYQA1B3N3d3FfcmQANgdzd3dxX3JjABoHc3d3cV9yYgASB3N3d3FfcmEANQd0aW1lX3JiABIHdGltZV9yYQA1B3dkYW1fcmQANgd3ZGFtX3JjABoHd2RhbV9yYgASB3dkYW1fcmEANQd3ZGNtX3JjABoHd2RjbV9yYgASB3dkY21fcmEANQd3ZGR2X3JjABoHd2Rkdl9yYgASB3dkZHZfcmEANQd3ZG1kX3JkADYHd2RtZF9yYwAaB3dkbWRfcmIAEgd3ZG1kX3JhADUHd2RtbF9yYwAaB3dkbWxfcmIAEgd3ZG1sX3JhADUHd2RtbV9yZAA2B3dkbW1fcmMAGgd3ZG1tX3JiABIHd2RtbV9yYQA1B3dkb3BfcmMAGgd3ZG9wX3JiABIHd2RvcF9yYQA1B3dxYW1fcmQANgd3cWFtX3Jj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AAssAQF/QRBBBBDIASIBQoGAgIAQNwIAIAEgAK1C////B4NCIIY3AgggAUEIagskACAAENIBIAAoAgAEQBDZAQALIABBADYCACAAIAFBAEc6AAQLKAAgAxAWIQMgABDJASABEMkBIAIQyQEgAxDQAUEIdEHkAHIQ0wEQZwsoACADEBYhAyAAEMkBIAEQyQEgAhDJASADENABQQh0QeUAchDTARBnCyAAIABBAWsiAEEFTQRAIABBAWoPC0HggsAAQRkQ2gEACykBAX9BEEEEEMgBIgEgADYCDCABQQA2AgggAUKBgICAEDcCACABQQhqCykBAX9BEEEEEMgBIgEgADoADCABQQA2AgggAUKBgICAEDcCACABQQhqCyIAIAIQAiECIAAQyQEgARDJASACEEdBCHRBygByENMBEGcLDwAgACABIAIgA0ESEPMBCw8AIAAgASACIANBGBDzAQsPACAAIAEgAiADQRwQ8wELDwAgACABIAIgA0EdEPMBCw8AIAAgASACIANBIRD0AQsPACAAIAEgAiADQSIQ8wELDwAgACABIAIgA0EjEPMBCw8AIAAgASACIANBKBDzAQsPACAAIAEgAiADQSoQ8wELDwAgACABIAIgA0EsEPMBCw8AIAAgASACIANBLxDzAQsPACAAIAEgAiADQTgQ8wELEAAgACABIAIgA0HTABD0AQsQACAAIAEgAiADQdQAEPQBCxAAIAAgASACIANB3gAQ9AELEAAgACABIAIgA0HfABD0AQsQACAAIAEgAiADQeAAEPQBCxAAIAAgASACIANB4QAQ9AELEAAgACABIAIgA0HiABD0AQsQACAAIAEgAiADQeMAEPQBCxAAIAAgASACIANB5AAQ9AELEAAgACABIAIgA0HlABD0AQsQACAAIAEgAiADQeYAEPMBCxAAIAAgASACIANB5wAQ8wELEAAgACABIAIgA0HoABDzAQsQACAAIAEgAiADQekAEPMBCxAAIAAgASACIANB6gAQ8wELEAAgACABIAIgA0HrABDzAQsQACAAIAEgAiADQewAEPMBCxAAIAAgASACIANB7gAQ8wELEAAgACABIAIgA0HvABDzAQsQACAAIAEgAiADQfAAEPMBCx4AIAEQZiEBIAAQyQEgARDGAUEIdEHMAHIQ0wEQZwsZACAAIAEgAkEgQQAgBBtBEEEAIAMbchAhCw0AIAAgASACQQEQ9QELDQAgACABIAJBAhD1AQsNACAAIAEgAkEDEPUBCw0AIAAgASACQQQQ9QELDQAgACABIAJBBRD1AQsNACAAIAEgAkEGEPUBCw0AIAAgASACQQcQ9QELDQAgACABIAJBCBD1AQsNACAAIAEgAkEJEPUBCw0AIAAgASACQQsQ9QELDQAgACABIAJBDRD1AQsNACAAIAEgAkEOEPUBCw0AIAAgASACQQ8Q9QELDQAgACABIAJBEBD1AQsNACAAIAEgAkEREPUBCw0AIAAgASACQRcQ9QELDQAgACABIAJBJhD1AQsNACAAIAEgAkEnEPUBCw0AIAAgASACQSkQ9QELDQAgACABIAJBKxD1AQsNACAAIAEgAkEtEPUBCw0AIAAgASACQS4Q9QELDQAgACABIAJBMBD1AQsNACAAIAEgAkExEPUBCw0AIAAgASACQTUQ9QELDQAgACABIAJBNxD1AQsNACAAIAEgAkE5EPYBCw0AIAAgASACQToQ9gELDQAgACABIAJBOxD2AQsNACAAIAEgAkE8EPYBCw0AIAAgASACQT0Q9gELDQAgACABIAJBPhD2AQsNACAAIAEgAkE/EPYBCw4AIAAgASACQcAAEPYBCw4AIAAgASACQcEAEPYBCw4AIAAgASACQcIAEPYBCw4AIAAgASACQcMAEPYBCw4AIAAgASACQcQAEPYBCw4AIAAgASACQcUAEPYBCw4AIAAgASACQcYAEPYBCw4AIAAgASACQccAEPYBCw4AIAAgASACQcgAEPYBCw4AIAAgASACQckAEPYBCw4AIAAgASACQcoAEPYBCw4AIAAgASACQdEAEPYBCw4AIAAgASACQdIAEPYBCxcBAX8gAEH/AXFBP00EfyAAEGgFQQALCxsAIAAQ0gEgACgCAEF/RgRAENkBAAsgAC0ABAsJACAAQRMQ9wELCQAgAEEVEPcBCwkAIABBGhD3AQsJACAAQSAQ9wELCQAgAEElEPcBCyIBAX9BEEEEEMgBIgBCADcCCCAAQoGAgIAQNwIAIABBCGoLCQAgAEE0EPcBCwkAIABBNhD3AQsKACAAQdgAEPcBCwoAIABB2QAQ9wELFwAgAUEQdEGAgPwDcSAAQQJ0QfwBcXILGwAgABDJASABEMkBIAIQyQEQOkEIdBDTARBnCxIAIAEgABDVASIABEAgAA8LAAt1AQF/IABB/wFxQcAATwRAIwBBEGsiASQAIAFBIjYCDCABQYCAwAA2AggjAEEgayIAJAAgAEEBNgIEIABB/IbAADYCACAAQgE3AgwgACABQQhqrUKAgICAwACENwMYIAAgAEEYajYCCCAAQbiAwAAQVwALIAALFAAgACABIAJBIEEAIAMbIARyECELFwAgABAbIAEQGyACEBsgAxAWENABEGILFgAgABAbIAEQGyACEBsgAxAbECEQYgsTACAAIAAoAgBBAWs2AgAgARBeCxMAIAAgACgCAEEBazYCACABEF8LEgAgABAbIAEQGyACEAIQRxBiCxEAIAAgASACQSBBACADGxAhCxIAIAAQGyABEBsgAhAdEEcQYgsTACAABEAPC0HcisAAQRsQ2gEACxQBAX9BBEEBEMgBIgEgADYAACABCw0AIAEEQCAAIAEQGQsLgQMBBX9BmY/AAC0AABoCfyAAQQlPBEACQEHN/3tBECAAIABBEE0bIgBrIAFNDQAgAEEQIAFBC2pBeHEgAUELSRsiBGpBDGoQASICRQ0AIAJBCGshAQJAIABBAWsiAyACcUUEQCABIQAMAQsgAkEEayIFKAIAIgZBeHEgAiADakEAIABrcUEIayICIABBACACIAFrQRBNG2oiACABayICayEDIAZBA3EEQCAAIAMgACgCBEEBcXJBAnI2AgQgACADaiIDIAMoAgRBAXI2AgQgBSACIAUoAgBBAXFyQQJyNgIAIAEgAmoiAyADKAIEQQFyNgIEIAEgAhADDAELIAEoAgAhASAAIAM2AgQgACABIAJqNgIACwJAIAAoAgQiAUEDcUUNACABQXhxIgIgBEEQak0NACAAIAQgAUEBcXJBAnI2AgQgACAEaiIBIAIgBGsiBEEDcjYCBCAAIAJqIgIgAigCBEEBcjYCBCABIAQQAwsgAEEIaiEDCyADDAELIAEQAQsLDQAgABDeAUEKdkE/cQsPACAAEBsgARBmEMYBEGILCwAgACMAaiQAIwALDgBB94rAAEHPABDaAQALCQAgACABEAAACwkAIABBP3EQaAsKACAAEBtB/wFxCwgAIABBBBAZCwcAIABBCHQLCQBBMxDTARBnCwYAQQsQaAsGAEEKEGgLBgBBCBBoCwYAQQ8QaAsGAEEGEGgLBgBBCRBoCwYAQQcQ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", imports);
17020
+ return _loadWasmModule(1, null, "AGFzbQEAAAABRwxgA39/fwF/YAF/AX9gBH9/f38Bf2ACf38Bf2ACf38AYAABf2ABfwBgBX9/f39/AX9gA39/fwBgAn5/AX9gBH9/f38AYAAAAhgBA3diZxBfX3diaW5kZ2VuX3Rocm93AAQDigKIAgEDCQEEBAQEBAEEAQQEAQMKAQEEAQQBAQEDAQQEAQEEAQEEAgEBBAICAgICAgQEBAMDAwMDAwMDAgEBBAQABAICAwAAAwMDAwMDAwMDAwABAQQEBAEBAQEBAQECAQYBAQEEBgYBAQEEBAICAQUAAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQEBAQEBAQEBAQEDAAEHAgIGBAQAAgAGCAMBAwELAwMDBAEBBAYBBQQFBQUFBQUFBQUFBQUFBQUFBQUEBwcCAgMCBwcAAAgAAwQFAXABCAgFAwEAEQYJAX8BQYCAwAALB8FN3QUGbWVtb3J5AgAWX193YmdfY29tcGFyZWFyZ3NfZnJlZQAUGl9fd2JnX2dldF9jb21wYXJlYXJnc19tb2RlAFAaX193Ymdfc2V0X2NvbXBhcmVhcmdzX21vZGUAPCJfX3diZ19nZXRfY29tcGFyZWFyZ3NfaW5kaXJlY3RfcmhzAFEiX193Ymdfc2V0X2NvbXBhcmVhcmdzX2luZGlyZWN0X3JocwBTEmNvbXBhcmVhcmdzX3RvX2ltbQBfFGNvbXBhcmVhcmdzX2Zyb21faW1tABUVX193YmdfZ2V0X21hdGhhcmdzX29wAFAVX193Ymdfc2V0X21hdGhhcmdzX29wAD0SX193YmdfbXVsYXJnc19mcmVlABYeX193YmdfZ2V0X211bGFyZ3NfaW5kaXJlY3RfcmhzAFAeX193Ymdfc2V0X211bGFyZ3NfaW5kaXJlY3RfcmhzAFQSX193YmdfZGl2YXJnc19mcmVlACceX193YmdfZ2V0X2RpdmFyZ3NfaW5kaXJlY3RfcmhzAMABHl9fd2JnX3NldF9kaXZhcmdzX2luZGlyZWN0X3JocwBpG19fd2JnX3BhbmljaW5zdHJ1Y3Rpb25fZnJlZQAcIXBhbmljaW5zdHJ1Y3Rpb25fZXJyb3JfdHlwZXNjcmlwdABCF3BhbmljaW5zdHJ1Y3Rpb25fcmVhc29uAGAccGFuaWNpbnN0cnVjdGlvbl9pbnN0cnVjdGlvbgBhDGdtX2Zyb21fYXJncwDbAQ1ndGZfZnJvbV9hcmdzANQBB2dtX2FyZ3MAjwEIZ3RmX2FyZ3MAbg53ZGNtX2Zyb21fYXJncwBADndkb3BfZnJvbV9hcmdzAEAOd2RtbF9mcm9tX2FyZ3MAQQ53ZGR2X2Zyb21fYXJncwDPAQl3ZGNtX2FyZ3MAKAl3cWNtX2FyZ3MAKQl3ZG9wX2FyZ3MAKgl3cW9wX2FyZ3MAKwl3ZG1sX2FyZ3MALAl3cW1sX2FyZ3MALQl3ZGR2X2FyZ3MAagl3cWR2X2FyZ3MAaxBfX3diZ19pbW0wNl9mcmVlAC4QX193YmdfaW1tMTJfZnJlZQAvEF9fd2JnX2ltbTE4X2ZyZWUAMA5fX3diZ19hZGRfZnJlZQAdD19fd2JnX25vb3BfZnJlZQAJEmFkZF9uZXdfdHlwZXNjcmlwdABDBmFkZF9yYQA6BmFkZF9yYgAXBmFkZF9yYwAeA2FkZADMAQNhbmQAkQEDZGl2AJIBAmVxAJMBA2V4cACUAQJndACVAQJsdACWAQRtbG9nAJcBBG1yb28AmAEEbW9kXwCZAQVtb3ZlXwBFA211bACaAQNub3QARgJvcgCbAQNzbGwAnAEDc3JsAJ0BA3N1YgCeAQN4b3IAnwEEbWxkdgBvA3JldADBAQRyZXRkAEcTYWxvY19uZXdfdHlwZXNjcmlwdABdB2Fsb2NfcmEAJQRhbG9jAMIBA21jbABIA21jcACgAQNtZXEAcBNiaHNoX25ld190eXBlc2NyaXB0ABoEYmhzaAAxBGJoZWkAwwEEYnVybgBJBGNhbGwAcQNjY3AAcgRjcm9vAEoEY3NpegBLAmNiAMQBA2xkYwBzA2xvZwB0BGxvZ2QAdQRtaW50AEwEcnZydADFAQRzY3dxAKEBA3NydwCiAQRzcndxAHYDc3d3AKMBBHN3d3EAdwJ0cgCkAQN0cm8AeARlY2sxAKUBBGVjcjEApgEEZWQxOQB5BGsyNTYApwEEczI1NgCoAQR0aW1lAE0Tbm9vcF9uZXdfdHlwZXNjcmlwdABtBG5vb3AA5wEEZmxhZwDGAQNiYWwAqQEDam1wAMcBA2puZQCqAQNzbW8AehNhZGRpX25ld190eXBlc2NyaXB0AEQKYWRkaV9pbW0xMgAKBGFkZGkAqwEEYW5kaQCsAQRkaXZpAK0BBGV4cGkArgEEbW9kaQCvAQRtdWxpALABA29yaQCxAQRzbGxpALIBBHNybGkAswEEc3ViaQC0AQR4b3JpALUBBGpuZWkAtgECbGIAtwECbHcAuAECc2IAuQECc3cAugEEbWNwaQC7ARJndGZfbmV3X3R5cGVzY3JpcHQA1gEDZ3RmALwBBG1jbGkAMhFnbV9uZXdfdHlwZXNjcmlwdABOCGdtX2ltbTE4AA8CZ20AMwRtb3ZpADQEam56aQA1BGptcGYANhNqbXBiX25ld190eXBlc2NyaXB0ABAEam1wYgA3BGpuemYAvQEEam56YgC+AQRqbmVmAHsKam5lYl9pbW0wNgA7BGpuZWIAfAJqaQBVE2NmZWlfbmV3X3R5cGVzY3JpcHQAJgpjZmVpX2ltbTI0AAwEY2ZlaQBWBGNmc2kAVwNjZmUAyAEDY2ZzAMkBBHBzaGwAWARwc2hoAFkEcG9wbABaBHBvcGgAWxN3ZGNtX25ld190eXBlc2NyaXB0ANABBHdkY20AfQR3cWNtAH4Ed2RvcAB/BHdxb3AAgAEEd2RtbACBAQR3cW1sAIIBBHdkZHYAgwEEd3FkdgCEAQR3ZG1kAIUBBHdxbWQAhgEEd2RhbQCHAQR3cWFtAIgBBHdkbW0AiQEEd3FtbQCKAQRlY2FsAIsBBGJzaXoAOBNibGRkX25ld190eXBlc2NyaXB0ADkHYmxkZF9yZAA7BGJsZGQAjAEEZWNvcACNAQRlcGFyAI4BFl9fd2JnX2luc3RydWN0aW9uX2ZyZWUADhRpbnN0cnVjdGlvbl90b19ieXRlcwAIEGluc3RydWN0aW9uX3NpemUA+gERcmVnaWRfbmV3X2NoZWNrZWQAvwEJcmVnaWRfYmFsAOkBCnJlZ2lkX2NnYXMA6gEJcmVnaWRfZXJyAOsBCnJlZ2lkX2ZsYWcA7AEIcmVnaWRfZnAA7QEKcmVnaWRfZ2dhcwDuAQhyZWdpZF9ocADvAQhyZWdpZF9pcwDwAQhyZWdpZF9vZgDxAQlyZWdpZF9vbmUA8gEIcmVnaWRfcGMA8wEJcmVnaWRfcmV0APQBCnJlZ2lkX3JldGwA9QEIcmVnaWRfc3AA9gEJcmVnaWRfc3BwAPcBDnJlZ2lkX3dyaXRhYmxlAPgBCnJlZ2lkX3plcm8A+QEUcmVnaWRfbmV3X3R5cGVzY3JpcHQA4gELcmVnaWRfdG9fdTgA4wESYW5kX25ld190eXBlc2NyaXB0AEMSZGl2X25ld190eXBlc2NyaXB0AEMRZXFfbmV3X3R5cGVzY3JpcHQAQxJleHBfbmV3X3R5cGVzY3JpcHQAQxFndF9uZXdfdHlwZXNjcmlwdABDEWx0X25ld190eXBlc2NyaXB0AEMTbWxvZ19uZXdfdHlwZXNjcmlwdABDE21yb29fbmV3X3R5cGVzY3JpcHQAQxJtb2RfbmV3X3R5cGVzY3JpcHQAQxJtdWxfbmV3X3R5cGVzY3JpcHQAQxFvcl9uZXdfdHlwZXNjcmlwdABDEnNsbF9uZXdfdHlwZXNjcmlwdABDEnNybF9uZXdfdHlwZXNjcmlwdABDEnN1Yl9uZXdfdHlwZXNjcmlwdABDEnhvcl9uZXdfdHlwZXNjcmlwdABDEm1jcF9uZXdfdHlwZXNjcmlwdABDE3Njd3FfbmV3X3R5cGVzY3JpcHQAQxJzcndfbmV3X3R5cGVzY3JpcHQAQxJzd3dfbmV3X3R5cGVzY3JpcHQAQxF0cl9uZXdfdHlwZXNjcmlwdABDE2VjazFfbmV3X3R5cGVzY3JpcHQAQxNlY3IxX25ld190eXBlc2NyaXB0AEMTazI1Nl9uZXdfdHlwZXNjcmlwdABDE3MyNTZfbmV3X3R5cGVzY3JpcHQAQxJiYWxfbmV3X3R5cGVzY3JpcHQAQxJqbmVfbmV3X3R5cGVzY3JpcHQAQxNhbmRpX25ld190eXBlc2NyaXB0AEQTZGl2aV9uZXdfdHlwZXNjcmlwdABEE2V4cGlfbmV3X3R5cGVzY3JpcHQARBNtb2RpX25ld190eXBlc2NyaXB0AEQTbXVsaV9uZXdfdHlwZXNjcmlwdABEEm9yaV9uZXdfdHlwZXNjcmlwdABEE3NsbGlfbmV3X3R5cGVzY3JpcHQARBNzcmxpX25ld190eXBlc2NyaXB0AEQTc3ViaV9uZXdfdHlwZXNjcmlwdABEE3hvcmlfbmV3X3R5cGVzY3JpcHQARBNqbmVpX25ld190eXBlc2NyaXB0AEQRbGJfbmV3X3R5cGVzY3JpcHQARBFsd19uZXdfdHlwZXNjcmlwdABEEXNiX25ld190eXBlc2NyaXB0AEQRc3dfbmV3X3R5cGVzY3JpcHQARBNtY3BpX25ld190eXBlc2NyaXB0AEQTam56Zl9uZXdfdHlwZXNjcmlwdABEE2puemJfbmV3X3R5cGVzY3JpcHQARBFqaV9uZXdfdHlwZXNjcmlwdAAmE2Nmc2lfbmV3X3R5cGVzY3JpcHQAJhNwc2hsX25ld190eXBlc2NyaXB0ACYTcHNoaF9uZXdfdHlwZXNjcmlwdAAmE3BvcGxfbmV3X3R5cGVzY3JpcHQAJhNwb3BoX25ld190eXBlc2NyaXB0ACYSbm90X25ld190eXBlc2NyaXB0ABoTcmV0ZF9uZXdfdHlwZXNjcmlwdAAaE21vdmVfbmV3X3R5cGVzY3JpcHQAGhJtY2xfbmV3X3R5cGVzY3JpcHQAGhNidXJuX25ld190eXBlc2NyaXB0ABoTY3Jvb19uZXdfdHlwZXNjcmlwdAAaE2NzaXpfbmV3X3R5cGVzY3JpcHQAGhNtaW50X25ld190eXBlc2NyaXB0ABoTdGltZV9uZXdfdHlwZXNjcmlwdAAaE2JzaXpfbmV3X3R5cGVzY3JpcHQAGhJyZXRfbmV3X3R5cGVzY3JpcHQAXRNiaGVpX25ld190eXBlc2NyaXB0AF0RY2JfbmV3X3R5cGVzY3JpcHQAXRNydnJ0X25ld190eXBlc2NyaXB0AF0TZmxhZ19uZXdfdHlwZXNjcmlwdABdEmptcF9uZXdfdHlwZXNjcmlwdABdEmNmZV9uZXdfdHlwZXNjcmlwdABdEmNmc19uZXdfdHlwZXNjcmlwdABdE21sZHZfbmV3X3R5cGVzY3JpcHQAORJtZXFfbmV3X3R5cGVzY3JpcHQAORJjY3BfbmV3X3R5cGVzY3JpcHQAORJsb2dfbmV3X3R5cGVzY3JpcHQAORNsb2dkX25ld190eXBlc2NyaXB0ADkTc3J3cV9uZXdfdHlwZXNjcmlwdAA5E3N3d3FfbmV3X3R5cGVzY3JpcHQAORJ0cm9fbmV3X3R5cGVzY3JpcHQAORNlZDE5X25ld190eXBlc2NyaXB0ADkSc21vX25ld190eXBlc2NyaXB0ADkSbGRjX25ld190eXBlc2NyaXB0ADkTam5lZl9uZXdfdHlwZXNjcmlwdAA5E3dkbWRfbmV3X3R5cGVzY3JpcHQAORN3cW1kX25ld190eXBlc2NyaXB0ADkTd2RhbV9uZXdfdHlwZXNjcmlwdAA5E3dxYW1fbmV3X3R5cGVzY3JpcHQAORN3ZG1tX25ld190eXBlc2NyaXB0ADkTd3FtbV9uZXdfdHlwZXNjcmlwdAA5E2VjYWxfbmV3X3R5cGVzY3JpcHQAORNjYWxsX25ld190eXBlc2NyaXB0ADkTZWNvcF9uZXdfdHlwZXNjcmlwdAA5E2VwYXJfbmV3X3R5cGVzY3JpcHQAOQZyZXRfcmEAJQdiaGVpX3JhACUFY2JfcmEAJQdydnJ0X3JhACUHZmxhZ19yYQAlBmptcF9yYQAlCGppX2ltbTI0AAwKY2ZzaV9pbW0yNAAMBmNmZV9yYQAlBmNmc19yYQAlCnBzaGxfaW1tMjQADApwc2hoX2ltbTI0AAwKcG9wbF9pbW0yNAAMCnBvcGhfaW1tMjQADBNtb3ZpX25ld190eXBlc2NyaXB0ABATbWNsaV9uZXdfdHlwZXNjcmlwdAAQE2puemlfbmV3X3R5cGVzY3JpcHQAEBNqbXBmX25ld190eXBlc2NyaXB0ABATX193YmdfbWF0aGFyZ3NfZnJlZQAUH19fd2JnX3NldF9tYXRoYXJnc19pbmRpcmVjdF9yaHMAUx5fX3diZ19zZXRfbXVsYXJnc19pbmRpcmVjdF9saHMAUx9fX3diZ19nZXRfbWF0aGFyZ3NfaW5kaXJlY3RfcmhzAFEeX193YmdfZ2V0X211bGFyZ3NfaW5kaXJlY3RfbGhzAFEPX193YmdfZXhwaV9mcmVlAB0PX193YmdfYmhlaV9mcmVlAB0PX193Ymdfd2RtbF9mcmVlAB0PX193YmdfcHNobF9mcmVlAB0OX193YmdfbG9nX2ZyZWUAHQ5fX3diZ19jY3BfZnJlZQAdD19fd2JnX2VjazFfZnJlZQAdD19fd2JnX2VjcjFfZnJlZQAdDl9fd2JnX3Ntb19mcmVlAB0OX193Ymdfb3JpX2ZyZWUAHQ5fX3diZ190cm9fZnJlZQAdDl9fd2JnX21lcV9mcmVlAB0OX193YmdfY2ZzX2ZyZWUAHQ5fX3diZ19kaXZfZnJlZQAdDV9fd2JnX2x0X2ZyZWUAHQ9fX3diZ19iaHNoX2ZyZWUAHQ1fX3diZ19zYl9mcmVlAB0PX193Ymdfd2RtZF9mcmVlAB0NX193YmdfdHJfZnJlZQAdDl9fd2JnX3hvcl9mcmVlAB0PX193Ymdfam5lYl9mcmVlAB0PX193Ymdfam5lZl9mcmVlAB0PX193YmdfY3Npel9mcmVlAB0PX193YmdfY3Jvb19mcmVlAB0PX193YmdfZGl2aV9mcmVlAB0NX193YmdfZ21fZnJlZQAdD19fd2JnX21vZGlfZnJlZQAdD19fd2JnX3hvcmlfZnJlZQAdDV9fd2JnX2NiX2ZyZWUAHQ9fX3diZ193ZGNtX2ZyZWUAHQ5fX3diZ19qbXBfZnJlZQAdD19fd2JnX3dxYW1fZnJlZQAdDl9fd2JnX2xkY19mcmVlAB0PX193YmdfZWQxOV9mcmVlAB0NX193Ymdfc3dfZnJlZQAdD19fd2JnX3RpbWVfZnJlZQAdD19fd2JnX2Vjb3BfZnJlZQAdD19fd2JnX3Njd3FfZnJlZQAdD19fd2JnX3dxbW1fZnJlZQAdD19fd2JnX3dkYW1fZnJlZQAdDV9fd2JnX2xiX2ZyZWUAHQ1fX3diZ19qaV9mcmVlAB0PX193YmdfazI1Nl9mcmVlAB0PX193YmdfYW5kaV9mcmVlAB0PX193Ymdfam56aV9mcmVlAB0PX193Ymdfc3J3cV9mcmVlAB0OX193Ymdfbm90X2ZyZWUAHQ5fX3diZ19jZmVfZnJlZQAdD19fd2JnX2xvZ2RfZnJlZQAdDl9fd2JnX3Nyd19mcmVlAB0PX193YmdfcnZydF9mcmVlAB0PX193YmdfcHNoaF9mcmVlAB0OX193Ymdfc3JsX2ZyZWUAHQ5fX3diZ19tdWxfZnJlZQAdD19fd2JnX2ZsYWdfZnJlZQAdD19fd2JnX21jcGlfZnJlZQAdDl9fd2JnX21vZF9mcmVlAB0PX193YmdfbW92aV9mcmVlAB0OX193YmdfcmV0X2ZyZWUAHQ9fX3diZ19tcm9vX2ZyZWUAHQ9fX3diZ193cWR2X2ZyZWUAHQ1fX3diZ19sd19mcmVlAB0PX193Ymdfd3FtZF9mcmVlAB0OX193Ymdfc3d3X2ZyZWUAHQ5fX3diZ19ndGZfZnJlZQAdD19fd2JnX3BvcGhfZnJlZQAdDV9fd2JnX29yX2ZyZWUAHQ9fX3diZ19tb3ZlX2ZyZWUAHQ9fX3diZ193ZGR2X2ZyZWUAHQ9fX3diZ19yZXRkX2ZyZWUAHQ5fX3diZ19iYWxfZnJlZQAdD19fd2JnX2FkZGlfZnJlZQAdDl9fd2JnX2FuZF9mcmVlAB0PX193YmdfbWNsaV9mcmVlAB0PX193Ymdfd3FtbF9mcmVlAB0PX193Ymdfc2xsaV9mcmVlAB0PX193Ymdfd2RvcF9mcmVlAB0OX193Ymdfc2xsX2ZyZWUAHQ9fX3diZ19lY2FsX2ZyZWUAHQ9fX3diZ193cWNtX2ZyZWUAHQ9fX3diZ19zd3dxX2ZyZWUAHQ9fX3diZ19tbGR2X2ZyZWUAHQ1fX3diZ19ndF9mcmVlAB0NX193YmdfZXFfZnJlZQAdDl9fd2JnX2puZV9mcmVlAB0PX193Ymdfam5laV9mcmVlAB0PX193Ymdfam1wZl9mcmVlAB0OX193YmdfZXhwX2ZyZWUAHQ9fX3diZ19zMjU2X2ZyZWUAHQ5fX3diZ19zdWJfZnJlZQAdDl9fd2JnX21jcF9mcmVlAB0PX193YmdfZXBhcl9mcmVlAB0PX193YmdfY2ZlaV9mcmVlAB0PX193YmdfY2ZzaV9mcmVlAB0PX193Ymdfam56Zl9mcmVlAB0PX193YmdfbWludF9mcmVlAB0PX193YmdfYnNpel9mcmVlAB0PX193YmdfYnVybl9mcmVlAB0PX193Ymdfd2RtbV9mcmVlAB0PX193Ymdfam1wYl9mcmVlAB0PX193Ymdfc3JsaV9mcmVlAB0PX193Ymdfc3ViaV9mcmVlAB0PX193Ymdfam56Yl9mcmVlAB0PX193YmdfbXVsaV9mcmVlAB0PX193Ymdfd3FvcF9mcmVlAB0PX193YmdfcG9wbF9mcmVlAB0OX193YmdfbWNsX2ZyZWUAHQ9fX3diZ19jYWxsX2ZyZWUAHQ9fX3diZ19tbG9nX2ZyZWUAHQ9fX3diZ19ibGRkX2ZyZWUAHQ9fX3diZ19hbG9jX2ZyZWUAHRN3cWR2X25ld190eXBlc2NyaXB0ANABE3dxbWxfbmV3X3R5cGVzY3JpcHQA0AETd2RtbF9uZXdfdHlwZXNjcmlwdADQARN3cW9wX25ld190eXBlc2NyaXB0ANABE3dkb3BfbmV3X3R5cGVzY3JpcHQA0AETd3FjbV9uZXdfdHlwZXNjcmlwdADQARN3ZGR2X25ld190eXBlc2NyaXB0ANABDndxY21fZnJvbV9hcmdzAEAKd3Fkdl9pbW0wNgA7CndxbWxfaW1tMDYAOwp3ZG1sX2ltbTA2ADsKd3FvcF9pbW0wNgA7Cndkb3BfaW1tMDYAOwp3cWNtX2ltbTA2ADsKd2Rkdl9pbW0wNgA7CndkY21faW1tMDYAOwpqbmVmX2ltbTA2ADsJbGRjX2ltbTA2ADsOd3Fkdl9mcm9tX2FyZ3MAzwEOd3FtbF9mcm9tX2FyZ3MAQQ53cW9wX2Zyb21fYXJncwBABWdtX3JhADoFZ3RfcmMAHgVndF9yYgAXBWd0X3JhADoFbGJfcmIAFwVsYl9yYQA6BWx0X3JjAB4FbHRfcmIAFwVsdF9yYQA6CGx3X2ltbTEyAAoFbHdfcmIAFwVsd19yYQA6BW9yX3JjAB4Fb3JfcmIAFwVvcl9yYQA6CHNiX2ltbTEyAAoFc2JfcmIAFwVzYl9yYQA6CHN3X2ltbTEyAAoFc3dfcmIAFwVzd19yYQA6BXRyX3JjAB4FdHJfcmIAFwV0cl9yYQA6BWVxX3JjAB4FZXFfcmIAFwVlcV9yYQA6BmFuZF9yYwAeBmFuZF9yYgAXBmFuZF9yYQA6BmJhbF9yYwAeBmJhbF9yYgAXBmJhbF9yYQA6BmNjcF9yYwAeBmNjcF9yYgAXBmNjcF9yYQA6BmRpdl9yYwAeBmRpdl9yYgAXBmRpdl9yYQA6BmV4cF9yYwAeBmV4cF9yYgAXBmV4cF9yYQA6CGxiX2ltbTEyAAoGZ3RmX3JiABcGZ3RmX3JhADoGam5lX3JjAB4Gam5lX3JiABcGam5lX3JhADoGbGRjX3JjAB4GbGRjX3JiABcGbGRjX3JhADoGbG9nX3JkADsGbG9nX3JjAB4GbG9nX3JiABcGbG9nX3JhADoGbWNsX3JiABcGbWNsX3JhADoGbWNwX3JjAB4GbWNwX3JiABcGbWNwX3JhADoGbWVxX3JkADsGbWVxX3JjAB4GbWVxX3JiABcGbWVxX3JhADoGbW9kX3JjAB4GbW9kX3JiABcGbW9kX3JhADoGbXVsX3JjAB4GbXVsX3JiABcGbXVsX3JhADoGbm90X3JiABcGbm90X3JhADoJb3JpX2ltbTEyAAoGb3JpX3JiABcGb3JpX3JhADoGc2xsX3JjAB4Gc2xsX3JiABcGc2xsX3JhADoGc21vX3JkADsGc21vX3JjAB4Gc21vX3JiABcGc21vX3JhADoGc3JsX3JjAB4Gc3JsX3JiABcGc3JsX3JhADoGc3J3X3JjAB4Gc3J3X3JiABcGc3J3X3JhADoGc3ViX3JjAB4Gc3ViX3JiABcGc3ViX3JhADoGc3d3X3JjAB4Gc3d3X3JiABcGc3d3X3JhADoGdHJvX3JkADsGdHJvX3JjAB4GdHJvX3JiABcGdHJvX3JhADoGeG9yX3JjAB4GeG9yX3JiABcGeG9yX3JhADoJZ3RmX2ltbTEyAAoHYWRkaV9yYgAXB2FkZGlfcmEAOgphbmRpX2ltbTEyAAoHYW5kaV9yYgAXB2FuZGlfcmEAOgdiaHNoX3JiABcHYmhzaF9yYQA6BmNjcF9yZAA7B2JsZGRfcmMAHgdibGRkX3JiABcHYmxkZF9yYQA6B2JzaXpfcmIAFwdic2l6X3JhADoHYnVybl9yYgAXB2J1cm5fcmEAOgdjYWxsX3JkADsHY2FsbF9yYwAeB2NhbGxfcmIAFwdjYWxsX3JhADoHY3Jvb19yYgAXB2Nyb29fcmEAOgdjc2l6X3JiABcHY3Npel9yYQA6CmRpdmlfaW1tMTIACgdkaXZpX3JiABcHZGl2aV9yYQA6B2VjYWxfcmQAOwdlY2FsX3JjAB4HZWNhbF9yYgAXB2VjYWxfcmEAOgdlY2sxX3JjAB4HZWNrMV9yYgAXB2VjazFfcmEAOgdlY29wX3JkADsHZWNvcF9yYwAeB2Vjb3BfcmIAFwdlY29wX3JhADoHZWNyMV9yYwAeB2VjcjFfcmIAFwdlY3IxX3JhADoHZWQxOV9yZAA7B2VkMTlfcmMAHgdlZDE5X3JiABcHZWQxOV9yYQA6B2VwYXJfcmQAOwdlcGFyX3JjAB4HZXBhcl9yYgAXB2VwYXJfcmEAOgpleHBpX2ltbTEyAAoHZXhwaV9yYgAXB2V4cGlfcmEAOgpqbXBiX2ltbTE4AA8Ham1wYl9yYQA6CmptcGZfaW1tMTgADwdqbXBmX3JhADoHam5lYl9yYwAeB2puZWJfcmIAFwdqbmViX3JhADoHam5lZl9yYwAeB2puZWZfcmIAFwdqbmVmX3JhADoKam5laV9pbW0xMgAKB2puZWlfcmIAFwdqbmVpX3JhADoKam56Yl9pbW0xMgAKB2puemJfcmIAFwdqbnpiX3JhADoKam56Zl9pbW0xMgAKB2puemZfcmIAFwdqbnpmX3JhADoKam56aV9pbW0xOAAPB2puemlfcmEAOgdrMjU2X3JjAB4HazI1Nl9yYgAXB2syNTZfcmEAOgdsb2dkX3JkADsHbG9nZF9yYwAeB2xvZ2RfcmIAFwdsb2dkX3JhADoKbWNsaV9pbW0xOAAPB21jbGlfcmEAOgptY3BpX2ltbTEyAAoHbWNwaV9yYgAXB21jcGlfcmEAOgdtaW50X3JiABcHbWludF9yYQA6B21sZHZfcmQAOwdtbGR2X3JjAB4HbWxkdl9yYgAXB21sZHZfcmEAOgdtbG9nX3JjAB4HbWxvZ19yYgAXB21sb2dfcmEAOgptb2RpX2ltbTEyAAoHbW9kaV9yYgAXB21vZGlfcmEAOgdtb3ZlX3JiABcHbW92ZV9yYQA6Cm1vdmlfaW1tMTgADwdtb3ZpX3JhADoHbXJvb19yYwAeB21yb29fcmIAFwdtcm9vX3JhADoKbXVsaV9pbW0xMgAKB211bGlfcmIAFwdtdWxpX3JhADoHcmV0ZF9yYgAXB3JldGRfcmEAOgdzMjU2X3JjAB4HczI1Nl9yYgAXB3MyNTZfcmEAOgdzY3dxX3JjAB4Hc2N3cV9yYgAXB3Njd3FfcmEAOgpzbGxpX2ltbTEyAAoHc2xsaV9yYgAXB3NsbGlfcmEAOgpzcmxpX2ltbTEyAAoHc3JsaV9yYgAXB3NybGlfcmEAOgdzcndxX3JkADsHc3J3cV9yYwAeB3Nyd3FfcmIAFwdzcndxX3JhADoKc3ViaV9pbW0xMgAKB3N1YmlfcmIAFwdzdWJpX3JhADoHc3d3cV9yZAA7B3N3d3FfcmMAHgdzd3dxX3JiABcHc3d3cV9yYQA6B3RpbWVfcmIAFwd0aW1lX3JhADoHd2RhbV9yZAA7B3dkYW1fcmMAHgd3ZGFtX3JiABcHd2RhbV9yYQA6B3dkY21fcmMAHgd3ZGNtX3JiABcHd2RjbV9yYQA6B3dkZHZfcmMAHgd3ZGR2X3JiABcHd2Rkdl9yYQA6B3dkbWRfcmQAOwd3ZG1kX3JjAB4Hd2RtZF9yYgAXB3dkbWRfcmEAOgd3ZG1sX3JjAB4Hd2RtbF9yYgAXB3dkbWxfcmEAOgd3ZG1tX3JkADsHd2RtbV9yYwAeB3dkbW1fcmIAFwd3ZG1tX3Jh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QQh2QYD+A3EgAUGA/gNxQQh0ckEIdnILTwECfyAAENcBIABBCGsiASABKAIAQQFqIgI2AgACQCACBEAgACgCAEF/Rg0BIAAvAAQgAEEGai0AAEEQdHIQ2gEgARBjEGcPCwALEN0BAAtVAQF/IAAQIiEAQQRBEBDZASIBRQRAAAsgAUKBgICAEDcCACABIABBEHRBgID8B3EgAEEIdkGA/gNxIABBgP4DcUEIdHJBCHZyrUIghjcCCCABQQhqC04BAX8gAUUEQCAAEBsaDwsgABDXASAAQQhrIgEgASgCAEEBayICNgIAAkAgAg0AIABBBGsiACAAKAIAQQFrIgA2AgAgAA0AIAFBEBAjCwsQACAAIAEgAiADQd4AEIICCxAAIAAgASACIANB3wAQggILEAAgACABIAIgA0HgABCCAgsQACAAIAEgAiADQeEAEIICCxAAIAAgASACIANB4gAQgwILEAAgACABIAIgA0HjABCDAgtOAQF/IAFFBEAgABAfGg8LIAAQ1wEgAEEIayIBIAEoAgBBAWsiAjYCAAJAIAINACAAQQRrIgAgACgCAEEBayIANgIAIAANACABQRAQIwsLTgEBfyABRQRAIAAQIRoPCyAAENcBIABBCGsiASABKAIAQQFrIgI2AgACQCACDQAgAEEEayIAIAAoAgBBAWsiADYCACAADQAgAUEQECMLC04BAX8gAUUEQCAAECIaDwsgABDXASAAQQhrIgEgASgCAEEBayICNgIAAkAgAg0AIABBBGsiACAAKAIAQQFrIgA2AgAgAA0AIAFBEBAjCwsPACAAIAFBgICAyAEQhAILDAAgACABQcsAEIUCCwwAIAAgAUHMABCFAgsMACAAIAFBzQAQhQILDAAgACABQc4AEIUCCwwAIAAgAUHPABCFAgsMACAAIAFB0AAQhQILDwAgACABQYCAgOgGEIQCC1MBAX8gABAfIQQgARAfIQEgAhAfIQIgAxAfIQNBBEEQENkBIgBFBEAACyAAQoGAgIAQNwIAIAAgBCABIAIgAxAkrUL///8Hg0IghjcCCCAAQQhqC0UBAX8jAEEQayIBJAAgAUEEaiAAECAgASgCBCIALwAAIABBAmotAABBEHRyENoBIAEoAgggASgCDBDSARBnIAFBEGokAAtLAQF/IwBBEGsiASQAIAFBBGogABAgIAEoAgQi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AUKBgICAEDcCACABIACtQv///weDQiCGNwIIIAFBCGoLMAEBf0EEQRAQ2QEiAUUEQAALIAEgADYCDCABQQA2AgggAUKBgICAEDcCACABQQhqCzABAX9BBEEQENkBIgFFBEAACyABIAA6AAwgAUEANgIIIAFCgYCAgBA3AgAgAUEIagsoACABKAIARQRAIAFBfzYCACAAIAE2AgQgACABQQRqNgIADwsQ3QEACyQAIAAQ1wEgACgCAARAEN0BAAsgAEEANgIAIAAgAUEARzoABAsoACADEBshAyAAEM0BIAEQzQEgAhDNASADENUBQQh0QeQAchDKARBmCygAIAMQGyEDIAAQzQEgARDNASACEM0BIAMQ1QFBCHRB5QByEMoBEGYLIAAgAEEBayIAQQZNBEAgAEEBag8LQeCCwABBGRDhAQALKQEBf0EEQRAQ2QEiAEUEQAALIABCADcCCCAAQoGAgIAQNwIAIABBCGoLIgAgAhAEIQIgABDNASABEM0BIAIQT0EIdEHKAHIQygEQZgsPACAAIAEgAiADQRIQ/AELDwAgACABIAIgA0EYEPwBCw8AIAAgASACIANBHBD8AQsPACAAIAEgAiADQR0Q/AELDwAgACABIAIgA0EhEP0BCw8AIAAgASACIANBIhD8AQsPACAAIAEgAiADQSMQ/AELDwAgACABIAIgA0EoEPwBCw8AIAAgASACIANBKhD8AQsPACAAIAEgAiADQSwQ/AELDwAgACABIAIgA0EvEPwBCw8AIAAgASACIANBOBD8AQsQACAAIAEgAiADQdMAEP0BCxAAIAAgASACIANB1AAQ/QELEAAgACABIAIgA0HeABD9AQsQACAAIAEgAiADQd8AEP0BCxAAIAAgASACIANB4AAQ/QELEAAgACABIAIgA0HhABD9AQsQACAAIAEgAiADQeIAEP0BCxAAIAAgASACIANB4wAQ/QELEAAgACABIAIgA0HkABD9AQsQACAAIAEgAiADQeUAEP0BCxAAIAAgASACIANB5gAQ/AELEAAgACABIAIgA0HnABD8AQsQACAAIAEgAiADQegAEPwBCxAAIAAgASACIANB6QAQ/AELEAAgACABIAIgA0HqABD8AQsQACAAIAEgAiADQesAEPwBCxAAIAAgASACIANB7AAQ/AELEAAgACABIAIgA0HuABD8AQsQACAAIAEgAiADQe8AEPwBCxAAIAAgASACIANB8AAQ/AELHgAgARBsIQEgABDNASABEMsBQQh0QcwAchDKARBmCxkAIAAgASACQSBBACAEG0EQQQAgAxtyECQLDQAgACABIAJBARD+AQsNACAAIAEgAkECEP4BCw0AIAAgASACQQMQ/gELDQAgACABIAJBBBD+AQsNACAAIAEgAkEFEP4BCw0AIAAgASACQQYQ/gELDQAgACABIAJBBxD+AQsNACAAIAEgAkEIEP4BCw0AIAAgASACQQkQ/gELDQAgACABIAJBCxD+AQsNACAAIAEgAkENEP4BCw0AIAAgASACQQ4Q/gELDQAgACABIAJBDxD+AQsNACAAIAEgAkEQEP4BCw0AIAAgASACQREQ/gELDQAgACABIAJBFxD+AQsNACAAIAEgAkEmEP4BCw0AIAAgASACQScQ/gELDQAgACABIAJBKRD+AQsNACAAIAEgAkErEP4BCw0AIAAgASACQS0Q/gELDQAgACABIAJBLhD+AQsNACAAIAEgAkEwEP4BCw0AIAAgASACQTEQ/gELDQAgACABIAJBNRD+AQsNACAAIAEgAkE3EP4BCw0AIAAgASACQTkQ/wELDQAgACABIAJBOhD/AQsNACAAIAEgAkE7EP8BCw0AIAAgASACQTwQ/wELDQAgACABIAJBPRD/AQsNACAAIAEgAkE+EP8BCw0AIAAgASACQT8Q/wELDgAgACABIAJBwAAQ/wELDgAgACABIAJBwQAQ/wELDgAgACABIAJBwgAQ/wELDgAgACABIAJBwwAQ/wELDgAgACABIAJBxAAQ/wELDgAgACABIAJBxQAQ/wELDgAgACABIAJBxgAQ/wELDgAgACABIAJBxwAQ/wELDgAgACABIAJByAAQ/wELDgAgACABIAJByQAQ/wELDgAgACABIAJBygAQ/wELDgAgACABIAJB0QAQ/wELDgAgACABIAJB0gAQ/wELFwEBfyAAQf8BcUE/TQR/IAAQZwVBAAsLGwAgABDXASAAKAIAQX9GBEAQ3QEACyAALQAECwkAIABBExCAAgsJACAAQRUQgAILCQAgAEEaEIACCwkAIABBIBCAAgsJACAAQSUQgAILCQAgAEE0EIACCwkAIABBNhCAAgsKACAAQdgAEIACCwoAIABB2QAQgAILGwEBf0EBQQQQ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", imports);
16921
17021
  }
16922
17022
  __name(wasm, "wasm");
16923
17023
  async function initWasm2() {
16924
- return await __wbg_init(wasm());
17024
+ return await __wbg_init({ module_or_path: wasm() });
16925
17025
  }
16926
17026
  __name(initWasm2, "initWasm");
16927
17027
  initWasm2();
@@ -17889,9 +17989,9 @@
17889
17989
  var __name2 = /* @__PURE__ */ __name((target, value) => __defProp2(target, "name", { value, configurable: true }), "__name");
17890
17990
  function getBuiltinVersions() {
17891
17991
  return {
17892
- FUEL_CORE: "0.41.9",
17893
- FORC: "0.67.0",
17894
- FUELS: "0.100.3"
17992
+ FUEL_CORE: "0.43.1",
17993
+ FORC: "0.68.1",
17994
+ FUELS: "0.100.5"
17895
17995
  };
17896
17996
  }
17897
17997
  __name(getBuiltinVersions, "getBuiltinVersions");
@@ -18044,6 +18144,8 @@ This unreleased fuel-core build may include features and updates not yet support
18044
18144
  ErrorCode2["FUNDS_TOO_LOW"] = "funds-too-low";
18045
18145
  ErrorCode2["MAX_OUTPUTS_EXCEEDED"] = "max-outputs-exceeded";
18046
18146
  ErrorCode2["ASSET_BURN_DETECTED"] = "asset-burn-detected";
18147
+ ErrorCode2["CHANGE_OUTPUT_COLLISION"] = "change-output-collision";
18148
+ ErrorCode2["DUPLICATE_CHANGE_OUTPUT_ACCOUNT"] = "duplicate-change-output-account";
18047
18149
  ErrorCode2["INVALID_RECEIPT_TYPE"] = "invalid-receipt-type";
18048
18150
  ErrorCode2["INVALID_WORD_LIST"] = "invalid-word-list";
18049
18151
  ErrorCode2["INVALID_MNEMONIC"] = "invalid-mnemonic";
@@ -18053,9 +18155,12 @@ This unreleased fuel-core build may include features and updates not yet support
18053
18155
  ErrorCode2["INVALID_PASSWORD"] = "invalid-password";
18054
18156
  ErrorCode2["ACCOUNT_REQUIRED"] = "account-required";
18055
18157
  ErrorCode2["UNLOCKED_WALLET_REQUIRED"] = "unlocked-wallet-required";
18158
+ ErrorCode2["NO_COINS_TO_CONSOLIDATE"] = "no-coins-to-consolidate";
18159
+ ErrorCode2["COINS_ASSET_ID_MISMATCH"] = "coins-asset-id-mismatch";
18056
18160
  ErrorCode2["ASSET_NOT_FOUND"] = "asset-not-found";
18057
18161
  ErrorCode2["NUMBER_TOO_BIG"] = "number-too-big";
18058
18162
  ErrorCode2["ERROR_BUILDING_BLOCK_EXPLORER_URL"] = "error-building-block-explorer-url";
18163
+ ErrorCode2["RPC_CONSISTENCY"] = "rpc-consistency";
18059
18164
  ErrorCode2["VITEPRESS_PLUGIN_ERROR"] = "vitepress-plugin-error";
18060
18165
  ErrorCode2["SCRIPT_REVERTED"] = "script-reverted";
18061
18166
  ErrorCode2["SCRIPT_RETURN_INVALID_TYPE"] = "script-return-invalid-type";
@@ -27014,6 +27119,83 @@ spurious results.`);
27014
27119
  var lib_default2 = gql;
27015
27120
 
27016
27121
  // src/providers/__generated__/operations.ts
27122
+ var InputCoinFragmentDoc = lib_default2`
27123
+ fragment InputCoinFragment on InputCoin {
27124
+ type: __typename
27125
+ utxoId
27126
+ owner
27127
+ amount
27128
+ assetId
27129
+ txPointer
27130
+ coinWitnessIndex: witnessIndex
27131
+ predicateGasUsed
27132
+ predicate
27133
+ predicateData
27134
+ }
27135
+ `;
27136
+ var InputMessageFragmentDoc = lib_default2`
27137
+ fragment InputMessageFragment on InputMessage {
27138
+ type: __typename
27139
+ sender
27140
+ recipient
27141
+ amount
27142
+ nonce
27143
+ messageWitnessIndex: witnessIndex
27144
+ predicateGasUsed
27145
+ data
27146
+ predicate
27147
+ predicateData
27148
+ }
27149
+ `;
27150
+ var InputContractFragmentDoc = lib_default2`
27151
+ fragment InputContractFragment on InputContract {
27152
+ type: __typename
27153
+ utxoId
27154
+ balanceRoot
27155
+ stateRoot
27156
+ txPointer
27157
+ contractId
27158
+ }
27159
+ `;
27160
+ var OutputCoinFragmentDoc = lib_default2`
27161
+ fragment OutputCoinFragment on CoinOutput {
27162
+ type: __typename
27163
+ to
27164
+ amount
27165
+ assetId
27166
+ }
27167
+ `;
27168
+ var OutputContractFragmentDoc = lib_default2`
27169
+ fragment OutputContractFragment on ContractOutput {
27170
+ type: __typename
27171
+ inputIndex
27172
+ balanceRoot
27173
+ stateRoot
27174
+ }
27175
+ `;
27176
+ var OutputChangeFragmentDoc = lib_default2`
27177
+ fragment OutputChangeFragment on ChangeOutput {
27178
+ type: __typename
27179
+ to
27180
+ amount
27181
+ assetId
27182
+ }
27183
+ `;
27184
+ var OutputVariableFragmentDoc = lib_default2`
27185
+ fragment OutputVariableFragment on VariableOutput {
27186
+ type: __typename
27187
+ to
27188
+ amount
27189
+ assetId
27190
+ }
27191
+ `;
27192
+ var OutputContractCreatedFragmentDoc = lib_default2`
27193
+ fragment OutputContractCreatedFragment on ContractCreated {
27194
+ type: __typename
27195
+ contract
27196
+ stateRoot
27197
+ }
27198
+ `;
27017
27199
  var SubmittedStatusFragmentDoc = lib_default2`
27018
27200
  fragment SubmittedStatusFragment on SubmittedStatus {
27019
27201
  type: __typename
@@ -27142,6 +27324,87 @@ spurious results.`);
27142
27324
  reason
27143
27325
  }
27144
27326
  `;
27327
+ var PreconfirmationSuccessStatusFragmentDoc = lib_default2`
27328
+ fragment PreconfirmationSuccessStatusFragment on PreconfirmationSuccessStatus {
27329
+ type: __typename
27330
+ totalGas
27331
+ totalFee
27332
+ resolvedOutputs {
27333
+ utxoId
27334
+ output {
27335
+ type: __typename
27336
+ ... on CoinOutput {
27337
+ to
27338
+ amount
27339
+ assetId
27340
+ }
27341
+ ... on ContractOutput {
27342
+ inputIndex
27343
+ balanceRoot
27344
+ stateRoot
27345
+ }
27346
+ ... on ChangeOutput {
27347
+ to
27348
+ amount
27349
+ assetId
27350
+ }
27351
+ ... on VariableOutput {
27352
+ to
27353
+ amount
27354
+ assetId
27355
+ }
27356
+ ... on ContractCreated {
27357
+ contract
27358
+ stateRoot
27359
+ }
27360
+ }
27361
+ }
27362
+ preconfirmationReceipts: receipts {
27363
+ ...receiptFragment
27364
+ }
27365
+ }
27366
+ ${ReceiptFragmentDoc}`;
27367
+ var PreconfirmationFailureStatusFragmentDoc = lib_default2`
27368
+ fragment PreconfirmationFailureStatusFragment on PreconfirmationFailureStatus {
27369
+ type: __typename
27370
+ reason
27371
+ totalGas
27372
+ totalFee
27373
+ resolvedOutputs {
27374
+ utxoId
27375
+ output {
27376
+ type: __typename
27377
+ ... on CoinOutput {
27378
+ to
27379
+ amount
27380
+ assetId
27381
+ }
27382
+ ... on ContractOutput {
27383
+ inputIndex
27384
+ balanceRoot
27385
+ stateRoot
27386
+ }
27387
+ ... on ChangeOutput {
27388
+ to
27389
+ amount
27390
+ assetId
27391
+ }
27392
+ ... on VariableOutput {
27393
+ to
27394
+ amount
27395
+ assetId
27396
+ }
27397
+ ... on ContractCreated {
27398
+ contract
27399
+ stateRoot
27400
+ }
27401
+ }
27402
+ }
27403
+ preconfirmationReceipts: receipts {
27404
+ ...receiptFragment
27405
+ }
27406
+ }
27407
+ ${ReceiptFragmentDoc}`;
27145
27408
  var TransactionStatusSubscriptionFragmentDoc = lib_default2`
27146
27409
  fragment transactionStatusSubscriptionFragment on TransactionStatus {
27147
27410
  ... on SubmittedStatus {
@@ -27162,12 +27425,20 @@ spurious results.`);
27162
27425
  ... on SqueezedOutStatus {
27163
27426
  ...SqueezedOutStatusFragment
27164
27427
  }
27428
+ ... on PreconfirmationSuccessStatus {
27429
+ ...PreconfirmationSuccessStatusFragment
27430
+ }
27431
+ ... on PreconfirmationFailureStatus {
27432
+ ...PreconfirmationFailureStatusFragment
27433
+ }
27165
27434
  }
27166
27435
  ${SubmittedStatusFragmentDoc}
27167
27436
  ${SuccessStatusWithBlockIdFragmentDoc}
27168
27437
  ${MalleableTransactionFieldsFragmentDoc}
27169
27438
  ${FailureStatusWithBlockIdFragmentDoc}
27170
- ${SqueezedOutStatusFragmentDoc}`;
27439
+ ${SqueezedOutStatusFragmentDoc}
27440
+ ${PreconfirmationSuccessStatusFragmentDoc}
27441
+ ${PreconfirmationFailureStatusFragmentDoc}`;
27171
27442
  var TransactionStatusFragmentDoc = lib_default2`
27172
27443
  fragment transactionStatusFragment on TransactionStatus {
27173
27444
  ... on SubmittedStatus {
@@ -27219,6 +27490,23 @@ ${SqueezedOutStatusFragmentDoc}`;
27219
27490
  }
27220
27491
  }
27221
27492
  ${InputEstimatePredicatesFragmentDoc}`;
27493
+ var DryRunFailureAssembleTxFragmentDoc = lib_default2`
27494
+ fragment dryRunFailureAssembleTxFragment on DryRunFailureStatus {
27495
+ type: __typename
27496
+ reason
27497
+ receipts {
27498
+ ...receiptFragment
27499
+ }
27500
+ }
27501
+ ${ReceiptFragmentDoc}`;
27502
+ var DryRunSuccessAssembleTxFragmentDoc = lib_default2`
27503
+ fragment dryRunSuccessAssembleTxFragment on DryRunSuccessStatus {
27504
+ type: __typename
27505
+ receipts {
27506
+ ...receiptFragment
27507
+ }
27508
+ }
27509
+ ${ReceiptFragmentDoc}`;
27222
27510
  var DryRunFailureStatusFragmentDoc = lib_default2`
27223
27511
  fragment dryRunFailureStatusFragment on DryRunFailureStatus {
27224
27512
  type: __typename
@@ -27479,6 +27767,11 @@ ${GasCostsFragmentDoc}`;
27479
27767
  consensusParameters {
27480
27768
  ...consensusParametersFragment
27481
27769
  }
27770
+ latestBlock {
27771
+ header {
27772
+ consensusParametersVersion
27773
+ }
27774
+ }
27482
27775
  }
27483
27776
  ${ConsensusParametersFragmentDoc}`;
27484
27777
  var ContractBalanceFragmentDoc = lib_default2`
@@ -27575,13 +27868,21 @@ ${NodeInfoFragmentDoc}`;
27575
27868
  ... on SqueezedOutStatus {
27576
27869
  ...SqueezedOutStatusFragment
27577
27870
  }
27871
+ ... on PreconfirmationSuccessStatus {
27872
+ ...PreconfirmationSuccessStatusFragment
27873
+ }
27874
+ ... on PreconfirmationFailureStatus {
27875
+ ...PreconfirmationFailureStatusFragment
27876
+ }
27578
27877
  }
27579
27878
  }
27580
27879
  }
27581
27880
  ${SubmittedStatusFragmentDoc}
27582
27881
  ${SuccessStatusWithBlockIdFragmentDoc}
27583
27882
  ${FailureStatusWithBlockIdFragmentDoc}
27584
- ${SqueezedOutStatusFragmentDoc}`;
27883
+ ${SqueezedOutStatusFragmentDoc}
27884
+ ${PreconfirmationSuccessStatusFragmentDoc}
27885
+ ${PreconfirmationFailureStatusFragmentDoc}`;
27585
27886
  var GetTransactionsDocument = lib_default2`
27586
27887
  query getTransactions($after: String, $before: String, $first: Int, $last: Int) {
27587
27888
  transactions(after: $after, before: $before, first: $first, last: $last) {
@@ -27872,8 +28173,79 @@ ${GetMessageFragmentDoc}`;
27872
28173
  }
27873
28174
  }
27874
28175
  `;
28176
+ var AssembleTxDocument = lib_default2`
28177
+ query assembleTx($tx: HexString!, $blockHorizon: U32!, $requiredBalances: [RequiredBalance!]!, $feeAddressIndex: U16!, $excludeInput: ExcludeInput, $estimatePredicates: Boolean, $reserveGas: U64) {
28178
+ assembleTx(
28179
+ tx: $tx
28180
+ blockHorizon: $blockHorizon
28181
+ requiredBalances: $requiredBalances
28182
+ feeAddressIndex: $feeAddressIndex
28183
+ excludeInput: $excludeInput
28184
+ estimatePredicates: $estimatePredicates
28185
+ reserveGas: $reserveGas
28186
+ ) {
28187
+ transaction {
28188
+ id
28189
+ inputs {
28190
+ ... on InputCoin {
28191
+ ...InputCoinFragment
28192
+ }
28193
+ ... on InputContract {
28194
+ ...InputContractFragment
28195
+ }
28196
+ ... on InputMessage {
28197
+ ...InputMessageFragment
28198
+ }
28199
+ }
28200
+ outputs {
28201
+ ... on CoinOutput {
28202
+ ...OutputCoinFragment
28203
+ }
28204
+ ... on ContractOutput {
28205
+ ...OutputContractFragment
28206
+ }
28207
+ ... on ChangeOutput {
28208
+ ...OutputChangeFragment
28209
+ }
28210
+ ... on VariableOutput {
28211
+ ...OutputVariableFragment
28212
+ }
28213
+ ... on ContractCreated {
28214
+ ...OutputContractCreatedFragment
28215
+ }
28216
+ }
28217
+ policies {
28218
+ tip
28219
+ witnessLimit
28220
+ maturity
28221
+ maxFee
28222
+ }
28223
+ witnesses
28224
+ scriptGasLimit
28225
+ }
28226
+ status {
28227
+ ... on DryRunFailureStatus {
28228
+ ...dryRunFailureAssembleTxFragment
28229
+ }
28230
+ ... on DryRunSuccessStatus {
28231
+ ...dryRunSuccessAssembleTxFragment
28232
+ }
28233
+ }
28234
+ gasPrice
28235
+ }
28236
+ }
28237
+ ${InputCoinFragmentDoc}
28238
+ ${InputContractFragmentDoc}
28239
+ ${InputMessageFragmentDoc}
28240
+ ${OutputCoinFragmentDoc}
28241
+ ${OutputContractFragmentDoc}
28242
+ ${OutputChangeFragmentDoc}
28243
+ ${OutputVariableFragmentDoc}
28244
+ ${OutputContractCreatedFragmentDoc}
28245
+ ${DryRunFailureAssembleTxFragmentDoc}
28246
+ ${DryRunSuccessAssembleTxFragmentDoc}`;
27875
28247
  var DryRunDocument = lib_default2`
27876
- mutation dryRun($encodedTransactions: [HexString!]!, $utxoValidation: Boolean, $gasPrice: U64) {
28248
+ query dryRun($encodedTransactions: [HexString!]!, $utxoValidation: Boolean, $gasPrice: U64) {
27877
28249
  dryRun(
27878
28250
  txs: $encodedTransactions
27879
28251
  utxoValidation: $utxoValidation
@@ -27930,15 +28302,22 @@ ${GetMessageFragmentDoc}`;
27930
28302
  }
27931
28303
  `;
27932
28304
  var SubmitAndAwaitStatusDocument = lib_default2`
27933
- subscription submitAndAwaitStatus($encodedTransaction: HexString!) {
27934
- submitAndAwaitStatus(tx: $encodedTransaction) {
28305
+ subscription submitAndAwaitStatus($encodedTransaction: HexString!, $estimatePredicates: Boolean, $includePreConfirmation: Boolean) {
28306
+ submitAndAwaitStatus(
28307
+ tx: $encodedTransaction
28308
+ estimatePredicates: $estimatePredicates
28309
+ includePreconfirmation: $includePreConfirmation
28310
+ ) {
27935
28311
  ...transactionStatusSubscriptionFragment
27936
28312
  }
27937
28313
  }
27938
28314
  ${TransactionStatusSubscriptionFragmentDoc}`;
27939
28315
  var StatusChangeDocument = lib_default2`
27940
- subscription statusChange($transactionId: TransactionId!) {
27941
- statusChange(id: $transactionId) {
28316
+ subscription statusChange($transactionId: TransactionId!, $includePreConfirmation: Boolean) {
28317
+ statusChange(
28318
+ id: $transactionId
28319
+ includePreconfirmation: $includePreConfirmation
28320
+ ) {
27942
28321
  ...transactionStatusSubscriptionFragment
27943
28322
  }
27944
28323
  }
@@ -28041,6 +28420,9 @@ ${GetMessageFragmentDoc}`;
28041
28420
  getAssetDetails(variables, options) {
28042
28421
  return requester(GetAssetDetailsDocument, variables, options);
28043
28422
  },
28423
+ assembleTx(variables, options) {
28424
+ return requester(AssembleTxDocument, variables, options);
28425
+ },
28044
28426
  dryRun(variables, options) {
28045
28427
  return requester(DryRunDocument, variables, options);
28046
28428
  },
@@ -28069,9 +28451,67 @@ ${GetMessageFragmentDoc}`;
28069
28451
  }
28070
28452
  __name(getSdk, "getSdk");
28071
28453
 
28454
+ // src/providers/assemble-tx-helpers.ts
28455
+ var resolveAccountForAssembleTxParams = /* @__PURE__ */ __name((account) => {
28456
+ const assembleTxAccount = {};
28457
+ const accountIsPredicate = "bytes" in account;
28458
+ if (accountIsPredicate) {
28459
+ assembleTxAccount.predicate = {
28460
+ predicate: hexlify(account.bytes),
28461
+ predicateAddress: account.address.toB256(),
28462
+ predicateData: hexlify(account.getPredicateData())
28463
+ };
28464
+ } else {
28465
+ assembleTxAccount.address = account.address.toB256();
28466
+ }
28467
+ return assembleTxAccount;
28468
+ }, "resolveAccountForAssembleTxParams");
28469
+ var setAndValidateGasAndFeeForAssembledTx = /* @__PURE__ */ __name(async (params) => {
28470
+ const { gasPrice, transactionRequest, setGasLimit, setMaxFee, provider } = params;
28471
+ const gasLimitSpecified = isDefined(setGasLimit);
28472
+ const maxFeeSpecified = isDefined(setMaxFee);
28473
+ const isScriptTx = transactionRequest.type === TransactionType.Script;
28474
+ if (gasLimitSpecified && isScriptTx) {
28475
+ const requiredGasLimit = transactionRequest.gasLimit;
28476
+ if (bn(setGasLimit).lt(bn(requiredGasLimit))) {
28477
+ throw new FuelError(
28478
+ ErrorCode.GAS_LIMIT_TOO_LOW,
28479
+ `Gas limit '${setGasLimit}' is lower than the required: '${requiredGasLimit}'.`
28480
+ );
28481
+ }
28482
+ transactionRequest.gasLimit = bn(setGasLimit);
28483
+ }
28484
+ if (maxFeeSpecified) {
28485
+ const requiredMaxFee = transactionRequest.maxFee;
28486
+ if (bn(setMaxFee).lt(requiredMaxFee)) {
28487
+ throw new FuelError(
28488
+ ErrorCode.MAX_FEE_TOO_LOW,
28489
+ `Max fee '${setMaxFee}' is lower than the required: '${requiredMaxFee}'.`
28490
+ );
28491
+ }
28492
+ transactionRequest.maxFee = bn(setMaxFee);
28493
+ }
28494
+ if (gasLimitSpecified && !maxFeeSpecified) {
28495
+ const { maxFee: feeForGasPrice } = await provider.estimateTxGasAndFee({
28496
+ transactionRequest,
28497
+ gasPrice
28498
+ });
28499
+ transactionRequest.maxFee = feeForGasPrice;
28500
+ }
28501
+ return transactionRequest;
28502
+ }, "setAndValidateGasAndFeeForAssembledTx");
28503
+
28072
28504
  // src/providers/utils/handle-gql-error-message.ts
28505
+ var gqlErrorMessage = {
28506
+ RPC_CONSISTENCY: /The required fuel block height is higher than the current block height. Required: \d+, Current: \d+/,
28507
+ NOT_ENOUGH_COINS_MAX_COINS: /the target cannot be met due to no coins available or exceeding the \d+ coin limit./,
28508
+ ASSET_NOT_FOUND: /resource was not found in table/,
28509
+ MULTIPLE_CHANGE_POLICIES: /The asset ([a-fA-F0-9]{64}) has multiple change policies/,
28510
+ DUPLICATE_CHANGE_OUTPUT_ACCOUNT: /required balances contain duplicate \(asset, account\) pair/,
28511
+ INSUFFICIENT_FEE_AMOUNT: /InsufficientFeeAmount { expected: (\d+), provided: (\d+) }/
28512
+ };
28073
28513
  var mapGqlErrorMessage = /* @__PURE__ */ __name((error2) => {
28074
- if (new RegExp("the target cannot be met due to no coins available or exceeding the \\d+ coin limit." /* NOT_ENOUGH_COINS_MAX_COINS */).test(error2.message)) {
28514
+ if (gqlErrorMessage.NOT_ENOUGH_COINS_MAX_COINS.test(error2.message)) {
28075
28515
  return new FuelError(
28076
28516
  ErrorCode.INSUFFICIENT_FUNDS_OR_MAX_COINS,
28077
28517
  `Insufficient funds or too many small value coins. Consider combining UTXOs.`,
@@ -28079,7 +28519,25 @@ ${GetMessageFragmentDoc}`;
28079
28519
  error2
28080
28520
  );
28081
28521
  }
28082
- if (new RegExp("resource was not found in table" /* ASSET_NOT_FOUND */).test(error2.message)) {
28522
+ if (gqlErrorMessage.MULTIPLE_CHANGE_POLICIES.test(error2.message)) {
28523
+ const match = error2.message.match(/asset ([a-fA-F0-9]{64})/);
28524
+ const assetId = match?.[1] || "";
28525
+ return new FuelError(
28526
+ ErrorCode.CHANGE_OUTPUT_COLLISION,
28527
+ `OutputChange address for asset 0x${assetId} differs between transaction request and assembleTx parameters.`,
28528
+ {},
28529
+ error2
28530
+ );
28531
+ }
28532
+ if (gqlErrorMessage.DUPLICATE_CHANGE_OUTPUT_ACCOUNT.test(error2.message)) {
28533
+ return new FuelError(
28534
+ ErrorCode.DUPLICATE_CHANGE_OUTPUT_ACCOUNT,
28535
+ `The parameter 'accountCoinQuantities' of assembleTx contains duplicate entries for the same assetId with different 'changeOutputAccount'.`,
28536
+ {},
28537
+ error2
28538
+ );
28539
+ }
28540
+ if (gqlErrorMessage.ASSET_NOT_FOUND.test(error2.message)) {
28083
28541
  return new FuelError(
28084
28542
  ErrorCode.ASSET_NOT_FOUND,
28085
28543
  `Asset not found for given asset id.`,
@@ -28087,6 +28545,13 @@ ${GetMessageFragmentDoc}`;
28087
28545
  error2
28088
28546
  );
28089
28547
  }
28548
+ if (gqlErrorMessage.RPC_CONSISTENCY.test(error2.message)) {
28549
+ return new FuelError(ErrorCode.RPC_CONSISTENCY, error2.message, {}, error2);
28550
+ }
28551
+ if (gqlErrorMessage.INSUFFICIENT_FEE_AMOUNT.test(error2.message)) {
28552
+ const match = error2.message.match(gqlErrorMessage.INSUFFICIENT_FEE_AMOUNT);
28553
+ return new FuelError(ErrorCode.FUNDS_TOO_LOW, match?.[0] || error2.message, {}, error2);
28554
+ }
28090
28555
  return new FuelError(ErrorCode.INVALID_REQUEST, error2.message, {}, error2);
28091
28556
  }, "mapGqlErrorMessage");
28092
28557
  var mapGqlErrorWithIncompatibleNodeVersion = /* @__PURE__ */ __name((error2, incompatibleNodeVersionMessage) => {
@@ -28119,8 +28584,9 @@ ${incompatibleNodeVersionMessage}`,
28119
28584
 
28120
28585
  // src/providers/fuel-graphql-subscriber.ts
28121
28586
  var FuelGraphqlSubscriber = class _FuelGraphqlSubscriber {
28122
- constructor(stream) {
28587
+ constructor(stream, onEvent) {
28123
28588
  this.stream = stream;
28589
+ this.onEvent = onEvent;
28124
28590
  }
28125
28591
  static {
28126
28592
  __name(this, "FuelGraphqlSubscriber");
@@ -28128,12 +28594,13 @@ ${incompatibleNodeVersionMessage}`,
28128
28594
  static incompatibleNodeVersionMessage = false;
28129
28595
  static textDecoder = new TextDecoder();
28130
28596
  static async create(options) {
28131
- const { url, query, variables, fetchFn } = options;
28597
+ const { url, query, variables, fetchFn, operationName, onEvent } = options;
28132
28598
  const response = await fetchFn(`${url}-sub`, {
28133
28599
  method: "POST",
28134
28600
  body: JSON.stringify({
28135
28601
  query: print(query),
28136
- variables
28602
+ variables,
28603
+ operationName
28137
28604
  }),
28138
28605
  headers: {
28139
28606
  "Content-Type": "application/json",
@@ -28142,39 +28609,71 @@ ${incompatibleNodeVersionMessage}`,
28142
28609
  });
28143
28610
  const [errorReader, resultReader] = response.body.tee().map((stream) => stream.getReader());
28144
28611
  await new _FuelGraphqlSubscriber(errorReader).next();
28145
- return new _FuelGraphqlSubscriber(resultReader);
28612
+ return new _FuelGraphqlSubscriber(resultReader, onEvent);
28146
28613
  }
28147
- events = [];
28148
- parsingLeftover = "";
28149
- async next() {
28614
+ /**
28615
+ * This method will take a stream reader and parse the event from the stream.
28616
+ *
28617
+ * @param reader - The reader of the SSE stream
28618
+ * @param parsingLeftover - The leftover string from parsing the previous event
28619
+ * @returns The event parsed as a full GraphQL response, whether the stream is done and the leftover string after parsing
28620
+ */
28621
+ static async readEvent(reader, parsingLeftover = "") {
28622
+ let text = parsingLeftover;
28623
+ const regex = /data:.*\n\n/g;
28150
28624
  while (true) {
28151
- if (this.events.length > 0) {
28152
- const { data, errors: errors2 } = this.events.shift();
28153
- assertGqlResponseHasNoErrors(errors2, _FuelGraphqlSubscriber.incompatibleNodeVersionMessage);
28154
- return { value: data, done: false };
28155
- }
28156
- const { value, done } = await this.stream.read();
28157
- if (done) {
28158
- return { value, done };
28159
- }
28160
- const decoded = _FuelGraphqlSubscriber.textDecoder.decode(value).replace(":keep-alive-text\n\n", "");
28161
- if (decoded === "") {
28162
- continue;
28163
- }
28164
- const text = `${this.parsingLeftover}${decoded}`;
28165
- const regex = /data:.*\n\n/g;
28166
28625
  const matches = [...text.matchAll(regex)].flatMap((match) => match);
28167
- matches.forEach((match) => {
28626
+ if (matches.length > 0) {
28168
28627
  try {
28169
- this.events.push(JSON.parse(match.replace(/^data:/, "")));
28628
+ const event = JSON.parse(matches[0].replace(/^data:/, ""));
28629
+ return {
28630
+ event,
28631
+ done: false,
28632
+ parsingLeftover: text.replace(matches[0], "")
28633
+ };
28170
28634
  } catch (e) {
28171
28635
  throw new FuelError(
28172
28636
  ErrorCode.STREAM_PARSING_ERROR,
28173
28637
  `Error while parsing stream data response: ${text}`
28174
28638
  );
28175
28639
  }
28176
- });
28177
- this.parsingLeftover = text.replace(matches.join(), "");
28640
+ }
28641
+ const { value, done } = await reader.read();
28642
+ if (done) {
28643
+ return { event: void 0, done, parsingLeftover: "" };
28644
+ }
28645
+ const decoded = _FuelGraphqlSubscriber.textDecoder.decode(value).replace(":keep-alive-text\n\n", "");
28646
+ text += decoded;
28647
+ }
28648
+ }
28649
+ events = [];
28650
+ parsingLeftover = "";
28651
+ /**
28652
+ * Gets automatically called when iterating in a `for-await-of` loop.
28653
+ * It can also be called manually.
28654
+ *
28655
+ * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Generator/next
28656
+ */
28657
+ async next() {
28658
+ while (true) {
28659
+ const nextEvent = this.events.shift();
28660
+ if (nextEvent) {
28661
+ this.onEvent?.(nextEvent);
28662
+ assertGqlResponseHasNoErrors(
28663
+ nextEvent.errors,
28664
+ _FuelGraphqlSubscriber.incompatibleNodeVersionMessage
28665
+ );
28666
+ return { value: nextEvent.data, done: false };
28667
+ }
28668
+ const { event, done, parsingLeftover } = await _FuelGraphqlSubscriber.readEvent(
28669
+ this.stream,
28670
+ this.parsingLeftover
28671
+ );
28672
+ this.parsingLeftover = parsingLeftover;
28673
+ if (done) {
28674
+ return { value: void 0, done: true };
28675
+ }
28676
+ this.events.push(event);
28178
28677
  }
28179
28678
  }
28180
28679
  /**
@@ -28220,7 +28719,7 @@ ${incompatibleNodeVersionMessage}`,
28220
28719
  case InputType.Contract: {
28221
28720
  return {
28222
28721
  type: InputType.Contract,
28223
- txID: ZeroBytes32,
28722
+ txID: hexlify(value.txID || ZeroBytes32),
28224
28723
  outputIndex: 0,
28225
28724
  balanceRoot: ZeroBytes32,
28226
28725
  stateRoot: ZeroBytes32,
@@ -28291,9 +28790,9 @@ ${incompatibleNodeVersionMessage}`,
28291
28790
  case OutputType.Variable: {
28292
28791
  return {
28293
28792
  type: OutputType.Variable,
28294
- to: ZeroBytes32,
28295
- amount: bn(0),
28296
- assetId: ZeroBytes32
28793
+ to: hexlify(value.to || ZeroBytes32),
28794
+ amount: bn(value.amount),
28795
+ assetId: hexlify(value.assetId || ZeroBytes32)
28297
28796
  };
28298
28797
  }
28299
28798
  case OutputType.ContractCreated: {
@@ -28340,6 +28839,7 @@ ${incompatibleNodeVersionMessage}`,
28340
28839
  "BlobIdAlreadyUploaded",
28341
28840
  "BlobNotFound",
28342
28841
  "BytecodeAlreadyUploaded",
28842
+ "CanNotGetGasPriceInPredicate",
28343
28843
  "ContractIdAlreadyDeployed",
28344
28844
  "ContractInstructionNotAllowed",
28345
28845
  "ContractMaxSize",
@@ -28363,6 +28863,7 @@ ${incompatibleNodeVersionMessage}`,
28363
28863
  "InvalidImmediateValue",
28364
28864
  "InvalidInstruction",
28365
28865
  "InvalidMetadataIdentifier",
28866
+ "InvalidUpgradePurposeType",
28366
28867
  "MalformedCallStructure",
28367
28868
  "MaxStaticContractsReached",
28368
28869
  "MemoryGrowthOverlap",
@@ -28379,8 +28880,10 @@ ${incompatibleNodeVersionMessage}`,
28379
28880
  "PolicyIsNotSet",
28380
28881
  "PolicyNotFound",
28381
28882
  "PredicateReturnedNonOne",
28883
+ "ProofInUploadNotFound",
28382
28884
  "ReservedRegisterNotWritable",
28383
28885
  "Revert",
28886
+ "StorageSlotsNotFound",
28384
28887
  "ThePartIsNotSequentiallyConnected",
28385
28888
  "TooManyReceipts",
28386
28889
  "TooManySlots",
@@ -28399,7 +28902,7 @@ ${incompatibleNodeVersionMessage}`,
28399
28902
 
28400
28903
  // src/providers/utils/serialization.ts
28401
28904
  var deserializeChain = /* @__PURE__ */ __name((chain) => {
28402
- const { name, daHeight, consensusParameters } = chain;
28905
+ const { name, daHeight, consensusParameters, latestBlock } = chain;
28403
28906
  const {
28404
28907
  contractParams,
28405
28908
  feeParams,
@@ -28450,11 +28953,12 @@ ${incompatibleNodeVersionMessage}`,
28450
28953
  maxScriptDataLength: bn(scriptParams.maxScriptDataLength)
28451
28954
  },
28452
28955
  gasCosts
28453
- }
28956
+ },
28957
+ latestBlock
28454
28958
  };
28455
28959
  }, "deserializeChain");
28456
28960
  var serializeChain = /* @__PURE__ */ __name((chain) => {
28457
- const { name, baseChainHeight, consensusParameters } = chain;
28961
+ const { name, baseChainHeight, consensusParameters, latestBlock } = chain;
28458
28962
  const {
28459
28963
  contractParameters,
28460
28964
  feeParameters,
@@ -28505,7 +29009,8 @@ ${incompatibleNodeVersionMessage}`,
28505
29009
  maxScriptDataLength: scriptParameters.maxScriptDataLength.toString()
28506
29010
  },
28507
29011
  gasCosts
28508
- }
29012
+ },
29013
+ latestBlock
28509
29014
  };
28510
29015
  }, "serializeChain");
28511
29016
  var deserializeNodeInfo = /* @__PURE__ */ __name((nodeInfo) => {
@@ -28734,10 +29239,145 @@ ${incompatibleNodeVersionMessage}`,
28734
29239
  throw new FuelError(ErrorCode.INVALID_RECEIPT_TYPE, `Invalid receipt type: ${receiptType}.`);
28735
29240
  }
28736
29241
  }, "deserializeReceipt");
28737
-
28738
- // src/providers/utils/receipts.ts
28739
- var doesReceiptHaveMissingOutputVariables = /* @__PURE__ */ __name((receipt) => receipt.type === ReceiptType.Revert && receipt.val.toString("hex") === FAILED_TRANSFER_TO_ADDRESS_SIGNAL, "doesReceiptHaveMissingOutputVariables");
28740
- var doesReceiptHaveMissingContractId = /* @__PURE__ */ __name((receipt) => receipt.type === ReceiptType.Panic && receipt.contractId !== "0x0000000000000000000000000000000000000000000000000000000000000000", "doesReceiptHaveMissingContractId");
29242
+ var deserializeInput = /* @__PURE__ */ __name((input) => {
29243
+ let parsedInput;
29244
+ switch (input.type) {
29245
+ case "InputCoin":
29246
+ parsedInput = {
29247
+ type: InputType.Coin,
29248
+ id: input.utxoId,
29249
+ amount: bn(input.amount),
29250
+ assetId: input.assetId,
29251
+ owner: input.owner,
29252
+ txPointer: `0x${input.txPointer}`,
29253
+ witnessIndex: Number(input.coinWitnessIndex),
29254
+ predicate: input.predicate,
29255
+ predicateData: input.predicateData,
29256
+ predicateGasUsed: bn(input.predicateGasUsed)
29257
+ };
29258
+ break;
29259
+ case "InputMessage":
29260
+ parsedInput = {
29261
+ type: InputType.Message,
29262
+ nonce: input.nonce,
29263
+ amount: bn(input.amount),
29264
+ recipient: input.recipient,
29265
+ sender: input.sender,
29266
+ data: input.data,
29267
+ witnessIndex: Number(input.messageWitnessIndex),
29268
+ predicate: input.predicate,
29269
+ predicateData: input.predicateData,
29270
+ predicateGasUsed: bn(input.predicateGasUsed)
29271
+ };
29272
+ break;
29273
+ case "InputContract":
29274
+ parsedInput = {
29275
+ type: InputType.Contract,
29276
+ contractId: input.contractId,
29277
+ txPointer: `0x${input.txPointer}`,
29278
+ txID: hexlify(arrayify(input.utxoId).slice(0, 32))
29279
+ };
29280
+ break;
29281
+ default:
29282
+ assertUnreachable(input);
29283
+ }
29284
+ return parsedInput;
29285
+ }, "deserializeInput");
29286
+ var deserializeOutput = /* @__PURE__ */ __name((output) => {
29287
+ let parsedOutput;
29288
+ switch (output.type) {
29289
+ case "CoinOutput":
29290
+ parsedOutput = {
29291
+ type: OutputType.Coin,
29292
+ amount: bn(output.amount),
29293
+ assetId: output.assetId,
29294
+ to: output.to
29295
+ };
29296
+ break;
29297
+ case "ContractOutput":
29298
+ parsedOutput = {
29299
+ type: OutputType.Contract,
29300
+ inputIndex: Number(output.inputIndex)
29301
+ };
29302
+ break;
29303
+ case "ChangeOutput":
29304
+ parsedOutput = {
29305
+ type: OutputType.Change,
29306
+ assetId: output.assetId,
29307
+ to: output.to
29308
+ };
29309
+ break;
29310
+ case "ContractCreated":
29311
+ parsedOutput = {
29312
+ type: OutputType.ContractCreated,
29313
+ stateRoot: output.stateRoot,
29314
+ contractId: output.contract
29315
+ };
29316
+ break;
29317
+ case "VariableOutput":
29318
+ parsedOutput = {
29319
+ type: OutputType.Variable,
29320
+ amount: bn(output.amount),
29321
+ assetId: output.assetId,
29322
+ to: output.to
29323
+ };
29324
+ break;
29325
+ default:
29326
+ assertUnreachable(output);
29327
+ }
29328
+ return parsedOutput;
29329
+ }, "deserializeOutput");
29330
+ var deserializeProcessedTxOutput = /* @__PURE__ */ __name((output) => {
29331
+ let parsedOutput;
29332
+ switch (output.type) {
29333
+ case "CoinOutput":
29334
+ parsedOutput = {
29335
+ type: OutputType.Coin,
29336
+ amount: bn(output.amount),
29337
+ assetId: output.assetId,
29338
+ to: output.to
29339
+ };
29340
+ break;
29341
+ case "ContractOutput":
29342
+ parsedOutput = {
29343
+ type: OutputType.Contract,
29344
+ inputIndex: Number(output.inputIndex),
29345
+ balanceRoot: output.balanceRoot,
29346
+ stateRoot: output.stateRoot
29347
+ };
29348
+ break;
29349
+ case "ChangeOutput":
29350
+ parsedOutput = {
29351
+ type: OutputType.Change,
29352
+ assetId: output.assetId,
29353
+ to: output.to,
29354
+ amount: bn(output.amount)
29355
+ };
29356
+ break;
29357
+ case "ContractCreated":
29358
+ parsedOutput = {
29359
+ type: OutputType.ContractCreated,
29360
+ stateRoot: output.stateRoot,
29361
+ contractId: output.contract
29362
+ };
29363
+ break;
29364
+ case "VariableOutput":
29365
+ parsedOutput = {
29366
+ type: OutputType.Variable,
29367
+ amount: bn(output.amount),
29368
+ assetId: output.assetId,
29369
+ to: output.to
29370
+ };
29371
+ break;
29372
+ default:
29373
+ assertUnreachable(output);
29374
+ }
29375
+ return parsedOutput;
29376
+ }, "deserializeProcessedTxOutput");
29377
+
29378
+ // src/providers/utils/receipts.ts
29379
+ var doesReceiptHaveMissingOutputVariables = /* @__PURE__ */ __name((receipt) => receipt.type === ReceiptType.Revert && receipt.val.toString("hex") === FAILED_TRANSFER_TO_ADDRESS_SIGNAL, "doesReceiptHaveMissingOutputVariables");
29380
+ var doesReceiptHaveMissingContractId = /* @__PURE__ */ __name((receipt) => receipt.type === ReceiptType.Panic && receipt.contractId !== "0x0000000000000000000000000000000000000000000000000000000000000000", "doesReceiptHaveMissingContractId");
28741
29381
  var getReceiptsWithMissingData = /* @__PURE__ */ __name((receipts) => receipts.reduce(
28742
29382
  (memo, receipt) => {
28743
29383
  if (doesReceiptHaveMissingOutputVariables(receipt)) {
@@ -29076,6 +29716,21 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
29076
29716
  return assembleRevertError(receipts, logs, metadata);
29077
29717
  }, "extractTxError");
29078
29718
 
29719
+ // src/providers/utils/merge-quantities.ts
29720
+ var mergeQuantities = /* @__PURE__ */ __name((...coinQuantities) => {
29721
+ const resultMap = {};
29722
+ function addToMap({ amount, assetId }) {
29723
+ if (resultMap[assetId]) {
29724
+ resultMap[assetId] = resultMap[assetId].add(amount);
29725
+ } else {
29726
+ resultMap[assetId] = amount;
29727
+ }
29728
+ }
29729
+ __name(addToMap, "addToMap");
29730
+ coinQuantities.forEach((arr) => arr.forEach(addToMap));
29731
+ return Object.entries(resultMap).map(([assetId, amount]) => ({ assetId, amount }));
29732
+ }, "mergeQuantities");
29733
+
29079
29734
  // src/providers/transaction-request/errors.ts
29080
29735
  var ChangeOutputCollisionError = class extends Error {
29081
29736
  static {
@@ -29211,8 +29866,6 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
29211
29866
  /** List of witnesses */
29212
29867
  witnesses = [];
29213
29868
  /**
29214
- * @hidden
29215
- *
29216
29869
  * The current status of the transaction
29217
29870
  */
29218
29871
  flag = { state: void 0, transactionId: void 0, summary: void 0 };
@@ -29229,7 +29882,8 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
29229
29882
  witnessLimit,
29230
29883
  inputs,
29231
29884
  outputs,
29232
- witnesses
29885
+ witnesses,
29886
+ flag
29233
29887
  } = {}) {
29234
29888
  this.tip = tip ? bn(tip) : void 0;
29235
29889
  this.maturity = maturity && maturity > 0 ? maturity : void 0;
@@ -29239,6 +29893,7 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
29239
29893
  this.inputs = inputs ?? [];
29240
29894
  this.outputs = outputs ?? [];
29241
29895
  this.witnesses = witnesses ?? [];
29896
+ this.flag = flag ?? { state: void 0, transactionId: void 0, summary: void 0 };
29242
29897
  }
29243
29898
  static getPolicyMeta(req) {
29244
29899
  let policyTypes = 0;
@@ -30027,6 +30682,9 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
30027
30682
  * @param account - The account to fund the transaction.
30028
30683
  * @param params - The parameters for the transaction cost.
30029
30684
  * @returns The current instance of the `ScriptTransactionRequest` funded.
30685
+ *
30686
+ * @deprecated Use `provider.assembleTx` instead.
30687
+ * Check the migration guide https://docs.fuel.network/guide/assembling-transactions/migration-guide.html for more information.
30030
30688
  */
30031
30689
  async estimateAndFund(account, { signatureCallback, quantities = [] } = {}) {
30032
30690
  const txCost = await account.getTransactionCost(this, { signatureCallback, quantities });
@@ -30110,6 +30768,21 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
30110
30768
  }
30111
30769
  return this.outputs.length - 1;
30112
30770
  }
30771
+ /**
30772
+ * Adds a variable output to the transaction request.
30773
+ *
30774
+ * @param to - The recipient address as a BytesLike object. Defaults to ZeroBytes32 if not provided.
30775
+ * @param amount - The amount to be transferred as a BigNumberish object. Defaults to 0 if not provided.
30776
+ * @param assetId - The asset ID as a BytesLike object. Defaults to ZeroBytes32 if not provided.
30777
+ */
30778
+ addVariableOutput(to, amount, assetId) {
30779
+ this.pushOutput({
30780
+ type: OutputType.Variable,
30781
+ to,
30782
+ amount,
30783
+ assetId
30784
+ });
30785
+ }
30113
30786
  /**
30114
30787
  * Calculates the maximum gas for the transaction.
30115
30788
  *
@@ -30780,6 +31453,8 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
30780
31453
  TransactionStatus2["success"] = "success";
30781
31454
  TransactionStatus2["squeezedout"] = "squeezedout";
30782
31455
  TransactionStatus2["failure"] = "failure";
31456
+ TransactionStatus2["preconfirmationSuccess"] = "preconfirmationSuccess";
31457
+ TransactionStatus2["preconfirmationFailure"] = "preconfirmationFailure";
30783
31458
  return TransactionStatus2;
30784
31459
  })(TransactionStatus || {});
30785
31460
  var OperationName = /* @__PURE__ */ ((OperationName2) => {
@@ -31246,6 +31921,10 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
31246
31921
  return "submitted" /* submitted */;
31247
31922
  case "SqueezedOutStatus":
31248
31923
  return "squeezedout" /* squeezedout */;
31924
+ case "PreconfirmationSuccessStatus":
31925
+ return "preconfirmationSuccess" /* preconfirmationSuccess */;
31926
+ case "PreconfirmationFailureStatus":
31927
+ return "preconfirmationFailure" /* preconfirmationFailure */;
31249
31928
  default:
31250
31929
  throw new FuelError(
31251
31930
  ErrorCode.INVALID_TRANSACTION_STATUS,
@@ -31253,15 +31932,30 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
31253
31932
  );
31254
31933
  }
31255
31934
  }, "getTransactionStatusName");
31935
+ var extractResolvedOutputs = /* @__PURE__ */ __name((serializedOutputs) => {
31936
+ const resolvedOutputs = [];
31937
+ serializedOutputs?.forEach(
31938
+ ({ utxoId, output }) => resolvedOutputs.push({
31939
+ utxoId,
31940
+ output: deserializeProcessedTxOutput(output)
31941
+ })
31942
+ );
31943
+ return resolvedOutputs;
31944
+ }, "extractResolvedOutputs");
31256
31945
  var processGraphqlStatus = /* @__PURE__ */ __name((gqlTransactionStatus) => {
31257
31946
  let time;
31258
31947
  let blockId;
31259
31948
  let status;
31260
31949
  let totalFee;
31261
31950
  let totalGas;
31951
+ let receipts;
31952
+ let resolvedOutputs = [];
31953
+ let errorReason;
31262
31954
  let isStatusFailure = false;
31263
31955
  let isStatusSuccess = false;
31264
31956
  let isStatusPending = false;
31957
+ let isStatusPreConfirmationSuccess = false;
31958
+ let isStatusPreConfirmationFailure = false;
31265
31959
  if (gqlTransactionStatus?.type) {
31266
31960
  status = getTransactionStatusName(gqlTransactionStatus.type);
31267
31961
  switch (gqlTransactionStatus.type) {
@@ -31269,6 +31963,7 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
31269
31963
  time = gqlTransactionStatus.time;
31270
31964
  blockId = gqlTransactionStatus.block?.id;
31271
31965
  isStatusSuccess = true;
31966
+ receipts = gqlTransactionStatus.receipts?.map(deserializeReceipt);
31272
31967
  totalFee = bn(gqlTransactionStatus.totalFee);
31273
31968
  totalGas = bn(gqlTransactionStatus.totalGas);
31274
31969
  break;
@@ -31277,12 +31972,28 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
31277
31972
  blockId = gqlTransactionStatus.block?.id;
31278
31973
  isStatusFailure = true;
31279
31974
  totalFee = bn(gqlTransactionStatus.totalFee);
31975
+ receipts = gqlTransactionStatus.receipts?.map(deserializeReceipt);
31280
31976
  totalGas = bn(gqlTransactionStatus.totalGas);
31281
31977
  break;
31282
31978
  case "SubmittedStatus":
31283
31979
  time = gqlTransactionStatus.time;
31284
31980
  isStatusPending = true;
31285
31981
  break;
31982
+ case "PreconfirmationSuccessStatus":
31983
+ isStatusPreConfirmationSuccess = true;
31984
+ totalFee = bn(gqlTransactionStatus.totalFee);
31985
+ totalGas = bn(gqlTransactionStatus.totalGas);
31986
+ receipts = gqlTransactionStatus.preconfirmationReceipts?.map(deserializeReceipt);
31987
+ resolvedOutputs = extractResolvedOutputs(gqlTransactionStatus.resolvedOutputs);
31988
+ break;
31989
+ case "PreconfirmationFailureStatus":
31990
+ isStatusPreConfirmationFailure = true;
31991
+ totalFee = bn(gqlTransactionStatus.totalFee);
31992
+ totalGas = bn(gqlTransactionStatus.totalGas);
31993
+ receipts = gqlTransactionStatus.preconfirmationReceipts?.map(deserializeReceipt);
31994
+ resolvedOutputs = extractResolvedOutputs(gqlTransactionStatus.resolvedOutputs);
31995
+ errorReason = gqlTransactionStatus.reason;
31996
+ break;
31286
31997
  default:
31287
31998
  }
31288
31999
  }
@@ -31292,9 +32003,14 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
31292
32003
  status,
31293
32004
  totalFee,
31294
32005
  totalGas,
32006
+ receipts,
31295
32007
  isStatusFailure,
31296
32008
  isStatusSuccess,
31297
- isStatusPending
32009
+ isStatusPending,
32010
+ isStatusPreConfirmationSuccess,
32011
+ isStatusPreConfirmationFailure,
32012
+ resolvedOutputs,
32013
+ errorReason
31298
32014
  };
31299
32015
  return processedGraphqlStatus;
31300
32016
  }, "processGraphqlStatus");
@@ -31379,6 +32095,81 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
31379
32095
  return transactionSummary;
31380
32096
  }
31381
32097
  __name(assembleTransactionSummary, "assembleTransactionSummary");
32098
+ function assemblePreConfirmationTransactionSummary(params) {
32099
+ const { id, gqlTransactionStatus, transactionRequest, baseAssetId, maxInputs, abiMap } = params;
32100
+ let type3;
32101
+ let operations;
32102
+ let gasUsed;
32103
+ let tip;
32104
+ let transaction;
32105
+ let mintedAssets;
32106
+ let burnedAssets;
32107
+ const {
32108
+ isStatusFailure,
32109
+ isStatusSuccess,
32110
+ isStatusPending,
32111
+ status,
32112
+ receipts,
32113
+ resolvedOutputs,
32114
+ errorReason,
32115
+ totalFee,
32116
+ isStatusPreConfirmationFailure,
32117
+ isStatusPreConfirmationSuccess
32118
+ } = processGraphqlStatus(gqlTransactionStatus);
32119
+ if (receipts) {
32120
+ gasUsed = getGasUsedFromReceipts(receipts);
32121
+ mintedAssets = extractMintedAssetsFromReceipts(receipts);
32122
+ burnedAssets = extractBurnedAssetsFromReceipts(receipts);
32123
+ }
32124
+ if (transactionRequest) {
32125
+ transaction = transactionRequest.toTransaction();
32126
+ type3 = getTransactionTypeName(transaction.type);
32127
+ tip = bn(transaction.policies?.find((policy) => policy.type === PolicyType.Tip)?.data);
32128
+ if (receipts) {
32129
+ const rawPayload = hexlify(new TransactionCoder().encode(transaction));
32130
+ operations = getOperations({
32131
+ transactionType: transaction.type,
32132
+ inputs: transaction.inputs || [],
32133
+ outputs: transaction.outputs || [],
32134
+ receipts,
32135
+ rawPayload,
32136
+ abiMap,
32137
+ maxInputs,
32138
+ baseAssetId
32139
+ });
32140
+ }
32141
+ }
32142
+ const transactionSummary = {
32143
+ id,
32144
+ fee: totalFee,
32145
+ type: type3,
32146
+ status,
32147
+ receipts,
32148
+ gasUsed,
32149
+ tip,
32150
+ isStatusPreConfirmationFailure,
32151
+ isStatusPreConfirmationSuccess,
32152
+ isStatusFailure,
32153
+ isStatusSuccess,
32154
+ isStatusPending,
32155
+ ...transaction && {
32156
+ isTypeMint: isTypeMint(transaction.type),
32157
+ isTypeCreate: isTypeCreate(transaction.type),
32158
+ isTypeScript: isTypeScript(transaction.type),
32159
+ isTypeUpgrade: isTypeUpgrade(transaction.type),
32160
+ isTypeUpload: isTypeUpload(transaction.type),
32161
+ isTypeBlob: isTypeBlob(transaction.type)
32162
+ },
32163
+ mintedAssets,
32164
+ burnedAssets,
32165
+ resolvedOutputs,
32166
+ errorReason,
32167
+ transaction,
32168
+ operations
32169
+ };
32170
+ return transactionSummary;
32171
+ }
32172
+ __name(assemblePreConfirmationTransactionSummary, "assemblePreConfirmationTransactionSummary");
31382
32173
 
31383
32174
  // src/providers/transaction-response/getAllDecodedLogs.ts
31384
32175
  function getAllDecodedLogs(opts) {
@@ -31388,7 +32179,9 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
31388
32179
  const firstCallReceipt = receipts.find(
31389
32180
  (r) => r.type === ReceiptType.Call && r.id === ZeroBytes32
31390
32181
  );
31391
- mainContract = firstCallReceipt.to;
32182
+ if (firstCallReceipt) {
32183
+ mainContract = firstCallReceipt.to;
32184
+ }
31392
32185
  }
31393
32186
  return receipts.reduce(
31394
32187
  ({ logs, groupedLogs }, receipt) => {
@@ -31411,37 +32204,6 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
31411
32204
  __name(getAllDecodedLogs, "getAllDecodedLogs");
31412
32205
 
31413
32206
  // src/providers/transaction-response/transaction-response.ts
31414
- function mapGqlOutputsToTxOutputs(outputs) {
31415
- return outputs.map((o) => {
31416
- const obj = "amount" in o ? { ...o, amount: bn(o.amount) } : o;
31417
- switch (obj.type) {
31418
- case "CoinOutput":
31419
- return { ...obj, type: OutputType.Coin };
31420
- case "ContractOutput":
31421
- return {
31422
- ...obj,
31423
- type: OutputType.Contract,
31424
- inputIndex: parseInt(obj.inputIndex, 10)
31425
- };
31426
- case "ChangeOutput":
31427
- return {
31428
- ...obj,
31429
- type: OutputType.Change
31430
- };
31431
- case "VariableOutput":
31432
- return { ...obj, type: OutputType.Variable };
31433
- case "ContractCreated":
31434
- return {
31435
- ...obj,
31436
- type: OutputType.ContractCreated,
31437
- contractId: obj.contract
31438
- };
31439
- default:
31440
- return assertUnreachable(obj);
31441
- }
31442
- });
31443
- }
31444
- __name(mapGqlOutputsToTxOutputs, "mapGqlOutputsToTxOutputs");
31445
32207
  var TransactionResponse = class _TransactionResponse {
31446
32208
  /**
31447
32209
  * Constructor for `TransactionResponse`.
@@ -31451,11 +32213,16 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
31451
32213
  */
31452
32214
  constructor(tx, provider, chainId, abis, submitTxSubscription) {
31453
32215
  this.submitTxSubscription = submitTxSubscription;
31454
- this.id = typeof tx === "string" ? tx : tx.getTransactionId(chainId);
32216
+ if (typeof tx === "string") {
32217
+ this.id = tx;
32218
+ } else {
32219
+ this.id = tx.getTransactionId(chainId);
32220
+ this.request = tx;
32221
+ }
31455
32222
  this.provider = provider;
31456
32223
  this.abis = abis;
31457
- this.request = typeof tx === "string" ? void 0 : tx;
31458
32224
  this.waitForResult = this.waitForResult.bind(this);
32225
+ this.waitForPreConfirmation = this.waitForPreConfirmation.bind(this);
31459
32226
  }
31460
32227
  static {
31461
32228
  __name(this, "TransactionResponse");
@@ -31471,6 +32238,9 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
31471
32238
  request;
31472
32239
  status;
31473
32240
  abis;
32241
+ preConfirmationStatus;
32242
+ waitingForStreamData = false;
32243
+ statusResolvers = /* @__PURE__ */ new Map();
31474
32244
  /**
31475
32245
  * Async constructor for `TransactionResponse`. This method can be used to create
31476
32246
  * an instance of `TransactionResponse` and wait for the transaction to be fetched
@@ -31502,29 +32272,38 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
31502
32272
  }
31503
32273
  return input;
31504
32274
  });
31505
- tx.outputs = mapGqlOutputsToTxOutputs(status.transaction.outputs);
31506
- if ("receiptsRoot" in status.transaction) {
32275
+ tx.outputs = status.transaction.outputs.map(deserializeProcessedTxOutput);
32276
+ if (status.transaction.receiptsRoot) {
31507
32277
  tx.receiptsRoot = status.transaction.receiptsRoot;
31508
32278
  }
31509
32279
  }
31510
32280
  }
31511
32281
  async getTransaction() {
31512
32282
  if (this.request) {
31513
- const tx = this.request.toTransaction();
31514
- this.applyMalleableSubscriptionFields(tx);
32283
+ const tx2 = this.request.toTransaction();
32284
+ this.applyMalleableSubscriptionFields(tx2);
31515
32285
  return {
31516
- tx,
32286
+ tx: tx2,
31517
32287
  bytes: this.request.toTransactionBytes()
31518
32288
  };
31519
32289
  }
31520
32290
  const gqlTransaction = this.gqlTransaction ?? await this.fetch();
32291
+ const { rawPayload } = gqlTransaction;
32292
+ const bytes = arrayify(rawPayload);
32293
+ const [tx] = new TransactionCoder().decode(bytes, 0);
31521
32294
  return {
31522
- tx: this.decodeTransaction(gqlTransaction),
31523
- bytes: arrayify(gqlTransaction.rawPayload)
32295
+ tx,
32296
+ bytes
31524
32297
  };
31525
32298
  }
32299
+ /**
32300
+ *
32301
+ * NOTE: This method is only called within `getTransactionSummary`, which is invoked after `getTransaction`.
32302
+ * Since `getTransaction` only resolves once the transaction has been processed,
32303
+ * the status at this point is guaranteed to be either `SuccessStatus` or `FailureStatus`.
32304
+ */
31526
32305
  getReceipts() {
31527
- const status = this.status ?? this.gqlTransaction?.status;
32306
+ const status = this.getTransactionStatus();
31528
32307
  switch (status?.type) {
31529
32308
  case "SuccessStatus":
31530
32309
  case "FailureStatus":
@@ -31557,18 +32336,6 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
31557
32336
  this.gqlTransaction = response.transaction;
31558
32337
  return response.transaction;
31559
32338
  }
31560
- /**
31561
- * Decode the raw payload of the transaction.
31562
- *
31563
- * @param transactionWithReceipts - The transaction with receipts object.
31564
- * @returns The decoded transaction.
31565
- */
31566
- decodeTransaction(transactionWithReceipts) {
31567
- return new TransactionCoder().decode(
31568
- arrayify(transactionWithReceipts.rawPayload),
31569
- 0
31570
- )?.[0];
31571
- }
31572
32339
  /**
31573
32340
  * Retrieves the TransactionSummary. If the `gqlTransaction` is not set, it will
31574
32341
  * fetch it from the provider
@@ -31579,7 +32346,8 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
31579
32346
  async getTransactionSummary(contractsAbiMap) {
31580
32347
  const { tx: transaction, bytes: transactionBytes } = await this.getTransaction();
31581
32348
  const { gasPerByte, gasPriceFactor, gasCosts, maxGasPerTx } = await this.provider.getGasConfig();
31582
- const totalFee = getTotalFeeFromStatus(this.status ?? this.gqlTransaction?.status);
32349
+ const transactionStatus = this.getTransactionStatus();
32350
+ const totalFee = getTotalFeeFromStatus(transactionStatus);
31583
32351
  const gasPrice = totalFee ? bn(0) : await this.provider.getLatestGasPrice();
31584
32352
  const maxInputs = (await this.provider.getChain()).consensusParameters.txParameters.maxInputs;
31585
32353
  const baseAssetId = await this.provider.getBaseAssetId();
@@ -31588,7 +32356,7 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
31588
32356
  receipts: this.getReceipts(),
31589
32357
  transaction,
31590
32358
  transactionBytes,
31591
- gqlTransactionStatus: this.status ?? this.gqlTransaction?.status,
32359
+ gqlTransactionStatus: transactionStatus,
31592
32360
  gasPerByte,
31593
32361
  gasPriceFactor,
31594
32362
  abiMap: contractsAbiMap,
@@ -31600,29 +32368,92 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
31600
32368
  });
31601
32369
  return transactionSummary;
31602
32370
  }
32371
+ async getPreConfirmationTransactionSummary(contractsAbiMap) {
32372
+ const baseAssetId = await this.provider.getBaseAssetId();
32373
+ const maxInputs = (await this.provider.getChain()).consensusParameters.txParameters.maxInputs;
32374
+ const transactionSummary = assemblePreConfirmationTransactionSummary({
32375
+ id: this.id,
32376
+ gqlTransactionStatus: this.preConfirmationStatus || this.status,
32377
+ baseAssetId,
32378
+ maxInputs,
32379
+ abiMap: contractsAbiMap,
32380
+ transactionRequest: this.request
32381
+ });
32382
+ return transactionSummary;
32383
+ }
32384
+ resolveStatus(type3) {
32385
+ const resolvers = this.statusResolvers.get(type3) || [];
32386
+ resolvers.forEach((resolve) => resolve());
32387
+ this.statusResolvers.delete(type3);
32388
+ }
32389
+ async waitForStatus(type3) {
32390
+ return new Promise((resolve, reject) => {
32391
+ const resolvers = this.statusResolvers.get(type3) || [];
32392
+ resolvers.push(() => {
32393
+ resolve();
32394
+ });
32395
+ this.statusResolvers.set(type3, resolvers);
32396
+ this.waitForStatusChange().catch(reject);
32397
+ });
32398
+ }
32399
+ /**
32400
+ * Waits for the status change of the transaction.
32401
+ * If the transaction is already in a final state, it will return immediately.
32402
+ * If the transaction is not in a final state, it will wait for the status change.
32403
+ * If we are already subscribed to the status change, it will return immediately.
32404
+ */
31603
32405
  async waitForStatusChange() {
31604
- const status = this.gqlTransaction?.status?.type;
31605
- if (status && status !== "SubmittedStatus") {
32406
+ const type3 = this.status?.type;
32407
+ if (type3 && (type3 === "FailureStatus" || type3 === "SuccessStatus")) {
32408
+ this.resolveStatus("preConfirmation");
32409
+ this.resolveStatus("confirmation");
32410
+ return;
32411
+ }
32412
+ if (this.waitingForStreamData) {
31606
32413
  return;
31607
32414
  }
32415
+ this.waitingForStreamData = true;
31608
32416
  const subscription = this.submitTxSubscription ?? await this.provider.operations.statusChange({
31609
- transactionId: this.id
32417
+ transactionId: this.id,
32418
+ includePreConfirmation: true
31610
32419
  });
31611
32420
  for await (const sub2 of subscription) {
31612
32421
  const statusChange = "statusChange" in sub2 ? sub2.statusChange : sub2.submitAndAwaitStatus;
31613
32422
  this.status = statusChange;
31614
32423
  if (statusChange.type === "SqueezedOutStatus") {
31615
- this.unsetResourceCache();
31616
32424
  throw new FuelError(
31617
32425
  ErrorCode.TRANSACTION_SQUEEZED_OUT,
31618
32426
  `Transaction Squeezed Out with reason: ${statusChange.reason}`
31619
32427
  );
31620
32428
  }
31621
- if (statusChange.type !== "SubmittedStatus") {
32429
+ if (statusChange.type === "PreconfirmationSuccessStatus" || statusChange.type === "PreconfirmationFailureStatus") {
32430
+ this.preConfirmationStatus = statusChange;
32431
+ this.resolveStatus("preConfirmation");
32432
+ }
32433
+ if (statusChange.type === "SuccessStatus" || statusChange.type === "FailureStatus") {
32434
+ this.resolveStatus("confirmation");
32435
+ this.resolveStatus("preConfirmation");
32436
+ this.waitingForStreamData = false;
31622
32437
  break;
31623
32438
  }
31624
32439
  }
31625
32440
  }
32441
+ async waitForConfirmationStatuses() {
32442
+ try {
32443
+ await this.waitForStatus("confirmation");
32444
+ } catch (error2) {
32445
+ this.unsetResourceCache();
32446
+ throw error2;
32447
+ }
32448
+ }
32449
+ async waitForPreConfirmationStatuses() {
32450
+ try {
32451
+ await this.waitForStatus("preConfirmation");
32452
+ } catch (error2) {
32453
+ this.unsetResourceCache();
32454
+ throw error2;
32455
+ }
32456
+ }
31626
32457
  /**
31627
32458
  * Assembles the result of a transaction by retrieving the transaction summary,
31628
32459
  * decoding logs (if available), and handling transaction failure.
@@ -31651,7 +32482,7 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
31651
32482
  transactionResult.groupedLogs = groupedLogs;
31652
32483
  }
31653
32484
  const { receipts } = transactionResult;
31654
- const status = this.status ?? this.gqlTransaction?.status;
32485
+ const status = this.getTransactionStatus();
31655
32486
  if (status?.type === "FailureStatus") {
31656
32487
  const { reason } = status;
31657
32488
  throw extractTxError({
@@ -31663,16 +32494,46 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
31663
32494
  }
31664
32495
  return transactionResult;
31665
32496
  }
32497
+ async assemblePreConfirmationResult(contractsAbiMap) {
32498
+ const transactionSummary = await this.getPreConfirmationTransactionSummary(contractsAbiMap);
32499
+ const transactionResult = {
32500
+ ...transactionSummary,
32501
+ logs: [],
32502
+ groupedLogs: {}
32503
+ };
32504
+ let { logs, groupedLogs } = { logs: [], groupedLogs: {} };
32505
+ if (this.abis && transactionSummary.receipts) {
32506
+ ({ logs, groupedLogs } = getAllDecodedLogs({
32507
+ receipts: transactionSummary.receipts,
32508
+ mainAbi: this.abis.main,
32509
+ externalAbis: this.abis.otherContractsAbis
32510
+ }));
32511
+ transactionResult.logs = logs;
32512
+ transactionResult.groupedLogs = groupedLogs;
32513
+ }
32514
+ return transactionResult;
32515
+ }
31666
32516
  /**
31667
32517
  * Waits for transaction to complete and returns the result.
31668
32518
  *
31669
32519
  * @returns The completed transaction result
31670
32520
  */
31671
32521
  async waitForResult(contractsAbiMap) {
31672
- await this.waitForStatusChange();
32522
+ await this.waitForConfirmationStatuses();
31673
32523
  this.unsetResourceCache();
31674
32524
  return this.assembleResult(contractsAbiMap);
31675
32525
  }
32526
+ /**
32527
+ * Waits for the transaction's pre-confirmation and returns the result.
32528
+ *
32529
+ * @param contractsAbiMap - The contracts ABI map.
32530
+ * @returns The pre-confirmed transaction result
32531
+ */
32532
+ async waitForPreConfirmation(contractsAbiMap) {
32533
+ await this.waitForPreConfirmationStatuses();
32534
+ this.unsetResourceCache();
32535
+ return this.assemblePreConfirmationResult(contractsAbiMap);
32536
+ }
31676
32537
  /**
31677
32538
  * Waits for transaction to complete and returns the result.
31678
32539
  *
@@ -31684,6 +32545,9 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
31684
32545
  unsetResourceCache() {
31685
32546
  this.provider.cache?.unset(this.id);
31686
32547
  }
32548
+ getTransactionStatus() {
32549
+ return this.status ?? this.gqlTransaction?.status;
32550
+ }
31687
32551
  };
31688
32552
 
31689
32553
  // src/providers/transaction-response/getDecodedLogs.ts
@@ -31749,21 +32613,22 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
31749
32613
  }
31750
32614
  __name(autoRetryFetch, "autoRetryFetch");
31751
32615
 
31752
- // src/providers/utils/helpers.ts
31753
- var adjustResourcesToExclude = /* @__PURE__ */ __name((params) => {
31754
- const { userInput, cached, maxInputs } = params;
31755
- const final = { ...userInput };
31756
- let total = final.utxos.length + final.messages.length;
31757
- if (total >= maxInputs) {
31758
- return final;
31759
- }
31760
- final.utxos = [...final.utxos, ...cached.utxos.slice(0, maxInputs - total)];
31761
- total = final.utxos.length + final.messages.length;
31762
- if (total < maxInputs) {
31763
- final.messages = [...final.messages, ...cached.messages.slice(0, maxInputs - total)];
32616
+ // src/providers/utils/parse-graphql-response.ts
32617
+ var parseGraphqlResponse = /* @__PURE__ */ __name(async (options) => {
32618
+ const { response, isSubscription } = options;
32619
+ let extensions;
32620
+ const responseClone = response.clone();
32621
+ if (isSubscription) {
32622
+ const reader = responseClone.body?.getReader();
32623
+ const { event } = await FuelGraphqlSubscriber.readEvent(reader);
32624
+ extensions = event?.extensions;
32625
+ } else {
32626
+ extensions = (await responseClone.json()).extensions;
31764
32627
  }
31765
- return final;
31766
- }, "adjustResourcesToExclude");
32628
+ return {
32629
+ extensions
32630
+ };
32631
+ }, "parseGraphqlResponse");
31767
32632
 
31768
32633
  // src/providers/utils/validate-pagination-args.ts
31769
32634
  var validatePaginationArgs = /* @__PURE__ */ __name((params) => {
@@ -31808,22 +32673,48 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
31808
32673
  var BLOCKS_PAGE_SIZE_LIMIT = 5;
31809
32674
  var DEFAULT_RESOURCE_CACHE_TTL = 2e4;
31810
32675
  var GAS_USED_MODIFIER = 1.2;
32676
+ var WRITE_OPERATIONS = [
32677
+ "submit",
32678
+ "submitAndAwaitStatus",
32679
+ "produceBlocks"
32680
+ ];
31811
32681
  var Provider = class _Provider {
31812
32682
  static {
31813
32683
  __name(this, "Provider");
31814
32684
  }
31815
32685
  operations;
31816
32686
  cache;
31817
- /** @hidden */
31818
- static clearChainAndNodeCaches() {
32687
+ /**
32688
+ * @hidden
32689
+ * @param url - If provided, clears cache only for given url
32690
+ */
32691
+ static clearChainAndNodeCaches(url) {
32692
+ if (url) {
32693
+ delete _Provider.inflightFetchChainAndNodeInfoRequests[url];
32694
+ delete _Provider.chainInfoCache[url];
32695
+ delete _Provider.nodeInfoCache[url];
32696
+ delete _Provider.currentBlockHeightCache[url];
32697
+ return;
32698
+ }
31819
32699
  _Provider.inflightFetchChainAndNodeInfoRequests = {};
31820
32700
  _Provider.nodeInfoCache = {};
31821
32701
  _Provider.chainInfoCache = {};
32702
+ _Provider.currentBlockHeightCache = {};
31822
32703
  }
31823
32704
  /** @hidden */
31824
32705
  url;
31825
32706
  /** @hidden */
31826
32707
  urlWithoutAuth;
32708
+ /**
32709
+ * Governs whether to include the required block height in the request body
32710
+ * for block-sensitive operations like when submitting a transaction.
32711
+ *
32712
+ * This ensures that the operation is executed at the correct block height,
32713
+ * regardless of which node in the network the request is routed to.
32714
+ *
32715
+ * `true` by default.
32716
+ */
32717
+ static ENABLE_RPC_CONSISTENCY = true;
31827
32718
  /** @hidden */
31828
32719
  static inflightFetchChainAndNodeInfoRequests = {};
31829
32720
  /** @hidden */
@@ -31831,6 +32722,8 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
31831
32722
  /** @hidden */
31832
32723
  static nodeInfoCache = {};
31833
32724
  /** @hidden */
32725
+ static currentBlockHeightCache = {};
32726
+ /** @hidden */
31834
32727
  static incompatibleNodeVersionMessage = "";
31835
32728
  /** @hidden */
31836
32729
  consensusParametersTimestamp;
@@ -31842,6 +32735,18 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
31842
32735
  headers: void 0,
31843
32736
  cache: void 0
31844
32737
  };
32738
+ static extractOperationName(body) {
32739
+ return body?.toString().match(/"operationName":"(.+)"/)?.[1];
32740
+ }
32741
+ static isWriteOperation(body) {
32742
+ return WRITE_OPERATIONS.includes(this.extractOperationName(body));
32743
+ }
32744
+ static normalizeUrl(url) {
32745
+ return url.replace(/-sub$/, "");
32746
+ }
32747
+ static hasWriteOperationHappened(url) {
32748
+ return isDefined(_Provider.currentBlockHeightCache[this.normalizeUrl(url)]);
32749
+ }
31845
32750
  /**
31846
32751
  * @hidden
31847
32752
  */
@@ -31859,9 +32764,57 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
31859
32764
  if (options.requestMiddleware) {
31860
32765
  fullRequest = await options.requestMiddleware(fullRequest);
31861
32766
  }
31862
- return options.fetch ? options.fetch(url, fullRequest, options) : fetch(url, fullRequest);
32767
+ if (_Provider.ENABLE_RPC_CONSISTENCY && _Provider.hasWriteOperationHappened(url)) {
32768
+ _Provider.applyBlockHeight(fullRequest, url);
32769
+ }
32770
+ return _Provider.fetchAndProcessBlockHeight(url, fullRequest, options);
31863
32771
  }, retryOptions);
31864
32772
  }
32773
+ static applyBlockHeight(request2, url) {
32774
+ const normalizedUrl = this.normalizeUrl(url);
32775
+ const currentBlockHeight = _Provider.currentBlockHeightCache[normalizedUrl] ?? 0;
32776
+ request2.body = request2.body?.toString().replace(/}$/, `,"extensions":{"required_fuel_block_height":${currentBlockHeight}}}`);
32777
+ }
32778
+ static async fetchAndProcessBlockHeight(url, request2, options) {
32779
+ const fetchFn = /* @__PURE__ */ __name(() => options.fetch ? options.fetch(url, request2, options) : fetch(url, request2), "fetchFn");
32780
+ const isWriteOperation = _Provider.isWriteOperation(request2.body);
32781
+ if (isWriteOperation && !_Provider.hasWriteOperationHappened(url)) {
32782
+ _Provider.currentBlockHeightCache[_Provider.normalizeUrl(url)] = 0;
32783
+ }
32784
+ let response = await fetchFn();
32785
+ if (!_Provider.ENABLE_RPC_CONSISTENCY) {
32786
+ return response;
32787
+ }
32788
+ const retryOptions = {
32789
+ maxRetries: 5,
32790
+ baseDelay: 500
32791
+ };
32792
+ for (let retriesLeft = retryOptions.maxRetries; retriesLeft > 0; --retriesLeft) {
32793
+ const { extensions } = await parseGraphqlResponse({
32794
+ response,
32795
+ isSubscription: url.endsWith("-sub")
32796
+ });
32797
+ _Provider.setCurrentBlockHeight(url, extensions?.current_fuel_block_height);
32798
+ if (!extensions?.fuel_block_height_precondition_failed) {
32799
+ break;
32800
+ }
32801
+ const retryAttempt = retryOptions.maxRetries - retriesLeft + 1;
32802
+ const sleepTime = getWaitDelay(retryOptions, retryAttempt);
32803
+ await sleep(sleepTime);
32804
+ response = await fetchFn();
32805
+ }
32806
+ return response;
32807
+ }
32808
+ static setCurrentBlockHeight(url, height) {
32809
+ const writeOperationHappened = _Provider.hasWriteOperationHappened(url);
32810
+ if (!isDefined(height) || !writeOperationHappened) {
32811
+ return;
32812
+ }
32813
+ const normalizedUrl = _Provider.normalizeUrl(url);
32814
+ if (height > _Provider.currentBlockHeightCache[normalizedUrl]) {
32815
+ _Provider.currentBlockHeightCache[normalizedUrl] = height;
32816
+ }
32817
+ }
31865
32818
  /**
31866
32819
  * Constructor to initialize a Provider.
31867
32820
  *
@@ -31947,6 +32900,7 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
31947
32900
  * Returns some helpful parameters related to gas fees.
31948
32901
  */
31949
32902
  async getGasConfig() {
32903
+ await this.init();
31950
32904
  const {
31951
32905
  txParameters: { maxGasPerTx },
31952
32906
  predicateParameters: { maxGasPerPredicate },
@@ -32071,7 +33025,14 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
32071
33025
  url: this.urlWithoutAuth,
32072
33026
  query,
32073
33027
  fetchFn: /* @__PURE__ */ __name((url, requestInit) => fetchFn(url, requestInit, this.options), "fetchFn"),
32074
- variables: vars
33028
+ variables: vars,
33029
+ operationName: opDefinition.name.value,
33030
+ onEvent: /* @__PURE__ */ __name((event) => {
33031
+ _Provider.setCurrentBlockHeight(
33032
+ this.urlWithoutAuth,
33033
+ event.extensions?.current_fuel_block_height
33034
+ );
33035
+ }, "onEvent")
32075
33036
  });
32076
33037
  }
32077
33038
  return gqlClient.request(query, vars);
@@ -32229,7 +33190,11 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
32229
33190
  * @param sendTransactionParams - The provider send transaction parameters (optional).
32230
33191
  * @returns A promise that resolves to the transaction response object.
32231
33192
  */
32232
- async sendTransaction(transactionRequestLike, { estimateTxDependencies = true, enableAssetBurn } = {}) {
33193
+ async sendTransaction(transactionRequestLike, {
33194
+ enableAssetBurn,
33195
+ estimateTxDependencies = true,
33196
+ includePreConfirmation: _includePreConfirmation = true
33197
+ } = {}) {
32233
33198
  const transactionRequest = transactionRequestify(transactionRequestLike);
32234
33199
  validateTransactionForAssetBurn(
32235
33200
  await this.getBaseAssetId(),
@@ -32245,7 +33210,10 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
32245
33210
  if (isTransactionTypeScript(transactionRequest)) {
32246
33211
  abis = transactionRequest.abis;
32247
33212
  }
32248
- const subscription = await this.operations.submitAndAwaitStatus({ encodedTransaction });
33213
+ const subscription = await this.operations.submitAndAwaitStatus({
33214
+ encodedTransaction,
33215
+ includePreConfirmation: true
33216
+ });
32249
33217
  this.#cacheInputs(
32250
33218
  transactionRequest.inputs,
32251
33219
  transactionRequest.getTransactionId(await this.getChainId())
@@ -32497,7 +33465,9 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
32497
33465
  }
32498
33466
  const chainInfo = _Provider.chainInfoCache[this.urlWithoutAuth];
32499
33467
  const {
32500
- consensusParameters: { version: previous }
33468
+ latestBlock: {
33469
+ header: { consensusParametersVersion: previous }
33470
+ }
32501
33471
  } = chainInfo;
32502
33472
  const {
32503
33473
  chain: {
@@ -32597,6 +33567,9 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
32597
33567
  * @param transactionCostParams - The transaction cost parameters (optional).
32598
33568
  *
32599
33569
  * @returns A promise that resolves to the transaction cost object.
33570
+ *
33571
+ * @deprecated Use provider.assembleTx instead
33572
+ * Check the migration guide https://docs.fuel.network/guide/assembling-transactions/migration-guide.html for more information.
32600
33573
  */
32601
33574
  async getTransactionCost(transactionRequestLike, { signatureCallback, gasPrice: gasPriceParam } = {}) {
32602
33575
  const txRequestClone = clone_default(transactionRequestify(transactionRequestLike));
@@ -32639,7 +33612,7 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
32639
33612
  }
32640
33613
  ({ rawReceipts, receipts, missingContractIds, outputVariables, dryRunStatus } = await this.estimateTxDependencies(txRequestClone, { gasPrice }));
32641
33614
  if (dryRunStatus && "reason" in dryRunStatus) {
32642
- throw this.extractDryRunError(txRequestClone, receipts, dryRunStatus);
33615
+ throw this.extractDryRunError(txRequestClone, receipts, dryRunStatus.reason);
32643
33616
  }
32644
33617
  const { maxGasPerTx } = await this.getGasConfig();
32645
33618
  const pristineGasUsed = getGasUsedFromReceipts(receipts);
@@ -32672,6 +33645,102 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
32672
33645
  transactionSummary
32673
33646
  };
32674
33647
  }
33648
+ /**
33649
+ * Assembles a transaction by completely estimating and funding it.
33650
+ *
33651
+ * @param params - Parameters used to assemble the transaction.
33652
+ *
33653
+ * @returns The assembled transaction request, estimated gas price, and receipts
33654
+ */
33655
+ async assembleTx(params) {
33656
+ const {
33657
+ request: request2,
33658
+ reserveGas,
33659
+ resourcesIdsToIgnore,
33660
+ feePayerAccount,
33661
+ blockHorizon = 10,
33662
+ estimatePredicates = true,
33663
+ accountCoinQuantities = []
33664
+ } = params;
33665
+ const allAddresses = /* @__PURE__ */ new Set();
33666
+ const baseAssetId = await this.getBaseAssetId();
33667
+ let feePayerIndex = -1;
33668
+ let baseAssetChange;
33669
+ const requiredBalances = accountCoinQuantities.map((quantity, index) => {
33670
+ const { amount, assetId, account = feePayerAccount, changeOutputAccount } = quantity;
33671
+ const changeAccountAddress = changeOutputAccount ? changeOutputAccount.address.toB256() : account.address.toB256();
33672
+ allAddresses.add(account.address.toB256());
33673
+ const changePolicy = {
33674
+ change: changeAccountAddress
33675
+ };
33676
+ if (assetId === baseAssetId) {
33677
+ baseAssetChange = changePolicy.change;
33678
+ }
33679
+ if (account.address.equals(feePayerAccount.address)) {
33680
+ feePayerIndex = index;
33681
+ }
33682
+ const requiredBalance = {
33683
+ account: resolveAccountForAssembleTxParams(account),
33684
+ amount: bn(amount).toString(10),
33685
+ assetId,
33686
+ changePolicy
33687
+ };
33688
+ return requiredBalance;
33689
+ });
33690
+ if (feePayerIndex === -1) {
33691
+ allAddresses.add(feePayerAccount.address.toB256());
33692
+ const newLength = requiredBalances.push({
33693
+ account: resolveAccountForAssembleTxParams(feePayerAccount),
33694
+ amount: bn(0).toString(10),
33695
+ // Since the correct fee amount cannot be determined yet, we can use 0
33696
+ assetId: baseAssetId,
33697
+ changePolicy: {
33698
+ change: baseAssetChange || feePayerAccount.address.toB256()
33699
+ }
33700
+ });
33701
+ feePayerIndex = newLength - 1;
33702
+ }
33703
+ const excludeInput = await this.adjustResourcesToIgnoreForAddresses(
33704
+ Array.from(allAddresses),
33705
+ resourcesIdsToIgnore
33706
+ );
33707
+ const {
33708
+ assembleTx: { status, transaction: gqlTransaction, gasPrice }
33709
+ } = await this.operations.assembleTx({
33710
+ tx: hexlify(request2.toTransactionBytes()),
33711
+ blockHorizon: String(blockHorizon),
33712
+ feeAddressIndex: String(feePayerIndex),
33713
+ requiredBalances,
33714
+ estimatePredicates,
33715
+ excludeInput,
33716
+ reserveGas: reserveGas ? reserveGas.toString(10) : void 0
33717
+ });
33718
+ if (status.type === "DryRunFailureStatus") {
33719
+ const parsedReceipts = status.receipts.map(deserializeReceipt);
33720
+ throw this.extractDryRunError(request2, parsedReceipts, status.reason);
33721
+ }
33722
+ request2.witnesses = gqlTransaction.witnesses || request2.witnesses;
33723
+ request2.inputs = gqlTransaction.inputs?.map(deserializeInput) || request2.inputs;
33724
+ request2.outputs = gqlTransaction.outputs?.map(deserializeOutput) || request2.outputs;
33725
+ if (gqlTransaction.policies?.maxFee) {
33726
+ request2.maxFee = bn(gqlTransaction.policies.maxFee);
33727
+ }
33728
+ if (gqlTransaction.scriptGasLimit) {
33729
+ request2.gasLimit = bn(gqlTransaction.scriptGasLimit);
33730
+ }
33731
+ const rawReceipts = status.receipts;
33732
+ const chainId = await this.getChainId();
33733
+ request2.updateState(chainId, "funded", {
33734
+ gasPrice: gasPrice.toString(),
33735
+ receipts: rawReceipts
33736
+ });
33737
+ return {
33738
+ assembledRequest: request2,
33739
+ gasPrice: bn(gasPrice),
33740
+ receipts: status.receipts.map(deserializeReceipt),
33741
+ rawReceipts
33742
+ };
33743
+ }
32675
33744
  /**
32676
33745
  * Returns coins for the given owner.
32677
33746
  *
@@ -32710,30 +33779,15 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
32710
33779
  *
32711
33780
  * @param owner - The address to get resources for.
32712
33781
  * @param quantities - The coin quantities to get.
32713
- * @param excludedIds - IDs of excluded resources from the selection (optional).
33782
+ * @param resourcesIdsToIgnore - IDs of excluded resources from the selection (optional).
32714
33783
  * @returns A promise that resolves to the resources.
32715
33784
  */
32716
- async getResourcesToSpend(owner, quantities, excludedIds) {
33785
+ async getResourcesToSpend(owner, quantities, resourcesIdsToIgnore) {
32717
33786
  const ownerAddress = new Address(owner);
32718
- let idsToExclude = {
32719
- messages: excludedIds?.messages?.map((nonce) => hexlify(nonce)) || [],
32720
- utxos: excludedIds?.utxos?.map((id) => hexlify(id)) || []
32721
- };
32722
- if (this.cache) {
32723
- const cached = this.cache.getActiveData(ownerAddress.toB256());
32724
- if (cached.utxos.length || cached.messages.length) {
32725
- const {
32726
- consensusParameters: {
32727
- txParameters: { maxInputs }
32728
- }
32729
- } = await this.getChain();
32730
- idsToExclude = adjustResourcesToExclude({
32731
- userInput: idsToExclude,
32732
- cached,
32733
- maxInputs: maxInputs.toNumber()
32734
- });
32735
- }
32736
- }
33787
+ const excludedIds = await this.adjustResourcesToIgnoreForAddresses(
33788
+ [ownerAddress.b256Address],
33789
+ resourcesIdsToIgnore
33790
+ );
32737
33791
  const coinsQuery = {
32738
33792
  owner: ownerAddress.toB256(),
32739
33793
  queryPerAsset: quantities.map(coinQuantityfy).map(({ assetId, amount, max: maxPerAsset }) => ({
@@ -32741,7 +33795,7 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
32741
33795
  amount: (amount.eqn(0) ? bn(1) : amount).toString(10),
32742
33796
  max: maxPerAsset ? maxPerAsset.toString(10) : void 0
32743
33797
  })),
32744
- excludedIds: idsToExclude
33798
+ excludedIds
32745
33799
  };
32746
33800
  const result = await this.operations.getCoinsToSpend(coinsQuery);
32747
33801
  const coins = result.coinsToSpend.flat().map((coin) => {
@@ -33308,11 +34362,10 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
33308
34362
  /**
33309
34363
  * @hidden
33310
34364
  */
33311
- extractDryRunError(transactionRequest, receipts, dryRunStatus) {
33312
- const status = dryRunStatus;
34365
+ extractDryRunError(transactionRequest, receipts, reason) {
33313
34366
  let logs = [];
33314
34367
  let groupedLogs = {};
33315
- if (transactionRequest.abis) {
34368
+ if (transactionRequest.type === TransactionType.Script && transactionRequest.abis) {
33316
34369
  ({ logs, groupedLogs } = getAllDecodedLogs({
33317
34370
  receipts,
33318
34371
  mainAbi: transactionRequest.abis.main,
@@ -33323,7 +34376,7 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
33323
34376
  logs,
33324
34377
  groupedLogs,
33325
34378
  receipts,
33326
- statusReason: status.reason
34379
+ statusReason: reason
33327
34380
  });
33328
34381
  }
33329
34382
  /**
@@ -33350,6 +34403,45 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
33350
34403
  }
33351
34404
  return transactionRequest;
33352
34405
  }
34406
+ /**
34407
+ * @hidden
34408
+ *
34409
+ * This helper adjusts the resources to be excluded for a given set of addresses.
34410
+ * Supporting multiple addresses is important because of the `assembleTx` method,
34411
+ * which may be invoked with different addresses. It handles both messages and UTXOs,
34412
+ * ensuring the total number of inputs does not exceed the maximum allowed by the chain's
34413
+ * consensus parameters. The resources specified in the `resourcesIdsToIgnore` parameter have priority
34414
+ * over those retrieved from the cache.
34415
+ */
34416
+ async adjustResourcesToIgnoreForAddresses(addresses, resourcesIdsToIgnore) {
34417
+ const final = {
34418
+ messages: resourcesIdsToIgnore?.messages?.map((nonce) => hexlify(nonce)) || [],
34419
+ utxos: resourcesIdsToIgnore?.utxos?.map((id) => hexlify(id)) || []
34420
+ };
34421
+ if (this.cache) {
34422
+ const cache2 = this.cache;
34423
+ const allCached = addresses.map((address) => cache2.getActiveData(address));
34424
+ const {
34425
+ consensusParameters: {
34426
+ txParameters: { maxInputs: maxInputsBn }
34427
+ }
34428
+ } = await this.getChain();
34429
+ const maxInputs = maxInputsBn.toNumber();
34430
+ for (let i = 0; i < allCached.length; i++) {
34431
+ let total = final.utxos.length + final.messages.length;
34432
+ if (total >= maxInputs) {
34433
+ break;
34434
+ }
34435
+ final.utxos = [...final.utxos, ...allCached[i].utxos.slice(0, maxInputs - total)];
34436
+ total = final.utxos.length + final.messages.length;
34437
+ if (total >= maxInputs) {
34438
+ break;
34439
+ }
34440
+ final.messages = [...final.messages, ...allCached[i].messages.slice(0, maxInputs - total)];
34441
+ }
34442
+ }
34443
+ return final;
34444
+ }
33353
34445
  };
33354
34446
 
33355
34447
  // src/providers/transaction-summary/get-transaction-summary.ts
@@ -33516,20 +34608,29 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
33516
34608
  });
33517
34609
  }, "assembleTransactionSummaryFromJson");
33518
34610
 
33519
- // src/providers/utils/merge-quantities.ts
33520
- var mergeQuantities = /* @__PURE__ */ __name((...coinQuantities) => {
33521
- const resultMap = {};
33522
- function addToMap({ amount, assetId }) {
33523
- if (resultMap[assetId]) {
33524
- resultMap[assetId] = resultMap[assetId].add(amount);
33525
- } else {
33526
- resultMap[assetId] = amount;
33527
- }
33528
- }
33529
- __name(addToMap, "addToMap");
33530
- coinQuantities.forEach((arr) => arr.forEach(addToMap));
33531
- return Object.entries(resultMap).map(([assetId, amount]) => ({ assetId, amount }));
33532
- }, "mergeQuantities");
34611
+ // src/providers/utils/transaction-response-serialization.ts
34612
+ var deserializeTransactionResponseJson = /* @__PURE__ */ __name((json) => {
34613
+ const {
34614
+ id,
34615
+ abis,
34616
+ status,
34617
+ providerUrl,
34618
+ requestJson,
34619
+ providerCache,
34620
+ gqlTransaction,
34621
+ preConfirmationStatus
34622
+ } = json;
34623
+ const provider = new Provider(providerUrl, { cache: providerCache });
34624
+ const { chainId } = providerCache.chain.consensusParameters;
34625
+ const response = new TransactionResponse(id, provider, Number(chainId), abis);
34626
+ if (requestJson) {
34627
+ response.request = transactionRequestify(JSON.parse(requestJson));
34628
+ }
34629
+ response.status = status;
34630
+ response.gqlTransaction = gqlTransaction;
34631
+ response.preConfirmationStatus = preConfirmationStatus;
34632
+ return response;
34633
+ }, "deserializeTransactionResponseJson");
33533
34634
 
33534
34635
  // src/types.ts
33535
34636
  var AbstractAccount = class {
@@ -33575,6 +34676,18 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
33575
34676
  return { script, scriptData };
33576
34677
  }, "assembleTransferToContractScript");
33577
34678
 
34679
+ // src/utils/split-coins-into-batches.ts
34680
+ var splitCoinsIntoBatches = /* @__PURE__ */ __name((coins, maxBatchLength) => {
34681
+ const batchesNum = Math.ceil(coins.length / maxBatchLength);
34682
+ const batches = [];
34683
+ for (let i = 0; i < batchesNum; i += 1) {
34684
+ const batchStart = i * maxBatchLength;
34685
+ const batchEnd = (i + 1) * maxBatchLength;
34686
+ batches.push(coins.slice(batchStart, batchEnd));
34687
+ }
34688
+ return batches;
34689
+ }, "splitCoinsIntoBatches");
34690
+
33578
34691
  // src/account.ts
33579
34692
  var MAX_FUNDING_ATTEMPTS = 5;
33580
34693
  var Account = class extends AbstractAccount {
@@ -33641,11 +34754,11 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
33641
34754
  * Retrieves resources satisfying the spend query for the account.
33642
34755
  *
33643
34756
  * @param quantities - Quantities of resources to be obtained.
33644
- * @param excludedIds - IDs of resources to be excluded from the query (optional).
34757
+ * @param resourcesIdsToIgnore - IDs of resources to be excluded from the query (optional).
33645
34758
  * @returns A promise that resolves to an array of Resources.
33646
34759
  */
33647
- async getResourcesToSpend(quantities, excludedIds) {
33648
- return this.provider.getResourcesToSpend(this.address, quantities, excludedIds);
34760
+ async getResourcesToSpend(quantities, resourcesIdsToIgnore) {
34761
+ return this.provider.getResourcesToSpend(this.address, quantities, resourcesIdsToIgnore);
33649
34762
  }
33650
34763
  /**
33651
34764
  * Retrieves coins owned by the account.
@@ -33690,6 +34803,9 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
33690
34803
  * @param request - The transaction request to fund.
33691
34804
  * @param params - The estimated transaction parameters.
33692
34805
  * @returns A promise that resolves to the funded transaction request.
34806
+ *
34807
+ * @deprecated Use provider.assembleTx instead
34808
+ * Check the migration guide https://docs.fuel.network/guide/assembling-transactions/migration-guide.html for more information.
33693
34809
  */
33694
34810
  async fund(request2, params) {
33695
34811
  const {
@@ -33812,7 +34928,14 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
33812
34928
  amount,
33813
34929
  assetId: assetId || await this.provider.getBaseAssetId()
33814
34930
  });
33815
- request2 = await this.estimateAndFundTransaction(request2, txParams);
34931
+ const { gasPrice, transactionRequest } = await this.assembleTx(request2);
34932
+ request2 = await setAndValidateGasAndFeeForAssembledTx({
34933
+ gasPrice,
34934
+ provider: this.provider,
34935
+ transactionRequest,
34936
+ setGasLimit: txParams?.gasLimit,
34937
+ setMaxFee: txParams?.maxFee
34938
+ });
33816
34939
  return request2;
33817
34940
  }
33818
34941
  /**
@@ -33838,7 +34961,14 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
33838
34961
  async batchTransfer(transferParams, txParams = {}) {
33839
34962
  let request2 = new ScriptTransactionRequest(txParams);
33840
34963
  request2 = this.addBatchTransfer(request2, transferParams);
33841
- request2 = await this.estimateAndFundTransaction(request2, txParams);
34964
+ const { gasPrice, transactionRequest } = await this.assembleTx(request2);
34965
+ request2 = await setAndValidateGasAndFeeForAssembledTx({
34966
+ gasPrice,
34967
+ provider: this.provider,
34968
+ transactionRequest,
34969
+ setGasLimit: txParams?.gasLimit,
34970
+ setMaxFee: txParams?.maxFee
34971
+ });
33842
34972
  return this.sendTransaction(request2, { estimateTxDependencies: false });
33843
34973
  }
33844
34974
  /**
@@ -33910,7 +35040,14 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
33910
35040
  const { script, scriptData } = await assembleTransferToContractScript(transferParams);
33911
35041
  request2.script = script;
33912
35042
  request2.scriptData = scriptData;
33913
- request2 = await this.estimateAndFundTransaction(request2, txParams, { quantities });
35043
+ const { gasPrice, transactionRequest } = await this.assembleTx(request2, quantities);
35044
+ request2 = await setAndValidateGasAndFeeForAssembledTx({
35045
+ gasPrice,
35046
+ provider: this.provider,
35047
+ transactionRequest,
35048
+ setGasLimit: txParams?.gasLimit,
35049
+ setMaxFee: txParams?.maxFee
35050
+ });
33914
35051
  return this.sendTransaction(request2);
33915
35052
  }
33916
35053
  /**
@@ -33938,16 +35075,144 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
33938
35075
  const baseAssetId = await this.provider.getBaseAssetId();
33939
35076
  let request2 = new ScriptTransactionRequest(params);
33940
35077
  const quantities = [{ amount: bn(amount), assetId: baseAssetId }];
33941
- const txCost = await this.getTransactionCost(request2, { quantities });
33942
- request2 = this.validateGasLimitAndMaxFee({
33943
- transactionRequest: request2,
33944
- gasUsed: txCost.gasUsed,
33945
- maxFee: txCost.maxFee,
33946
- txParams
35078
+ const { gasPrice, transactionRequest } = await this.assembleTx(request2, quantities);
35079
+ request2 = await setAndValidateGasAndFeeForAssembledTx({
35080
+ gasPrice,
35081
+ provider: this.provider,
35082
+ transactionRequest,
35083
+ setGasLimit: txParams?.gasLimit,
35084
+ setMaxFee: txParams?.maxFee
33947
35085
  });
33948
- await this.fund(request2, txCost);
33949
35086
  return this.sendTransaction(request2);
33950
35087
  }
35088
+ /**
35089
+ * Consolidates base asset UTXOs into fewer, larger ones.
35090
+ *
35091
+ * Retrieves a limited number of base asset coins (as defined by `Provider.RESOURCES_PAGE_SIZE_LIMIT`),
35092
+ * assembles consolidation transactions, and submits them to the network.
35093
+ *
35094
+ * Note: This method currently supports only the base asset.
35095
+ *
35096
+ * @param params - The parameters for coin consolidation, including the asset ID, mode, and output number.
35097
+ * @returns A promise that resolves to the response of the submitted transactions.
35098
+ * @throws Will throw an error if the asset is not a base asset as non-base asset consolidation is not implemented.
35099
+ */
35100
+ async consolidateCoins(params) {
35101
+ const { assetId } = params;
35102
+ const { coins } = await this.getCoins(assetId);
35103
+ const baseAssetId = await this.provider.getBaseAssetId();
35104
+ const isBaseAsset = baseAssetId === assetId;
35105
+ let submitAll;
35106
+ const consolidationParams = {
35107
+ coins,
35108
+ mode: params.mode,
35109
+ outputNum: params.outputNum
35110
+ };
35111
+ if (isBaseAsset) {
35112
+ ({ submitAll } = await this.assembleBaseAssetConsolidationTxs(consolidationParams));
35113
+ } else {
35114
+ throw new FuelError(
35115
+ ErrorCode.UNSUPPORTED_FEATURE,
35116
+ "Consolidation for non-base assets is not supported yet."
35117
+ );
35118
+ }
35119
+ return submitAll();
35120
+ }
35121
+ /**
35122
+ * Assembles transactions for consolidating base asset coins into fewer UTXOs.
35123
+ *
35124
+ * This method splits the provided coins into batches and creates transaction requests
35125
+ * to consolidate them. It calculates the necessary fee and sets up the transactions
35126
+ * to be submitted either in parallel (default) or sequentially.
35127
+ *
35128
+ * @param params - The parameters for assembling base asset consolidation transactions.
35129
+ *
35130
+ * @returns An object containing the assembled transactions, the total fee cost, and a callback to submit all transactions.
35131
+ */
35132
+ async assembleBaseAssetConsolidationTxs(params) {
35133
+ const { coins, mode = "parallel", outputNum = 1 } = params;
35134
+ const baseAssetId = await this.provider.getBaseAssetId();
35135
+ this.validateConsolidationTxsCoins(coins, baseAssetId);
35136
+ const chainInfo = await this.provider.getChain();
35137
+ const maxInputsNumber = chainInfo.consensusParameters.txParameters.maxInputs.toNumber();
35138
+ let totalFeeCost = bn(0);
35139
+ const txs = [];
35140
+ const coinsBatches = splitCoinsIntoBatches(coins, maxInputsNumber);
35141
+ const gasPrice = await this.provider.estimateGasPrice(10);
35142
+ const consolidateMoreThanOneCoin = outputNum > 1;
35143
+ coinsBatches.filter((batch) => batch.length > 1).forEach((coinBatch) => {
35144
+ const request2 = new ScriptTransactionRequest({
35145
+ script: "0x"
35146
+ });
35147
+ request2.addResources(coinBatch);
35148
+ if (consolidateMoreThanOneCoin) {
35149
+ Array.from({ length: outputNum - 1 }).forEach(() => {
35150
+ request2.addCoinOutput(this.address, 0, baseAssetId);
35151
+ });
35152
+ }
35153
+ const minGas = request2.calculateMinGas(chainInfo);
35154
+ const fee = calculateGasFee({
35155
+ gasPrice,
35156
+ gas: minGas,
35157
+ priceFactor: chainInfo.consensusParameters.feeParameters.gasPriceFactor,
35158
+ tip: request2.tip
35159
+ });
35160
+ request2.maxFee = fee;
35161
+ if (consolidateMoreThanOneCoin) {
35162
+ const total = request2.inputs.filter(isRequestInputCoin).reduce((acc, input) => acc.add(input.amount), bn(0));
35163
+ const amountPerNewUtxo = total.div(outputNum + 1);
35164
+ request2.outputs.forEach((output) => {
35165
+ if (output.type === OutputType.Coin) {
35166
+ output.amount = amountPerNewUtxo;
35167
+ }
35168
+ });
35169
+ }
35170
+ totalFeeCost = totalFeeCost.add(fee);
35171
+ txs.push(request2);
35172
+ });
35173
+ const submitAll = this.prepareSubmitAll({ txs, mode });
35174
+ return { txs, totalFeeCost, submitAll };
35175
+ }
35176
+ /**
35177
+ * Prepares a function to submit all transactions either sequentially or in parallel.
35178
+ *
35179
+ * @param params - The parameters for preparing the submitAll callback.
35180
+ *
35181
+ * @returns A callback that, when called, submits all transactions and returns their results and any errors encountered.
35182
+ */
35183
+ prepareSubmitAll = /* @__PURE__ */ __name((params) => {
35184
+ const { txs, mode = "sequential" } = params;
35185
+ return async () => {
35186
+ const txResponses = [];
35187
+ const errors2 = [];
35188
+ if (mode === "sequential") {
35189
+ for (const tx of txs) {
35190
+ try {
35191
+ const submit = await this.sendTransaction(tx);
35192
+ const response = await submit.waitForResult();
35193
+ txResponses.push(response);
35194
+ } catch (error2) {
35195
+ errors2.push(error2);
35196
+ }
35197
+ }
35198
+ } else {
35199
+ const results = await Promise.allSettled(
35200
+ txs.map(async (tx) => {
35201
+ const submit = await this.sendTransaction(tx);
35202
+ return submit.waitForResult();
35203
+ })
35204
+ );
35205
+ results.forEach((result) => {
35206
+ if (result.status === "fulfilled") {
35207
+ txResponses.push(result.value);
35208
+ } else {
35209
+ errors2.push(result.reason);
35210
+ }
35211
+ });
35212
+ }
35213
+ return { txResponses, errors: errors2 };
35214
+ };
35215
+ }, "prepareSubmitAll");
33951
35216
  /**
33952
35217
  * Returns a transaction cost to enable user
33953
35218
  * to set gasLimit and also reserve balance amounts
@@ -33957,6 +35222,9 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
33957
35222
  * @param transactionCostParams - The transaction cost parameters (optional).
33958
35223
  *
33959
35224
  * @returns A promise that resolves to the transaction cost object.
35225
+ *
35226
+ * @deprecated Use provider.assembleTx instead
35227
+ * Check the migration guide https://docs.fuel.network/guide/assembling-transactions/migration-guide.html for more information.
33960
35228
  */
33961
35229
  async getTransactionCost(transactionRequestLike, { signatureCallback, quantities = [], gasPrice } = {}) {
33962
35230
  const txRequestClone = clone_default(transactionRequestify(transactionRequestLike));
@@ -34057,7 +35325,7 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
34057
35325
  transactionRequest,
34058
35326
  params
34059
35327
  );
34060
- return typeof transaction === "string" ? this.provider.getTransactionResponse(transaction) : transaction;
35328
+ return typeof transaction === "string" ? this.provider.getTransactionResponse(transaction) : deserializeTransactionResponseJson(transaction);
34061
35329
  }
34062
35330
  if (estimateTxDependencies) {
34063
35331
  await this.provider.estimateTxDependencies(transactionRequest);
@@ -34118,6 +35386,18 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
34118
35386
  } : void 0;
34119
35387
  }
34120
35388
  /** @hidden * */
35389
+ async assembleTx(transactionRequest, quantities = []) {
35390
+ const outputQuantities = transactionRequest.outputs.filter((o) => o.type === OutputType.Coin).map(({ amount, assetId }) => ({ assetId: String(assetId), amount: bn(amount) }));
35391
+ transactionRequest.gasLimit = bn(0);
35392
+ transactionRequest.maxFee = bn(0);
35393
+ const { assembledRequest, gasPrice } = await this.provider.assembleTx({
35394
+ request: transactionRequest,
35395
+ accountCoinQuantities: mergeQuantities(outputQuantities, quantities),
35396
+ feePayerAccount: this
35397
+ });
35398
+ return { transactionRequest: assembledRequest, gasPrice };
35399
+ }
35400
+ /** @hidden * */
34121
35401
  validateTransferAmount(amount) {
34122
35402
  if (bn(amount).lte(0)) {
34123
35403
  throw new FuelError(
@@ -34165,6 +35445,18 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
34165
35445
  }
34166
35446
  return request2;
34167
35447
  }
35448
+ /** @hidden * */
35449
+ validateConsolidationTxsCoins(coins, assetId) {
35450
+ if (coins.length <= 1) {
35451
+ throw new FuelError(ErrorCode.NO_COINS_TO_CONSOLIDATE, "No coins to consolidate.");
35452
+ }
35453
+ if (!coins.every((c) => c.assetId === assetId)) {
35454
+ throw new FuelError(
35455
+ ErrorCode.COINS_ASSET_ID_MISMATCH,
35456
+ "All coins to consolidate must be from the same asset id."
35457
+ );
35458
+ }
35459
+ }
34168
35460
  };
34169
35461
 
34170
35462
  // ../../node_modules/.pnpm/@noble+curves@1.8.1/node_modules/@noble/curves/esm/abstract/utils.js
@@ -39574,24 +40866,12 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
39574
40866
 
39575
40867
  // src/utils/deployScriptOrPredicate.ts
39576
40868
  async function fundBlobTx(deployer, blobTxRequest) {
39577
- let totalCost = bn(0);
39578
- const chainInfo = await deployer.provider.getChain();
39579
- const gasPrice = await deployer.provider.estimateGasPrice(10);
39580
- const priceFactor = chainInfo.consensusParameters.feeParameters.gasPriceFactor;
39581
- const minGas = blobTxRequest.calculateMinGas(chainInfo);
39582
- const minFee = calculateGasFee({
39583
- gasPrice,
39584
- gas: minGas,
39585
- priceFactor,
39586
- tip: blobTxRequest.tip
39587
- }).add(1);
39588
- totalCost = totalCost.add(minFee);
39589
- if (totalCost.gt(await deployer.getBalance())) {
39590
- throw new FuelError(ErrorCode.FUNDS_TOO_LOW, "Insufficient balance to deploy predicate.");
39591
- }
39592
- const txCost = await deployer.getTransactionCost(blobTxRequest);
39593
- blobTxRequest.maxFee = txCost.maxFee;
39594
- return deployer.fund(blobTxRequest, txCost);
40869
+ const { assembledRequest } = await deployer.provider.assembleTx({
40870
+ request: blobTxRequest,
40871
+ feePayerAccount: deployer,
40872
+ accountCoinQuantities: []
40873
+ });
40874
+ return assembledRequest;
39595
40875
  }
39596
40876
  __name(fundBlobTx, "fundBlobTx");
39597
40877
  function adjustConfigurableOffsets(jsonAbi, configurableOffsetDiff) {
@@ -40187,6 +41467,11 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
40187
41467
  const transactionRequest = transactionRequestify(transactionRequestLike);
40188
41468
  return super.simulateTransaction(transactionRequest, { estimateTxDependencies: false });
40189
41469
  }
41470
+ /**
41471
+ * Retrieves the properly encoded predicate data.
41472
+ *
41473
+ * @returns A Uint8Array containing the encoded predicate data. If no predicate data is available, returns an empty Uint8Array.
41474
+ */
40190
41475
  getPredicateData() {
40191
41476
  if (!this.predicateData.length) {
40192
41477
  return new Uint8Array();
@@ -40241,14 +41526,14 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
40241
41526
  * Retrieves resources satisfying the spend query for the account.
40242
41527
  *
40243
41528
  * @param quantities - IDs of coins to exclude.
40244
- * @param excludedIds - IDs of resources to be excluded from the query.
41529
+ * @param resourcesIdsToIgnore - IDs of resources to be excluded from the query.
40245
41530
  * @returns A promise that resolves to an array of Resources.
40246
41531
  */
40247
- async getResourcesToSpend(quantities, excludedIds) {
41532
+ async getResourcesToSpend(quantities, resourcesIdsToIgnore) {
40248
41533
  const resources = await this.provider.getResourcesToSpend(
40249
41534
  this.address,
40250
41535
  quantities,
40251
- excludedIds
41536
+ resourcesIdsToIgnore
40252
41537
  );
40253
41538
  return resources.map((resource) => ({
40254
41539
  ...resource,