@bitgo/sdk-coin-avaxp 4.0.0 → 5.0.1

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 (68) hide show
  1. package/CHANGELOG.md +33 -0
  2. package/LICENSE +191 -0
  3. package/dist/src/avaxp.d.ts.map +1 -1
  4. package/dist/src/avaxp.js +1 -3
  5. package/dist/src/lib/atomicInCTransactionBuilder.d.ts +2 -2
  6. package/dist/src/lib/atomicInCTransactionBuilder.d.ts.map +1 -1
  7. package/dist/src/lib/atomicInCTransactionBuilder.js +1 -1
  8. package/dist/src/lib/atomicTransactionBuilder.d.ts +2 -2
  9. package/dist/src/lib/atomicTransactionBuilder.d.ts.map +1 -1
  10. package/dist/src/lib/atomicTransactionBuilder.js +3 -3
  11. package/dist/src/lib/delegatorTxBuilder.d.ts +5 -5
  12. package/dist/src/lib/delegatorTxBuilder.d.ts.map +1 -1
  13. package/dist/src/lib/delegatorTxBuilder.js +4 -4
  14. package/dist/src/lib/deprecatedTransaction.d.ts +100 -0
  15. package/dist/src/lib/deprecatedTransaction.d.ts.map +1 -0
  16. package/dist/src/lib/deprecatedTransaction.js +345 -0
  17. package/dist/src/lib/deprecatedTransactionBuilder.d.ts +115 -0
  18. package/dist/src/lib/deprecatedTransactionBuilder.d.ts.map +1 -0
  19. package/dist/src/lib/deprecatedTransactionBuilder.js +210 -0
  20. package/dist/src/lib/exportInCTxBuilder.d.ts +7 -7
  21. package/dist/src/lib/exportInCTxBuilder.d.ts.map +1 -1
  22. package/dist/src/lib/exportInCTxBuilder.js +3 -3
  23. package/dist/src/lib/exportTxBuilder.d.ts +3 -3
  24. package/dist/src/lib/exportTxBuilder.d.ts.map +1 -1
  25. package/dist/src/lib/exportTxBuilder.js +2 -2
  26. package/dist/src/lib/iface.d.ts +11 -8
  27. package/dist/src/lib/iface.d.ts.map +1 -1
  28. package/dist/src/lib/iface.js +1 -1
  29. package/dist/src/lib/importInCTxBuilder.d.ts +3 -3
  30. package/dist/src/lib/importInCTxBuilder.d.ts.map +1 -1
  31. package/dist/src/lib/importInCTxBuilder.js +2 -2
  32. package/dist/src/lib/importTxBuilder.d.ts +3 -3
  33. package/dist/src/lib/importTxBuilder.d.ts.map +1 -1
  34. package/dist/src/lib/importTxBuilder.js +2 -2
  35. package/dist/src/lib/index.d.ts +2 -0
  36. package/dist/src/lib/index.d.ts.map +1 -1
  37. package/dist/src/lib/index.js +6 -2
  38. package/dist/src/lib/permissionlessValidatorTxBuilder.d.ts +71 -31
  39. package/dist/src/lib/permissionlessValidatorTxBuilder.d.ts.map +1 -1
  40. package/dist/src/lib/permissionlessValidatorTxBuilder.js +286 -48
  41. package/dist/src/lib/transaction.d.ts +21 -42
  42. package/dist/src/lib/transaction.d.ts.map +1 -1
  43. package/dist/src/lib/transaction.js +66 -151
  44. package/dist/src/lib/transactionBuilder.d.ts +32 -76
  45. package/dist/src/lib/transactionBuilder.d.ts.map +1 -1
  46. package/dist/src/lib/transactionBuilder.js +65 -137
  47. package/dist/src/lib/transactionBuilderFactory.d.ts +9 -8
  48. package/dist/src/lib/transactionBuilderFactory.d.ts.map +1 -1
  49. package/dist/src/lib/transactionBuilderFactory.js +69 -19
  50. package/dist/src/lib/utils.d.ts +20 -5
  51. package/dist/src/lib/utils.d.ts.map +1 -1
  52. package/dist/src/lib/utils.js +44 -6
  53. package/dist/src/lib/utxoEngine.d.ts +10 -1
  54. package/dist/src/lib/utxoEngine.d.ts.map +1 -1
  55. package/dist/src/lib/utxoEngine.js +27 -3
  56. package/dist/src/lib/validatorTxBuilder.d.ts +3 -3
  57. package/dist/src/lib/validatorTxBuilder.d.ts.map +1 -1
  58. package/dist/src/lib/validatorTxBuilder.js +1 -1
  59. package/dist/test/resources/avaxp.d.ts +77 -0
  60. package/dist/test/resources/avaxp.d.ts.map +1 -1
  61. package/dist/test/resources/avaxp.js +124 -2
  62. package/dist/test/unit/avaxp.js +45 -1
  63. package/dist/test/unit/lib/permissionlessValidatorTxBuilder.d.ts +2 -0
  64. package/dist/test/unit/lib/permissionlessValidatorTxBuilder.d.ts.map +1 -0
  65. package/dist/test/unit/lib/permissionlessValidatorTxBuilder.js +292 -0
  66. package/dist/test/unit/lib/validateTxBuilder.js +5 -5
  67. package/dist/tsconfig.tsbuildinfo +1 -1
  68. package/package.json +7 -6
@@ -4,17 +4,18 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.TransactionBuilderFactory = void 0;
7
+ const avalanchejs_1 = require("@bitgo/avalanchejs");
7
8
  const sdk_core_1 = require("@bitgo/sdk-core");
8
- const validatorTxBuilder_1 = require("./validatorTxBuilder");
9
- const platformvm_1 = require("avalanche/dist/apis/platformvm");
10
- const evm_1 = require("avalanche/dist/apis/evm");
11
9
  const avalanche_1 = require("avalanche");
12
- const utils_1 = __importDefault(require("./utils"));
10
+ const evm_1 = require("avalanche/dist/apis/evm");
11
+ const platformvm_1 = require("avalanche/dist/apis/platformvm");
12
+ const exportInCTxBuilder_1 = require("./exportInCTxBuilder");
13
13
  const exportTxBuilder_1 = require("./exportTxBuilder");
14
- const importTxBuilder_1 = require("./importTxBuilder");
15
14
  const importInCTxBuilder_1 = require("./importInCTxBuilder");
16
- const exportInCTxBuilder_1 = require("./exportInCTxBuilder");
15
+ const importTxBuilder_1 = require("./importTxBuilder");
17
16
  const permissionlessValidatorTxBuilder_1 = require("./permissionlessValidatorTxBuilder");
