@bitgo-beta/sdk-coin-iota 1.0.1-beta.324 → 1.0.1-beta.326
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/src/iota.d.ts +123 -27
- package/dist/src/iota.d.ts.map +1 -1
- package/dist/src/iota.js +217 -103
- package/dist/src/lib/constants.d.ts +50 -1
- package/dist/src/lib/constants.d.ts.map +1 -1
- package/dist/src/lib/constants.js +68 -4
- package/dist/src/lib/iface.d.ts +141 -1
- package/dist/src/lib/iface.d.ts.map +1 -1
- package/dist/src/lib/iface.js +1 -1
- package/dist/src/lib/keyPair.d.ts +100 -6
- package/dist/src/lib/keyPair.d.ts.map +1 -1
- package/dist/src/lib/keyPair.js +103 -10
- package/dist/src/lib/transaction.d.ts +117 -14
- package/dist/src/lib/transaction.d.ts.map +1 -1
- package/dist/src/lib/transaction.js +190 -67
- package/dist/src/lib/transactionBuilder.d.ts +73 -34
- package/dist/src/lib/transactionBuilder.d.ts.map +1 -1
- package/dist/src/lib/transactionBuilder.js +90 -45
- package/dist/src/lib/transactionBuilderFactory.d.ts +89 -6
- package/dist/src/lib/transactionBuilderFactory.d.ts.map +1 -1
- package/dist/src/lib/transactionBuilderFactory.js +103 -16
- package/dist/src/lib/transferBuilder.d.ts +43 -0
- package/dist/src/lib/transferBuilder.d.ts.map +1 -1
- package/dist/src/lib/transferBuilder.js +50 -5
- package/dist/src/lib/transferTransaction.d.ts +93 -2
- package/dist/src/lib/transferTransaction.d.ts.map +1 -1
- package/dist/src/lib/transferTransaction.js +180 -51
- package/dist/src/lib/utils.d.ts +107 -8
- package/dist/src/lib/utils.d.ts.map +1 -1
- package/dist/src/lib/utils.js +134 -23
- package/dist/test/unit/helpers/testHelpers.d.ts +57 -0
- package/dist/test/unit/helpers/testHelpers.d.ts.map +1 -0
- package/dist/test/unit/helpers/testHelpers.js +176 -0
- package/dist/test/unit/iota.js +47 -152
- package/dist/test/unit/keyPair.js +34 -61
- package/dist/test/unit/transactionBuilder/transactionBuilder.js +137 -255
- package/dist/test/unit/transactionBuilder/transactionBuilderFactory.js +43 -108
- package/dist/test/unit/transactionBuilder/transferBuilder.js +296 -762
- package/dist/test/unit/transferTransaction.js +106 -353
- package/dist/test/unit/utils.js +171 -197
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +7 -7
|
@@ -10,6 +10,10 @@ const utils_1 = require("@iota/iota-sdk/utils");
|
|
|
10
10
|
const blake2b_1 = __importDefault(require("@bitgo-beta/blake2b"));
|
|
11
11
|
const constants_1 = require("./constants");
|
|
12
12
|
const utils_2 = __importDefault(require("./utils"));
|
|
13
|
+
/**
|
|
14
|
+
* Base class for IOTA transactions.
|
|
15
|
+
* Manages transaction state, gas data, signatures, and building/serialization.
|
|
16
|
+
*/
|
|
13
17
|
class Transaction extends sdk_core_1.BaseTransaction {
|
|
14
18
|
constructor(coinConfig) {
|
|
15
19
|
super(coinConfig);
|
|
@@ -17,83 +21,130 @@ class Transaction extends sdk_core_1.BaseTransaction {
|
|
|
17
21
|
this._rebuildRequired = false;
|
|
18
22
|
this._isSimulateTx = true;
|
|
19
23
|
}
|
|
24
|
+
// Gas budget getter/setter - marks rebuild required when changed
|
|
20
25
|
get gasBudget() {
|
|
21
26
|
return this._gasBudget;
|
|
22
27
|
}
|
|
23
28
|
set gasBudget(value) {
|
|
24
29
|
this._gasBudget = value;
|
|
25
|
-
this.
|
|
30
|
+
this.markRebuildRequired();
|
|
26
31
|
}
|
|
32
|
+
// Gas payment objects getter/setter - marks rebuild required when changed
|
|
27
33
|
get gasPaymentObjects() {
|
|
28
34
|
return this._gasPaymentObjects;
|
|
29
35
|
}
|
|
30
36
|
set gasPaymentObjects(value) {
|
|
31
37
|
this._gasPaymentObjects = value;
|
|
32
|
-
this.
|
|
38
|
+
this.markRebuildRequired();
|
|
33
39
|
}
|
|
40
|
+
// Gas price getter/setter - marks rebuild required when changed
|
|
34
41
|
get gasPrice() {
|
|
35
42
|
return this._gasPrice;
|
|
36
43
|
}
|
|
37
44
|
set gasPrice(value) {
|
|
38
45
|
this._gasPrice = value;
|
|
39
|
-
this.
|
|
46
|
+
this.markRebuildRequired();
|
|
40
47
|
}
|
|
48
|
+
// Gas sponsor getter/setter - marks rebuild required when changed
|
|
41
49
|
get gasSponsor() {
|
|
42
50
|
return this._gasSponsor;
|
|
43
51
|
}
|
|
44
52
|
set gasSponsor(value) {
|
|
45
53
|
this._gasSponsor = value;
|
|
46
|
-
this.
|
|
54
|
+
this.markRebuildRequired();
|
|
47
55
|
}
|
|
56
|
+
// Transaction sender getter/setter - marks rebuild required when changed
|
|
48
57
|
get sender() {
|
|
49
58
|
return this._sender;
|
|
50
59
|
}
|
|
51
60
|
set sender(value) {
|
|
52
61
|
this._sender = value;
|
|
53
|
-
this.
|
|
62
|
+
this.markRebuildRequired();
|
|
54
63
|
}
|
|
64
|
+
/**
|
|
65
|
+
* Indicates whether this is a simulate transaction (dry run) or a real transaction.
|
|
66
|
+
* Simulate transactions use maximum gas values for estimation purposes.
|
|
67
|
+
*/
|
|
55
68
|
get isSimulateTx() {
|
|
56
69
|
return this._isSimulateTx;
|
|
57
70
|
}
|
|
58
71
|
set isSimulateTx(value) {
|
|
59
72
|
if (!value) {
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
this._rebuildRequired = true;
|
|
63
|
-
}
|
|
64
|
-
catch (error) {
|
|
65
|
-
const errorMessage = error instanceof Error ? error.message : 'Unknown error';
|
|
66
|
-
throw new Error(`Tx data validation failed: ${errorMessage}. {Cause: ${error}}`);
|
|
67
|
-
}
|
|
73
|
+
this.validateTxDataForRealTransaction();
|
|
74
|
+
this.markRebuildRequired();
|
|
68
75
|
}
|
|
69
76
|
this._isSimulateTx = value;
|
|
70
77
|
}
|
|
78
|
+
/**
|
|
79
|
+
* Marks that the transaction needs to be rebuilt before it can be signed or broadcast.
|
|
80
|
+
*/
|
|
81
|
+
markRebuildRequired() {
|
|
82
|
+
this._rebuildRequired = true;
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Validates transaction data when switching from simulate to real transaction mode.
|
|
86
|
+
*/
|
|
87
|
+
validateTxDataForRealTransaction() {
|
|
88
|
+
try {
|
|
89
|
+
this.validateTxData();
|
|
90
|
+
}
|
|
91
|
+
catch (error) {
|
|
92
|
+
const errorMessage = error instanceof Error ? error.message : 'Unknown error';
|
|
93
|
+
throw new Error(`Tx data validation failed: ${errorMessage}. {Cause: ${error}}`);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Returns the signable payload for this transaction.
|
|
98
|
+
* This is the Blake2b hash of the transaction data with intent message.
|
|
99
|
+
* @throws Error if transaction is in simulate mode or not built
|
|
100
|
+
*/
|
|
71
101
|
get signablePayload() {
|
|
72
102
|
if (this.isSimulateTx) {
|
|
73
103
|
throw new Error('Cannot sign a simulate tx');
|
|
74
104
|
}
|
|
75
|
-
|
|
76
|
-
throw new Error('Tx not built or a rebuild is required');
|
|
77
|
-
}
|
|
105
|
+
this.ensureTransactionIsBuilt();
|
|
78
106
|
const intentMessage = this.messageWithIntent(this._txDataBytes);
|
|
79
107
|
return Buffer.from((0, blake2b_1.default)(32).update(intentMessage).digest('binary'));
|
|
80
108
|
}
|
|
81
|
-
/**
|
|
109
|
+
/**
|
|
110
|
+
* Returns the transaction digest (ID).
|
|
111
|
+
* @throws Error if transaction is not built or needs rebuilding
|
|
112
|
+
*/
|
|
82
113
|
get id() {
|
|
114
|
+
this.ensureTransactionIsBuilt();
|
|
115
|
+
return transactions_1.TransactionDataBuilder.getDigestFromBytes(this._txDataBytes);
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Ensures the transaction is built and doesn't need rebuilding.
|
|
119
|
+
* @throws Error if transaction is not built or rebuild is required
|
|
120
|
+
*/
|
|
121
|
+
ensureTransactionIsBuilt() {
|
|
83
122
|
if (this._txDataBytes === undefined || this._rebuildRequired) {
|
|
84
123
|
throw new Error('Tx not built or a rebuild is required');
|
|
85
124
|
}
|
|
86
|
-
return transactions_1.TransactionDataBuilder.getDigestFromBytes(this._txDataBytes);
|
|
87
125
|
}
|
|
126
|
+
/**
|
|
127
|
+
* Adds a signature from the transaction sender.
|
|
128
|
+
*/
|
|
88
129
|
addSignature(publicKey, signature) {
|
|
89
130
|
this._signature = { publicKey, signature };
|
|
90
131
|
}
|
|
132
|
+
/**
|
|
133
|
+
* Adds a signature from the gas sponsor (if different from sender).
|
|
134
|
+
*/
|
|
91
135
|
addGasSponsorSignature(publicKey, signature) {
|
|
92
136
|
this._gasSponsorSignature = { publicKey, signature };
|
|
93
137
|
}
|
|
138
|
+
/**
|
|
139
|
+
* Checks if this transaction can be signed.
|
|
140
|
+
* Only real transactions (not simulate) can be signed.
|
|
141
|
+
*/
|
|
94
142
|
canSign(_key) {
|
|
95
143
|
return !this.isSimulateTx;
|
|
96
144
|
}
|
|
145
|
+
/**
|
|
146
|
+
* Returns the transaction fee (gas budget).
|
|
147
|
+
*/
|
|
97
148
|
getFee() {
|
|
98
149
|
return this.gasBudget?.toString();
|
|
99
150
|
}
|
|
@@ -103,6 +154,10 @@ class Transaction extends sdk_core_1.BaseTransaction {
|
|
|
103
154
|
get serializedSignature() {
|
|
104
155
|
return this._serializedSignature;
|
|
105
156
|
}
|
|
157
|
+
/**
|
|
158
|
+
* Serializes all signatures for the transaction.
|
|
159
|
+
* Includes both sender signature and gas sponsor signature if present.
|
|
160
|
+
*/
|
|
106
161
|
serializeSignatures() {
|
|
107
162
|
this._signatures = [];
|
|
108
163
|
if (this._signature) {
|
|
@@ -114,15 +169,23 @@ class Transaction extends sdk_core_1.BaseTransaction {
|
|
|
114
169
|
this._signatures.push(this._serializedGasSponsorSignature);
|
|
115
170
|
}
|
|
116
171
|
}
|
|
172
|
+
/**
|
|
173
|
+
* Converts the transaction to broadcast format (base64 encoded).
|
|
174
|
+
*/
|
|
117
175
|
async toBroadcastFormat() {
|
|
118
176
|
const txDataBytes = await this.build();
|
|
119
177
|
return (0, utils_1.toBase64)(txDataBytes);
|
|
120
178
|
}
|
|
179
|
+
/**
|
|
180
|
+
* Builds the transaction bytes.
|
|
181
|
+
* If in simulate mode, builds a dry run transaction with max gas values.
|
|
182
|
+
* Otherwise, builds a real transaction with actual gas data.
|
|
183
|
+
*/
|
|
121
184
|
async build() {
|
|
122
185
|
if (this.isSimulateTx) {
|
|
123
186
|
return this.buildDryRunTransaction();
|
|
124
187
|
}
|
|
125
|
-
return this.
|
|
188
|
+
return this.buildRealTransaction();
|
|
126
189
|
}
|
|
127
190
|
toJson() {
|
|
128
191
|
return {
|
|
@@ -143,35 +206,42 @@ class Transaction extends sdk_core_1.BaseTransaction {
|
|
|
143
206
|
this.gasSponsor = txData.gasSponsor;
|
|
144
207
|
}
|
|
145
208
|
}
|
|
209
|
+
/**
|
|
210
|
+
* Parses transaction data from its broadcast format (base64 or raw bytes).
|
|
211
|
+
* Extracts sender, gas data, and gas sponsor information.
|
|
212
|
+
*/
|
|
146
213
|
parseFromBroadcastTx(tx) {
|
|
147
214
|
const txData = transactions_1.Transaction.from(tx).getData();
|
|
215
|
+
this.parseSender(txData);
|
|
216
|
+
this.parseGasData(txData);
|
|
217
|
+
}
|
|
218
|
+
/**
|
|
219
|
+
* Parses the sender address from transaction data.
|
|
220
|
+
*/
|
|
221
|
+
parseSender(txData) {
|
|
148
222
|
if (txData.sender) {
|
|
149
223
|
this.sender = txData.sender;
|
|
150
224
|
}
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
225
|
+
}
|
|
226
|
+
/**
|
|
227
|
+
* Parses gas-related data from transaction data.
|
|
228
|
+
*/
|
|
229
|
+
parseGasData(txData) {
|
|
230
|
+
const gasData = txData.gasData;
|
|
231
|
+
if (!gasData) {
|
|
155
232
|
this.gasBudget = undefined;
|
|
156
|
-
}
|
|
157
|
-
if (txData.gasData?.price) {
|
|
158
|
-
this.gasPrice = Number(txData.gasData.price);
|
|
159
|
-
}
|
|
160
|
-
else {
|
|
161
233
|
this.gasPrice = undefined;
|
|
162
|
-
}
|
|
163
|
-
if (txData.gasData?.payment && txData.gasData.payment.length > 0) {
|
|
164
|
-
this.gasPaymentObjects = txData.gasData.payment.map((payment) => payment);
|
|
165
|
-
}
|
|
166
|
-
else {
|
|
167
234
|
this.gasPaymentObjects = undefined;
|
|
168
|
-
}
|
|
169
|
-
if (txData.gasData?.owner) {
|
|
170
|
-
this.gasSponsor = txData.gasData.owner;
|
|
171
|
-
}
|
|
172
|
-
else {
|
|
173
235
|
this.gasSponsor = undefined;
|
|
236
|
+
return;
|
|
174
237
|
}
|
|
238
|
+
this.gasBudget = gasData.budget ? Number(gasData.budget) : undefined;
|
|
239
|
+
this.gasPrice = gasData.price ? Number(gasData.price) : undefined;
|
|
240
|
+
this.gasPaymentObjects =
|
|
241
|
+
gasData.payment && gasData.payment.length > 0
|
|
242
|
+
? gasData.payment.map((payment) => payment)
|
|
243
|
+
: undefined;
|
|
244
|
+
this.gasSponsor = gasData.owner || undefined;
|
|
175
245
|
}
|
|
176
246
|
/**
|
|
177
247
|
* @inheritDoc
|
|
@@ -194,14 +264,18 @@ class Transaction extends sdk_core_1.BaseTransaction {
|
|
|
194
264
|
};
|
|
195
265
|
return this.explainTransactionImplementation(result, explanationResult);
|
|
196
266
|
}
|
|
267
|
+
/**
|
|
268
|
+
* Updates the simulate transaction flag based on gas data availability.
|
|
269
|
+
* If all gas data is present, switches to real transaction mode.
|
|
270
|
+
*/
|
|
197
271
|
updateIsSimulateTx() {
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
}
|
|
201
|
-
else {
|
|
202
|
-
this.isSimulateTx = true;
|
|
203
|
-
}
|
|
272
|
+
const hasAllGasData = this.gasBudget && this.gasPrice && this.gasPaymentObjects && this.gasPaymentObjects.length > 0;
|
|
273
|
+
this.isSimulateTx = !hasAllGasData;
|
|
204
274
|
}
|
|
275
|
+
/**
|
|
276
|
+
* Builds a dry run (simulate) transaction with maximum gas values.
|
|
277
|
+
* Used for gas estimation without committing the transaction.
|
|
278
|
+
*/
|
|
205
279
|
async buildDryRunTransaction() {
|
|
206
280
|
this.validateTxDataImplementation();
|
|
207
281
|
await this.populateTxData();
|
|
@@ -216,39 +290,83 @@ class Transaction extends sdk_core_1.BaseTransaction {
|
|
|
216
290
|
},
|
|
217
291
|
});
|
|
218
292
|
}
|
|
219
|
-
|
|
293
|
+
/**
|
|
294
|
+
* Builds a real transaction with actual gas data.
|
|
295
|
+
* Only builds if necessary (first time or rebuild required).
|
|
296
|
+
*/
|
|
297
|
+
async buildRealTransaction() {
|
|
220
298
|
if (this._txDataBytes === undefined || this._rebuildRequired) {
|
|
221
299
|
this.validateTxData();
|
|
222
300
|
await this.populateTxData();
|
|
223
|
-
this.
|
|
224
|
-
this._iotaTransaction.setGasBudget(this.gasBudget);
|
|
225
|
-
this._iotaTransaction.setGasPayment(this.gasPaymentObjects?.slice(0, constants_1.MAX_GAS_PAYMENT_OBJECTS - 1));
|
|
301
|
+
this.setGasDataOnTransaction();
|
|
226
302
|
this._txDataBytes = await this._iotaTransaction.build();
|
|
227
303
|
this._rebuildRequired = false;
|
|
228
304
|
}
|
|
229
305
|
this.serializeSignatures();
|
|
230
306
|
return this._txDataBytes;
|
|
231
307
|
}
|
|
308
|
+
/**
|
|
309
|
+
* Sets gas data on the IOTA transaction object.
|
|
310
|
+
*/
|
|
311
|
+
setGasDataOnTransaction() {
|
|
312
|
+
this._iotaTransaction.setGasPrice(this.gasPrice);
|
|
313
|
+
this._iotaTransaction.setGasBudget(this.gasBudget);
|
|
314
|
+
this._iotaTransaction.setGasPayment(this.gasPaymentObjects.slice(0, constants_1.MAX_GAS_PAYMENT_OBJECTS - 1));
|
|
315
|
+
}
|
|
316
|
+
/**
|
|
317
|
+
* Populates the IOTA transaction with inputs, commands, and gas sponsor if applicable.
|
|
318
|
+
*/
|
|
232
319
|
async populateTxData() {
|
|
233
320
|
this._iotaTransaction = new transactions_1.Transaction();
|
|
234
321
|
this.populateTxInputsAndCommands();
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
this.
|
|
322
|
+
// If gas sponsor is different from sender, set up sponsored transaction
|
|
323
|
+
if (this.hasDifferentGasSponsor()) {
|
|
324
|
+
await this.setupGasSponsoredTransaction();
|
|
238
325
|
}
|
|
239
326
|
this._iotaTransaction.setSender(this.sender);
|
|
240
327
|
}
|
|
328
|
+
/**
|
|
329
|
+
* Checks if the transaction has a gas sponsor different from the sender.
|
|
330
|
+
*/
|
|
331
|
+
hasDifferentGasSponsor() {
|
|
332
|
+
return Boolean(this.gasSponsor && this._sender !== this.gasSponsor);
|
|
333
|
+
}
|
|
334
|
+
/**
|
|
335
|
+
* Sets up a gas-sponsored transaction by building the transaction kind
|
|
336
|
+
* and setting the gas owner.
|
|
337
|
+
*/
|
|
338
|
+
async setupGasSponsoredTransaction() {
|
|
339
|
+
const transactionKind = await this._iotaTransaction.build({ onlyTransactionKind: true });
|
|
340
|
+
this._iotaTransaction = transactions_1.Transaction.fromKind(transactionKind);
|
|
341
|
+
this._iotaTransaction.setGasOwner(this._gasSponsor);
|
|
342
|
+
}
|
|
343
|
+
/**
|
|
344
|
+
* Serializes a signature into IOTA's expected format.
|
|
345
|
+
* Format: [signature_scheme_flag (1 byte), signature, public_key]
|
|
346
|
+
* Currently hardcoded to EDDSA (0x00) as IOTA only supports this scheme.
|
|
347
|
+
*/
|
|
241
348
|
serializeSignature(signature) {
|
|
349
|
+
const SIGNATURE_SCHEME_EDDSA = 0x00;
|
|
242
350
|
const pubKey = Buffer.from(signature.publicKey.pub, 'hex');
|
|
243
|
-
const
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
return (0, utils_1.toBase64)(
|
|
351
|
+
const serializedSignature = new Uint8Array(1 + signature.signature.length + pubKey.length);
|
|
352
|
+
serializedSignature.set([SIGNATURE_SCHEME_EDDSA]);
|
|
353
|
+
serializedSignature.set(signature.signature, 1);
|
|
354
|
+
serializedSignature.set(pubKey, 1 + signature.signature.length);
|
|
355
|
+
return (0, utils_1.toBase64)(serializedSignature);
|
|
248
356
|
}
|
|
357
|
+
/**
|
|
358
|
+
* Validates all transaction data required for a real (non-simulate) transaction.
|
|
359
|
+
*/
|
|
249
360
|
validateTxData() {
|
|
250
361
|
this.validateTxDataImplementation();
|
|
251
|
-
|
|
362
|
+
this.validateCommonTxData();
|
|
363
|
+
this.validateSignatures();
|
|
364
|
+
}
|
|
365
|
+
/**
|
|
366
|
+
* Validates common transaction data (sender, gas data).
|
|
367
|
+
*/
|
|
368
|
+
validateCommonTxData() {
|
|
369
|
+
if (!this.sender) {
|
|
252
370
|
throw new sdk_core_1.InvalidTransactionError('Transaction sender is required');
|
|
253
371
|
}
|
|
254
372
|
if (!this.gasPrice) {
|
|
@@ -257,22 +375,27 @@ class Transaction extends sdk_core_1.BaseTransaction {
|
|
|
257
375
|
if (!this.gasBudget) {
|
|
258
376
|
throw new sdk_core_1.InvalidTransactionError('Gas budget is required');
|
|
259
377
|
}
|
|
260
|
-
if (!this.gasPaymentObjects || this.gasPaymentObjects
|
|
378
|
+
if (!this.gasPaymentObjects || this.gasPaymentObjects.length === 0) {
|
|
261
379
|
throw new sdk_core_1.InvalidTransactionError('Gas payment objects are required');
|
|
262
380
|
}
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
381
|
+
}
|
|
382
|
+
/**
|
|
383
|
+
* Validates sender and gas sponsor signatures if present.
|
|
384
|
+
*/
|
|
385
|
+
validateSignatures() {
|
|
386
|
+
if (this._signature && !this.isValidSignature(this._signature)) {
|
|
266
387
|
throw new sdk_core_1.InvalidTransactionError('Invalid sender signature');
|
|
267
388
|
}
|
|
268
|
-
if (this._gasSponsorSignature &&
|
|
269
|
-
!(utils_2.default.isValidPublicKey(this._gasSponsorSignature.publicKey.pub) &&
|
|
270
|
-
utils_2.default.isValidSignature((0, utils_1.toBase64)(this._gasSponsorSignature.signature)))) {
|
|
389
|
+
if (this._gasSponsorSignature && !this.isValidSignature(this._gasSponsorSignature)) {
|
|
271
390
|
throw new sdk_core_1.InvalidTransactionError('Invalid gas sponsor signature');
|
|
272
391
|
}
|
|
273
392
|
}
|
|
393
|
+
/**
|
|
394
|
+
* Checks if a signature has valid public key and signature data.
|
|
395
|
+
*/
|
|
396
|
+
isValidSignature(signature) {
|
|
397
|
+
return utils_2.default.isValidPublicKey(signature.publicKey.pub) && utils_2.default.isValidSignature((0, utils_1.toBase64)(signature.signature));
|
|
398
|
+
}
|
|
274
399
|
}
|
|
275
400
|
exports.Transaction = Transaction;
|
|
276
|
-
Transaction.EMPTY_PUBLIC_KEY = Buffer.alloc(constants_1.IOTA_KEY_BYTES_LENGTH);
|
|
277
|
-
Transaction.EMPTY_SIGNATURE = Buffer.alloc(constants_1.IOTA_SIGNATURE_LENGTH);
|
|
278
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3RyYW5zYWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLG1EQVE4QjtBQUU5Qiw4REFJcUM7QUFFckMsZ0RBQWdEO0FBQ2hELGtFQUEwQztBQUMxQywyQ0FNcUI7QUFDckIsb0RBQTRCO0FBRTVCLE1BQXNCLFdBQVksU0FBUSwwQkFBZTtJQW9CdkQsWUFBc0IsVUFBZ0M7UUFDcEQsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ2xCLElBQUksQ0FBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO1FBQ2xCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxLQUFLLENBQUM7UUFDOUIsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7SUFDNUIsQ0FBQztJQUVELElBQUksU0FBUztRQUNYLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQztJQUN6QixDQUFDO0lBRUQsSUFBSSxTQUFTLENBQUMsS0FBeUI7UUFDckMsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7UUFDeEIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQztJQUMvQixDQUFDO0lBRUQsSUFBSSxpQkFBaUI7UUFDbkIsT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUM7SUFDakMsQ0FBQztJQUVELElBQUksaUJBQWlCLENBQUMsS0FBMkM7UUFDL0QsSUFBSSxDQUFDLGtCQUFrQixHQUFHLEtBQUssQ0FBQztRQUNoQyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDO0lBQy9CLENBQUM7SUFFRCxJQUFJLFFBQVE7UUFDVixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDeEIsQ0FBQztJQUVELElBQUksUUFBUSxDQUFDLEtBQXlCO1FBQ3BDLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENB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ICBCYXNlS2V5LFxuICBCYXNlVHJhbnNhY3Rpb24sXG4gIEludmFsaWRUcmFuc2FjdGlvbkVycm9yLFxuICBQdWJsaWNLZXksXG4gIFNpZ25hdHVyZSxcbiAgVHJhbnNhY3Rpb25SZWNpcGllbnQsXG4gIFRyYW5zYWN0aW9uVHlwZSxcbn0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0IHsgQmFzZUNvaW4gYXMgQ29pbkNvbmZpZyB9IGZyb20gJ0BiaXRnby1iZXRhL3N0YXRpY3MnO1xuaW1wb3J0IHtcbiAgVHJhbnNhY3Rpb25EYXRhIGFzIElvdGFUcmFuc2FjdGlvbkRhdGEsXG4gIFRyYW5zYWN0aW9uIGFzIElvdGFUcmFuc2FjdGlvbixcbiAgVHJhbnNhY3Rpb25EYXRhQnVpbGRlciBhcyBJb3RhVHJhbnNhY3Rpb25EYXRhQnVpbGRlcixcbn0gZnJvbSAnQGlvdGEvaW90YS1zZGsvdHJhbnNhY3Rpb25zJztcbmltcG9ydCB7IFR4RGF0YSwgVHJhbnNhY3Rpb25PYmplY3RJbnB1dCwgVHJhbnNhY3Rpb25FeHBsYW5hdGlvbiB9IGZyb20gJy4vaWZhY2UnO1xuaW1wb3J0IHsgdG9CYXNlNjQgfSBmcm9tICdAaW90YS9pb3RhLXNkay91dGlscyc7XG5pbXBvcnQgYmxha2UyYiBmcm9tICdAYml0Z28tYmV0YS9ibGFrZTJiJztcbmltcG9ydCB7XG4gIE1BWF9HQVNfQlVER0VULFxuICBNQVhfR0FTX1BBWU1FTlRfT0JKRUNUUyxcbiAgTUFYX0dBU19QUklDRSxcbiAgSU9UQV9LRVlfQllURVNfTEVOR1RILFxuICBJT1RBX1NJR05BVFVSRV9MRU5HVEgsXG59IGZyb20gJy4vY29uc3RhbnRzJztcbmltcG9ydCB1dGlscyBmcm9tICcuL3V0aWxzJztcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFRyYW5zYWN0aW9uIGV4dGVuZHMgQmFzZVRyYW5zYWN0aW9uIHtcbiAgc3RhdGljIEVNUFRZX1BVQkxJQ19LRVkgPSBCdWZmZXIuYWxsb2MoSU9UQV9LRVlfQllURVNfTEVOR1RIKTtcbiAgc3RhdGljIEVNUFRZX1NJR05BVFVSRSA9IEJ1ZmZlci5hbGxvYyhJT1RBX1NJR05BVFVSRV9MRU5HVEgpO1xuXG4gIHByb3RlY3RlZCBfcmVidWlsZFJlcXVpcmVkOiBib29sZWFuO1xuICBwcm90ZWN0ZWQgX3R5cGU6IFRyYW5zYWN0aW9uVHlwZTtcbiAgcHJvdGVjdGVkIF9pb3RhVHJhbnNhY3Rpb246IElvdGFUcmFuc2FjdGlvbjtcblxuICBwcml2YXRlIF9nYXNCdWRnZXQ/OiBudW1iZXI7XG4gIHByaXZhdGUgX2dhc1BheW1lbnRPYmplY3RzPzogVHJhbnNhY3Rpb25PYmplY3RJbnB1dFtdO1xuICBwcml2YXRlIF9nYXNQcmljZT86IG51bWJlcjtcbiAgcHJpdmF0ZSBfZ2FzU3BvbnNvcj86IHN0cmluZztcbiAgcHJpdmF0ZSBfc2VuZGVyOiBzdHJpbmc7XG4gIHByaXZhdGUgX3NpZ25hdHVyZT86IFNpZ25hdHVyZTtcbiAgcHJpdmF0ZSBfc2VyaWFsaXplZFNpZ25hdHVyZT86IHN0cmluZztcbiAgcHJpdmF0ZSBfZ2FzU3BvbnNvclNpZ25hdHVyZT86IFNpZ25hdHVyZTtcbiAgcHJpdmF0ZSBfc2VyaWFsaXplZEdhc1Nwb25zb3JTaWduYXR1cmU/OiBzdHJpbmc7XG4gIHByaXZhdGUgX3R4RGF0YUJ5dGVzPzogVWludDhBcnJheTxBcnJheUJ1ZmZlckxpa2U+O1xuICBwcml2YXRlIF9pc1NpbXVsYXRlVHg6IGJvb2xlYW47XG5cbiAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKGNvaW5Db25maWc6IFJlYWRvbmx5PENvaW5Db25maWc+KSB7XG4gICAgc3VwZXIoY29pbkNvbmZpZyk7XG4gICAgdGhpcy5fc2VuZGVyID0gJyc7XG4gICAgdGhpcy5fcmVidWlsZFJlcXVpcmVkID0gZmFsc2U7XG4gICAgdGhpcy5faXNTaW11bGF0ZVR4ID0gdHJ1ZTtcbiAgfVxuXG4gIGdldCBnYXNCdWRnZXQoKTogbnVtYmVyIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fZ2FzQnVkZ2V0O1xuICB9XG5cbiAgc2V0IGdhc0J1ZGdldCh2YWx1ZTogbnVtYmVyIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5fZ2FzQnVkZ2V0ID0gdmFsdWU7XG4gICAgdGhpcy5fcmVidWlsZFJlcXVpcmVkID0gdHJ1ZTtcbiAgfVxuXG4gIGdldCBnYXNQYXltZW50T2JqZWN0cygpOiBUcmFuc2FjdGlvbk9iamVjdElucHV0W10gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9nYXNQYXltZW50T2JqZWN0cztcbiAgfVxuXG4gIHNldCBnYXNQYXltZW50T2JqZWN0cyh2YWx1ZTogVHJhbnNhY3Rpb25PYmplY3RJbnB1dFtdIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5fZ2FzUGF5bWVudE9iamVjdHMgPSB2YWx1ZTtcbiAgICB0aGlzLl9yZWJ1aWxkUmVxdWlyZWQgPSB0cnVlO1xuICB9XG5cbiAgZ2V0IGdhc1ByaWNlKCk6IG51bWJlciB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX2dhc1ByaWNlO1xuICB9XG5cbiAgc2V0IGdhc1ByaWNlKHZhbHVlOiBudW1iZXIgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLl9nYXNQcmljZSA9IHZhbHVlO1xuICAgIHRoaXMuX3JlYnVpbGRSZXF1aXJlZCA9IHRydWU7XG4gIH1cblxuICBnZXQgZ2FzU3BvbnNvcigpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9nYXNTcG9uc29yO1xuICB9XG5cbiAgc2V0IGdhc1Nwb25zb3IodmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuX2dhc1Nwb25zb3IgPSB2YWx1ZTtcbiAgICB0aGlzLl9yZWJ1aWxkUmVxdWlyZWQgPSB0cnVlO1xuICB9XG5cbiAgZ2V0IHNlbmRlcigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9zZW5kZXI7XG4gIH1cblxuICBzZXQgc2VuZGVyKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9zZW5kZXIgPSB2YWx1ZTtcbiAgICB0aGlzLl9yZWJ1aWxkUmVxdWlyZWQgPSB0cnVlO1xuICB9XG5cbiAgZ2V0IGlzU2ltdWxhdGVUeCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5faXNTaW11bGF0ZVR4O1xuICB9XG5cbiAgc2V0IGlzU2ltdWxhdGVUeCh2YWx1ZTogYm9vbGVhbikge1xuICAgIGlmICghdmFsdWUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHRoaXMudmFsaWRhdGVUeERhdGEoKTtcbiAgICAgICAgdGhpcy5fcmVidWlsZFJlcXVpcmVkID0gdHJ1ZTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogJ1Vua25vd24gZXJyb3InO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFR4IGRhdGEgdmFsaWRhdGlvbiBmYWlsZWQ6ICR7ZXJyb3JNZXNzYWdlfS4ge0NhdXNlOiAke2Vycm9yfX1gKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5faXNTaW11bGF0ZVR4ID0gdmFsdWU7XG4gIH1cblxuICBnZXQgc2lnbmFibGVQYXlsb2FkKCk6IEJ1ZmZlciB7XG4gICAgaWYgKHRoaXMuaXNTaW11bGF0ZVR4KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBzaWduIGEgc2ltdWxhdGUgdHgnKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuX3R4RGF0YUJ5dGVzID09PSB1bmRlZmluZWQgfHwgdGhpcy5fcmVidWlsZFJlcXVpcmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1R4IG5vdCBidWlsdCBvciBhIHJlYnVpbGQgaXMgcmVxdWlyZWQnKTtcbiAgICB9XG4gICAgY29uc3QgaW50ZW50TWVzc2FnZSA9IHRoaXMubWVzc2FnZVdpdGhJbnRlbnQodGhpcy5fdHhEYXRhQnl0ZXMpO1xuICAgIHJldHVybiBCdWZmZXIuZnJvbShibGFrZTJiKDMyKS51cGRhdGUoaW50ZW50TWVzc2FnZSkuZGlnZXN0KCdiaW5hcnknKSk7XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKiovXG4gIGdldCBpZCgpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLl90eERhdGFCeXRlcyA9PT0gdW5kZWZpbmVkIHx8IHRoaXMuX3JlYnVpbGRSZXF1aXJlZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdUeCBub3QgYnVpbHQgb3IgYSByZWJ1aWxkIGlzIHJlcXVpcmVkJyk7XG4gICAgfVxuICAgIHJldHVybiBJb3RhVHJhbnNhY3Rpb25EYXRhQnVpbGRlci5nZXREaWdlc3RGcm9tQnl0ZXModGhpcy5fdHhEYXRhQnl0ZXMpO1xuICB9XG5cbiAgYWRkU2lnbmF0dXJlKHB1YmxpY0tleTogUHVibGljS2V5LCBzaWduYXR1cmU6IEJ1ZmZlcik6IHZvaWQge1xuICAgIHRoaXMuX3NpZ25hdHVyZSA9IHsgcHVibGljS2V5LCBzaWduYXR1cmUgfTtcbiAgfVxuXG4gIGFkZEdhc1Nwb25zb3JTaWduYXR1cmUocHVibGljS2V5OiBQdWJsaWNLZXksIHNpZ25hdHVyZTogQnVmZmVyKTogdm9pZCB7XG4gICAgdGhpcy5fZ2FzU3BvbnNvclNpZ25hdHVyZSA9IHsgcHVibGljS2V5LCBzaWduYXR1cmUgfTtcbiAgfVxuXG4gIGNhblNpZ24oX2tleTogQmFzZUtleSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhdGhpcy5pc1NpbXVsYXRlVHg7XG4gIH1cblxuICBnZXRGZWUoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5nYXNCdWRnZXQ/LnRvU3RyaW5nKCk7XG4gIH1cblxuICBnZXQgc2VyaWFsaXplZEdhc1Nwb25zb3JTaWduYXR1cmUoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fc2VyaWFsaXplZEdhc1Nwb25zb3JTaWduYXR1cmU7XG4gIH1cblxuICBnZXQgc2VyaWFsaXplZFNpZ25hdHVyZSgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9zZXJpYWxpemVkU2lnbmF0dXJlO1xuICB9XG5cbiAgc2VyaWFsaXplU2lnbmF0dXJlcygpOiB2b2lkIHtcbiAgICB0aGlzLl9zaWduYXR1cmVzID0gW107XG4gICAgaWYgKHRoaXMuX3NpZ25hdHVyZSkge1xuICAgICAgdGhpcy5fc2VyaWFsaXplZFNpZ25hdHVyZSA9IHRoaXMuc2VyaWFsaXplU2lnbmF0dXJlKHRoaXMuX3NpZ25hdHVyZSBhcyBTaWduYXR1cmUpO1xuICAgICAgdGhpcy5fc2lnbmF0dXJlcy5wdXNoKHRoaXMuX3NlcmlhbGl6ZWRTaWduYXR1cmUpO1xuICAgIH1cbiAgICBpZiAodGhpcy5fZ2FzU3BvbnNvclNpZ25hdHVyZSkge1xuICAgICAgdGhpcy5fc2VyaWFsaXplZEdhc1Nwb25zb3JTaWduYXR1cmUgPSB0aGlzLnNlcmlhbGl6ZVNpZ25hdHVyZSh0aGlzLl9nYXNTcG9uc29yU2lnbmF0dXJlIGFzIFNpZ25hdHVyZSk7XG4gICAgICB0aGlzLl9zaWduYXR1cmVzLnB1c2godGhpcy5fc2VyaWFsaXplZEdhc1Nwb25zb3JTaWduYXR1cmUpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHRvQnJvYWRjYXN0Rm9ybWF0KCk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgY29uc3QgdHhEYXRhQnl0ZXM6IFVpbnQ4QXJyYXk8QXJyYXlCdWZmZXJMaWtlPiA9IGF3YWl0IHRoaXMuYnVpbGQoKTtcbiAgICByZXR1cm4gdG9CYXNlNjQodHhEYXRhQnl0ZXMpO1xuICB9XG5cbiAgYXN5bmMgYnVpbGQoKTogUHJvbWlzZTxVaW50OEFycmF5PEFycmF5QnVmZmVyTGlrZT4+IHtcbiAgICBpZiAodGhpcy5pc1NpbXVsYXRlVHgpIHtcbiAgICAgIHJldHVybiB0aGlzLmJ1aWxkRHJ5UnVuVHJhbnNhY3Rpb24oKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuYnVpbGRUcmFuc2FjdGlvbigpO1xuICB9XG5cbiAgdG9Kc29uKCk6IFR4RGF0YSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHNlbmRlcjogdGhpcy5zZW5kZXIsXG4gICAgICBnYXNCdWRnZXQ6IHRoaXMuZ2FzQnVkZ2V0LFxuICAgICAgZ2FzUHJpY2U6IHRoaXMuZ2FzUHJpY2UsXG4gICAgICBnYXNQYXltZW50T2JqZWN0czogdGhpcy5nYXNQYXltZW50T2JqZWN0cyxcbiAgICAgIGdhc1Nwb25zb3I6IHRoaXMuZ2FzU3BvbnNvcixcbiAgICAgIHR5cGU6IHRoaXMudHlwZSxcbiAgICB9O1xuICB9XG5cbiAgcGFyc2VGcm9tSlNPTih0eERhdGE6IFR4RGF0YSk6IHZvaWQge1xuICAgIHRoaXMuc2VuZGVyID0gdHhEYXRhLnNlbmRlcjtcbiAgICB0aGlzLmdhc0J1ZGdldCA9IHR4RGF0YS5nYXNCdWRnZXQ7XG4gICAgdGhpcy5nYXNQcmljZSA9IHR4RGF0YS5nYXNQcmljZTtcbiAgICB0aGlzLmdhc1BheW1lbnRPYmplY3RzID0gdHhEYXRhLmdhc1BheW1lbnRPYmplY3RzO1xuICAgIGlmICh0eERhdGEuZ2FzU3BvbnNvciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmdhc1Nwb25zb3IgPSB0eERhdGEuZ2FzU3BvbnNvcjtcbiAgICB9XG4gIH1cblxuICBwYXJzZUZyb21Ccm9hZGNhc3RUeCh0eDogc3RyaW5nIHwgVWludDhBcnJheSk6IHZvaWQge1xuICAgIGNvbnN0IHR4RGF0YSA9IElvdGFUcmFuc2FjdGlvbi5mcm9tKHR4KS5nZXREYXRhKCk7XG4gICAgaWYgKHR4RGF0YS5zZW5kZXIpIHtcbiAgICAgIHRoaXMuc2VuZGVyID0gdHhEYXRhLnNlbmRlcjtcbiAgICB9XG4gICAgaWYgKHR4RGF0YS5nYXNEYXRhPy5idWRnZXQpIHtcbiAgICAgIHRoaXMuZ2FzQnVkZ2V0ID0gTnVtYmVyKHR4RGF0YS5nYXNEYXRhLmJ1ZGdldCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZ2FzQnVkZ2V0ID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBpZiAodHhEYXRhLmdhc0RhdGE/LnByaWNlKSB7XG4gICAgICB0aGlzLmdhc1ByaWNlID0gTnVtYmVyKHR4RGF0YS5nYXNEYXRhLnByaWNlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5nYXNQcmljZSA9IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgaWYgKHR4RGF0YS5nYXNEYXRhPy5wYXltZW50ICYmIHR4RGF0YS5nYXNEYXRhLnBheW1lbnQubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5nYXNQYXltZW50T2JqZWN0cyA9IHR4RGF0YS5nYXNEYXRhLnBheW1lbnQubWFwKChwYXltZW50KSA9PiBwYXltZW50IGFzIFRyYW5zYWN0aW9uT2JqZWN0SW5wdXQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmdhc1BheW1lbnRPYmplY3RzID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBpZiAodHhEYXRhLmdhc0RhdGE/Lm93bmVyKSB7XG4gICAgICB0aGlzLmdhc1Nwb25zb3IgPSB0eERhdGEuZ2FzRGF0YS5vd25lcjtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5nYXNTcG9uc29yID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgZXhwbGFpblRyYW5zYWN0aW9uKCk6IGFueSB7XG4gICAgY29uc3QgcmVzdWx0ID0gdGhpcy50b0pzb24oKTtcbiAgICBjb25zdCBkaXNwbGF5T3JkZXIgPSBbJ2lkJywgJ291dHB1dHMnLCAnb3V0cHV0QW1vdW50JywgJ2NoYW5nZU91dHB1dHMnLCAnY2hhbmdlQW1vdW50JywgJ2ZlZScsICd0eXBlJ107XG4gICAgY29uc3Qgb3V0cHV0czogVHJhbnNhY3Rpb25SZWNpcGllbnRbXSA9IFtdO1xuXG4gICAgY29uc3QgZXhwbGFuYXRpb25SZXN1bHQ6IFRyYW5zYWN0aW9uRXhwbGFuYXRpb24gPSB7XG4gICAgICBkaXNwbGF5T3JkZXIsXG4gICAgICBpZDogdGhpcy5pZCxcbiAgICAgIG91dHB1dHMsXG4gICAgICBvdXRwdXRBbW91bnQ6ICcwJyxcbiAgICAgIGNoYW5nZU91dHB1dHM6IFtdLFxuICAgICAgY2hhbmdlQW1vdW50OiAnMCcsXG4gICAgICBmZWU6IHsgZmVlOiB0aGlzLmdhc0J1ZGdldCA/IHRoaXMuZ2FzQnVkZ2V0LnRvU3RyaW5nKCkgOiAnJyB9LFxuICAgICAgc2VuZGVyOiB0aGlzLnNlbmRlcixcbiAgICAgIHNwb25zb3I6IHRoaXMuZ2FzU3BvbnNvcixcbiAgICAgIHR5cGU6IHRoaXMudHlwZSxcbiAgICB9O1xuXG4gICAgcmV0dXJuIHRoaXMuZXhwbGFpblRyYW5zYWN0aW9uSW1wbGVtZW50YXRpb24ocmVzdWx0LCBleHBsYW5hdGlvblJlc3VsdCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgdXBkYXRlSXNTaW11bGF0ZVR4KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmdhc0J1ZGdldCAmJiB0aGlzLmdhc1ByaWNlICYmIHRoaXMuZ2FzUGF5bWVudE9iamVjdHMgJiYgdGhpcy5nYXNQYXltZW50T2JqZWN0cz8ubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5pc1NpbXVsYXRlVHggPSBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5pc1NpbXVsYXRlVHggPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBtZXNzYWdlV2l0aEludGVudChtZXNzYWdlOiBVaW50OEFycmF5KTogVWludDhBcnJheTtcbiAgcHJvdGVjdGVkIGFic3RyYWN0IHBvcHVsYXRlVHhJbnB1dHNBbmRDb21tYW5kcygpOiB2b2lkO1xuICBwcm90ZWN0ZWQgYWJzdHJhY3QgdmFsaWRhdGVUeERhdGFJbXBsZW1lbnRhdGlvbigpOiB2b2lkO1xuXG4gIC8qKlxuICAgKiBBZGQgdGhlIGlucHV0IGFuZCBvdXRwdXQgZW50cmllcyBmb3IgdGhpcyB0cmFuc2FjdGlvbi5cbiAgICovXG4gIGFic3RyYWN0IGFkZElucHV0c0FuZE91dHB1dHMoKTogdm9pZDtcblxuICAvKipcbiAgICogUmV0dXJucyBhIGNvbXBsZXRlIGV4cGxhbmF0aW9uIGZvciBhIHRyYW5zZmVyIHRyYW5zYWN0aW9uXG4gICAqIEBwYXJhbSB7VHhEYXRhfSBqc29uIFRoZSB0cmFuc2FjdGlvbiBkYXRhIGluIGpzb24gZm9ybWF0XG4gICAqIEBwYXJhbSB7VHJhbnNhY3Rpb25FeHBsYW5hdGlvbn0gZXhwbGFuYXRpb25SZXN1bHQgVGhlIHRyYW5zYWN0aW9uIGV4cGxhbmF0aW9uIHRvIGJlIGNvbXBsZXRlZFxuICAgKiBAcmV0dXJucyB7VHJhbnNhY3Rpb25FeHBsYW5hdGlvbn1cbiAgICovXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBleHBsYWluVHJhbnNhY3Rpb25JbXBsZW1lbnRhdGlvbihcbiAgICBqc29uOiBUeERhdGEsXG4gICAgZXhwbGFuYXRpb25SZXN1bHQ6IFRyYW5zYWN0aW9uRXhwbGFuYXRpb25cbiAgKTogVHJhbnNhY3Rpb25FeHBsYW5hdGlvbjtcblxuICBwcml2YXRlIGFzeW5jIGJ1aWxkRHJ5UnVuVHJhbnNhY3Rpb24oKTogUHJvbWlzZTxVaW50OEFycmF5PEFycmF5QnVmZmVyTGlrZT4+IHtcbiAgICB0aGlzLnZhbGlkYXRlVHhEYXRhSW1wbGVtZW50YXRpb24oKTtcbiAgICBhd2FpdCB0aGlzLnBvcHVsYXRlVHhEYXRhKCk7XG4gICAgY29uc3QgdHhEYXRhQnVpbGRlciA9IG5ldyBJb3RhVHJhbnNhY3Rpb25EYXRhQnVpbGRlcih0aGlzLl9pb3RhVHJhbnNhY3Rpb24uZ2V0RGF0YSgpIGFzIElvdGFUcmFuc2FjdGlvbkRhdGEpO1xuICAgIHJldHVybiB0eERhdGFCdWlsZGVyLmJ1aWxkKHtcbiAgICAgIG92ZXJyaWRlczoge1xuICAgICAgICBnYXNEYXRhOiB7XG4gICAgICAgICAgYnVkZ2V0OiBNQVhfR0FTX0JVREdFVC50b1N0cmluZygpLFxuICAgICAgICAgIHByaWNlOiBNQVhfR0FTX1BSSUNFLnRvU3RyaW5nKCksXG4gICAgICAgICAgcGF5bWVudDogW10sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBidWlsZFRyYW5zYWN0aW9uKCk6IFByb21pc2U8VWludDhBcnJheTxBcnJheUJ1ZmZlckxpa2U+PiB7XG4gICAgaWYgKHRoaXMuX3R4RGF0YUJ5dGVzID09PSB1bmRlZmluZWQgfHwgdGhpcy5fcmVidWlsZFJlcXVpcmVkKSB7XG4gICAgICB0aGlzLnZhbGlkYXRlVHhEYXRhKCk7XG4gICAgICBhd2FpdCB0aGlzLnBvcHVsYXRlVHhEYXRhKCk7XG4gICAgICB0aGlzLl9pb3RhVHJhbnNhY3Rpb24uc2V0R2FzUHJpY2UodGhpcy5nYXNQcmljZSBhcyBudW1iZXIpO1xuICAgICAgdGhpcy5faW90YVRyYW5zYWN0aW9uLnNldEdhc0J1ZGdldCh0aGlzLmdhc0J1ZGdldCBhcyBudW1iZXIpO1xuICAgICAgdGhpcy5faW90YVRyYW5zYWN0aW9uLnNldEdhc1BheW1lbnQoXG4gICAgICAgIHRoaXMuZ2FzUGF5bWVudE9iamVjdHM/LnNsaWNlKDAsIE1BWF9HQVNfUEFZTUVOVF9PQkpFQ1RTIC0gMSkgYXMgVHJhbnNhY3Rpb25PYmplY3RJbnB1dFtdXG4gICAgICApO1xuICAgICAgdGhpcy5fdHhEYXRhQnl0ZXMgPSBhd2FpdCB0aGlzLl9pb3RhVHJhbnNhY3Rpb24uYnVpbGQoKTtcbiAgICAgIHRoaXMuX3JlYnVpbGRSZXF1aXJlZCA9IGZhbHNlO1xuICAgIH1cbiAgICB0aGlzLnNlcmlhbGl6ZVNpZ25hdHVyZXMoKTtcbiAgICByZXR1cm4gdGhpcy5fdHhEYXRhQnl0ZXM7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHBvcHVsYXRlVHhEYXRhKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuX2lvdGFUcmFuc2FjdGlvbiA9IG5ldyBJb3RhVHJhbnNhY3Rpb24oKTtcbiAgICB0aGlzLnBvcHVsYXRlVHhJbnB1dHNBbmRDb21tYW5kcygpO1xuICAgIGlmICh0aGlzLmdhc1Nwb25zb3IgJiYgdGhpcy5fc2VuZGVyICE9PSB0aGlzLmdhc1Nwb25zb3IpIHtcbiAgICAgIHRoaXMuX2lvdGFUcmFuc2FjdGlvbiA9IElvdGFUcmFuc2FjdGlvbi5mcm9tS2luZChcbiAgICAgICAgYXdhaXQgdGhpcy5faW90YVRyYW5zYWN0aW9uLmJ1aWxkKHsgb25seVRyYW5zYWN0aW9uS2luZDogdHJ1ZSB9KVxuICAgICAgKTtcbiAgICAgIHRoaXMuX2lvdGFUcmFuc2FjdGlvbi5zZXRHYXNPd25lcih0aGlzLl9nYXNTcG9uc29yIGFzIHN0cmluZyk7XG4gICAgfVxuICAgIHRoaXMuX2lvdGFUcmFuc2FjdGlvbi5zZXRTZW5kZXIodGhpcy5zZW5kZXIpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXJpYWxpemVTaWduYXR1cmUoc2lnbmF0dXJlOiBTaWduYXR1cmUpOiBzdHJpbmcge1xuICAgIGNvbnN0IHB1YktleSA9IEJ1ZmZlci5mcm9tKHNpZ25hdHVyZS5wdWJsaWNLZXkucHViLCAnaGV4Jyk7XG4gICAgY29uc3Qgc2VyaWFsaXplZF9zaWcgPSBuZXcgVWludDhBcnJheSgxICsgc2lnbmF0dXJlLnNpZ25hdHVyZS5sZW5ndGggKyBwdWJLZXkubGVuZ3RoKTtcbiAgICBzZXJpYWxpemVkX3NpZy5zZXQoWzB4MDBdKTsgLy9IYXJkY29kaW5nIHRoZSBzaWduYXR1cmUgc2NoZW1lIGZsYWcgc2luY2Ugd2Ugb25seSBzdXBwb3J0IEVERFNBIGZvciBpb3RhXG4gICAgc2VyaWFsaXplZF9zaWcuc2V0KHNpZ25hdHVyZS5zaWduYXR1cmUsIDEpO1xuICAgIHNlcmlhbGl6ZWRfc2lnLnNldChwdWJLZXksIDEgKyBzaWduYXR1cmUuc2lnbmF0dXJlLmxlbmd0aCk7XG4gICAgcmV0dXJuIHRvQmFzZTY0KHNlcmlhbGl6ZWRfc2lnKTtcbiAgfVxuXG4gIHByaXZhdGUgdmFsaWRhdGVUeERhdGEoKTogdm9pZCB7XG4gICAgdGhpcy52YWxpZGF0ZVR4RGF0YUltcGxlbWVudGF0aW9uKCk7XG4gICAgaWYgKCF0aGlzLnNlbmRlciB8fCB0aGlzLnNlbmRlciA9PT0gJycpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvcignVHJhbnNhY3Rpb24gc2VuZGVyIGlzIHJlcXVpcmVkJyk7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmdhc1ByaWNlKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IoJ0dhcyBwcmljZSBpcyByZXF1aXJlZCcpO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5nYXNCdWRnZXQpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvcignR2FzIGJ1ZGdldCBpcyByZXF1aXJlZCcpO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5nYXNQYXltZW50T2JqZWN0cyB8fCB0aGlzLmdhc1BheW1lbnRPYmplY3RzPy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvcignR2FzIHBheW1lbnQgb2JqZWN0cyBhcmUgcmVxdWlyZWQnKTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICB0aGlzLl9zaWduYXR1cmUgJiZcbiAgICAgICEoXG4gICAgICAgIHV0aWxzLmlzVmFsaWRQdWJsaWNLZXkodGhpcy5fc2lnbmF0dXJlLnB1YmxpY0tleS5wdWIpICYmXG4gICAgICAgIHV0aWxzLmlzVmFsaWRTaWduYXR1cmUodG9CYXNlNjQodGhpcy5fc2lnbmF0dXJlLnNpZ25hdHVyZSkpXG4gICAgICApXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IoJ0ludmFsaWQgc2VuZGVyIHNpZ25hdHVyZScpO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIHRoaXMuX2dhc1Nwb25zb3JTaWduYXR1cmUgJiZcbiAgICAgICEoXG4gICAgICAgIHV0aWxzLmlzVmFsaWRQdWJsaWNLZXkodGhpcy5fZ2FzU3BvbnNvclNpZ25hdHVyZS5wdWJsaWNLZXkucHViKSAmJlxuICAgICAgICB1dGlscy5pc1ZhbGlkU2lnbmF0dXJlKHRvQmFzZTY0KHRoaXMuX2dhc1Nwb25zb3JTaWduYXR1cmUuc2lnbmF0dXJlKSlcbiAgICAgIClcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvcignSW52YWxpZCBnYXMgc3BvbnNvciBzaWduYXR1cmUnKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|
|
401
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3RyYW5zYWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLG1EQVE4QjtBQUU5Qiw4REFJcUM7QUFFckMsZ0RBQWdEO0FBQ2hELGtFQUEwQztBQUMxQywyQ0FBcUY7QUFDckYsb0RBQTRCO0FBRTVCOzs7R0FHRztBQUNILE1BQXNCLFdBQVksU0FBUSwwQkFBZTtJQXVCdkQsWUFBc0IsVUFBZ0M7UUFDcEQsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ2xCLElBQUksQ0FBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO1FBQ2xCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxLQUFLLENBQUM7UUFDOUIsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7SUFDNUIsQ0FBQztJQUVELGlFQUFpRTtJQUNqRSxJQUFJLFNBQVM7UUFDWCxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUM7SUFDekIsQ0FBQztJQUVELElBQUksU0FBUyxDQUFDLEtBQXlCO1FBQ3JDLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO1FBQ3hCLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO0lBQzdCLENBQUM7SUFFRCwwRUFBMEU7SUFDMUUsSUFBSSxpQkFBaUI7UUFDbkIsT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUM7SUFDakMsQ0FBQztJQUVELElBQUksaUJBQWlCLENBQUMsS0FBMkM7UUFDL0QsSUFBSSxDQUFDLGtCQUFrQixHQUFHLEtBQUssQ0FBQztRQUNoQyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztJQUM3QixDQUFDO0lBRUQsZ0VBQWdFO0lBQ2hFLElBQUksUUFBUTtRQUNWLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUN4QixDQUFDO0lBRUQsSUFBSSxRQUFRLENBQUMsS0FBeUI7UUFDcEMsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFL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QyxFQUFFLENBQUM7WUFDbkUsTUFBTSxJQUFJLGtDQUF1QixDQUFDLGtDQUFrQyxDQUFDLENBQUM7UUFDeEUsQ0FBQztJQUNILENBQUM7SUFFRDs7T0FFRztJQUNLLGtCQUFrQjtRQUN4QixJQUFJLElBQUksQ0FBQyxVQUFVLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7WUFDL0QsTUFBTSxJQUFJLGtDQUF1QixDQUFDLDBCQUEwQixDQUFDLENBQUM7UUFDaEUsQ0FBQztRQUVELElBQUksSUFBSSxDQUFDLG9CQUFvQixJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxFQUFFLENBQUM7WUFDbkYsTUFBTSxJQUFJLGtDQUF1QixDQUFDLCtCQUErQixDQUFDLENBQUM7UUFDckUsQ0FBQztJQUNILENBQUM7SUFFRDs7T0FFRztJQUNLLGdCQUFnQixDQUFDLFNBQW9CO1FBQzNDLE9BQU8sZUFBSyxDQUFDLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLElBQUksZUFBSyxDQUFDLGdCQUFnQixDQUFDLElBQUEsZ0JBQVEsRUFBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztJQUNsSCxDQUFDO0NBQ0Y7QUFqZUQsa0NBaWVDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQmFzZUtleSxcbiAgQmFzZVRyYW5zYWN0aW9uLFxuICBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvcixcbiAgUHVibGljS2V5LFxuICBTaWduYXR1cmUsXG4gIFRyYW5zYWN0aW9uUmVjaXBpZW50LFxuICBUcmFuc2FjdGlvblR5cGUsXG59IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcbmltcG9ydCB7IEJhc2VDb2luIGFzIENvaW5Db25maWcgfSBmcm9tICdAYml0Z28tYmV0YS9zdGF0aWNzJztcbmltcG9ydCB7XG4gIFRyYW5zYWN0aW9uRGF0YSBhcyBJb3RhVHJhbnNhY3Rpb25EYXRhLFxuICBUcmFuc2FjdGlvbiBhcyBJb3RhVHJhbnNhY3Rpb24sXG4gIFRyYW5zYWN0aW9uRGF0YUJ1aWxkZXIgYXMgSW90YVRyYW5zYWN0aW9uRGF0YUJ1aWxkZXIsXG59IGZyb20gJ0Bpb3RhL2lvdGEtc2RrL3RyYW5zYWN0aW9ucyc7XG5pbXBvcnQgeyBUeERhdGEsIFRyYW5zYWN0aW9uT2JqZWN0SW5wdXQsIFRyYW5zYWN0aW9uRXhwbGFuYXRpb24gfSBmcm9tICcuL2lmYWNlJztcbmltcG9ydCB7IHRvQmFzZTY0IH0gZnJvbSAnQGlvdGEvaW90YS1zZGsvdXRpbHMnO1xuaW1wb3J0IGJsYWtlMmIgZnJvbSAnQGJpdGdvLWJldGEvYmxha2UyYic7XG5pbXBvcnQgeyBNQVhfR0FTX0JVREdFVCwgTUFYX0dBU19QQVlNRU5UX09CSkVDVFMsIE1BWF9HQVNfUFJJQ0UgfSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQgdXRpbHMgZnJvbSAnLi91dGlscyc7XG5cbi8qKlxuICogQmFzZSBjbGFzcyBmb3IgSU9UQSB0cmFuc2FjdGlvbnMuXG4gKiBNYW5hZ2VzIHRyYW5zYWN0aW9uIHN0YXRlLCBnYXMgZGF0YSwgc2lnbmF0dXJlcywgYW5kIGJ1aWxkaW5nL3NlcmlhbGl6YXRpb24uXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBUcmFuc2FjdGlvbiBleHRlbmRzIEJhc2VUcmFuc2FjdGlvbiB7XG4gIC8vIFRyYW5zYWN0aW9uIHN0YXRlIG1hbmFnZW1lbnRcbiAgcHJvdGVjdGVkIF9yZWJ1aWxkUmVxdWlyZWQ6IGJvb2xlYW47XG4gIHByb3RlY3RlZCBfdHlwZTogVHJhbnNhY3Rpb25UeXBlO1xuICBwcm90ZWN0ZWQgX2lvdGFUcmFuc2FjdGlvbjogSW90YVRyYW5zYWN0aW9uO1xuXG4gIC8vIEdhcyBhbmQgcGF5bWVudCBkYXRhXG4gIHByaXZhdGUgX2dhc0J1ZGdldD86IG51bWJlcjtcbiAgcHJpdmF0ZSBfZ2FzUGF5bWVudE9iamVjdHM/OiBUcmFuc2FjdGlvbk9iamVjdElucHV0W107XG4gIHByaXZhdGUgX2dhc1ByaWNlPzogbnVtYmVyO1xuICBwcml2YXRlIF9nYXNTcG9uc29yPzogc3RyaW5nO1xuXG4gIC8vIFRyYW5zYWN0aW9uIGlkZW50aWZpZXJzIGFuZCBkYXRhXG4gIHByaXZhdGUgX3NlbmRlcjogc3RyaW5nO1xuICBwcml2YXRlIF90eERhdGFCeXRlcz86IFVpbnQ4QXJyYXk8QXJyYXlCdWZmZXJMaWtlPjtcbiAgcHJpdmF0ZSBfaXNTaW11bGF0ZVR4OiBib29sZWFuO1xuXG4gIC8vIFNpZ25hdHVyZSBkYXRhXG4gIHByaXZhdGUgX3NpZ25hdHVyZT86IFNpZ25hdHVyZTtcbiAgcHJpdmF0ZSBfc2VyaWFsaXplZFNpZ25hdHVyZT86IHN0cmluZztcbiAgcHJpdmF0ZSBfZ2FzU3BvbnNvclNpZ25hdHVyZT86IFNpZ25hdHVyZTtcbiAgcHJpdmF0ZSBfc2VyaWFsaXplZEdhc1Nwb25zb3JTaWduYXR1cmU/OiBzdHJpbmc7XG5cbiAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKGNvaW5Db25maWc6IFJlYWRvbmx5PENvaW5Db25maWc+KSB7XG4gICAgc3VwZXIoY29pbkNvbmZpZyk7XG4gICAgdGhpcy5fc2VuZGVyID0gJyc7XG4gICAgdGhpcy5fcmVidWlsZFJlcXVpcmVkID0gZmFsc2U7XG4gICAgdGhpcy5faXNTaW11bGF0ZVR4ID0gdHJ1ZTtcbiAgfVxuXG4gIC8vIEdhcyBidWRnZXQgZ2V0dGVyL3NldHRlciAtIG1hcmtzIHJlYnVpbGQgcmVxdWlyZWQgd2hlbiBjaGFuZ2VkXG4gIGdldCBnYXNCdWRnZXQoKTogbnVtYmVyIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fZ2FzQnVkZ2V0O1xuICB9XG5cbiAgc2V0IGdhc0J1ZGdldCh2YWx1ZTogbnVtYmVyIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5fZ2FzQnVkZ2V0ID0gdmFsdWU7XG4gICAgdGhpcy5tYXJrUmVidWlsZFJlcXVpcmVkKCk7XG4gIH1cblxuICAvLyBHYXMgcGF5bWVudCBvYmplY3RzIGdldHRlci9zZXR0ZXIgLSBtYXJrcyByZWJ1aWxkIHJlcXVpcmVkIHdoZW4gY2hhbmdlZFxuICBnZXQgZ2FzUGF5bWVudE9iamVjdHMoKTogVHJhbnNhY3Rpb25PYmplY3RJbnB1dFtdIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fZ2FzUGF5bWVudE9iamVjdHM7XG4gIH1cblxuICBzZXQgZ2FzUGF5bWVudE9iamVjdHModmFsdWU6IFRyYW5zYWN0aW9uT2JqZWN0SW5wdXRbXSB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuX2dhc1BheW1lbnRPYmplY3RzID0gdmFsdWU7XG4gICAgdGhpcy5tYXJrUmVidWlsZFJlcXVpcmVkKCk7XG4gIH1cblxuICAvLyBHYXMgcHJpY2UgZ2V0dGVyL3NldHRlciAtIG1hcmtzIHJlYnVpbGQgcmVxdWlyZWQgd2hlbiBjaGFuZ2VkXG4gIGdldCBnYXNQcmljZSgpOiBudW1iZXIgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9nYXNQcmljZTtcbiAgfVxuXG4gIHNldCBnYXNQcmljZSh2YWx1ZTogbnVtYmVyIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5fZ2FzUHJpY2UgPSB2YWx1ZTtcbiAgICB0aGlzLm1hcmtSZWJ1aWxkUmVxdWlyZWQoKTtcbiAgfVxuXG4gIC8vIEdhcyBzcG9uc29yIGdldHRlci9zZXR0ZXIgLSBtYXJrcyByZWJ1aWxkIHJlcXVpcmVkIHdoZW4gY2hhbmdlZFxuICBnZXQgZ2FzU3BvbnNvcigpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9nYXNTcG9uc29yO1xuICB9XG5cbiAgc2V0IGdhc1Nwb25zb3IodmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuX2dhc1Nwb25zb3IgPSB2YWx1ZTtcbiAgICB0aGlzLm1hcmtSZWJ1aWxkUmVxdWlyZWQoKTtcbiAgfVxuXG4gIC8vIFRyYW5zYWN0aW9uIHNlbmRlciBnZXR0ZXIvc2V0dGVyIC0gbWFya3MgcmVidWlsZCByZXF1aXJlZCB3aGVuIGNoYW5nZWRcbiAgZ2V0IHNlbmRlcigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9zZW5kZXI7XG4gIH1cblxuICBzZXQgc2VuZGVyKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9zZW5kZXIgPSB2YWx1ZTtcbiAgICB0aGlzLm1hcmtSZWJ1aWxkUmVxdWlyZWQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGlzIGlzIGEgc2ltdWxhdGUgdHJhbnNhY3Rpb24gKGRyeSBydW4pIG9yIGEgcmVhbCB0cmFuc2FjdGlvbi5cbiAgICogU2ltdWxhdGUgdHJhbnNhY3Rpb25zIHVzZSBtYXhpbXVtIGdhcyB2YWx1ZXMgZm9yIGVzdGltYXRpb24gcHVycG9zZXMuXG4gICAqL1xuICBnZXQgaXNTaW11bGF0ZVR4KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9pc1NpbXVsYXRlVHg7XG4gIH1cblxuICBzZXQgaXNTaW11bGF0ZVR4KHZhbHVlOiBib29sZWFuKSB7XG4gICAgaWYgKCF2YWx1ZSkge1xuICAgICAgdGhpcy52YWxpZGF0ZVR4RGF0YUZvclJlYWxUcmFuc2FjdGlvbigpO1xuICAgICAgdGhpcy5tYXJrUmVidWlsZFJlcXVpcmVkKCk7XG4gICAgfVxuICAgIHRoaXMuX2lzU2ltdWxhdGVUeCA9IHZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIE1hcmtzIHRoYXQgdGhlIHRyYW5zYWN0aW9uIG5lZWRzIHRvIGJlIHJlYnVpbHQgYmVmb3JlIGl0IGNhbiBiZSBzaWduZWQgb3IgYnJvYWRjYXN0LlxuICAgKi9cbiAgcHJpdmF0ZSBtYXJrUmVidWlsZFJlcXVpcmVkKCk6IHZvaWQge1xuICAgIHRoaXMuX3JlYnVpbGRSZXF1aXJlZCA9IHRydWU7XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGVzIHRyYW5zYWN0aW9uIGRhdGEgd2hlbiBzd2l0Y2hpbmcgZnJvbSBzaW11bGF0ZSB0byByZWFsIHRyYW5zYWN0aW9uIG1vZGUuXG4gICAqL1xuICBwcml2YXRlIHZhbGlkYXRlVHhEYXRhRm9yUmVhbFRyYW5zYWN0aW9uKCk6IHZvaWQge1xuICAgIHRyeSB7XG4gICAgICB0aGlzLnZhbGlkYXRlVHhEYXRhKCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogJ1Vua25vd24gZXJyb3InO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBUeCBkYXRhIHZhbGlkYXRpb24gZmFpbGVkOiAke2Vycm9yTWVzc2FnZX0uIHtDYXVzZTogJHtlcnJvcn19YCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHNpZ25hYmxlIHBheWxvYWQgZm9yIHRoaXMgdHJhbnNhY3Rpb24uXG4gICAqIFRoaXMgaXMgdGhlIEJsYWtlMmIgaGFzaCBvZiB0aGUgdHJhbnNhY3Rpb24gZGF0YSB3aXRoIGludGVudCBtZXNzYWdlLlxuICAgKiBAdGhyb3dzIEVycm9yIGlmIHRyYW5zYWN0aW9uIGlzIGluIHNpbXVsYXRlIG1vZGUgb3Igbm90IGJ1aWx0XG4gICAqL1xuICBnZXQgc2lnbmFibGVQYXlsb2FkKCk6IEJ1ZmZlciB7XG4gICAgaWYgKHRoaXMuaXNTaW11bGF0ZVR4KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBzaWduIGEgc2ltdWxhdGUgdHgnKTtcbiAgICB9XG4gICAgdGhpcy5lbnN1cmVUcmFuc2FjdGlvbklzQnVpbHQoKTtcblxuICAgIGNvbnN0IGludGVudE1lc3NhZ2UgPSB0aGlzLm1lc3NhZ2VXaXRoSW50ZW50KHRoaXMuX3R4RGF0YUJ5dGVzIGFzIFVpbnQ4QXJyYXk8QXJyYXlCdWZmZXJMaWtlPik7XG4gICAgcmV0dXJuIEJ1ZmZlci5mcm9tKGJsYWtlMmIoMzIpLnVwZGF0ZShpbnRlbnRNZXNzYWdlKS5kaWdlc3QoJ2JpbmFyeScpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSB0cmFuc2FjdGlvbiBkaWdlc3QgKElEKS5cbiAgICogQHRocm93cyBFcnJvciBpZiB0cmFuc2FjdGlvbiBpcyBub3QgYnVpbHQgb3IgbmVlZHMgcmVidWlsZGluZ1xuICAgKi9cbiAgZ2V0IGlkKCk6IHN0cmluZyB7XG4gICAgdGhpcy5lbnN1cmVUcmFuc2FjdGlvbklzQnVpbHQoKTtcbiAgICByZXR1cm4gSW90YVRyYW5zYWN0aW9uRGF0YUJ1aWxkZXIuZ2V0RGlnZXN0RnJvbUJ5dGVzKHRoaXMuX3R4RGF0YUJ5dGVzIGFzIFVpbnQ4QXJyYXk8QXJyYXlCdWZmZXJMaWtlPik7XG4gIH1cblxuICAvKipcbiAgICogRW5zdXJlcyB0aGUgdHJhbnNhY3Rpb24gaXMgYnVpbHQgYW5kIGRvZXNuJ3QgbmVlZCByZWJ1aWxkaW5nLlxuICAgKiBAdGhyb3dzIEVycm9yIGlmIHRyYW5zYWN0aW9uIGlzIG5vdCBidWlsdCBvciByZWJ1aWxkIGlzIHJlcXVpcmVkXG4gICAqL1xuICBwcml2YXRlIGVuc3VyZVRyYW5zYWN0aW9uSXNCdWlsdCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fdHhEYXRhQnl0ZXMgPT09IHVuZGVmaW5lZCB8fCB0aGlzLl9yZWJ1aWxkUmVxdWlyZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVHggbm90IGJ1aWx0IG9yIGEgcmVidWlsZCBpcyByZXF1aXJlZCcpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGEgc2lnbmF0dXJlIGZyb20gdGhlIHRyYW5zYWN0aW9uIHNlbmRlci5cbiAgICovXG4gIGFkZFNpZ25hdHVyZShwdWJsaWNLZXk6IFB1YmxpY0tleSwgc2lnbmF0dXJlOiBCdWZmZXIpOiB2b2lkIHtcbiAgICB0aGlzLl9zaWduYXR1cmUgPSB7IHB1YmxpY0tleSwgc2lnbmF0dXJlIH07XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhIHNpZ25hdHVyZSBmcm9tIHRoZSBnYXMgc3BvbnNvciAoaWYgZGlmZmVyZW50IGZyb20gc2VuZGVyKS5cbiAgICovXG4gIGFkZEdhc1Nwb25zb3JTaWduYXR1cmUocHVibGljS2V5OiBQdWJsaWNLZXksIHNpZ25hdHVyZTogQnVmZmVyKTogdm9pZCB7XG4gICAgdGhpcy5fZ2FzU3BvbnNvclNpZ25hdHVyZSA9IHsgcHVibGljS2V5LCBzaWduYXR1cmUgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgdGhpcyB0cmFuc2FjdGlvbiBjYW4gYmUgc2lnbmVkLlxuICAgKiBPbmx5IHJlYWwgdHJhbnNhY3Rpb25zIChub3Qgc2ltdWxhdGUpIGNhbiBiZSBzaWduZWQuXG4gICAqL1xuICBjYW5TaWduKF9rZXk6IEJhc2VLZXkpOiBib29sZWFuIHtcbiAgICByZXR1cm4gIXRoaXMuaXNTaW11bGF0ZVR4O1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHRyYW5zYWN0aW9uIGZlZSAoZ2FzIGJ1ZGdldCkuXG4gICAqL1xuICBnZXRGZWUoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5nYXNCdWRnZXQ/LnRvU3RyaW5nKCk7XG4gIH1cblxuICBnZXQgc2VyaWFsaXplZEdhc1Nwb25zb3JTaWduYXR1cmUoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fc2VyaWFsaXplZEdhc1Nwb25zb3JTaWduYXR1cmU7XG4gIH1cblxuICBnZXQgc2VyaWFsaXplZFNpZ25hdHVyZSgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9zZXJpYWxpemVkU2lnbmF0dXJlO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlcmlhbGl6ZXMgYWxsIHNpZ25hdHVyZXMgZm9yIHRoZSB0cmFuc2FjdGlvbi5cbiAgICogSW5jbHVkZXMgYm90aCBzZW5kZXIgc2lnbmF0dXJlIGFuZCBnYXMgc3BvbnNvciBzaWduYXR1cmUgaWYgcHJlc2VudC5cbiAgICovXG4gIHNlcmlhbGl6ZVNpZ25hdHVyZXMoKTogdm9pZCB7XG4gICAgdGhpcy5fc2lnbmF0dXJlcyA9IFtdO1xuXG4gICAgaWYgKHRoaXMuX3NpZ25hdHVyZSkge1xuICAgICAgdGhpcy5fc2VyaWFsaXplZFNpZ25hdHVyZSA9IHRoaXMuc2VyaWFsaXplU2lnbmF0dXJlKHRoaXMuX3NpZ25hdHVyZSk7XG4gICAgICB0aGlzLl9zaWduYXR1cmVzLnB1c2godGhpcy5fc2VyaWFsaXplZFNpZ25hdHVyZSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2dhc1Nwb25zb3JTaWduYXR1cmUpIHtcbiAgICAgIHRoaXMuX3NlcmlhbGl6ZWRHYXNTcG9uc29yU2lnbmF0dXJlID0gdGhpcy5zZXJpYWxpemVTaWduYXR1cmUodGhpcy5fZ2FzU3BvbnNvclNpZ25hdHVyZSk7XG4gICAgICB0aGlzLl9zaWduYXR1cmVzLnB1c2godGhpcy5fc2VyaWFsaXplZEdhc1Nwb25zb3JTaWduYXR1cmUpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZXJ0cyB0aGUgdHJhbnNhY3Rpb24gdG8gYnJvYWRjYXN0IGZvcm1hdCAoYmFzZTY0IGVuY29kZWQpLlxuICAgKi9cbiAgYXN5bmMgdG9Ccm9hZGNhc3RGb3JtYXQoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBjb25zdCB0eERhdGFCeXRlcyA9IGF3YWl0IHRoaXMuYnVpbGQoKTtcbiAgICByZXR1cm4gdG9CYXNlNjQodHhEYXRhQnl0ZXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkcyB0aGUgdHJhbnNhY3Rpb24gYnl0ZXMuXG4gICAqIElmIGluIHNpbXVsYXRlIG1vZGUsIGJ1aWxkcyBhIGRyeSBydW4gdHJhbnNhY3Rpb24gd2l0aCBtYXggZ2FzIHZhbHVlcy5cbiAgICogT3RoZXJ3aXNlLCBidWlsZHMgYSByZWFsIHRyYW5zYWN0aW9uIHdpdGggYWN0dWFsIGdhcyBkYXRhLlxuICAgKi9cbiAgYXN5bmMgYnVpbGQoKTogUHJvbWlzZTxVaW50OEFycmF5PEFycmF5QnVmZmVyTGlrZT4+IHtcbiAgICBpZiAodGhpcy5pc1NpbXVsYXRlVHgpIHtcbiAgICAgIHJldHVybiB0aGlzLmJ1aWxkRHJ5UnVuVHJhbnNhY3Rpb24oKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuYnVpbGRSZWFsVHJhbnNhY3Rpb24oKTtcbiAgfVxuXG4gIHRvSnNvbigpOiBUeERhdGEge1xuICAgIHJldHVybiB7XG4gICAgICBzZW5kZXI6IHRoaXMuc2VuZGVyLFxuICAgICAgZ2FzQnVkZ2V0OiB0aGlzLmdhc0J1ZGdldCxcbiAgICAgIGdhc1ByaWNlOiB0aGlzLmdhc1ByaWNlLFxuICAgICAgZ2FzUGF5bWVudE9iamVjdHM6IHRoaXMuZ2FzUGF5bWVudE9iamVjdHMsXG4gICAgICBnYXNTcG9uc29yOiB0aGlzLmdhc1Nwb25zb3IsXG4gICAgICB0eXBlOiB0aGlzLnR5cGUsXG4gICAgfTtcbiAgfVxuXG4gIHBhcnNlRnJvbUpTT04odHhEYXRhOiBUeERhdGEpOiB2b2lkIHtcbiAgICB0aGlzLnNlbmRlciA9IHR4RGF0YS5zZW5kZXI7XG4gICAgdGhpcy5nYXNCdWRnZXQgPSB0eERhdGEuZ2FzQnVkZ2V0O1xuICAgIHRoaXMuZ2FzUHJpY2UgPSB0eERhdGEuZ2FzUHJpY2U7XG4gICAgdGhpcy5nYXNQYXltZW50T2JqZWN0cyA9IHR4RGF0YS5nYXNQYXltZW50T2JqZWN0cztcbiAgICBpZiAodHhEYXRhLmdhc1Nwb25zb3IgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5nYXNTcG9uc29yID0gdHhEYXRhLmdhc1Nwb25zb3I7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFBhcnNlcyB0cmFuc2FjdGlvbiBkYXRhIGZyb20gaXRzIGJyb2FkY2FzdCBmb3JtYXQgKGJhc2U2NCBvciByYXcgYnl0ZXMpLlxuICAgKiBFeHRyYWN0cyBzZW5kZXIsIGdhcyBkYXRhLCBhbmQgZ2FzIHNwb25zb3IgaW5mb3JtYXRpb24uXG4gICAqL1xuICBwYXJzZUZyb21Ccm9hZGNhc3RUeCh0eDogc3RyaW5nIHwgVWludDhBcnJheSk6IHZvaWQge1xuICAgIGNvbnN0IHR4RGF0YSA9IElvdGFUcmFuc2FjdGlvbi5mcm9tKHR4KS5nZXREYXRhKCk7XG5cbiAgICB0aGlzLnBhcnNlU2VuZGVyKHR4RGF0YSk7XG4gICAgdGhpcy5wYXJzZUdhc0RhdGEodHhEYXRhKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQYXJzZXMgdGhlIHNlbmRlciBhZGRyZXNzIGZyb20gdHJhbnNhY3Rpb24gZGF0YS5cbiAgICovXG4gIHByaXZhdGUgcGFyc2VTZW5kZXIodHhEYXRhOiBSZXR1cm5UeXBlPElvdGFUcmFuc2FjdGlvblsnZ2V0RGF0YSddPik6IHZvaWQge1xuICAgIGlmICh0eERhdGEuc2VuZGVyKSB7XG4gICAgICB0aGlzLnNlbmRlciA9IHR4RGF0YS5zZW5kZXI7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFBhcnNlcyBnYXMtcmVsYXRlZCBkYXRhIGZyb20gdHJhbnNhY3Rpb24gZGF0YS5cbiAgICovXG4gIHByaXZhdGUgcGFyc2VHYXNEYXRhKHR4RGF0YTogUmV0dXJuVHlwZTxJb3RhVHJhbnNhY3Rpb25bJ2dldERhdGEnXT4pOiB2b2lkIHtcbiAgICBjb25zdCBnYXNEYXRhID0gdHhEYXRhLmdhc0RhdGE7XG5cbiAgICBpZiAoIWdhc0RhdGEpIHtcbiAgICAgIHRoaXMuZ2FzQnVkZ2V0ID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5nYXNQcmljZSA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuZ2FzUGF5bWVudE9iamVjdHMgPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLmdhc1Nwb25zb3IgPSB1bmRlZmluZWQ7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5nYXNCdWRnZXQgPSBnYXNEYXRhLmJ1ZGdldCA/IE51bWJlcihnYXNEYXRhLmJ1ZGdldCkgOiB1bmRlZmluZWQ7XG4gICAgdGhpcy5nYXNQcmljZSA9IGdhc0RhdGEucHJpY2UgPyBOdW1iZXIoZ2FzRGF0YS5wcmljZSkgOiB1bmRlZmluZWQ7XG5cbiAgICB0aGlzLmdhc1BheW1lbnRPYmplY3RzID1cbiAgICAgIGdhc0RhdGEucGF5bWVudCAmJiBnYXNEYXRhLnBheW1lbnQubGVuZ3RoID4gMFxuICAgICAgICA/IGdhc0RhdGEucGF5bWVudC5tYXAoKHBheW1lbnQpID0+IHBheW1lbnQgYXMgVHJhbnNhY3Rpb25PYmplY3RJbnB1dClcbiAgICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICB0aGlzLmdhc1Nwb25zb3IgPSBnYXNEYXRhLm93bmVyIHx8IHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgZXhwbGFpblRyYW5zYWN0aW9uKCk6IGFueSB7XG4gICAgY29uc3QgcmVzdWx0ID0gdGhpcy50b0pzb24oKTtcbiAgICBjb25zdCBkaXNwbGF5T3JkZXIgPSBbJ2lkJywgJ291dHB1dHMnLCAnb3V0cHV0QW1vdW50JywgJ2NoYW5nZU91dHB1dHMnLCAnY2hhbmdlQW1vdW50JywgJ2ZlZScsICd0eXBlJ107XG4gICAgY29uc3Qgb3V0cHV0czogVHJhbnNhY3Rpb25SZWNpcGllbnRbXSA9IFtdO1xuXG4gICAgY29uc3QgZXhwbGFuYXRpb25SZXN1bHQ6IFRyYW5zYWN0aW9uRXhwbGFuYXRpb24gPSB7XG4gICAgICBkaXNwbGF5T3JkZXIsXG4gICAgICBpZDogdGhpcy5pZCxcbiAgICAgIG91dHB1dHMsXG4gICAgICBvdXRwdXRBbW91bnQ6ICcwJyxcbiAgICAgIGNoYW5nZU91dHB1dHM6IFtdLFxuICAgICAgY2hhbmdlQW1vdW50OiAnMCcsXG4gICAgICBmZWU6IHsgZmVlOiB0aGlzLmdhc0J1ZGdldCA/IHRoaXMuZ2FzQnVkZ2V0LnRvU3RyaW5nKCkgOiAnJyB9LFxuICAgICAgc2VuZGVyOiB0aGlzLnNlbmRlcixcbiAgICAgIHNwb25zb3I6IHRoaXMuZ2FzU3BvbnNvcixcbiAgICAgIHR5cGU6IHRoaXMudHlwZSxcbiAgICB9O1xuXG4gICAgcmV0dXJuIHRoaXMuZXhwbGFpblRyYW5zYWN0aW9uSW1wbGVtZW50YXRpb24ocmVzdWx0LCBleHBsYW5hdGlvblJlc3VsdCk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyB0aGUgc2ltdWxhdGUgdHJhbnNhY3Rpb24gZmxhZyBiYXNlZCBvbiBnYXMgZGF0YSBhdmFpbGFiaWxpdHkuXG4gICAqIElmIGFsbCBnYXMgZGF0YSBpcyBwcmVzZW50LCBzd2l0Y2hlcyB0byByZWFsIHRyYW5zYWN0aW9uIG1vZGUuXG4gICAqL1xuICBwcm90ZWN0ZWQgdXBkYXRlSXNTaW11bGF0ZVR4KCk6IHZvaWQge1xuICAgIGNvbnN0IGhhc0FsbEdhc0RhdGEgPVxuICAgICAgdGhpcy5nYXNCdWRnZXQgJiYgdGhpcy5nYXNQcmljZSAmJiB0aGlzLmdhc1BheW1lbnRPYmplY3RzICYmIHRoaXMuZ2FzUGF5bWVudE9iamVjdHMubGVuZ3RoID4gMDtcblxuICAgIHRoaXMuaXNTaW11bGF0ZVR4ID0gIWhhc0FsbEdhc0RhdGE7XG4gIH1cblxuICAvLyBBYnN0cmFjdCBtZXRob2RzIHRvIGJlIGltcGxlbWVudGVkIGJ5IGNoaWxkIGNsYXNzZXNcbiAgcHJvdGVjdGVkIGFic3RyYWN0IG1lc3NhZ2VXaXRoSW50ZW50KG1lc3NhZ2U6IFVpbnQ4QXJyYXkpOiBVaW50OEFycmF5O1xuICBwcm90ZWN0ZWQgYWJzdHJhY3QgcG9wdWxhdGVUeElucHV0c0FuZENvbW1hbmRzKCk6IHZvaWQ7XG4gIHByb3RlY3RlZCBhYnN0cmFjdCB2YWxpZGF0ZVR4RGF0YUltcGxlbWVudGF0aW9uKCk6IHZvaWQ7XG4gIGFic3RyYWN0IGFkZElucHV0c0FuZE91dHB1dHMoKTogdm9pZDtcbiAgcHJvdGVjdGVkIGFic3RyYWN0IGV4cGxhaW5UcmFuc2FjdGlvbkltcGxlbWVudGF0aW9uKFxuICAgIGpzb246IFR4RGF0YSxcbiAgICBleHBsYW5hdGlvblJlc3VsdDogVHJhbnNhY3Rpb25FeHBsYW5hdGlvblxuICApOiBUcmFuc2FjdGlvbkV4cGxhbmF0aW9uO1xuXG4gIC8qKlxuICAgKiBCdWlsZHMgYSBkcnkgcnVuIChzaW11bGF0ZSkgdHJhbnNhY3Rpb24gd2l0aCBtYXhpbXVtIGdhcyB2YWx1ZXMuXG4gICAqIFVzZWQgZm9yIGdhcyBlc3RpbWF0aW9uIHdpdGhvdXQgY29tbWl0dGluZyB0aGUgdHJhbnNhY3Rpb24uXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGJ1aWxkRHJ5UnVuVHJhbnNhY3Rpb24oKTogUHJvbWlzZTxVaW50OEFycmF5PEFycmF5QnVmZmVyTGlrZT4+IHtcbiAgICB0aGlzLnZhbGlkYXRlVHhEYXRhSW1wbGVtZW50YXRpb24oKTtcbiAgICBhd2FpdCB0aGlzLnBvcHVsYXRlVHhEYXRhKCk7XG5cbiAgICBjb25zdCB0eERhdGFCdWlsZGVyID0gbmV3IElvdGFUcmFuc2FjdGlvbkRhdGFCdWlsZGVyKHRoaXMuX2lvdGFUcmFuc2FjdGlvbi5nZXREYXRhKCkgYXMgSW90YVRyYW5zYWN0aW9uRGF0YSk7XG4gICAgcmV0dXJuIHR4RGF0YUJ1aWxkZXIuYnVpbGQoe1xuICAgICAgb3ZlcnJpZGVzOiB7XG4gICAgICAgIGdhc0RhdGE6IHtcbiAgICAgICAgICBidWRnZXQ6IE1BWF9HQVNfQlVER0VULnRvU3RyaW5nKCksXG4gICAgICAgICAgcHJpY2U6IE1BWF9HQVNfUFJJQ0UudG9TdHJpbmcoKSxcbiAgICAgICAgICBwYXltZW50OiBbXSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQnVpbGRzIGEgcmVhbCB0cmFuc2FjdGlvbiB3aXRoIGFjdHVhbCBnYXMgZGF0YS5cbiAgICogT25seSBidWlsZHMgaWYgbmVjZXNzYXJ5IChmaXJzdCB0aW1lIG9yIHJlYnVpbGQgcmVxdWlyZWQpLlxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBidWlsZFJlYWxUcmFuc2FjdGlvbigpOiBQcm9taXNlPFVpbnQ4QXJyYXk8QXJyYXlCdWZmZXJMaWtlPj4ge1xuICAgIGlmICh0aGlzLl90eERhdGFCeXRlcyA9PT0gdW5kZWZpbmVkIHx8IHRoaXMuX3JlYnVpbGRSZXF1aXJlZCkge1xuICAgICAgdGhpcy52YWxpZGF0ZVR4RGF0YSgpO1xuICAgICAgYXdhaXQgdGhpcy5wb3B1bGF0ZVR4RGF0YSgpO1xuICAgICAgdGhpcy5zZXRHYXNEYXRhT25UcmFuc2FjdGlvbigpO1xuICAgICAgdGhpcy5fdHhEYXRhQnl0ZXMgPSBhd2FpdCB0aGlzLl9pb3RhVHJhbnNhY3Rpb24uYnVpbGQoKTtcbiAgICAgIHRoaXMuX3JlYnVpbGRSZXF1aXJlZCA9IGZhbHNlO1xuICAgIH1cblxuICAgIHRoaXMuc2VyaWFsaXplU2lnbmF0dXJlcygpO1xuICAgIHJldHVybiB0aGlzLl90eERhdGFCeXRlcztcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIGdhcyBkYXRhIG9uIHRoZSBJT1RBIHRyYW5zYWN0aW9uIG9iamVjdC5cbiAgICovXG4gIHByaXZhdGUgc2V0R2FzRGF0YU9uVHJhbnNhY3Rpb24oKTogdm9pZCB7XG4gICAgdGhpcy5faW90YVRyYW5zYWN0aW9uLnNldEdhc1ByaWNlKHRoaXMuZ2FzUHJpY2UhKTtcbiAgICB0aGlzLl9pb3RhVHJhbnNhY3Rpb24uc2V0R2FzQnVkZ2V0KHRoaXMuZ2FzQnVkZ2V0ISk7XG4gICAgdGhpcy5faW90YVRyYW5zYWN0aW9uLnNldEdhc1BheW1lbnQoXG4gICAgICB0aGlzLmdhc1BheW1lbnRPYmplY3RzIS5zbGljZSgwLCBNQVhfR0FTX1BBWU1FTlRfT0JKRUNUUyAtIDEpIGFzIFRyYW5zYWN0aW9uT2JqZWN0SW5wdXRbXVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogUG9wdWxhdGVzIHRoZSBJT1RBIHRyYW5zYWN0aW9uIHdpdGggaW5wdXRzLCBjb21tYW5kcywgYW5kIGdhcyBzcG9uc29yIGlmIGFwcGxpY2FibGUuXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIHBvcHVsYXRlVHhEYXRhKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuX2lvdGFUcmFuc2FjdGlvbiA9IG5ldyBJb3RhVHJhbnNhY3Rpb24oKTtcbiAgICB0aGlzLnBvcHVsYXRlVHhJbnB1dHNBbmRDb21tYW5kcygpO1xuXG4gICAgLy8gSWYgZ2FzIHNwb25zb3IgaXMgZGlmZmVyZW50IGZyb20gc2VuZGVyLCBzZXQgdXAgc3BvbnNvcmVkIHRyYW5zYWN0aW9uXG4gICAgaWYgKHRoaXMuaGFzRGlmZmVyZW50R2FzU3BvbnNvcigpKSB7XG4gICAgICBhd2FpdCB0aGlzLnNldHVwR2FzU3BvbnNvcmVkVHJhbnNhY3Rpb24oKTtcbiAgICB9XG5cbiAgICB0aGlzLl9pb3RhVHJhbnNhY3Rpb24uc2V0U2VuZGVyKHRoaXMuc2VuZGVyKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgdGhlIHRyYW5zYWN0aW9uIGhhcyBhIGdhcyBzcG9uc29yIGRpZmZlcmVudCBmcm9tIHRoZSBzZW5kZXIuXG4gICAqL1xuICBwcml2YXRlIGhhc0RpZmZlcmVudEdhc1Nwb25zb3IoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJvb2xlYW4odGhpcy5nYXNTcG9uc29yICYmIHRoaXMuX3NlbmRlciAhPT0gdGhpcy5nYXNTcG9uc29yKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHVwIGEgZ2FzLXNwb25zb3JlZCB0cmFuc2FjdGlvbiBieSBidWlsZGluZyB0aGUgdHJhbnNhY3Rpb24ga2luZFxuICAgKiBhbmQgc2V0dGluZyB0aGUgZ2FzIG93bmVyLlxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBzZXR1cEdhc1Nwb25zb3JlZFRyYW5zYWN0aW9uKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHRyYW5zYWN0aW9uS2luZCA9IGF3YWl0IHRoaXMuX2lvdGFUcmFuc2FjdGlvbi5idWlsZCh7IG9ubHlUcmFuc2FjdGlvbktpbmQ6IHRydWUgfSk7XG4gICAgdGhpcy5faW90YVRyYW5zYWN0aW9uID0gSW90YVRyYW5zYWN0aW9uLmZyb21LaW5kKHRyYW5zYWN0aW9uS2luZCk7XG4gICAgdGhpcy5faW90YVRyYW5zYWN0aW9uLnNldEdhc093bmVyKHRoaXMuX2dhc1Nwb25zb3IhKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXJpYWxpemVzIGEgc2lnbmF0dXJlIGludG8gSU9UQSdzIGV4cGVjdGVkIGZvcm1hdC5cbiAgICogRm9ybWF0OiBbc2lnbmF0dXJlX3NjaGVtZV9mbGFnICgxIGJ5dGUpLCBzaWduYXR1cmUsIHB1YmxpY19rZXldXG4gICAqIEN1cnJlbnRseSBoYXJkY29kZWQgdG8gRUREU0EgKDB4MDApIGFzIElPVEEgb25seSBzdXBwb3J0cyB0aGlzIHNjaGVtZS5cbiAgICovXG4gIHByaXZhdGUgc2VyaWFsaXplU2lnbmF0dXJlKHNpZ25hdHVyZTogU2lnbmF0dXJlKTogc3RyaW5nIHtcbiAgICBjb25zdCBTSUdOQVRVUkVfU0NIRU1FX0VERFNBID0gMHgwMDtcbiAgICBjb25zdCBwdWJLZXkgPSBCdWZmZXIuZnJvbShzaWduYXR1cmUucHVibGljS2V5LnB1YiwgJ2hleCcpO1xuICAgIGNvbnN0IHNlcmlhbGl6ZWRTaWduYXR1cmUgPSBuZXcgVWludDhBcnJheSgxICsgc2lnbmF0dXJlLnNpZ25hdHVyZS5sZW5ndGggKyBwdWJLZXkubGVuZ3RoKTtcblxuICAgIHNlcmlhbGl6ZWRTaWduYXR1cmUuc2V0KFtTSUdOQVRVUkVfU0NIRU1FX0VERFNBXSk7XG4gICAgc2VyaWFsaXplZFNpZ25hdHVyZS5zZXQoc2lnbmF0dXJlLnNpZ25hdHVyZSwgMSk7XG4gICAgc2VyaWFsaXplZFNpZ25hdHVyZS5zZXQocHViS2V5LCAxICsgc2lnbmF0dXJlLnNpZ25hdHVyZS5sZW5ndGgpO1xuXG4gICAgcmV0dXJuIHRvQmFzZTY0KHNlcmlhbGl6ZWRTaWduYXR1cmUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlcyBhbGwgdHJhbnNhY3Rpb24gZGF0YSByZXF1aXJlZCBmb3IgYSByZWFsIChub24tc2ltdWxhdGUpIHRyYW5zYWN0aW9uLlxuICAgKi9cbiAgcHJpdmF0ZSB2YWxpZGF0ZVR4RGF0YSgpOiB2b2lkIHtcbiAgICB0aGlzLnZhbGlkYXRlVHhEYXRhSW1wbGVtZW50YXRpb24oKTtcbiAgICB0aGlzLnZhbGlkYXRlQ29tbW9uVHhEYXRhKCk7XG4gICAgdGhpcy52YWxpZGF0ZVNpZ25hdHVyZXMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgY29tbW9uIHRyYW5zYWN0aW9uIGRhdGEgKHNlbmRlciwgZ2FzIGRhdGEpLlxuICAgKi9cbiAgcHJpdmF0ZSB2YWxpZGF0ZUNvbW1vblR4RGF0YSgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuc2VuZGVyKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IoJ1RyYW5zYWN0aW9uIHNlbmRlciBpcyByZXF1aXJlZCcpO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5nYXNQcmljZSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRUcmFuc2FjdGlvbkVycm9yKCdHYXMgcHJpY2UgaXMgcmVxdWlyZWQnKTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuZ2FzQnVkZ2V0KSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IoJ0dhcyBidWRnZXQgaXMgcmVxdWlyZWQnKTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuZ2FzUGF5bWVudE9iamVjdHMgfHwgdGhpcy5nYXNQYXltZW50T2JqZWN0cy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvcignR2FzIHBheW1lbnQgb2JqZWN0cyBhcmUgcmVxdWlyZWQnKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGVzIHNlbmRlciBhbmQgZ2FzIHNwb25zb3Igc2lnbmF0dXJlcyBpZiBwcmVzZW50LlxuICAgKi9cbiAgcHJpdmF0ZSB2YWxpZGF0ZVNpZ25hdHVyZXMoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX3NpZ25hdHVyZSAmJiAhdGhpcy5pc1ZhbGlkU2lnbmF0dXJlKHRoaXMuX3NpZ25hdHVyZSkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvcignSW52YWxpZCBzZW5kZXIgc2lnbmF0dXJlJyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2dhc1Nwb25zb3JTaWduYXR1cmUgJiYgIXRoaXMuaXNWYWxpZFNpZ25hdHVyZSh0aGlzLl9nYXNTcG9uc29yU2lnbmF0dXJlKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRUcmFuc2FjdGlvbkVycm9yKCdJbnZhbGlkIGdhcyBzcG9uc29yIHNpZ25hdHVyZScpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgYSBzaWduYXR1cmUgaGFzIHZhbGlkIHB1YmxpYyBrZXkgYW5kIHNpZ25hdHVyZSBkYXRhLlxuICAgKi9cbiAgcHJpdmF0ZSBpc1ZhbGlkU2lnbmF0dXJlKHNpZ25hdHVyZTogU2lnbmF0dXJlKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHV0aWxzLmlzVmFsaWRQdWJsaWNLZXkoc2lnbmF0dXJlLnB1YmxpY0tleS5wdWIpICYmIHV0aWxzLmlzVmFsaWRTaWduYXR1cmUodG9CYXNlNjQoc2lnbmF0dXJlLnNpZ25hdHVyZSkpO1xuICB9XG59XG4iXX0=
|