@bitgo-beta/sdk-coin-sol 7.6.4-beta.709 → 7.6.4-beta.710

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 (26) hide show
  1. package/dist/cjs/src/lib/confidentialTransferBuilder.d.ts +36 -1
  2. package/dist/cjs/src/lib/confidentialTransferBuilder.d.ts.map +1 -1
  3. package/dist/cjs/src/lib/confidentialTransferBuilder.js +100 -1
  4. package/dist/cjs/src/lib/transaction.d.ts +22 -0
  5. package/dist/cjs/src/lib/transaction.d.ts.map +1 -1
  6. package/dist/cjs/src/lib/transaction.js +48 -2
  7. package/dist/cjs/src/lib/transactionBuilder.d.ts +7 -1
  8. package/dist/cjs/src/lib/transactionBuilder.d.ts.map +1 -1
  9. package/dist/cjs/src/lib/transactionBuilder.js +9 -1
  10. package/dist/cjs/test/unit/transactionBuilder/confidentialTransferV1.d.ts +2 -0
  11. package/dist/cjs/test/unit/transactionBuilder/confidentialTransferV1.d.ts.map +1 -0
  12. package/dist/cjs/test/unit/transactionBuilder/confidentialTransferV1.js +144 -0
  13. package/dist/cjs/test/unit/transactionBuilder/confidentialTransferV1Ops.d.ts +2 -0
  14. package/dist/cjs/test/unit/transactionBuilder/confidentialTransferV1Ops.d.ts.map +1 -0
  15. package/dist/cjs/test/unit/transactionBuilder/confidentialTransferV1Ops.js +167 -0
  16. package/dist/cjs/tsconfig.tsbuildinfo +1 -1
  17. package/dist/esm/lib/confidentialTransferBuilder.d.ts +36 -1
  18. package/dist/esm/lib/confidentialTransferBuilder.d.ts.map +1 -1
  19. package/dist/esm/lib/confidentialTransferBuilder.js +101 -2
  20. package/dist/esm/lib/transaction.d.ts +22 -0
  21. package/dist/esm/lib/transaction.d.ts.map +1 -1
  22. package/dist/esm/lib/transaction.js +48 -2
  23. package/dist/esm/lib/transactionBuilder.d.ts +7 -1
  24. package/dist/esm/lib/transactionBuilder.d.ts.map +1 -1
  25. package/dist/esm/lib/transactionBuilder.js +9 -1
  26. package/package.json +8 -8
@@ -1,5 +1,5 @@
1
1
  import { BaseCoin as CoinConfig } from '@bitgo-beta/statics';
2
- import { TransactionType } from '@bitgo-beta/sdk-core';
2
+ import { SolTransactionVersion, SolV1TransactionConfig, TransactionType } from '@bitgo-beta/sdk-core';
3
3
  import { Transaction } from './transaction';
4
4
  import { TransactionBuilder } from './transactionBuilder';
5
5
  import { ApplyPendingBalance, ConfidentialDeposit, ConfidentialTransfer, ConfidentialWithdraw, ConfigureConfidentialTransferAccount, VerifyEqualityProof, VerifyPubkeyValidity, VerifyRangeProof, VerifyValidityProof } from './iface';