17
+ const utils_1 = __importDefault(require("./utils"));
18
+ const validatorTxBuilder_1 = require("./validatorTxBuilder");
18
19
  class TransactionBuilderFactory extends sdk_core_1.BaseTransactionBuilderFactory {
19
20
  constructor(_coinConfig) {
20
21
  super(_coinConfig);
@@ -22,50 +23,99 @@ class TransactionBuilderFactory extends sdk_core_1.BaseTransactionBuilderFactory
22
23
  }
23
24
  /** @inheritdoc */
24
25
  from(raw) {
26
+ var _a;
25
27
  utils_1.default.validateRawTransaction(raw);
26
- raw = utils_1.default.removeHexPrefix(raw);
27
28
  let txSource = 'PVM';
28
- let tx;
29
29
  let transactionBuilder = undefined;
30
+ let tx;
31
+ const rawNoHex = utils_1.default.removeHexPrefix(raw);
30
32
  try {
31
33
  tx = new platformvm_1.Tx();
32
34
  // could throw an error if a txType doesn't match.
33
- tx.fromBuffer(avalanche_1.Buffer.from(raw, 'hex'));
35
+ tx.fromBuffer(avalanche_1.Buffer.from(rawNoHex, 'hex'));
34
36
  if (!utils_1.default.isTransactionOf(tx, this._coinConfig.network.blockchainID)) {
35
- throw new Error('It is not a transaction of this network');
37
+ throw new Error('It is not a transaction of this platformvm old flow');
36
38
  }
37
39
  }
38
- catch {
39
- txSource = 'EVM';
40
- tx = new evm_1.Tx();
41
- tx.fromBuffer(avalanche_1.Buffer.from(raw, 'hex'));
42
- if (!utils_1.default.isTransactionOf(tx, this._coinConfig.network.cChainBlockchainID)) {
43
- throw new Error('It is not a transaction of this network or C chain');
40
+ catch (e) {
41
+ try {
42
+ txSource = 'EVM';
43
+ tx = new evm_1.Tx();
44
+ tx.fromBuffer(avalanche_1.Buffer.from(rawNoHex, 'hex'));
45
+ if (!utils_1.default.isTransactionOf(tx, this._coinConfig.network.cChainBlockchainID)) {
46
+ throw new Error('It is not a transaction of this network or C chain EVM');
47
+ }
48
+ }
49
+ catch (e) {
50
+ try {
51
+ txSource = 'PVM';
52
+ // this should be the last because other PVM functions are still being detected in the new SDK
53
+ const manager = avalanchejs_1.utils.getManagerForVM('PVM');
54
+ const [codec, txBytes] = manager.getCodecFromBuffer(avalanchejs_1.utils.hexToBuffer(raw));
55
+ const unpackedTx = codec.UnpackPrefix(txBytes);
56
+ // A signed transaction includes 4 bytes for the number of credentials as an Int type that is not known by the codec
57
+ // We'll skip those 4 bytes, instead we'll loop until we've parsed all credentials
58
+ // @see https://docs.avax.network/reference/avalanchego/p-chain/txn-format#signed-transaction-example
59
+ const credentials = [];
60
+ let credentialBytes = unpackedTx[1].slice(4);
61
+ let moreCredentials = true;
62
+ do {
63
+ try {
64
+ const [credential, rest] = codec.UnpackPrefix(credentialBytes);
65
+ credentials.push(credential);
66
+ credentialBytes = rest;
67
+ }
68
+ catch (e) {
69
+ moreCredentials = false;
70
+ }
71
+ } while (credentialBytes.length > 0 && moreCredentials);
72
+ const unpacked = codec.UnpackPrefix(txBytes);
73
+ const permissionlessValidatorTx = unpacked[0];
74
+ const outputs = permissionlessValidatorTx.baseTx.outputs;
75
+ const output = outputs[0].output;
76
+ if (outputs[0].getAssetId() !== this._coinConfig.network.avaxAssetID) {
77
+ throw new Error('The Asset ID of the output does not match the transaction');
78
+ }
79
+ const fromAddresses = output.outputOwners.addrs.map((a) => avalanchejs_1.utils.hexToBuffer(a.toHex()));
80
+ const addressMaps = fromAddresses.map((a) => new avalanchejs_1.utils.AddressMap([[new avalanchejs_1.Address(a), 0]]));
81
+ tx = new avalanchejs_1.UnsignedTx(unpacked[0], [], new avalanchejs_1.utils.AddressMaps(addressMaps), credentials);
82
+ }
83
+ catch (e) {
84
+ throw new Error(`The transaction type is not recognized as an old PVM or old EVM transaction. Additionally, parsing of the new PVM AddPermissionlessValidatorTx type failed: ${e.message}`);
85
+ }
44
86
  }
45
87
  }
46
88
  if (txSource === 'PVM') {
47
- if (validatorTxBuilder_1.ValidatorTxBuilder.verifyTxType(tx.getUnsignedTx().getTransaction())) {
89
+ if (((_a = tx === null || tx === void 0 ? void 0 : tx.tx) === null || _a === void 0 ? void 0 : _a._type) && permissionlessValidatorTxBuilder_1.PermissionlessValidatorTxBuilder.verifyTxType(tx.tx._type)) {
90
+ transactionBuilder = this.getPermissionlessValidatorTxBuilder();
91
+ transactionBuilder.initBuilder(tx);
92
+ }
93
+ else if (validatorTxBuilder_1.ValidatorTxBuilder.verifyTxType(tx.getUnsignedTx().getTransaction())) {
48
94
  transactionBuilder = this.getValidatorBuilder();
95
+ transactionBuilder.initBuilder(tx);
49
96
  }
50
97
  else if (exportTxBuilder_1.ExportTxBuilder.verifyTxType(tx.getUnsignedTx().getTransaction())) {
51
98
  transactionBuilder = this.getExportBuilder();
99
+ transactionBuilder.initBuilder(tx);
52
100
  }
53
101
  else if (importTxBuilder_1.ImportTxBuilder.verifyTxType(tx.getUnsignedTx().getTransaction())) {
54
102
  transactionBuilder = this.getImportBuilder();
103
+ transactionBuilder.initBuilder(tx);
55
104
  }
56
105
  }
57
106
  else if (txSource === 'EVM') {
58
107
  if (importInCTxBuilder_1.ImportInCTxBuilder.verifyTxType(tx.getUnsignedTx().getTransaction())) {
59
108
  transactionBuilder = this.getImportInCBuilder();
109
+ transactionBuilder.initBuilder(tx);
60
110
  }
61
111
  else if (exportInCTxBuilder_1.ExportInCTxBuilder.verifyTxType(tx.getUnsignedTx().getTransaction())) {
62
112
  transactionBuilder = this.getExportInCBuilder();
113
+ transactionBuilder.initBuilder(tx);
63
114
  }
64
115
  }
65
116
  if (transactionBuilder === undefined) {
66
117
  throw new sdk_core_1.NotSupported('Transaction cannot be parsed or has an unsupported transaction type');
67
118
  }
68
- transactionBuilder.initBuilder(tx);
69
119
  return transactionBuilder;
70
120
  }
71
121
  /** @inheritdoc */
@@ -126,4 +176,4 @@ class TransactionBuilderFactory extends sdk_core_1.BaseTransactionBuilderFactory
126
176
  }
127
177
  }
128
178
  exports.TransactionBuilderFactory = TransactionBuilderFactory;
129
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvdHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFDQSw4Q0FBOEU7QUFFOUUsNkRBQTBEO0FBQzFELCtEQUFvRDtBQUNwRCxpREFBc0Q7QUFDdEQseUNBQWlEO0FBQ2pELG9EQUE0QjtBQUM1Qix1REFBb0Q7QUFDcEQsdURBQW9EO0FBQ3BELDZEQUEwRDtBQUMxRCw2REFBMEQ7QUFDMUQseUZBQXNGO0FBRXRGLE1BQWEseUJBQTBCLFNBQVEsd0NBQTZCO0lBRTFFLFlBQVksV0FBaUM7UUFDM0MsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBRlgsa0JBQWEsR0FBRyxLQUFLLENBQUM7SUFHaEMsQ0FBQztJQUVELGtCQUFrQjtJQUNsQixJQUFJLENBQUMsR0FBVztRQUNkLGVBQUssQ0FBQyxzQkFBc0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNsQyxHQUFHLEdBQUcsZUFBSyxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNqQyxJQUFJLFFBQVEsR0FBa0IsS0FBSyxDQUFDO1FBQ3BDLElBQUksRUFBYyxDQUFDO1FBQ25CLElBQUksa0JBQWtCLEdBQW1DLFNBQVMsQ0FBQztRQUVuRSxJQUFJO1lBQ0YsRUFBRSxHQUFHLElBQUksZUFBRSxFQUFFLENBQUM7WUFDZCxrREFBa0Q7WUFDbEQsRUFBRSxDQUFDLFVBQVUsQ0FBQyxrQkFBVSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztZQUUzQyxJQUFJLENBQUMsZUFBSyxDQUFDLGVBQWUsQ0FBQyxFQUFFLEVBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUE0QixDQUFDLFlBQVksQ0FBQyxFQUFFO2dCQUMzRixNQUFNLElBQUksS0FBSyxDQUFDLHlDQUF5QyxDQUFDLENBQUM7YUFD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a0I7SUFDbEIsOEJBQThCO1FBQzVCLE1BQU0sSUFBSSx1QkFBWSxDQUFDLHFDQUFxQyxDQUFDLENBQUM7SUFDaEUsQ0FBQztDQUNGO0FBcEhELDhEQW9IQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEF2YWxhbmNoZU5ldHdvcmssIEJhc2VDb2luIGFzIENvaW5Db25maWcgfSBmcm9tICdAYml0Z28vc3RhdGljcyc7XG5pbXBvcnQgeyBCYXNlVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeSwgTm90U3VwcG9ydGVkIH0gZnJvbSAnQGJpdGdvL3Nkay1jb3JlJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uQnVpbGRlciB9IGZyb20gJy4vdHJhbnNhY3Rpb25CdWlsZGVyJztcbmltcG9ydCB7IFZhbGlkYXRvclR4QnVpbGRlciB9IGZyb20gJy4vdmFsaWRhdG9yVHhCdWlsZGVyJztcbmltcG9ydCB7IFR4IH0gZnJvbSAnYXZhbGFuY2hlL2Rpc3QvYXBpcy9wbGF0Zm9ybXZtJztcbmltcG9ydCB7IFR4IGFzIEVWTVR4IH0gZnJvbSAnYXZhbGFuY2hlL2Rpc3QvYXBpcy9ldm0nO1xuaW1wb3J0IHsgQnVmZmVyIGFzIEJ1ZmZlckF2YXggfSBmcm9tICdhdmFsYW5jaGUnO1xuaW1wb3J0IHV0aWxzIGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHsgRXhwb3J0VHhCdWlsZGVyIH0gZnJvbSAnLi9leHBvcnRUeEJ1aWxkZXInO1xuaW1wb3J0IHsgSW1wb3J0VHhCdWlsZGVyIH0gZnJvbSAnLi9pbXBvcnRUeEJ1aWxkZXInO1xuaW1wb3J0IHsgSW1wb3J0SW5DVHhCdWlsZGVyIH0gZnJvbSAnLi9pbXBvcnRJbkNUeEJ1aWxkZXInO1xuaW1wb3J0IHsgRXhwb3J0SW5DVHhCdWlsZGVyIH0gZnJvbSAnLi9leHBvcnRJbkNUeEJ1aWxkZXInO1xuaW1wb3J0IHsgUGVybWlzc2lvbmxlc3NWYWxpZGF0b3JUeEJ1aWxkZXIgfSBmcm9tICcuL3Blcm1pc3Npb25sZXNzVmFsaWRhdG9yVHhCdWlsZGVyJztcblxuZXhwb3J0IGNsYXNzIFRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnkgZXh0ZW5kcyBCYXNlVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeSB7XG4gIHByb3RlY3RlZCByZWNvdmVyU2lnbmVyID0gZmFsc2U7XG4gIGNvbnN0cnVjdG9yKF9jb2luQ29uZmlnOiBSZWFkb25seTxDb2luQ29uZmlnPikge1xuICAgIHN1cGVyKF9jb2luQ29uZmlnKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBmcm9tKHJhdzogc3RyaW5nKTogVHJhbnNhY3Rpb25CdWlsZGVyIHtcbiAgICB1dGlscy52YWxpZGF0ZVJhd1RyYW5zYWN0aW9uKHJhdyk7XG4gICAgcmF3ID0gdXRpbHMucmVtb3ZlSGV4UHJlZml4KHJhdyk7XG4gICAgbGV0IHR4U291cmNlOiAnRVZNJyB8ICdQVk0nID0gJ1BWTSc7XG4gICAgbGV0IHR4OiBUeCB8IEVWTVR4O1xuICAgIGxldCB0cmFuc2FjdGlvbkJ1aWxkZXI6IFRyYW5zYWN0aW9uQnVpbGRlciB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcblxuICAgIHRyeSB7XG4gICAgICB0eCA9IG5ldyBUeCgpO1xuICAgICAgLy8gY291bGQgdGhyb3cgYW4gZXJyb3IgaWYgYSB0eFR5cGUgZG9lc24ndCBtYXRjaC5cbiAgICAgIHR4LmZyb21CdWZmZXIoQnVmZmVyQXZheC5mcm9tKHJhdywgJ2hleCcpKTtcblxuICAgICAgaWYgKCF1dGlscy5pc1RyYW5zYWN0aW9uT2YodHgsICh0aGlzLl9jb2luQ29uZmlnLm5ldHdvcmsgYXMgQXZhbGFuY2hlTmV0d29yaykuYmxvY2tjaGFpbklEKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0l0IGlzIG5vdCBhIHRyYW5zYWN0aW9uIG9mIHRoaXMgbmV0d29yaycpO1xuICAgICAgfVxuICAgIH0gY2F0Y2gge1xuICAgICAgdHhTb3VyY2UgPSAnRVZNJztcbiAgICAgIHR4ID0gbmV3IEVWTVR4KCk7XG4gICAgICB0eC5mcm9tQnVmZmVyKEJ1ZmZlckF2YXguZnJvbShyYXcsICdoZXgnKSk7XG5cbiAgICAgIGlmICghdXRpbHMuaXNUcmFuc2FjdGlvbk9mKHR4LCAodGhpcy5fY29pbkNvbmZpZy5uZXR3b3JrIGFzIEF2YWxhbmNoZU5ldHdvcmspLmNDaGFpbkJsb2NrY2hhaW5JRCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJdCBpcyBub3QgYSB0cmFuc2FjdGlvbiBvZiB0aGlzIG5ldHdvcmsgb3IgQyBjaGFpbicpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAodHhTb3VyY2UgPT09ICdQVk0nKSB7XG4gICAgICBpZiAoVmFsaWRhdG9yVHhCdWlsZGVyLnZlcmlmeVR4VHlwZSh0eC5nZXRVbnNpZ25lZFR4KCkuZ2V0VHJhbnNhY3Rpb24oKSkpIHtcbiAgICAgICAgdHJhbnNhY3Rpb25CdWlsZGVyID0gdGhpcy5nZXRWYWxpZGF0b3JCdWlsZGVyKCk7XG4gICAgICB9IGVsc2UgaWYgKEV4cG9ydFR4QnVpbGRlci52ZXJpZnlUeFR5cGUodHguZ2V0VW5zaWduZWRUeCgpLmdldFRyYW5zYWN0aW9uKCkpKSB7XG4gICAgICAgIHRyYW5zYWN0aW9uQnVpbGRlciA9IHRoaXMuZ2V0RXhwb3J0QnVpbGRlcigpO1xuICAgICAgfSBlbHNlIGlmIChJbXBvcnRUeEJ1aWxkZXIudmVyaWZ5VHhUeXBlKHR4LmdldFVuc2lnbmVkVHgoKS5nZXRUcmFuc2FjdGlvbigpKSkge1xuICAgICAgICB0cmFuc2FjdGlvbkJ1aWxkZXIgPSB0aGlzLmdldEltcG9ydEJ1aWxkZXIoKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHR4U291cmNlID09PSAnRVZNJykge1xuICAgICAgaWYgKEltcG9ydEluQ1R4QnVpbGRlci52ZXJpZnlUeFR5cGUodHguZ2V0VW5zaWduZWRUeCgpLmdldFRyYW5zYWN0aW9uKCkpKSB7XG4gICAgICAgIHRyYW5zYWN0aW9uQnVpbGRlciA9IHRoaXMuZ2V0SW1wb3J0SW5DQnVpbGRlcigpO1xuICAgICAgfSBlbHNlIGlmIChFeHBvcnRJbkNUeEJ1aWxkZXIudmVyaWZ5VHhUeXBlKHR4LmdldFVuc2lnbmVkVHgoKS5nZXRUcmFuc2FjdGlvbigpKSkge1xuICAgICAgICB0cmFuc2FjdGlvbkJ1aWxkZXIgPSB0aGlzLmdldEV4cG9ydEluQ0J1aWxkZXIoKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHRyYW5zYWN0aW9uQnVpbGRlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgTm90U3VwcG9ydGVkKCdUcmFuc2FjdGlvbiBjYW5ub3QgYmUgcGFyc2VkIG9yIGhhcyBhbiB1bnN1cHBvcnRlZCB0cmFuc2FjdGlvbiB0eXBlJyk7XG4gICAgfVxuICAgIHRyYW5zYWN0aW9uQnVpbGRlci5pbml0QnVpbGRlcih0eCk7XG4gICAgcmV0dXJuIHRyYW5zYWN0aW9uQnVpbGRlcjtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBnZXRUcmFuc2ZlckJ1aWxkZXIoKTogVHJhbnNhY3Rpb25CdWlsZGVyIHtcbiAgICB0aHJvdyBuZXcgTm90U3VwcG9ydGVkKCdUcmFuc2ZlciBpcyBub3Qgc3VwcG9ydGVkIGluIFAgQ2hhaW4nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplIFZhbGlkYXRvciBidWlsZGVyXG4gICAqXG4gICAqIEByZXR1cm5zIHtWYWxpZGF0b3JUeEJ1aWxkZXJ9IHRoZSBidWlsZGVyIGluaXRpYWxpemVkXG4gICAqL1xuICBnZXRWYWxpZGF0b3JCdWlsZGVyKCk6IFZhbGlkYXRvclR4QnVpbGRlciB7XG4gICAgcmV0dXJuIG5ldyBWYWxpZGF0b3JUeEJ1aWxkZXIodGhpcy5fY29pbkNvbmZpZyk7XG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhbGl6ZSBQZXJtaXNzaW9ubGVzcyBWYWxpZGF0b3IgYnVpbGRlclxuICAgKlxuICAgKiBAcmV0dXJucyB7UGVybWlzc2lvbmxlc3NWYWxpZGF0b3JUeEJ1aWxkZXJ9IHRoZSBidWlsZGVyIGluaXRpYWxpemVkXG4gICAqL1xuICBnZXRQZXJtaXNzaW9ubGVzc1ZhbGlkYXRvclR4QnVpbGRlcigpOiBQZXJtaXNzaW9ubGVzc1ZhbGlkYXRvclR4QnVpbGRlciB7XG4gICAgcmV0dXJuIG5ldyBQZXJtaXNzaW9ubGVzc1ZhbGlkYXRvclR4QnVpbGRlcih0aGlzLl9jb2luQ29uZmlnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeHBvcnQgQ3Jvc3MgY2hhaW4gdHJhbnNmZXJcbiAgICpcbiAgICogQHJldHVybnMge0V4cG9ydFR4QnVpbGRlcn0gdGhlIGJ1aWxkZXIgaW5pdGlhbGl6ZWRcbiAgICovXG4gIGdldEV4cG9ydEJ1aWxkZXIoKTogRXhwb3J0VHhCdWlsZGVyIHtcbiAgICByZXR1cm4gbmV3IEV4cG9ydFR4QnVpbGRlcih0aGlzLl9jb2luQ29uZmlnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbXBvcnQgQ3Jvc3MgY2hhaW4gdHJhbnNmZXJcbiAgICpcbiAgICogQHJldHVybnMge0ltcG9ydFR4QnVpbGRlcn0gdGhlIGJ1aWxkZXIgaW5pdGlhbGl6ZWRcbiAgICovXG4gIGdldEltcG9ydEJ1aWxkZXIoKTogSW1wb3J0VHhCdWlsZGVyIHtcbiAgICByZXR1cm4gbmV3IEltcG9ydFR4QnVpbGRlcih0aGlzLl9jb2luQ29uZmlnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbXBvcnQgaW4gQyBjaGFpbiBDcm9zcyBjaGFpbiB0cmFuc2ZlclxuICAgKlxuICAgKiBAcmV0dXJucyB7SW1wb3J0SW5DVHhCdWlsZGVyfSB0aGUgYnVpbGRlciBpbml0aWFsaXplZFxuICAgKi9cbiAgZ2V0SW1wb3J0SW5DQnVpbGRlcigpOiBJbXBvcnRJbkNUeEJ1aWxkZXIge1xuICAgIHJldHVybiBuZXcgSW1wb3J0SW5DVHhCdWlsZGVyKHRoaXMuX2NvaW5Db25maWcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4cG9ydCBpbiBDIGNoYWluIENyb3NzIGNoYWluIHRyYW5zZmVyXG4gICAqXG4gICAqIEByZXR1cm5zIHtFeHBvcnRJbkNUeEJ1aWxkZXJ9IHRoZSBidWlsZGVyIGluaXRpYWxpemVkXG4gICAqL1xuICBnZXRFeHBvcnRJbkNCdWlsZGVyKCk6IEV4cG9ydEluQ1R4QnVpbGRlciB7XG4gICAgcmV0dXJuIG5ldyBFeHBvcnRJbkNUeEJ1aWxkZXIodGhpcy5fY29pbkNvbmZpZyk7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgZ2V0V2FsbGV0SW5pdGlhbGl6YXRpb25CdWlsZGVyKCk6IFRyYW5zYWN0aW9uQnVpbGRlciB7XG4gICAgdGhyb3cgbmV3IE5vdFN1cHBvcnRlZCgnV2FsbGV0IGluaXRpYWxpemF0aW9uIGlzIG5vdCBuZWVkZWQnKTtcbiAgfVxufVxuIl19
179
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvdHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxvREFBb0g7QUFDcEgsOENBQThFO0FBRTlFLHlDQUFpRDtBQUNqRCxpREFBc0Q7QUFDdEQsK0RBQTZEO0FBRTdELDZEQUEwRDtBQUMxRCx1REFBb0Q7QUFDcEQsNkRBQTBEO0FBQzFELHVEQUFvRDtBQUNwRCx5RkFBc0Y7QUFFdEYsb0RBQTRCO0FBQzVCLDZEQUEwRDtBQUUxRCxNQUFhLHlCQUEwQixTQUFRLHdDQUE2QjtJQUUxRSxZQUFZLFdBQWlDO1FBQzNDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUZYLGtCQUFhLEdBQUcsS0FBSyxDQUFDO0lBR2hDLENBQUM7SUFFRCxrQkFBa0I7SUFDbEIsSUFBSSxDQUFDLEdBQVc7O1FBQ2QsZUFBSyxDQUFDLHNCQUFzQixDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2xDLElBQUksUUFBUSxHQUFrQixLQUFLLENBQUM7UUFDcEMsSUFBSSxrQkFBa0IsR0FBa0UsU0FBUyxDQUFDO1FBQ2xHLElBQUksRUFBOEIsQ0FBQztRQUNuQyxNQUFNLFFBQVEsR0FBRyxlQUFLLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzVDLElBQUk7WUFDRixFQUFFLEdBQUcsSUFBSSxlQUFLLEVBQUUsQ0FBQztZQUNqQixrREFBa0Q7WUFDbEQsRUFBRSxDQUFDLFVBQVUsQ0FBQyxrQkFBVSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztZQUVoRCxJQUFJLENBQUMsZUFBSyxDQUFDLGVBQWUsQ0FBQyxFQUFFLEVBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUE0QixDQUFDLFlBQVksQ0FBQyxFQUFFO2dCQUMzRixNQUFNLElBQUksS0FBSyxDQUFD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LENBQUMsV0FBVyxDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxnQkFBZ0I7UUFDZCxPQUFPLElBQUksaUNBQWUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxtQkFBbUI7UUFDakIsT0FBTyxJQUFJLHVDQUFrQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILG1CQUFtQjtRQUNqQixPQUFPLElBQUksdUNBQWtCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ2xELENBQUM7SUFFRCxrQkFBa0I7SUFDbEIsOEJBQThCO1FBQzVCLE1BQU0sSUFBSSx1QkFBWSxDQUFDLHFDQUFxQyxDQUFDLENBQUM7SUFDaEUsQ0FBQztDQUNGO0FBbktELDhEQW1LQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFkZHJlc3MsIHV0aWxzIGFzIEF2YXhVdGlscywgQ3JlZGVudGlhbCwgcHZtU2VyaWFsLCBUcmFuc2Zlck91dHB1dCwgVW5zaWduZWRUeCB9IGZyb20gJ0BiaXRnby9hdmFsYW5jaGVqcyc7XG5pbXBvcnQgeyBCYXNlVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeSwgTm90U3VwcG9ydGVkIH0gZnJvbSAnQGJpdGdvL3Nkay1jb3JlJztcbmltcG9ydCB7IEF2YWxhbmNoZU5ldHdvcmssIEJhc2VDb2luIGFzIENvaW5Db25maWcgfSBmcm9tICdAYml0Z28vc3RhdGljcyc7XG5pbXBvcnQgeyBCdWZmZXIgYXMgQnVmZmVyQXZheCB9IGZyb20gJ2F2YWxhbmNoZSc7XG5pbXBvcnQgeyBUeCBhcyBFVk1UeCB9IGZyb20gJ2F2YWxhbmNoZS9kaXN0L2FwaXMvZXZtJztcbmltcG9ydCB7IFR4IGFzIFBWTVR4IH0gZnJvbSAnYXZhbGFuY2hlL2Rpc3QvYXBpcy9wbGF0Zm9ybXZtJztcbmltcG9ydCB7IERlcHJlY2F0ZWRUcmFuc2FjdGlvbkJ1aWxkZXIgfSBmcm9tICcuL2RlcHJlY2F0ZWRUcmFuc2FjdGlvbkJ1aWxkZXInO1xuaW1wb3J0IHsgRXhwb3J0SW5DVHhCdWlsZGVyIH0gZnJvbSAnLi9leHBvcnRJbkNUeEJ1aWxkZXInO1xuaW1wb3J0IHsgRXhwb3J0VHhCdWlsZGVyIH0gZnJvbSAnLi9leHBvcnRUeEJ1aWxkZXInO1xuaW1wb3J0IHsgSW1wb3J0SW5DVHhCdWlsZGVyIH0gZnJvbSAnLi9pbXBvcnRJbkNUeEJ1aWxkZXInO1xuaW1wb3J0IHsgSW1wb3J0VHhCdWlsZGVyIH0gZnJvbSAnLi9pbXBvcnRUeEJ1aWxkZXInO1xuaW1wb3J0IHsgUGVybWlzc2lvbmxlc3NWYWxpZGF0b3JUeEJ1aWxkZXIgfSBmcm9tICcuL3Blcm1pc3Npb25sZXNzVmFsaWRhdG9yVHhCdWlsZGVyJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uQnVpbGRlciB9IGZyb20gJy4vdHJhbnNhY3Rpb25CdWlsZGVyJztcbmltcG9ydCB1dGlscyBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB7IFZhbGlkYXRvclR4QnVpbGRlciB9IGZyb20gJy4vdmFsaWRhdG9yVHhCdWlsZGVyJztcblxuZXhwb3J0IGNsYXNzIFRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnkgZXh0ZW5kcyBCYXNlVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeSB7XG4gIHByb3RlY3RlZCByZWNvdmVyU2lnbmVyID0gZmFsc2U7XG4gIGNvbnN0cnVjdG9yKF9jb2luQ29uZmlnOiBSZWFkb25seTxDb2luQ29uZmlnPikge1xuICAgIHN1cGVyKF9jb2luQ29uZmlnKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBmcm9tKHJhdzogc3RyaW5nKTogVHJhbnNhY3Rpb25CdWlsZGVyIHwgRGVwcmVjYXRlZFRyYW5zYWN0aW9uQnVpbGRlciB7XG4gICAgdXRpbHMudmFsaWRhdGVSYXdUcmFuc2FjdGlvbihyYXcpO1xuICAgIGxldCB0eFNvdXJjZTogJ0VWTScgfCAnUFZNJyA9ICdQVk0nO1xuICAgIGxldCB0cmFuc2FjdGlvbkJ1aWxkZXI6IFRyYW5zYWN0aW9uQnVpbGRlciB8IERlcHJlY2F0ZWRUcmFuc2FjdGlvbkJ1aWxkZXIgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG4gICAgbGV0IHR4OiBQVk1UeCB8IEVWTVR4IHwgVW5zaWduZWRUeDtcbiAgICBjb25zdCByYXdOb0hleCA9IHV0aWxzLnJlbW92ZUhleFByZWZpeChyYXcpO1xuICAgIHRyeSB7XG4gICAgICB0eCA9IG5ldyBQVk1UeCgpO1xuICAgICAgLy8gY291bGQgdGhyb3cgYW4gZXJyb3IgaWYgYSB0eFR5cGUgZG9lc24ndCBtYXRjaC5cbiAgICAgIHR4LmZyb21CdWZmZXIoQnVmZmVyQXZheC5mcm9tKHJhd05vSGV4LCAnaGV4JykpO1xuXG4gICAgICBpZiAoIXV0aWxzLmlzVHJhbnNhY3Rpb25PZih0eCwgKHRoaXMuX2NvaW5Db25maWcubmV0d29yayBhcyBBdmFsYW5jaGVOZXR3b3JrKS5ibG9ja2NoYWluSUQpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSXQgaXMgbm90IGEgdHJhbnNhY3Rpb24gb2YgdGhpcyBwbGF0Zm9ybXZtIG9sZCBmbG93Jyk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdHhTb3VyY2UgPSAnRVZNJztcbiAgICAgICAgdHggPSBuZXcgRVZNVHgoKTtcbiAgICAgICAgdHguZnJvbUJ1ZmZlcihCdWZmZXJBdmF4LmZyb20ocmF3Tm9IZXgsICdoZXgnKSk7XG5cbiAgICAgICAgaWYgKCF1dGlscy5pc1RyYW5zYWN0aW9uT2YodHgsICh0aGlzLl9jb2luQ29uZmlnLm5ldHdvcmsgYXMgQXZhbGFuY2hlTmV0d29yaykuY0NoYWluQmxvY2tjaGFpbklEKSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSXQgaXMgbm90IGEgdHJhbnNhY3Rpb24gb2YgdGhpcyBuZXR3b3JrIG9yIEMgY2hhaW4gRVZNJyk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB0eFNvdXJjZSA9ICdQVk0nO1xuICAgICAgICAgIC8vIHRoaXMgc2hvdWxkIGJlIHRoZSBsYXN0IGJlY2F1c2Ugb3RoZXIgUFZNIGZ1bmN0aW9ucyBhcmUgc3RpbGwgYmVpbmcgZGV0ZWN0ZWQgaW4gdGhlIG5ldyBTREtcbiAgICAgICAgICBjb25zdCBtYW5hZ2VyID0gQXZheFV0aWxzLmdldE1hbmFnZXJGb3JWTSgnUFZNJyk7XG4gICAgICAgICAgY29uc3QgW2NvZGVjLCB0eEJ5dGVzXSA9IG1hbmFnZXIuZ2V0Q29kZWNGcm9tQnVmZmVyKEF2YXhVdGlscy5oZXhUb0J1ZmZlcihyYXcpKTtcbiAgICAgICAgICBjb25zdCB1bnBhY2tlZFR4ID0gY29kZWMuVW5wYWNrUHJlZml4PHB2bVNlcmlhbC5BZGRQZXJtaXNzaW9ubGVzc1ZhbGlkYXRvclR4Pih0eEJ5dGVzKTtcbiAgICAgICAgICAvLyBBIHNpZ25lZCB0cmFuc2FjdGlvbiBpbmNsdWRlcyA0IGJ5dGVzIGZvciB0aGUgbnVtYmVyIG9mIGNyZWRlbnRpYWxzIGFzIGFuIEludCB0eXBlIHRoYXQgaXMgbm90IGtub3duIGJ5IHRoZSBjb2RlY1xuICAgICAgICAgIC8vIFdlJ2xsIHNraXAgdGhvc2UgNCBieXRlcywgaW5zdGVhZCB3ZSdsbCBsb29wIHVudGlsIHdlJ3ZlIHBhcnNlZCBhbGwgY3JlZGVudGlhbHNcbiAgICAgICAgICAvLyBAc2VlIGh0dHBzOi8vZG9jcy5hdmF4Lm5ldHdvcmsvcmVmZXJlbmNlL2F2YWxhbmNoZWdvL3AtY2hhaW4vdHhuLWZvcm1hdCNzaWduZWQtdHJhbnNhY3Rpb24tZXhhbXBsZVxuICAgICAgICAgIGNvbnN0IGNyZWRlbnRpYWxzOiBDcmVkZW50aWFsW10gPSBbXTtcbiAgICAgICAgICBsZXQgY3JlZGVudGlhbEJ5dGVzID0gdW5wYWNrZWRUeFsxXS5zbGljZSg0KTtcbiAgICAgICAgICBsZXQgbW9yZUNyZWRlbnRpYWxzID0gdHJ1ZTtcbiAgICAgICAgICBkbyB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBjb25zdCBbY3JlZGVudGlhbCwgcmVzdF0gPSBjb2RlYy5VbnBhY2tQcmVmaXg8Q3JlZGVudGlhbD4oY3JlZGVudGlhbEJ5dGVzKTtcbiAgICAgICAgICAgICAgY3JlZGVudGlhbHMucHVzaChjcmVkZW50aWFsKTtcbiAgICAgICAgICAgICAgY3JlZGVudGlhbEJ5dGVzID0gcmVzdDtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgbW9yZUNyZWRlbnRpYWxzID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSB3aGlsZSAoY3JlZGVudGlhbEJ5dGVzLmxlbmd0aCA+IDAgJiYgbW9yZUNyZWRlbnRpYWxzKTtcblxuICAgICAgICAgIGNvbnN0IHVucGFja2VkID0gY29kZWMuVW5wYWNrUHJlZml4PHB2bVNlcmlhbC5BZGRQZXJtaXNzaW9ubGVzc1ZhbGlkYXRvclR4Pih0eEJ5dGVzKTtcbiAgICAgICAgICBjb25zdCBwZXJtaXNzaW9ubGVzc1ZhbGlkYXRvclR4ID0gdW5wYWNrZWRbMF0gYXMgcHZtU2VyaWFsLkFkZFBlcm1pc3Npb25sZXNzVmFsaWRhdG9yVHg7XG4gICAgICAgICAgY29uc3Qgb3V0cHV0cyA9IHBlcm1pc3Npb25sZXNzVmFsaWRhdG9yVHguYmFzZVR4Lm91dHB1dHM7XG4gICAgICAgICAgY29uc3Qgb3V0cHV0ID0gb3V0cHV0c1swXS5vdXRwdXQgYXMgVHJhbnNmZXJPdXRwdXQ7XG4gICAgICAgICAgaWYgKG91dHB1dHNbMF0uZ2V0QXNzZXRJZCgpICE9PSAodGhpcy5fY29pbkNvbmZpZy5uZXR3b3JrIGFzIEF2YWxhbmNoZU5ldHdvcmspLmF2YXhBc3NldElEKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBBc3NldCBJRCBvZiB0aGUgb3V0cHV0IGRvZXMgbm90IG1hdGNoIHRoZSB0cmFuc2FjdGlvbicpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBmcm9tQWRkcmVzc2VzID0gb3V0cHV0Lm91dHB1dE93bmVycy5hZGRycy5tYXAoKGEpID0+IEF2YXhVdGlscy5oZXhUb0J1ZmZlcihhLnRvSGV4KCkpKTtcbiAgICAgICAgICBjb25zdCBhZGRyZXNzTWFwcyA9IGZyb21BZGRyZXNzZXMubWFwKChhKSA9PiBuZXcgQXZheFV0aWxzLkFkZHJlc3NNYXAoW1tuZXcgQWRkcmVzcyhhKSwgMF1dKSk7XG4gICAgICAgICAgdHggPSBuZXcgVW5zaWduZWRUeCh1bnBhY2tlZFswXSwgW10sIG5ldyBBdmF4VXRpbHMuQWRkcmVzc01hcHMoYWRkcmVzc01hcHMpLCBjcmVkZW50aWFscyk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICBgVGhlIHRyYW5zYWN0aW9uIHR5cGUgaXMgbm90IHJlY29nbml6ZWQgYXMgYW4gb2xkIFBWTSBvciBvbGQgRVZNIHRyYW5zYWN0aW9uLiBBZGRpdGlvbmFsbHksIHBhcnNpbmcgb2YgdGhlIG5ldyBQVk0gQWRkUGVybWlzc2lvbmxlc3NWYWxpZGF0b3JUeCB0eXBlIGZhaWxlZDogJHtlLm1lc3NhZ2V9YFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodHhTb3VyY2UgPT09ICdQVk0nKSB7XG4gICAgICBpZiAoKHR4IGFzIFVuc2lnbmVkVHgpPy50eD8uX3R5cGUgJiYgUGVybWlzc2lvbmxlc3NWYWxpZGF0b3JUeEJ1aWxkZXIudmVyaWZ5VHhUeXBlKCh0eCBhcyBVbnNpZ25lZFR4KS50eC5fdHlwZSkpIHtcbiAgICAgICAgdHJhbnNhY3Rpb25CdWlsZGVyID0gdGhpcy5nZXRQZXJtaXNzaW9ubGVzc1ZhbGlkYXRvclR4QnVpbGRlcigpO1xuICAgICAgICB0cmFuc2FjdGlvbkJ1aWxkZXIuaW5pdEJ1aWxkZXIodHgpO1xuICAgICAgfSBlbHNlIGlmIChWYWxpZGF0b3JUeEJ1aWxkZXIudmVyaWZ5VHhUeXBlKCh0eCBhcyBQVk1UeCkuZ2V0VW5zaWduZWRUeCgpLmdldFRyYW5zYWN0aW9uKCkpKSB7XG4gICAgICAgIHRyYW5zYWN0aW9uQnVpbGRlciA9IHRoaXMuZ2V0VmFsaWRhdG9yQnVpbGRlcigpO1xuICAgICAgICB0cmFuc2FjdGlvbkJ1aWxkZXIuaW5pdEJ1aWxkZXIodHggYXMgUFZNVHgpO1xuICAgICAgfSBlbHNlIGlmIChFeHBvcnRUeEJ1aWxkZXIudmVyaWZ5VHhUeXBlKCh0eCBhcyBQVk1UeCkuZ2V0VW5zaWduZWRUeCgpLmdldFRyYW5zYWN0aW9uKCkpKSB7XG4gICAgICAgIHRyYW5zYWN0aW9uQnVpbGRlciA9IHRoaXMuZ2V0RXhwb3J0QnVpbGRlcigpO1xuICAgICAgICB0cmFuc2FjdGlvbkJ1aWxkZXIuaW5pdEJ1aWxkZXIodHggYXMgUFZNVHgpO1xuICAgICAgfSBlbHNlIGlmIChJbXBvcnRUeEJ1aWxkZXIudmVyaWZ5VHhUeXBlKCh0eCBhcyBQVk1UeCkuZ2V0VW5zaWduZWRUeCgpLmdldFRyYW5zYWN0aW9uKCkpKSB7XG4gICAgICAgIHRyYW5zYWN0aW9uQnVpbGRlciA9IHRoaXMuZ2V0SW1wb3J0QnVpbGRlcigpO1xuICAgICAgICB0cmFuc2FjdGlvbkJ1aWxkZXIuaW5pdEJ1aWxkZXIodHggYXMgUFZNVHgpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodHhTb3VyY2UgPT09ICdFVk0nKSB7XG4gICAgICBpZiAoSW1wb3J0SW5DVHhCdWlsZGVyLnZlcmlmeVR4VHlwZSgodHggYXMgRVZNVHgpLmdldFVuc2lnbmVkVHgoKS5nZXRUcmFuc2FjdGlvbigpKSkge1xuICAgICAgICB0cmFuc2FjdGlvbkJ1aWxkZXIgPSB0aGlzLmdldEltcG9ydEluQ0J1aWxkZXIoKTtcbiAgICAgICAgdHJhbnNhY3Rpb25CdWlsZGVyLmluaXRCdWlsZGVyKHR4IGFzIEVWTVR4KTtcbiAgICAgIH0gZWxzZSBpZiAoRXhwb3J0SW5DVHhCdWlsZGVyLnZlcmlmeVR4VHlwZSgodHggYXMgRVZNVHgpLmdldFVuc2lnbmVkVHgoKS5nZXRUcmFuc2FjdGlvbigpKSkge1xuICAgICAgICB0cmFuc2FjdGlvbkJ1aWxkZXIgPSB0aGlzLmdldEV4cG9ydEluQ0J1aWxkZXIoKTtcbiAgICAgICAgdHJhbnNhY3Rpb25CdWlsZGVyLmluaXRCdWlsZGVyKHR4IGFzIEVWTVR4KTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHRyYW5zYWN0aW9uQnVpbGRlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgTm90U3VwcG9ydGVkKCdUcmFuc2FjdGlvbiBjYW5ub3QgYmUgcGFyc2VkIG9yIGhhcyBhbiB1bnN1cHBvcnRlZCB0cmFuc2FjdGlvbiB0eXBlJyk7XG4gICAgfVxuICAgIHJldHVybiB0cmFuc2FjdGlvbkJ1aWxkZXI7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgZ2V0VHJhbnNmZXJCdWlsZGVyKCk6IERlcHJlY2F0ZWRUcmFuc2FjdGlvbkJ1aWxkZXIge1xuICAgIHRocm93IG5ldyBOb3RTdXBwb3J0ZWQoJ1RyYW5zZmVyIGlzIG5vdCBzdXBwb3J0ZWQgaW4gUCBDaGFpbicpO1xuICB9XG5cbiAgLyoqXG4gICAqIEluaXRpYWxpemUgVmFsaWRhdG9yIGJ1aWxkZXJcbiAgICpcbiAgICogQHJldHVybnMge1ZhbGlkYXRvclR4QnVpbGRlcn0gdGhlIGJ1aWxkZXIgaW5pdGlhbGl6ZWRcbiAgICovXG4gIGdldFZhbGlkYXRvckJ1aWxkZXIoKTogVmFsaWRhdG9yVHhCdWlsZGVyIHtcbiAgICByZXR1cm4gbmV3IFZhbGlkYXRvclR4QnVpbGRlcih0aGlzLl9jb2luQ29uZmlnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplIFBlcm1pc3Npb25sZXNzIFZhbGlkYXRvciBidWlsZGVyXG4gICAqXG4gICAqIEByZXR1cm5zIHtQZXJtaXNzaW9ubGVzc1ZhbGlkYXRvclR4QnVpbGRlcn0gdGhlIGJ1aWxkZXIgaW5pdGlhbGl6ZWRcbiAgICovXG4gIGdldFBlcm1pc3Npb25sZXNzVmFsaWRhdG9yVHhCdWlsZGVyKCk6IFBlcm1pc3Npb25sZXNzVmFsaWRhdG9yVHhCdWlsZGVyIHtcbiAgICByZXR1cm4gbmV3IFBlcm1pc3Npb25sZXNzVmFsaWRhdG9yVHhCdWlsZGVyKHRoaXMuX2NvaW5Db25maWcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4cG9ydCBDcm9zcyBjaGFpbiB0cmFuc2ZlclxuICAgKlxuICAgKiBAcmV0dXJucyB7RXhwb3J0VHhCdWlsZGVyfSB0aGUgYnVpbGRlciBpbml0aWFsaXplZFxuICAgKi9cbiAgZ2V0RXhwb3J0QnVpbGRlcigpOiBFeHBvcnRUeEJ1aWxkZXIge1xuICAgIHJldHVybiBuZXcgRXhwb3J0VHhCdWlsZGVyKHRoaXMuX2NvaW5Db25maWcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEltcG9ydCBDcm9zcyBjaGFpbiB0cmFuc2ZlclxuICAgKlxuICAgKiBAcmV0dXJucyB7SW1wb3J0VHhCdWlsZGVyfSB0aGUgYnVpbGRlciBpbml0aWFsaXplZFxuICAgKi9cbiAgZ2V0SW1wb3J0QnVpbGRlcigpOiBJbXBvcnRUeEJ1aWxkZXIge1xuICAgIHJldHVybiBuZXcgSW1wb3J0VHhCdWlsZGVyKHRoaXMuX2NvaW5Db25maWcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEltcG9ydCBpbiBDIGNoYWluIENyb3NzIGNoYWluIHRyYW5zZmVyXG4gICAqXG4gICAqIEByZXR1cm5zIHtJbXBvcnRJbkNUeEJ1aWxkZXJ9IHRoZSBidWlsZGVyIGluaXRpYWxpemVkXG4gICAqL1xuICBnZXRJbXBvcnRJbkNCdWlsZGVyKCk6IEltcG9ydEluQ1R4QnVpbGRlciB7XG4gICAgcmV0dXJuIG5ldyBJbXBvcnRJbkNUeEJ1aWxkZXIodGhpcy5fY29pbkNvbmZpZyk7XG4gIH1cblxuICAvKipcbiAgICogRXhwb3J0IGluIEMgY2hhaW4gQ3Jvc3MgY2hhaW4gdHJhbnNmZXJcbiAgICpcbiAgICogQHJldHVybnMge0V4cG9ydEluQ1R4QnVpbGRlcn0gdGhlIGJ1aWxkZXIgaW5pdGlhbGl6ZWRcbiAgICovXG4gIGdldEV4cG9ydEluQ0J1aWxkZXIoKTogRXhwb3J0SW5DVHhCdWlsZGVyIHtcbiAgICByZXR1cm4gbmV3IEV4cG9ydEluQ1R4QnVpbGRlcih0aGlzLl9jb2luQ29uZmlnKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBnZXRXYWxsZXRJbml0aWFsaXphdGlvbkJ1aWxkZXIoKTogRGVwcmVjYXRlZFRyYW5zYWN0aW9uQnVpbGRlciB7XG4gICAgdGhyb3cgbmV3IE5vdFN1cHBvcnRlZCgnV2FsbGV0IGluaXRpYWxpemF0aW9uIGlzIG5vdCBuZWVkZWQnKTtcbiAgfVxufVxuIl19
@@ -1,12 +1,13 @@
1
1
  /// <reference types="node" />
2
+ import { Signature as AvaxSignature, TransferableOutput } from '@bitgo/avalanchejs';
2
3
  import { BaseUtils, Entry } from '@bitgo/sdk-core';
3
- import { Buffer as BufferAvax } from 'avalanche';
4
- import { NodeIDStringToBuffer } from 'avalanche/dist/utils';
5
- import { BaseTx, TransferableOutput } from 'avalanche/dist/apis/platformvm';
6
- import { Credential } from 'avalanche/dist/common/credentials';
7
4
  import { AvalancheNetwork } from '@bitgo/statics';
5
+ import { Buffer as BufferAvax } from 'avalanche';
6
+ import { BaseTx, TransferableOutput as DeprecatedTransferableOutput } from 'avalanche/dist/apis/platformvm';
8
7
  import { Signature } from 'avalanche/dist/common';
9
- import { Output, DeprecatedTx } from './iface';
8
+ import { Credential } from 'avalanche/dist/common/credentials';
9
+ import { NodeIDStringToBuffer } from 'avalanche/dist/utils';
10
+ import { DeprecatedOutput, DeprecatedTx, Output } from './iface';
10
11
  export declare class Utils implements BaseUtils {
11
12
  private binTools;
12
13
  cb58Decode: (bytes: string | BufferAvax) => BufferAvax;
@@ -101,6 +102,7 @@ export declare class Utils implements BaseUtils {
101
102
  */
102
103
  verifySignature(network: AvalancheNetwork, message: Buffer, signature: Buffer, prv: Buffer): boolean;
103
104
  createSig(sigHex: string): Signature;
105
+ createNewSig(sigHex: string): AvaxSignature;
104
106
  /**
105
107
  * Avaxp wrapper to recovery signature using Avalanche's buffer
106
108
  * @param network
@@ -133,6 +135,13 @@ export declare class Utils implements BaseUtils {
133
135
  * @returns true if tx is for blockchainId
134
136
  */
135
137
  isTransactionOf(tx: DeprecatedTx, blockchainId: string): boolean;
138
+ /**
139
+ * Check if Output is from PVM.
140
+ * Output could be EVM or PVM output.
141
+ * @param {DeprecatedOutput} output
142
+ * @returns {boolean} output is DeprecatedTransferableOutput
143
+ */
144
+ deprecatedIsTransferableOutput(output: DeprecatedOutput): output is DeprecatedTransferableOutput;
136
145
  /**
137
146
  * Check if Output is from PVM.
138
147
  * Output could be EVM or PVM output.
@@ -140,6 +149,12 @@ export declare class Utils implements BaseUtils {
140
149
  * @returns {boolean} output is TransferableOutput
141
150
  */
142
151
  isTransferableOutput(output: Output): output is TransferableOutput;
152
+ /**
153
+ * Return a mapper function to that network address representation.
154
+ * @param network required to stringify addresses
155
+ * @return mapper function
156
+ */
157
+ deprecatedMapOutputToEntry(network: AvalancheNetwork): (DeprecatedOutput: any) => Entry;
143
158
  /**
144
159
  * Return a mapper function to that network address representation.
145
160
  * @param network required to stringify addresses
@@ -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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"}
@@ -24,14 +24,15 @@ var __importStar = (this && this.__importStar) || function (mod) {
24
24
  };
25
25
  Object.defineProperty(exports, "__esModule", { value: true });
26
26
  exports.Utils = void 0;
27
+ const avalanchejs_1 = require("@bitgo/avalanchejs");
27
28
  const sdk_core_1 = require("@bitgo/sdk-core");
28
29
  const avalanche_1 = require("avalanche");
29
- const utils_1 = require("avalanche/dist/utils");
30
- const elliptic_1 = require("elliptic");
31
30
  const platformvm_1 = require("avalanche/dist/apis/platformvm");
32
31
  const keychain_1 = require("avalanche/dist/apis/platformvm/keychain");
33
32
  const common_1 = require("avalanche/dist/common");
33
+ const utils_1 = require("avalanche/dist/utils");
34
34
  const createHash = __importStar(require("create-hash"));
35
+ const elliptic_1 = require("elliptic");
35
36
  const iface_1 = require("./iface");
36
37
  class Utils {
37
38
  constructor() {
@@ -211,6 +212,10 @@ class Utils {
211
212
  sig.fromBuffer(avalanche_1.Buffer.from(sigHex.padStart(130, '0'), 'hex'));
212
213
  return sig;
213
214
  }
215
+ createNewSig(sigHex) {
216
+ const buffer = avalanche_1.Buffer.from(sigHex.padStart(130, '0'), 'hex');
217
+ return new avalanchejs_1.Signature(buffer);
218
+ }
214
219
  /**
215
220
  * Avaxp wrapper to recovery signature using Avalanche's buffer
216
221
  * @param network
@@ -259,6 +264,15 @@ class Utils {
259
264
  isTransactionOf(tx, blockchainId) {
260
265
  return utils.cb58Encode(tx.getUnsignedTx().getTransaction().getBlockchainID()) === blockchainId;
261
266
  }
267
+ /**
268
+ * Check if Output is from PVM.
269
+ * Output could be EVM or PVM output.
270
+ * @param {DeprecatedOutput} output
271
+ * @returns {boolean} output is DeprecatedTransferableOutput
272
+ */
273
+ deprecatedIsTransferableOutput(output) {
274
+ return 'getOutput' in output;
275
+ }
262
276
  /**
263
277
  * Check if Output is from PVM.
264
278
  * Output could be EVM or PVM output.
@@ -266,16 +280,16 @@ class Utils {
266
280
  * @returns {boolean} output is TransferableOutput
267
281
  */
268
282
  isTransferableOutput(output) {
269
- return 'getOutput' in output;
283
+ return (output === null || output === void 0 ? void 0 : output._type) === avalanchejs_1.TypeSymbols.TransferableOutput;
270
284
  }
271
285
  /**
272
286
  * Return a mapper function to that network address representation.
273
287
  * @param network required to stringify addresses
274
288
  * @return mapper function
275
289
  */
276
- mapOutputToEntry(network) {
290
+ deprecatedMapOutputToEntry(network) {
277
291
  return (output) => {
278
- if (this.isTransferableOutput(output)) {
292
+ if (this.deprecatedIsTransferableOutput(output)) {
279
293
  const amountOutput = output.getOutput();
280
294
  const address = amountOutput
281
295
  .getAddresses()
@@ -298,6 +312,30 @@ class Utils {
298
312
  }
299
313
  };
300
314
  }
315
+ /**
316
+ * Return a mapper function to that network address representation.
317
+ * @param network required to stringify addresses
318
+ * @return mapper function
319
+ */
320
+ mapOutputToEntry(network) {
321
+ return (output) => {
322
+ if (this.isTransferableOutput(output)) {
323
+ const outputAmount = output.amount();
324
+ const address = output.output
325
+ .getOwners()
326
+ .map((a) => this.addressToString(network.hrp, network.alias, avalanche_1.Buffer.from(a)))
327
+ .sort()
328
+ .join(iface_1.ADDRESS_SEPARATOR);
329
+ return {
330
+ value: outputAmount.toString(),
331
+ address,
332
+ };
333
+ }
334
+ else {
335
+ throw new Error('Invalid output type');
336
+ }
337
+ };
338
+ }
301
339
  /**
302
340
  * remove hex prefix (0x)
303
341
  * @param hex string
@@ -329,4 +367,4 @@ class Utils {
329
367
  exports.Utils = Utils;
330
368
  const utils = new Utils();
331
369
  exports.default = utils;
332
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsOENBUXlCO0FBQ3pCLHlDQUErRDtBQUMvRCxnREFBNEQ7QUFDNUQsdUNBQThCO0FBQzlCLCtEQUFpSDtBQUVqSCxzRUFBaUY7QUFFakYsa0RBQWtEO0FBQ2xELHdEQUEwQztBQUUxQyxtQ0FBa0U7QUFFbEUsTUFBYSxLQUFLO0lBQWxCO1FBQ1UsYUFBUSxHQUFHLG9CQUFRLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDbkMsZUFBVSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDO1FBQ3RDLGVBQVUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQztRQUN0QyxtQkFBYyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDO1FBQzlDLG1CQUFjLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUM7UUFDOUMseUJBQW9CLEdBQUcsNEJBQW9CLENBQUM7UUFDNUMsb0JBQWUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQztRQW1GaEQsaUJBQVksR0FBRyxDQUFDLEdBQVcsRUFBYyxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLENBQUM7SUEyT3hGLENBQUM7SUE1VFEsU0FBUyxDQUFDLGVBQXlCLEVBQUUsbUJBQTZCO1FBQ3ZFLE9BQU8sZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsbUJBQW1CLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNwRyxDQUFD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LENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDekI7UUFDRCxPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsdUJBQXVCLENBQUMsU0FBaUI7UUFDdkMsT0FBTyxrQkFBVSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDakYsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCx1QkFBdUIsQ0FBQyxTQUFxQjtRQUMzQyxPQUFPLFFBQVEsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQzVELENBQUM7Q0FDRjtBQXJVRCxzQkFxVUM7QUFFRCxNQUFNLEtBQUssR0FBRyxJQUFJLEtBQUssRUFBRSxDQUFDO0FBRTFCLGtCQUFlLEtBQUssQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIGlzVmFsaWRYcHViLFxuICBpc1ZhbGlkWHBydixcbiAgTm90SW1wbGVtZW50ZWRFcnJvcixcbiAgQmFzZVV0aWxzLFxuICBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvcixcbiAgUGFyc2VUcmFuc2FjdGlvbkVycm9yLFxuICBFbnRyeSxcbn0gZnJvbSAnQGJpdGdvL3Nkay1jb3JlJztcbmltcG9ydCB7IEJpblRvb2xzLCBCTiwgQnVmZmVyIGFzIEJ1ZmZlckF2YXggfSBmcm9tICdhdmFsYW5jaGUnO1xuaW1wb3J0IHsgTm9kZUlEU3RyaW5nVG9CdWZmZXIgfSBmcm9tICdhdmFsYW5jaGUvZGlzdC91dGlscyc7XG5pbXBvcnQgeyBlYyB9IGZyb20gJ2VsbGlwdGljJztcbmltcG9ydCB7IEFtb3VudE91dHB1dCwgQmFzZVR4LCBTZWxlY3RDcmVkZW50aWFsQ2xhc3MsIFRyYW5zZmVyYWJsZU91dHB1dCB9IGZyb20gJ2F2YWxhbmNoZS9kaXN0L2FwaXMvcGxhdGZvcm12bSc7XG5pbXBvcnQgeyBDcmVkZW50aWFsIH0gZnJvbSAnYXZhbGFuY2hlL2Rpc3QvY29tbW9uL2NyZWRlbnRpYWxzJztcbmltcG9ydCB7IEtleVBhaXIgYXMgS2V5UGFpckF2YXggfSBmcm9tICdhdmFsYW5jaGUvZGlzdC9hcGlzL3BsYXRmb3Jtdm0va2V5Y2hhaW4nO1xuaW1wb3J0IHsgQXZhbGFuY2hlTmV0d29yayB9IGZyb20gJ0BiaXRnby9zdGF0aWNzJztcbmltcG9ydCB7IFNpZ25hdHVyZSB9IGZyb20gJ2F2YWxhbmNoZS9kaXN0L2NvbW1vbic7XG5pbXBvcnQgKiBhcyBjcmVhdGVIYXNoIGZyb20gJ2NyZWF0ZS1oYXNoJztcbmltcG9ydCB7IEVWTU91dHB1dCB9IGZyb20gJ2F2YWxhbmNoZS9kaXN0L2FwaXMvZXZtJztcbmltcG9ydCB7IEFERFJFU1NfU0VQQVJBVE9SLCBPdXRwdXQsIERlcHJlY2F0ZWRUeCB9IGZyb20gJy4vaWZhY2UnO1xuXG5leHBvcnQgY2xhc3MgVXRpbHMgaW1wbGVtZW50cyBCYXNlVXRpbHMge1xuICBwcml2YXRlIGJpblRvb2xzID0gQmluVG9vbHMuZ2V0SW5zdGFuY2UoKTtcbiAgcHVibGljIGNiNThEZWNvZGUgPSB0aGlzLmJpblRvb2xzLmNiNThEZWNvZGU7XG4gIHB1YmxpYyBjYjU4RW5jb2RlID0gdGhpcy5iaW5Ub29scy5jYjU4RW5jb2RlO1xuICBwdWJsaWMgc3RyaW5nVG9CdWZmZXIgPSB0aGlzLmJpblRvb2xzLnN0cmluZ1RvQnVmZmVyO1xuICBwdWJsaWMgYnVmZmVyVG9TdHJpbmcgPSB0aGlzLmJpblRvb2xzLmJ1ZmZlclRvU3RyaW5nO1xuICBwdWJsaWMgTm9kZUlEU3RyaW5nVG9CdWZmZXIgPSBOb2RlSURTdHJpbmdUb0J1ZmZlcjtcbiAgcHVibGljIGFkZHJlc3NUb1N0cmluZyA9IHRoaXMuYmluVG9vbHMuYWRkcmVzc1RvU3RyaW5nO1xuXG4gIHB1YmxpYyBpbmNsdWRlSW4od2FsbGV0QWRkcmVzc2VzOiBzdHJpbmdbXSwgb3R4b091dHB1dEFkZHJlc3Nlczogc3RyaW5nW10pOiBib29sZWFuIHtcbiAgICByZXR1cm4gd2FsbGV0QWRkcmVzc2VzLm1hcCgoYSkgPT4gb3R4b091dHB1dEFkZHJlc3Nlcy5pbmNsdWRlcyhhKSkucmVkdWNlKChhLCBiKSA9PiBhICYmIGIsIHRydWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiBpdCBpcyBhIHZhbGlkIGFkZHJlc3Mgbm8gaWxsZWdhbCBjaGFyYWN0ZXJzXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhZGRyZXNzIC0gYWRkcmVzcyB0byBiZSB2YWxpZGF0ZWRcbiAgICogQHJldHVybnMge2Jvb2xlYW59IC0gdGhlIHZhbGlkYXRpb24gcmVzdWx0XG4gICAqL1xuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgaXNWYWxpZEFkZHJlc3MoYWRkcmVzczogc3RyaW5nIHwgc3RyaW5nW10pOiBib29sZWFuIHtcbiAgICBjb25zdCBhZGRyZXNzQXJyOiBzdHJpbmdbXSA9IEFycmF5LmlzQXJyYXkoYWRkcmVzcykgPyBhZGRyZXNzIDogYWRkcmVzcy5zcGxpdCgnficpO1xuXG4gICAgZm9yIChjb25zdCBhZGRyZXNzIG9mIGFkZHJlc3NBcnIpIHtcbiAgICAgIGlmICghdGhpcy5pc1ZhbGlkQWRkcmVzc1JlZ2V4KGFkZHJlc3MpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHByaXZhdGUgaXNWYWxpZEFkZHJlc3NSZWdleChhZGRyZXNzOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gL14oXlB8fE5vZGVJRCktW2EtekEtWjAtOV0rJC8udGVzdChhZGRyZXNzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgaXQgaXMgYSB2YWxpZCBibG9ja0lkIHdpdGggbGVuZ3RoIDY2IGluY2x1ZGluZyAweFxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gaGFzaCAtIGJsb2NrSWQgdG8gYmUgdmFsaWRhdGVkXG4gICAqIEByZXR1cm5zIHtib29sZWFufSAtIHRoZSB2YWxpZGF0aW9uIHJlc3VsdFxuICAgKi9cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIGlzVmFsaWRCbG9ja0lkKGhhc2g6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmJpblRvb2xzLmlzQ0I1OChoYXNoKSAmJiB0aGlzLmJpblRvb2xzLmI1OFRvQnVmZmVyKGhhc2gpLmxlbmd0aCA9PT0gMzY7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIHRoZSBzdHJpbmcgaXMgYSB2YWxpZCBwcm90b2NvbCBwdWJsaWMga2V5IG9yXG4gICAqIGV4dGVuZGVkIHB1YmxpYyBrZXkuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwdWIgLSB0aGUgIHB1YmxpYyBrZXkgdG8gYmUgdmFsaWRhdGVkXG4gICAqIEByZXR1cm5zIHtib29sZWFufSAtIHRoZSB2YWxpZGF0aW9uIHJlc3VsdFxuICAgKi9cbiAgaXNWYWxpZFB1YmxpY0tleShwdWI6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGlmIChpc1ZhbGlkWHB1YihwdWIpKSByZXR1cm4gdHJ1ZTtcblxuICAgIGxldCBwdWJCdWY7XG4gICAgaWYgKHB1Yi5sZW5ndGggPT09IDUwKSB7XG4gICAgICB0cnkge1xuICAgICAgICBwdWJCdWYgPSB1dGlscy5jYjU4RGVjb2RlKHB1Yik7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAocHViLmxlbmd0aCAhPT0gNjYgJiYgcHViLmxlbmd0aCAhPT0gMTMwKSByZXR1cm4gZmFsc2U7XG5cbiAgICAgIGNvbnN0IGZpcnN0Qnl0ZSA9IHB1Yi5zbGljZSgwLCAyKTtcblxuICAgICAgLy8gdW5jb21wcmVzc2VkIHB1YmxpYyBrZXlcbiAgICAgIGlmIChwdWIubGVuZ3RoID09PSAxMzAgJiYgZmlyc3RCeXRlICE9PSAnMDQnKSByZXR1cm4gZmFsc2U7XG5cbiAgICAgIC8vIGNvbXByZXNzZWQgcHVibGljIGtleVxuICAgICAgaWYgKHB1Yi5sZW5ndGggPT09IDY2ICYmIGZpcnN0Qnl0ZSAhPT0gJzAyJyAmJiBmaXJzdEJ5dGUgIT09ICcwMycpIHJldHVybiBmYWxzZTtcblxuICAgICAgaWYgKCF0aGlzLmFsbEhleENoYXJzKHB1YikpIHJldHVybiBmYWxzZTtcblxuICAgICAgcHViQnVmID0gQnVmZmVyQXZheC5mcm9tKHB1YiwgJ2hleCcpO1xuICAgIH1cbiAgICAvLyB2YWxpZGF0ZSB0aGUgcHVibGljIGtleVxuICAgIGNvbnN0IHNlY3AyNTZrMSA9IG5ldyBlYygnc2VjcDI1NmsxJyk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGtleVBhaXIgPSBzZWNwMjU2azEua2V5RnJvbVB1YmxpYyhwdWJCdWYpO1xuICAgICAgY29uc3QgeyByZXN1bHQgfSA9IGtleVBhaXIudmFsaWRhdGUoKTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBwYXJzZUFkZHJlc3MgPSAocHViOiBzdHJpbmcpOiBCdWZmZXJBdmF4ID0+IHRoaXMuYmluVG9vbHMuc3RyaW5nVG9BZGRyZXNzKHB1Yik7XG5cbiAgLyoqXG4gICAqIFJldHVybnMgd2hldGhlciBvciBub3QgdGhlIHN0cmluZyBpcyBhIHZhbGlkIHByb3RvY29sIHByaXZhdGUga2V5LCBvciBleHRlbmRlZFxuICAgKiBwcml2YXRlIGtleS5cbiAgICpcbiAgICogVGhlIHByb3RvY29sIGtleSBmb3JtYXQgaXMgZGVzY3JpYmVkIGluIHRoZSBAc3RhY2tzL3RyYW5zYWN0aW9ucyBucG0gcGFja2FnZSwgaW4gdGhlXG4gICAqIGNyZWF0ZVN0YWNrc1ByaXZhdGVLZXkgZnVuY3Rpb246XG4gICAqIGh0dHBzOi8vZ2l0aHViLmNvbS9ibG9ja3N0YWNrL3N0YWNrcy5qcy9ibG9iL21hc3Rlci9wYWNrYWdlcy90cmFuc2FjdGlvbnMvc3JjL2tleXMudHMjTDEyNVxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcHJ2IC0gdGhlIHByaXZhdGUga2V5IChvciBleHRlbmRlZCBwcml2YXRlIGtleSkgdG8gYmUgdmFsaWRhdGVkXG4gICAqIEByZXR1cm5zIHtib29sZWFufSAtIHRoZSB2YWxpZGF0aW9uIHJlc3VsdFxuICAgKi9cbiAgaXNWYWxpZFByaXZhdGVLZXkocHJ2OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBpZiAoaXNWYWxpZFhwcnYocHJ2KSkgcmV0dXJuIHRydWU7XG5cbiAgICBpZiAocHJ2Lmxlbmd0aCAhPT0gNjQgJiYgcHJ2Lmxlbmd0aCAhPT0gNjYpIHJldHVybiBmYWxzZTtcblxuICAgIGlmIChwcnYubGVuZ3RoID09PSA2NiAmJiBwcnYuc2xpY2UoNjQpICE9PSAnMDEnKSByZXR1cm4gZmFsc2U7XG5cbiAgICByZXR1cm4gdGhpcy5hbGxIZXhDaGFycyhwcnYpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgd2hldGhlciBvciBub3QgdGhlIHN0cmluZyBpcyBhIGNvbXBvc2VkIG9mIGhleCBjaGFycyBvbmx5XG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBtYXliZSAtIHRoZSAgc3RyaW5nIHRvIGJlIHZhbGlkYXRlZFxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gLSB0aGUgdmFsaWRhdGlvbiByZXN1bHRcbiAgICovXG4gIGFsbEhleENoYXJzKG1heWJlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gL14oMHgpezAsMX0oWzAtOWEtZl0pKyQvaS50ZXN0KG1heWJlKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBpc1ZhbGlkU2lnbmF0dXJlKHNpZ25hdHVyZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgdGhyb3cgbmV3IE5vdEltcGxlbWVudGVkRXJyb3IoJ2lzVmFsaWRTaWduYXR1cmUgbm90IGltcGxlbWVudGVkJyk7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgaXNWYWxpZFRyYW5zYWN0aW9uSWQodHhJZDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgdGhyb3cgbmV3IE5vdEltcGxlbWVudGVkRXJyb3IoJ2lzVmFsaWRUcmFuc2FjdGlvbklkIG5vdCBpbXBsZW1lbnRlZCcpO1xuICB9XG5cbiAgZ2V0Q3JlZGVudGlhbHModHg6IEJhc2VUeCk6IENyZWRlbnRpYWxbXSB7XG4gICAgcmV0dXJuIHR4LmdldElucygpLm1hcCgoaW5zKSA9PiBTZWxlY3RDcmVkZW50aWFsQ2xhc3MoaW5zLmdldElucHV0KCkuZ2V0Q3JlZGVudGlhbElEKCkpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBdmF4cCB3cmFwcGVyIHRvIGNyZWF0ZSBzaWduYXR1cmUgYW5kIHJldHVybiBpdCBmb3IgY3JlZGVudGlhbHMgdXNpbmcgQXZhbGFuY2hlJ3MgYnVmZmVyXG4gICAqIEBwYXJhbSBuZXR3b3JrXG4gICAqIEBwYXJhbSBtZXNzYWdlXG4gICAqIEBwYXJhbSBwcnZcbiAgICogQHJldHVybiBzaWduYXR1cmVcbiAgICovXG4gIGNyZWF0ZVNpZ25hdHVyZUF2YXhCdWZmZXIobmV0d29yazogQXZhbGFuY2hlTmV0d29yaywgbWVzc2FnZTogQnVmZmVyQXZheCwgcHJ2OiBCdWZmZXJBdmF4KTogQnVmZmVyQXZheCB7XG4gICAgY29uc3Qga3kgPSBuZXcgS2V5UGFpckF2YXgobmV0d29yay5ocnAsIG5ldHdvcmsubmV0d29ya0lELnRvU3RyaW5nKCkpO1xuICAgIGt5LmltcG9ydEtleShwcnYpO1xuICAgIHJldHVybiBreS5zaWduKG1lc3NhZ2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIEF2YXhwIHdyYXBwZXIgdG8gY3JlYXRlIHNpZ25hdHVyZSBhbmQgcmV0dXJuIGl0IGZvciBjcmVkZW50aWFsc1xuICAgKiBAcGFyYW0gbmV0d29ya1xuICAgKiBAcGFyYW0gbWVzc2FnZVxuICAgKiBAcGFyYW0gcHJ2XG4gICAqIEByZXR1cm4gc2lnbmF0dXJlXG4gICAqL1xuICBjcmVhdGVTaWduYXR1cmUobmV0d29yazogQXZhbGFuY2hlTmV0d29yaywgbWVzc2FnZTogQnVmZmVyLCBwcnY6IEJ1ZmZlcik6IEJ1ZmZlciB7XG4gICAgcmV0dXJuIEJ1ZmZlci5mcm9tKHRoaXMuY3JlYXRlU2lnbmF0dXJlQXZheEJ1ZmZlcihuZXR3b3JrLCBCdWZmZXJBdmF4LmZyb20obWVzc2FnZSksIEJ1ZmZlckF2YXguZnJvbShwcnYpKSk7XG4gIH1cblxuICAvKipcbiAgICogQXZheHAgd3JhcHBlciB0byB2ZXJpZnkgc2lnbmF0dXJlIHVzaW5nIEF2YWxhbmNoZSdzIGJ1ZmZlclxuICAgKiBAcGFyYW0gbmV0d29ya1xuICAgKiBAcGFyYW0gbWVzc2FnZVxuICAgKiBAcGFyYW0gc2lnbmF0dXJlXG4gICAqIEBwYXJhbSBwcnZcbiAgICogQHJldHVybiB0cnVlIGlmIGl0J3MgdmVyaWZ5IHN1Y2Nlc3NmdWxcbiAgICovXG4gIHZlcmlmeVNpZ25hdHVyZUF2YXhCdWZmZXIoXG4gICAgbmV0d29yazogQXZhbGFuY2hlTmV0d29yayxcbiAgICBtZXNzYWdlOiBCdWZmZXJBdmF4LFxuICAgIHNpZ25hdHVyZTogQnVmZmVyQXZheCxcbiAgICBwcnY6IEJ1ZmZlckF2YXhcbiAgKTogYm9vbGVhbiB7XG4gICAgY29uc3Qga3kgPSBuZXcgS2V5UGFpckF2YXgobmV0d29yay5ocnAsIG5ldHdvcmsubmV0d29ya0lELnRvU3RyaW5nKCkpO1xuICAgIGt5LmltcG9ydEtleShwcnYpO1xuICAgIHJldHVybiBreS52ZXJpZnkobWVzc2FnZSwgc2lnbmF0dXJlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBdmF4cCB3cmFwcGVyIHRvIHZlcmlmeSBzaWduYXR1cmVcbiAgICogQHBhcmFtIG5ldHdvcmtcbiAgICogQHBhcmFtIG1lc3NhZ2VcbiAgICogQHBhcmFtIHNpZ25hdHVyZVxuICAgKiBAcGFyYW0gcHJ2XG4gICAqIEByZXR1cm4gdHJ1ZSBpZiBpdCdzIHZlcmlmeSBzdWNjZXNzZnVsXG4gICAqL1xuICB2ZXJpZnlTaWduYXR1cmUobmV0d29yazogQXZhbGFuY2hlTmV0d29yaywgbWVzc2FnZTogQnVmZmVyLCBzaWduYXR1cmU6IEJ1ZmZlciwgcHJ2OiBCdWZmZXIpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy52ZXJpZnlTaWduYXR1cmVBdmF4QnVmZmVyKFxuICAgICAgbmV0d29yayxcbiAgICAgIEJ1ZmZlckF2YXguZnJvbShtZXNzYWdlKSxcbiAgICAgIEJ1ZmZlckF2YXguZnJvbShzaWduYXR1cmUpLFxuICAgICAgQnVmZmVyQXZheC5mcm9tKHBydilcbiAgICApO1xuICB9XG5cbiAgY3JlYXRlU2lnKHNpZ0hleDogc3RyaW5nKTogU2lnbmF0dXJlIHtcbiAgICBjb25zdCBzaWcgPSBuZXcgU2lnbmF0dXJlKCk7XG4gICAgc2lnLmZyb21CdWZmZXIoQnVmZmVyQXZheC5mcm9tKHNpZ0hleC5wYWRTdGFydCgxMzAsICcwJyksICdoZXgnKSk7XG4gICAgcmV0dXJuIHNpZztcbiAgfVxuXG4gIC8qKlxuICAgKiBBdmF4cCB3cmFwcGVyIHRvIHJlY292ZXJ5IHNpZ25hdHVyZSB1c2luZyBBdmFsYW5jaGUncyBidWZmZXJcbiAgICogQHBhcmFtIG5ldHdvcmtcbiAgICogQHBhcmFtIG1lc3NhZ2VcbiAgICogQHBhcmFtIHNpZ25hdHVyZVxuICAgKiBAcmV0dXJuXG4gICAqL1xuICByZWNvdmVyeVNpZ25hdHVyZUF2YXhCdWZmZXIobmV0d29yazogQXZhbGFuY2hlTmV0d29yaywgbWVzc2FnZTogQnVmZmVyQXZheCwgc2lnbmF0dXJlOiBCdWZmZXJBdmF4KTogQnVmZmVyQXZheCB7XG4gICAgY29uc3Qga3kgPSBuZXcgS2V5UGFpckF2YXgobmV0d29yay5ocnAsIG5ldHdvcmsubmV0d29ya0lELnRvU3RyaW5nKCkpO1xuICAgIHJldHVybiBreS5yZWNvdmVyKG1lc3NhZ2UsIHNpZ25hdHVyZSk7XG4gIH1cblxuICAvKipcbiAgICogQXZheHAgd3JhcHBlciB0byB2ZXJpZnkgc2lnbmF0dXJlXG4gICAqIEBwYXJhbSBuZXR3b3JrXG4gICAqIEBwYXJhbSBtZXNzYWdlXG4gICAqIEBwYXJhbSBzaWduYXR1cmVcbiAgICogQHJldHVybiB0cnVlIGlmIGl0J3MgdmVyaWZ5IHN1Y2Nlc3NmdWxcbiAgICovXG4gIHJlY292ZXJ5U2lnbmF0dXJlKG5ldHdvcms6IEF2YWxhbmNoZU5ldHdvcmssIG1lc3NhZ2U6IEJ1ZmZlciwgc2lnbmF0dXJlOiBCdWZmZXIpOiBCdWZmZXIge1xuICAgIHJldHVybiBCdWZmZXIuZnJvbSh0aGlzLnJlY292ZXJ5U2lnbmF0dXJlQXZheEJ1ZmZlcihuZXR3b3JrLCBCdWZmZXJBdmF4LmZyb20obWVzc2FnZSksIEJ1ZmZlckF2YXguZnJvbShzaWduYXR1cmUpKSk7XG4gIH1cblxuICBzaGEyNTYoYnVmOiBVaW50OEFycmF5KTogQnVmZmVyIHtcbiAgICByZXR1cm4gY3JlYXRlSGFzaC5kZWZhdWx0KCdzaGEyNTYnKS51cGRhdGUoYnVmKS5kaWdlc3QoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayB0aGUgcmF3IHRyYW5zYWN0aW9uIGhhcyBhIHZhbGlkIGZvcm1hdCBpbiB0aGUgYmxvY2tjaGFpbiBjb250ZXh0LCB0aHJvdyBvdGhlcndpc2UuXG4gICAqIEl0J3MgdG8gcmV1c2UgaW4gVHJhbnNhY3Rpb25CdWlsZGVyIGFuZCBUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5XG4gICAqXG4gICAqIEBwYXJhbSByYXdUcmFuc2FjdGlvbiBUcmFuc2FjdGlvbiBhcyBoZXggc3RyaW5nXG4gICAqL1xuICB2YWxpZGF0ZVJhd1RyYW5zYWN0aW9uKHJhd1RyYW5zYWN0aW9uOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoIXJhd1RyYW5zYWN0aW9uKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IoJ1JhdyB0cmFuc2FjdGlvbiBpcyBlbXB0eScpO1xuICAgIH1cbiAgICBpZiAoIXV0aWxzLmFsbEhleENoYXJzKHJhd1RyYW5zYWN0aW9uKSkge1xuICAgICAgdGhyb3cgbmV3IFBhcnNlVHJhbnNhY3Rpb25FcnJvcignUmF3IHRyYW5zYWN0aW9uIGlzIG5vdCBoZXggc3RyaW5nJyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIHR4IGlzIGZvciB0aGUgYmxvY2tjaGFpbklkXG4gICAqXG4gICAqIEBwYXJhbSB7RGVwcmVjYXRlZFR4fSB0eFxuICAgKiBAcGFyYW0ge3N0cmluZ30gYmxvY2tjaGFpbklkXG4gICAqIEByZXR1cm5zIHRydWUgaWYgdHggaXMgZm9yIGJsb2NrY2hhaW5JZFxuICAgKi9cbiAgaXNUcmFuc2FjdGlvbk9mKHR4OiBEZXByZWNhdGVkVHgsIGJsb2NrY2hhaW5JZDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHV0aWxzLmNiNThFbmNvZGUodHguZ2V0VW5zaWduZWRUeCgpLmdldFRyYW5zYWN0aW9uKCkuZ2V0QmxvY2tjaGFpbklEKCkpID09PSBibG9ja2NoYWluSWQ7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgT3V0cHV0IGlzIGZyb20gUFZNLlxuICAgKiBPdXRwdXQgY291bGQgYmUgRVZNIG9yIFBWTSBvdXRwdXQuXG4gICAqIEBwYXJhbSB7T3V0cHV0fSBvdXRwdXRcbiAgICogQHJldHVybnMge2Jvb2xlYW59IG91dHB1dCBpcyBUcmFuc2ZlcmFibGVPdXRwdXRcbiAgICovXG4gIGlzVHJhbnNmZXJhYmxlT3V0cHV0KG91dHB1dDogT3V0cHV0KTogb3V0cHV0IGlzIFRyYW5zZmVyYWJsZU91dHB1dCB7XG4gICAgcmV0dXJuICdnZXRPdXRwdXQnIGluIG91dHB1dDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYSBtYXBwZXIgZnVuY3Rpb24gdG8gdGhhdCBuZXR3b3JrIGFkZHJlc3MgcmVwcmVzZW50YXRpb24uXG4gICAqIEBwYXJhbSBuZXR3b3JrIHJlcXVpcmVkIHRvIHN0cmluZ2lmeSBhZGRyZXNzZXNcbiAgICogQHJldHVybiBtYXBwZXIgZnVuY3Rpb25cbiAgICovXG4gIG1hcE91dHB1dFRvRW50cnkobmV0d29yazogQXZhbGFuY2hlTmV0d29yayk6IChPdXRwdXQpID0+IEVudHJ5IHtcbiAgICByZXR1cm4gKG91dHB1dDogT3V0cHV0KSA9PiB7XG4gICAgICBpZiAodGhpcy5pc1RyYW5zZmVyYWJsZU91dHB1dChvdXRwdXQpKSB7XG4gICAgICAgIGNvbnN0IGFtb3VudE91dHB1dCA9IG91dHB1dC5nZXRPdXRwdXQoKSBhcyBBbW91bnRPdXRwdXQ7XG4gICAgICAgIGNvbnN0IGFkZHJlc3MgPSBhbW91bnRPdXRwdXRcbiAgICAgICAgICAuZ2V0QWRkcmVzc2VzKClcbiAgICAgICAgICAubWFwKChhKSA9PiB0aGlzLmFkZHJlc3NUb1N0cmluZyhuZXR3b3JrLmhycCwgbmV0d29yay5hbGlhcywgYSkpXG4gICAgICAgICAgLnNvcnQoKVxuICAgICAgICAgIC5qb2luKEFERFJFU1NfU0VQQVJBVE9SKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB2YWx1ZTogYW1vdW50T3V0cHV0LmdldEFtb3VudCgpLnRvU3RyaW5nKCksXG4gICAgICAgICAgYWRkcmVzcyxcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGV2bU91dHB1dCA9IG91dHB1dCBhcyBFVk1PdXRwdXQ7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLy8gaXQgc2hvdWxkIGJlIGV2bU91cHV0LmdldEFtb3VudCgpLCBidXQgaXQgcmV0dXJucyBhIDAuXG4gICAgICAgICAgdmFsdWU6IG5ldyBCTigoZXZtT3V0cHV0IGFzIGFueSkuYW1vdW50KS50b1N0cmluZygpLFxuICAgICAgICAgIC8vIEMtQ2hhaW4gYWRkcmVzcy5cbiAgICAgICAgICBhZGRyZXNzOiAnMHgnICsgZXZtT3V0cHV0LmdldEFkZHJlc3NTdHJpbmcoKSxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIHJlbW92ZSBoZXggcHJlZml4ICgweClcbiAgICogQHBhcmFtIGhleCBzdHJpbmdcbiAgICogQHJldHVybnMgaGV4IHdpdGhvdXQgMHhcbiAgICovXG4gIHJlbW92ZUhleFByZWZpeChoZXg6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKGhleC5zdGFydHNXaXRoKCcweCcpKSB7XG4gICAgICByZXR1cm4gaGV4LnN1YnN0cmluZygyKTtcbiAgICB9XG4gICAgcmV0dXJuIGhleDtcbiAgfVxuXG4gIC8qKlxuICAgKiBPdXRwdXRpZHggY29udmVydCBmcm9tIG51bWJlciAoYXMgc3RyaW5nKSB0byBidWZmZXIuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBvdXRwdXRpZHggbnVtYmVyXG4gICAqIEByZXR1cm4ge0J1ZmZlckF2YXh9IGJ1ZmZlciBvZiBzaXplIDQgd2l0aCB0aGF0IG51bWJlciB2YWx1ZVxuICAgKi9cbiAgb3V0cHV0aWR4TnVtYmVyVG9CdWZmZXIob3V0cHV0aWR4OiBzdHJpbmcpOiBCdWZmZXJBdmF4IHtcbiAgICByZXR1cm4gQnVmZmVyQXZheC5mcm9tKE51bWJlcihvdXRwdXRpZHgpLnRvU3RyaW5nKDE2KS5wYWRTdGFydCg4LCAnMCcpLCAnaGV4Jyk7XG4gIH1cblxuICAvKipcbiAgICogT3V0cHV0aWR4IGJ1ZmZlciB0byBudW1iZXIgKGFzIHN0cmluZylcbiAgICogQHBhcmFtIHtCdWZmZXJBdmF4fSBvdXRwdXRpZHhcbiAgICogQHJldHVybiB7c3RyaW5nfSBvdXRwdXRpZHggbnVtYmVyXG4gICAqL1xuICBvdXRwdXRpZHhCdWZmZXJUb051bWJlcihvdXRwdXRpZHg6IEJ1ZmZlckF2YXgpOiBzdHJpbmcge1xuICAgIHJldHVybiBwYXJzZUludChvdXRwdXRpZHgudG9TdHJpbmcoJ2hleCcpLCAxNikudG9TdHJpbmcoKTtcbiAgfVxufVxuXG5jb25zdCB1dGlscyA9IG5ldyBVdGlscygpO1xuXG5leHBvcnQgZGVmYXVsdCB1dGlscztcbiJdfQ==
370
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsb0RBQWlIO0FBQ2pILDhDQVF5QjtBQUV6Qix5Q0FBK0Q7QUFFL0QsK0RBS3dDO0FBQ3hDLHNFQUFpRjtBQUNqRixrREFBa0Q7QUFFbEQsZ0RBQTREO0FBQzVELHdEQUEwQztBQUMxQyx1Q0FBOEI7QUFDOUIsbUNBQW9GO0FBRXBGLE1BQWEsS0FBSztJQUFsQjtRQUNVLGFBQVEsR0FBRyxvQkFBUSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ25DLGVBQVUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQztRQUN0QyxlQUFVLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUM7UUFDdEMsbUJBQWMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQztRQUM5QyxtQkFBYyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDO1FBQzlDLHlCQUFvQixHQUFHLDRCQUFvQixDQUFDO1FBQzVDLG9CQUFlLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUM7UUFtRmhELGlCQUFZLEdBQUcsQ0FBQyxHQUFXLEVBQWMsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBa1J4RixDQUFDO0lBbldRLFNBQVMsQ0FBQyxlQUF5QixFQUFFLG1CQUE2QjtRQUN2RSxPQUFPLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLG1CQUFtQixDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLENB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QUFDO1NBQ3pCO1FBQ0QsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILHVCQUF1QixDQUFDLFNBQWlCO1FBQ3ZDLE9BQU8sa0JBQVUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ2pGLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsdUJBQXVCLENBQUMsU0FBcUI7UUFDM0MsT0FBTyxRQUFRLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUM1RCxDQUFDO0NBQ0Y7QUE1V0Qsc0JBNFdDO0FBRUQsTUFBTSxLQUFLLEdBQUcsSUFBSSxLQUFLLEVBQUUsQ0FBQztBQUUxQixrQkFBZSxLQUFLLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTaWduYXR1cmUgYXMgQXZheFNpZ25hdHVyZSwgVHJhbnNmZXJhYmxlT3V0cHV0LCBUcmFuc2Zlck91dHB1dCwgVHlwZVN5bWJvbHMgfSBmcm9tICdAYml0Z28vYXZhbGFuY2hlanMnO1xuaW1wb3J0IHtcbiAgQmFzZVV0aWxzLFxuICBFbnRyeSxcbiAgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IsXG4gIGlzVmFsaWRYcHJ2LFxuICBpc1ZhbGlkWHB1YixcbiAgTm90SW1wbGVtZW50ZWRFcnJvcixcbiAgUGFyc2VUcmFuc2FjdGlvbkVycm9yLFxufSBmcm9tICdAYml0Z28vc2RrLWNvcmUnO1xuaW1wb3J0IHsgQXZhbGFuY2hlTmV0d29yayB9IGZyb20gJ0BiaXRnby9zdGF0aWNzJztcbmltcG9ydCB7IEJpblRvb2xzLCBCTiwgQnVmZmVyIGFzIEJ1ZmZlckF2YXggfSBmcm9tICdhdmFsYW5jaGUnO1xuaW1wb3J0IHsgRVZNT3V0cHV0IH0gZnJvbSAnYXZhbGFuY2hlL2Rpc3QvYXBpcy9ldm0nO1xuaW1wb3J0IHtcbiAgQW1vdW50T3V0cHV0LFxuICBCYXNlVHgsXG4gIFRyYW5zZmVyYWJsZU91dHB1dCBhcyBEZXByZWNhdGVkVHJhbnNmZXJhYmxlT3V0cHV0LFxuICBTZWxlY3RDcmVkZW50aWFsQ2xhc3MsXG59IGZyb20gJ2F2YWxhbmNoZS9kaXN0L2FwaXMvcGxhdGZvcm12bSc7XG5pbXBvcnQgeyBLZXlQYWlyIGFzIEtleVBhaXJBdmF4IH0gZnJvbSAnYXZhbGFuY2hlL2Rpc3QvYXBpcy9wbGF0Zm9ybXZtL2tleWNoYWluJztcbmltcG9ydCB7IFNpZ25hdHVyZSB9IGZyb20gJ2F2YWxhbmNoZS9kaXN0L2NvbW1vbic7XG5pbXBvcnQgeyBDcmVkZW50aWFsIH0gZnJvbSAnYXZhbGFuY2hlL2Rpc3QvY29tbW9uL2NyZWRlbnRpYWxzJztcbmltcG9ydCB7IE5vZGVJRFN0cmluZ1RvQnVmZmVyIH0gZnJvbSAnYXZhbGFuY2hlL2Rpc3QvdXRpbHMnO1xuaW1wb3J0ICogYXMgY3JlYXRlSGFzaCBmcm9tICdjcmVhdGUtaGFzaCc7XG5pbXBvcnQgeyBlYyB9IGZyb20gJ2VsbGlwdGljJztcbmltcG9ydCB7IEFERFJFU1NfU0VQQVJBVE9SLCBEZXByZWNhdGVkT3V0cHV0LCBEZXByZWNhdGVkVHgsIE91dHB1dCB9IGZyb20gJy4vaWZhY2UnO1xuXG5leHBvcnQgY2xhc3MgVXRpbHMgaW1wbGVtZW50cyBCYXNlVXRpbHMge1xuICBwcml2YXRlIGJpblRvb2xzID0gQmluVG9vbHMuZ2V0SW5zdGFuY2UoKTtcbiAgcHVibGljIGNiNThEZWNvZGUgPSB0aGlzLmJpblRvb2xzLmNiNThEZWNvZGU7XG4gIHB1YmxpYyBjYjU4RW5jb2RlID0gdGhpcy5iaW5Ub29scy5jYjU4RW5jb2RlO1xuICBwdWJsaWMgc3RyaW5nVG9CdWZmZXIgPSB0aGlzLmJpblRvb2xzLnN0cmluZ1RvQnVmZmVyO1xuICBwdWJsaWMgYnVmZmVyVG9TdHJpbmcgPSB0aGlzLmJpblRvb2xzLmJ1ZmZlclRvU3RyaW5nO1xuICBwdWJsaWMgTm9kZUlEU3RyaW5nVG9CdWZmZXIgPSBOb2RlSURTdHJpbmdUb0J1ZmZlcjtcbiAgcHVibGljIGFkZHJlc3NUb1N0cmluZyA9IHRoaXMuYmluVG9vbHMuYWRkcmVzc1RvU3RyaW5nO1xuXG4gIHB1YmxpYyBpbmNsdWRlSW4od2FsbGV0QWRkcmVzc2VzOiBzdHJpbmdbXSwgb3R4b091dHB1dEFkZHJlc3Nlczogc3RyaW5nW10pOiBib29sZWFuIHtcbiAgICByZXR1cm4gd2FsbGV0QWRkcmVzc2VzLm1hcCgoYSkgPT4gb3R4b091dHB1dEFkZHJlc3Nlcy5pbmNsdWRlcyhhKSkucmVkdWNlKChhLCBiKSA9PiBhICYmIGIsIHRydWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiBpdCBpcyBhIHZhbGlkIGFkZHJlc3Mgbm8gaWxsZWdhbCBjaGFyYWN0ZXJzXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhZGRyZXNzIC0gYWRkcmVzcyB0byBiZSB2YWxpZGF0ZWRcbiAgICogQHJldHVybnMge2Jvb2xlYW59IC0gdGhlIHZhbGlkYXRpb24gcmVzdWx0XG4gICAqL1xuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgaXNWYWxpZEFkZHJlc3MoYWRkcmVzczogc3RyaW5nIHwgc3RyaW5nW10pOiBib29sZWFuIHtcbiAgICBjb25zdCBhZGRyZXNzQXJyOiBzdHJpbmdbXSA9IEFycmF5LmlzQXJyYXkoYWRkcmVzcykgPyBhZGRyZXNzIDogYWRkcmVzcy5zcGxpdCgnficpO1xuXG4gICAgZm9yIChjb25zdCBhZGRyZXNzIG9mIGFkZHJlc3NBcnIpIHtcbiAgICAgIGlmICghdGhpcy5pc1ZhbGlkQWRkcmVzc1JlZ2V4KGFkZHJlc3MpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHByaXZhdGUgaXNWYWxpZEFkZHJlc3NSZWdleChhZGRyZXNzOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gL14oXlB8fE5vZGVJRCktW2EtekEtWjAtOV0rJC8udGVzdChhZGRyZXNzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgaXQgaXMgYSB2YWxpZCBibG9ja0lkIHdpdGggbGVuZ3RoIDY2IGluY2x1ZGluZyAweFxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gaGFzaCAtIGJsb2NrSWQgdG8gYmUgdmFsaWRhdGVkXG4gICAqIEByZXR1cm5zIHtib29sZWFufSAtIHRoZSB2YWxpZGF0aW9uIHJlc3VsdFxuICAgKi9cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIGlzVmFsaWRCbG9ja0lkKGhhc2g6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmJpblRvb2xzLmlzQ0I1OChoYXNoKSAmJiB0aGlzLmJpblRvb2xzLmI1OFRvQnVmZmVyKGhhc2gpLmxlbmd0aCA9PT0gMzY7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIHRoZSBzdHJpbmcgaXMgYSB2YWxpZCBwcm90b2NvbCBwdWJsaWMga2V5IG9yXG4gICAqIGV4dGVuZGVkIHB1YmxpYyBrZXkuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwdWIgLSB0aGUgIHB1YmxpYyBrZXkgdG8gYmUgdmFsaWRhdGVkXG4gICAqIEByZXR1cm5zIHtib29sZWFufSAtIHRoZSB2YWxpZGF0aW9uIHJlc3VsdFxuICAgKi9cbiAgaXNWYWxpZFB1YmxpY0tleShwdWI6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGlmIChpc1ZhbGlkWHB1YihwdWIpKSByZXR1cm4gdHJ1ZTtcblxuICAgIGxldCBwdWJCdWY7XG4gICAgaWYgKHB1Yi5sZW5ndGggPT09IDUwKSB7XG4gICAgICB0cnkge1xuICAgICAgICBwdWJCdWYgPSB1dGlscy5jYjU4RGVjb2RlKHB1Yik7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAocHViLmxlbmd0aCAhPT0gNjYgJiYgcHViLmxlbmd0aCAhPT0gMTMwKSByZXR1cm4gZmFsc2U7XG5cbiAgICAgIGNvbnN0IGZpcnN0Qnl0ZSA9IHB1Yi5zbGljZSgwLCAyKTtcblxuICAgICAgLy8gdW5jb21wcmVzc2VkIHB1YmxpYyBrZXlcbiAgICAgIGlmIChwdWIubGVuZ3RoID09PSAxMzAgJiYgZmlyc3RCeXRlICE9PSAnMDQnKSByZXR1cm4gZmFsc2U7XG5cbiAgICAgIC8vIGNvbXByZXNzZWQgcHVibGljIGtleVxuICAgICAgaWYgKHB1Yi5sZW5ndGggPT09IDY2ICYmIGZpcnN0Qnl0ZSAhPT0gJzAyJyAmJiBmaXJzdEJ5dGUgIT09ICcwMycpIHJldHVybiBmYWxzZTtcblxuICAgICAgaWYgKCF0aGlzLmFsbEhleENoYXJzKHB1YikpIHJldHVybiBmYWxzZTtcblxuICAgICAgcHViQnVmID0gQnVmZmVyQXZheC5mcm9tKHB1YiwgJ2hleCcpO1xuICAgIH1cbiAgICAvLyB2YWxpZGF0ZSB0aGUgcHVibGljIGtleVxuICAgIGNvbnN0IHNlY3AyNTZrMSA9IG5ldyBlYygnc2VjcDI1NmsxJyk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGtleVBhaXIgPSBzZWNwMjU2azEua2V5RnJvbVB1YmxpYyhwdWJCdWYpO1xuICAgICAgY29uc3QgeyByZXN1bHQgfSA9IGtleVBhaXIudmFsaWRhdGUoKTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBwYXJzZUFkZHJlc3MgPSAocHViOiBzdHJpbmcpOiBCdWZmZXJBdmF4ID0+IHRoaXMuYmluVG9vbHMuc3RyaW5nVG9BZGRyZXNzKHB1Yik7XG5cbiAgLyoqXG4gICAqIFJldHVybnMgd2hldGhlciBvciBub3QgdGhlIHN0cmluZyBpcyBhIHZhbGlkIHByb3RvY29sIHByaXZhdGUga2V5LCBvciBleHRlbmRlZFxuICAgKiBwcml2YXRlIGtleS5cbiAgICpcbiAgICogVGhlIHByb3RvY29sIGtleSBmb3JtYXQgaXMgZGVzY3JpYmVkIGluIHRoZSBAc3RhY2tzL3RyYW5zYWN0aW9ucyBucG0gcGFja2FnZSwgaW4gdGhlXG4gICAqIGNyZWF0ZVN0YWNrc1ByaXZhdGVLZXkgZnVuY3Rpb246XG4gICAqIGh0dHBzOi8vZ2l0aHViLmNvbS9ibG9ja3N0YWNrL3N0YWNrcy5qcy9ibG9iL21hc3Rlci9wYWNrYWdlcy90cmFuc2FjdGlvbnMvc3JjL2tleXMudHMjTDEyNVxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcHJ2IC0gdGhlIHByaXZhdGUga2V5IChvciBleHRlbmRlZCBwcml2YXRlIGtleSkgdG8gYmUgdmFsaWRhdGVkXG4gICAqIEByZXR1cm5zIHtib29sZWFufSAtIHRoZSB2YWxpZGF0aW9uIHJlc3VsdFxuICAgKi9cbiAgaXNWYWxpZFByaXZhdGVLZXkocHJ2OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBpZiAoaXNWYWxpZFhwcnYocHJ2KSkgcmV0dXJuIHRydWU7XG5cbiAgICBpZiAocHJ2Lmxlbmd0aCAhPT0gNjQgJiYgcHJ2Lmxlbmd0aCAhPT0gNjYpIHJldHVybiBmYWxzZTtcblxuICAgIGlmIChwcnYubGVuZ3RoID09PSA2NiAmJiBwcnYuc2xpY2UoNjQpICE9PSAnMDEnKSByZXR1cm4gZmFsc2U7XG5cbiAgICByZXR1cm4gdGhpcy5hbGxIZXhDaGFycyhwcnYpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgd2hldGhlciBvciBub3QgdGhlIHN0cmluZyBpcyBhIGNvbXBvc2VkIG9mIGhleCBjaGFycyBvbmx5XG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBtYXliZSAtIHRoZSAgc3RyaW5nIHRvIGJlIHZhbGlkYXRlZFxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gLSB0aGUgdmFsaWRhdGlvbiByZXN1bHRcbiAgICovXG4gIGFsbEhleENoYXJzKG1heWJlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gL14oMHgpezAsMX0oWzAtOWEtZl0pKyQvaS50ZXN0KG1heWJlKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBpc1ZhbGlkU2lnbmF0dXJlKHNpZ25hdHVyZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgdGhyb3cgbmV3IE5vdEltcGxlbWVudGVkRXJyb3IoJ2lzVmFsaWRTaWduYXR1cmUgbm90IGltcGxlbWVudGVkJyk7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgaXNWYWxpZFRyYW5zYWN0aW9uSWQodHhJZDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgdGhyb3cgbmV3IE5vdEltcGxlbWVudGVkRXJyb3IoJ2lzVmFsaWRUcmFuc2FjdGlvbklkIG5vdCBpbXBsZW1lbnRlZCcpO1xuICB9XG5cbiAgZ2V0Q3JlZGVudGlhbHModHg6IEJhc2VUeCk6IENyZWRlbnRpYWxbXSB7XG4gICAgcmV0dXJuIHR4LmdldElucygpLm1hcCgoaW5zKSA9PiBTZWxlY3RDcmVkZW50aWFsQ2xhc3MoaW5zLmdldElucHV0KCkuZ2V0Q3JlZGVudGlhbElEKCkpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBdmF4cCB3cmFwcGVyIHRvIGNyZWF0ZSBzaWduYXR1cmUgYW5kIHJldHVybiBpdCBmb3IgY3JlZGVudGlhbHMgdXNpbmcgQXZhbGFuY2hlJ3MgYnVmZmVyXG4gICAqIEBwYXJhbSBuZXR3b3JrXG4gICAqIEBwYXJhbSBtZXNzYWdlXG4gICAqIEBwYXJhbSBwcnZcbiAgICogQHJldHVybiBzaWduYXR1cmVcbiAgICovXG4gIGNyZWF0ZVNpZ25hdHVyZUF2YXhCdWZmZXIobmV0d29yazogQXZhbGFuY2hlTmV0d29yaywgbWVzc2FnZTogQnVmZmVyQXZheCwgcHJ2OiBCdWZmZXJBdmF4KTogQnVmZmVyQXZheCB7XG4gICAgY29uc3Qga3kgPSBuZXcgS2V5UGFpckF2YXgobmV0d29yay5ocnAsIG5ldHdvcmsubmV0d29ya0lELnRvU3RyaW5nKCkpO1xuICAgIGt5LmltcG9ydEtleShwcnYpO1xuICAgIHJldHVybiBreS5zaWduKG1lc3NhZ2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIEF2YXhwIHdyYXBwZXIgdG8gY3JlYXRlIHNpZ25hdHVyZSBhbmQgcmV0dXJuIGl0IGZvciBjcmVkZW50aWFsc1xuICAgKiBAcGFyYW0gbmV0d29ya1xuICAgKiBAcGFyYW0gbWVzc2FnZVxuICAgKiBAcGFyYW0gcHJ2XG4gICAqIEByZXR1cm4gc2lnbmF0dXJlXG4gICAqL1xuICBjcmVhdGVTaWduYXR1cmUobmV0d29yazogQXZhbGFuY2hlTmV0d29yaywgbWVzc2FnZTogQnVmZmVyLCBwcnY6IEJ1ZmZlcik6IEJ1ZmZlciB7XG4gICAgcmV0dXJuIEJ1ZmZlci5mcm9tKHRoaXMuY3JlYXRlU2lnbmF0dXJlQXZheEJ1ZmZlcihuZXR3b3JrLCBCdWZmZXJBdmF4LmZyb20obWVzc2FnZSksIEJ1ZmZlckF2YXguZnJvbShwcnYpKSk7XG4gIH1cblxuICAvKipcbiAgICogQXZheHAgd3JhcHBlciB0byB2ZXJpZnkgc2lnbmF0dXJlIHVzaW5nIEF2YWxhbmNoZSdzIGJ1ZmZlclxuICAgKiBAcGFyYW0gbmV0d29ya1xuICAgKiBAcGFyYW0gbWVzc2FnZVxuICAgKiBAcGFyYW0gc2lnbmF0dXJlXG4gICAqIEBwYXJhbSBwcnZcbiAgICogQHJldHVybiB0cnVlIGlmIGl0J3MgdmVyaWZ5IHN1Y2Nlc3NmdWxcbiAgICovXG4gIHZlcmlmeVNpZ25hdHVyZUF2YXhCdWZmZXIoXG4gICAgbmV0d29yazogQXZhbGFuY2hlTmV0d29yayxcbiAgICBtZXNzYWdlOiBCdWZmZXJBdmF4LFxuICAgIHNpZ25hdHVyZTogQnVmZmVyQXZheCxcbiAgICBwcnY6IEJ1ZmZlckF2YXhcbiAgKTogYm9vbGVhbiB7XG4gICAgY29uc3Qga3kgPSBuZXcgS2V5UGFpckF2YXgobmV0d29yay5ocnAsIG5ldHdvcmsubmV0d29ya0lELnRvU3RyaW5nKCkpO1xuICAgIGt5LmltcG9ydEtleShwcnYpO1xuICAgIHJldHVybiBreS52ZXJpZnkobWVzc2FnZSwgc2lnbmF0dXJlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBdmF4cCB3cmFwcGVyIHRvIHZlcmlmeSBzaWduYXR1cmVcbiAgICogQHBhcmFtIG5ldHdvcmtcbiAgICogQHBhcmFtIG1lc3NhZ2VcbiAgICogQHBhcmFtIHNpZ25hdHVyZVxuICAgKiBAcGFyYW0gcHJ2XG4gICAqIEByZXR1cm4gdHJ1ZSBpZiBpdCdzIHZlcmlmeSBzdWNjZXNzZnVsXG4gICAqL1xuICB2ZXJpZnlTaWduYXR1cmUobmV0d29yazogQXZhbGFuY2hlTmV0d29yaywgbWVzc2FnZTogQnVmZmVyLCBzaWduYXR1cmU6IEJ1ZmZlciwgcHJ2OiBCdWZmZXIpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy52ZXJpZnlTaWduYXR1cmVBdmF4QnVmZmVyKFxuICAgICAgbmV0d29yayxcbiAgICAgIEJ1ZmZlckF2YXguZnJvbShtZXNzYWdlKSxcbiAgICAgIEJ1ZmZlckF2YXguZnJvbShzaWduYXR1cmUpLFxuICAgICAgQnVmZmVyQXZheC5mcm9tKHBydilcbiAgICApO1xuICB9XG5cbiAgY3JlYXRlU2lnKHNpZ0hleDogc3RyaW5nKTogU2lnbmF0dXJlIHtcbiAgICBjb25zdCBzaWcgPSBuZXcgU2lnbmF0dXJlKCk7XG4gICAgc2lnLmZyb21CdWZmZXIoQnVmZmVyQXZheC5mcm9tKHNpZ0hleC5wYWRTdGFydCgxMzAsICcwJyksICdoZXgnKSk7XG4gICAgcmV0dXJuIHNpZztcbiAgfVxuXG4gIGNyZWF0ZU5ld1NpZyhzaWdIZXg6IHN0cmluZyk6IEF2YXhTaWduYXR1cmUge1xuICAgIGNvbnN0IGJ1ZmZlciA9IEJ1ZmZlckF2YXguZnJvbShzaWdIZXgucGFkU3RhcnQoMTMwLCAnMCcpLCAnaGV4Jyk7XG4gICAgcmV0dXJuIG5ldyBBdmF4U2lnbmF0dXJlKGJ1ZmZlcik7XG4gIH1cblxuICAvKipcbiAgICogQXZheHAgd3JhcHBlciB0byByZWNvdmVyeSBzaWduYXR1cmUgdXNpbmcgQXZhbGFuY2hlJ3MgYnVmZmVyXG4gICAqIEBwYXJhbSBuZXR3b3JrXG4gICAqIEBwYXJhbSBtZXNzYWdlXG4gICAqIEBwYXJhbSBzaWduYXR1cmVcbiAgICogQHJldHVyblxuICAgKi9cbiAgcmVjb3ZlcnlTaWduYXR1cmVBdmF4QnVmZmVyKG5ldHdvcms6IEF2YWxhbmNoZU5ldHdvcmssIG1lc3NhZ2U6IEJ1ZmZlckF2YXgsIHNpZ25hdHVyZTogQnVmZmVyQXZheCk6IEJ1ZmZlckF2YXgge1xuICAgIGNvbnN0IGt5ID0gbmV3IEtleVBhaXJBdmF4KG5ldHdvcmsuaHJwLCBuZXR3b3JrLm5ldHdvcmtJRC50b1N0cmluZygpKTtcbiAgICByZXR1cm4ga3kucmVjb3ZlcihtZXNzYWdlLCBzaWduYXR1cmUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEF2YXhwIHdyYXBwZXIgdG8gdmVyaWZ5IHNpZ25hdHVyZVxuICAgKiBAcGFyYW0gbmV0d29ya1xuICAgKiBAcGFyYW0gbWVzc2FnZVxuICAgKiBAcGFyYW0gc2lnbmF0dXJlXG4gICAqIEByZXR1cm4gdHJ1ZSBpZiBpdCdzIHZlcmlmeSBzdWNjZXNzZnVsXG4gICAqL1xuICByZWNvdmVyeVNpZ25hdHVyZShuZXR3b3JrOiBBdmFsYW5jaGVOZXR3b3JrLCBtZXNzYWdlOiBCdWZmZXIsIHNpZ25hdHVyZTogQnVmZmVyKTogQnVmZmVyIHtcbiAgICByZXR1cm4gQnVmZmVyLmZyb20odGhpcy5yZWNvdmVyeVNpZ25hdHVyZUF2YXhCdWZmZXIobmV0d29yaywgQnVmZmVyQXZheC5mcm9tKG1lc3NhZ2UpLCBCdWZmZXJBdmF4LmZyb20oc2lnbmF0dXJlKSkpO1xuICB9XG5cbiAgc2hhMjU2KGJ1ZjogVWludDhBcnJheSk6IEJ1ZmZlciB7XG4gICAgcmV0dXJuIGNyZWF0ZUhhc2guZGVmYXVsdCgnc2hhMjU2JykudXBkYXRlKGJ1ZikuZGlnZXN0KCk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgdGhlIHJhdyB0cmFuc2FjdGlvbiBoYXMgYSB2YWxpZCBmb3JtYXQgaW4gdGhlIGJsb2NrY2hhaW4gY29udGV4dCwgdGhyb3cgb3RoZXJ3aXNlLlxuICAgKiBJdCdzIHRvIHJldXNlIGluIFRyYW5zYWN0aW9uQnVpbGRlciBhbmQgVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeVxuICAgKlxuICAgKiBAcGFyYW0gcmF3VHJhbnNhY3Rpb24gVHJhbnNhY3Rpb24gYXMgaGV4IHN0cmluZ1xuICAgKi9cbiAgdmFsaWRhdGVSYXdUcmFuc2FjdGlvbihyYXdUcmFuc2FjdGlvbjogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKCFyYXdUcmFuc2FjdGlvbikge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRUcmFuc2FjdGlvbkVycm9yKCdSYXcgdHJhbnNhY3Rpb24gaXMgZW1wdHknKTtcbiAgICB9XG4gICAgaWYgKCF1dGlscy5hbGxIZXhDaGFycyhyYXdUcmFuc2FjdGlvbikpIHtcbiAgICAgIHRocm93IG5ldyBQYXJzZVRyYW5zYWN0aW9uRXJyb3IoJ1JhdyB0cmFuc2FjdGlvbiBpcyBub3QgaGV4IHN0cmluZycpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiB0eCBpcyBmb3IgdGhlIGJsb2NrY2hhaW5JZFxuICAgKlxuICAgKiBAcGFyYW0ge0RlcHJlY2F0ZWRUeH0gdHhcbiAgICogQHBhcmFtIHtzdHJpbmd9IGJsb2NrY2hhaW5JZFxuICAgKiBAcmV0dXJucyB0cnVlIGlmIHR4IGlzIGZvciBibG9ja2NoYWluSWRcbiAgICovXG4gIGlzVHJhbnNhY3Rpb25PZih0eDogRGVwcmVjYXRlZFR4LCBibG9ja2NoYWluSWQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB1dGlscy5jYjU4RW5jb2RlKCh0eCBhcyBEZXByZWNhdGVkVHgpLmdldFVuc2lnbmVkVHgoKS5nZXRUcmFuc2FjdGlvbigpLmdldEJsb2NrY2hhaW5JRCgpKSA9PT0gYmxvY2tjaGFpbklkO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIE91dHB1dCBpcyBmcm9tIFBWTS5cbiAgICogT3V0cHV0IGNvdWxkIGJlIEVWTSBvciBQVk0gb3V0cHV0LlxuICAgKiBAcGFyYW0ge0RlcHJlY2F0ZWRPdXRwdXR9IG91dHB1dFxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gb3V0cHV0IGlzIERlcHJlY2F0ZWRUcmFuc2ZlcmFibGVPdXRwdXRcbiAgICovXG4gIGRlcHJlY2F0ZWRJc1RyYW5zZmVyYWJsZU91dHB1dChvdXRwdXQ6IERlcHJlY2F0ZWRPdXRwdXQpOiBvdXRwdXQgaXMgRGVwcmVjYXRlZFRyYW5zZmVyYWJsZU91dHB1dCB7XG4gICAgcmV0dXJuICdnZXRPdXRwdXQnIGluIG91dHB1dDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBPdXRwdXQgaXMgZnJvbSBQVk0uXG4gICAqIE91dHB1dCBjb3VsZCBiZSBFVk0gb3IgUFZNIG91dHB1dC5cbiAgICogQHBhcmFtIHtPdXRwdXR9IG91dHB1dFxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gb3V0cHV0IGlzIFRyYW5zZmVyYWJsZU91dHB1dFxuICAgKi9cbiAgaXNUcmFuc2ZlcmFibGVPdXRwdXQob3V0cHV0OiBPdXRwdXQpOiBvdXRwdXQgaXMgVHJhbnNmZXJhYmxlT3V0cHV0IHtcbiAgICByZXR1cm4gb3V0cHV0Py5fdHlwZSA9PT0gVHlwZVN5bWJvbHMuVHJhbnNmZXJhYmxlT3V0cHV0O1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhIG1hcHBlciBmdW5jdGlvbiB0byB0aGF0IG5ldHdvcmsgYWRkcmVzcyByZXByZXNlbnRhdGlvbi5cbiAgICogQHBhcmFtIG5ldHdvcmsgcmVxdWlyZWQgdG8gc3RyaW5naWZ5IGFkZHJlc3Nlc1xuICAgKiBAcmV0dXJuIG1hcHBlciBmdW5jdGlvblxuICAgKi9cbiAgZGVwcmVjYXRlZE1hcE91dHB1dFRvRW50cnkobmV0d29yazogQXZhbGFuY2hlTmV0d29yayk6IChEZXByZWNhdGVkT3V0cHV0KSA9PiBFbnRyeSB7XG4gICAgcmV0dXJuIChvdXRwdXQ6IERlcHJlY2F0ZWRPdXRwdXQpID0+IHtcbiAgICAgIGlmICh0aGlzLmRlcHJlY2F0ZWRJc1RyYW5zZmVyYWJsZU91dHB1dChvdXRwdXQpKSB7XG4gICAgICAgIGNvbnN0IGFtb3VudE91dHB1dCA9IG91dHB1dC5nZXRPdXRwdXQoKSBhcyBBbW91bnRPdXRwdXQ7XG4gICAgICAgIGNvbnN0IGFkZHJlc3MgPSBhbW91bnRPdXRwdXRcbiAgICAgICAgICAuZ2V0QWRkcmVzc2VzKClcbiAgICAgICAgICAubWFwKChhKSA9PiB0aGlzLmFkZHJlc3NUb1N0cmluZyhuZXR3b3JrLmhycCwgbmV0d29yay5hbGlhcywgYSkpXG4gICAgICAgICAgLnNvcnQoKVxuICAgICAgICAgIC5qb2luKEFERFJFU1NfU0VQQVJBVE9SKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB2YWx1ZTogYW1vdW50T3V0cHV0LmdldEFtb3VudCgpLnRvU3RyaW5nKCksXG4gICAgICAgICAgYWRkcmVzcyxcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGV2bU91dHB1dCA9IG91dHB1dCBhcyBFVk1PdXRwdXQ7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLy8gaXQgc2hvdWxkIGJlIGV2bU91cHV0LmdldEFtb3VudCgpLCBidXQgaXQgcmV0dXJucyBhIDAuXG4gICAgICAgICAgdmFsdWU6IG5ldyBCTigoZXZtT3V0cHV0IGFzIGFueSkuYW1vdW50KS50b1N0cmluZygpLFxuICAgICAgICAgIC8vIEMtQ2hhaW4gYWRkcmVzcy5cbiAgICAgICAgICBhZGRyZXNzOiAnMHgnICsgZXZtT3V0cHV0LmdldEFkZHJlc3NTdHJpbmcoKSxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhIG1hcHBlciBmdW5jdGlvbiB0byB0aGF0IG5ldHdvcmsgYWRkcmVzcyByZXByZXNlbnRhdGlvbi5cbiAgICogQHBhcmFtIG5ldHdvcmsgcmVxdWlyZWQgdG8gc3RyaW5naWZ5IGFkZHJlc3Nlc1xuICAgKiBAcmV0dXJuIG1hcHBlciBmdW5jdGlvblxuICAgKi9cbiAgbWFwT3V0cHV0VG9FbnRyeShuZXR3b3JrOiBBdmFsYW5jaGVOZXR3b3JrKTogKE91dHB1dCkgPT4gRW50cnkge1xuICAgIHJldHVybiAob3V0cHV0OiBPdXRwdXQpID0+IHtcbiAgICAgIGlmICh0aGlzLmlzVHJhbnNmZXJhYmxlT3V0cHV0KG91dHB1dCkpIHtcbiAgICAgICAgY29uc3Qgb3V0cHV0QW1vdW50ID0gb3V0cHV0LmFtb3VudCgpO1xuICAgICAgICBjb25zdCBhZGRyZXNzID0gKG91dHB1dC5vdXRwdXQgYXMgVHJhbnNmZXJPdXRwdXQpXG4gICAgICAgICAgLmdldE93bmVycygpXG4gICAgICAgICAgLm1hcCgoYSkgPT4gdGhpcy5hZGRyZXNzVG9TdHJpbmcobmV0d29yay5ocnAsIG5ldHdvcmsuYWxpYXMsIEJ1ZmZlckF2YXguZnJvbShhKSkpXG4gICAgICAgICAgLnNvcnQoKVxuICAgICAgICAgIC5qb2luKEFERFJFU1NfU0VQQVJBVE9SKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB2YWx1ZTogb3V0cHV0QW1vdW50LnRvU3RyaW5nKCksXG4gICAgICAgICAgYWRkcmVzcyxcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBvdXRwdXQgdHlwZScpO1xuICAgICAgfVxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogcmVtb3ZlIGhleCBwcmVmaXggKDB4KVxuICAgKiBAcGFyYW0gaGV4IHN0cmluZ1xuICAgKiBAcmV0dXJucyBoZXggd2l0aG91dCAweFxuICAgKi9cbiAgcmVtb3ZlSGV4UHJlZml4KGhleDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAoaGV4LnN0YXJ0c1dpdGgoJzB4JykpIHtcbiAgICAgIHJldHVybiBoZXguc3Vic3RyaW5nKDIpO1xuICAgIH1cbiAgICByZXR1cm4gaGV4O1xuICB9XG5cbiAgLyoqXG4gICAqIE91dHB1dGlkeCBjb252ZXJ0IGZyb20gbnVtYmVyIChhcyBzdHJpbmcpIHRvIGJ1ZmZlci5cbiAgICogQHBhcmFtIHtzdHJpbmd9IG91dHB1dGlkeCBudW1iZXJcbiAgICogQHJldHVybiB7QnVmZmVyQXZheH0gYnVmZmVyIG9mIHNpemUgNCB3aXRoIHRoYXQgbnVtYmVyIHZhbHVlXG4gICAqL1xuICBvdXRwdXRpZHhOdW1iZXJUb0J1ZmZlcihvdXRwdXRpZHg6IHN0cmluZyk6IEJ1ZmZlckF2YXgge1xuICAgIHJldHVybiBCdWZmZXJBdmF4LmZyb20oTnVtYmVyKG91dHB1dGlkeCkudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDgsICcwJyksICdoZXgnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBPdXRwdXRpZHggYnVmZmVyIHRvIG51bWJlciAoYXMgc3RyaW5nKVxuICAgKiBAcGFyYW0ge0J1ZmZlckF2YXh9IG91dHB1dGlkeFxuICAgKiBAcmV0dXJuIHtzdHJpbmd9IG91dHB1dGlkeCBudW1iZXJcbiAgICovXG4gIG91dHB1dGlkeEJ1ZmZlclRvTnVtYmVyKG91dHB1dGlkeDogQnVmZmVyQXZheCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHBhcnNlSW50KG91dHB1dGlkeC50b1N0cmluZygnaGV4JyksIDE2KS50b1N0cmluZygpO1xuICB9XG59XG5cbmNvbnN0IHV0aWxzID0gbmV3IFV0aWxzKCk7XG5cbmV4cG9ydCBkZWZhdWx0IHV0aWxzO1xuIl19
@@ -3,6 +3,7 @@ import { DecodedUtxoObj } from './iface';
3
3
  import { BN, Buffer as BufferAvax } from 'avalanche';
4
4
  import { Signature } from 'avalanche/dist/common';
5
5
  import { StandardTransferableInput } from 'avalanche/dist/common/input';
6
+ import { avaxSerial } from '@bitgo/avalanchejs';
6
7
  export interface InputData {
7
8
  amount: BN;
8
9
  txidBuf: BufferAvax;
@@ -17,7 +18,15 @@ export interface InputData {
17
18
  * @param {StandardTransferableInput[]} utxos as transaction ins.
18
19
  * @returns the list of UTXOs
19
20
  */
20
- export declare function recoverUtxos(utxos: StandardTransferableInput[]): DecodedUtxoObj[];
21
+ export declare function deprecatedRecoverUtxos(utxos: StandardTransferableInput[]): DecodedUtxoObj[];
22
+ /**
23
+ * Inputs can be controlled but outputs get reordered in transactions
24
+ * In order to make sure that the mapping is always correct we create an addressIndex which matches to the appropriate
25
+ * signatureIdx
26
+ * @param {avaxSerial.TransferableInput[]} utxos as transaction ins.
27
+ * @returns the list of UTXOs
28
+ */
29
+ export declare function recoverUtxos(utxos: avaxSerial.TransferableInput[]): DecodedUtxoObj[];
21
30
  /**
22
31
  * Convert Utxos into inputs data. Input Objects changes regarding chains. This method return a plain object to be mapped late in chain input.
23
32
  * Sender is a list of owners address and utxo address must contains all of them.
@@ -1 +1 @@
1
- {"version":3,"file":"utxoEngine.d.ts","sourceRoot":"","sources":["../../../src/lib/utxoEngine.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,cAAc,EAA6B,MAAM,SAAS,CAAC;AACpE,OAAO,EAAE,EAAE,EAAE,MAAM,IAAI,UAAU,EAAE,MAAM,WAAW,CAAC;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAGlD,OAAO,EAAuB,yBAAyB,EAAE,MAAM,6BAA6B,CAAC;AAE7F,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,EAAE,CAAC;IACX,OAAO,EAAE,UAAU,CAAC;IACpB,SAAS,EAAE,UAAU,CAAC;IACtB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,UAAU,EAAE,SAAS,EAAE,CAAC;CACzB;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,yBAAyB,EAAE,GAAG,cAAc,EAAE,CAiBjF;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,WAAW,CACzB,KAAK,EAAE,cAAc,EAAE,EACvB,MAAM,EAAE,UAAU,EAAE,EACpB,SAAS,SAAI,GACZ;IACD,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB,MAAM,EAAE,EAAE,CAAC;CACZ,CAuCA"}
1
+ {"version":3,"file":"utxoEngine.d.ts","sourceRoot":"","sources":["../../../src/lib/utxoEngine.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,cAAc,EAA6B,MAAM,SAAS,CAAC;AACpE,OAAO,EAAE,EAAE,EAAE,MAAM,IAAI,UAAU,EAAE,MAAM,WAAW,CAAC;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAGlD,OAAO,EAAuB,yBAAyB,EAAE,MAAM,6BAA6B,CAAC;AAC7F,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAEhD,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,EAAE,CAAC;IACX,OAAO,EAAE,UAAU,CAAC;IACpB,SAAS,EAAE,UAAU,CAAC;IACtB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,UAAU,EAAE,SAAS,EAAE,CAAC;CACzB;AAED;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,yBAAyB,EAAE,GAAG,cAAc,EAAE,CAiB3F;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,UAAU,CAAC,iBAAiB,EAAE,GAAG,cAAc,EAAE,CAiBpF;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,WAAW,CACzB,KAAK,EAAE,cAAc,EAAE,EACvB,MAAM,EAAE,UAAU,EAAE,EACpB,SAAS,SAAI,GACZ;IACD,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB,MAAM,EAAE,EAAE,CAAC;CACZ,CAuCA"}
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.utxoToInput = exports.recoverUtxos = void 0;
6
+ exports.utxoToInput = exports.recoverUtxos = exports.deprecatedRecoverUtxos = void 0;
7
7
  const iface_1 = require("./iface");
8
8
  const avalanche_1 = require("avalanche");
9
9
  const utils_1 = __importDefault(require("./utils"));
@@ -15,7 +15,7 @@ const sdk_core_1 = require("@bitgo/sdk-core");
15
15
  * @param {StandardTransferableInput[]} utxos as transaction ins.
16
16
  * @returns the list of UTXOs
17
17
  */
18
- function recoverUtxos(utxos) {
18
+ function deprecatedRecoverUtxos(utxos) {
19
19
  return utxos.map((utxo) => {
20
20
  const secpInput = utxo.getInput();
21
21
  // use the same addressesIndex as existing ones in the inputs
@@ -31,6 +31,30 @@ function recoverUtxos(utxos) {
31
31
  };
32
32
  });
33
33
  }
34
+ exports.deprecatedRecoverUtxos = deprecatedRecoverUtxos;
35
+ /**
36
+ * Inputs can be controlled but outputs get reordered in transactions
37
+ * In order to make sure that the mapping is always correct we create an addressIndex which matches to the appropriate
38
+ * signatureIdx
39
+ * @param {avaxSerial.TransferableInput[]} utxos as transaction ins.
40
+ * @returns the list of UTXOs
41
+ */
42
+ function recoverUtxos(utxos) {
43
+ return utxos.map((utxo) => {
44
+ const input = utxo.input;
45
+ // use the same addressesIndex as existing ones in the inputs
46
+ const addressesIndex = utxo.sigIndicies();
47
+ return {
48
+ outputID: iface_1.SECP256K1_Transfer_Output,
49
+ outputidx: utxo.utxoID.outputIdx.value().toString(),
50
+ txid: utxo.utxoID.txID.value(),
51
+ amount: input.amount().toString(),
52
+ threshold: addressesIndex.length,
53
+ addresses: [],
54
+ addressesIndex,
55
+ };
56
+ });
57
+ }
34
58
  exports.recoverUtxos = recoverUtxos;
35
59
  /**
36
60
  * Convert Utxos into inputs data. Input Objects changes regarding chains. This method return a plain object to be mapped late in chain input.
@@ -86,4 +110,4 @@ function utxoToInput(utxos, sender, threshold = 2) {
86
110
  return { inputs, amount: currentTotal };
87
111
  }
88
112
  exports.utxoToInput = utxoToInput;
89
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXR4b0VuZ2luZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvdXR4b0VuZ2luZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxtQ0FBb0U7QUFDcEUseUNBQXFEO0FBRXJELG9EQUE0QjtBQUM1Qiw4Q0FBd0Q7QUFXeEQ7Ozs7OztHQU1HO0FBQ0gsU0FBZ0IsWUFBWSxDQUFDLEtBQWtDO0lBQzdELE9BQU8sS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO1FBQ3hCLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQXlCLENBQUM7UUFFekQsNkRBQTZEO1FBQzdELE1BQU0sY0FBYyxHQUFhLFNBQVMsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUVqRyxPQUFPO1lBQ0wsUUFBUSxFQUFFLGlDQUF5QjtZQUNuQyxTQUFTLEVBQUUsZUFBSyxDQUFDLHVCQUF1QixDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUM3RCxJQUFJLEVBQUUsZUFBSyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDdEMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxRQUFRLEVBQUU7WUFDeEMsU0FBUyxFQUFFLGNBQWMsQ0FBQyxNQUFNO1lBQ2hDLFNBQVMsRUFBRSxFQUFFO1lBQ2IsY0FBYztTQUNmLENBQUM7SUFDSixDQUFDLENBQUMsQ0FBQztBQUNMLENBQUM7QUFqQkQsb0NBaUJDO0FBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FtQkc7QUFDSCxTQUFnQixXQUFXLENBQ3pCLEtBQXVCLEVBQ3ZCLE1BQW9CLEVBQ3BCLFNBQVMsR0FBRyxDQUFDO0lBS2Isc0JBQXNCO0lBQ3RCLElBQUksWUFBWSxHQUFPLElBQUksY0FBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRWpDLE1BQU0sTUFBTSxHQUFHLEtBQUs7U0FDakIsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLFFBQVEsS0FBSyxpQ0FBeUIsQ0FBQztTQUNyRSxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtRQUNaLHFCQUFxQjtRQUNyQixNQUFNLGFBQWEsR0FBaUIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLGVBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNyRixNQUFNLGNBQWMsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0Riw4Q0FBOEM7UUFDOUMsSUFBSSxjQUFjLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDL0IsTUFBTSxJQUFJLGdDQUFxQixDQUFDLDhCQUE4QixHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUM3RTtRQUNELElBQUksSUFBSSxDQUFDLFNBQVMsS0FBSyxTQUFTLEVBQUU7WUFDaEMsTUFBTSxJQUFJLGdDQUFxQixDQUFDLDJCQUEyQixDQUFDLENBQUM7U0FDOUQ7UUFFRCxNQUFNLE9BQU8sR0FBZSxlQUFLLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN4RCxNQUFNLE1BQU0sR0FBTyxJQUFJLGNBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDdkMsTUFBTSxTQUFTLEdBQWUsZUFBSyxDQUFDLHVCQUF1QixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUU1RSxZQUFZLEdBQUcsWUFBWSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUV4QyxNQUFNLE9BQU8sR0FBRyxjQUFjO2FBQzNCLEtBQUssQ0FBQyxDQUFDLEVBQUUsU0FBUyxDQUFDO2FBQ25CLEdBQUcsQ0FBQyxDQUFDLFNBQVMsRUFBRSxXQUFXLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLENBQUMsQ0FBQzthQUM3RCxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUM3QyxNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxXQUFXLEVBQUUsRUFBRSxFQUFFO1FBQ2pELDJGQUEyRjtRQUMzRiwrQkFBK0I7UUFDL0IsZUFBSyxDQUFDLFNBQVMsQ0FBQyxXQUFXLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FDN0UsQ0FBQztRQUNGLE1BQU0sYUFBYSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUVoRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsYUFBYSxFQUFFLFVBQVUsRUFBRSxDQUFDO0lBQ25FLENBQUMsQ0FBQyxDQUFDO0lBRUwsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLENBQUM7QUFDMUMsQ0FBQztBQTlDRCxrQ0E4Q0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEZWNvZGVkVXR4b09iaiwgU0VDUDI1NksxX1RyYW5zZmVyX091dHB1dCB9IGZyb20gJy4vaWZhY2UnO1xuaW1wb3J0IHsgQk4sIEJ1ZmZlciBhcyBCdWZmZXJBdmF4IH0gZnJvbSAnYXZhbGFuY2hlJztcbmltcG9ydCB7IFNpZ25hdHVyZSB9IGZyb20gJ2F2YWxhbmNoZS9kaXN0L2NvbW1vbic7XG5pbXBvcnQgdXRpbHMgZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgeyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IgfSBmcm9tICdAYml0Z28vc2RrLWNvcmUnO1xuaW1wb3J0IHsgU3RhbmRhcmRBbW91bnRJbnB1dCwgU3RhbmRhcmRUcmFuc2ZlcmFibGVJbnB1dCB9IGZyb20gJ2F2YWxhbmNoZS9kaXN0L2NvbW1vbi9pbnB1dCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSW5wdXREYXRhIHtcbiAgYW1vdW50OiBCTjtcbiAgdHhpZEJ1ZjogQnVmZmVyQXZheDtcbiAgb3V0cHV0SWR4OiBCdWZmZXJBdmF4O1xuICBzaWduYXR1cmVzSWR4OiBudW1iZXJbXTtcbiAgc2lnbmF0dXJlczogU2lnbmF0dXJlW107XG59XG5cbi8qKlxuICogSW5wdXRzIGNhbiBiZSBjb250cm9sbGVkIGJ1dCBvdXRwdXRzIGdldCByZW9yZGVyZWQgaW4gdHJhbnNhY3Rpb25zXG4gKiBJbiBvcmRlciB0byBtYWtlIHN1cmUgdGhhdCB0aGUgbWFwcGluZyBpcyBhbHdheXMgY29ycmVjdCB3ZSBjcmVhdGUgYW4gYWRkcmVzc0luZGV4IHdoaWNoIG1hdGNoZXMgdG8gdGhlIGFwcHJvcHJpYXRlXG4gKiBzaWduYXR1cmVJZHhcbiAqIEBwYXJhbSB7U3RhbmRhcmRUcmFuc2ZlcmFibGVJbnB1dFtdfSB1dHhvcyBhcyB0cmFuc2FjdGlvbiBpbnMuXG4gKiBAcmV0dXJucyB0aGUgbGlzdCBvZiBVVFhPc1xuICovXG5leHBvcnQgZnVuY3Rpb24gcmVjb3ZlclV0eG9zKHV0eG9zOiBTdGFuZGFyZFRyYW5zZmVyYWJsZUlucHV0W10pOiBEZWNvZGVkVXR4b09ialtdIHtcbiAgcmV0dXJuIHV0eG9zLm1hcCgodXR4bykgPT4ge1xuICAgIGNvbnN0IHNlY3BJbnB1dCA9IHV0eG8uZ2V0SW5wdXQoKSBhcyBTdGFuZGFyZEFtb3VudElucHV0O1xuXG4gICAgLy8gdXNlIHRoZSBzYW1lIGFkZHJlc3Nlc0luZGV4IGFzIGV4aXN0aW5nIG9uZXMgaW4gdGhlIGlucHV0c1xuICAgIGNvbnN0IGFkZHJlc3Nlc0luZGV4OiBudW1iZXJbXSA9IHNlY3BJbnB1dC5nZXRTaWdJZHhzKCkubWFwKChzKSA9PiBzLnRvQnVmZmVyKCkucmVhZFVJbnQzMkJFKDApKTtcblxuICAgIHJldHVybiB7XG4gICAgICBvdXRwdXRJRDogU0VDUDI1NksxX1RyYW5zZmVyX091dHB1dCxcbiAgICAgIG91dHB1dGlkeDogdXRpbHMub3V0cHV0aWR4QnVmZmVyVG9OdW1iZXIodXR4by5nZXRPdXRwdXRJZHgoKSksXG4gICAgICB0eGlkOiB1dGlscy5jYjU4RW5jb2RlKHV0eG8uZ2V0VHhJRCgpKSxcbiAgICAgIGFtb3VudDogc2VjcElucHV0LmdldEFtb3VudCgpLnRvU3RyaW5nKCksXG4gICAgICB0aHJlc2hvbGQ6IGFkZHJlc3Nlc0luZGV4Lmxlbmd0aCxcbiAgICAgIGFkZHJlc3NlczogW10sIC8vIHRoaXMgaXMgZW1wdHkgc2luY2UgdGhlIGlucHV0cyBmcm9tIGRlc2VyaWFsaXplZCB0cmFuc2FjdGlvbiBkb24ndCBjb250YWluIGFkZHJlc3Nlc1xuICAgICAgYWRkcmVzc2VzSW5kZXgsXG4gICAgfTtcbiAgfSk7XG59XG5cbi8qKlxuICogQ29udmVydCBVdHhvcyBpbnRvIGlucHV0cyBkYXRhLiBJbnB1dCBPYmplY3RzIGNoYW5nZXMgcmVnYXJkaW5nIGNoYWlucy4gVGhpcyBtZXRob2QgcmV0dXJuIGEgcGxhaW4gb2JqZWN0IHRvIGJlIG1hcHBlZCBsYXRlIGluIGNoYWluIGlucHV0LlxuICogU2VuZGVyIGlzIGEgbGlzdCBvZiBvd25lcnMgYWRkcmVzcyBhbmQgdXR4byBhZGRyZXNzIG11c3QgY29udGFpbnMgYWxsIG9mIHRoZW0uXG4gKiBTaWduZXJzIGlzIGEgbGlzdCBvZiBzZW5kZXIgY3V0IGl0IGluIHRocmVzaG9sZCBzaXplLiBGaXJzdHMgc2VuZGVycyBhcmUgdGhlIHNpZ25lcnMuXG4gKlxuICogT3V0cHV0IGFsd2F5cyBnZXQgcmVvcmRlcmVkIHdlIHdhbnQgdG8gbWFrZSBzdXJlIHdlIGNhbiBhbHdheXMgYWRkIHNpZ25hdHVyZXMgaW4gdGhlIGNvcnJlY3QgbG9jYXRpb24uXG4gKiBTaWduYXR1cmVzIGFycmF5IHN0b3JlIHNpZ25lcnMgYWRkcmVzcyBvZiB0aGUgZXhwZWN0ZWQgc2lnbmF0dXJlLiBUeCBzaWduIHJlcGxhY2UgdGhlIGFkZHJlc3MgZm9yIHRoZSBzaWduYXR1cmUuXG4gKiBTbyB0aGUgbG9jYXRpb24gb2YgdGhlIHNpZ25hdHVyZXMgaXMgZ3VhcmFudGVlZC5cbiAqXG4gKiBUbyBmaW5kIHRoZSBjb3JyZWN0IGxvY2F0aW9uIGZvciB0aGUgc2lnbmF0dXJlLCB3ZSB1c2UgdGhlIG91dHB1dCdzIGFkZHJlc3NlcyB0byBjcmVhdGUgdGhlIHNpZ25hdHVyZUlkeCBpbiB0aGUgb3JkZXIgdGhhdCB3ZSBkZXNpcmVcbiAqIDA6IHVzZXIga2V5LCAxOiBoc20ga2V5LCAyOiByZWNvdmVyeSBrZXlcbiAqXG4gKiBAcGFyYW0gdXR4b3NcbiAqIEBwYXJhbSBzZW5kZXIgYXJyYXkgb2YgYWRkcmVzc2VzXG4gKiBAcGFyYW0gdGhyZXNob2xkIG51bWJlciBvZiBzaWduYXR1cmVzIHJlcXVpcmVkXG4gKiBAcmV0dXJuIHtcbiAqICAgaW5wdXRzOiBJbnB1dERhdGFbXTtcbiAqICAgYW1vdW50OiBCTjtcbiAqIH0gYXMgdG90YWwgYW1vdW50IGFuZCBpbnB1dHMgd2l0aCBzaWduYXR1cmVzIGFzIHNpZ25lcnMgYWRkcmVzcyB0byBiZSByZXBsYWNlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHV0eG9Ub0lucHV0KFxuICB1dHhvczogRGVjb2RlZFV0eG9PYmpbXSxcbiAgc2VuZGVyOiBCdWZmZXJBdmF4W10sXG4gIHRocmVzaG9sZCA9IDJcbik6IHtcbiAgaW5wdXRzOiBJbnB1dERhdGFbXTtcbiAgYW1vdW50OiBCTjtcbn0ge1xuICAvLyBhbW91bnQgc3BlbnQgc28gZmFyXG4gIGxldCBjdXJyZW50VG90YWw6IEJOID0gbmV3IEJOKDApO1xuXG4gIGNvbnN0IGlucHV0cyA9IHV0eG9zXG4gICAgLmZpbHRlcigodXR4bykgPT4gdXR4byAmJiB1dHhvLm91dHB1dElEID09PSBTRUNQMjU2SzFfVHJhbnNmZXJfT3V0cHV0KVxuICAgIC5tYXAoKHV0eG8pID0+IHtcbiAgICAgIC8vIHZhbGlkYXRlIHRoZSB1dHhvc1xuICAgICAgY29uc3QgdXR4b0FkZHJlc3NlczogQnVmZmVyQXZheFtdID0gdXR4by5hZGRyZXNzZXMubWFwKChhKSA9PiB1dGlscy5wYXJzZUFkZHJlc3MoYSkpO1xuICAgICAgY29uc3QgYWRkcmVzc2VzSW5kZXggPSBzZW5kZXIubWFwKChhKSA9PiB1dHhvQWRkcmVzc2VzLmZpbmRJbmRleCgodSkgPT4gYS5lcXVhbHModSkpKTtcbiAgICAgIC8vIGFkZHJlc3Nlc0luZGV4IHNob3VsZCBuZXZlciBoYXZlIGEgbWlzbWF0Y2hcbiAgICAgIGlmIChhZGRyZXNzZXNJbmRleC5pbmNsdWRlcygtMSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignQWRkcmVzc2VzIGFyZSBpbmNvbnNpc3RlbnQ6ICcgKyB1dHhvLnR4aWQpO1xuICAgICAgfVxuICAgICAgaWYgKHV0eG8udGhyZXNob2xkICE9PSB0aHJlc2hvbGQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignVGhyZXNob2xkIGlzIGluY29uc2lzdGVudCcpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB0eGlkQnVmOiBCdWZmZXJBdmF4ID0gdXRpbHMuY2I1OERlY29kZSh1dHhvLnR4aWQpO1xuICAgICAgY29uc3QgYW1vdW50OiBCTiA9IG5ldyBCTih1dHhvLmFtb3VudCk7XG4gICAgICBjb25zdCBvdXRwdXRJZHg6IEJ1ZmZlckF2YXggPSB1dGlscy5vdXRwdXRpZHhOdW1iZXJUb0J1ZmZlcih1dHhvLm91dHB1dGlkeCk7XG5cbiAgICAgIGN1cnJlbnRUb3RhbCA9IGN1cnJlbnRUb3RhbC5hZGQoYW1vdW50KTtcblxuICAgICAgY29uc3Qgc2lnbmVycyA9IGFkZHJlc3Nlc0luZGV4XG4gICAgICAgIC5zbGljZSgwLCB0aHJlc2hvbGQpXG4gICAgICAgIC5tYXAoKHV0eG9JbmRleCwgc2VuZGVySW5kZXgpID0+ICh7IHV0eG9JbmRleCwgc2VuZGVySW5kZXggfSkpXG4gICAgICAgIC5zb3J0KChhLCBiKSA9PiBhLnV0eG9JbmRleCAtIGIudXR4b0luZGV4KTtcbiAgICAgIGNvbnN0IHNpZ25hdHVyZXMgPSBzaWduZXJzLm1hcCgoeyBzZW5kZXJJbmRleCB9KSA9PlxuICAgICAgICAvLyBUT0RPKEJHLTU2NzAwKTogIEltcHJvdmUgY2FuU2lnbiBieSBjaGVjayBpbiBhZGRyZXNzZXMgaW4gZW1wdHkgY3JlZGVudGlhbHMgbWF0Y2ggc2lnbmVyXG4gICAgICAgIC8vIEhTTSByZXF1aXJlIGVtcHR5IHNpZ25hdHVyZS5cbiAgICAgICAgdXRpbHMuY3JlYXRlU2lnKHNlbmRlckluZGV4ID09IDEgPyAnJyA6IHNlbmRlcltzZW5kZXJJbmRleF0udG9TdHJpbmcoJ2hleCcpKVxuICAgICAgKTtcbiAgICAgIGNvbnN0IHNpZ25hdHVyZXNJZHggPSBzaWduZXJzLm1hcCgoeyB1dHhvSW5kZXggfSkgPT4gdXR4b0luZGV4KTtcblxuICAgICAgcmV0dXJuIHsgYW1vdW50LCB0eGlkQnVmLCBvdXRwdXRJZHgsIHNpZ25hdHVyZXNJZHgsIHNpZ25hdHVyZXMgfTtcbiAgICB9KTtcblxuICByZXR1cm4geyBpbnB1dHMsIGFtb3VudDogY3VycmVudFRvdGFsIH07XG59XG4iXX0=
113
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXR4b0VuZ2luZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvdXR4b0VuZ2luZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxtQ0FBb0U7QUFDcEUseUNBQXFEO0FBRXJELG9EQUE0QjtBQUM1Qiw4Q0FBd0Q7QUFZeEQ7Ozs7OztHQU1HO0FBQ0gsU0FBZ0Isc0JBQXNCLENBQUMsS0FBa0M7SUFDdkUsT0FBTyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7UUFDeEIsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBeUIsQ0FBQztRQUV6RCw2REFBNkQ7UUFDN0QsTUFBTSxjQUFjLEdBQWEsU0FBUyxDQUFDLFVBQVUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRWpHLE9BQU87WUFDTCxRQUFRLEVBQUUsaUNBQXlCO1lBQ25DLFNBQVMsRUFBRSxlQUFLLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQzdELElBQUksRUFBRSxlQUFLLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUN0QyxNQUFNLEVBQUUsU0FBUyxDQUFDLFNBQVMsRUFBRSxDQUFDLFFBQVEsRUFBRTtZQUN4QyxTQUFTLEVBQUUsY0FBYyxDQUFDLE1BQU07WUFDaEMsU0FBUyxFQUFFLEVBQUU7WUFDYixjQUFjO1NBQ2YsQ0FBQztJQUNKLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQWpCRCx3REFpQkM7QUFFRDs7Ozs7O0dBTUc7QUFDSCxTQUFnQixZQUFZLENBQUMsS0FBcUM7SUFDaEUsT0FBTyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7UUFDeEIsTUFBTSxLQUFL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QzNGLCtCQUErQjtRQUMvQixlQUFLLENBQUMsU0FBUyxDQUFDLFdBQVcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUM3RSxDQUFDO1FBQ0YsTUFBTSxhQUFhLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRWhFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxhQUFhLEVBQUUsVUFBVSxFQUFFLENBQUM7SUFDbkUsQ0FBQyxDQUFDLENBQUM7SUFFTCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsQ0FBQztBQUMxQyxDQUFDO0FBOUNELGtDQThDQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERlY29kZWRVdHhvT2JqLCBTRUNQMjU2SzFfVHJhbnNmZXJfT3V0cHV0IH0gZnJvbSAnLi9pZmFjZSc7XG5pbXBvcnQgeyBCTiwgQnVmZmVyIGFzIEJ1ZmZlckF2YXggfSBmcm9tICdhdmFsYW5jaGUnO1xuaW1wb3J0IHsgU2lnbmF0dXJlIH0gZnJvbSAnYXZhbGFuY2hlL2Rpc3QvY29tbW9uJztcbmltcG9ydCB1dGlscyBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB7IEJ1aWxkVHJhbnNhY3Rpb25FcnJvciB9IGZyb20gJ0BiaXRnby9zZGstY29yZSc7XG5pbXBvcnQgeyBTdGFuZGFyZEFtb3VudElucHV0LCBTdGFuZGFyZFRyYW5zZmVyYWJsZUlucHV0IH0gZnJvbSAnYXZhbGFuY2hlL2Rpc3QvY29tbW9uL2lucHV0JztcbmltcG9ydCB7IGF2YXhTZXJpYWwgfSBmcm9tICdAYml0Z28vYXZhbGFuY2hlanMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIElucHV0RGF0YSB7XG4gIGFtb3VudDogQk47XG4gIHR4aWRCdWY6IEJ1ZmZlckF2YXg7XG4gIG91dHB1dElkeDogQnVmZmVyQXZheDtcbiAgc2lnbmF0dXJlc0lkeDogbnVtYmVyW107XG4gIHNpZ25hdHVyZXM6IFNpZ25hdHVyZVtdO1xufVxuXG4vKipcbiAqIElucHV0cyBjYW4gYmUgY29udHJvbGxlZCBidXQgb3V0cHV0cyBnZXQgcmVvcmRlcmVkIGluIHRyYW5zYWN0aW9uc1xuICogSW4gb3JkZXIgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIG1hcHBpbmcgaXMgYWx3YXlzIGNvcnJlY3Qgd2UgY3JlYXRlIGFuIGFkZHJlc3NJbmRleCB3aGljaCBtYXRjaGVzIHRvIHRoZSBhcHByb3ByaWF0ZVxuICogc2lnbmF0dXJlSWR4XG4gKiBAcGFyYW0ge1N0YW5kYXJkVHJhbnNmZXJhYmxlSW5wdXRbXX0gdXR4b3MgYXMgdHJhbnNhY3Rpb24gaW5zLlxuICogQHJldHVybnMgdGhlIGxpc3Qgb2YgVVRYT3NcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlcHJlY2F0ZWRSZWNvdmVyVXR4b3ModXR4b3M6IFN0YW5kYXJkVHJhbnNmZXJhYmxlSW5wdXRbXSk6IERlY29kZWRVdHhvT2JqW10ge1xuICByZXR1cm4gdXR4b3MubWFwKCh1dHhvKSA9PiB7XG4gICAgY29uc3Qgc2VjcElucHV0ID0gdXR4by5nZXRJbnB1dCgpIGFzIFN0YW5kYXJkQW1vdW50SW5wdXQ7XG5cbiAgICAvLyB1c2UgdGhlIHNhbWUgYWRkcmVzc2VzSW5kZXggYXMgZXhpc3Rpbmcgb25lcyBpbiB0aGUgaW5wdXRzXG4gICAgY29uc3QgYWRkcmVzc2VzSW5kZXg6IG51bWJlcltdID0gc2VjcElucHV0LmdldFNpZ0lkeHMoKS5tYXAoKHMpID0+IHMudG9CdWZmZXIoKS5yZWFkVUludDMyQkUoMCkpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIG91dHB1dElEOiBTRUNQMjU2SzFfVHJhbnNmZXJfT3V0cHV0LFxuICAgICAgb3V0cHV0aWR4OiB1dGlscy5vdXRwdXRpZHhCdWZmZXJUb051bWJlcih1dHhvLmdldE91dHB1dElkeCgpKSxcbiAgICAgIHR4aWQ6IHV0aWxzLmNiNThFbmNvZGUodXR4by5nZXRUeElEKCkpLFxuICAgICAgYW1vdW50OiBzZWNwSW5wdXQuZ2V0QW1vdW50KCkudG9TdHJpbmcoKSxcbiAgICAgIHRocmVzaG9sZDogYWRkcmVzc2VzSW5kZXgubGVuZ3RoLFxuICAgICAgYWRkcmVzc2VzOiBbXSwgLy8gdGhpcyBpcyBlbXB0eSBzaW5jZSB0aGUgaW5wdXRzIGZyb20gZGVzZXJpYWxpemVkIHRyYW5zYWN0aW9uIGRvbid0IGNvbnRhaW4gYWRkcmVzc2VzXG4gICAgICBhZGRyZXNzZXNJbmRleCxcbiAgICB9O1xuICB9KTtcbn1cblxuLyoqXG4gKiBJbnB1dHMgY2FuIGJlIGNvbnRyb2xsZWQgYnV0IG91dHB1dHMgZ2V0IHJlb3JkZXJlZCBpbiB0cmFuc2FjdGlvbnNcbiAqIEluIG9yZGVyIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBtYXBwaW5nIGlzIGFsd2F5cyBjb3JyZWN0IHdlIGNyZWF0ZSBhbiBhZGRyZXNzSW5kZXggd2hpY2ggbWF0Y2hlcyB0byB0aGUgYXBwcm9wcmlhdGVcbiAqIHNpZ25hdHVyZUlkeFxuICogQHBhcmFtIHthdmF4U2VyaWFsLlRyYW5zZmVyYWJsZUlucHV0W119IHV0eG9zIGFzIHRyYW5zYWN0aW9uIGlucy5cbiAqIEByZXR1cm5zIHRoZSBsaXN0IG9mIFVUWE9zXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWNvdmVyVXR4b3ModXR4b3M6IGF2YXhTZXJpYWwuVHJhbnNmZXJhYmxlSW5wdXRbXSk6IERlY29kZWRVdHhvT2JqW10ge1xuICByZXR1cm4gdXR4b3MubWFwKCh1dHhvKSA9PiB7XG4gICAgY29uc3QgaW5wdXQgPSB1dHhvLmlucHV0O1xuXG4gICAgLy8gdXNlIHRoZSBzYW1lIGFkZHJlc3Nlc0luZGV4IGFzIGV4aXN0aW5nIG9uZXMgaW4gdGhlIGlucHV0c1xuICAgIGNvbnN0IGFkZHJlc3Nlc0luZGV4OiBudW1iZXJbXSA9IHV0eG8uc2lnSW5kaWNpZXMoKTtcblxuICAgIHJldHVybiB7XG4gICAgICBvdXRwdXRJRDogU0VDUDI1NksxX1RyYW5zZmVyX091dHB1dCxcbiAgICAgIG91dHB1dGlkeDogdXR4by51dHhvSUQub3V0cHV0SWR4LnZhbHVlKCkudG9TdHJpbmcoKSxcbiAgICAgIHR4aWQ6IHV0eG8udXR4b0lELnR4SUQudmFsdWUoKSxcbiAgICAgIGFtb3VudDogaW5wdXQuYW1vdW50KCkudG9TdHJpbmcoKSxcbiAgICAgIHRocmVzaG9sZDogYWRkcmVzc2VzSW5kZXgubGVuZ3RoLFxuICAgICAgYWRkcmVzc2VzOiBbXSwgLy8gdGhpcyBpcyBlbXB0eSBzaW5jZSB0aGUgaW5wdXRzIGZyb20gZGVzZXJpYWxpemVkIHRyYW5zYWN0aW9uIGRvbid0IGNvbnRhaW4gYWRkcmVzc2VzXG4gICAgICBhZGRyZXNzZXNJbmRleCxcbiAgICB9O1xuICB9KTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0IFV0eG9zIGludG8gaW5wdXRzIGRhdGEuIElucHV0IE9iamVjdHMgY2hhbmdlcyByZWdhcmRpbmcgY2hhaW5zLiBUaGlzIG1ldGhvZCByZXR1cm4gYSBwbGFpbiBvYmplY3QgdG8gYmUgbWFwcGVkIGxhdGUgaW4gY2hhaW4gaW5wdXQuXG4gKiBTZW5kZXIgaXMgYSBsaXN0IG9mIG93bmVycyBhZGRyZXNzIGFuZCB1dHhvIGFkZHJlc3MgbXVzdCBjb250YWlucyBhbGwgb2YgdGhlbS5cbiAqIFNpZ25lcnMgaXMgYSBsaXN0IG9mIHNlbmRlciBjdXQgaXQgaW4gdGhyZXNob2xkIHNpemUuIEZpcnN0cyBzZW5kZXJzIGFyZSB0aGUgc2lnbmVycy5cbiAqXG4gKiBPdXRwdXQgYWx3YXlzIGdldCByZW9yZGVyZWQgd2Ugd2FudCB0byBtYWtlIHN1cmUgd2UgY2FuIGFsd2F5cyBhZGQgc2lnbmF0dXJlcyBpbiB0aGUgY29ycmVjdCBsb2NhdGlvbi5cbiAqIFNpZ25hdHVyZXMgYXJyYXkgc3RvcmUgc2lnbmVycyBhZGRyZXNzIG9mIHRoZSBleHBlY3RlZCBzaWduYXR1cmUuIFR4IHNpZ24gcmVwbGFjZSB0aGUgYWRkcmVzcyBmb3IgdGhlIHNpZ25hdHVyZS5cbiAqIFNvIHRoZSBsb2NhdGlvbiBvZiB0aGUgc2lnbmF0dXJlcyBpcyBndWFyYW50ZWVkLlxuICpcbiAqIFRvIGZpbmQgdGhlIGNvcnJlY3QgbG9jYXRpb24gZm9yIHRoZSBzaWduYXR1cmUsIHdlIHVzZSB0aGUgb3V0cHV0J3MgYWRkcmVzc2VzIHRvIGNyZWF0ZSB0aGUgc2lnbmF0dXJlSWR4IGluIHRoZSBvcmRlciB0aGF0IHdlIGRlc2lyZVxuICogMDogdXNlciBrZXksIDE6IGhzbSBrZXksIDI6IHJlY292ZXJ5IGtleVxuICpcbiAqIEBwYXJhbSB1dHhvc1xuICogQHBhcmFtIHNlbmRlciBhcnJheSBvZiBhZGRyZXNzZXNcbiAqIEBwYXJhbSB0aHJlc2hvbGQgbnVtYmVyIG9mIHNpZ25hdHVyZXMgcmVxdWlyZWRcbiAqIEByZXR1cm4ge1xuICogICBpbnB1dHM6IElucHV0RGF0YVtdO1xuICogICBhbW91bnQ6IEJOO1xuICogfSBhcyB0b3RhbCBhbW91bnQgYW5kIGlucHV0cyB3aXRoIHNpZ25hdHVyZXMgYXMgc2lnbmVycyBhZGRyZXNzIHRvIGJlIHJlcGxhY2VkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdXR4b1RvSW5wdXQoXG4gIHV0eG9zOiBEZWNvZGVkVXR4b09ialtdLFxuICBzZW5kZXI6IEJ1ZmZlckF2YXhbXSxcbiAgdGhyZXNob2xkID0gMlxuKToge1xuICBpbnB1dHM6IElucHV0RGF0YVtdO1xuICBhbW91bnQ6IEJOO1xufSB7XG4gIC8vIGFtb3VudCBzcGVudCBzbyBmYXJcbiAgbGV0IGN1cnJlbnRUb3RhbDogQk4gPSBuZXcgQk4oMCk7XG5cbiAgY29uc3QgaW5wdXRzID0gdXR4b3NcbiAgICAuZmlsdGVyKCh1dHhvKSA9PiB1dHhvICYmIHV0eG8ub3V0cHV0SUQgPT09IFNFQ1AyNTZLMV9UcmFuc2Zlcl9PdXRwdXQpXG4gICAgLm1hcCgodXR4bykgPT4ge1xuICAgICAgLy8gdmFsaWRhdGUgdGhlIHV0eG9zXG4gICAgICBjb25zdCB1dHhvQWRkcmVzc2VzOiBCdWZmZXJBdmF4W10gPSB1dHhvLmFkZHJlc3Nlcy5tYXAoKGEpID0+IHV0aWxzLnBhcnNlQWRkcmVzcyhhKSk7XG4gICAgICBjb25zdCBhZGRyZXNzZXNJbmRleCA9IHNlbmRlci5tYXAoKGEpID0+IHV0eG9BZGRyZXNzZXMuZmluZEluZGV4KCh1KSA9PiBhLmVxdWFscyh1KSkpO1xuICAgICAgLy8gYWRkcmVzc2VzSW5kZXggc2hvdWxkIG5ldmVyIGhhdmUgYSBtaXNtYXRjaFxuICAgICAgaWYgKGFkZHJlc3Nlc0luZGV4LmluY2x1ZGVzKC0xKSkge1xuICAgICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdBZGRyZXNzZXMgYXJlIGluY29uc2lzdGVudDogJyArIHV0eG8udHhpZCk7XG4gICAgICB9XG4gICAgICBpZiAodXR4by50aHJlc2hvbGQgIT09IHRocmVzaG9sZCkge1xuICAgICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdUaHJlc2hvbGQgaXMgaW5jb25zaXN0ZW50Jyk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHR4aWRCdWY6IEJ1ZmZlckF2YXggPSB1dGlscy5jYjU4RGVjb2RlKHV0eG8udHhpZCk7XG4gICAgICBjb25zdCBhbW91bnQ6IEJOID0gbmV3IEJOKHV0eG8uYW1vdW50KTtcbiAgICAgIGNvbnN0IG91dHB1dElkeDogQnVmZmVyQXZheCA9IHV0aWxzLm91dHB1dGlkeE51bWJlclRvQnVmZmVyKHV0eG8ub3V0cHV0aWR4KTtcblxuICAgICAgY3VycmVudFRvdGFsID0gY3VycmVudFRvdGFsLmFkZChhbW91bnQpO1xuXG4gICAgICBjb25zdCBzaWduZXJzID0gYWRkcmVzc2VzSW5kZXhcbiAgICAgICAgLnNsaWNlKDAsIHRocmVzaG9sZClcbiAgICAgICAgLm1hcCgodXR4b0luZGV4LCBzZW5kZXJJbmRleCkgPT4gKHsgdXR4b0luZGV4LCBzZW5kZXJJbmRleCB9KSlcbiAgICAgICAgLnNvcnQoKGEsIGIpID0+IGEudXR4b0luZGV4IC0gYi51dHhvSW5kZXgpO1xuICAgICAgY29uc3Qgc2lnbmF0dXJlcyA9IHNpZ25lcnMubWFwKCh7IHNlbmRlckluZGV4IH0pID0+XG4gICAgICAgIC8vIFRPRE8oQkctNTY3MDApOiAgSW1wcm92ZSBjYW5TaWduIGJ5IGNoZWNrIGluIGFkZHJlc3NlcyBpbiBlbXB0eSBjcmVkZW50aWFscyBtYXRjaCBzaWduZXJcbiAgICAgICAgLy8gSFNNIHJlcXVpcmUgZW1wdHkgc2lnbmF0dXJlLlxuICAgICAgICB1dGlscy5jcmVhdGVTaWcoc2VuZGVySW5kZXggPT0gMSA/ICcnIDogc2VuZGVyW3NlbmRlckluZGV4XS50b1N0cmluZygnaGV4JykpXG4gICAgICApO1xuICAgICAgY29uc3Qgc2lnbmF0dXJlc0lkeCA9IHNpZ25lcnMubWFwKCh7IHV0eG9JbmRleCB9KSA9PiB1dHhvSW5kZXgpO1xuXG4gICAgICByZXR1cm4geyBhbW91bnQsIHR4aWRCdWYsIG91dHB1dElkeCwgc2lnbmF0dXJlc0lkeCwgc2lnbmF0dXJlcyB9O1xuICAgIH0pO1xuXG4gIHJldHVybiB7IGlucHV0cywgYW1vdW50OiBjdXJyZW50VG90YWwgfTtcbn1cbiJdfQ==