@bitgo-beta/sdk-coin-sol 7.6.4-beta.720 → 7.6.4-beta.722

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 (40) hide show
  1. package/LICENSE +191 -0
  2. package/dist/cjs/src/lib/constants.d.ts +7 -0
  3. package/dist/cjs/src/lib/constants.d.ts.map +1 -1
  4. package/dist/cjs/src/lib/constants.js +9 -2
  5. package/dist/cjs/src/lib/customInstructionBuilder.d.ts +13 -2
  6. package/dist/cjs/src/lib/customInstructionBuilder.d.ts.map +1 -1
  7. package/dist/cjs/src/lib/customInstructionBuilder.js +131 -28
  8. package/dist/cjs/src/lib/instructionParamsFactory.d.ts.map +1 -1
  9. package/dist/cjs/src/lib/instructionParamsFactory.js +81 -21
  10. package/dist/cjs/src/lib/transaction.d.ts +12 -1
  11. package/dist/cjs/src/lib/transaction.d.ts.map +1 -1
  12. package/dist/cjs/src/lib/transaction.js +31 -1
  13. package/dist/cjs/src/lib/transactionBuilder.d.ts +33 -0
  14. package/dist/cjs/src/lib/transactionBuilder.d.ts.map +1 -1
  15. package/dist/cjs/src/lib/transactionBuilder.js +75 -1
  16. package/dist/cjs/src/lib/utils.d.ts.map +1 -1
  17. package/dist/cjs/src/lib/utils.js +12 -4
  18. package/dist/cjs/test/unit/transaction.js +22 -1
  19. package/dist/cjs/test/unit/transactionBuilder/computeUnitLimit.d.ts +2 -0
  20. package/dist/cjs/test/unit/transactionBuilder/computeUnitLimit.d.ts.map +1 -0
  21. package/dist/cjs/test/unit/transactionBuilder/computeUnitLimit.js +346 -0
  22. package/dist/cjs/test/unit/transactionBuilder/customInstructionBuilder.js +334 -23
  23. package/dist/cjs/tsconfig.tsbuildinfo +1 -1
  24. package/dist/esm/lib/constants.d.ts +7 -0
  25. package/dist/esm/lib/constants.d.ts.map +1 -1
  26. package/dist/esm/lib/constants.js +8 -1
  27. package/dist/esm/lib/customInstructionBuilder.d.ts +13 -2
  28. package/dist/esm/lib/customInstructionBuilder.d.ts.map +1 -1
  29. package/dist/esm/lib/customInstructionBuilder.js +132 -29
  30. package/dist/esm/lib/instructionParamsFactory.d.ts.map +1 -1
  31. package/dist/esm/lib/instructionParamsFactory.js +81 -21
  32. package/dist/esm/lib/transaction.d.ts +12 -1
  33. package/dist/esm/lib/transaction.d.ts.map +1 -1
  34. package/dist/esm/lib/transaction.js +31 -1
  35. package/dist/esm/lib/transactionBuilder.d.ts +33 -0
  36. package/dist/esm/lib/transactionBuilder.d.ts.map +1 -1
  37. package/dist/esm/lib/transactionBuilder.js +76 -2
  38. package/dist/esm/lib/utils.d.ts.map +1 -1
  39. package/dist/esm/lib/utils.js +12 -4
  40. package/package.json +8 -8
@@ -59,6 +59,11 @@ class TransactionBuilder extends sdk_core_1.BaseTransactionBuilder {
59
59
  const priorityFeeInstructionsData = filteredPriorityFeeInstructionsData[0];
60
60
  this.setPriorityFee({ amount: Number(priorityFeeInstructionsData.params.fee) });
61
61
  }
62
+ // If compute unit limit instruction exists, restore the compute unit limit
63
+ if (instruction.type === constants_1.InstructionBuilderTypes.SetComputeUnitLimit) {
64
+ const computeUnitLimitInstruction = instruction;
65
+ this.setComputeUnitLimit(computeUnitLimitInstruction.params.units);
66
+ }
62
67
  }
63
68
  }
64
69
  /** @inheritdoc */