@@ -29,8 +29,31 @@ import { ApplyPendingBalance, ConfidentialDeposit, ConfidentialTransfer, Confide
29
29
  */
30
30
  export declare class ConfidentialTransferBuilder extends TransactionBuilder {
31
31
  private _ctInstructions;
32
+ private _version?;
33
+ private _v1TransactionConfig?;
32
34
  constructor(_coinConfig: Readonly<CoinConfig>);
33
35
  protected get transactionType(): TransactionType;
36
+ /**
37
+ * Set the Solana transaction version.
38
+ *
39
+ * Defaults to legacy until set. When set to `1`, the builder assembles a v1
40
+ * (SIMD-0296/0385) transaction: version byte `0x81`, an inline `transactionConfig`
41
+ * instead of ComputeBudget instructions, no address lookup tables, and a
42
+ * message-first wire format with signatures appended.
43
+ *
44
+ * @param version - the transaction version (0 = v0, 1 = v1)
45
+ * @returns {this} This builder
46
+ */
47
+ version(version: SolTransactionVersion): this;
48
+ /**
49
+ * Set the v1 transaction config (compute unit limit, heap size, loaded accounts
50
+ * data size limit, and priority fee as total lamports). Required when
51
+ * `version(1)` is set.
52
+ *
53
+ * @param config - the v1 transaction config
54
+ * @returns {this} This builder
55
+ */
56
+ transactionConfig(config: SolV1TransactionConfig): this;
34
57
  /**
35
58
  * Override the zk-elgamal-proof program id.
36
59
  *
@@ -89,5 +112,17 @@ export declare class ConfidentialTransferBuilder extends TransactionBuilder {
89
112
  verifyRangeProof(params: VerifyRangeProof['params']): this;
90
113
  /** @inheritdoc */
91
114
  protected buildImplementation(): Promise<Transaction>;
115
+ /**
116
+ * Build a v1 (SIMD-0296/0385) confidential transfer transaction.
117
+ *
118
+ * Assembles the CT instructions via the shared instruction factory, compiles
119
+ * and serializes a v1 message with the inline transaction config, signs the
120
+ * message bytes with the builder's signers, and stores the resulting wire
121
+ * bytes for broadcast. Also populates a metadata-only SolTransaction so the
122
+ * transaction JSON and input/output extraction remain usable.
123
+ *
124
+ * @returns {Transaction} The built transaction holding the v1 wire bytes
125
+ */
126
+ private buildV1;
92
127
  }
93
128
  //# sourceMappingURL=confidentialTransferBuilder.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"confidentialTransferBuilder.d.ts","sourceRoot":"","sources":["../../../../src/lib/confidentialTransferBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAE1D,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EACnB,oBAAoB,EACpB,oBAAoB,EACpB,oCAAoC,EAEpC,mBAAmB,EACnB,oBAAoB,EACpB,gBAAgB,EAChB,mBAAmB,EACpB,MAAM,SAAS,CAAC;AAGjB;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,qBAAa,2BAA4B,SAAQ,kBAAkB;IACjE,OAAO,CAAC,eAAe,CAA2B;gBAEtC,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC;IAK7C,SAAS,KAAK,eAAe,IAAI,eAAe,CAE/C;IAED;;;;;;;;OAQG;IACH,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAMzC,kBAAkB;IAClB,WAAW,CAAC,EAAE,EAAE,WAAW,GAAG,IAAI;IAsBlC;;;;OAIG;IACH,gBAAgB,CAAC,MAAM,EAAE,oCAAoC,CAAC,QAAQ,CAAC,GAAG,IAAI;IAc9E;;;;OAIG;IACH,mBAAmB,CAAC,MAAM,EAAE,mBAAmB,CAAC,QAAQ,CAAC,GAAG,IAAI;IAahE;;;OAGG;IACH,mBAAmB,CAAC,MAAM,EAAE,mBAAmB,CAAC,QAAQ,CAAC,GAAG,IAAI;IAahE;;;;OAIG;IACH,oBAAoB,CAAC,MAAM,EAAE,oBAAoB,CAAC,QAAQ,CAAC,GAAG,IAAI;IAclE;;;OAGG;IACH,oBAAoB,CAAC,MAAM,EAAE,oBAAoB,CAAC,QAAQ,CAAC,GAAG,IAAI;IAgBlE;;OAEG;IACH,oBAAoB,CAAC,MAAM,EAAE,oBAAoB,CAAC,QAAQ,CAAC,GAAG,IAAI;IAQlE;;OAEG;IACH,mBAAmB,CAAC,MAAM,EAAE,mBAAmB,CAAC,QAAQ,CAAC,GAAG,IAAI;IAQhE;;OAEG;IACH,mBAAmB,CAAC,MAAM,EAAE,mBAAmB,CAAC,QAAQ,CAAC,GAAG,IAAI;IAQhE;;OAEG;IACH,gBAAgB,CAAC,MAAM,EAAE,gBAAgB,CAAC,QAAQ,CAAC,GAAG,IAAI;IAQ1D,kBAAkB;cACF,mBAAmB,IAAI,OAAO,CAAC,WAAW,CAAC;CAO5D"}
1
+ {"version":3,"file":"confidentialTransferBuilder.d.ts","sourceRoot":"","sources":["../../../../src/lib/confidentialTransferBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAyB,qBAAqB,EAAE,sBAAsB,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAG7H,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAE1D,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EACnB,oBAAoB,EACpB,oBAAoB,EACpB,oCAAoC,EAGpC,mBAAmB,EACnB,oBAAoB,EACpB,gBAAgB,EAChB,mBAAmB,EACpB,MAAM,SAAS,CAAC;AAMjB;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,qBAAa,2BAA4B,SAAQ,kBAAkB;IACjE,OAAO,CAAC,eAAe,CAA2B;IAClD,OAAO,CAAC,QAAQ,CAAC,CAAwB;IACzC,OAAO,CAAC,oBAAoB,CAAC,CAAyB;gBAE1C,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC;IAK7C,SAAS,KAAK,eAAe,IAAI,eAAe,CAE/C;IAED;;;;;;;;;;OAUG;IACH,OAAO,CAAC,OAAO,EAAE,qBAAqB,GAAG,IAAI;IAK7C;;;;;;;OAOG;IACH,iBAAiB,CAAC,MAAM,EAAE,sBAAsB,GAAG,IAAI;IAKvD;;;;;;;;OAQG;IACH,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAMzC,kBAAkB;IAClB,WAAW,CAAC,EAAE,EAAE,WAAW,GAAG,IAAI;IAsBlC;;;;OAIG;IACH,gBAAgB,CAAC,MAAM,EAAE,oCAAoC,CAAC,QAAQ,CAAC,GAAG,IAAI;IAc9E;;;;OAIG;IACH,mBAAmB,CAAC,MAAM,EAAE,mBAAmB,CAAC,QAAQ,CAAC,GAAG,IAAI;IAahE;;;OAGG;IACH,mBAAmB,CAAC,MAAM,EAAE,mBAAmB,CAAC,QAAQ,CAAC,GAAG,IAAI;IAahE;;;;OAIG;IACH,oBAAoB,CAAC,MAAM,EAAE,oBAAoB,CAAC,QAAQ,CAAC,GAAG,IAAI;IAclE;;;OAGG;IACH,oBAAoB,CAAC,MAAM,EAAE,oBAAoB,CAAC,QAAQ,CAAC,GAAG,IAAI;IAgBlE;;OAEG;IACH,oBAAoB,CAAC,MAAM,EAAE,oBAAoB,CAAC,QAAQ,CAAC,GAAG,IAAI;IAQlE;;OAEG;IACH,mBAAmB,CAAC,MAAM,EAAE,mBAAmB,CAAC,QAAQ,CAAC,GAAG,IAAI;IAQhE;;OAEG;IACH,mBAAmB,CAAC,MAAM,EAAE,mBAAmB,CAAC,QAAQ,CAAC,GAAG,IAAI;IAQhE;;OAEG;IACH,gBAAgB,CAAC,MAAM,EAAE,gBAAgB,CAAC,QAAQ,CAAC,GAAG,IAAI;IAQ1D,kBAAkB;cACF,mBAAmB,IAAI,OAAO,CAAC,WAAW,CAAC;IAY3D;;;;;;;;;;OAUG;IACH,OAAO,CAAC,OAAO;CA+DhB"}
@@ -5,9 +5,14 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.ConfidentialTransferBuilder = void 0;
7
7
  const sdk_core_1 = require("@bitgo-beta/sdk-core");
8
+ const web3_js_1 = require("@solana/web3.js");
9
+ const tweetnacl_1 = __importDefault(require("tweetnacl"));
8
10
  const transaction_1 = require("./transaction");
9
11
  const transactionBuilder_1 = require("./transactionBuilder");
10
12
  const constants_1 = require("./constants");
13
+ const compileTransactionMessage_1 = require("./serialization/compileTransactionMessage");
14
+ const wire_transaction_1 = require("./serialization/wire-transaction");
15
+ const solInstructionFactory_1 = require("./solInstructionFactory");
11
16
  const assert_1 = __importDefault(require("assert"));
12
17
  /**
13
18
  * Builder for Token-2022 confidential transfer transactions.
@@ -42,6 +47,33 @@ class ConfidentialTransferBuilder extends transactionBuilder_1.TransactionBuilde
42
47
  get transactionType() {
43
48
  return sdk_core_1.TransactionType.ConfidentialTransfer;
44
49
  }
50
+ /**
51
+ * Set the Solana transaction version.
52
+ *
53
+ * Defaults to legacy until set. When set to `1`, the builder assembles a v1
54
+ * (SIMD-0296/0385) transaction: version byte `0x81`, an inline `transactionConfig`
55
+ * instead of ComputeBudget instructions, no address lookup tables, and a
56
+ * message-first wire format with signatures appended.
57
+ *
58
+ * @param version - the transaction version (0 = v0, 1 = v1)
59
+ * @returns {this} This builder
60
+ */
61
+ version(version) {
62
+ this._version = version;
63
+ return this;
64
+ }
65
+ /**
66
+ * Set the v1 transaction config (compute unit limit, heap size, loaded accounts
67
+ * data size limit, and priority fee as total lamports). Required when
68
+ * `version(1)` is set.
69
+ *
70
+ * @param config - the v1 transaction config
71
+ * @returns {this} This builder
72
+ */
73
+ transactionConfig(config) {
74
+ this._v1TransactionConfig = config;
75
+ return this;
76
+ }
45
77
  /**
46
78
  * Override the zk-elgamal-proof program id.
47
79
  *
@@ -204,9 +236,76 @@ class ConfidentialTransferBuilder extends transactionBuilder_1.TransactionBuilde
204
236
  /** @inheritdoc */
205
237
  async buildImplementation() {
206
238
  (0, assert_1.default)(this._ctInstructions.length > 0, 'At least one confidential transfer instruction must be specified');
239
+ if (this._version === 1) {
240
+ return this.buildV1();
241
+ }
207
242
  this._instructionsData = [...this._ctInstructions];
208
243
  return await super.buildImplementation();
209
244
  }
245
+ /**
246
+ * Build a v1 (SIMD-0296/0385) confidential transfer transaction.
247
+ *
248
+ * Assembles the CT instructions via the shared instruction factory, compiles
249
+ * and serializes a v1 message with the inline transaction config, signs the
250
+ * message bytes with the builder's signers, and stores the resulting wire
251
+ * bytes for broadcast. Also populates a metadata-only SolTransaction so the
252
+ * transaction JSON and input/output extraction remain usable.
253
+ *
254
+ * @returns {Transaction} The built transaction holding the v1 wire bytes
255
+ */
256
+ buildV1() {
257
+ (0, assert_1.default)(this._sender, new sdk_core_1.BuildTransactionError('sender is required before building'));
258
+ (0, assert_1.default)(this._recentBlockhash, new sdk_core_1.BuildTransactionError('recent blockhash is required before building'));
259
+ (0, assert_1.default)(this._v1TransactionConfig, 'transactionConfig is required to build a v1 confidential transfer transaction');
260
+ // ApplyPendingBalance must remain instruction #1 in v1 spend txs (it is idempotent),
261
+ // regardless of the order the caller added instructions.
262
+ this._ctInstructions = [
263
+ ...this._ctInstructions.filter((i) => i.type === constants_1.InstructionBuilderTypes.ApplyPendingBalance),
264
+ ...this._ctInstructions.filter((i) => i.type !== constants_1.InstructionBuilderTypes.ApplyPendingBalance),
265
+ ];
266
+ const instructions = [];
267
+ for (const instruction of this._ctInstructions) {
268
+ instructions.push(...(0, solInstructionFactory_1.solInstructionFactory)(instruction, this._zkProofProgramId));
269
+ }
270
+ if (this._memo) {
271
+ const memoData = {
272
+ type: constants_1.InstructionBuilderTypes.Memo,
273
+ params: { memo: this._memo },
274
+ };
275
+ this._ctInstructions.push(memoData);
276
+ instructions.push(...(0, solInstructionFactory_1.solInstructionFactory)(memoData));
277
+ }
278
+ const feePayer = this._feePayer ? new web3_js_1.PublicKey(this._feePayer) : new web3_js_1.PublicKey(this._sender);
279
+ const messageBytes = (0, compileTransactionMessage_1.compileTransactionMessage)({
280
+ version: 1,
281
+ instructions,
282
+ feePayer,
283
+ recentBlockhash: this._recentBlockhash,
284
+ transactionConfig: this._v1TransactionConfig,
285
+ });
286
+ const signatures = [];
287
+ for (const signer of this._signers) {
288
+ const secretKey = signer.getKeys(true).prv;
289
+ (0, assert_1.default)(secretKey instanceof Uint8Array, 'Missing private key');
290
+ signatures.push(tweetnacl_1.default.sign.detached(messageBytes, secretKey));
291
+ }
292
+ for (const signature of this.getAdditionalSignatures()) {
293
+ signatures.push(new Uint8Array(signature.signature));
294
+ }
295
+ const v1Wire = (0, wire_transaction_1.serializeWireTransaction)(messageBytes, signatures);
296
+ this._transaction.v1TransactionBytes = v1Wire;
297
+ this._transaction.v1MessageBytes = messageBytes;
298
+ // Populate a metadata-only SolTransaction so toJson / loadInputsAndOutputs work.
299
+ const metaTx = new web3_js_1.Transaction();
300
+ metaTx.feePayer = feePayer;
301
+ metaTx.recentBlockhash = this._recentBlockhash;
302
+ metaTx.add(...instructions);
303
+ this._transaction.solTransaction = metaTx;
304
+ this._transaction.setTransactionType(this.transactionType);
305
+ this._transaction.setInstructionsData(this._ctInstructions);
306
+ this._transaction.loadInputsAndOutputs();
307
+ return this._transaction;
308
+ }
210
309
  }
211
310
  exports.ConfidentialTransferBuilder = ConfidentialTransferBuilder;
212
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlkZW50aWFsVHJhbnNmZXJCdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9jb25maWRlbnRpYWxUcmFuc2ZlckJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQ0EsbURBQXVEO0FBQ3ZELCtDQUE0QztBQUM1Qyw2REFBMEQ7QUFDMUQsMkNBQXNEO0FBYXRELG9EQUE0QjtBQUU1Qjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F1Qkc7QUFDSCxNQUFhLDJCQUE0QixTQUFRLHVDQUFrQjtJQUdqRSxZQUFZLFdBQWlDO1FBQzNDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUhiLG9CQUFlLEdBQXdCLEVBQUUsQ0FBQztRQUloRCxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUkseUJBQVcsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUNuRCxDQUFDO0lBRUQsSUFBYyxlQUFlO1FBQzNCLE9BQU8sMEJBQWUsQ0FBQyxvQkFBb0IsQ0FBQztJQUM5QyxDQUFDO0lBRUQ7Ozs7Ozs7O09BUUc7SUFDSCxnQkFBZ0IsQ0FBQyxTQUFpQjtRQUNoQyxJQUFBLGdCQUFNLEVBQUMsU0FBUyxFQUFFLHlCQUF5QixDQUFDLENBQUM7UUFDN0MsSUFBSSxDQUFDLGlCQUFpQixHQUFHLFNBQVMsQ0FBQztRQUNuQyxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxrQkFBa0I7SUFDbEIsV0FBVyxDQUFDLEVBQWU7UUFDekIsS0FBSyxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN0QixJQUFJLENBQUMsZUFBZSxHQUFHLEVBQUUsQ0FBQztRQUMxQixLQUFLLE1BQU0sV0FBVyxJQUFJLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1lBQ2pELFFBQVEsV0FBVyxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUN6QixLQUFLLG1DQUF1QixDQUFDLG9DQUFvQyxDQUFDO2dCQUNsRSxLQUFLLG1D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b250ZW50IjpbImltcG9ydCB7IEJhc2VDb2luIGFzIENvaW5Db25maWcgfSBmcm9tICdAYml0Z28tYmV0YS9zdGF0aWNzJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uVHlwZSB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uIH0gZnJvbSAnLi90cmFuc2FjdGlvbic7XG5pbXBvcnQgeyBUcmFuc2FjdGlvbkJ1aWxkZXIgfSBmcm9tICcuL3RyYW5zYWN0aW9uQnVpbGRlcic7XG5pbXBvcnQgeyBJbnN0cnVjdGlvbkJ1aWxkZXJUeXBlcyB9IGZyb20gJy4vY29uc3RhbnRzJztcbmltcG9ydCB7XG4gIEFwcGx5UGVuZGluZ0JhbGFuY2UsXG4gIENvbmZpZGVudGlhbERlcG9zaXQsXG4gIENvbmZpZGVudGlhbFRyYW5zZmVyLFxuICBDb25maWRlbnRpYWxXaXRoZHJhdyxcbiAgQ29uZmlndXJlQ29uZmlkZW50aWFsVHJhbnNmZXJBY2NvdW50LFxuICBJbnN0cnVjdGlvblBhcmFtcyxcbiAgVmVyaWZ5RXF1YWxpdHlQcm9vZixcbiAgVmVyaWZ5UHVia2V5VmFsaWRpdHksXG4gIFZlcmlmeVJhbmdlUHJvb2YsXG4gIFZlcmlmeVZhbGlkaXR5UHJvb2YsXG59IGZyb20gJy4vaWZhY2UnO1xuaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuXG4vKipcbiAqIEJ1aWxkZXIgZm9yIFRva2VuLTIwMjIgY29uZmlkZW50aWFsIHRyYW5zZmVyIHRyYW5zYWN0aW9ucy5cbiAqXG4gKiBQcm92aWRlcyB0eXBlLXNhZmUgZmx1ZW50IHNldHRlcnMgZm9yIHRoZSBmb2xsb3dpbmcgQ1QgaW5zdHJ1Y3Rpb25zOlxuICogLSBDb25maWd1cmVBY2NvdW50IChzdGFuZGFsb25lLCB3aXRoIFZlcmlmeVB1YmtleVZhbGlkaXR5IHByb29mKVxuICogLSBBcHBseVBlbmRpbmdCYWxhbmNlIChhbHdheXMgaW5zdHJ1Y3Rpb24gIzEgaW4gdjEgc3BlbmQgdHhzLCBpZGVtcG90ZW50KVxuICogLSBEZXBvc2l0IChwdWJsaWMg4oaSIGNvbmZpZGVudGlhbCBjb252ZXJzaW9uKVxuICogLSBXaXRoZHJhdyAoY29uZmlkZW50aWFsIOKGkiBwdWJsaWMgY29udmVyc2lvbiwgd2l0aCBlcXVhbGl0eSArIHJhbmdlIHByb29mcylcbiAqIC0gVHJhbnNmZXIgKGNvbmZpZGVudGlhbCDihpIgY29uZmlkZW50aWFsLCB3aXRoIGVxdWFsaXR5ICsgdmFsaWRpdHkgKyByYW5nZSBwcm9vZnMpXG4gKiAtIFZlcmlmeVB1YmtleVZhbGlkaXR5IC8gVmVyaWZ5RXF1YWxpdHkgLyBWZXJpZnlWYWxpZGl0eSAvIFZlcmlmeVJhbmdlIHByb29mIGluc3RydWN0aW9uc1xuICpcbiAqIEluc3RydWN0aW9uIGJ1aWxkZXJzIGFyZSB2MC92MS1hZ25vc3RpYzogdGhleSBwcm9kdWNlIGluc3RydWN0aW9uIGRhdGEgYW5kXG4gKiBhY2NvdW50IG1ldGFzIG9ubHkuIFRoZSBjYWxsZXIgKFdhbGxldCBQbGF0Zm9ybSkgYXNzZW1ibGVzIHRoZW0gaW50byB2MVxuICogdHJhbnNhY3Rpb25zIGluIHRoZSBjb3JyZWN0IG9yZGVyLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogY29uc3QgYnVpbGRlciA9IGZhY3RvcnkuZ2V0Q29uZmlkZW50aWFsVHJhbnNmZXJCdWlsZGVyKCk7XG4gKiBidWlsZGVyLm5vbmNlKHJlY2VudEJsb2NraGFzaCkuc2VuZGVyKHBheWVyKTtcbiAqIGJ1aWxkZXIuY29uZmlndXJlQWNjb3VudCh7IHRva2VuQWRkcmVzcywgbWludEFkZHJlc3MsIGF1dGhvcml0eUFkZHJlc3MsIC4uLiB9KTtcbiAqIGJ1aWxkZXIudmVyaWZ5UHVia2V5VmFsaWRpdHkoeyBwcm9vZkRhdGEgfSk7XG4gKiBjb25zdCB0eCA9IGF3YWl0IGJ1aWxkZXIuYnVpbGQoKTtcbiAqIGBgYFxuICovXG5leHBvcnQgY2xhc3MgQ29uZmlkZW50aWFsVHJhbnNmZXJCdWlsZGVyIGV4dGVuZHMgVHJhbnNhY3Rpb25CdWlsZGVyIHtcbiAgcHJpdmF0ZSBfY3RJbnN0cnVjdGlvbnM6IEluc3RydWN0aW9uUGFyYW1zW10gPSBbXTtcblxuICBjb25zdHJ1Y3RvcihfY29pbkNvbmZpZzogUmVhZG9ubHk8Q29pbkNvbmZpZz4pIHtcbiAgICBzdXBlcihfY29pbkNvbmZpZyk7XG4gICAgdGhpcy5fdHJhbnNhY3Rpb24gPSBuZXcgVHJhbnNhY3Rpb24oX2NvaW5Db25maWcpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldCB0cmFuc2FjdGlvblR5cGUoKTogVHJhbnNhY3Rpb25UeXBlIHtcbiAgICByZXR1cm4gVHJhbnNhY3Rpb25UeXBlLkNvbmZpZGVudGlhbFRyYW5zZmVyO1xuICB9XG5cbiAgLyoqXG4gICAqIE92ZXJyaWRlIHRoZSB6ay1lbGdhbWFsLXByb29mIHByb2dyYW0gaWQuXG4gICAqXG4gICAqIERlZmF1bHRzIHRvIHRoZSBjYW5vbmljYWwgb24tY2hhaW4gcHJvZ3JhbSBpZCAoYFprRTFHYW1hMVByb29mMTExLi4uYClcbiAgICogd2hpY2ggaXMgdGhlIHNhbWUgYWNyb3NzIG1haW5uZXQsIGRldm5ldCwgYW5kIHRlc3RuZXQuIE92ZXJyaWRlIG9ubHlcbiAgICogd2hlbiB0YXJnZXRpbmcgYSBjdXN0b20gZGVwbG95bWVudC5cbiAgICpcbiAgICogQHBhcmFtIHByb2dyYW1JZCAtIGJhc2U1OCBlbmNvZGVkIHByb2dyYW0gaWRcbiAgICovXG4gIHprUHJvb2ZQcm9ncmFtSWQocHJvZ3JhbUlkOiBzdHJpbmcpOiB0aGlzIHtcbiAgICBhc3NlcnQocHJvZ3JhbUlkLCAnTWlzc2luZyBwcm9ncmFtSWQgcGFyYW0nKTtcbiAgICB0aGlzLl96a1Byb29mUHJvZ3JhbUlkID0gcHJvZ3JhbUlkO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIGluaXRCdWlsZGVyKHR4OiBUcmFuc2FjdGlvbik6IHZvaWQge1xuICAgIHN1cGVyLmluaXRCdWlsZGVyKHR4KTtcbiAgICB0aGlzLl9jdEluc3RydWN0aW9ucyA9IFtdO1xuICAgIGZvciAoY29uc3QgaW5zdHJ1Y3Rpb24gb2YgdGhpcy5faW5zdHJ1Y3Rpb25zRGF0YSkge1xuICAgICAgc3dpdGNoIChpbnN0cnVjdGlvbi50eXBlKSB7XG4gICAgICAgIGNhc2UgSW5zdHJ1Y3Rpb25CdWlsZGVyVHlwZXMuQ29uZmlndXJlQ29uZmlkZW50aWFsVHJhbnNmZXJBY2NvdW50OlxuICAgICAgICBjYXNlIEluc3RydWN0aW9uQnVpbGRlclR5cGVzLkFwcGx5UGVuZGluZ0JhbGFuY2U6XG4gICAgICAgIGNhc2UgSW5zdHJ1Y3Rpb25CdWlsZGVyVHlwZXMuQ29uZmlkZW50aWFsRGVwb3NpdDpcbiAgICAgICAgY2FzZSBJbnN0cnVjdGlvbkJ1aWxkZXJUeXBlcy5Db25maWRlbnRpYWxXaXRoZHJhdzpcbiAgICAgICAgY2FzZSBJbnN0cnVjdGlvbkJ1aWxkZXJUeXBlcy5Db25maWRlbnRpYWxUcmFuc2ZlcjpcbiAgICAgICAgY2FzZSBJbnN0cnVjdGlvbkJ1aWxkZXJUeXBlcy5WZXJpZnlQdWJrZXlWYWxpZGl0eTpcbiAgICAgICAgY2FzZSBJbnN0cnVjdGlvbkJ1aWxkZXJUeXBlcy5WZXJpZnlFcXVhbGl0eVByb29mOlxuICAgICAgICBjYXNlIEluc3RydWN0aW9uQnVpbGRlclR5cGVzLlZlcmlmeVZhbGlkaXR5UHJvb2Y6XG4gICAgICAgIGNhc2UgSW5zdHJ1Y3Rpb25CdWlsZGVyVHlwZXMuVmVyaWZ5UmFuZ2VQcm9vZjpcbiAgICAgICAgICB0aGlzLl9jdEluc3RydWN0aW9ucy5wdXNoKGluc3RydWN0aW9uKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQWRkIGEgQ29uZmlndXJlQWNjb3VudCBpbnN0cnVjdGlvbiB0byB0aGUgdHJhbnNhY3Rpb24uXG4gICAqIE9uZS10aW1lIEFUQSBzZXR1cCDigJQgcmVnaXN0ZXJzIEVsR2FtYWwgcHVia2V5ICsgQUVTIHplcm8gY2lwaGVydGV4dC5cbiAgICogTXVzdCBiZSBhY2NvbXBhbmllZCBieSBhIFZlcmlmeVB1YmtleVZhbGlkaXR5IHByb29mIGluc3RydWN0aW9uLlxuICAgKi9cbiAgY29uZmlndXJlQWNjb3VudChwYXJhbXM6IENvbmZpZ3VyZUNvbmZpZGVudGlhbFRyYW5zZmVyQWNjb3VudFsncGFyYW1zJ10pOiB0aGlzIHtcbiAgICBhc3NlcnQocGFyYW1zLnRva2VuQWRkcmVzcywgJ01pc3NpbmcgdG9rZW5BZGRyZXNzIHBhcmFtJyk7XG4gICAgYXNzZXJ0KHBhcmFtcy5taW50QWRkcmVzcywgJ01pc3NpbmcgbWludEFkZHJlc3MgcGFyYW0nKTtcbiAgICBhc3NlcnQocGFyYW1zLmF1dGhvcml0eUFkZHJlc3MsICdNaXNzaW5nIGF1dGhvcml0eUFkZHJlc3MgcGFyYW0nKTtcbiAgICBhc3NlcnQocGFyYW1zLmRlY3J5cHRhYmxlWmVyb0JhbGFuY2UsICdNaXNzaW5nIGRlY3J5cHRhYmxlWmVyb0JhbGFuY2UgcGFyYW0nKTtcbiAgICBhc3NlcnQocGFyYW1zLm1heGltdW1QZW5kaW5nQmFsYW5jZUNyZWRpdENvdW50ZXIsICdNaXNzaW5nIG1heGltdW1QZW5kaW5nQmFsYW5jZUNyZWRpdENvdW50ZXIgcGFyYW0nKTtcblxuICAgIHRoaXMuX2N0SW5zdHJ1Y3Rpb25zLnB1c2goe1xuICAgICAgdHlwZTogSW5zdHJ1Y3Rpb25CdWlsZGVyVHlwZXMuQ29uZmlndXJlQ29uZmlkZW50aWFsVHJhbnNmZXJBY2NvdW50LFxuICAgICAgcGFyYW1zLFxuICAgIH0pO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhbiBBcHBseVBlbmRpbmdCYWxhbmNlIGluc3RydWN0aW9uIHRvIHRoZSB0cmFuc2FjdGlvbi5cbiAgICogQ3JlZGl0cyBwZW5kaW5nIGJhbGFuY2UgaW50byBhdmFpbGFibGUgYmFsYW5jZS4gSWRlbXBvdGVudCAobm8tb3AgaWYgMCBwZW5kaW5nKS5cbiAgICogSW4gdjEgdHJhbnNhY3Rpb25zLCB0aGlzIHNob3VsZCBhbHdheXMgYmUgaW5zdHJ1Y3Rpb24gIzEuXG4gICAqL1xuICBhcHBseVBlbmRpbmdCYWxhbmNlKHBhcmFtczogQXBwbHlQZW5kaW5nQmFsYW5jZVsncGFyYW1zJ10pOiB0aGlzIHtcbiAgICBhc3NlcnQocGFyYW1zLnRva2VuQWRkcmVzcywgJ01pc3NpbmcgdG9rZW5BZGRyZXNzIHBhcmFtJyk7XG4gICAgYXNzZXJ0KHBhcmFtcy5hdXRob3JpdHlBZGRyZXNzLCAnTWlzc2luZyBhdXRob3JpdHlBZGRyZXNzIHBhcmFtJyk7XG4gICAgYXNzZXJ0KHBhcmFtcy5leHBlY3RlZFBlbmRpbmdCYWxhbmNlQ3JlZGl0Q291bnRlciwgJ01pc3NpbmcgZXhwZWN0ZWRQZW5kaW5nQmFsYW5jZUNyZWRpdENvdW50ZXIgcGFyYW0nKTtcbiAgICBhc3NlcnQocGFyYW1zLm5ld0RlY3J5cHRhYmxlQXZhaWxhYmxlQmFsYW5jZSwgJ01pc3NpbmcgbmV3RGVjcnlwdGFibGVBdmFpbGFibGVCYWxhbmNlIHBhcmFtJyk7XG5cbiAgICB0aGlzLl9jdEluc3RydWN0aW9ucy5wdXNoKHtcbiAgICAgIHR5cGU6IEluc3RydWN0aW9uQnVpbGRlclR5cGVzLkFwcGx5UGVuZGluZ0JhbGFuY2UsXG4gICAgICBwYXJhbXMsXG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQWRkIGEgRGVwb3NpdCBpbnN0cnVjdGlvbiB0byB0aGUgdHJhbnNhY3Rpb24uXG4gICAqIE1vdmVzIHB1YmxpYyBTUEwgdG9rZW5zIGludG8gY29uZmlkZW50aWFsIHBlbmRpbmcgYmFsYW5jZS4gTm8gcHJvb2YgcmVxdWlyZWQuXG4gICAqL1xuICBjb25maWRlbnRpYWxEZXBvc2l0KHBhcmFtczogQ29uZmlkZW50aWFsRGVwb3NpdFsncGFyYW1zJ10pOiB0aGlzIHtcbiAgICBhc3NlcnQocGFyYW1zLnRva2VuQWRkcmVzcywgJ01pc3NpbmcgdG9rZW5BZGRyZXNzIHBhcmFtJyk7XG4gICAgYXNzZXJ0KHBhcmFtcy5taW50QWRkcmVzcywgJ01pc3NpbmcgbWludEFkZHJlc3MgcGFyYW0nKTtcbiAgICBhc3NlcnQocGFyYW1zLmF1dGhvcml0eUFkZHJlc3MsICdNaXNzaW5nIGF1dGhvcml0eUFkZHJlc3MgcGFyYW0nKTtcbiAgICBhc3NlcnQocGFyYW1zLmFtb3VudCwgJ01pc3NpbmcgYW1vdW50IHBhcmFtJyk7XG5cbiAgICB0aGlzLl9jdEluc3RydWN0aW9ucy5wdXNoKHtcbiAgICAgIHR5cGU6IEluc3RydWN0aW9uQnVpbGRlclR5cGVzLkNvbmZpZGVudGlhbERlcG9zaXQsXG4gICAgICBwYXJhbXMsXG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQWRkIGEgV2l0aGRyYXcgaW5zdHJ1Y3Rpb24gdG8gdGhlIHRyYW5zYWN0aW9uLlxuICAgKiBNb3ZlcyBjb25maWRlbnRpYWwgYXZhaWxhYmxlIGJhbGFuY2UgdG8gcHVibGljIGJhbGFuY2UuXG4gICAqIFJlcXVpcmVzIGVxdWFsaXR5ICsgcmFuZ2UgcHJvb2YgdmVyaWZpY2F0aW9uIGluc3RydWN0aW9ucy5cbiAgICovXG4gIGNvbmZpZGVudGlhbFdpdGhkcmF3KHBhcmFtczogQ29uZmlkZW50aWFsV2l0aGRyYXdbJ3BhcmFtcyddKTogdGhpcyB7XG4gICAgYXNzZXJ0KHBhcmFtcy50b2tlbkFkZHJlc3MsICdNaXNzaW5nIHRva2VuQWRkcmVzcyBwYXJhbScpO1xuICAgIGFzc2VydChwYXJhbXMubWludEFkZHJlc3MsICdNaXNzaW5nIG1pbnRBZGRyZXNzIHBhcmFtJyk7XG4gICAgYXNzZXJ0KHBhcmFtcy5hdXRob3JpdHlBZGRyZXNzLCAnTWlzc2luZyBhdXRob3JpdHlBZGRyZXNzIHBhcmFtJyk7XG4gICAgYXNzZXJ0KHBhcmFtcy5hbW91bnQsICdNaXNzaW5nIGFtb3VudCBwYXJhbScpO1xuICAgIGFzc2VydChwYXJhbXMubmV3RGVjcnlwdGFibGVBdmFpbGFibGVCYWxhbmNlLCAnTWlzc2luZyBuZXdEZWNyeXB0YWJsZUF2YWlsYWJsZUJhbGFuY2UgcGFyYW0nKTtcblxuICAgIHRoaXMuX2N0SW5zdHJ1Y3Rpb25zLnB1c2goe1xuICAgICAgdHlwZTogSW5zdHJ1Y3Rpb25CdWlsZGVyVHlwZXMuQ29uZmlkZW50aWFsV2l0aGRyYXcsXG4gICAgICBwYXJhbXMsXG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQWRkIGEgY29uZmlkZW50aWFsIFRyYW5zZmVyIGluc3RydWN0aW9uIHRvIHRoZSB0cmFuc2FjdGlvbi5cbiAgICogUmVxdWlyZXMgZXF1YWxpdHkgKyBjaXBoZXJ0ZXh0IHZhbGlkaXR5ICsgcmFuZ2UgcHJvb2YgdmVyaWZpY2F0aW9uIGluc3RydWN0aW9ucy5cbiAgICovXG4gIGNvbmZpZGVudGlhbFRyYW5zZmVyKHBhcmFtczogQ29uZmlkZW50aWFsVHJhbnNmZXJbJ3BhcmFtcyddKTogdGhpcyB7XG4gICAgYXNzZXJ0KHBhcmFtcy5zb3VyY2VUb2tlbkFkZHJlc3MsICdNaXNzaW5nIHNvdXJjZVRva2VuQWRkcmVzcyBwYXJhbScpO1xuICAgIGFzc2VydChwYXJhbXMubWludEFkZHJlc3MsICdNaXNzaW5nIG1pbnRBZGRyZXNzIHBhcmFtJyk7XG4gICAgYXNzZXJ0KHBhcmFtcy5kZXN0aW5hdGlvblRva2VuQWRkcmVzcywgJ01pc3NpbmcgZGVzdGluYXRpb25Ub2tlbkFkZHJlc3MgcGFyYW0nKTtcbiAgICBhc3NlcnQocGFyYW1zLmF1dGhvcml0eUFkZHJlc3MsICdNaXNzaW5nIGF1dGhvcml0eUFkZHJlc3MgcGFyYW0nKTtcbiAgICBhc3NlcnQocGFyYW1zLm5ld1NvdXJjZURlY3J5cHRhYmxlQXZhaWxhYmxlQmFsYW5jZSwgJ01pc3NpbmcgbmV3U291cmNlRGVjcnlwdGFibGVBdmFpbGFibGVCYWxhbmNlIHBhcmFtJyk7XG4gICAgYXNzZXJ0KHBhcmFtcy50cmFuc2ZlckFtb3VudEF1ZGl0b3JDaXBoZXJ0ZXh0TG8sICdNaXNzaW5nIHRyYW5zZmVyQW1vdW50QXVkaXRvckNpcGhlcnRleHRMbyBwYXJhbScpO1xuICAgIGFzc2VydChwYXJhbXMudHJhbnNmZXJBbW91bnRBdWRpdG9yQ2lwaGVydGV4dEhpLCAnTWlzc2luZyB0cmFuc2ZlckFtb3VudEF1ZGl0b3JDaXBoZXJ0ZXh0SGkgcGFyYW0nKTtcblxuICAgIHRoaXMuX2N0SW5zdHJ1Y3Rpb25zLnB1c2goe1xuICAgICAgdHlwZTogSW5zdHJ1Y3Rpb25CdWlsZGVyVHlwZXMuQ29uZmlkZW50aWFsVHJhbnNmZXIsXG4gICAgICBwYXJhbXMsXG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQWRkIGEgVmVyaWZ5UHVia2V5VmFsaWRpdHkgcHJvb2YgaW5zdHJ1Y3Rpb24gKHVzZWQgd2l0aCBDb25maWd1cmVBY2NvdW50KS5cbiAgICovXG4gIHZlcmlmeVB1YmtleVZhbGlkaXR5KHBhcmFtczogVmVyaWZ5UHVia2V5VmFsaWRpdHlbJ3BhcmFtcyddKTogdGhpcyB7XG4gICAgdGhpcy5fY3RJbnN0cnVjdGlvbnMucHVzaCh7XG4gICAgICB0eXBlOiBJbnN0cnVjdGlvbkJ1aWxkZXJUeXBlcy5WZXJpZnlQdWJrZXlWYWxpZGl0eSxcbiAgICAgIHBhcmFtcyxcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYSBWZXJpZnlDaXBoZXJ0ZXh0Q29tbWl0bWVudEVxdWFsaXR5IHByb29mIGluc3RydWN0aW9uICh1c2VkIHdpdGggVHJhbnNmZXIgYW5kIFdpdGhkcmF3KS5cbiAgICovXG4gIHZlcmlmeUVxdWFsaXR5UHJvb2YocGFyYW1zOiBWZXJpZnlFcXVhbGl0eVByb29mWydwYXJhbXMnXSk6IHRoaXMge1xuICAgIHRoaXMuX2N0SW5zdHJ1Y3Rpb25zLnB1c2goe1xuICAgICAgdHlwZTogSW5zdHJ1Y3Rpb25CdWlsZGVyVHlwZXMuVmVyaWZ5RXF1YWxpdHlQcm9vZixcbiAgICAgIHBhcmFtcyxcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYSBWZXJpZnlCYXRjaGVkR3JvdXBlZENpcGhlcnRleHQzSGFuZGxlc1ZhbGlkaXR5IHByb29mIGluc3RydWN0aW9uICh1c2VkIHdpdGggVHJhbnNmZXIpLlxuICAgKi9cbiAgdmVyaWZ5VmFsaWRpdHlQcm9vZihwYXJhbXM6IFZlcmlmeVZhbGlkaXR5UHJvb2ZbJ3BhcmFtcyddKTogdGhpcyB7XG4gICAgdGhpcy5fY3RJbnN0cnVjdGlvbnMucHVzaCh7XG4gICAgICB0eXBlOiBJbnN0cnVjdGlvbkJ1aWxkZXJUeXBlcy5WZXJpZnlWYWxpZGl0eVByb29mLFxuICAgICAgcGFyYW1zLFxuICAgIH0pO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhIFZlcmlmeUJhdGNoZWRSYW5nZVByb29mVTEyOCBwcm9vZiBpbnN0cnVjdGlvbiAodXNlZCB3aXRoIFRyYW5zZmVyKS5cbiAgICovXG4gIHZlcmlmeVJhbmdlUHJvb2YocGFyYW1zOiBWZXJpZnlSYW5nZVByb29mWydwYXJhbXMnXSk6IHRoaXMge1xuICAgIHRoaXMuX2N0SW5zdHJ1Y3Rpb25zLnB1c2goe1xuICAgICAgdHlwZTogSW5zdHJ1Y3Rpb25CdWlsZGVyVHlwZXMuVmVyaWZ5UmFuZ2VQcm9vZixcbiAgICAgIHBhcmFtcyxcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBwcm90ZWN0ZWQgYXN5bmMgYnVpbGRJbXBsZW1lbnRhdGlvbigpOiBQcm9taXNlPFRyYW5zYWN0aW9uPiB7XG4gICAgYXNzZXJ0KHRoaXMuX2N0SW5zdHJ1Y3Rpb25zLmxlbmd0aCA+IDAsICdBdCBsZWFzdCBvbmUgY29uZmlkZW50aWFsIHRyYW5zZmVyIGluc3RydWN0aW9uIG11c3QgYmUgc3BlY2lmaWVkJyk7XG5cbiAgICB0aGlzLl9pbnN0cnVjdGlvbnNEYXRhID0gWy4uLnRoaXMuX2N0SW5zdHJ1Y3Rpb25zXTtcblxuICAgIHJldHVybiBhd2FpdCBzdXBlci5idWlsZEltcGxlbWVudGF0aW9uKCk7XG4gIH1cbn1cbiJdfQ==
311
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlkZW50aWFsVHJhbnNmZXJCdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9jb25maWRlbnRpYWxUcmFuc2ZlckJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQ0EsbURBQTZIO0FBQzdILDZDQUFtRztBQUNuRywwREFBNkI7QUFDN0IsK0NBQTRDO0FBQzVDLDZEQUEwRDtBQUMxRCwyQ0FBc0Q7QUFjdEQseUZBQXNGO0FBQ3RGLHVFQUE0RTtBQUM1RSxtRUFBZ0U7QUFDaEUsb0RBQTRCO0FBRTVCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXVCRztBQUNILE1BQWEsMkJBQTRCLFNBQVEsdUNBQWtCO0lBS2pFLFlBQVksV0FBaUM7UUFDM0MsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBTGIsb0JBQWUsR0FBd0IsRUFBRSxDQUFDO1FBTWhELElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSx5QkFBVyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ25ELENBQUM7SUFFRCxJQUFjLGVBQWU7UUFDM0IsT0FBTywwQkFBZSxDQUFDLG9CQUFvQixDQUFDO0lBQzlDLENBQUM7SUFFRDs7Ozs7Ozs7OztPQVVHO0lBQ0gsT0FBTyxDQUFDLE9BQThCO1FBQ3BDLElBQUksQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDO1FBQ3hCLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDSCxpQkFBaUIsQ0FBQyxNQUE4QjtRQUM5QyxJQUFJLENBQUMsb0JBQW9CLEdBQUcsTUFBTSxDQUFDO1FBQ25DLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVEOzs7Ozs7OztPQVFHO0lBQ0gsZ0JBQWdCLENBQUMsU0FBaUI7UUFDaEMsSUFBQSxnQkFBTSxFQUFDLFNBQVMsRUFBRSx5QkFBeUIsQ0FBQyxDQUFDO1FBQzdDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxTQUFTLENBQUM7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LGtFQWlUQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJhc2VDb2luIGFzIENvaW5Db25maWcgfSBmcm9tICdAYml0Z28tYmV0YS9zdGF0aWNzJztcbmltcG9ydCB7IEJ1aWxkVHJhbnNhY3Rpb25FcnJvciwgU29sVHJhbnNhY3Rpb25WZXJzaW9uLCBTb2xWMVRyYW5zYWN0aW9uQ29uZmlnLCBUcmFuc2FjdGlvblR5cGUgfSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5pbXBvcnQgeyBQdWJsaWNLZXksIFRyYW5zYWN0aW9uIGFzIFNvbFRyYW5zYWN0aW9uLCBUcmFuc2FjdGlvbkluc3RydWN0aW9uIH0gZnJvbSAnQHNvbGFuYS93ZWIzLmpzJztcbmltcG9ydCBuYWNsIGZyb20gJ3R3ZWV0bmFjbCc7XG5pbXBvcnQgeyBUcmFuc2FjdGlvbiB9IGZyb20gJy4vdHJhbnNhY3Rpb24nO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb25CdWlsZGVyIH0gZnJvbSAnLi90cmFuc2FjdGlvbkJ1aWxkZXInO1xuaW1wb3J0IHsgSW5zdHJ1Y3Rpb25CdWlsZGVyVHlwZXMgfSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQge1xuICBBcHBseVBlbmRpbmdCYWxhbmNlLFxuICBDb25maWRlbnRpYWxEZXBvc2l0LFxuICBDb25maWRlbnRpYWxUcmFuc2ZlcixcbiAgQ29uZmlkZW50aWFsV2l0aGRyYXcsXG4gIENvbmZpZ3VyZUNvbmZpZGVudGlhbFRyYW5zZmVyQWNjb3VudCxcbiAgSW5zdHJ1Y3Rpb25QYXJhbXMsXG4gIE1lbW8sXG4gIFZlcmlmeUVxdWFsaXR5UHJvb2YsXG4gIFZlcmlmeVB1YmtleVZhbGlkaXR5LFxuICBWZXJpZnlSYW5nZVByb29mLFxuICBWZXJpZnlWYWxpZGl0eVByb29mLFxufSBmcm9tICcuL2lmYWNlJztcbmltcG9ydCB7IGNvbXBpbGVUcmFuc2FjdGlvbk1lc3NhZ2UgfSBmcm9tICcuL3NlcmlhbGl6YXRpb24vY29tcGlsZVRyYW5zYWN0aW9uTWVzc2FnZSc7XG5pbXBvcnQgeyBzZXJpYWxpemVXaXJlVHJhbnNhY3Rpb24gfSBmcm9tICcuL3NlcmlhbGl6YXRpb24vd2lyZS10cmFuc2FjdGlvbic7XG5pbXBvcnQgeyBzb2xJbnN0cnVjdGlvbkZhY3RvcnkgfSBmcm9tICcuL3NvbEluc3RydWN0aW9uRmFjdG9yeSc7XG5pbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5cbi8qKlxuICogQnVpbGRlciBmb3IgVG9rZW4tMjAyMiBjb25maWRlbnRpYWwgdHJhbnNmZXIgdHJhbnNhY3Rpb25zLlxuICpcbiAqIFByb3ZpZGVzIHR5cGUtc2FmZSBmbHVlbnQgc2V0dGVycyBmb3IgdGhlIGZvbGxvd2luZyBDVCBpbnN0cnVjdGlvbnM6XG4gKiAtIENvbmZpZ3VyZUFjY291bnQgKHN0YW5kYWxvbmUsIHdpdGggVmVyaWZ5UHVia2V5VmFsaWRpdHkgcHJvb2YpXG4gKiAtIEFwcGx5UGVuZGluZ0JhbGFuY2UgKGFsd2F5cyBpbnN0cnVjdGlvbiAjMSBpbiB2MSBzcGVuZCB0eHMsIGlkZW1wb3RlbnQpXG4gKiAtIERlcG9zaXQgKHB1YmxpYyDihpIgY29uZmlkZW50aWFsIGNvbnZlcnNpb24pXG4gKiAtIFdpdGhkcmF3IChjb25maWRlbnRpYWwg4oaSIHB1YmxpYyBjb252ZXJzaW9uLCB3aXRoIGVxdWFsaXR5ICsgcmFuZ2UgcHJvb2ZzKVxuICogLSBUcmFuc2ZlciAoY29uZmlkZW50aWFsIOKGkiBjb25maWRlbnRpYWwsIHdpdGggZXF1YWxpdHkgKyB2YWxpZGl0eSArIHJhbmdlIHByb29mcylcbiAqIC0gVmVyaWZ5UHVia2V5VmFsaWRpdHkgLyBWZXJpZnlFcXVhbGl0eSAvIFZlcmlmeVZhbGlkaXR5IC8gVmVyaWZ5UmFuZ2UgcHJvb2YgaW5zdHJ1Y3Rpb25zXG4gKlxuICogSW5zdHJ1Y3Rpb24gYnVpbGRlcnMgYXJlIHYwL3YxLWFnbm9zdGljOiB0aGV5IHByb2R1Y2UgaW5zdHJ1Y3Rpb24gZGF0YSBhbmRcbiAqIGFjY291bnQgbWV0YXMgb25seS4gVGhlIGNhbGxlciAoV2FsbGV0IFBsYXRmb3JtKSBhc3NlbWJsZXMgdGhlbSBpbnRvIHYxXG4gKiB0cmFuc2FjdGlvbnMgaW4gdGhlIGNvcnJlY3Qgb3JkZXIuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiBjb25zdCBidWlsZGVyID0gZmFjdG9yeS5nZXRDb25maWRlbnRpYWxUcmFuc2ZlckJ1aWxkZXIoKTtcbiAqIGJ1aWxkZXIubm9uY2UocmVjZW50QmxvY2toYXNoKS5zZW5kZXIocGF5ZXIpO1xuICogYnVpbGRlci5jb25maWd1cmVBY2NvdW50KHsgdG9rZW5BZGRyZXNzLCBtaW50QWRkcmVzcywgYXV0aG9yaXR5QWRkcmVzcywgLi4uIH0pO1xuICogYnVpbGRlci52ZXJpZnlQdWJrZXlWYWxpZGl0eSh7IHByb29mRGF0YSB9KTtcbiAqIGNvbnN0IHR4ID0gYXdhaXQgYnVpbGRlci5idWlsZCgpO1xuICogYGBgXG4gKi9cbmV4cG9ydCBjbGFzcyBDb25maWRlbnRpYWxUcmFuc2ZlckJ1aWxkZXIgZXh0ZW5kcyBUcmFuc2FjdGlvbkJ1aWxkZXIge1xuICBwcml2YXRlIF9jdEluc3RydWN0aW9uczogSW5zdHJ1Y3Rpb25QYXJhbXNbXSA9IFtdO1xuICBwcml2YXRlIF92ZXJzaW9uPzogU29sVHJhbnNhY3Rpb25WZXJzaW9uO1xuICBwcml2YXRlIF92MVRyYW5zYWN0aW9uQ29uZmlnPzogU29sVjFUcmFuc2FjdGlvbkNvbmZpZztcblxuICBjb25zdHJ1Y3RvcihfY29pbkNvbmZpZzogUmVhZG9ubHk8Q29pbkNvbmZpZz4pIHtcbiAgICBzdXBlcihfY29pbkNvbmZpZyk7XG4gICAgdGhpcy5fdHJhbnNhY3Rpb24gPSBuZXcgVHJhbnNhY3Rpb24oX2NvaW5Db25maWcpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldCB0cmFuc2FjdGlvblR5cGUoKTogVHJhbnNhY3Rpb25UeXBlIHtcbiAgICByZXR1cm4gVHJhbnNhY3Rpb25UeXBlLkNvbmZpZGVudGlhbFRyYW5zZmVyO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgU29sYW5hIHRyYW5zYWN0aW9uIHZlcnNpb24uXG4gICAqXG4gICAqIERlZmF1bHRzIHRvIGxlZ2FjeSB1bnRpbCBzZXQuIFdoZW4gc2V0IHRvIGAxYCwgdGhlIGJ1aWxkZXIgYXNzZW1ibGVzIGEgdjFcbiAgICogKFNJTUQtMDI5Ni8wMzg1KSB0cmFuc2FjdGlvbjogdmVyc2lvbiBieXRlIGAweDgxYCwgYW4gaW5saW5lIGB0cmFuc2FjdGlvbkNvbmZpZ2BcbiAgICogaW5zdGVhZCBvZiBDb21wdXRlQnVkZ2V0IGluc3RydWN0aW9ucywgbm8gYWRkcmVzcyBsb29rdXAgdGFibGVzLCBhbmQgYVxuICAgKiBtZXNzYWdlLWZpcnN0IHdpcmUgZm9ybWF0IHdpdGggc2lnbmF0dXJlcyBhcHBlbmRlZC5cbiAgICpcbiAgICogQHBhcmFtIHZlcnNpb24gLSB0aGUgdHJhbnNhY3Rpb24gdmVyc2lvbiAoMCA9IHYwLCAxID0gdjEpXG4gICAqIEByZXR1cm5zIHt0aGlzfSBUaGlzIGJ1aWxkZXJcbiAgICovXG4gIHZlcnNpb24odmVyc2lvbjogU29sVHJhbnNhY3Rpb25WZXJzaW9uKTogdGhpcyB7XG4gICAgdGhpcy5fdmVyc2lvbiA9IHZlcnNpb247XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoZSB2MSB0cmFuc2FjdGlvbiBjb25maWcgKGNvbXB1dGUgdW5pdCBsaW1pdCwgaGVhcCBzaXplLCBsb2FkZWQgYWNjb3VudHNcbiAgICogZGF0YSBzaXplIGxpbWl0LCBhbmQgcHJpb3JpdHkgZmVlIGFzIHRvdGFsIGxhbXBvcnRzKS4gUmVxdWlyZWQgd2hlblxuICAgKiBgdmVyc2lvbigxKWAgaXMgc2V0LlxuICAgKlxuICAgKiBAcGFyYW0gY29uZmlnIC0gdGhlIHYxIHRyYW5zYWN0aW9uIGNvbmZpZ1xuICAgKiBAcmV0dXJucyB7dGhpc30gVGhpcyBidWlsZGVyXG4gICAqL1xuICB0cmFuc2FjdGlvbkNvbmZpZyhjb25maWc6IFNvbFYxVHJhbnNhY3Rpb25Db25maWcpOiB0aGlzIHtcbiAgICB0aGlzLl92MVRyYW5zYWN0aW9uQ29uZmlnID0gY29uZmlnO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIE92ZXJyaWRlIHRoZSB6ay1lbGdhbWFsLXByb29mIHByb2dyYW0gaWQuXG4gICAqXG4gICAqIERlZmF1bHRzIHRvIHRoZSBjYW5vbmljYWwgb24tY2hhaW4gcHJvZ3JhbSBpZCAoYFprRTFHYW1hMVByb29mMTExLi4uYClcbiAgICogd2hpY2ggaXMgdGhlIHNhbWUgYWNyb3NzIG1haW5uZXQsIGRldm5ldCwgYW5kIHRlc3RuZXQuIE92ZXJyaWRlIG9ubHlcbiAgICogd2hlbiB0YXJnZXRpbmcgYSBjdXN0b20gZGVwbG95bWVudC5cbiAgICpcbiAgICogQHBhcmFtIHByb2dyYW1JZCAtIGJhc2U1OCBlbmNvZGVkIHByb2dyYW0gaWRcbiAgICovXG4gIHprUHJvb2ZQcm9ncmFtSWQocHJvZ3JhbUlkOiBzdHJpbmcpOiB0aGlzIHtcbiAgICBhc3NlcnQocHJvZ3JhbUlkLCAnTWlzc2luZyBwcm9ncmFtSWQgcGFyYW0nKTtcbiAgICB0aGlzLl96a1Byb29mUHJvZ3JhbUlkID0gcHJvZ3JhbUlkO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIGluaXRCdWlsZGVyKHR4OiBUcmFuc2FjdGlvbik6IHZvaWQge1xuICAgIHN1cGVyLmluaXRCdWlsZGVyKHR4KTtcbiAgICB0aGlzLl9jdEluc3RydWN0aW9ucyA9IFtdO1xuICAgIGZvciAoY29uc3QgaW5zdHJ1Y3Rpb24gb2YgdGhpcy5faW5zdHJ1Y3Rpb25zRGF0YSkge1xuICAgICAgc3dpdGNoIChpbnN0cnVjdGlvbi50eXBlKSB7XG4gICAgICAgIGNhc2UgSW5zdHJ1Y3Rpb25CdWlsZGVyVHlwZXMuQ29uZmlndXJlQ29uZmlkZW50aWFsVHJhbnNmZXJBY2NvdW50OlxuICAgICAgICBjYXNlIEluc3RydWN0aW9uQnVpbGRlclR5cGVzLkFwcGx5UGVuZGluZ0JhbGFuY2U6XG4gICAgICAgIGNhc2UgSW5zdHJ1Y3Rpb25CdWlsZGVyVHlwZXMuQ29uZmlkZW50aWFsRGVwb3NpdDpcbiAgICAgICAgY2FzZSBJbnN0cnVjdGlvbkJ1aWxkZXJUeXBlcy5Db25maWRlbnRpYWxXaXRoZHJhdzpcbiAgICAgICAgY2FzZSBJbnN0cnVjdGlvbkJ1aWxkZXJUeXBlcy5Db25maWRlbnRpYWxUcmFuc2ZlcjpcbiAgICAgICAgY2FzZSBJbnN0cnVjdGlvbkJ1aWxkZXJUeXBlcy5WZXJpZnlQdWJrZXlWYWxpZGl0eTpcbiAgICAgICAgY2FzZSBJbnN0cnVjdGlvbkJ1aWxkZXJUeXBlcy5WZXJpZnlFcXVhbGl0eVByb29mOlxuICAgICAgICBjYXNlIEluc3RydWN0aW9uQnVpbGRlclR5cGVzLlZlcmlmeVZhbGlkaXR5UHJvb2Y6XG4gICAgICAgIGNhc2UgSW5zdHJ1Y3Rpb25CdWlsZGVyVHlwZXMuVmVyaWZ5UmFuZ2VQcm9vZjpcbiAgICAgICAgICB0aGlzLl9jdEluc3RydWN0aW9ucy5wdXNoKGluc3RydWN0aW9uKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQWRkIGEgQ29uZmlndXJlQWNjb3VudCBpbnN0cnVjdGlvbiB0byB0aGUgdHJhbnNhY3Rpb24uXG4gICAqIE9uZS10aW1lIEFUQSBzZXR1cCDigJQgcmVnaXN0ZXJzIEVsR2FtYWwgcHVia2V5ICsgQUVTIHplcm8gY2lwaGVydGV4dC5cbiAgICogTXVzdCBiZSBhY2NvbXBhbmllZCBieSBhIFZlcmlmeVB1YmtleVZhbGlkaXR5IHByb29mIGluc3RydWN0aW9uLlxuICAgKi9cbiAgY29uZmlndXJlQWNjb3VudChwYXJhbXM6IENvbmZpZ3VyZUNvbmZpZGVudGlhbFRyYW5zZmVyQWNjb3VudFsncGFyYW1zJ10pOiB0aGlzIHtcbiAgICBhc3NlcnQocGFyYW1zLnRva2VuQWRkcmVzcywgJ01pc3NpbmcgdG9rZW5BZGRyZXNzIHBhcmFtJyk7XG4gICAgYXNzZXJ0KHBhcmFtcy5taW50QWRkcmVzcywgJ01pc3NpbmcgbWludEFkZHJlc3MgcGFyYW0nKTtcbiAgICBhc3NlcnQocGFyYW1zLmF1dGhvcml0eUFkZHJlc3MsICdNaXNzaW5nIGF1dGhvcml0eUFkZHJlc3MgcGFyYW0nKTtcbiAgICBhc3NlcnQocGFyYW1zLmRlY3J5cHRhYmxlWmVyb0JhbGFuY2UsICdNaXNzaW5nIGRlY3J5cHRhYmxlWmVyb0JhbGFuY2UgcGFyYW0nKTtcbiAgICBhc3NlcnQocGFyYW1zLm1heGltdW1QZW5kaW5nQmFsYW5jZUNyZWRpdENvdW50ZXIsICdNaXNzaW5nIG1heGltdW1QZW5kaW5nQmFsYW5jZUNyZWRpdENvdW50ZXIgcGFyYW0nKTtcblxuICAgIHRoaXMuX2N0SW5zdHJ1Y3Rpb25zLnB1c2goe1xuICAgICAgdHlwZTogSW5zdHJ1Y3Rpb25CdWlsZGVyVHlwZXMuQ29uZmlndXJlQ29uZmlkZW50aWFsVHJhbnNmZXJBY2NvdW50LFxuICAgICAgcGFyYW1zLFxuICAgIH0pO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhbiBBcHBseVBlbmRpbmdCYWxhbmNlIGluc3RydWN0aW9uIHRvIHRoZSB0cmFuc2FjdGlvbi5cbiAgICogQ3JlZGl0cyBwZW5kaW5nIGJhbGFuY2UgaW50byBhdmFpbGFibGUgYmFsYW5jZS4gSWRlbXBvdGVudCAobm8tb3AgaWYgMCBwZW5kaW5nKS5cbiAgICogSW4gdjEgdHJhbnNhY3Rpb25zLCB0aGlzIHNob3VsZCBhbHdheXMgYmUgaW5zdHJ1Y3Rpb24gIzEuXG4gICAqL1xuICBhcHBseVBlbmRpbmdCYWxhbmNlKHBhcmFtczogQXBwbHlQZW5kaW5nQmFsYW5jZVsncGFyYW1zJ10pOiB0aGlzIHtcbiAgICBhc3NlcnQocGFyYW1zLnRva2VuQWRkcmVzcywgJ01pc3NpbmcgdG9rZW5BZGRyZXNzIHBhcmFtJyk7XG4gICAgYXNzZXJ0KHBhcmFtcy5hdXRob3JpdHlBZGRyZXNzLCAnTWlzc2luZyBhdXRob3JpdHlBZGRyZXNzIHBhcmFtJyk7XG4gICAgYXNzZXJ0KHBhcmFtcy5leHBlY3RlZFBlbmRpbmdCYWxhbmNlQ3JlZGl0Q291bnRlciwgJ01pc3NpbmcgZXhwZWN0ZWRQZW5kaW5nQmFsYW5jZUNyZWRpdENvdW50ZXIgcGFyYW0nKTtcbiAgICBhc3NlcnQocGFyYW1zLm5ld0RlY3J5cHRhYmxlQXZhaWxhYmxlQmFsYW5jZSwgJ01pc3NpbmcgbmV3RGVjcnlwdGFibGVBdmFpbGFibGVCYWxhbmNlIHBhcmFtJyk7XG5cbiAgICB0aGlzLl9jdEluc3RydWN0aW9ucy5wdXNoKHtcbiAgICAgIHR5cGU6IEluc3RydWN0aW9uQnVpbGRlclR5cGVzLkFwcGx5UGVuZGluZ0JhbGFuY2UsXG4gICAgICBwYXJhbXMsXG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQWRkIGEgRGVwb3NpdCBpbnN0cnVjdGlvbiB0byB0aGUgdHJhbnNhY3Rpb24uXG4gICAqIE1vdmVzIHB1YmxpYyBTUEwgdG9rZW5zIGludG8gY29uZmlkZW50aWFsIHBlbmRpbmcgYmFsYW5jZS4gTm8gcHJvb2YgcmVxdWlyZWQuXG4gICAqL1xuICBjb25maWRlbnRpYWxEZXBvc2l0KHBhcmFtczogQ29uZmlkZW50aWFsRGVwb3NpdFsncGFyYW1zJ10pOiB0aGlzIHtcbiAgICBhc3NlcnQocGFyYW1zLnRva2VuQWRkcmVzcywgJ01pc3NpbmcgdG9rZW5BZGRyZXNzIHBhcmFtJyk7XG4gICAgYXNzZXJ0KHBhcmFtcy5taW50QWRkcmVzcywgJ01pc3NpbmcgbWludEFkZHJlc3MgcGFyYW0nKTtcbiAgICBhc3NlcnQocGFyYW1zLmF1dGhvcml0eUFkZHJlc3MsICdNaXNzaW5nIGF1dGhvcml0eUFkZHJlc3MgcGFyYW0nKTtcbiAgICBhc3NlcnQocGFyYW1zLmFtb3VudCwgJ01pc3NpbmcgYW1vdW50IHBhcmFtJyk7XG5cbiAgICB0aGlzLl9jdEluc3RydWN0aW9ucy5wdXNoKHtcbiAgICAgIHR5cGU6IEluc3RydWN0aW9uQnVpbGRlclR5cGVzLkNvbmZpZGVudGlhbERlcG9zaXQsXG4gICAgICBwYXJhbXMsXG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQWRkIGEgV2l0aGRyYXcgaW5zdHJ1Y3Rpb24gdG8gdGhlIHRyYW5zYWN0aW9uLlxuICAgKiBNb3ZlcyBjb25maWRlbnRpYWwgYXZhaWxhYmxlIGJhbGFuY2UgdG8gcHVibGljIGJhbGFuY2UuXG4gICAqIFJlcXVpcmVzIGVxdWFsaXR5ICsgcmFuZ2UgcHJvb2YgdmVyaWZpY2F0aW9uIGluc3RydWN0aW9ucy5cbiAgICovXG4gIGNvbmZpZGVudGlhbFdpdGhkcmF3KHBhcmFtczogQ29uZmlkZW50aWFsV2l0aGRyYXdbJ3BhcmFtcyddKTogdGhpcyB7XG4gICAgYXNzZXJ0KHBhcmFtcy50b2tlbkFkZHJlc3MsICdNaXNzaW5nIHRva2VuQWRkcmVzcyBwYXJhbScpO1xuICAgIGFzc2VydChwYXJhbXMubWludEFkZHJlc3MsICdNaXNzaW5nIG1pbnRBZGRyZXNzIHBhcmFtJyk7XG4gICAgYXNzZXJ0KHBhcmFtcy5hdXRob3JpdHlBZGRyZXNzLCAnTWlzc2luZyBhdXRob3JpdHlBZGRyZXNzIHBhcmFtJyk7XG4gICAgYXNzZXJ0KHBhcmFtcy5hbW91bnQsICdNaXNzaW5nIGFtb3VudCBwYXJhbScpO1xuICAgIGFzc2VydChwYXJhbXMubmV3RGVjcnlwdGFibGVBdmFpbGFibGVCYWxhbmNlLCAnTWlzc2luZyBuZXdEZWNyeXB0YWJsZUF2YWlsYWJsZUJhbGFuY2UgcGFyYW0nKTtcblxuICAgIHRoaXMuX2N0SW5zdHJ1Y3Rpb25zLnB1c2goe1xuICAgICAgdHlwZTogSW5zdHJ1Y3Rpb25CdWlsZGVyVHlwZXMuQ29uZmlkZW50aWFsV2l0aGRyYXcsXG4gICAgICBwYXJhbXMsXG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQWRkIGEgY29uZmlkZW50aWFsIFRyYW5zZmVyIGluc3RydWN0aW9uIHRvIHRoZSB0cmFuc2FjdGlvbi5cbiAgICogUmVxdWlyZXMgZXF1YWxpdHkgKyBjaXBoZXJ0ZXh0IHZhbGlkaXR5ICsgcmFuZ2UgcHJvb2YgdmVyaWZpY2F0aW9uIGluc3RydWN0aW9ucy5cbiAgICovXG4gIGNvbmZpZGVudGlhbFRyYW5zZmVyKHBhcmFtczogQ29uZmlkZW50aWFsVHJhbnNmZXJbJ3BhcmFtcyddKTogdGhpcyB7XG4gICAgYXNzZXJ0KHBhcmFtcy5zb3VyY2VUb2tlbkFkZHJlc3MsICdNaXNzaW5nIHNvdXJjZVRva2VuQWRkcmVzcyBwYXJhbScpO1xuICAgIGFzc2VydChwYXJhbXMubWludEFkZHJlc3MsICdNaXNzaW5nIG1pbnRBZGRyZXNzIHBhcmFtJyk7XG4gICAgYXNzZXJ0KHBhcmFtcy5kZXN0aW5hdGlvblRva2VuQWRkcmVzcywgJ01pc3NpbmcgZGVzdGluYXRpb25Ub2tlbkFkZHJlc3MgcGFyYW0nKTtcbiAgICBhc3NlcnQocGFyYW1zLmF1dGhvcml0eUFkZHJlc3MsICdNaXNzaW5nIGF1dGhvcml0eUFkZHJlc3MgcGFyYW0nKTtcbiAgICBhc3NlcnQocGFyYW1zLm5ld1NvdXJjZURlY3J5cHRhYmxlQXZhaWxhYmxlQmFsYW5jZSwgJ01pc3NpbmcgbmV3U291cmNlRGVjcnlwdGFibGVBdmFpbGFibGVCYWxhbmNlIHBhcmFtJyk7XG4gICAgYXNzZXJ0KHBhcmFtcy50cmFuc2ZlckFtb3VudEF1ZGl0b3JDaXBoZXJ0ZXh0TG8sICdNaXNzaW5nIHRyYW5zZmVyQW1vdW50QXVkaXRvckNpcGhlcnRleHRMbyBwYXJhbScpO1xuICAgIGFzc2VydChwYXJhbXMudHJhbnNmZXJBbW91bnRBdWRpdG9yQ2lwaGVydGV4dEhpLCAnTWlzc2luZyB0cmFuc2ZlckFtb3VudEF1ZGl0b3JDaXBoZXJ0ZXh0SGkgcGFyYW0nKTtcblxuICAgIHRoaXMuX2N0SW5zdHJ1Y3Rpb25zLnB1c2goe1xuICAgICAgdHlwZTogSW5zdHJ1Y3Rpb25CdWlsZGVyVHlwZXMuQ29uZmlkZW50aWFsVHJhbnNmZXIsXG4gICAgICBwYXJhbXMsXG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQWRkIGEgVmVyaWZ5UHVia2V5VmFsaWRpdHkgcHJvb2YgaW5zdHJ1Y3Rpb24gKHVzZWQgd2l0aCBDb25maWd1cmVBY2NvdW50KS5cbiAgICovXG4gIHZlcmlmeVB1YmtleVZhbGlkaXR5KHBhcmFtczogVmVyaWZ5UHVia2V5VmFsaWRpdHlbJ3BhcmFtcyddKTogdGhpcyB7XG4gICAgdGhpcy5fY3RJbnN0cnVjdGlvbnMucHVzaCh7XG4gICAgICB0eXBlOiBJbnN0cnVjdGlvbkJ1aWxkZXJUeXBlcy5WZXJpZnlQdWJrZXlWYWxpZGl0eSxcbiAgICAgIHBhcmFtcyxcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYSBWZXJpZnlDaXBoZXJ0ZXh0Q29tbWl0bWVudEVxdWFsaXR5IHByb29mIGluc3RydWN0aW9uICh1c2VkIHdpdGggVHJhbnNmZXIgYW5kIFdpdGhkcmF3KS5cbiAgICovXG4gIHZlcmlmeUVxdWFsaXR5UHJvb2YocGFyYW1zOiBWZXJpZnlFcXVhbGl0eVByb29mWydwYXJhbXMnXSk6IHRoaXMge1xuICAgIHRoaXMuX2N0SW5zdHJ1Y3Rpb25zLnB1c2goe1xuICAgICAgdHlwZTogSW5zdHJ1Y3Rpb25CdWlsZGVyVHlwZXMuVmVyaWZ5RXF1YWxpdHlQcm9vZixcbiAgICAgIHBhcmFtcyxcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYSBWZXJpZnlCYXRjaGVkR3JvdXBlZENpcGhlcnRleHQzSGFuZGxlc1ZhbGlkaXR5IHByb29mIGluc3RydWN0aW9uICh1c2VkIHdpdGggVHJhbnNmZXIpLlxuICAgKi9cbiAgdmVyaWZ5VmFsaWRpdHlQcm9vZihwYXJhbXM6IFZlcmlmeVZhbGlkaXR5UHJvb2ZbJ3BhcmFtcyddKTogdGhpcyB7XG4gICAgdGhpcy5fY3RJbnN0cnVjdGlvbnMucHVzaCh7XG4gICAgICB0eXBlOiBJbnN0cnVjdGlvbkJ1aWxkZXJUeXBlcy5WZXJpZnlWYWxpZGl0eVByb29mLFxuICAgICAgcGFyYW1zLFxuICAgIH0pO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhIFZlcmlmeUJhdGNoZWRSYW5nZVByb29mVTEyOCBwcm9vZiBpbnN0cnVjdGlvbiAodXNlZCB3aXRoIFRyYW5zZmVyKS5cbiAgICovXG4gIHZlcmlmeVJhbmdlUHJvb2YocGFyYW1zOiBWZXJpZnlSYW5nZVByb29mWydwYXJhbXMnXSk6IHRoaXMge1xuICAgIHRoaXMuX2N0SW5zdHJ1Y3Rpb25zLnB1c2goe1xuICAgICAgdHlwZTogSW5zdHJ1Y3Rpb25CdWlsZGVyVHlwZXMuVmVyaWZ5UmFuZ2VQcm9vZixcbiAgICAgIHBhcmFtcyxcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBwcm90ZWN0ZWQgYXN5bmMgYnVpbGRJbXBsZW1lbnRhdGlvbigpOiBQcm9taXNlPFRyYW5zYWN0aW9uPiB7XG4gICAgYXNzZXJ0KHRoaXMuX2N0SW5zdHJ1Y3Rpb25zLmxlbmd0aCA+IDAsICdBdCBsZWFzdCBvbmUgY29uZmlkZW50aWFsIHRyYW5zZmVyIGluc3RydWN0aW9uIG11c3QgYmUgc3BlY2lmaWVkJyk7XG5cbiAgICBpZiAodGhpcy5fdmVyc2lvbiA9PT0gMSkge1xuICAgICAgcmV0dXJuIHRoaXMuYnVpbGRWMSgpO1xuICAgIH1cblxuICAgIHRoaXMuX2luc3RydWN0aW9uc0RhdGEgPSBbLi4udGhpcy5fY3RJbnN0cnVjdGlvbnNdO1xuXG4gICAgcmV0dXJuIGF3YWl0IHN1cGVyLmJ1aWxkSW1wbGVtZW50YXRpb24oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZCBhIHYxIChTSU1ELTAyOTYvMDM4NSkgY29uZmlkZW50aWFsIHRyYW5zZmVyIHRyYW5zYWN0aW9uLlxuICAgKlxuICAgKiBBc3NlbWJsZXMgdGhlIENUIGluc3RydWN0aW9ucyB2aWEgdGhlIHNoYXJlZCBpbnN0cnVjdGlvbiBmYWN0b3J5LCBjb21waWxlc1xuICAgKiBhbmQgc2VyaWFsaXplcyBhIHYxIG1lc3NhZ2Ugd2l0aCB0aGUgaW5saW5lIHRyYW5zYWN0aW9uIGNvbmZpZywgc2lnbnMgdGhlXG4gICAqIG1lc3NhZ2UgYnl0ZXMgd2l0aCB0aGUgYnVpbGRlcidzIHNpZ25lcnMsIGFuZCBzdG9yZXMgdGhlIHJlc3VsdGluZyB3aXJlXG4gICAqIGJ5dGVzIGZvciBicm9hZGNhc3QuIEFsc28gcG9wdWxhdGVzIGEgbWV0YWRhdGEtb25seSBTb2xUcmFuc2FjdGlvbiBzbyB0aGVcbiAgICogdHJhbnNhY3Rpb24gSlNPTiBhbmQgaW5wdXQvb3V0cHV0IGV4dHJhY3Rpb24gcmVtYWluIHVzYWJsZS5cbiAgICpcbiAgICogQHJldHVybnMge1RyYW5zYWN0aW9ufSBUaGUgYnVpbHQgdHJhbnNhY3Rpb24gaG9sZGluZyB0aGUgdjEgd2lyZSBieXRlc1xuICAgKi9cbiAgcHJpdmF0ZSBidWlsZFYxKCk6IFRyYW5zYWN0aW9uIHtcbiAgICBhc3NlcnQodGhpcy5fc2VuZGVyLCBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdzZW5kZXIgaXMgcmVxdWlyZWQgYmVmb3JlIGJ1aWxkaW5nJykpO1xuICAgIGFzc2VydCh0aGlzLl9yZWNlbnRCbG9ja2hhc2gsIG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ3JlY2VudCBibG9ja2hhc2ggaXMgcmVxdWlyZWQgYmVmb3JlIGJ1aWxkaW5nJykpO1xuICAgIGFzc2VydCh0aGlzLl92MVRyYW5zYWN0aW9uQ29uZmlnLCAndHJhbnNhY3Rpb25Db25maWcgaXMgcmVxdWlyZWQgdG8gYnVpbGQgYSB2MSBjb25maWRlbnRpYWwgdHJhbnNmZXIgdHJhbnNhY3Rpb24nKTtcblxuICAgIC8vIEFwcGx5UGVuZGluZ0JhbGFuY2UgbXVzdCByZW1haW4gaW5zdHJ1Y3Rpb24gIzEgaW4gdjEgc3BlbmQgdHhzIChpdCBpcyBpZGVtcG90ZW50KSxcbiAgICAvLyByZWdhcmRsZXNzIG9mIHRoZSBvcmRlciB0aGUgY2FsbGVyIGFkZGVkIGluc3RydWN0aW9ucy5cbiAgICB0aGlzLl9jdEluc3RydWN0aW9ucyA9IFtcbiAgICAgIC4uLnRoaXMuX2N0SW5zdHJ1Y3Rpb25zLmZpbHRlcigoaSkgPT4gaS50eXBlID09PSBJbnN0cnVjdGlvbkJ1aWxkZXJUeXBlcy5BcHBseVBlbmRpbmdCYWxhbmNlKSxcbiAgICAgIC4uLnRoaXMuX2N0SW5zdHJ1Y3Rpb25zLmZpbHRlcigoaSkgPT4gaS50eXBlICE9PSBJbnN0cnVjdGlvbkJ1aWxkZXJUeXBlcy5BcHBseVBlbmRpbmdCYWxhbmNlKSxcbiAgICBdO1xuXG4gICAgY29uc3QgaW5zdHJ1Y3Rpb25zOiBUcmFuc2FjdGlvbkluc3RydWN0aW9uW10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IGluc3RydWN0aW9uIG9mIHRoaXMuX2N0SW5zdHJ1Y3Rpb25zKSB7XG4gICAgICBpbnN0cnVjdGlvbnMucHVzaCguLi5zb2xJbnN0cnVjdGlvbkZhY3RvcnkoaW5zdHJ1Y3Rpb24sIHRoaXMuX3prUHJvb2ZQcm9ncmFtSWQpKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fbWVtbykge1xuICAgICAgY29uc3QgbWVtb0RhdGE6IE1lbW8gPSB7XG4gICAgICAgIHR5cGU6IEluc3RydWN0aW9uQnVpbGRlclR5cGVzLk1lbW8sXG4gICAgICAgIHBhcmFtczogeyBtZW1vOiB0aGlzLl9tZW1vIH0sXG4gICAgICB9O1xuICAgICAgdGhpcy5fY3RJbnN0cnVjdGlvbnMucHVzaChtZW1vRGF0YSk7XG4gICAgICBpbnN0cnVjdGlvbnMucHVzaCguLi5zb2xJbnN0cnVjdGlvbkZhY3RvcnkobWVtb0RhdGEpKTtcbiAgICB9XG5cbiAgICBjb25zdCBmZWVQYXllciA9IHRoaXMuX2ZlZVBheWVyID8gbmV3IFB1YmxpY0tleSh0aGlzLl9mZWVQYXllcikgOiBuZXcgUHVibGljS2V5KHRoaXMuX3NlbmRlcik7XG4gICAgY29uc3QgbWVzc2FnZUJ5dGVzID0gY29tcGlsZVRyYW5zYWN0aW9uTWVzc2FnZSh7XG4gICAgICB2ZXJzaW9uOiAxLFxuICAgICAgaW5zdHJ1Y3Rpb25zLFxuICAgICAgZmVlUGF5ZXIsXG4gICAgICByZWNlbnRCbG9ja2hhc2g6IHRoaXMuX3JlY2VudEJsb2NraGFzaCxcbiAgICAgIHRyYW5zYWN0aW9uQ29uZmlnOiB0aGlzLl92MVRyYW5zYWN0aW9uQ29uZmlnLFxuICAgIH0pO1xuXG4gICAgY29uc3Qgc2lnbmF0dXJlczogVWludDhBcnJheVtdID0gW107XG4gICAgZm9yIChjb25zdCBzaWduZXIgb2YgdGhpcy5fc2lnbmVycykge1xuICAgICAgY29uc3Qgc2VjcmV0S2V5ID0gc2lnbmVyLmdldEtleXModHJ1ZSkucHJ2O1xuICAgICAgYXNzZXJ0KHNlY3JldEtleSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXksICdNaXNzaW5nIHByaXZhdGUga2V5Jyk7XG4gICAgICBzaWduYXR1cmVzLnB1c2gobmFjbC5zaWduLmRldGFjaGVkKG1lc3NhZ2VCeXRlcywgc2VjcmV0S2V5KSk7XG4gICAgfVxuICAgIGZvciAoY29uc3Qgc2lnbmF0dXJlIG9mIHRoaXMuZ2V0QWRkaXRpb25hbFNpZ25hdHVyZXMoKSkge1xuICAgICAgc2lnbmF0dXJlcy5wdXNoKG5ldyBVaW50OEFycmF5KHNpZ25hdHVyZS5zaWduYXR1cmUpKTtcbiAgICB9XG5cbiAgICBjb25zdCB2MVdpcmUgPSBzZXJpYWxpemVXaXJlVHJhbnNhY3Rpb24obWVzc2FnZUJ5dGVzLCBzaWduYXR1cmVzKTtcblxuICAgIHRoaXMuX3RyYW5zYWN0aW9uLnYxVHJhbnNhY3Rpb25CeXRlcyA9IHYxV2lyZTtcbiAgICB0aGlzLl90cmFuc2FjdGlvbi52MU1lc3NhZ2VCeXRlcyA9IG1lc3NhZ2VCeXRlcztcblxuICAgIC8vIFBvcHVsYXRlIGEgbWV0YWRhdGEtb25seSBTb2xUcmFuc2FjdGlvbiBzbyB0b0pzb24gLyBsb2FkSW5wdXRzQW5kT3V0cHV0cyB3b3JrLlxuICAgIGNvbnN0IG1ldGFUeCA9IG5ldyBTb2xUcmFuc2FjdGlvbigpO1xuICAgIG1ldGFUeC5mZWVQYXllciA9IGZlZVBheWVyO1xuICAgIG1ldGFUeC5yZWNlbnRCbG9ja2hhc2ggPSB0aGlzLl9yZWNlbnRCbG9ja2hhc2g7XG4gICAgbWV0YVR4LmFkZCguLi5pbnN0cnVjdGlvbnMpO1xuICAgIHRoaXMuX3RyYW5zYWN0aW9uLnNvbFRyYW5zYWN0aW9uID0gbWV0YVR4O1xuXG4gICAgdGhpcy5fdHJhbnNhY3Rpb24uc2V0VHJhbnNhY3Rpb25UeXBlKHRoaXMudHJhbnNhY3Rpb25UeXBlKTtcbiAgICB0aGlzLl90cmFuc2FjdGlvbi5zZXRJbnN0cnVjdGlvbnNEYXRhKHRoaXMuX2N0SW5zdHJ1Y3Rpb25zKTtcbiAgICB0aGlzLl90cmFuc2FjdGlvbi5sb2FkSW5wdXRzQW5kT3V0cHV0cygpO1xuXG4gICAgcmV0dXJuIHRoaXMuX3RyYW5zYWN0aW9uO1xuICB9XG59XG4iXX0=
@@ -13,6 +13,8 @@ export declare class Transaction extends BaseTransaction {
13
13
  private _useTokenAddressTokenName;
14
14
  private _versionedTransaction;
15
15
  private _versionedTransactionData;
16
+ private _v1TransactionBytes;
17
+ private _v1MessageBytes;
16
18
  constructor(_coinConfig: Readonly<CoinConfig>);
17
19
  get solTransaction(): SolTransaction;
18
20
  set solTransaction(tx: SolTransaction);
@@ -47,6 +49,26 @@ export declare class Transaction extends BaseTransaction {
47
49
  * @returns {boolean} True if this is a VersionedTransaction
48
50
  */
49
51
  isVersionedTransaction(): boolean;
52
+ /**
53
+ * Get the serialized v1 wire transaction bytes (message + signatures), if this transaction is v1
54
+ * @returns {Uint8Array | undefined} The v1 wire bytes or undefined
55
+ */
56
+ get v1TransactionBytes(): Uint8Array | undefined;
57
+ /**
58
+ * Set the serialized v1 wire transaction bytes (message + signatures)
59
+ * @param {Uint8Array | undefined} bytes The v1 wire bytes to store, or undefined to clear
60
+ */
61
+ set v1TransactionBytes(bytes: Uint8Array | undefined);
62
+ /**
63
+ * Get the serialized v1 message bytes (without signatures), if this transaction is v1
64
+ * @returns {Uint8Array | undefined} The v1 message bytes or undefined
65
+ */
66
+ get v1MessageBytes(): Uint8Array | undefined;
67
+ /**
68
+ * Set the serialized v1 message bytes (without signatures)
69
+ * @param {Uint8Array | undefined} bytes The v1 message bytes to store, or undefined to clear
70
+ */
71
+ set v1MessageBytes(bytes: Uint8Array | undefined);
50
72
  /**
51
73
  * Get the original VersionedTransaction if this transaction was parsed from one
52
74
  * @returns {VersionedTransaction | undefined} The VersionedTransaction or undefined
@@ -1 +1 @@
1
- {"version":3,"file":"transaction.d.ts","sourceRoot":"","sources":["../../../../src/lib/transaction.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"transaction.d.ts","sourceRoot":"","sources":["../../../../src/lib/transaction.ts"],"names":[],"mappings":"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"}