@@ -116,9 +121,28 @@ class TransactionBuilder extends sdk_core_1.BaseTransactionBuilder {
116
121
  else {
117
122
  tx.recentBlockhash = this._recentBlockhash;
118
123
  }
124
+ // The priority fee is charged on the requested compute-unit limit, so an explicit
125
+ // limit must precede every entry of _instructionsData (including the optional
126
+ // SetComputeUnitPrice). web3.js serializes the durable-nonce AdvanceNonceAccount
127
+ // first via nonceInfo, giving [AdvanceNonce, SetComputeUnitLimit, SetComputeUnitPrice?, ...].
128
+ const computeUnitLimitData = this._computeUnitLimit !== undefined
129
+ ? {
130
+ type: constants_1.InstructionBuilderTypes.SetComputeUnitLimit,
131
+ params: {
132
+ units: this._computeUnitLimit,
133
+ },
134
+ }
135
+ : undefined;
136
+ if (computeUnitLimitData) {
137
+ tx.add(...(0, solInstructionFactory_1.solInstructionFactory)(computeUnitLimitData));
138
+ }
119
139
  for (const instruction of this._instructionsData) {
120
140
  tx.add(...(0, solInstructionFactory_1.solInstructionFactory)(instruction, this._zkProofProgramId));
121
141
  }
142
+ if (computeUnitLimitData) {
143
+ // Record the instruction so explain and parsing see it, mirroring how memo is recorded
144
+ this._instructionsData.unshift(computeUnitLimitData);
145
+ }
122
146
  if (this._memo) {
123
147
  const memoData = {
124
148
  type: constants_1.InstructionBuilderTypes.Memo,
@@ -229,6 +253,32 @@ class TransactionBuilder extends sdk_core_1.BaseTransactionBuilder {
229
253
  getAdditionalSignatures() {
230
254
  return this._signatures;
231
255
  }
256
+ /**
257
+ * Add a signature produced by the fee payer of the transaction being built.
258
+ * The fee payer is account 0 of the transaction message, so its signature belongs in slot 0.
259
+ * Use this for signatures produced by the enterprise fee address key (HSM single-sig) of a
260
+ * sponsored transaction; the key must match account 0.
261
+ *
262
+ * @param {BasePublicKey} publicKey The public key of the fee payer; must be account 0 of the message
263
+ * @param {Buffer} signature The signature of the transaction payload
264
+ */
265
+ addFeePayerSignature(publicKey, signature) {
266
+ if (publicKey.pub !== this.getFeePayerAccountKey()) {
267
+ throw new sdk_core_1.SigningError(`Fee payer signature must come from account 0 of the message, got: ${publicKey.pub}`);
268
+ }
269
+ this.addSignature(publicKey, signature);
270
+ }
271
+ /**
272
+ * The account 0 key of the message being built, i.e. the fee payer: the first static account
273
+ * key of a versioned transaction, or the fee payer of a legacy transaction.
274
+ */
275
+ getFeePayerAccountKey() {
276
+ const versionedData = this._transaction.getVersionedTransactionData();
277
+ if (versionedData) {
278
+ return versionedData.staticAccountKeys[0];
279
+ }
280
+ return this._feePayer ?? this._sender;
281
+ }
232
282
  /**
233
283
  * Sets the sender of this transaction.
234
284
  * This account will be responsible for paying transaction fees.
@@ -286,6 +336,30 @@ class TransactionBuilder extends sdk_core_1.BaseTransactionBuilder {
286
336
  this._priorityFee = Number(feeOptions.amount);
287
337
  return this;
288
338
  }
339
+ /**
340
+ * Set an explicit compute-unit limit for this transaction.
341
+ *
342
+ * The priority fee is charged on the requested compute-unit limit rather than the
343
+ * units actually consumed, so every sponsored transaction must set an intent-sized
344
+ * limit. When set, the built transaction prepends a SetComputeUnitLimit instruction
345
+ * ahead of all other instructions (after the durable-nonce AdvanceNonceAccount):
346
+ * [AdvanceNonce?, SetComputeUnitLimit, SetComputeUnitPrice?, ...]. When unset, the
347
+ * built transaction bytes are unchanged.
348
+ *
349
+ * @param {number} units the requested compute-unit limit, an integer between
350
+ * 1 and 1,400,000 (the on-chain per-transaction maximum)
351
+ * @returns {TransactionBuilder} This transaction builder
352
+ */
353
+ setComputeUnitLimit(units) {
354
+ this.validateComputeUnitLimit(units);
355
+ this._computeUnitLimit = units;
356
+ return this;
357
+ }
358
+ validateComputeUnitLimit(units) {
359
+ if (!Number.isInteger(units) || units < 1 || units > constants_1.MAX_COMPUTE_UNIT_LIMIT) {
360
+ throw new sdk_core_1.BuildTransactionError(`Invalid compute unit limit, expected an integer between 1 and ${constants_1.MAX_COMPUTE_UNIT_LIMIT}, got: ${units}`);
361
+ }
362
+ }
289
363
  feePayer(feePayer) {
290
364
  this._feePayer = feePayer;
291
365
  return this;
@@ -385,4 +459,4 @@ class TransactionBuilder extends sdk_core_1.BaseTransactionBuilder {
385
459
  }
386
460
  }
387
461
  exports.TransactionBuilder = TransactionBuilder;
388
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb25CdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi90cmFuc2FjdGlvbkJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBRUEsbURBVzhCO0FBQzlCLCtDQUE0QztBQUM1Qyw2Q0FPeUI7QUFDekIsZ0RBQTBCO0FBQzFCLG1DQU9pQjtBQUNqQix3QkFBNEI7QUFDNUIsMkNBQXNEO0FBQ3RELG1FQUFnRTtBQUNoRSxvREFBNEI7QUFFNUIseUVBQXNFO0FBRXRFLE1BQXNCLGtCQUFtQixTQUFRLGlDQUFzQjtJQWlCckUsWUFBWSxXQUFpQztRQUMzQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7UUFoQmIsZ0JBQVcsR0FBZ0IsRUFBRSxDQUFDO1FBTzVCLHNCQUFpQixHQUF3QixFQUFFLENBQUM7UUFDNUMsYUFBUSxHQUFjLEVBQUUsQ0FBQztRQVNqQyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUkseUJBQVcsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBT0Q7Ozs7T0FJRztJQUNILFdBQVcsQ0FBQyxFQUFlO1FBQ3pCLElBQUksQ0FBQyxZQUFZLEdBQUcsRUFBRSxDQUFDO1FBQ3ZCLE1BQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUUzQixNQUFNLGdDQUFnQyxHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQ3JFLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxLQUFLLG1DQUF1QixDQUFDLFFBQVEsQ0FDekQsQ0FBQztRQUNGLElBQUksTUFBTSxDQUFDO1FBQ1gsSUFBSSxnQ0FBZ0MsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDaEQsTUFBTSx3QkFBd0IsR0FBRyxnQ0FBZ0MsQ0FBQyxDQUFDLENBQWEsQ0FBQztZQUNqRixNQUFNLEdBQUcsd0JBQXdCLENBQUMsTUFBTSxD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QUVGO0FBbmNELGdEQW1jQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBCaWdOdW1iZXIgZnJvbSAnYmlnbnVtYmVyLmpzJztcbmltcG9ydCB7IEJhc2VDb2luIGFzIENvaW5Db25maWcgfSBmcm9tICdAYml0Z28tYmV0YS9zdGF0aWNzJztcbmltcG9ydCB7XG4gIEJhc2VBZGRyZXNzLFxuICBCYXNlS2V5LFxuICBCYXNlVHJhbnNhY3Rpb25CdWlsZGVyLFxuICBCdWlsZFRyYW5zYWN0aW9uRXJyb3IsXG4gIEZlZU9wdGlvbnMsXG4gIFB1YmxpY0tleSBhcyBCYXNlUHVibGljS2V5LFxuICBTaWduYXR1cmUsXG4gIFNpZ25pbmdFcnJvcixcbiAgU29sVmVyc2lvbmVkVHJhbnNhY3Rpb25EYXRhLFxuICBUcmFuc2FjdGlvblR5cGUsXG59IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uIH0gZnJvbSAnLi90cmFuc2FjdGlvbic7XG5pbXBvcnQge1xuICBCbG9ja2hhc2gsXG4gIE1lc3NhZ2VBZGRyZXNzVGFibGVMb29rdXAsXG4gIE1lc3NhZ2VWMCxcbiAgUHVibGljS2V5LFxuICBUcmFuc2FjdGlvbiBhcyBTb2xUcmFuc2FjdGlvbixcbiAgVmVyc2lvbmVkVHJhbnNhY3Rpb24sXG59IGZyb20gJ0Bzb2xhbmEvd2ViMy5qcyc7XG5pbXBvcnQgYmFzZTU4IGZyb20gJ2JzNTgnO1xuaW1wb3J0IHtcbiAgaXNWYWxpZEFkZHJlc3MsXG4gIGlzVmFsaWRBbW91bnQsXG4gIGlzVmFsaWRCbG9ja0lkLFxuICBpc1ZhbGlkTWVtbyxcbiAgdmFsaWRhdGVBZGRyZXNzLFxuICB2YWxpZGF0ZVJhd1RyYW5zYWN0aW9uLFxufSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB7IEtleVBhaXIgfSBmcm9tICcuJztcbmltcG9ydCB7IEluc3RydWN0aW9uQnVpbGRlclR5cGVzIH0gZnJvbSAnLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgc29sSW5zdHJ1Y3Rpb25GYWN0b3J5IH0gZnJvbSAnLi9zb2xJbnN0cnVjdGlvbkZhY3RvcnknO1xuaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuaW1wb3J0IHsgRHVyYWJsZU5vbmNlUGFyYW1zLCBJbnN0cnVjdGlvblBhcmFtcywgTWVtbywgTm9uY2UsIFNldFByaW9yaXR5RmVlLCBUcmFuc2ZlciB9IGZyb20gJy4vaWZhY2UnO1xuaW1wb3J0IHsgaW5zdHJ1Y3Rpb25QYXJhbXNGYWN0b3J5IH0gZnJvbSAnLi9pbnN0cnVjdGlvblBhcmFtc0ZhY3RvcnknO1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgVHJhbnNhY3Rpb25CdWlsZGVyIGV4dGVuZHMgQmFzZVRyYW5zYWN0aW9uQnVpbGRlciB7XG4gIHByb3RlY3RlZCBfdHJhbnNhY3Rpb246IFRyYW5zYWN0aW9uO1xuICBwcml2YXRlIF9zaWduYXR1cmVzOiBTaWduYXR1cmVbXSA9IFtdO1xuICBwcml2YXRlIF9sYW1wb3J0c1BlclNpZ25hdHVyZTogbnVtYmVyO1xuICBwcml2YXRlIF90b2tlbkFjY291bnRSZW50RXhlbXB0QW1vdW50OiBzdHJpbmc7XG5cbiAgcHJvdGVjdGVkIF9zZW5kZXI6IHN0cmluZztcbiAgcHJvdGVjdGVkIF9yZWNlbnRCbG9ja2hhc2g6IEJsb2NraGFzaDtcbiAgcHJvdGVjdGVkIF9ub25jZUluZm86IE5vbmNlO1xuICBwcm90ZWN0ZWQgX2luc3RydWN0aW9uc0RhdGE6IEluc3RydWN0aW9uUGFyYW1zW10gPSBbXTtcbiAgcHJvdGVjdGVkIF9zaWduZXJzOiBLZXlQYWlyW10gPSBbXTtcbiAgcHJvdGVjdGVkIF9tZW1vPzogc3RyaW5nO1xuICBwcm90ZWN0ZWQgX2ZlZVBheWVyPzogc3RyaW5nO1xuICBwcm90ZWN0ZWQgX3ByaW9yaXR5RmVlOiBudW1iZXI7XG4gIC8qKiBPcHRpb25hbCBvdmVycmlkZSBmb3IgdGhlIHprLWVsZ2FtYWwtcHJvb2YgcHJvZ3JhbSBpZCAodXNlZCBieSBDVCBpbnN0cnVjdGlvbiBidWlsZGVycykgKi9cbiAgcHJvdGVjdGVkIF96a1Byb29mUHJvZ3JhbUlkPzogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKF9jb2luQ29uZmlnOiBSZWFkb25seTxDb2luQ29uZmlnPikge1xuICAgIHN1cGVyKF9jb2luQ29uZmlnKTtcbiAgICB0aGlzLnRyYW5zYWN0aW9uID0gbmV3IFRyYW5zYWN0aW9uKF9jb2luQ29uZmlnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgdHJhbnNhY3Rpb24gdHlwZS5cbiAgICovXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBnZXQgdHJhbnNhY3Rpb25UeXBlKCk6IFRyYW5zYWN0aW9uVHlwZTtcblxuICAvKipcbiAgICogSW5pdGlhbGl6ZSB0aGUgdHJhbnNhY3Rpb24gYnVpbGRlciBmaWVsZHMgdXNpbmcgdGhlIGRlY29kZWQgdHJhbnNhY3Rpb24gZGF0YVxuICAgKlxuICAgKiBAcGFyYW0ge1RyYW5zYWN0aW9ufSB0eCB0aGUgdHJhbnNhY3Rpb24gZGF0YVxuICAgKi9cbiAgaW5pdEJ1aWxkZXIodHg6IFRyYW5zYWN0aW9uKTogdm9pZCB7XG4gICAgdGhpcy5fdHJhbnNhY3Rpb24gPSB0eDtcbiAgICBjb25zdCB0eERhdGEgPSB0eC50b0pzb24oKTtcblxuICAgIGNvbnN0IGZpbHRlcmVkVHJhbnNmZXJJbnN0cnVjdGlvbnNEYXRhID0gdHhEYXRhLmluc3RydWN0aW9uc0RhdGEuZmlsdGVyKFxuICAgICAgKGRhdGEpID0+IGRhdGEudHlwZSA9PT0gSW5zdHJ1Y3Rpb25CdWlsZGVyVHlwZXMuVHJhbnNmZXJcbiAgICApO1xuICAgIGxldCBzZW5kZXI7XG4gICAgaWYgKGZpbHRlcmVkVHJhbnNmZXJJbnN0cnVjdGlvbnNEYXRhLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IHRyYW5zZmVySW5zdHJ1Y3Rpb25zRGF0YSA9IGZpbHRlcmVkVHJhbnNmZXJJbnN0cnVjdGlvbnNEYXRhWzBdIGFzIFRyYW5zZmVyO1xuICAgICAgc2VuZGVyID0gdHJhbnNmZXJJbnN0cnVjdGlvbnNEYXRhLnBhcmFtcy5mcm9tQWRkcmVzcztcbiAgICB9IGVsc2Uge1xuICAgICAgc2VuZGVyID0gdHhEYXRhLmZlZVBheWVyO1xuICAgIH1cbiAgICB0aGlzLnNlbmRlcihzZW5kZXIpO1xuICAgIHRoaXMuZmVlUGF5ZXIodHhEYXRhLmZlZVBheWVyIGFzIHN0cmluZyk7XG4gICAgdGhpcy5ub25jZSh0eERhdGEubm9uY2UsIHR4RGF0YS5kdXJhYmxlTm9uY2UpO1xuICAgIHRoaXMuX2luc3RydWN0aW9uc0RhdGEgPSBpbnN0cnVjdGlvblBhcmFtc0ZhY3RvcnkoXG4gICAgICB0eC50eXBlLFxuICAgICAgdHguc29sVHJhbnNhY3Rpb24uaW5zdHJ1Y3Rpb25zLFxuICAgICAgdGhpcy5fY29pbkNvbmZpZy5uYW1lLFxuICAgICAgdHhEYXRhLmluc3RydWN0aW9uc0RhdGEsXG4gICAgICB0eC51c2VUb2tlbkFkZHJlc3NUb2tlbk5hbWVcbiAgICApO1xuICAgIC8vIFBhcnNlIHByaW9yaXR5IGZlZSBpbnN0cnVjdGlvbiBkYXRhXG4gICAgY29uc3QgZmlsdGVyZWRQcmlvcml0eUZlZUluc3RydWN0aW9uc0RhdGEgPSB0eERhdGEuaW5zdHJ1Y3Rpb25zRGF0YS5maWx0ZXIoXG4gICAgICAoZGF0YSkgPT4gZGF0YS50eXBlID09PSBJbnN0cnVjdGlvbkJ1aWxkZXJUeXBlcy5TZXRQcmlvcml0eUZlZVxuICAgICk7XG5cbiAgICBmb3IgKGNvbnN0IGluc3RydWN0aW9uIG9mIHRoaXMuX2luc3RydWN0aW9uc0RhdGEpIHtcbiAgICAgIGlmIChpbnN0cnVjdGlvbi50eXBlID09PSBJbnN0cnVjdGlvbkJ1aWxkZXJUeXBlcy5NZW1vKSB7XG4gICAgICAgIGNvbnN0IG1lbW9JbnN0cnVjdGlvbjogTWVtbyA9IGluc3RydWN0aW9uO1xuICAgICAgICB0aGlzLm1lbW8obWVtb0luc3RydWN0aW9uLnBhcmFtcy5tZW1vKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGluc3RydWN0aW9uLnR5cGUgPT09IEluc3RydWN0aW9uQnVpbGRlclR5cGVzLk5vbmNlQWR2YW5jZSkge1xuICAgICAgICBjb25zdCBhZHZhbmNlTm9uY2VJbnN0cnVjdGlvbjogTm9uY2UgPSBpbnN0cnVjdGlvbjtcbiAgICAgICAgdGhpcy5ub25jZSh0eERhdGEubm9uY2UsIGFkdmFuY2VOb25jZUluc3RydWN0aW9uLnBhcmFtcyk7XG4gICAgICB9XG5cbiAgICAgIC8vIElmIHByaW8gZmVlIGluc3RydWN0aW9uIGV4aXN0cywgc2V0IHRoZSBwcmlvcml0eSBmZWUgdmFyaWFibGVcbiAgICAgIGlmIChpbnN0cnVjdGlvbi50eXBlID09PSBJbnN0cnVjdGlvbkJ1aWxkZXJUeXBlcy5TZXRQcmlvcml0eUZlZSkge1xuICAgICAgICBjb25zdCBwcmlvcml0eUZlZUluc3RydWN0aW9uc0RhdGEgPSBmaWx0ZXJlZFByaW9yaXR5RmVlSW5zdHJ1Y3Rpb25zRGF0YVswXSBhcyBTZXRQcmlvcml0eUZlZTtcbiAgICAgICAgdGhpcy5zZXRQcmlvcml0eUZlZSh7IGFtb3VudDogTnVtYmVyKHByaW9yaXR5RmVlSW5zdHJ1Y3Rpb25zRGF0YS5wYXJhbXMuZmVlKSB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgcHJvdGVjdGVkIGZyb21JbXBsZW1lbnRhdGlvbihyYXdUcmFuc2FjdGlvbjogc3RyaW5nKTogVHJhbnNhY3Rpb24ge1xuICAgIGNvbnN0IHR4ID0gbmV3IFRyYW5zYWN0aW9uKHRoaXMuX2NvaW5Db25maWcpO1xuICAgIHRoaXMudmFsaWRhdGVSYXdUcmFuc2FjdGlvbihyYXdUcmFuc2FjdGlvbik7XG4gICAgdHguZnJvbVJhd1RyYW5zYWN0aW9uKHJhd1RyYW5zYWN0aW9uKTtcbiAgICB0aGlzLmluaXRCdWlsZGVyKHR4KTtcbiAgICByZXR1cm4gdGhpcy50cmFuc2FjdGlvbjtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBwcm90ZWN0ZWQgYXN5bmMgYnVpbGRJbXBsZW1lbnRhdGlvbigpOiBQcm9taXNlPFRyYW5zYWN0aW9uPiB7XG4gICAgY29uc3QgYnVpbHRUcmFuc2FjdGlvbiA9IHRoaXMuYnVpbGRTb2xUcmFuc2FjdGlvbigpO1xuXG4gICAgaWYgKGJ1aWx0VHJhbnNhY3Rpb24gaW5zdGFuY2VvZiBWZXJzaW9uZWRUcmFuc2FjdGlvbikge1xuICAgICAgdGhpcy50cmFuc2FjdGlvbi52ZXJzaW9uZWRUcmFuc2FjdGlvbiA9IGJ1aWx0VHJhbnNhY3Rpb247XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudHJhbnNhY3Rpb24uc29sVHJhbnNhY3Rpb24gPSBidWlsdFRyYW5zYWN0aW9uO1xuICAgIH1cblxuICAgIHRoaXMudHJhbnNhY3Rpb24uc2V0VHJhbnNhY3Rpb25UeXBlKHRoaXMudHJhbnNhY3Rpb25UeXBlKTtcbiAgICB0aGlzLnRyYW5zYWN0aW9uLnNldEluc3RydWN0aW9uc0RhdGEodGhpcy5faW5zdHJ1Y3Rpb25zRGF0YSk7XG4gICAgdGhpcy50cmFuc2FjdGlvbi5sb2FkSW5wdXRzQW5kT3V0cHV0cygpO1xuICAgIHRoaXMuX3RyYW5zYWN0aW9uLnRva2VuQWNjb3VudFJlbnRFeGVtcHRBbW91bnQgPSB0aGlzLl90b2tlbkFjY291bnRSZW50RXhlbXB0QW1vdW50O1xuICAgIHJldHVybiB0aGlzLnRyYW5zYWN0aW9uO1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkcyB0aGUgc29sYW5hIHRyYW5zYWN0aW9uLlxuICAgKi9cbiAgcHJvdGVjdGVkIGJ1aWxkU29sVHJhbnNhY3Rpb24oKTogU29sVHJhbnNhY3Rpb24gfCBWZXJzaW9uZWRUcmFuc2FjdGlvbiB7XG4gICAgYXNzZXJ0KHRoaXMuX3NlbmRlciwgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignc2VuZGVyIGlzIHJlcXVpcmVkIGJlZm9yZSBidWlsZGluZycpKTtcbiAgICBhc3NlcnQodGhpcy5fcmVjZW50QmxvY2toYXNoLCBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdyZWNlbnQgYmxvY2toYXNoIGlzIHJlcXVpcmVkIGJlZm9yZSBidWlsZGluZycpKTtcblxuICAgIC8vIENoZWNrIGlmIHdlIHNob3VsZCBidWlsZCBhcyBWZXJzaW9uZWRUcmFuc2FjdGlvblxuICAgIGlmICh0aGlzLl90cmFuc2FjdGlvbi5pc1ZlcnNpb25lZFRyYW5zYWN0aW9uKCkpIHtcbiAgICAgIHJldHVybiB0aGlzLmJ1aWxkVmVyc2lvbmVkVHJhbnNhY3Rpb24oKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuYnVpbGRMZWdhY3lUcmFuc2FjdGlvbigpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZHMgYSBsZWdhY3kgU29sYW5hIHRyYW5zYWN0aW9uLlxuICAgKi9cbiAgcHJpdmF0ZSBidWlsZExlZ2FjeVRyYW5zYWN0aW9uKCk6IFNvbFRyYW5zYWN0aW9uIHtcbiAgICBjb25zdCB0eCA9IG5ldyBTb2xUcmFuc2FjdGlvbigpO1xuICAgIGlmICh0aGlzLl90cmFuc2FjdGlvbj8uc29sVHJhbnNhY3Rpb24/LnNpZ25hdHVyZXMpIHtcbiAgICAgIHR4LnNpZ25hdHVyZXMgPSB0aGlzLl90cmFuc2FjdGlvbj8uc29sVHJhbnNhY3Rpb24/LnNpZ25hdHVyZXM7XG4gICAgfVxuXG4gICAgdHguZmVlUGF5ZXIgPSB0aGlzLl9mZWVQYXllciA/IG5ldyBQdWJsaWNLZXkodGhpcy5fZmVlUGF5ZXIpIDogbmV3IFB1YmxpY0tleSh0aGlzLl9zZW5kZXIpO1xuXG4gICAgaWYgKHRoaXMuX25vbmNlSW5mbykge1xuICAgICAgdHgubm9uY2VJbmZvID0ge1xuICAgICAgICBub25jZTogdGhpcy5fcmVjZW50QmxvY2toYXNoLFxuICAgICAgICBub25jZUluc3RydWN0aW9uOiBzb2xJbnN0cnVjdGlvbkZhY3RvcnkodGhpcy5fbm9uY2VJbmZvKVswXSxcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIHR4LnJlY2VudEJsb2NraGFzaCA9IHRoaXMuX3JlY2VudEJsb2NraGFzaDtcbiAgICB9XG4gICAgZm9yIChjb25zdCBpbnN0cnVjdGlvbiBvZiB0aGlzLl9pbnN0cnVjdGlvbnNEYXRhKSB7XG4gICAgICB0eC5hZGQoLi4uc29sSW5zdHJ1Y3Rpb25GYWN0b3J5KGluc3RydWN0aW9uLCB0aGlzLl96a1Byb29mUHJvZ3JhbUlkKSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX21lbW8pIHtcbiAgICAgIGNvbnN0IG1lbW9EYXRhOiBNZW1vID0ge1xuICAgICAgICB0eXBlOiBJbnN0cnVjdGlvbkJ1aWxkZXJUeXBlcy5NZW1vLFxuICAgICAgICBwYXJhbXM6IHtcbiAgICAgICAgICBtZW1vOiB0aGlzLl9tZW1vLFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICAgIHRoaXMuX2luc3RydWN0aW9uc0RhdGEucHVzaChtZW1vRGF0YSk7XG4gICAgICB0eC5hZGQoLi4uc29sSW5zdHJ1Y3Rpb25GYWN0b3J5KG1lbW9EYXRhKSk7XG4gICAgfVxuXG4gICAgdGhpcy5fdHJhbnNhY3Rpb24ubGFtcG9ydHNQZXJTaWduYXR1cmUgPSB0aGlzLl9sYW1wb3J0c1BlclNpZ25hdHVyZTtcblxuICAgIGZvciAoY29uc3Qgc2lnbmVyIG9mIHRoaXMuX3NpZ25lcnMpIHtcbiAgICAgIGNvbnN0IHB1YmxpY0tleSA9IG5ldyBQdWJsaWNLZXkoc2lnbmVyLmdldEtleXMoKS5wdWIpO1xuICAgICAgY29uc3Qgc2VjcmV0S2V5ID0gc2lnbmVyLmdldEtleXModHJ1ZSkucHJ2O1xuICAgICAgYXNzZXJ0KHNlY3JldEtleSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpO1xuICAgICAgdHgucGFydGlhbFNpZ24oeyBwdWJsaWNLZXksIHNlY3JldEtleSB9KTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IHNpZ25hdHVyZSBvZiB0aGlzLl9zaWduYXR1cmVzKSB7XG4gICAgICBjb25zdCBzb2xQdWJsaWNLZXkgPSBuZXcgUHVibGljS2V5KHNpZ25hdHVyZS5wdWJsaWNLZXkucHViKTtcbiAgICAgIHR4LmFkZFNpZ25hdHVyZShzb2xQdWJsaWNLZXksIHNpZ25hdHVyZS5zaWduYXR1cmUpO1xuICAgIH1cblxuICAgIHJldHVybiB0eDtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZHMgYSBWZXJzaW9uZWRUcmFuc2FjdGlvbi5cbiAgICpcbiAgICogQHJldHVybnMge1ZlcnNpb25lZFRyYW5zYWN0aW9ufSBUaGUgYnVpbHQgdmVyc2lvbmVkIHRyYW5zYWN0aW9uXG4gICAqL1xuICBwcml2YXRlIGJ1aWxkVmVyc2lvbmVkVHJhbnNhY3Rpb24oKTogVmVyc2lvbmVkVHJhbnNhY3Rpb24ge1xuICAgIGNvbnN0IHZlcnNpb25lZFR4RGF0YSA9IHRoaXMuX3RyYW5zYWN0aW9uLmdldFZlcnNpb25lZFRyYW5zYWN0aW9uRGF0YSgpO1xuXG4gICAgaWYgKCF2ZXJzaW9uZWRUeERhdGEpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ01pc3NpbmcgVmVyc2lvbmVkVHJhbnNhY3Rpb25EYXRhJyk7XG4gICAgfVxuXG4gICAgY29uc3QgdmVyc2lvbmVkVHggPSB0aGlzLmJ1aWxkRnJvbVZlcnNpb25lZERhdGEodmVyc2lvbmVkVHhEYXRhKTtcblxuICAgIHRoaXMuX3RyYW5zYWN0aW9uLmxhbXBvcnRzUGVyU2lnbmF0dXJlID0gdGhpcy5fbGFtcG9ydHNQZXJTaWduYXR1cmU7XG5cbiAgICBmb3IgKGNvbnN0IHNpZ25lciBvZiB0aGlzLl9zaWduZXJzKSB7XG4gICAgICBjb25zdCBwdWJsaWNLZXkgPSBuZXcgUHVibGljS2V5KHNpZ25lci5nZXRLZXlzKCkucHViKTtcbiAgICAgIGNvbnN0IHNlY3JldEtleSA9IHNpZ25lci5nZXRLZXlzKHRydWUpLnBydjtcbiAgICAgIGFzc2VydChzZWNyZXRLZXkgaW5zdGFuY2VvZiBVaW50OEFycmF5KTtcbiAgICAgIHZlcnNpb25lZFR4LnNpZ24oW3sgcHVibGljS2V5LCBzZWNyZXRLZXkgfV0pO1xuICAgIH1cblxuICAgIGZvciAoY29uc3Qgc2lnbmF0dXJlIG9mIHRoaXMuX3NpZ25hdHVyZXMpIHtcbiAgICAgIGNvbnN0IHNvbFB1YmxpY0tleSA9IG5ldyBQdWJsaWNLZXkoc2lnbmF0dXJlLnB1YmxpY0tleS5wdWIpO1xuICAgICAgdmVyc2lvbmVkVHguYWRkU2lnbmF0dXJlKHNvbFB1YmxpY0tleSwgc2lnbmF0dXJlLnNpZ25hdHVyZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZlcnNpb25lZFR4O1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkIGEgVmVyc2lvbmVkVHJhbnNhY3Rpb24gZnJvbSBkZWNvbnN0cnVjdGVkIFZlcnNpb25lZFRyYW5zYWN0aW9uRGF0YVxuICAgKiBAcGFyYW0gZGF0YSBUaGUgdmVyc2lvbmVkIHRyYW5zYWN0aW9uIGRhdGFcbiAgICogQHJldHVybnMgVGhlIGJ1aWx0IHZlcnNpb25lZCB0cmFuc2FjdGlvblxuICAgKi9cbiAgcHJpdmF0ZSBidWlsZEZyb21WZXJzaW9uZWREYXRhKGRhdGE6IFNvbFZlcnNpb25lZFRyYW5zYWN0aW9uRGF0YSk6IFZlcnNpb25lZFRyYW5zYWN0aW9uIHtcbiAgICBjb25zdCBzdGF0aWNBY2NvdW50S2V5cyA9IGRhdGEuc3RhdGljQWNjb3VudEtleXMubWFwKChrZXk6IHN0cmluZykgPT4gbmV3IFB1YmxpY0tleShrZXkpKTtcblxuICAgIGNvbnN0IGFkZHJlc3NUYWJsZUxvb2t1cHM6IE1lc3NhZ2VBZGRyZXNzVGFibGVMb29rdXBbXSA9IGRhdGEuYWRkcmVzc0xvb2t1cFRhYmxlcy5tYXAoKGFsdCkgPT4gKHtcbiAgICAgIGFjY291bnRLZXk6IG5ldyBQdWJsaWNLZXkoYWx0LmFjY291bnRLZXkpLFxuICAgICAgd3JpdGFibGVJbmRleGVzOiBhbHQud3JpdGFibGVJbmRleGVzLFxuICAgICAgcmVhZG9ubHlJbmRleGVzOiBhbHQucmVhZG9ubHlJbmRleGVzLFxuICAgIH0pKTtcblxuICAgIGNvbnN0IGNvbXBpbGVkSW5zdHJ1Y3Rpb25zID0gZGF0YS52ZXJzaW9uZWRJbnN0cnVjdGlvbnMubWFwKChpbnN0cnVjdGlvbikgPT4gKHtcbiAgICAgIHByb2dyYW1JZEluZGV4OiBpbnN0cnVjdGlvbi5wcm9ncmFtSWRJbmRleCxcbiAgICAgIGFjY291bnRLZXlJbmRleGVzOiBpbnN0cnVjdGlvbi5hY2NvdW50S2V5SW5kZXhlcyxcbiAgICAgIGRhdGE6IEJ1ZmZlci5mcm9tKGJhc2U1OC5kZWNvZGUoaW5zdHJ1Y3Rpb24uZGF0YSkpLFxuICAgIH0pKTtcblxuICAgIGNvbnN0IHJlY2VudEJsb2NraGFzaCA9IGRhdGEucmVjZW50QmxvY2toYXNoIHx8IHRoaXMuX3JlY2VudEJsb2NraGFzaDtcblxuICAgIGlmICghcmVjZW50QmxvY2toYXNoKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdNaXNzaW5nIHJlY2VudCBibG9ja2hhc2ggZm9yIFZlcnNpb25lZFRyYW5zYWN0aW9uJyk7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLl9zZW5kZXIpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ01pc3Npbmcgc2VuZGVyIChmZWUgcGF5ZXIpIGZvciBWZXJzaW9uZWRUcmFuc2FjdGlvbicpO1xuICAgIH1cblxuICAgIGNvbnN0IG1lc3NhZ2VWMCA9IG5ldyBNZXNzYWdlVjAoe1xuICAgICAgaGVhZGVyOiBkYXRhLm1lc3NhZ2VIZWFkZXIsXG4gICAgICBzdGF0aWNBY2NvdW50S2V5cyxcbiAgICAgIHJlY2VudEJsb2NraGFzaDogcmVjZW50QmxvY2toYXNoLFxuICAgICAgY29tcGlsZWRJbnN0cnVjdGlvbnMsXG4gICAgICBhZGRyZXNzVGFibGVMb29rdXBzLFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIG5ldyBWZXJzaW9uZWRUcmFuc2FjdGlvbihtZXNzYWdlVjApO1xuICB9XG5cbiAgLy8gcmVnaW9uIEdldHRlcnMgYW5kIFNldHRlcnNcbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHByb3RlY3RlZCBnZXQgdHJhbnNhY3Rpb24oKTogVHJhbnNhY3Rpb24ge1xuICAgIHJldHVybiB0aGlzLl90cmFuc2FjdGlvbjtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBwcm90ZWN0ZWQgc2V0IHRyYW5zYWN0aW9uKHRyYW5zYWN0aW9uOiBUcmFuc2FjdGlvbikge1xuICAgIHRoaXMuX3RyYW5zYWN0aW9uID0gdHJhbnNhY3Rpb247XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgcHJvdGVjdGVkIHNpZ25JbXBsZW1lbnRhdGlvbihrZXk6IEJhc2VLZXkpOiBUcmFuc2FjdGlvbiB7XG4gICAgdGhpcy52YWxpZGF0ZUtleShrZXkpO1xuICAgIHRoaXMuY2hlY2tEdXBsaWNhdGVkU2lnbmVyKGtleSk7XG4gICAgY29uc3QgcHJ2ID0ga2V5LmtleTtcbiAgICBjb25zdCBzaWduZXIgPSBuZXcgS2V5UGFpcih7IHBydjogcHJ2IH0pO1xuICAgIHRoaXMuX3NpZ25lcnMucHVzaChzaWduZXIpO1xuXG4gICAgcmV0dXJuIHRoaXMuX3RyYW5zYWN0aW9uO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIGFkZFNpZ25hdHVyZShwdWJsaWNLZXk6IEJhc2VQdWJsaWNLZXksIHNpZ25hdHVyZTogQnVmZmVyKTogdm9pZCB7XG4gICAgdGhpcy5fc2lnbmF0dXJlcy5wdXNoKHsgcHVibGljS2V5LCBzaWduYXR1cmUgfSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBleHRlcm5hbGx5LWFkZGVkIHNpZ25hdHVyZXMgKHZpYSBhZGRTaWduYXR1cmUpIGluIG9yZGVyLlxuICAgKlxuICAgKiBAcmV0dXJucyB7U2lnbmF0dXJlW119IFRoZSBsaXN0IG9mIGV4dGVybmFsIHNpZ25hdHVyZXNcbiAgICovXG4gIHByb3RlY3RlZCBnZXRBZGRpdGlvbmFsU2lnbmF0dXJlcygpOiBTaWduYXR1cmVbXSB7XG4gICAgcmV0dXJuIHRoaXMuX3NpZ25hdHVyZXM7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgc2VuZGVyIG9mIHRoaXMgdHJhbnNhY3Rpb24uXG4gICAqIFRoaXMgYWNjb3VudCB3aWxsIGJlIHJlc3BvbnNpYmxlIGZvciBwYXlpbmcgdHJhbnNhY3Rpb24gZmVlcy5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHNlbmRlckFkZHJlc3MgdGhlIGFjY291bnQgdGhhdCBpcyBzZW5kaW5nIHRoaXMgdHJhbnNhY3Rpb25cbiAgICogQHJldHVybnMge1RyYW5zYWN0aW9uQnVpbGRlcn0gVGhpcyB0cmFuc2FjdGlvbiBidWlsZGVyXG4gICAqL1xuICBzZW5kZXIoc2VuZGVyQWRkcmVzczogc3RyaW5nKTogdGhpcyB7XG4gICAgdmFsaWRhdGVBZGRyZXNzKHNlbmRlckFkZHJlc3MsICdzZW5kZXInKTtcbiAgICB0aGlzLl9zZW5kZXIgPSBzZW5kZXJBZGRyZXNzO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgdHJhbnNhY3Rpb24gbm9uY2VcbiAgICogUmVxdWlyZXMgYm90aCBvcHRpb25hbCBwYXJhbXMgaW4gb3JkZXIgdG8gdXNlIHRoZSBkdXJhYmxlIG5vbmNlXG4gICAqXG4gICAqIEBwYXJhbSB7QmxvY2toYXNofSBibG9ja0hhc2ggVGhlIGxhdGVzdCBibG9ja0hhc2hcbiAgICogQHBhcmFtIHtEdXJhYmxlTm9uY2VQYXJhbXN9IFtkdXJhYmxlTm9uY2VQYXJhbXNdIEFuIG9iamVjdCBjb250YWluaW5nIHRoZSB3YWxsZXROb25jZUFkZHJlc3MgYW5kIHRoZSBhdXRoV2FsbGV0QWRkcmVzcyAocmVxdWlyZWQgZm9yIGR1cmFibGUgbm9uY2UpXG4gICAqIEByZXR1cm5zIHtUcmFuc2FjdGlvbkJ1aWxkZXJ9IFRoaXMgdHJhbnNhY3Rpb24gYnVpbGRlclxuICAgKi9cbiAgbm9uY2UoYmxvY2tIYXNoOiBCbG9ja2hhc2gsIGR1cmFibGVOb25jZVBhcmFtcz86IER1cmFibGVOb25jZVBhcmFtcyk6IHRoaXMge1xuICAgIGlmICghYmxvY2tIYXNoIHx8ICFpc1ZhbGlkQmxvY2tJZChibG9ja0hhc2gpKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdJbnZhbGlkIG9yIG1pc3NpbmcgYmxvY2tIYXNoLCBnb3Q6ICcgKyBibG9ja0hhc2gpO1xuICAgIH1cbiAgICBpZiAoZHVyYWJsZU5vbmNlUGFyYW1zKSB7XG4gICAgICB2YWxpZGF0ZUFkZHJlc3MoZHVyYWJsZU5vbmNlUGFyYW1zLndhbGxldE5vbmNlQWRkcmVzcywgJ3dhbGxldE5vbmNlQWRkcmVzcycpO1xuICAgICAgdmFsaWRhdGVBZGRyZXNzKGR1cmFibGVOb25jZVBhcmFtcy5hdXRoV2FsbGV0QWRkcmVzcywgJ2F1dGhXYWxsZXRBZGRyZXNzJyk7XG4gICAgICBpZiAoZHVyYWJsZU5vbmNlUGFyYW1zLndhbGxldE5vbmNlQWRkcmVzcyA9PT0gZHVyYWJsZU5vbmNlUGFyYW1zLmF1dGhXYWxsZXRBZGRyZXNzKSB7XG4gICAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ0ludmFsaWQgcGFyYW1zOiB3YWxsZXROb25jZUFkZHJlc3MgY2Fubm90IGJlIGVxdWFsIHRvIGF1dGhXYWxsZXRBZGRyZXNzJyk7XG4gICAgICB9XG4gICAgICB0aGlzLl9ub25jZUluZm8gPSB7XG4gICAgICAgIHR5cGU6IEluc3RydWN0aW9uQnVpbGRlclR5cGVzLk5vbmNlQWR2YW5jZSxcbiAgICAgICAgcGFyYW1zOiBkdXJhYmxlTm9uY2VQYXJhbXMsXG4gICAgICB9O1xuICAgIH1cbiAgICB0aGlzLl9yZWNlbnRCbG9ja2hhc2ggPSBibG9ja0hhc2g7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogIFNldCB0aGUgbWVtb1xuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbWVtb1xuICAgKiBAcmV0dXJucyB7VHJhbnNhY3Rpb25CdWlsZGVyfSBUaGlzIHRyYW5zYWN0aW9uIGJ1aWxkZXJcbiAgICovXG4gIG1lbW8obWVtbzogc3RyaW5nKTogdGhpcyB7XG4gICAgdGhpcy52YWxpZGF0ZU1lbW8obWVtbyk7XG4gICAgdGhpcy5fbWVtbyA9IG1lbW87XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBmZWUoZmVlT3B0aW9uczogRmVlT3B0aW9ucyk6IHRoaXMge1xuICAgIHRoaXMuX2xhbXBvcnRzUGVyU2lnbmF0dXJlID0gTnVtYmVyKGZlZU9wdGlvbnMuYW1vdW50KTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHB1YmxpYyBzZXRQcmlvcml0eUZlZShmZWVPcHRpb25zOiBGZWVPcHRpb25zKTogdGhpcyB7XG4gICAgdGhpcy5fcHJpb3JpdHlGZWUgPSBOdW1iZXIoZmVlT3B0aW9ucy5hbW91bnQpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgZmVlUGF5ZXIoZmVlUGF5ZXI6IHN0cmluZyk6IHRoaXMge1xuICAgIHRoaXMuX2ZlZVBheWVyID0gZmVlUGF5ZXI7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogVXNlZCB0byBzZXQgdGhlIG1pbmltdW0gcmVudCBleGVtcHQgYW1vdW50IGZvciBhbiBBVEFcbiAgICpcbiAgICogQHBhcmFtIHRva2VuQWNjb3VudFJlbnRFeGVtcHRBbW91bnQgbWluaW11bSByZW50IGV4ZW1wdCBhbW91bnQgaW4gbGFtcG9ydHNcbiAgICovXG4gIGFzc29jaWF0ZWRUb2tlbkFjY291bnRSZW50KHRva2VuQWNjb3VudFJlbnRFeGVtcHRBbW91bnQ6IHN0cmluZyk6IHRoaXMge1xuICAgIHRoaXMudmFsaWRhdGVSZW50RXhlbXB0QW1vdW50KHRva2VuQWNjb3VudFJlbnRFeGVtcHRBbW91bnQpO1xuICAgIHRoaXMuX3Rva2VuQWNjb3VudFJlbnRFeGVtcHRBbW91bnQgPSB0b2tlbkFjY291bnRSZW50RXhlbXB0QW1vdW50O1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgcHJpdmF0ZSB2YWxpZGF0ZVJlbnRFeGVtcHRBbW91bnQodG9rZW5BY2NvdW50UmVudEV4ZW1wdEFtb3VudDogc3RyaW5nKSB7XG4gICAgLy8gX3Rva2VuQWNjb3VudFJlbnRFeGVtcHRBbW91bnQgaXMgYWxsb3dlZCB0byBiZSB1bmRlZmluZWQgb3IgYSB2YWxpZCBhbW91bnQgaWYgaXQncyBkZWZpbmVkXG4gICAgaWYgKHRva2VuQWNjb3VudFJlbnRFeGVtcHRBbW91bnQgJiYgIWlzVmFsaWRBbW91bnQodG9rZW5BY2NvdW50UmVudEV4ZW1wdEFtb3VudCkpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ0ludmFsaWQgdG9rZW5BY2NvdW50UmVudEV4ZW1wdEFtb3VudCwgZ290OiAnICsgdG9rZW5BY2NvdW50UmVudEV4ZW1wdEFtb3VudCk7XG4gICAgfVxuICB9XG5cbiAgLy8gZW5kcmVnaW9uXG5cbiAgLy8gcmVnaW9uIFZhbGlkYXRvcnNcbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHZhbGlkYXRlQWRkcmVzcyhhZGRyZXNzOiBCYXNlQWRkcmVzcywgYWRkcmVzc0Zvcm1hdD86IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICghaXNWYWxpZEFkZHJlc3MoYWRkcmVzcy5hZGRyZXNzKSkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignSW52YWxpZCBhZGRyZXNzICcgKyBhZGRyZXNzLmFkZHJlc3MpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICB2YWxpZGF0ZUtleShrZXk6IEJhc2VLZXkpOiB2b2lkIHtcbiAgICBsZXQga2V5UGFpcjogS2V5UGFpcjtcbiAgICB0cnkge1xuICAgICAga2V5UGFpciA9IG5ldyBLZXlQYWlyKHsgcHJ2OiBrZXkua2V5IH0pO1xuICAgIH0gY2F0Y2gge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignSW52YWxpZCBrZXknKTtcbiAgICB9XG5cbiAgICBpZiAoIWtleVBhaXIuZ2V0S2V5cygpLnBydikge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignSW52YWxpZCBrZXknKTtcbiAgICB9XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgdmFsaWRhdGVSYXdUcmFuc2FjdGlvbihyYXdUcmFuc2FjdGlvbjogc3RyaW5nKTogdm9pZCB7XG4gICAgdmFsaWRhdGVSYXdUcmFuc2FjdGlvbihyYXdUcmFuc2FjdGlvbik7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgdmFsaWRhdGVUcmFuc2FjdGlvbih0cmFuc2FjdGlvbj86IFRyYW5zYWN0aW9uKTogdm9pZCB7XG4gICAgdGhpcy52YWxpZGF0ZVNlbmRlcigpO1xuICAgIHRoaXMudmFsaWRhdGVOb25jZSgpO1xuICAgIHRoaXMudmFsaWRhdGVSZW50RXhlbXB0QW1vdW50KHRoaXMuX3Rva2VuQWNjb3VudFJlbnRFeGVtcHRBbW91bnQpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHZhbGlkYXRlVmFsdWUodmFsdWU6IEJpZ051bWJlcik6IHZvaWQge1xuICAgIGlmICh2YWx1ZS5pc0xlc3NUaGFuKDApKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdWYWx1ZSBjYW5ub3QgYmUgbGVzcyB0aGFuIHplcm8nKTtcbiAgICB9XG4gIH1cbiAgLyoqIFZhbGlkYXRlcyB0aGUgbWVtb1xuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbWVtbyAtIHRoZSBtZW1vIGFzIHN0cmluZ1xuICAgKi9cbiAgdmFsaWRhdGVNZW1vKG1lbW86IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICghbWVtbykge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignSW52YWxpZCBtZW1vLCBnb3Q6ICcgKyBtZW1vKTtcbiAgICB9XG4gICAgaWYgKCFpc1ZhbGlkTWVtbyhtZW1vKSkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignTWVtbyBpcyB0b28gbG9uZycpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgdGhhdCB0aGUgZ2l2ZW4ga2V5IGlzIG5vdCBhbHJlYWR5IGluIHRoaXMuX3NpZ25lcnNcbiAgICpcbiAgICogQHBhcmFtIHtCYXNlS2V5fSBrZXkgLSBUaGUga2V5IHRvIGNoZWNrXG4gICAqL1xuICBwcml2YXRlIGNoZWNrRHVwbGljYXRlZFNpZ25lcihrZXk6IEJhc2VLZXkpIHtcbiAgICB0aGlzLl9zaWduZXJzLmZvckVhY2goKGtwKSA9PiB7XG4gICAgICBpZiAoa3AuZ2V0S2V5cygpLnBydiA9PT0ga2V5LmtleSkge1xuICAgICAgICB0aHJvdyBuZXcgU2lnbmluZ0Vycm9yKCdEdXBsaWNhdGVkIHNpZ25lcjogJyArIGtleS5rZXkpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlcyB0aGF0IHRoZSBzZW5kZXIgZmllbGQgaXMgZGVmaW5lZFxuICAgKi9cbiAgcHJpdmF0ZSB2YWxpZGF0ZVNlbmRlcigpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fc2VuZGVyID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ0ludmFsaWQgdHJhbnNhY3Rpb246IG1pc3Npbmcgc2VuZGVyJyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlcyB0aGF0IHRoZSBub25jZSBmaWVsZCBpcyBkZWZpbmVkXG4gICAqL1xuICBwcml2YXRlIHZhbGlkYXRlTm9uY2UoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX3JlY2VudEJsb2NraGFzaCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdJbnZhbGlkIHRyYW5zYWN0aW9uOiBtaXNzaW5nIG5vbmNlIGJsb2NraGFzaCcpO1xuICAgIH1cbiAgfVxuICAvLyBlbmRyZWdpb25cbn1cbiJdfQ==
462
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb25CdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi90cmFuc2FjdGlvbkJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBRUEsbURBVzhCO0FBQzlCLCtDQUE0QztBQUM1Qyw2Q0FPeUI7QUFDekIsZ0RBQTBCO0FBQzFCLG1DQU9pQjtBQUNqQix3QkFBNEI7QUFDNUIsMkNBQThFO0FBQzlFLG1FQUFnRTtBQUNoRSxvREFBNEI7QUFVNUIseUVBQXNFO0FBRXRFLE1BQXNCLGtCQUFtQixTQUFRLGlDQUFzQjtJQW1CckUsWUFBWSxXQUFpQztRQUMzQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7UUFsQmIsZ0JBQVcsR0FBZ0IsRUFBRSxDQUFDO1FBTzVCLHNCQUFpQixHQUF3QixFQUFFLENBQUM7UUFDNUMsYUFBUSxHQUFjLEVBQUUsQ0FBQztRQVdqQyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUkseUJBQVcsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBT0Q7Ozs7T0FJRztJQUNILFdBQVcsQ0FBQyxFQUFlO1FBQ3pCLElBQUksQ0FBQyxZQUFZLEdBQUcsRUFBRSxDQUFDO1FBQ3ZCLE1BQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUUzQixNQUFNLGdDQUFnQyxHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQ3JFLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxLQUFLLG1DQUF1QixDQUFDLFFBQVEsQ0FDekQsQ0FBQztRQUNGLElBQUksTUFBTSxDQUFDO1FBQ1gsSUFBSSxnQ0FBZ0MsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDaEQsTUFBTSx3QkFBd0IsR0FBRyxnQ0FBZ0MsQ0FBQyxDQUFDLENBQWEsQ0FBQztZQUNqRixNQUFNLEdBQUcsd0JBQXdCLENBQUMsTUFBTSxD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QixDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFDdEQsQ0FBQztJQUNILENBQUM7SUFFRDs7OztPQUlHO0lBQ0sscUJBQXFCLENBQUMsR0FBWTtRQUN4QyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFO1lBQzNCLElBQUksRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDLEdBQUcsS0FBSyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7Z0JBQ2pDLE1BQU0sSUFBSSx1QkFBWSxDQUFDLHFCQUFxQixHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUMxRCxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7O09BRUc7SUFDSyxjQUFjO1FBQ3BCLElBQUksSUFBSSxDQUFDLE9BQU8sS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUMvQixNQUFNLElBQUksZ0NBQXFCLENBQUMscUNBQXFDLENBQUMsQ0FBQztRQUN6RSxDQUFDO0lBQ0gsQ0FBQztJQUVEOztPQUVHO0lBQ0ssYUFBYTtRQUNuQixJQUFJLElBQUksQ0FBQyxnQkFBZ0IsS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUN4QyxNQUFNLElBQUksZ0NBQXFCLENBQUMsOENBQThDLENBQUMsQ0FBQztRQUNsRixDQUFDO0lBQ0gsQ0FBQztDQUVGO0FBeGhCRCxnREF3aEJDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEJpZ051bWJlciBmcm9tICdiaWdudW1iZXIuanMnO1xuaW1wb3J0IHsgQmFzZUNvaW4gYXMgQ29pbkNvbmZpZyB9IGZyb20gJ0BiaXRnby1iZXRhL3N0YXRpY3MnO1xuaW1wb3J0IHtcbiAgQmFzZUFkZHJlc3MsXG4gIEJhc2VLZXksXG4gIEJhc2VUcmFuc2FjdGlvbkJ1aWxkZXIsXG4gIEJ1aWxkVHJhbnNhY3Rpb25FcnJvcixcbiAgRmVlT3B0aW9ucyxcbiAgUHVibGljS2V5IGFzIEJhc2VQdWJsaWNLZXksXG4gIFNpZ25hdHVyZSxcbiAgU2lnbmluZ0Vycm9yLFxuICBTb2xWZXJzaW9uZWRUcmFuc2FjdGlvbkRhdGEsXG4gIFRyYW5zYWN0aW9uVHlwZSxcbn0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb24gfSBmcm9tICcuL3RyYW5zYWN0aW9uJztcbmltcG9ydCB7XG4gIEJsb2NraGFzaCxcbiAgTWVzc2FnZUFkZHJlc3NUYWJsZUxvb2t1cCxcbiAgTWVzc2FnZVYwLFxuICBQdWJsaWNLZXksXG4gIFRyYW5zYWN0aW9uIGFzIFNvbFRyYW5zYWN0aW9uLFxuICBWZXJzaW9uZWRUcmFuc2FjdGlvbixcbn0gZnJvbSAnQHNvbGFuYS93ZWIzLmpzJztcbmltcG9ydCBiYXNlNTggZnJvbSAnYnM1OCc7XG5pbXBvcnQge1xuICBpc1ZhbGlkQWRkcmVzcyxcbiAgaXNWYWxpZEFtb3VudCxcbiAgaXNWYWxpZEJsb2NrSWQsXG4gIGlzVmFsaWRNZW1vLFxuICB2YWxpZGF0ZUFkZHJlc3MsXG4gIHZhbGlkYXRlUmF3VHJhbnNhY3Rpb24sXG59IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHsgS2V5UGFpciB9IGZyb20gJy4nO1xuaW1wb3J0IHsgSW5zdHJ1Y3Rpb25CdWlsZGVyVHlwZXMsIE1BWF9DT01QVVRFX1VOSVRfTElNSVQgfSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBzb2xJbnN0cnVjdGlvbkZhY3RvcnkgfSBmcm9tICcuL3NvbEluc3RydWN0aW9uRmFjdG9yeSc7XG5pbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5pbXBvcnQge1xuICBEdXJhYmxlTm9uY2VQYXJhbXMsXG4gIEluc3RydWN0aW9uUGFyYW1zLFxuICBNZW1vLFxuICBOb25jZSxcbiAgU2V0Q29tcHV0ZVVuaXRMaW1pdCxcbiAgU2V0UHJpb3JpdHlGZWUsXG4gIFRyYW5zZmVyLFxufSBmcm9tICcuL2lmYWNlJztcbmltcG9ydCB7IGluc3RydWN0aW9uUGFyYW1zRmFjdG9yeSB9IGZyb20gJy4vaW5zdHJ1Y3Rpb25QYXJhbXNGYWN0b3J5JztcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFRyYW5zYWN0aW9uQnVpbGRlciBleHRlbmRzIEJhc2VUcmFuc2FjdGlvbkJ1aWxkZXIge1xuICBwcm90ZWN0ZWQgX3RyYW5zYWN0aW9uOiBUcmFuc2FjdGlvbjtcbiAgcHJpdmF0ZSBfc2lnbmF0dXJlczogU2lnbmF0dXJlW10gPSBbXTtcbiAgcHJpdmF0ZSBfbGFtcG9ydHNQZXJTaWduYXR1cmU6IG51bWJlcjtcbiAgcHJpdmF0ZSBfdG9rZW5BY2NvdW50UmVudEV4ZW1wdEFtb3VudDogc3RyaW5nO1xuXG4gIHByb3RlY3RlZCBfc2VuZGVyOiBzdHJpbmc7XG4gIHByb3RlY3RlZCBfcmVjZW50QmxvY2toYXNoOiBCbG9ja2hhc2g7XG4gIHByb3RlY3RlZCBfbm9uY2VJbmZvOiBOb25jZTtcbiAgcHJvdGVjdGVkIF9pbnN0cnVjdGlvbnNEYXRhOiBJbnN0cnVjdGlvblBhcmFtc1tdID0gW107XG4gIHByb3RlY3RlZCBfc2lnbmVyczogS2V5UGFpcltdID0gW107XG4gIHByb3RlY3RlZCBfbWVtbz86IHN0cmluZztcbiAgcHJvdGVjdGVkIF9mZWVQYXllcj86IHN0cmluZztcbiAgcHJvdGVjdGVkIF9wcmlvcml0eUZlZTogbnVtYmVyO1xuICAvKiogRXhwbGljaXQgY29tcHV0ZS11bml0IGxpbWl0IHJlcXVlc3RlZCBmb3IgdGhlIHRyYW5zYWN0aW9uLCBpbiBjb21wdXRlIHVuaXRzICovXG4gIHByb3RlY3RlZCBfY29tcHV0ZVVuaXRMaW1pdD86IG51bWJlcjtcbiAgLyoqIE9wdGlvbmFsIG92ZXJyaWRlIGZvciB0aGUgemstZWxnYW1hbC1wcm9vZiBwcm9ncmFtIGlkICh1c2VkIGJ5IENUIGluc3RydWN0aW9uIGJ1aWxkZXJzKSAqL1xuICBwcm90ZWN0ZWQgX3prUHJvb2ZQcm9ncmFtSWQ/OiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IoX2NvaW5Db25maWc6IFJlYWRvbmx5PENvaW5Db25maWc+KSB7XG4gICAgc3VwZXIoX2NvaW5Db25maWcpO1xuICAgIHRoaXMudHJhbnNhY3Rpb24gPSBuZXcgVHJhbnNhY3Rpb24oX2NvaW5Db25maWcpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSB0cmFuc2FjdGlvbiB0eXBlLlxuICAgKi9cbiAgcHJvdGVjdGVkIGFic3RyYWN0IGdldCB0cmFuc2FjdGlvblR5cGUoKTogVHJhbnNhY3Rpb25UeXBlO1xuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplIHRoZSB0cmFuc2FjdGlvbiBidWlsZGVyIGZpZWxkcyB1c2luZyB0aGUgZGVjb2RlZCB0cmFuc2FjdGlvbiBkYXRhXG4gICAqXG4gICAqIEBwYXJhbSB7VHJhbnNhY3Rpb259IHR4IHRoZSB0cmFuc2FjdGlvbiBkYXRhXG4gICAqL1xuICBpbml0QnVpbGRlcih0eDogVHJhbnNhY3Rpb24pOiB2b2lkIHtcbiAgICB0aGlzLl90cmFuc2FjdGlvbiA9IHR4O1xuICAgIGNvbnN0IHR4RGF0YSA9IHR4LnRvSnNvbigpO1xuXG4gICAgY29uc3QgZmlsdGVyZWRUcmFuc2Zlckluc3RydWN0aW9uc0RhdGEgPSB0eERhdGEuaW5zdHJ1Y3Rpb25zRGF0YS5maWx0ZXIoXG4gICAgICAoZGF0YSkgPT4gZGF0YS50eXBlID09PSBJbnN0cnVjdGlvbkJ1aWxkZXJUeXBlcy5UcmFuc2ZlclxuICAgICk7XG4gICAgbGV0IHNlbmRlcjtcbiAgICBpZiAoZmlsdGVyZWRUcmFuc2Zlckluc3RydWN0aW9uc0RhdGEubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgdHJhbnNmZXJJbnN0cnVjdGlvbnNEYXRhID0gZmlsdGVyZWRUcmFuc2Zlckluc3RydWN0aW9uc0RhdGFbMF0gYXMgVHJhbnNmZXI7XG4gICAgICBzZW5kZXIgPSB0cmFuc2Zlckluc3RydWN0aW9uc0RhdGEucGFyYW1zLmZyb21BZGRyZXNzO1xuICAgIH0gZWxzZSB7XG4gICAgICBzZW5kZXIgPSB0eERhdGEuZmVlUGF5ZXI7XG4gICAgfVxuICAgIHRoaXMuc2VuZGVyKHNlbmRlcik7XG4gICAgdGhpcy5mZWVQYXllcih0eERhdGEuZmVlUGF5ZXIgYXMgc3RyaW5nKTtcbiAgICB0aGlzLm5vbmNlKHR4RGF0YS5ub25jZSwgdHhEYXRhLmR1cmFibGVOb25jZSk7XG4gICAgdGhpcy5faW5zdHJ1Y3Rpb25zRGF0YSA9IGluc3RydWN0aW9uUGFyYW1zRmFjdG9yeShcbiAgICAgIHR4LnR5cGUsXG4gICAgICB0eC5zb2xUcmFuc2FjdGlvbi5pbnN0cnVjdGlvbnMsXG4gICAgICB0aGlzLl9jb2luQ29uZmlnLm5hbWUsXG4gICAgICB0eERhdGEuaW5zdHJ1Y3Rpb25zRGF0YSxcbiAgICAgIHR4LnVzZVRva2VuQWRkcmVzc1Rva2VuTmFtZVxuICAgICk7XG4gICAgLy8gUGFyc2UgcHJpb3JpdHkgZmVlIGluc3RydWN0aW9uIGRhdGFcbiAgICBjb25zdCBmaWx0ZXJlZFByaW9yaXR5RmVlSW5zdHJ1Y3Rpb25zRGF0YSA9IHR4RGF0YS5pbnN0cnVjdGlvbnNEYXRhLmZpbHRlcihcbiAgICAgIChkYXRhKSA9PiBkYXRhLnR5cGUgPT09IEluc3RydWN0aW9uQnVpbGRlclR5cGVzLlNldFByaW9yaXR5RmVlXG4gICAgKTtcblxuICAgIGZvciAoY29uc3QgaW5zdHJ1Y3Rpb24gb2YgdGhpcy5faW5zdHJ1Y3Rpb25zRGF0YSkge1xuICAgICAgaWYgKGluc3RydWN0aW9uLnR5cGUgPT09IEluc3RydWN0aW9uQnVpbGRlclR5cGVzLk1lbW8pIHtcbiAgICAgICAgY29uc3QgbWVtb0luc3RydWN0aW9uOiBNZW1vID0gaW5zdHJ1Y3Rpb247XG4gICAgICAgIHRoaXMubWVtbyhtZW1vSW5zdHJ1Y3Rpb24ucGFyYW1zLm1lbW8pO1xuICAgICAgfVxuXG4gICAgICBpZiAoaW5zdHJ1Y3Rpb24udHlwZSA9PT0gSW5zdHJ1Y3Rpb25CdWlsZGVyVHlwZXMuTm9uY2VBZHZhbmNlKSB7XG4gICAgICAgIGNvbnN0IGFkdmFuY2VOb25jZUluc3RydWN0aW9uOiBOb25jZSA9IGluc3RydWN0aW9uO1xuICAgICAgICB0aGlzLm5vbmNlKHR4RGF0YS5ub25jZSwgYWR2YW5jZU5vbmNlSW5zdHJ1Y3Rpb24ucGFyYW1zKTtcbiAgICAgIH1cblxuICAgICAgLy8gSWYgcHJpbyBmZWUgaW5zdHJ1Y3Rpb24gZXhpc3RzLCBzZXQgdGhlIHByaW9yaXR5IGZlZSB2YXJpYWJsZVxuICAgICAgaWYgKGluc3RydWN0aW9uLnR5cGUgPT09IEluc3RydWN0aW9uQnVpbGRlclR5cGVzLlNldFByaW9yaXR5RmVlKSB7XG4gICAgICAgIGNvbnN0IHByaW9yaXR5RmVlSW5zdHJ1Y3Rpb25zRGF0YSA9IGZpbHRlcmVkUHJpb3JpdHlGZWVJbnN0cnVjdGlvbnNEYXRhWzBdIGFzIFNldFByaW9yaXR5RmVlO1xuICAgICAgICB0aGlzLnNldFByaW9yaXR5RmVlKHsgYW1vdW50OiBOdW1iZXIocHJpb3JpdHlGZWVJbnN0cnVjdGlvbnNEYXRhLnBhcmFtcy5mZWUpIH0pO1xuICAgICAgfVxuXG4gICAgICAvLyBJZiBjb21wdXRlIHVuaXQgbGltaXQgaW5zdHJ1Y3Rpb24gZXhpc3RzLCByZXN0b3JlIHRoZSBjb21wdXRlIHVuaXQgbGltaXRcbiAgICAgIGlmIChpbnN0cnVjdGlvbi50eXBlID09PSBJbnN0cnVjdGlvbkJ1aWxkZXJUeXBlcy5TZXRDb21wdXRlVW5pdExpbWl0KSB7XG4gICAgICAgIGNvbnN0IGNvbXB1dGVVbml0TGltaXRJbnN0cnVjdGlvbiA9IGluc3RydWN0aW9uIGFzIFNldENvbXB1dGVVbml0TGltaXQ7XG4gICAgICAgIHRoaXMuc2V0Q29tcHV0ZVVuaXRMaW1pdChjb21wdXRlVW5pdExpbWl0SW5zdHJ1Y3Rpb24ucGFyYW1zLnVuaXRzKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgcHJvdGVjdGVkIGZyb21JbXBsZW1lbnRhdGlvbihyYXdUcmFuc2FjdGlvbjogc3RyaW5nKTogVHJhbnNhY3Rpb24ge1xuICAgIGNvbnN0IHR4ID0gbmV3IFRyYW5zYWN0aW9uKHRoaXMuX2NvaW5Db25maWcpO1xuICAgIHRoaXMudmFsaWRhdGVSYXdUcmFuc2FjdGlvbihyYXdUcmFuc2FjdGlvbik7XG4gICAgdHguZnJvbVJhd1RyYW5zYWN0aW9uKHJhd1RyYW5zYWN0aW9uKTtcbiAgICB0aGlzLmluaXRCdWlsZGVyKHR4KTtcbiAgICByZXR1cm4gdGhpcy50cmFuc2FjdGlvbjtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBwcm90ZWN0ZWQgYXN5bmMgYnVpbGRJbXBsZW1lbnRhdGlvbigpOiBQcm9taXNlPFRyYW5zYWN0aW9uPiB7XG4gICAgY29uc3QgYnVpbHRUcmFuc2FjdGlvbiA9IHRoaXMuYnVpbGRTb2xUcmFuc2FjdGlvbigpO1xuXG4gICAgaWYgKGJ1aWx0VHJhbnNhY3Rpb24gaW5zdGFuY2VvZiBWZXJzaW9uZWRUcmFuc2FjdGlvbikge1xuICAgICAgdGhpcy50cmFuc2FjdGlvbi52ZXJzaW9uZWRUcmFuc2FjdGlvbiA9IGJ1aWx0VHJhbnNhY3Rpb247XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudHJhbnNhY3Rpb24uc29sVHJhbnNhY3Rpb24gPSBidWlsdFRyYW5zYWN0aW9uO1xuICAgIH1cblxuICAgIHRoaXMudHJhbnNhY3Rpb24uc2V0VHJhbnNhY3Rpb25UeXBlKHRoaXMudHJhbnNhY3Rpb25UeXBlKTtcbiAgICB0aGlzLnRyYW5zYWN0aW9uLnNldEluc3RydWN0aW9uc0RhdGEodGhpcy5faW5zdHJ1Y3Rpb25zRGF0YSk7XG4gICAgdGhpcy50cmFuc2FjdGlvbi5sb2FkSW5wdXRzQW5kT3V0cHV0cygpO1xuICAgIHRoaXMuX3RyYW5zYWN0aW9uLnRva2VuQWNjb3VudFJlbnRFeGVtcHRBbW91bnQgPSB0aGlzLl90b2tlbkFjY291bnRSZW50RXhlbXB0QW1vdW50O1xuICAgIHJldHVybiB0aGlzLnRyYW5zYWN0aW9uO1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkcyB0aGUgc29sYW5hIHRyYW5zYWN0aW9uLlxuICAgKi9cbiAgcHJvdGVjdGVkIGJ1aWxkU29sVHJhbnNhY3Rpb24oKTogU29sVHJhbnNhY3Rpb24gfCBWZXJzaW9uZWRUcmFuc2FjdGlvbiB7XG4gICAgYXNzZXJ0KHRoaXMuX3NlbmRlciwgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignc2VuZGVyIGlzIHJlcXVpcmVkIGJlZm9yZSBidWlsZGluZycpKTtcbiAgICBhc3NlcnQodGhpcy5fcmVjZW50QmxvY2toYXNoLCBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdyZWNlbnQgYmxvY2toYXNoIGlzIHJlcXVpcmVkIGJlZm9yZSBidWlsZGluZycpKTtcblxuICAgIC8vIENoZWNrIGlmIHdlIHNob3VsZCBidWlsZCBhcyBWZXJzaW9uZWRUcmFuc2FjdGlvblxuICAgIGlmICh0aGlzLl90cmFuc2FjdGlvbi5pc1ZlcnNpb25lZFRyYW5zYWN0aW9uKCkpIHtcbiAgICAgIHJldHVybiB0aGlzLmJ1aWxkVmVyc2lvbmVkVHJhbnNhY3Rpb24oKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuYnVpbGRMZWdhY3lUcmFuc2FjdGlvbigpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZHMgYSBsZWdhY3kgU29sYW5hIHRyYW5zYWN0aW9uLlxuICAgKi9cbiAgcHJpdmF0ZSBidWlsZExlZ2FjeVRyYW5zYWN0aW9uKCk6IFNvbFRyYW5zYWN0aW9uIHtcbiAgICBjb25zdCB0eCA9IG5ldyBTb2xUcmFuc2FjdGlvbigpO1xuICAgIGlmICh0aGlzLl90cmFuc2FjdGlvbj8uc29sVHJhbnNhY3Rpb24/LnNpZ25hdHVyZXMpIHtcbiAgICAgIHR4LnNpZ25hdHVyZXMgPSB0aGlzLl90cmFuc2FjdGlvbj8uc29sVHJhbnNhY3Rpb24/LnNpZ25hdHVyZXM7XG4gICAgfVxuXG4gICAgdHguZmVlUGF5ZXIgPSB0aGlzLl9mZWVQYXllciA/IG5ldyBQdWJsaWNLZXkodGhpcy5fZmVlUGF5ZXIpIDogbmV3IFB1YmxpY0tleSh0aGlzLl9zZW5kZXIpO1xuXG4gICAgaWYgKHRoaXMuX25vbmNlSW5mbykge1xuICAgICAgdHgubm9uY2VJbmZvID0ge1xuICAgICAgICBub25jZTogdGhpcy5fcmVjZW50QmxvY2toYXNoLFxuICAgICAgICBub25jZUluc3RydWN0aW9uOiBzb2xJbnN0cnVjdGlvbkZhY3RvcnkodGhpcy5fbm9uY2VJbmZvKVswXSxcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIHR4LnJlY2VudEJsb2NraGFzaCA9IHRoaXMuX3JlY2VudEJsb2NraGFzaDtcbiAgICB9XG5cbiAgICAvLyBUaGUgcHJpb3JpdHkgZmVlIGlzIGNoYXJnZWQgb24gdGhlIHJlcXVlc3RlZCBjb21wdXRlLXVuaXQgbGltaXQsIHNvIGFuIGV4cGxpY2l0XG4gICAgLy8gbGltaXQgbXVzdCBwcmVjZWRlIGV2ZXJ5IGVudHJ5IG9mIF9pbnN0cnVjdGlvbnNEYXRhIChpbmNsdWRpbmcgdGhlIG9wdGlvbmFsXG4gICAgLy8gU2V0Q29tcHV0ZVVuaXRQcmljZSkuIHdlYjMuanMgc2VyaWFsaXplcyB0aGUgZHVyYWJsZS1ub25jZSBBZHZhbmNlTm9uY2VBY2NvdW50XG4gICAgLy8gZmlyc3QgdmlhIG5vbmNlSW5mbywgZ2l2aW5nIFtBZHZhbmNlTm9uY2UsIFNldENvbXB1dGVVbml0TGltaXQsIFNldENvbXB1dGVVbml0UHJpY2U/LCAuLi5dLlxuICAgIGNvbnN0IGNvbXB1dGVVbml0TGltaXREYXRhOiBTZXRDb21wdXRlVW5pdExpbWl0IHwgdW5kZWZpbmVkID1cbiAgICAgIHRoaXMuX2NvbXB1dGVVbml0TGltaXQgIT09IHVuZGVmaW5lZFxuICAgICAgICA/IHtcbiAgICAgICAgICAgIHR5cGU6IEluc3RydWN0aW9uQnVpbGRlclR5cGVzLlNldENvbXB1dGVVbml0TGltaXQsXG4gICAgICAgICAgICBwYXJhbXM6IHtcbiAgICAgICAgICAgICAgdW5pdHM6IHRoaXMuX2NvbXB1dGVVbml0TGltaXQsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH1cbiAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgaWYgKGNvbXB1dGVVbml0TGltaXREYXRhKSB7XG4gICAgICB0eC5hZGQoLi4uc29sSW5zdHJ1Y3Rpb25GYWN0b3J5KGNvbXB1dGVVbml0TGltaXREYXRhKSk7XG4gICAgfVxuICAgIGZvciAoY29uc3QgaW5zdHJ1Y3Rpb24gb2YgdGhpcy5faW5zdHJ1Y3Rpb25zRGF0YSkge1xuICAgICAgdHguYWRkKC4uLnNvbEluc3RydWN0aW9uRmFjdG9yeShpbnN0cnVjdGlvbiwgdGhpcy5femtQcm9vZlByb2dyYW1JZCkpO1xuICAgIH1cbiAgICBpZiAoY29tcHV0ZVVuaXRMaW1pdERhdGEpIHtcbiAgICAgIC8vIFJlY29yZCB0aGUgaW5zdHJ1Y3Rpb24gc28gZXhwbGFpbiBhbmQgcGFyc2luZyBzZWUgaXQsIG1pcnJvcmluZyBob3cgbWVtbyBpcyByZWNvcmRlZFxuICAgICAgdGhpcy5faW5zdHJ1Y3Rpb25zRGF0YS51bnNoaWZ0KGNvbXB1dGVVbml0TGltaXREYXRhKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fbWVtbykge1xuICAgICAgY29uc3QgbWVtb0RhdGE6IE1lbW8gPSB7XG4gICAgICAgIHR5cGU6IEluc3RydWN0aW9uQnVpbGRlclR5cGVzLk1lbW8sXG4gICAgICAgIHBhcmFtczoge1xuICAgICAgICAgIG1lbW86IHRoaXMuX21lbW8sXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgICAgdGhpcy5faW5zdHJ1Y3Rpb25zRGF0YS5wdXNoKG1lbW9EYXRhKTtcbiAgICAgIHR4LmFkZCguLi5zb2xJbnN0cnVjdGlvbkZhY3RvcnkobWVtb0RhdGEpKTtcbiAgICB9XG5cbiAgICB0aGlzLl90cmFuc2FjdGlvbi5sYW1wb3J0c1BlclNpZ25hdHVyZSA9IHRoaXMuX2xhbXBvcnRzUGVyU2lnbmF0dXJlO1xuXG4gICAgZm9yIChjb25zdCBzaWduZXIgb2YgdGhpcy5fc2lnbmVycykge1xuICAgICAgY29uc3QgcHVibGljS2V5ID0gbmV3IFB1YmxpY0tleShzaWduZXIuZ2V0S2V5cygpLnB1Yik7XG4gICAgICBjb25zdCBzZWNyZXRLZXkgPSBzaWduZXIuZ2V0S2V5cyh0cnVlKS5wcnY7XG4gICAgICBhc3NlcnQoc2VjcmV0S2V5IGluc3RhbmNlb2YgVWludDhBcnJheSk7XG4gICAgICB0eC5wYXJ0aWFsU2lnbih7IHB1YmxpY0tleSwgc2VjcmV0S2V5IH0pO1xuICAgIH1cblxuICAgIGZvciAoY29uc3Qgc2lnbmF0dXJlIG9mIHRoaXMuX3NpZ25hdHVyZXMpIHtcbiAgICAgIGNvbnN0IHNvbFB1YmxpY0tleSA9IG5ldyBQdWJsaWNLZXkoc2lnbmF0dXJlLnB1YmxpY0tleS5wdWIpO1xuICAgICAgdHguYWRkU2lnbmF0dXJlKHNvbFB1YmxpY0tleSwgc2lnbmF0dXJlLnNpZ25hdHVyZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHR4O1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkcyBhIFZlcnNpb25lZFRyYW5zYWN0aW9uLlxuICAgKlxuICAgKiBAcmV0dXJucyB7VmVyc2lvbmVkVHJhbnNhY3Rpb259IFRoZSBidWlsdCB2ZXJzaW9uZWQgdHJhbnNhY3Rpb25cbiAgICovXG4gIHByaXZhdGUgYnVpbGRWZXJzaW9uZWRUcmFuc2FjdGlvbigpOiBWZXJzaW9uZWRUcmFuc2FjdGlvbiB7XG4gICAgY29uc3QgdmVyc2lvbmVkVHhEYXRhID0gdGhpcy5fdHJhbnNhY3Rpb24uZ2V0VmVyc2lvbmVkVHJhbnNhY3Rpb25EYXRhKCk7XG5cbiAgICBpZiAoIXZlcnNpb25lZFR4RGF0YSkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignTWlzc2luZyBWZXJzaW9uZWRUcmFuc2FjdGlvbkRhdGEnKTtcbiAgICB9XG5cbiAgICBjb25zdCB2ZXJzaW9uZWRUeCA9IHRoaXMuYnVpbGRGcm9tVmVyc2lvbmVkRGF0YSh2ZXJzaW9uZWRUeERhdGEpO1xuXG4gICAgdGhpcy5fdHJhbnNhY3Rpb24ubGFtcG9ydHNQZXJTaWduYXR1cmUgPSB0aGlzLl9sYW1wb3J0c1BlclNpZ25hdHVyZTtcblxuICAgIGZvciAoY29uc3Qgc2lnbmVyIG9mIHRoaXMuX3NpZ25lcnMpIHtcbiAgICAgIGNvbnN0IHB1YmxpY0tleSA9IG5ldyBQdWJsaWNLZXkoc2lnbmVyLmdldEtleXMoKS5wdWIpO1xuICAgICAgY29uc3Qgc2VjcmV0S2V5ID0gc2lnbmVyLmdldEtleXModHJ1ZSkucHJ2O1xuICAgICAgYXNzZXJ0KHNlY3JldEtleSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpO1xuICAgICAgdmVyc2lvbmVkVHguc2lnbihbeyBwdWJsaWNLZXksIHNlY3JldEtleSB9XSk7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBzaWduYXR1cmUgb2YgdGhpcy5fc2lnbmF0dXJlcykge1xuICAgICAgY29uc3Qgc29sUHVibGljS2V5ID0gbmV3IFB1YmxpY0tleShzaWduYXR1cmUucHVibGljS2V5LnB1Yik7XG4gICAgICB2ZXJzaW9uZWRUeC5hZGRTaWduYXR1cmUoc29sUHVibGljS2V5LCBzaWduYXR1cmUuc2lnbmF0dXJlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmVyc2lvbmVkVHg7XG4gIH1cblxuICAvKipcbiAgICogQnVpbGQgYSBWZXJzaW9uZWRUcmFuc2FjdGlvbiBmcm9tIGRlY29uc3RydWN0ZWQgVmVyc2lvbmVkVHJhbnNhY3Rpb25EYXRhXG4gICAqIEBwYXJhbSBkYXRhIFRoZSB2ZXJzaW9uZWQgdHJhbnNhY3Rpb24gZGF0YVxuICAgKiBAcmV0dXJucyBUaGUgYnVpbHQgdmVyc2lvbmVkIHRyYW5zYWN0aW9uXG4gICAqL1xuICBwcml2YXRlIGJ1aWxkRnJvbVZlcnNpb25lZERhdGEoZGF0YTogU29sVmVyc2lvbmVkVHJhbnNhY3Rpb25EYXRhKTogVmVyc2lvbmVkVHJhbnNhY3Rpb24ge1xuICAgIGNvbnN0IHN0YXRpY0FjY291bnRLZXlzID0gZGF0YS5zdGF0aWNBY2NvdW50S2V5cy5tYXAoKGtleTogc3RyaW5nKSA9PiBuZXcgUHVibGljS2V5KGtleSkpO1xuXG4gICAgY29uc3QgYWRkcmVzc1RhYmxlTG9va3VwczogTWVzc2FnZUFkZHJlc3NUYWJsZUxvb2t1cFtdID0gZGF0YS5hZGRyZXNzTG9va3VwVGFibGVzLm1hcCgoYWx0KSA9PiAoe1xuICAgICAgYWNjb3VudEtleTogbmV3IFB1YmxpY0tleShhbHQuYWNjb3VudEtleSksXG4gICAgICB3cml0YWJsZUluZGV4ZXM6IGFsdC53cml0YWJsZUluZGV4ZXMsXG4gICAgICByZWFkb25seUluZGV4ZXM6IGFsdC5yZWFkb25seUluZGV4ZXMsXG4gICAgfSkpO1xuXG4gICAgY29uc3QgY29tcGlsZWRJbnN0cnVjdGlvbnMgPSBkYXRhLnZlcnNpb25lZEluc3RydWN0aW9ucy5tYXAoKGluc3RydWN0aW9uKSA9PiAoe1xuICAgICAgcHJvZ3JhbUlkSW5kZXg6IGluc3RydWN0aW9uLnByb2dyYW1JZEluZGV4LFxuICAgICAgYWNjb3VudEtleUluZGV4ZXM6IGluc3RydWN0aW9uLmFjY291bnRLZXlJbmRleGVzLFxuICAgICAgZGF0YTogQnVmZmVyLmZyb20oYmFzZTU4LmRlY29kZShpbnN0cnVjdGlvbi5kYXRhKSksXG4gICAgfSkpO1xuXG4gICAgY29uc3QgcmVjZW50QmxvY2toYXNoID0gZGF0YS5yZWNlbnRCbG9ja2hhc2ggfHwgdGhpcy5fcmVjZW50QmxvY2toYXNoO1xuXG4gICAgaWYgKCFyZWNlbnRCbG9ja2hhc2gpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ01pc3NpbmcgcmVjZW50IGJsb2NraGFzaCBmb3IgVmVyc2lvbmVkVHJhbnNhY3Rpb24nKTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuX3NlbmRlcikge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignTWlzc2luZyBzZW5kZXIgKGZlZSBwYXllcikgZm9yIFZlcnNpb25lZFRyYW5zYWN0aW9uJyk7XG4gICAgfVxuXG4gICAgY29uc3QgbWVzc2FnZVYwID0gbmV3IE1lc3NhZ2VWMCh7XG4gICAgICBoZWFkZXI6IGRhdGEubWVzc2FnZUhlYWRlcixcbiAgICAgIHN0YXRpY0FjY291bnRLZXlzLFxuICAgICAgcmVjZW50QmxvY2toYXNoOiByZWNlbnRCbG9ja2hhc2gsXG4gICAgICBjb21waWxlZEluc3RydWN0aW9ucyxcbiAgICAgIGFkZHJlc3NUYWJsZUxvb2t1cHMsXG4gICAgfSk7XG5cbiAgICByZXR1cm4gbmV3IFZlcnNpb25lZFRyYW5zYWN0aW9uKG1lc3NhZ2VWMCk7XG4gIH1cblxuICAvLyByZWdpb24gR2V0dGVycyBhbmQgU2V0dGVyc1xuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgcHJvdGVjdGVkIGdldCB0cmFuc2FjdGlvbigpOiBUcmFuc2FjdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMuX3RyYW5zYWN0aW9uO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHByb3RlY3RlZCBzZXQgdHJhbnNhY3Rpb24odHJhbnNhY3Rpb246IFRyYW5zYWN0aW9uKSB7XG4gICAgdGhpcy5fdHJhbnNhY3Rpb24gPSB0cmFuc2FjdGlvbjtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBwcm90ZWN0ZWQgc2lnbkltcGxlbWVudGF0aW9uKGtleTogQmFzZUtleSk6IFRyYW5zYWN0aW9uIHtcbiAgICB0aGlzLnZhbGlkYXRlS2V5KGtleSk7XG4gICAgdGhpcy5jaGVja0R1cGxpY2F0ZWRTaWduZXIoa2V5KTtcbiAgICBjb25zdCBwcnYgPSBrZXkua2V5O1xuICAgIGNvbnN0IHNpZ25lciA9IG5ldyBLZXlQYWlyKHsgcHJ2OiBwcnYgfSk7XG4gICAgdGhpcy5fc2lnbmVycy5wdXNoKHNpZ25lcik7XG5cbiAgICByZXR1cm4gdGhpcy5fdHJhbnNhY3Rpb247XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgYWRkU2lnbmF0dXJlKHB1YmxpY0tleTogQmFzZVB1YmxpY0tleSwgc2lnbmF0dXJlOiBCdWZmZXIpOiB2b2lkIHtcbiAgICB0aGlzLl9zaWduYXR1cmVzLnB1c2goeyBwdWJsaWNLZXksIHNpZ25hdHVyZSB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGV4dGVybmFsbHktYWRkZWQgc2lnbmF0dXJlcyAodmlhIGFkZFNpZ25hdHVyZSkgaW4gb3JkZXIuXG4gICAqXG4gICAqIEByZXR1cm5zIHtTaWduYXR1cmVbXX0gVGhlIGxpc3Qgb2YgZXh0ZXJuYWwgc2lnbmF0dXJlc1xuICAgKi9cbiAgcHJvdGVjdGVkIGdldEFkZGl0aW9uYWxTaWduYXR1cmVzKCk6IFNpZ25hdHVyZVtdIHtcbiAgICByZXR1cm4gdGhpcy5fc2lnbmF0dXJlcztcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYSBzaWduYXR1cmUgcHJvZHVjZWQgYnkgdGhlIGZlZSBwYXllciBvZiB0aGUgdHJhbnNhY3Rpb24gYmVpbmcgYnVpbHQuXG4gICAqIFRoZSBmZWUgcGF5ZXIgaXMgYWNjb3VudCAwIG9mIHRoZSB0cmFuc2FjdGlvbiBtZXNzYWdlLCBzbyBpdHMgc2lnbmF0dXJlIGJlbG9uZ3MgaW4gc2xvdCAwLlxuICAgKiBVc2UgdGhpcyBmb3Igc2lnbmF0dXJlcyBwcm9kdWNlZCBieSB0aGUgZW50ZXJwcmlzZSBmZWUgYWRkcmVzcyBrZXkgKEhTTSBzaW5nbGUtc2lnKSBvZiBhXG4gICAqIHNwb25zb3JlZCB0cmFuc2FjdGlvbjsgdGhlIGtleSBtdXN0IG1hdGNoIGFjY291bnQgMC5cbiAgICpcbiAgICogQHBhcmFtIHtCYXNlUHVibGljS2V5fSBwdWJsaWNLZXkgVGhlIHB1YmxpYyBrZXkgb2YgdGhlIGZlZSBwYXllcjsgbXVzdCBiZSBhY2NvdW50IDAgb2YgdGhlIG1lc3NhZ2VcbiAgICogQHBhcmFtIHtCdWZmZXJ9IHNpZ25hdHVyZSBUaGUgc2lnbmF0dXJlIG9mIHRoZSB0cmFuc2FjdGlvbiBwYXlsb2FkXG4gICAqL1xuICBhZGRGZWVQYXllclNpZ25hdHVyZShwdWJsaWNLZXk6IEJhc2VQdWJsaWNLZXksIHNpZ25hdHVyZTogQnVmZmVyKTogdm9pZCB7XG4gICAgaWYgKHB1YmxpY0tleS5wdWIgIT09IHRoaXMuZ2V0RmVlUGF5ZXJBY2NvdW50S2V5KCkpIHtcbiAgICAgIHRocm93IG5ldyBTaWduaW5nRXJyb3IoYEZlZSBwYXllciBzaWduYXR1cmUgbXVzdCBjb21lIGZyb20gYWNjb3VudCAwIG9mIHRoZSBtZXNzYWdlLCBnb3Q6ICR7cHVibGljS2V5LnB1Yn1gKTtcbiAgICB9XG4gICAgdGhpcy5hZGRTaWduYXR1cmUocHVibGljS2V5LCBzaWduYXR1cmUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBhY2NvdW50IDAga2V5IG9mIHRoZSBtZXNzYWdlIGJlaW5nIGJ1aWx0LCBpLmUuIHRoZSBmZWUgcGF5ZXI6IHRoZSBmaXJzdCBzdGF0aWMgYWNjb3VudFxuICAgKiBrZXkgb2YgYSB2ZXJzaW9uZWQgdHJhbnNhY3Rpb24sIG9yIHRoZSBmZWUgcGF5ZXIgb2YgYSBsZWdhY3kgdHJhbnNhY3Rpb24uXG4gICAqL1xuICBwcml2YXRlIGdldEZlZVBheWVyQWNjb3VudEtleSgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IHZlcnNpb25lZERhdGEgPSB0aGlzLl90cmFuc2FjdGlvbi5nZXRWZXJzaW9uZWRUcmFuc2FjdGlvbkRhdGEoKTtcbiAgICBpZiAodmVyc2lvbmVkRGF0YSkge1xuICAgICAgcmV0dXJuIHZlcnNpb25lZERhdGEuc3RhdGljQWNjb3VudEtleXNbMF07XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9mZWVQYXllciA/PyB0aGlzLl9zZW5kZXI7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgc2VuZGVyIG9mIHRoaXMgdHJhbnNhY3Rpb24uXG4gICAqIFRoaXMgYWNjb3VudCB3aWxsIGJlIHJlc3BvbnNpYmxlIGZvciBwYXlpbmcgdHJhbnNhY3Rpb24gZmVlcy5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHNlbmRlckFkZHJlc3MgdGhlIGFjY291bnQgdGhhdCBpcyBzZW5kaW5nIHRoaXMgdHJhbnNhY3Rpb25cbiAgICogQHJldHVybnMge1RyYW5zYWN0aW9uQnVpbGRlcn0gVGhpcyB0cmFuc2FjdGlvbiBidWlsZGVyXG4gICAqL1xuICBzZW5kZXIoc2VuZGVyQWRkcmVzczogc3RyaW5nKTogdGhpcyB7XG4gICAgdmFsaWRhdGVBZGRyZXNzKHNlbmRlckFkZHJlc3MsICdzZW5kZXInKTtcbiAgICB0aGlzLl9zZW5kZXIgPSBzZW5kZXJBZGRyZXNzO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgdHJhbnNhY3Rpb24gbm9uY2VcbiAgICogUmVxdWlyZXMgYm90aCBvcHRpb25hbCBwYXJhbXMgaW4gb3JkZXIgdG8gdXNlIHRoZSBkdXJhYmxlIG5vbmNlXG4gICAqXG4gICAqIEBwYXJhbSB7QmxvY2toYXNofSBibG9ja0hhc2ggVGhlIGxhdGVzdCBibG9ja0hhc2hcbiAgICogQHBhcmFtIHtEdXJhYmxlTm9uY2VQYXJhbXN9IFtkdXJhYmxlTm9uY2VQYXJhbXNdIEFuIG9iamVjdCBjb250YWluaW5nIHRoZSB3YWxsZXROb25jZUFkZHJlc3MgYW5kIHRoZSBhdXRoV2FsbGV0QWRkcmVzcyAocmVxdWlyZWQgZm9yIGR1cmFibGUgbm9uY2UpXG4gICAqIEByZXR1cm5zIHtUcmFuc2FjdGlvbkJ1aWxkZXJ9IFRoaXMgdHJhbnNhY3Rpb24gYnVpbGRlclxuICAgKi9cbiAgbm9uY2UoYmxvY2tIYXNoOiBCbG9ja2hhc2gsIGR1cmFibGVOb25jZVBhcmFtcz86IER1cmFibGVOb25jZVBhcmFtcyk6IHRoaXMge1xuICAgIGlmICghYmxvY2tIYXNoIHx8ICFpc1ZhbGlkQmxvY2tJZChibG9ja0hhc2gpKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdJbnZhbGlkIG9yIG1pc3NpbmcgYmxvY2tIYXNoLCBnb3Q6ICcgKyBibG9ja0hhc2gpO1xuICAgIH1cbiAgICBpZiAoZHVyYWJsZU5vbmNlUGFyYW1zKSB7XG4gICAgICB2YWxpZGF0ZUFkZHJlc3MoZHVyYWJsZU5vbmNlUGFyYW1zLndhbGxldE5vbmNlQWRkcmVzcywgJ3dhbGxldE5vbmNlQWRkcmVzcycpO1xuICAgICAgdmFsaWRhdGVBZGRyZXNzKGR1cmFibGVOb25jZVBhcmFtcy5hdXRoV2FsbGV0QWRkcmVzcywgJ2F1dGhXYWxsZXRBZGRyZXNzJyk7XG4gICAgICBpZiAoZHVyYWJsZU5vbmNlUGFyYW1zLndhbGxldE5vbmNlQWRkcmVzcyA9PT0gZHVyYWJsZU5vbmNlUGFyYW1zLmF1dGhXYWxsZXRBZGRyZXNzKSB7XG4gICAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ0ludmFsaWQgcGFyYW1zOiB3YWxsZXROb25jZUFkZHJlc3MgY2Fubm90IGJlIGVxdWFsIHRvIGF1dGhXYWxsZXRBZGRyZXNzJyk7XG4gICAgICB9XG4gICAgICB0aGlzLl9ub25jZUluZm8gPSB7XG4gICAgICAgIHR5cGU6IEluc3RydWN0aW9uQnVpbGRlclR5cGVzLk5vbmNlQWR2YW5jZSxcbiAgICAgICAgcGFyYW1zOiBkdXJhYmxlTm9uY2VQYXJhbXMsXG4gICAgICB9O1xuICAgIH1cbiAgICB0aGlzLl9yZWNlbnRCbG9ja2hhc2ggPSBibG9ja0hhc2g7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogIFNldCB0aGUgbWVtb1xuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbWVtb1xuICAgKiBAcmV0dXJucyB7VHJhbnNhY3Rpb25CdWlsZGVyfSBUaGlzIHRyYW5zYWN0aW9uIGJ1aWxkZXJcbiAgICovXG4gIG1lbW8obWVtbzogc3RyaW5nKTogdGhpcyB7XG4gICAgdGhpcy52YWxpZGF0ZU1lbW8obWVtbyk7XG4gICAgdGhpcy5fbWVtbyA9IG1lbW87XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBmZWUoZmVlT3B0aW9uczogRmVlT3B0aW9ucyk6IHRoaXMge1xuICAgIHRoaXMuX2xhbXBvcnRzUGVyU2lnbmF0dXJlID0gTnVtYmVyKGZlZU9wdGlvbnMuYW1vdW50KTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHB1YmxpYyBzZXRQcmlvcml0eUZlZShmZWVPcHRpb25zOiBGZWVPcHRpb25zKTogdGhpcyB7XG4gICAgdGhpcy5fcHJpb3JpdHlGZWUgPSBOdW1iZXIoZmVlT3B0aW9ucy5hbW91bnQpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCBhbiBleHBsaWNpdCBjb21wdXRlLXVuaXQgbGltaXQgZm9yIHRoaXMgdHJhbnNhY3Rpb24uXG4gICAqXG4gICAqIFRoZSBwcmlvcml0eSBmZWUgaXMgY2hhcmdlZCBvbiB0aGUgcmVxdWVzdGVkIGNvbXB1dGUtdW5pdCBsaW1pdCByYXRoZXIgdGhhbiB0aGVcbiAgICogdW5pdHMgYWN0dWFsbHkgY29uc3VtZWQsIHNvIGV2ZXJ5IHNwb25zb3JlZCB0cmFuc2FjdGlvbiBtdXN0IHNldCBhbiBpbnRlbnQtc2l6ZWRcbiAgICogbGltaXQuIFdoZW4gc2V0LCB0aGUgYnVpbHQgdHJhbnNhY3Rpb24gcHJlcGVuZHMgYSBTZXRDb21wdXRlVW5pdExpbWl0IGluc3RydWN0aW9uXG4gICAqIGFoZWFkIG9mIGFsbCBvdGhlciBpbnN0cnVjdGlvbnMgKGFmdGVyIHRoZSBkdXJhYmxlLW5vbmNlIEFkdmFuY2VOb25jZUFjY291bnQpOlxuICAgKiBbQWR2YW5jZU5vbmNlPywgU2V0Q29tcHV0ZVVuaXRMaW1pdCwgU2V0Q29tcHV0ZVVuaXRQcmljZT8sIC4uLl0uIFdoZW4gdW5zZXQsIHRoZVxuICAgKiBidWlsdCB0cmFuc2FjdGlvbiBieXRlcyBhcmUgdW5jaGFuZ2VkLlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gdW5pdHMgdGhlIHJlcXVlc3RlZCBjb21wdXRlLXVuaXQgbGltaXQsIGFuIGludGVnZXIgYmV0d2VlblxuICAgKiAxIGFuZCAxLDQwMCwwMDAgKHRoZSBvbi1jaGFpbiBwZXItdHJhbnNhY3Rpb24gbWF4aW11bSlcbiAgICogQHJldHVybnMge1RyYW5zYWN0aW9uQnVpbGRlcn0gVGhpcyB0cmFuc2FjdGlvbiBidWlsZGVyXG4gICAqL1xuICBwdWJsaWMgc2V0Q29tcHV0ZVVuaXRMaW1pdCh1bml0czogbnVtYmVyKTogdGhpcyB7XG4gICAgdGhpcy52YWxpZGF0ZUNvbXB1dGVVbml0TGltaXQodW5pdHMpO1xuICAgIHRoaXMuX2NvbXB1dGVVbml0TGltaXQgPSB1bml0cztcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHByaXZhdGUgdmFsaWRhdGVDb21wdXRlVW5pdExpbWl0KHVuaXRzOiBudW1iZXIpOiB2b2lkIHtcbiAgICBpZiAoIU51bWJlci5pc0ludGVnZXIodW5pdHMpIHx8IHVuaXRzIDwgMSB8fCB1bml0cyA+IE1BWF9DT01QVVRFX1VOSVRfTElNSVQpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoXG4gICAgICAgIGBJbnZhbGlkIGNvbXB1dGUgdW5pdCBsaW1pdCwgZXhwZWN0ZWQgYW4gaW50ZWdlciBiZXR3ZWVuIDEgYW5kICR7TUFYX0NPTVBVVEVfVU5JVF9MSU1JVH0sIGdvdDogJHt1bml0c31gXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIGZlZVBheWVyKGZlZVBheWVyOiBzdHJpbmcpOiB0aGlzIHtcbiAgICB0aGlzLl9mZWVQYXllciA9IGZlZVBheWVyO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFVzZWQgdG8gc2V0IHRoZSBtaW5pbXVtIHJlbnQgZXhlbXB0IGFtb3VudCBmb3IgYW4gQVRBXG4gICAqXG4gICAqIEBwYXJhbSB0b2tlbkFjY291bnRSZW50RXhlbXB0QW1vdW50IG1pbmltdW0gcmVudCBleGVtcHQgYW1vdW50IGluIGxhbXBvcnRzXG4gICAqL1xuICBhc3NvY2lhdGVkVG9rZW5BY2NvdW50UmVudCh0b2tlbkFjY291bnRSZW50RXhlbXB0QW1vdW50OiBzdHJpbmcpOiB0aGlzIHtcbiAgICB0aGlzLnZhbGlkYXRlUmVudEV4ZW1wdEFtb3VudCh0b2tlbkFjY291bnRSZW50RXhlbXB0QW1vdW50KTtcbiAgICB0aGlzLl90b2tlbkFjY291bnRSZW50RXhlbXB0QW1vdW50ID0gdG9rZW5BY2NvdW50UmVudEV4ZW1wdEFtb3VudDtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHByaXZhdGUgdmFsaWRhdGVSZW50RXhlbXB0QW1vdW50KHRva2VuQWNjb3VudFJlbnRFeGVtcHRBbW91bnQ6IHN0cmluZykge1xuICAgIC8vIF90b2tlbkFjY291bnRSZW50RXhlbXB0QW1vdW50IGlzIGFsbG93ZWQgdG8gYmUgdW5kZWZpbmVkIG9yIGEgdmFsaWQgYW1vdW50IGlmIGl0J3MgZGVmaW5lZFxuICAgIGlmICh0b2tlbkFjY291bnRSZW50RXhlbXB0QW1vdW50ICYmICFpc1ZhbGlkQW1vdW50KHRva2VuQWNjb3VudFJlbnRFeGVtcHRBbW91bnQpKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdJbnZhbGlkIHRva2VuQWNjb3VudFJlbnRFeGVtcHRBbW91bnQsIGdvdDogJyArIHRva2VuQWNjb3VudFJlbnRFeGVtcHRBbW91bnQpO1xuICAgIH1cbiAgfVxuXG4gIC8vIGVuZHJlZ2lvblxuXG4gIC8vIHJlZ2lvbiBWYWxpZGF0b3JzXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICB2YWxpZGF0ZUFkZHJlc3MoYWRkcmVzczogQmFzZUFkZHJlc3MsIGFkZHJlc3NGb3JtYXQ/OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoIWlzVmFsaWRBZGRyZXNzKGFkZHJlc3MuYWRkcmVzcykpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ0ludmFsaWQgYWRkcmVzcyAnICsgYWRkcmVzcy5hZGRyZXNzKTtcbiAgICB9XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgdmFsaWRhdGVLZXkoa2V5OiBCYXNlS2V5KTogdm9pZCB7XG4gICAgbGV0IGtleVBhaXI6IEtleVBhaXI7XG4gICAgdHJ5IHtcbiAgICAgIGtleVBhaXIgPSBuZXcgS2V5UGFpcih7IHBydjoga2V5LmtleSB9KTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ0ludmFsaWQga2V5Jyk7XG4gICAgfVxuXG4gICAgaWYgKCFrZXlQYWlyLmdldEtleXMoKS5wcnYpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ0ludmFsaWQga2V5Jyk7XG4gICAgfVxuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHZhbGlkYXRlUmF3VHJhbnNhY3Rpb24ocmF3VHJhbnNhY3Rpb246IHN0cmluZyk6IHZvaWQge1xuICAgIHZhbGlkYXRlUmF3VHJhbnNhY3Rpb24ocmF3VHJhbnNhY3Rpb24pO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHZhbGlkYXRlVHJhbnNhY3Rpb24odHJhbnNhY3Rpb24/OiBUcmFuc2FjdGlvbik6IHZvaWQge1xuICAgIHRoaXMudmFsaWRhdGVTZW5kZXIoKTtcbiAgICB0aGlzLnZhbGlkYXRlTm9uY2UoKTtcbiAgICB0aGlzLnZhbGlkYXRlUmVudEV4ZW1wdEFtb3VudCh0aGlzLl90b2tlbkFjY291bnRSZW50RXhlbXB0QW1vdW50KTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICB2YWxpZGF0ZVZhbHVlKHZhbHVlOiBCaWdOdW1iZXIpOiB2b2lkIHtcbiAgICBpZiAodmFsdWUuaXNMZXNzVGhhbigwKSkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignVmFsdWUgY2Fubm90IGJlIGxlc3MgdGhhbiB6ZXJvJyk7XG4gICAgfVxuICB9XG4gIC8qKiBWYWxpZGF0ZXMgdGhlIG1lbW9cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IG1lbW8gLSB0aGUgbWVtbyBhcyBzdHJpbmdcbiAgICovXG4gIHZhbGlkYXRlTWVtbyhtZW1vOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoIW1lbW8pIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ0ludmFsaWQgbWVtbywgZ290OiAnICsgbWVtbyk7XG4gICAgfVxuICAgIGlmICghaXNWYWxpZE1lbW8obWVtbykpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ01lbW8gaXMgdG9vIGxvbmcnKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGVzIHRoYXQgdGhlIGdpdmVuIGtleSBpcyBub3QgYWxyZWFkeSBpbiB0aGlzLl9zaWduZXJzXG4gICAqXG4gICAqIEBwYXJhbSB7QmFzZUtleX0ga2V5IC0gVGhlIGtleSB0byBjaGVja1xuICAgKi9cbiAgcHJpdmF0ZSBjaGVja0R1cGxpY2F0ZWRTaWduZXIoa2V5OiBCYXNlS2V5KSB7XG4gICAgdGhpcy5fc2lnbmVycy5mb3JFYWNoKChrcCkgPT4ge1xuICAgICAgaWYgKGtwLmdldEtleXMoKS5wcnYgPT09IGtleS5rZXkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFNpZ25pbmdFcnJvcignRHVwbGljYXRlZCBzaWduZXI6ICcgKyBrZXkua2V5KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgdGhhdCB0aGUgc2VuZGVyIGZpZWxkIGlzIGRlZmluZWRcbiAgICovXG4gIHByaXZhdGUgdmFsaWRhdGVTZW5kZXIoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX3NlbmRlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdJbnZhbGlkIHRyYW5zYWN0aW9uOiBtaXNzaW5nIHNlbmRlcicpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgdGhhdCB0aGUgbm9uY2UgZmllbGQgaXMgZGVmaW5lZFxuICAgKi9cbiAgcHJpdmF0ZSB2YWxpZGF0ZU5vbmNlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9yZWNlbnRCbG9ja2hhc2ggPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignSW52YWxpZCB0cmFuc2FjdGlvbjogbWlzc2luZyBub25jZSBibG9ja2hhc2gnKTtcbiAgICB9XG4gIH1cbiAgLy8gZW5kcmVnaW9uXG59XG4iXX0=
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../../src/lib/utils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../../src/lib/utils.ts"],"names":[],"mappings":"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"}