@bitgo-beta/sdk-coin-trx 1.2.3-alpha.26 → 1.2.3-alpha.261

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.
@@ -1,7 +1,11 @@
1
1
  "use strict";
2
2
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
3
  if (k2 === undefined) k2 = k;
4
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
5
9
  }) : (function(o, m, k, k2) {
6
10
  if (k2 === undefined) k2 = k;
7
11
  o[k2] = m[k];
@@ -11,56 +15,86 @@ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (
11
15
  }) : function(o, v) {
12
16
  o["default"] = v;
13
17
  });
14
- var __importStar = (this && this.__importStar) || function (mod) {
15
- if (mod && mod.__esModule) return mod;
16
- var result = {};
17
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
18
- __setModuleDefault(result, mod);
19
- return result;
20
- };
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
21
35
  var __importDefault = (this && this.__importDefault) || function (mod) {
22
36
  return (mod && mod.__esModule) ? mod : { "default": mod };
23
37
  };
24
38
  Object.defineProperty(exports, "__esModule", { value: true });
25
- exports.decodeDataParams = exports.encodeDataParams = exports.toHex = exports.isValidRawTransactionFormat = exports.isValidTxJsonString = exports.decodeAccountPermissionUpdateContract = exports.decodeTriggerSmartContract = exports.decodeTransferContract = exports.isValidHex = exports.decodeRawTransaction = exports.decodeTransaction = exports.getRawAddressFromPubKey = exports.signString = exports.signTransaction = exports.getBase58AddressFromHex = exports.getBase58AddressFromByteArray = exports.getAddressFromPriKey = exports.getPubKeyFromPriKey = exports.getHexAddressFromBase58Address = exports.verifySignature = exports.getHexAddressFromByteArray = exports.getByteArrayFromHexAddress = exports.isBase58Address = exports.tokenTestnetContractAddresses = exports.tokenMainnetContractAddresses = void 0;
39
+ exports.tokenTestnetContractAddresses = exports.tokenMainnetContractAddresses = void 0;
40
+ exports.isBase58Address = isBase58Address;
41
+ exports.getByteArrayFromHexAddress = getByteArrayFromHexAddress;
42
+ exports.getHexAddressFromByteArray = getHexAddressFromByteArray;
43
+ exports.verifySignature = verifySignature;
44
+ exports.getHexAddressFromBase58Address = getHexAddressFromBase58Address;
45
+ exports.getPubKeyFromPriKey = getPubKeyFromPriKey;
46
+ exports.getAddressFromPriKey = getAddressFromPriKey;
47
+ exports.getBase58AddressFromByteArray = getBase58AddressFromByteArray;
48
+ exports.getBase58AddressFromHex = getBase58AddressFromHex;
49
+ exports.signTransaction = signTransaction;
50
+ exports.signString = signString;
51
+ exports.getRawAddressFromPubKey = getRawAddressFromPubKey;
52
+ exports.decodeTransaction = decodeTransaction;
53
+ exports.decodeRawTransaction = decodeRawTransaction;
54
+ exports.isValidHex = isValidHex;
55
+ exports.decodeTransferContract = decodeTransferContract;
56
+ exports.decodeTriggerSmartContract = decodeTriggerSmartContract;
57
+ exports.decodeAccountPermissionUpdateContract = decodeAccountPermissionUpdateContract;
58
+ exports.isValidTxJsonString = isValidTxJsonString;
59
+ exports.isValidRawTransactionFormat = isValidRawTransactionFormat;
60
+ exports.toHex = toHex;
61
+ exports.encodeDataParams = encodeDataParams;
62
+ exports.decodeDataParams = decodeDataParams;
26
63
  const assert_1 = __importDefault(require("assert"));
27
64
  const hex = __importStar(require("@stablelib/hex"));
28
65
  const tronweb = __importStar(require("tronweb"));
29
66
  const tron_1 = require("../../resources/protobuf/tron");
30
67
  const sdk_core_1 = require("@bitgo-beta/sdk-core");
68
+ const statics_1 = require("@bitgo-beta/statics");
31
69
  const enum_1 = require("./enum");
32
70
  const utils_1 = require("ethers/lib/utils");
33
71
  const ADDRESS_PREFIX_REGEX = /^(41)/;
34
72
  const ADDRESS_PREFIX = '41';
35
- exports.tokenMainnetContractAddresses = [
36
- 'TEkxiTehnzSmSe2XqrBj4w32RUN966rdz8',
37
- 'TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t',
38
- ];
39
- exports.tokenTestnetContractAddresses = [
40
- 'TSdZwNqpHofzP6BsBKGQUWdBeJphLmF6id',
41
- 'TG3XXyExBkPp9nzdajDZsozEu4BkaSJozs',
42
- ];
73
+ const getTronTokens = (network = 'mainnet') => {
74
+ return statics_1.coins
75
+ .filter((coin) => coin.family === 'trx')
76
+ .filter((trx) => trx.network.type === network && trx.isToken).map((coins) => coins.contractAddress.toString());
77
+ };
78
+ exports.tokenMainnetContractAddresses = getTronTokens('mainnet');
79
+ exports.tokenTestnetContractAddresses = getTronTokens('testnet');
43
80
  /**
44
81
  * @param address
45
82
  */
46
83
  function isBase58Address(address) {
47
84
  return tronweb.utils.crypto.isAddressValid(address);
48
85
  }
49
- exports.isBase58Address = isBase58Address;
50
86
  /**
51
87
  * @param str
52
88
  */
53
89
  function getByteArrayFromHexAddress(str) {
54
90
  return tronweb.utils.code.hexStr2byteArray(str.replace('0x', ''));
55
91
  }
56
- exports.getByteArrayFromHexAddress = getByteArrayFromHexAddress;
57
92
  /**
58
93
  * @param arr
59
94
  */
60
95
  function getHexAddressFromByteArray(arr) {
61
96
  return tronweb.utils.code.byteArray2hexStr(arr);
62
97
  }
63
- exports.getHexAddressFromByteArray = getHexAddressFromByteArray;
64
98
  /**
65
99
  * @param messageToVerify
66
100
  * @param base58Address
@@ -79,7 +113,6 @@ function verifySignature(messageToVerify, base58Address, sigHex, useTronHeader =
79
113
  }
80
114
  return tronweb.Trx.verifySignature(messageToVerify, base58Address, sigHex, useTronHeader);
81
115
  }
82
- exports.verifySignature = verifySignature;
83
116
  /**
84
117
  * @param base58
85
118
  */
@@ -89,28 +122,24 @@ function getHexAddressFromBase58Address(base58) {
89
122
  const bytes = tronweb.utils.crypto.decodeBase58Address(base58);
90
123
  return getHexAddressFromByteArray(bytes);
91
124
  }
92
- exports.getHexAddressFromBase58Address = getHexAddressFromBase58Address;
93
125
  /**
94
126
  * @param privateKey
95
127
  */
96
128
  function getPubKeyFromPriKey(privateKey) {
97
129
  return tronweb.utils.crypto.getPubKeyFromPriKey(privateKey);
98
130
  }
99
- exports.getPubKeyFromPriKey = getPubKeyFromPriKey;
100
131
  /**
101
132
  * @param privateKey
102
133
  */
103
134
  function getAddressFromPriKey(privateKey) {
104
135
  return tronweb.utils.crypto.getAddressFromPriKey(privateKey);
105
136
  }
106
- exports.getAddressFromPriKey = getAddressFromPriKey;
107
137
  /**
108
138
  * @param address
109
139
  */
110
140
  function getBase58AddressFromByteArray(address) {
111
141
  return tronweb.utils.crypto.getBase58CheckAddress(address);
112
142
  }
113
- exports.getBase58AddressFromByteArray = getBase58AddressFromByteArray;
114
143
  /**
115
144
  * @param hex
116
145
  */
@@ -118,7 +147,6 @@ function getBase58AddressFromHex(hex) {
118
147
  const arr = getByteArrayFromHexAddress(hex);
119
148
  return getBase58AddressFromByteArray(arr);
120
149
  }
121
- exports.getBase58AddressFromHex = getBase58AddressFromHex;
122
150
  /**
123
151
  * @param privateKey
124
152
  * @param transaction
@@ -126,7 +154,6 @@ exports.getBase58AddressFromHex = getBase58AddressFromHex;
126
154
  function signTransaction(privateKey, transaction) {
127
155
  return tronweb.utils.crypto.signTransaction(privateKey, transaction);
128
156
  }
129
- exports.signTransaction = signTransaction;
130
157
  /**
131
158
  * @param message
132
159
  * @param privateKey
@@ -135,14 +162,12 @@ exports.signTransaction = signTransaction;
135
162
  function signString(message, privateKey, useTronHeader = true) {
136
163
  return tronweb.Trx.signString(message, privateKey, useTronHeader);
137
164
  }
138
- exports.signString = signString;
139
165
  /**
140
166
  * @param pubBytes
141
167
  */
142
168
  function getRawAddressFromPubKey(pubBytes) {
143
169
  return tronweb.utils.crypto.computeAddress(pubBytes);
144
170
  }
145
- exports.getRawAddressFromPubKey = getRawAddressFromPubKey;
146
171
  /**
147
172
  * Decodes a hex encoded transaction in its protobuf representation.
148
173
  *
@@ -183,7 +208,6 @@ function decodeTransaction(hexString) {
183
208
  fee_limit: +rawTransaction.feeLimit,
184
209
  };
185
210
  }
186
- exports.decodeTransaction = decodeTransaction;
187
211
  /**
188
212
  * Decodes a transaction's raw field from a base64 encoded string. This is a protobuf representation.
189
213
  *
@@ -210,7 +234,6 @@ function decodeRawTransaction(hexString) {
210
234
  blockHash: toHex(raw.refBlockHash),
211
235
  };
212
236
  }
213
- exports.decodeRawTransaction = decodeRawTransaction;
214
237
  /**
215
238
  * Indicates whether the passed string is a safe hex string for tron's purposes.
216
239
  *
@@ -219,7 +242,6 @@ exports.decodeRawTransaction = decodeRawTransaction;
219
242
  function isValidHex(hex) {
220
243
  return /^(0x)?([0-9a-f]{2})+$/i.test(hex);
221
244
  }
222
- exports.isValidHex = isValidHex;
223
245
  /** Deserialize the segment of the txHex which corresponds with the details of the transfer
224
246
  *
225
247
  * @param transferHex is the value property of the "parameter" field of contractList[0]
@@ -258,7 +280,6 @@ function decodeTransferContract(transferHex) {
258
280
  },
259
281
  ];
260
282
  }
261
- exports.decodeTransferContract = decodeTransferContract;
262
283
  /**
263
284
  * Deserialize the segment of the txHex corresponding with trigger smart contract
264
285
  *
@@ -298,7 +319,6 @@ function decodeTriggerSmartContract(base64) {
298
319
  },
299
320
  ];
300
321
  }
301
- exports.decodeTriggerSmartContract = decodeTriggerSmartContract;
302
322
  /**
303
323
  * Deserialize the segment of the txHex corresponding with the details of the contract which updates
304
324
  * account permission
@@ -308,9 +328,9 @@ exports.decodeTriggerSmartContract = decodeTriggerSmartContract;
308
328
  */
309
329
  function decodeAccountPermissionUpdateContract(base64) {
310
330
  const accountUpdateContract = tron_1.protocol.AccountPermissionUpdateContract.decode(Buffer.from(base64, 'base64')).toJSON();
311
- assert_1.default(accountUpdateContract.ownerAddress);
312
- assert_1.default(accountUpdateContract.owner);
313
- assert_1.default(accountUpdateContract.hasOwnProperty('actives'));
331
+ (0, assert_1.default)(accountUpdateContract.ownerAddress);
332
+ (0, assert_1.default)(accountUpdateContract.owner);
333
+ (0, assert_1.default)(accountUpdateContract.hasOwnProperty('actives'));
314
334
  const ownerAddress = getBase58AddressFromByteArray(getByteArrayFromHexAddress(Buffer.from(accountUpdateContract.ownerAddress, 'base64').toString('hex')));
315
335
  const owner = createPermission(accountUpdateContract.owner);
316
336
  let witness = undefined;
@@ -325,7 +345,6 @@ function decodeAccountPermissionUpdateContract(base64) {
325
345
  actives: activeList,
326
346
  };
327
347
  }
328
- exports.decodeAccountPermissionUpdateContract = decodeAccountPermissionUpdateContract;
329
348
  /**
330
349
  * @param raw
331
350
  */
@@ -353,7 +372,6 @@ function isValidTxJsonString(rawTransaction) {
353
372
  const transaction = JSON.parse(rawTransaction);
354
373
  return transaction.hasOwnProperty('txID');
355
374
  }
356
- exports.isValidTxJsonString = isValidTxJsonString;
357
375
  /**
358
376
  * Returns whether the provided raw transaction accommodates to bitgo's preferred format
359
377
  *
@@ -366,7 +384,6 @@ function isValidRawTransactionFormat(rawTransaction) {
366
384
  }
367
385
  return false;
368
386
  }
369
- exports.isValidRawTransactionFormat = isValidRawTransactionFormat;
370
387
  /**
371
388
  * Returns an hex string of the given buffer
372
389
  *
@@ -376,7 +393,6 @@ exports.isValidRawTransactionFormat = isValidRawTransactionFormat;
376
393
  function toHex(buffer) {
377
394
  return hex.encode(buffer, true);
378
395
  }
379
- exports.toHex = toHex;
380
396
  /**
381
397
  * Returns a Keccak-256 encoded string of the parameters
382
398
  *
@@ -396,11 +412,15 @@ function encodeDataParams(types, values, methodId) {
396
412
  data = abiCoder.encode(types, values);
397
413
  }
398
414
  catch (e) {
399
- console.log(e); // do something with this error i.e. throw it
415
+ throw new sdk_core_1.UtilsError(`There was an error encoding the data params. Error = ${JSON.stringify(e)}`);
416
+ }
417
+ if (methodId) {
418
+ return (0, utils_1.hexConcat)([methodId, data]).replace(/^(0x)/, '');
419
+ }
420
+ else {
421
+ return data.replace(/^(0x)/, '');
400
422
  }
401
- return utils_1.hexConcat([methodId, data]).replace(/^(0x)/, '');
402
423
  }
403
- exports.encodeDataParams = encodeDataParams;
404
424
  /**
405
425
  * Returns the decoded values according to the array of types
406
426
  *
@@ -417,5 +437,4 @@ function decodeDataParams(types, data) {
417
437
  return obj;
418
438
  }, []);
419
439
  }
420
- exports.decodeDataParams = decodeDataParams;
421
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxvREFBNEI7QUFDNUIsb0RBQXNDO0FBQ3RDLGlEQUFtQztBQUNuQyx3REFBeUQ7QUFFekQsbURBQWtEO0FBU2xELGlDQUFzRDtBQUN0RCw0Q0FBdUQ7QUFFdkQsTUFBTSxvQkFBb0IsR0FBRyxPQUFPLENBQUM7QUFDckMsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDO0FBRWYsUUFBQSw2QkFBNkIsR0FBRztJQUMzQyxvQ0FBb0M7SUFDcEMsb0NBQW9DO0NBQ3JDLENBQUM7QUFDVyxRQUFBLDZCQUE2QixHQUFHO0lBQzNDLG9DQUFvQztJQUNwQyxvQ0FBb0M7Q0FDckMsQ0FBQztBQVFGOztHQUVHO0FBQ0gsU0FBZ0IsZUFBZSxDQUFDLE9BQWU7SUFDN0MsT0FBTyxPQUFPLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDdEQsQ0FBQztBQUZELDBDQUVDO0FBRUQ7O0dBRUc7QUFDSCxTQUFnQiwwQkFBMEIsQ0FBQyxHQUFXO0lBQ3BELE9BQU8sT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNwRSxDQUFDO0FBRkQsZ0VBRUM7QUFFRDs7R0FFRztBQUNILFNBQWdCLDBCQUEwQixDQUFDLEdBQWM7SUFDdkQsT0FBTyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNsRCxDQUFDO0FBRkQsZ0VBRUM7QUFFRDs7Ozs7R0FLRztBQUNILFNBQWdCLGVBQWUsQ0FDN0IsZUFBdUIsRUFDdkIsYUFBcUIsRUFDckIsTUFBYyxFQUNkLGFBQWEs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RyxFQUFFLEtBQUssRUFBRSxFQUFFO1FBQzdELElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLFNBQVM7WUFBRSxHQUFHLEdBQUcsY0FBYyxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDbEYsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNkLE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQ1QsQ0FBQztBQVJELDRDQVFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuaW1wb3J0ICogYXMgaGV4IGZyb20gJ0BzdGFibGVsaWIvaGV4JztcbmltcG9ydCAqIGFzIHRyb253ZWIgZnJvbSAndHJvbndlYic7XG5pbXBvcnQgeyBwcm90b2NvbCB9IGZyb20gJy4uLy4uL3Jlc291cmNlcy9wcm90b2J1Zi90cm9uJztcblxuaW1wb3J0IHsgVXRpbHNFcnJvciB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcbmltcG9ydCB7XG4gIFRyYW5zZmVyQ29udHJhY3QsXG4gIFJhd0RhdGEsXG4gIEFjY291bnRQZXJtaXNzaW9uVXBkYXRlQ29udHJhY3QsXG4gIFRyYW5zYWN0aW9uUmVjZWlwdCxcbiAgUGVybWlzc2lvbixcbiAgVHJpZ2dlclNtYXJ0Q29udHJhY3QsXG59IGZyb20gJy4vaWZhY2UnO1xuaW1wb3J0IHsgQ29udHJhY3RUeXBlLCBQZXJtaXNzaW9uVHlwZSB9IGZyb20gJy4vZW51bSc7XG5pbXBvcnQgeyBBYmlDb2RlciwgaGV4Q29uY2F0IH0gZnJvbSAnZXRoZXJzL2xpYi91dGlscyc7XG5cbmNvbnN0IEFERFJFU1NfUFJFRklYX1JFR0VYID0gL14oNDEpLztcbmNvbnN0IEFERFJFU1NfUFJFRklYID0gJzQxJztcblxuZXhwb3J0IGNvbnN0IHRva2VuTWFpbm5ldENvbnRyYWN0QWRkcmVzc2VzID0gW1xuICAnVEVreGlUZWhuelNtU2UyWHFyQmo0dzMyUlVOOTY2cmR6OCcsXG4gICdUUjdOSHFqZUtReEdUQ2k4cThaWTRwTDhvdFN6Z2pMajZ0Jyxcbl07XG5leHBvcnQgY29uc3QgdG9rZW5UZXN0bmV0Q29udHJhY3RBZGRyZXNzZXMgPSBbXG4gICdUU2Rad05xcEhvZnpQNkJzQktHUVVXZEJlSnBoTG1GNmlkJyxcbiAgJ1RHM1hYeUV4QmtQcDluemRhakRac296RXU0QmthU0pvenMnLFxuXTtcblxuLyoqXG4gKiBUcm9uLXNwZWNpZmljIGhlbHBlciBmdW5jdGlvbnNcbiAqL1xuZXhwb3J0IHR5cGUgVHJvbkJpbmFyeUxpa2UgPSBCeXRlQXJyYXkgfCBCdWZmZXIgfCBVaW50OEFycmF5IHwgc3RyaW5nO1xuZXhwb3J0IHR5cGUgQnl0ZUFycmF5ID0gbnVtYmVyW107XG5cbi8qKlxuICogQHBhcmFtIGFkZHJlc3NcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzQmFzZTU4QWRkcmVzcyhhZGRyZXNzOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIHRyb253ZWIudXRpbHMuY3J5cHRvLmlzQWRkcmVzc1ZhbGlkKGFkZHJlc3MpO1xufVxuXG4vKipcbiAqIEBwYXJhbSBzdHJcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEJ5dGVBcnJheUZyb21IZXhBZGRyZXNzKHN0cjogc3RyaW5nKTogQnl0ZUFycmF5IHtcbiAgcmV0dXJuIHRyb253ZWIudXRpbHMuY29kZS5oZXhTdHIyYnl0ZUFycmF5KHN0ci5yZXBsYWNlKCcweCcsICcnKSk7XG59XG5cbi8qKlxuICogQHBhcmFtIGFyclxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0SGV4QWRkcmVzc0Zyb21CeXRlQXJyYXkoYXJyOiBCeXRlQXJyYXkpOiBzdHJpbmcge1xuICByZXR1cm4gdHJvbndlYi51dGlscy5jb2RlLmJ5dGVBcnJheTJoZXhTdHIoYXJyKTtcbn1cblxuLyoqXG4gKiBAcGFyYW0gbWVzc2FnZVRvVmVyaWZ5XG4gKiBAcGFyYW0gYmFzZTU4QWRkcmVzc1xuICogQHBhcmFtIHNpZ0hleFxuICogQHBhcmFtIHVzZVRyb25IZWFkZXJcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZlcmlmeVNpZ25hdHVyZShcbiAgbWVzc2FnZVRvVmVyaWZ5OiBzdHJpbmcsXG4gIGJhc2U1OEFkZHJlc3M6IHN0cmluZyxcbiAgc2lnSGV4OiBzdHJpbmcsXG4gIHVzZVRyb25IZWFkZXIgPSB0cnVlXG4pOiBib29sZWFuIHtcbiAgaWYgKCFpc1ZhbGlkSGV4KHNpZ0hleCkpIHtcbiAgICB0aHJvdyBuZXcgVXRpbHNFcnJvcignc2lnbmF0dXJlIGlzIG5vdCBpbiBhIHZhbGlkIGZvcm1hdCwgbmVlZHMgdG8gYmUgaGV4YWRlY2ltYWwnKTtcbiAgfVxuXG4gIGlmICghaXNWYWxpZEhleChtZXNzYWdlVG9WZXJpZnkpKSB7XG4gICAgdGhyb3cgbmV3IFV0aWxzRXJyb3IoJ21lc3NhZ2UgaXMgbm90IGluIGEgdmFsaWQgZm9ybWF0LCBuZWVkcyB0byBiZSBoZXhhZGVjaW1hbCcpO1xuICB9XG5cbiAgaWYgKCFpc0Jhc2U1OEFkZHJlc3MoYmFzZTU4QWRkcmVzcykpIHtcbiAgICB0aHJvdyBuZXcgVXRpbHNFcnJvcignYWRkcmVzcyBuZWVkcyB0byBiZSBiYXNlNTggZW5jb2RlZCcpO1xuICB9XG5cbiAgcmV0dXJuIHRyb253ZWIuVHJ4LnZlcmlmeVNpZ25hdHVyZShtZXNzYWdlVG9WZXJpZnksIGJhc2U1OEFkZHJlc3MsIHNpZ0hleCwgdXNlVHJvbkhlYWRlcik7XG59XG5cbi8qKlxuICogQHBhcmFtIGJhc2U1OFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0SGV4QWRkcmVzc0Zyb21CYXNlNThBZGRyZXNzKGJhc2U1ODogc3RyaW5nKTogc3RyaW5nIHtcbiAgLy8gcHVsbGVkIGZyb206IGh0dHBzOi8vZ2l0aHViLmNvbS9UUk9OLVVTL3Ryb253ZWIvYmxvYi9kY2I4ZWZhMzZhNWViYjY1YzRkYWIzNjI2ZTkwMjU2YTQ1M2YzYjBkL3NyYy91dGlscy9oZWxwLmpzI0wxN1xuICAvLyBidXQgdGhleSBkb24ndCBzdXJmYWNlIHRoaXMgY2FsbCBpbiBpbmRleC5qc1xuICBjb25zdCBieXRlcyA9IHRyb253ZWIudXRpbHMuY3J5cHRvLmRlY29kZUJhc2U1OEFkZHJlc3MoYmFzZTU4KTtcbiAgcmV0dXJuIGdldEhleEFkZHJlc3NGcm9tQnl0ZUFycmF5KGJ5dGVzKTtcbn1cblxuLyoqXG4gKiBAcGFyYW0gcHJpdmF0ZUtleVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0UHViS2V5RnJvbVByaUtleShwcml2YXRlS2V5OiBUcm9uQmluYXJ5TGlrZSk6IEJ5dGVBcnJheSB7XG4gIHJldHVybiB0cm9ud2ViLnV0aWxzLmNyeXB0by5nZXRQdWJLZXlGcm9tUHJpS2V5KHByaXZhdGVLZXkpO1xufVxuXG4vKipcbiAqIEBwYXJhbSBwcml2YXRlS2V5XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRBZGRyZXNzRnJvbVByaUtleShwcml2YXRlS2V5OiBUcm9uQmluYXJ5TGlrZSk6IEJ5dGVBcnJheSB7XG4gIHJldHVybiB0cm9ud2ViLnV0aWxzLmNyeXB0by5nZXRBZGRyZXNzRnJvbVByaUtleShwcml2YXRlS2V5KTtcbn1cblxuLyoqXG4gKiBAcGFyYW0gYWRkcmVzc1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0QmFzZTU4QWRkcmVzc0Zyb21CeXRlQXJyYXkoYWRkcmVzczogQnl0ZUFycmF5KTogc3RyaW5nIHtcbiAgcmV0dXJuIHRyb253ZWIudXRpbHMuY3J5cHRvLmdldEJhc2U1OENoZWNrQWRkcmVzcyhhZGRyZXNzKTtcbn1cblxuLyoqXG4gKiBAcGFyYW0gaGV4XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRCYXNlNThBZGRyZXNzRnJvbUhleChoZXg6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IGFyciA9IGdldEJ5dGVBcnJheUZyb21IZXhBZGRyZXNzKGhleCk7XG4gIHJldHVybiBnZXRCYXNlNThBZGRyZXNzRnJvbUJ5dGVBcnJheShhcnIpO1xufVxuXG4vKipcbiAqIEBwYXJhbSBwcml2YXRlS2V5XG4gKiBAcGFyYW0gdHJhbnNhY3Rpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNpZ25UcmFuc2FjdGlvbihwcml2YXRlS2V5OiBzdHJpbmcgfCBCeXRlQXJyYXksIHRyYW5zYWN0aW9uOiBUcmFuc2FjdGlvblJlY2VpcHQpOiBUcmFuc2FjdGlvblJlY2VpcHQge1xuICByZXR1cm4gdHJvbndlYi51dGlscy5jcnlwdG8uc2lnblRyYW5zYWN0aW9uKHByaXZhdGVLZXksIHRyYW5zYWN0aW9uKTtcbn1cblxuLyoqXG4gKiBAcGFyYW0gbWVzc2FnZVxuICogQHBhcmFtIHByaXZhdGVLZXlcbiAqIEBwYXJhbSB1c2VUcm9uSGVhZGVyXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzaWduU3RyaW5nKG1lc3NhZ2U6IHN0cmluZywgcHJpdmF0ZUtleTogc3RyaW5nIHwgQnl0ZUFycmF5LCB1c2VUcm9uSGVhZGVyID0gdHJ1ZSk6IHN0cmluZyB7XG4gIHJldHVybiB0cm9ud2ViLlRyeC5zaWduU3RyaW5nKG1lc3NhZ2UsIHByaXZhdGVLZXksIHVzZVRyb25IZWFkZXIpO1xufVxuXG4vKipcbiAqIEBwYXJhbSBwdWJCeXRlc1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0UmF3QWRkcmVzc0Zyb21QdWJLZXkocHViQnl0ZXM6IFRyb25CaW5hcnlMaWtlKTogQnl0ZUFycmF5IHtcbiAgcmV0dXJuIHRyb253ZWIudXRpbHMuY3J5cHRvLmNvbXB1dGVBZGRyZXNzKHB1YkJ5dGVzKTtcbn1cblxuLyoqXG4gKiBEZWNvZGVzIGEgaGV4IGVuY29kZWQgdHJhbnNhY3Rpb24gaW4gaXRzIHByb3RvYnVmIHJlcHJlc2VudGF0aW9uLlxuICpcbiAqIEBwYXJhbSBoZXhTdHJpbmcgcmF3X2RhdGFfaGV4IGZpZWxkIGZyb20gdHJvbiB0cmFuc2FjdGlvbnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlY29kZVRyYW5zYWN0aW9uKGhleFN0cmluZzogc3RyaW5nKTogUmF3RGF0YSB7XG4gIGNvbnN0IHJhd1RyYW5zYWN0aW9uID0gZGVjb2RlUmF3VHJhbnNhY3Rpb24oaGV4U3RyaW5nKTtcblxuICAvLyB0aGVyZSBzaG91bGQgbm90IGJlIG11bHRpcGxlIGNvbnRyYWN0cyBpbiB0aGlzIGRhdGFcbiAgaWYgKHJhd1RyYW5zYWN0aW9uLmNvbnRyYWN0cy5sZW5ndGggIT09IDEpIHtcbiAgICB0aHJvdyBuZXcgVXRpbHNFcnJvcignTnVtYmVyIG9mIGNvbnRyYWN0cyBpcyBncmVhdGVyIHRoYW4gMS4nKTtcbiAgfVxuXG4gIGxldCBjb250cmFjdDogVHJhbnNmZXJDb250cmFjdFtdIHwgQWNjb3VudFBlcm1pc3Npb25VcGRhdGVDb250cmFjdFtdIHwgVHJpZ2dlclNtYXJ0Q29udHJhY3RbXTtcbiAgbGV0IGNvbnRyYWN0VHlwZTogQ29udHJhY3RUeXBlO1xuICAvLyBlbnN1cmUgdGhlIGNvbnRyYWN0IHR5cGUgaXMgc3VwcG9ydGVkXG4gIHN3aXRjaCAocmF3VHJhbnNhY3Rpb24uY29udHJhY3RzWzBdLnBhcmFtZXRlci50eXBlX3VybCkge1xuICAgIGNhc2UgJ3R5cGUuZ29vZ2xlYXBpcy5jb20vcHJvdG9jb2wuVHJhbnNmZXJDb250cmFjdCc6XG4gICAgICBjb250cmFjdFR5cGUgPSBDb250cmFjdFR5cGUuVHJhbnNmZXI7XG4gICAgICBjb250cmFjdCA9IGV4cG9ydHMuZGVjb2RlVHJhbnNmZXJDb250cmFjdChyYXdUcmFuc2FjdGlvbi5jb250cmFjdHNbMF0ucGFyYW1ldGVyLnZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3R5cGUuZ29vZ2xlYXBpcy5jb20vcHJvdG9jb2wuQWNjb3VudFBlcm1pc3Npb25VcGRhdGVDb250cmFjdCc6XG4gICAgICBjb250cmFjdFR5cGUgPSBDb250cmFjdFR5cGUuQWNjb3VudFBlcm1pc3Npb25VcGRhdGU7XG4gICAgICBjb250cmFjdCA9IGV4cG9ydHMuZGVjb2RlQWNjb3VudFBlcm1pc3Npb25VcGRhdGVDb250cmFjdChyYXdUcmFuc2FjdGlvbi5jb250cmFjdHNbMF0ucGFyYW1ldGVyLnZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3R5cGUuZ29vZ2xlYXBpcy5jb20vcHJvdG9jb2wuVHJpZ2dlclNtYXJ0Q29udHJhY3QnOlxuICAgICAgY29udHJhY3RUeXBlID0gQ29udHJhY3RUeXBlLlRyaWdnZXJTbWFydENvbnRyYWN0O1xuICAgICAgY29udHJhY3QgPSBleHBvcnRzLmRlY29kZVRyaWdnZXJTbWFydENvbnRyYWN0KHJhd1RyYW5zYWN0aW9uLmNvbnRyYWN0c1swXS5wYXJhbWV0ZXIudmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyBVdGlsc0Vycm9yKCdVbnN1cHBvcnRlZCBjb250cmFjdCB0eXBlJyk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGNvbnRyYWN0VHlwZSxcbiAgICBjb250cmFjdCxcbiAgICBleHBpcmF0aW9uOiByYXdUcmFuc2FjdGlvbi5leHBpcmF0aW9uLFxuICAgIHRpbWVzdGFtcDogcmF3VHJhbnNhY3Rpb24udGltZXN0YW1wLFxuICAgIHJlZl9ibG9ja19ieXRlczogcmF3VHJhbnNhY3Rpb24uYmxvY2tCeXRlcyxcbiAgICByZWZfYmxvY2tfaGFzaDogcmF3VHJhbnNhY3Rpb24uYmxvY2tIYXNoLFxuICAgIGZlZV9saW1pdDogK3Jhd1RyYW5zYWN0aW9uLmZlZUxpbWl0LFxuICB9O1xufVxuXG4vKipcbiAqIERlY29kZXMgYSB0cmFuc2FjdGlvbidzIHJhdyBmaWVsZCBmcm9tIGEgYmFzZTY0IGVuY29kZWQgc3RyaW5nLiBUaGlzIGlzIGEgcHJvdG9idWYgcmVwcmVzZW50YXRpb24uXG4gKlxuICogQHBhcmFtIGhleFN0cmluZyB0aGlzIGlzIHRoZSByYXcgaGV4YWRlY2ltYWwgZW5jb2RlZCBzdHJpbmcuIERvYyBmb3VuZCBpbiB0aGUgZm9sbG93aW5nIGxpbmsuXG4gKiBAZXhhbXBsZVxuICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL0JpdEdvL2JpdGdvLWFjY291bnQtbGliL2Jsb2IvNWYyODI1ODg3MDE3NzhhNDQyMWM3NWZhNjFmNDI3MTNmNTZlOTViOS9yZXNvdXJjZXMvcHJvdG9idWYvdHJvbi5wcm90byNMMzE5fVxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVjb2RlUmF3VHJhbnNhY3Rpb24oaGV4U3RyaW5nOiBzdHJpbmcpOiB7XG4gIGV4cGlyYXRpb246IG51bWJlcjtcbiAgdGltZXN0YW1wOiBudW1iZXI7XG4gIGNvbnRyYWN0czogQXJyYXk8YW55PjtcbiAgYmxvY2tCeXRlczogc3RyaW5nO1xuICBibG9ja0hhc2g6IHN0cmluZztcbiAgZmVlTGltaXQ6IHN0cmluZztcbn0ge1xuICBjb25zdCBieXRlcyA9IEJ1ZmZlci5mcm9tKGhleFN0cmluZywgJ2hleCcpO1xuXG4gIGxldCByYXc7XG4gIHRyeSB7XG4gICAgLy8gd2UgbmVlZCB0byBkZWNvZGUgb3VyIHJhd19kYXRhX2hleCBmaWVsZCBmaXJzdFxuICAgIHJhdyA9IHByb3RvY29sLlRyYW5zYWN0aW9uLnJhdy5kZWNvZGUoYnl0ZXMpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgdGhyb3cgbmV3IFV0aWxzRXJyb3IoJ1RoZXJlIHdhcyBhbiBlcnJvciBkZWNvZGluZyB0aGUgaW5pdGlhbCByYXdfZGF0YV9oZXggZnJvbSB0aGUgc2VyaWFsaXplZCB0eC4nKTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgZXhwaXJhdGlvbjogTnVtYmVyKHJhdy5leHBpcmF0aW9uKSxcbiAgICB0aW1lc3RhbXA6IE51bWJlcihyYXcudGltZXN0YW1wKSxcbiAgICBjb250cmFjdHM6IHJhdy5jb250cmFjdCxcbiAgICBibG9ja0J5dGVzOiB0b0hleChyYXcucmVmQmxvY2tCeXRlcyksXG4gICAgZmVlTGltaXQ6IHJhdy5mZWVMaW1pdCxcbiAgICBibG9ja0hhc2g6IHRvSGV4KHJhdy5yZWZCbG9ja0hhc2gpLFxuICB9O1xufVxuXG4vKipcbiAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBwYXNzZWQgc3RyaW5nIGlzIGEgc2FmZSBoZXggc3RyaW5nIGZvciB0cm9uJ3MgcHVycG9zZXMuXG4gKlxuICogQHBhcmFtIGhleCBBIHZhbGlkIGhleCBzdHJpbmcgbXVzdCBiZSBhIHN0cmluZyBtYWRlIG9mIG51bWJlcnMgYW5kIGNoYXJhY3RlcnMgYW5kIGhhcyBhbiBldmVuIGxlbmd0aC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzVmFsaWRIZXgoaGV4OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIC9eKDB4KT8oWzAtOWEtZl17Mn0pKyQvaS50ZXN0KGhleCk7XG59XG5cbi8qKiBEZXNlcmlhbGl6ZSB0aGUgc2VnbWVudCBvZiB0aGUgdHhIZXggd2hpY2ggY29ycmVzcG9uZHMgd2l0aCB0aGUgZGV0YWlscyBvZiB0aGUgdHJhbnNmZXJcbiAqXG4gKiBAcGFyYW0gdHJhbnNmZXJIZXggaXMgdGhlIHZhbHVlIHByb3BlcnR5IG9mIHRoZSBcInBhcmFtZXRlclwiIGZpZWxkIG9mIGNvbnRyYWN0TGlzdFswXVxuICogKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWNvZGVUcmFuc2ZlckNvbnRyYWN0KHRyYW5zZmVySGV4OiBzdHJpbmcpOiBUcmFuc2ZlckNvbnRyYWN0W10ge1xuICBjb25zdCBjb250cmFjdEJ5dGVzID0gQnVmZmVyLmZyb20odHJhbnNmZXJIZXgsICdiYXNlNjQnKTtcbiAgbGV0IHRyYW5zZmVyQ29udHJhY3Q7XG5cbiAgdHJ5IHtcbiAgICB0cmFuc2ZlckNvbnRyYWN0ID0gcHJvdG9jb2wuVHJhbnNmZXJDb250cmFjdC5kZWNvZGUoY29udHJhY3RCeXRlcyk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICB0aHJvdyBuZXcgVXRpbHNFcnJvcignVGhlcmUgd2FzIGFuIGVycm9yIGRlY29kaW5nIHRoZSB0cmFuc2ZlciBjb250cmFjdCBpbiB0aGUgdHJhbnNhY3Rpb24uJyk7XG4gIH1cblxuICBpZiAoIXRyYW5zZmVyQ29udHJhY3Qub3duZXJBZGRyZXNzKSB7XG4gICAgdGhyb3cgbmV3IFV0aWxzRXJyb3IoJ093bmVyIGFkZHJlc3MgZG9lcyBub3QgZXhpc3QgaW4gdGhpcyB0cmFuc2ZlciBjb250cmFjdC4nKTtcbiAgfVxuXG4gIGlmICghdHJhbnNmZXJDb250cmFjdC50b0FkZHJlc3MpIHtcbiAgICB0aHJvdyBuZXcgVXRpbHNFcnJvcignRGVzdGluYXRpb24gYWRkcmVzcyBkb2VzIG5vdCBleGlzdCBpbiB0aGlzIHRyYW5zZmVyIGNvbnRyYWN0LicpO1xuICB9XG5cbiAgaWYgKCF0cmFuc2ZlckNvbnRyYWN0Lmhhc093blByb3BlcnR5KCdhbW91bnQnKSkge1xuICAgIHRocm93IG5ldyBVdGlsc0Vycm9yKCdBbW91bnQgZG9lcyBub3QgZXhpc3QgaW4gdGhpcyB0cmFuc2ZlciBjb250cmFjdC4nKTtcbiAgfVxuXG4gIC8vIGRlc2VyaWFsaXplIGF0dHJpYnV0ZXNcbiAgY29uc3Qgb3duZXJfYWRkcmVzcyA9IGdldEJhc2U1OEFkZHJlc3NGcm9tQnl0ZUFycmF5KFxuICAgIGdldEJ5dGVBcnJheUZyb21IZXhBZGRyZXNzKEJ1ZmZlci5mcm9tKHRyYW5zZmVyQ29udHJhY3Qub3duZXJBZGRyZXNzLCAnYmFzZTY0JykudG9TdHJpbmcoJ2hleCcpKVxuICApO1xuICBjb25zdCB0b19hZGRyZXNzID0gZ2V0QmFzZTU4QWRkcmVzc0Zyb21CeXRlQXJyYXkoXG4gICAgZ2V0Qnl0ZUFycmF5RnJvbUhleEFkZHJlc3MoQnVmZmVyLmZyb20odHJhbnNmZXJDb250cmFjdC50b0FkZHJlc3MsICdiYXNlNjQnKS50b1N0cmluZygnaGV4JykpXG4gICk7XG4gIGNvbnN0IGFtb3VudCA9IHRyYW5zZmVyQ29udHJhY3QuYW1vdW50O1xuXG4gIHJldHVybiBbXG4gICAge1xuICAgICAgcGFyYW1ldGVyOiB7XG4gICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgYW1vdW50OiBOdW1iZXIoYW1vdW50KSxcbiAgICAgICAgICBvd25lcl9hZGRyZXNzLFxuICAgICAgICAgIHRvX2FkZHJlc3MsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0sXG4gIF07XG59XG5cbi8qKlxuICogRGVzZXJpYWxpemUgdGhlIHNlZ21lbnQgb2YgdGhlIHR4SGV4IGNvcnJlc3BvbmRpbmcgd2l0aCB0cmlnZ2VyIHNtYXJ0IGNvbnRyYWN0XG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGJhc2U2NFxuICogQHJldHVybnMge0FjY291bnRQZXJtaXNzaW9uVXBkYXRlQ29udHJhY3R9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWNvZGVUcmlnZ2VyU21hcnRDb250cmFjdChiYXNlNjQ6IHN0cmluZyk6IFRyaWdnZXJTbWFydENvbnRyYWN0W10ge1xuICBsZXQgY29udHJhY3RDYWxsRGVjb2RlZDtcbiAgdHJ5IHtcbiAgICBjb250cmFjdENhbGxEZWNvZGVkID0gcHJvdG9jb2wuVHJpZ2dlclNtYXJ0Q29udHJhY3QuZGVjb2RlKEJ1ZmZlci5mcm9tKGJhc2U2NCwgJ2Jhc2U2NCcpKS50b0pTT04oKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHRocm93IG5ldyBVdGlsc0Vycm9yKCdUaGVyZSB3YXMgYW4gZXJyb3IgZGVjb2RpbmcgdGhlIGNvbnRyYWN0IGNhbGwgaW4gdGhlIHRyYW5zYWN0aW9uLicpO1xuICB9XG5cbiAgaWYgKCFjb250cmFjdENhbGxEZWNvZGVkLm93bmVyQWRkcmVzcykge1xuICAgIHRocm93IG5ldyBVdGlsc0Vycm9yKCdPd25lciBhZGRyZXNzIGRvZXMgbm90IGV4aXN0IGluIHRoaXMgY29udHJhY3QgY2FsbC4nKTtcbiAgfVxuXG4gIGlmICghY29udHJhY3RDYWxsRGVjb2RlZC5jb250cmFjdEFkZHJlc3MpIHtcbiAgICB0aHJvdyBuZXcgVXRpbHNFcnJvcignRGVzdGluYXRpb24gY29udHJhY3QgYWRkcmVzcyBkb2VzIG5vdCBleGlzdCBpbiB0aGlzIGNvbnRyYWN0IGNhbGwuJyk7XG4gIH1cblxuICBpZiAoIWNvbnRyYWN0Q2FsbERlY29kZWQuZGF0YSkge1xuICAgIHRocm93IG5ldyBVdGlsc0Vycm9yKCdEYXRhIGRvZXMgbm90IGV4aXN0IGluIHRoaXMgY29udHJhY3QgY2FsbC4nKTtcbiAgfVxuXG4gIC8vIGRlc2VyaWFsaXplIGF0dHJpYnV0ZXNcbiAgY29uc3Qgb3duZXJfYWRkcmVzcyA9IGdldEJhc2U1OEFkZHJlc3NGcm9tQnl0ZUFycmF5KFxuICAgIGdldEJ5dGVBcnJheUZyb21IZXhBZGRyZXNzKEJ1ZmZlci5mcm9tKGNvbnRyYWN0Q2FsbERlY29kZWQub3duZXJBZGRyZXNzLCAnYmFzZTY0JykudG9TdHJpbmcoJ2hleCcpKVxuICApO1xuICBjb25zdCBjb250cmFjdF9hZGRyZXNzID0gZ2V0QmFzZTU4QWRkcmVzc0Zyb21CeXRlQXJyYXkoXG4gICAgZ2V0Qnl0ZUFycmF5RnJvbUhleEFkZHJlc3MoQnVmZmVyLmZyb20oY29udHJhY3RDYWxsRGVjb2RlZC5jb250cmFjdEFkZHJlc3MsICdiYXNlNjQnKS50b1N0cmluZygnaGV4JykpXG4gICk7XG4gIGNvbnN0IGRhdGEgPSBjb250cmFjdENhbGxEZWNvZGVkLmRhdGE7XG4gIHJldHVybiBbXG4gICAge1xuICAgICAgcGFyYW1ldGVyOiB7XG4gICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgZGF0YTogZGF0YSxcbiAgICAgICAgICBvd25lcl9hZGRyZXNzLFxuICAgICAgICAgIGNvbnRyYWN0X2FkZHJlc3MsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0sXG4gIF07XG59XG5cbi8qKlxuICogRGVzZXJpYWxpemUgdGhlIHNlZ21lbnQgb2YgdGhlIHR4SGV4IGNvcnJlc3BvbmRpbmcgd2l0aCB0aGUgZGV0YWlscyBvZiB0aGUgY29udHJhY3Qgd2hpY2ggdXBkYXRlc1xuICogYWNjb3VudCBwZXJtaXNzaW9uXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGJhc2U2NFxuICogQHJldHVybnMge0FjY291bnRQZXJtaXNzaW9uVXBkYXRlQ29udHJhY3R9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWNvZGVBY2NvdW50UGVybWlzc2lvblVwZGF0ZUNvbnRyYWN0KGJhc2U2NDogc3RyaW5nKTogQWNjb3VudFBlcm1pc3Npb25VcGRhdGVDb250cmFjdCB7XG4gIGNvbnN0IGFjY291bnRVcGRhdGVDb250cmFjdCA9IHByb3RvY29sLkFjY291bnRQZXJtaXNzaW9uVXBkYXRlQ29udHJhY3QuZGVjb2RlKEJ1ZmZlci5mcm9tKGJhc2U2NCwgJ2Jhc2U2NCcpKS50b0pTT04oKTtcbiAgYXNzZXJ0KGFjY291bnRVcGRhdGVDb250cmFjdC5vd25lckFkZHJlc3MpO1xuICBhc3NlcnQoYWNjb3VudFVwZGF0ZUNvbnRyYWN0Lm93bmVyKTtcbiAgYXNzZXJ0KGFjY291bnRVcGRhdGVDb250cmFjdC5oYXNPd25Qcm9wZXJ0eSgnYWN0aXZlcycpKTtcblxuICBjb25zdCBvd25lckFkZHJlc3MgPSBnZXRCYXNlNThBZGRyZXNzRnJvbUJ5dGVBcnJheShcbiAgICBnZXRCeXRlQXJyYXlGcm9tSGV4QWRkcmVzcyhCdWZmZXIuZnJvbShhY2NvdW50VXBkYXRlQ29udHJhY3Qub3duZXJBZGRyZXNzLCAnYmFzZTY0JykudG9TdHJpbmcoJ2hleCcpKVxuICApO1xuICBjb25zdCBvd25lcjogUGVybWlzc2lvbiA9IGNyZWF0ZVBlcm1pc3Npb24oYWNjb3VudFVwZGF0ZUNvbnRyYWN0Lm93bmVyKTtcbiAgbGV0IHdpdG5lc3M6IFBlcm1pc3Npb24gfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG4gIGlmIChhY2NvdW50VXBkYXRlQ29udHJhY3Qud2l0bmVzcykge1xuICAgIHdpdG5lc3MgPSBjcmVhdGVQZXJtaXNzaW9uKGFjY291bnRVcGRhdGVDb250cmFjdC53aXRuZXNzKTtcbiAgfVxuICBjb25zdCBhY3RpdmVMaXN0ID0gYWNjb3VudFVwZGF0ZUNvbnRyYWN0LmFjdGl2ZXMubWFwKChhY3RpdmUpID0+IGNyZWF0ZVBlcm1pc3Npb24oYWN0aXZlKSk7XG5cbiAgcmV0dXJuIHtcbiAgICBvd25lckFkZHJlc3MsXG4gICAgb3duZXIsXG4gICAgd2l0bmVzcyxcbiAgICBhY3RpdmVzOiBhY3RpdmVMaXN0LFxuICB9O1xufVxuXG4vKipcbiAqIEBwYXJhbSByYXdcbiAqL1xuZnVuY3Rpb24gY3JlYXRlUGVybWlzc2lvbihyYXc6IHsgcGVybWlzc2lvbk5hbWU6IHN0cmluZzsgdGhyZXNob2xkOiBudW1iZXIgfSk6IFBlcm1pc3Npb24ge1xuICBsZXQgcGVybWlzc2lvblR5cGU6IFBlcm1pc3Npb25UeXBlO1xuICBjb25zdCBwZXJtaXNzaW9uID0gcmF3LnBlcm1pc3Npb25OYW1lLnRvTG93ZXJDYXNlKCkudHJpbSgpO1xuICBpZiAocGVybWlzc2lvbiA9PT0gJ293bmVyJykge1xuICAgIHBlcm1pc3Npb25UeXBlID0gUGVybWlzc2lvblR5cGUuT3duZXI7XG4gIH0gZWxzZSBpZiAocGVybWlzc2lvbiA9PT0gJ3dpdG5lc3MnKSB7XG4gICAgcGVybWlzc2lvblR5cGUgPSBQZXJtaXNzaW9uVHlwZS5XaXRuZXNzO1xuICB9IGVsc2UgaWYgKHBlcm1pc3Npb24uc3Vic3RyKDAsIDYpID09PSAnYWN0aXZlJykge1xuICAgIHBlcm1pc3Npb25UeXBlID0gUGVybWlzc2lvblR5cGUuQWN0aXZlO1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBVdGlsc0Vycm9yKCdQZXJtaXNzaW9uIHR5cGUgbm90IHBhcnNlYWJsZS4nKTtcbiAgfVxuICByZXR1cm4geyB0eXBlOiBwZXJtaXNzaW9uVHlwZSwgdGhyZXNob2xkOiByYXcudGhyZXNob2xkIH07XG59XG5cbi8qKlxuICogQHBhcmFtIHJhd1RyYW5zYWN0aW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1ZhbGlkVHhKc29uU3RyaW5nKHJhd1RyYW5zYWN0aW9uOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgY29uc3QgdHJhbnNhY3Rpb24gPSBKU09OLnBhcnNlKHJhd1RyYW5zYWN0aW9uKTtcbiAgcmV0dXJuIHRyYW5zYWN0aW9uLmhhc093blByb3BlcnR5KCd0eElEJyk7XG59XG5cbi8qKlxuICogUmV0dXJucyB3aGV0aGVyIHRoZSBwcm92aWRlZCByYXcgdHJhbnNhY3Rpb24gYWNjb21tb2RhdGVzIHRvIGJpdGdvJ3MgcHJlZmVycmVkIGZvcm1hdFxuICpcbiAqIEBwYXJhbSB7YW55fSByYXdUcmFuc2FjdGlvbiAtIFRoZSByYXcgdHJhbnNhY3Rpb24gdG8gYmUgY2hlY2tlZFxuICogQHJldHVybnMge2Jvb2xlYW59IHRoZSB2YWxpZGF0aW9uIHJlc3VsdFxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNWYWxpZFJhd1RyYW5zYWN0aW9uRm9ybWF0KHJhd1RyYW5zYWN0aW9uOiBhbnkpOiBib29sZWFuIHtcbiAgaWYgKHR5cGVvZiByYXdUcmFuc2FjdGlvbiA9PT0gJ3N0cmluZycgJiYgKGlzVmFsaWRIZXgocmF3VHJhbnNhY3Rpb24pIHx8IGlzVmFsaWRUeEpzb25TdHJpbmcocmF3VHJhbnNhY3Rpb24pKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGFuIGhleCBzdHJpbmcgb2YgdGhlIGdpdmVuIGJ1ZmZlclxuICpcbiAqIEBwYXJhbSB7QnVmZmVyIHwgVWludDhBcnJheX0gYnVmZmVyIC0gdGhlIGJ1ZmZlciB0byBiZSBjb252ZXJ0ZWQgdG8gaGV4XG4gKiBAcmV0dXJucyB7c3RyaW5nfSAtIHRoZSBoZXggdmFsdWVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSGV4KGJ1ZmZlcjogQnVmZmVyIHwgVWludDhBcnJheSk6IHN0cmluZyB7XG4gIHJldHVybiBoZXguZW5jb2RlKGJ1ZmZlciwgdHJ1ZSk7XG59XG5cbi8qKlxuICogUmV0dXJucyBhIEtlY2Nhay0yNTYgZW5jb2RlZCBzdHJpbmcgb2YgdGhlIHBhcmFtZXRlcnNcbiAqXG4gKiBAcGFyYW0gdHlwZXMgLSBzdHJpbmdzIGRlc2NyaWJpbmcgdGhlIHR5cGVzIG9mIHRoZSB2YWx1ZXNcbiAqIEBwYXJhbSB2YWx1ZXMgLSB2YWx1ZSB0byBlbmNvZGVcbiAqIEBwYXJhbSBtZXRob2RJZCAtIHRoZSBmaXJzdCA0IGJ5dGVzIG9mIHRoZSBmdW5jdGlvbiBzZWxlY3RvclxuICovXG5leHBvcnQgZnVuY3Rpb24gZW5jb2RlRGF0YVBhcmFtcyh0eXBlczogc3RyaW5nW10sIHZhbHVlczogYW55W10sIG1ldGhvZElkOiBzdHJpbmcpOiBzdHJpbmcge1xuICB0eXBlcy5mb3JFYWNoKCh0eXBlLCBpbmRleCkgPT4ge1xuICAgIGlmICh0eXBlID09ICdhZGRyZXNzJykge1xuICAgICAgdmFsdWVzW2luZGV4XSA9IHZhbHVlc1tpbmRleF0ucmVwbGFjZShBRERSRVNTX1BSRUZJWF9SRUdFWCwgJzB4Jyk7XG4gICAgfVxuICB9KTtcblxuICBjb25zdCBhYmlDb2RlciA9IG5ldyBBYmlDb2RlcigpO1xuICBsZXQgZGF0YTtcbiAgdHJ5IHtcbiAgICBkYXRhID0gYWJpQ29kZXIuZW5jb2RlKHR5cGVzLCB2YWx1ZXMpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgY29uc29sZS5sb2coZSk7IC8vIGRvIHNvbWV0aGluZyB3aXRoIHRoaXMgZXJyb3IgaS5lLiB0aHJvdyBpdFxuICB9XG4gIHJldHVybiBoZXhDb25jYXQoW21ldGhvZElkLCBkYXRhXSkucmVwbGFjZSgvXigweCkvLCAnJyk7XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgZGVjb2RlZCB2YWx1ZXMgYWNjb3JkaW5nIHRvIHRoZSBhcnJheSBvZiB0eXBlc1xuICpcbiAqIEBwYXJhbSB0eXBlcyAtIHN0cmluZ3MgZGVzY3JpYmluZyB0aGUgdHlwZXMgb2YgdGhlIHZhbHVlc1xuICogQHBhcmFtIGRhdGEgLSBlbmNvZGVkIHN0cmluZ1xuICovXG5leHBvcnQgZnVuY3Rpb24gZGVjb2RlRGF0YVBhcmFtcyh0eXBlczogc3RyaW5nW10sIGRhdGE6IHN0cmluZyk6IGFueVtdIHtcbiAgY29uc3QgYWJpQ29kZXIgPSBuZXcgQWJpQ29kZXIoKTtcbiAgZGF0YSA9ICcweCcgKyBkYXRhLnN1YnN0cmluZyg4KTtcbiAgcmV0dXJuIGFiaUNvZGVyLmRlY29kZSh0eXBlcywgZGF0YSkucmVkdWNlKChvYmosIGFyZywgaW5kZXgpID0+IHtcbiAgICBpZiAodHlwZXNbaW5kZXhdID09ICdhZGRyZXNzJykgYXJnID0gQUREUkVTU19QUkVGSVggKyBhcmcuc3Vic3RyKDIpLnRvTG93ZXJDYXNlKCk7XG4gICAgb2JqLnB1c2goYXJnKTtcbiAgICByZXR1cm4gb2JqO1xuICB9LCBbXSk7XG59XG4iXX0=
440
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQXdDQSwwQ0FFQztBQUtELGdFQUVDO0FBS0QsZ0VBRUM7QUFRRCwwQ0FtQkM7QUFLRCx3RUFLQztBQUtELGtEQUVDO0FBS0Qsb0RBRUM7QUFLRCxzRUFFQztBQUtELDBEQUdDO0FBTUQsMENBRUM7QUFPRCxnQ0FFQztBQUtELDBEQUVDO0FBT0QsOENBcUNDO0FBU0Qsb0RBMEJDO0FBT0QsZ0NBRUM7QUFNRCx3REEwQ0M7QUFRRCxnRUF1Q0M7QUFTRCxzRkFzQkM7QUF1QkQsa0RBR0M7QUFRRCxrRUFLQztBQVFELHNCQUVDO0FBU0QsNENBbUJDO0FBUUQsNENBUUM7QUFyY0Qsb0RBQTRCO0FBQzVCLG9EQUFzQztBQUN0QyxpREFBbUM7QUFDbkMsd0RBQXlEO0FBRXpELG1EQUFrRDtBQUNsRCxpREFBMkQ7QUFTM0QsaUNBQXNEO0FBQ3RELDRDQUF1RDtBQUV2RCxNQUFNLG9CQUFvQixHQUFHLE9BQU8sQ0FBQztBQUNyQyxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUM7QUFFNUIsTUFBTSxhQUFhLEdBQUcsQ0FBQyxPQUFPLEdBQUcsU0FBUyxFQUFFLEVBQUU7SUFDNUMsT0FDRSxlQUFLO1NBQ0YsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxLQUFLLEtBQUssQ0FBQztTQUN2QyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsSUFBSSxLQUFLLE9BQU8sSUFBSSxHQUFHLENBQUMsT0FBTyxDQUMvRCxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO0FB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QUFDO1FBQ2xGLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDZCxPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUNULENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5pbXBvcnQgKiBhcyBoZXggZnJvbSAnQHN0YWJsZWxpYi9oZXgnO1xuaW1wb3J0ICogYXMgdHJvbndlYiBmcm9tICd0cm9ud2ViJztcbmltcG9ydCB7IHByb3RvY29sIH0gZnJvbSAnLi4vLi4vcmVzb3VyY2VzL3Byb3RvYnVmL3Ryb24nO1xuXG5pbXBvcnQgeyBVdGlsc0Vycm9yIH0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0IHsgVHJvbkVyYzIwQ29pbiwgY29pbnMgfSBmcm9tICdAYml0Z28tYmV0YS9zdGF0aWNzJztcbmltcG9ydCB7XG4gIFRyYW5zZmVyQ29udHJhY3QsXG4gIFJhd0RhdGEsXG4gIEFjY291bnRQZXJtaXNzaW9uVXBkYXRlQ29udHJhY3QsXG4gIFRyYW5zYWN0aW9uUmVjZWlwdCxcbiAgUGVybWlzc2lvbixcbiAgVHJpZ2dlclNtYXJ0Q29udHJhY3QsXG59IGZyb20gJy4vaWZhY2UnO1xuaW1wb3J0IHsgQ29udHJhY3RUeXBlLCBQZXJtaXNzaW9uVHlwZSB9IGZyb20gJy4vZW51bSc7XG5pbXBvcnQgeyBBYmlDb2RlciwgaGV4Q29uY2F0IH0gZnJvbSAnZXRoZXJzL2xpYi91dGlscyc7XG5cbmNvbnN0IEFERFJFU1NfUFJFRklYX1JFR0VYID0gL14oNDEpLztcbmNvbnN0IEFERFJFU1NfUFJFRklYID0gJzQxJztcblxuY29uc3QgZ2V0VHJvblRva2VucyA9IChuZXR3b3JrID0gJ21haW5uZXQnKSA9PiB7XG4gIHJldHVybiAoXG4gICAgY29pbnNcbiAgICAgIC5maWx0ZXIoKGNvaW4pID0+IGNvaW4uZmFtaWx5ID09PSAndHJ4JylcbiAgICAgIC5maWx0ZXIoKHRyeCkgPT4gdHJ4Lm5ldHdvcmsudHlwZSA9PT0gbmV0d29yayAmJiB0cnguaXNUb2tlbikgYXMgdW5rbm93biBhcyBUcm9uRXJjMjBDb2luW11cbiAgKS5tYXAoKGNvaW5zKSA9PiBjb2lucy5jb250cmFjdEFkZHJlc3MudG9TdHJpbmcoKSk7XG59O1xuXG5leHBvcnQgY29uc3QgdG9rZW5NYWlubmV0Q29udHJhY3RBZGRyZXNzZXMgPSBnZXRUcm9uVG9rZW5zKCdtYWlubmV0Jyk7XG5leHBvcnQgY29uc3QgdG9rZW5UZXN0bmV0Q29udHJhY3RBZGRyZXNzZXMgPSBnZXRUcm9uVG9rZW5zKCd0ZXN0bmV0Jyk7XG4vKipcbiAqIFRyb24tc3BlY2lmaWMgaGVscGVyIGZ1bmN0aW9uc1xuICovXG5leHBvcnQgdHlwZSBUcm9uQmluYXJ5TGlrZSA9IEJ5dGVBcnJheSB8IEJ1ZmZlciB8IFVpbnQ4QXJyYXkgfCBzdHJpbmc7XG5leHBvcnQgdHlwZSBCeXRlQXJyYXkgPSBudW1iZXJbXTtcblxuLyoqXG4gKiBAcGFyYW0gYWRkcmVzc1xuICovXG5leHBvcnQgZnVuY3Rpb24gaXNCYXNlNThBZGRyZXNzKGFkZHJlc3M6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gdHJvbndlYi51dGlscy5jcnlwdG8uaXNBZGRyZXNzVmFsaWQoYWRkcmVzcyk7XG59XG5cbi8qKlxuICogQHBhcmFtIHN0clxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Qnl0ZUFycmF5RnJvbUhleEFkZHJlc3Moc3RyOiBzdHJpbmcpOiBCeXRlQXJyYXkge1xuICByZXR1cm4gdHJvbndlYi51dGlscy5jb2RlLmhleFN0cjJieXRlQXJyYXkoc3RyLnJlcGxhY2UoJzB4JywgJycpKTtcbn1cblxuLyoqXG4gKiBAcGFyYW0gYXJyXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRIZXhBZGRyZXNzRnJvbUJ5dGVBcnJheShhcnI6IEJ5dGVBcnJheSk6IHN0cmluZyB7XG4gIHJldHVybiB0cm9ud2ViLnV0aWxzLmNvZGUuYnl0ZUFycmF5MmhleFN0cihhcnIpO1xufVxuXG4vKipcbiAqIEBwYXJhbSBtZXNzYWdlVG9WZXJpZnlcbiAqIEBwYXJhbSBiYXNlNThBZGRyZXNzXG4gKiBAcGFyYW0gc2lnSGV4XG4gKiBAcGFyYW0gdXNlVHJvbkhlYWRlclxuICovXG5leHBvcnQgZnVuY3Rpb24gdmVyaWZ5U2lnbmF0dXJlKFxuICBtZXNzYWdlVG9WZXJpZnk6IHN0cmluZyxcbiAgYmFzZTU4QWRkcmVzczogc3RyaW5nLFxuICBzaWdIZXg6IHN0cmluZyxcbiAgdXNlVHJvbkhlYWRlciA9IHRydWVcbik6IGJvb2xlYW4ge1xuICBpZiAoIWlzVmFsaWRIZXgoc2lnSGV4KSkge1xuICAgIHRocm93IG5ldyBVdGlsc0Vycm9yKCdzaWduYXR1cmUgaXMgbm90IGluIGEgdmFsaWQgZm9ybWF0LCBuZWVkcyB0byBiZSBoZXhhZGVjaW1hbCcpO1xuICB9XG5cbiAgaWYgKCFpc1ZhbGlkSGV4KG1lc3NhZ2VUb1ZlcmlmeSkpIHtcbiAgICB0aHJvdyBuZXcgVXRpbHNFcnJvcignbWVzc2FnZSBpcyBub3QgaW4gYSB2YWxpZCBmb3JtYXQsIG5lZWRzIHRvIGJlIGhleGFkZWNpbWFsJyk7XG4gIH1cblxuICBpZiAoIWlzQmFzZTU4QWRkcmVzcyhiYXNlNThBZGRyZXNzKSkge1xuICAgIHRocm93IG5ldyBVdGlsc0Vycm9yKCdhZGRyZXNzIG5lZWRzIHRvIGJlIGJhc2U1OCBlbmNvZGVkJyk7XG4gIH1cblxuICByZXR1cm4gdHJvbndlYi5UcngudmVyaWZ5U2lnbmF0dXJlKG1lc3NhZ2VUb1ZlcmlmeSwgYmFzZTU4QWRkcmVzcywgc2lnSGV4LCB1c2VUcm9uSGVhZGVyKTtcbn1cblxuLyoqXG4gKiBAcGFyYW0gYmFzZTU4XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRIZXhBZGRyZXNzRnJvbUJhc2U1OEFkZHJlc3MoYmFzZTU4OiBzdHJpbmcpOiBzdHJpbmcge1xuICAvLyBwdWxsZWQgZnJvbTogaHR0cHM6Ly9naXRodWIuY29tL1RST04tVVMvdHJvbndlYi9ibG9iL2RjYjhlZmEzNmE1ZWJiNjVjNGRhYjM2MjZlOTAyNTZhNDUzZjNiMGQvc3JjL3V0aWxzL2hlbHAuanMjTDE3XG4gIC8vIGJ1dCB0aGV5IGRvbid0IHN1cmZhY2UgdGhpcyBjYWxsIGluIGluZGV4LmpzXG4gIGNvbnN0IGJ5dGVzID0gdHJvbndlYi51dGlscy5jcnlwdG8uZGVjb2RlQmFzZTU4QWRkcmVzcyhiYXNlNTgpO1xuICByZXR1cm4gZ2V0SGV4QWRkcmVzc0Zyb21CeXRlQXJyYXkoYnl0ZXMpO1xufVxuXG4vKipcbiAqIEBwYXJhbSBwcml2YXRlS2V5XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRQdWJLZXlGcm9tUHJpS2V5KHByaXZhdGVLZXk6IFRyb25CaW5hcnlMaWtlKTogQnl0ZUFycmF5IHtcbiAgcmV0dXJuIHRyb253ZWIudXRpbHMuY3J5cHRvLmdldFB1YktleUZyb21QcmlLZXkocHJpdmF0ZUtleSk7XG59XG5cbi8qKlxuICogQHBhcmFtIHByaXZhdGVLZXlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEFkZHJlc3NGcm9tUHJpS2V5KHByaXZhdGVLZXk6IFRyb25CaW5hcnlMaWtlKTogQnl0ZUFycmF5IHtcbiAgcmV0dXJuIHRyb253ZWIudXRpbHMuY3J5cHRvLmdldEFkZHJlc3NGcm9tUHJpS2V5KHByaXZhdGVLZXkpO1xufVxuXG4vKipcbiAqIEBwYXJhbSBhZGRyZXNzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRCYXNlNThBZGRyZXNzRnJvbUJ5dGVBcnJheShhZGRyZXNzOiBCeXRlQXJyYXkpOiBzdHJpbmcge1xuICByZXR1cm4gdHJvbndlYi51dGlscy5jcnlwdG8uZ2V0QmFzZTU4Q2hlY2tBZGRyZXNzKGFkZHJlc3MpO1xufVxuXG4vKipcbiAqIEBwYXJhbSBoZXhcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEJhc2U1OEFkZHJlc3NGcm9tSGV4KGhleDogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgYXJyID0gZ2V0Qnl0ZUFycmF5RnJvbUhleEFkZHJlc3MoaGV4KTtcbiAgcmV0dXJuIGdldEJhc2U1OEFkZHJlc3NGcm9tQnl0ZUFycmF5KGFycik7XG59XG5cbi8qKlxuICogQHBhcmFtIHByaXZhdGVLZXlcbiAqIEBwYXJhbSB0cmFuc2FjdGlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gc2lnblRyYW5zYWN0aW9uKHByaXZhdGVLZXk6IHN0cmluZyB8IEJ5dGVBcnJheSwgdHJhbnNhY3Rpb246IFRyYW5zYWN0aW9uUmVjZWlwdCk6IFRyYW5zYWN0aW9uUmVjZWlwdCB7XG4gIHJldHVybiB0cm9ud2ViLnV0aWxzLmNyeXB0by5zaWduVHJhbnNhY3Rpb24ocHJpdmF0ZUtleSwgdHJhbnNhY3Rpb24pO1xufVxuXG4vKipcbiAqIEBwYXJhbSBtZXNzYWdlXG4gKiBAcGFyYW0gcHJpdmF0ZUtleVxuICogQHBhcmFtIHVzZVRyb25IZWFkZXJcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNpZ25TdHJpbmcobWVzc2FnZTogc3RyaW5nLCBwcml2YXRlS2V5OiBzdHJpbmcgfCBCeXRlQXJyYXksIHVzZVRyb25IZWFkZXIgPSB0cnVlKTogc3RyaW5nIHtcbiAgcmV0dXJuIHRyb253ZWIuVHJ4LnNpZ25TdHJpbmcobWVzc2FnZSwgcHJpdmF0ZUtleSwgdXNlVHJvbkhlYWRlcik7XG59XG5cbi8qKlxuICogQHBhcmFtIHB1YkJ5dGVzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRSYXdBZGRyZXNzRnJvbVB1YktleShwdWJCeXRlczogVHJvbkJpbmFyeUxpa2UpOiBCeXRlQXJyYXkge1xuICByZXR1cm4gdHJvbndlYi51dGlscy5jcnlwdG8uY29tcHV0ZUFkZHJlc3MocHViQnl0ZXMpO1xufVxuXG4vKipcbiAqIERlY29kZXMgYSBoZXggZW5jb2RlZCB0cmFuc2FjdGlvbiBpbiBpdHMgcHJvdG9idWYgcmVwcmVzZW50YXRpb24uXG4gKlxuICogQHBhcmFtIGhleFN0cmluZyByYXdfZGF0YV9oZXggZmllbGQgZnJvbSB0cm9uIHRyYW5zYWN0aW9uc1xuICovXG5leHBvcnQgZnVuY3Rpb24gZGVjb2RlVHJhbnNhY3Rpb24oaGV4U3RyaW5nOiBzdHJpbmcpOiBSYXdEYXRhIHtcbiAgY29uc3QgcmF3VHJhbnNhY3Rpb24gPSBkZWNvZGVSYXdUcmFuc2FjdGlvbihoZXhTdHJpbmcpO1xuXG4gIC8vIHRoZXJlIHNob3VsZCBub3QgYmUgbXVsdGlwbGUgY29udHJhY3RzIGluIHRoaXMgZGF0YVxuICBpZiAocmF3VHJhbnNhY3Rpb24uY29udHJhY3RzLmxlbmd0aCAhPT0gMSkge1xuICAgIHRocm93IG5ldyBVdGlsc0Vycm9yKCdOdW1iZXIgb2YgY29udHJhY3RzIGlzIGdyZWF0ZXIgdGhhbiAxLicpO1xuICB9XG5cbiAgbGV0IGNvbnRyYWN0OiBUcmFuc2ZlckNvbnRyYWN0W10gfCBBY2NvdW50UGVybWlzc2lvblVwZGF0ZUNvbnRyYWN0W10gfCBUcmlnZ2VyU21hcnRDb250cmFjdFtdO1xuICBsZXQgY29udHJhY3RUeXBlOiBDb250cmFjdFR5cGU7XG4gIC8vIGVuc3VyZSB0aGUgY29udHJhY3QgdHlwZSBpcyBzdXBwb3J0ZWRcbiAgc3dpdGNoIChyYXdUcmFuc2FjdGlvbi5jb250cmFjdHNbMF0ucGFyYW1ldGVyLnR5cGVfdXJsKSB7XG4gICAgY2FzZSAndHlwZS5nb29nbGVhcGlzLmNvbS9wcm90b2NvbC5UcmFuc2ZlckNvbnRyYWN0JzpcbiAgICAgIGNvbnRyYWN0VHlwZSA9IENvbnRyYWN0VHlwZS5UcmFuc2ZlcjtcbiAgICAgIGNvbnRyYWN0ID0gZXhwb3J0cy5kZWNvZGVUcmFuc2ZlckNvbnRyYWN0KHJhd1RyYW5zYWN0aW9uLmNvbnRyYWN0c1swXS5wYXJhbWV0ZXIudmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAndHlwZS5nb29nbGVhcGlzLmNvbS9wcm90b2NvbC5BY2NvdW50UGVybWlzc2lvblVwZGF0ZUNvbnRyYWN0JzpcbiAgICAgIGNvbnRyYWN0VHlwZSA9IENvbnRyYWN0VHlwZS5BY2NvdW50UGVybWlzc2lvblVwZGF0ZTtcbiAgICAgIGNvbnRyYWN0ID0gZXhwb3J0cy5kZWNvZGVBY2NvdW50UGVybWlzc2lvblVwZGF0ZUNvbnRyYWN0KHJhd1RyYW5zYWN0aW9uLmNvbnRyYWN0c1swXS5wYXJhbWV0ZXIudmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAndHlwZS5nb29nbGVhcGlzLmNvbS9wcm90b2NvbC5UcmlnZ2VyU21hcnRDb250cmFjdCc6XG4gICAgICBjb250cmFjdFR5cGUgPSBDb250cmFjdFR5cGUuVHJpZ2dlclNtYXJ0Q29udHJhY3Q7XG4gICAgICBjb250cmFjdCA9IGV4cG9ydHMuZGVjb2RlVHJpZ2dlclNtYXJ0Q29udHJhY3QocmF3VHJhbnNhY3Rpb24uY29udHJhY3RzWzBdLnBhcmFtZXRlci52YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IFV0aWxzRXJyb3IoJ1Vuc3VwcG9ydGVkIGNvbnRyYWN0IHR5cGUnKTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgY29udHJhY3RUeXBlLFxuICAgIGNvbnRyYWN0LFxuICAgIGV4cGlyYXRpb246IHJhd1RyYW5zYWN0aW9uLmV4cGlyYXRpb24sXG4gICAgdGltZXN0YW1wOiByYXdUcmFuc2FjdGlvbi50aW1lc3RhbXAsXG4gICAgcmVmX2Jsb2NrX2J5dGVzOiByYXdUcmFuc2FjdGlvbi5ibG9ja0J5dGVzLFxuICAgIHJlZl9ibG9ja19oYXNoOiByYXdUcmFuc2FjdGlvbi5ibG9ja0hhc2gsXG4gICAgZmVlX2xpbWl0OiArcmF3VHJhbnNhY3Rpb24uZmVlTGltaXQsXG4gIH07XG59XG5cbi8qKlxuICogRGVjb2RlcyBhIHRyYW5zYWN0aW9uJ3MgcmF3IGZpZWxkIGZyb20gYSBiYXNlNjQgZW5jb2RlZCBzdHJpbmcuIFRoaXMgaXMgYSBwcm90b2J1ZiByZXByZXNlbnRhdGlvbi5cbiAqXG4gKiBAcGFyYW0gaGV4U3RyaW5nIHRoaXMgaXMgdGhlIHJhdyBoZXhhZGVjaW1hbCBlbmNvZGVkIHN0cmluZy4gRG9jIGZvdW5kIGluIHRoZSBmb2xsb3dpbmcgbGluay5cbiAqIEBleGFtcGxlXG4gKiBAc2VlIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vQml0R28vYml0Z28tYWNjb3VudC1saWIvYmxvYi81ZjI4MjU4ODcwMTc3OGE0NDIxYzc1ZmE2MWY0MjcxM2Y1NmU5NWI5L3Jlc291cmNlcy9wcm90b2J1Zi90cm9uLnByb3RvI0wzMTl9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWNvZGVSYXdUcmFuc2FjdGlvbihoZXhTdHJpbmc6IHN0cmluZyk6IHtcbiAgZXhwaXJhdGlvbjogbnVtYmVyO1xuICB0aW1lc3RhbXA6IG51bWJlcjtcbiAgY29udHJhY3RzOiBBcnJheTxhbnk+O1xuICBibG9ja0J5dGVzOiBzdHJpbmc7XG4gIGJsb2NrSGFzaDogc3RyaW5nO1xuICBmZWVMaW1pdDogc3RyaW5nO1xufSB7XG4gIGNvbnN0IGJ5dGVzID0gQnVmZmVyLmZyb20oaGV4U3RyaW5nLCAnaGV4Jyk7XG5cbiAgbGV0IHJhdztcbiAgdHJ5IHtcbiAgICAvLyB3ZSBuZWVkIHRvIGRlY29kZSBvdXIgcmF3X2RhdGFfaGV4IGZpZWxkIGZpcnN0XG4gICAgcmF3ID0gcHJvdG9jb2wuVHJhbnNhY3Rpb24ucmF3LmRlY29kZShieXRlcyk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICB0aHJvdyBuZXcgVXRpbHNFcnJvcignVGhlcmUgd2FzIGFuIGVycm9yIGRlY29kaW5nIHRoZSBpbml0aWFsIHJhd19kYXRhX2hleCBmcm9tIHRoZSBzZXJpYWxpemVkIHR4LicpO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBleHBpcmF0aW9uOiBOdW1iZXIocmF3LmV4cGlyYXRpb24pLFxuICAgIHRpbWVzdGFtcDogTnVtYmVyKHJhdy50aW1lc3RhbXApLFxuICAgIGNvbnRyYWN0czogcmF3LmNvbnRyYWN0LFxuICAgIGJsb2NrQnl0ZXM6IHRvSGV4KHJhdy5yZWZCbG9ja0J5dGVzKSxcbiAgICBmZWVMaW1pdDogcmF3LmZlZUxpbWl0LFxuICAgIGJsb2NrSGFzaDogdG9IZXgocmF3LnJlZkJsb2NrSGFzaCksXG4gIH07XG59XG5cbi8qKlxuICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIHBhc3NlZCBzdHJpbmcgaXMgYSBzYWZlIGhleCBzdHJpbmcgZm9yIHRyb24ncyBwdXJwb3Nlcy5cbiAqXG4gKiBAcGFyYW0gaGV4IEEgdmFsaWQgaGV4IHN0cmluZyBtdXN0IGJlIGEgc3RyaW5nIG1hZGUgb2YgbnVtYmVycyBhbmQgY2hhcmFjdGVycyBhbmQgaGFzIGFuIGV2ZW4gbGVuZ3RoLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNWYWxpZEhleChoZXg6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gL14oMHgpPyhbMC05YS1mXXsyfSkrJC9pLnRlc3QoaGV4KTtcbn1cblxuLyoqIERlc2VyaWFsaXplIHRoZSBzZWdtZW50IG9mIHRoZSB0eEhleCB3aGljaCBjb3JyZXNwb25kcyB3aXRoIHRoZSBkZXRhaWxzIG9mIHRoZSB0cmFuc2ZlclxuICpcbiAqIEBwYXJhbSB0cmFuc2ZlckhleCBpcyB0aGUgdmFsdWUgcHJvcGVydHkgb2YgdGhlIFwicGFyYW1ldGVyXCIgZmllbGQgb2YgY29udHJhY3RMaXN0WzBdXG4gKiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlY29kZVRyYW5zZmVyQ29udHJhY3QodHJhbnNmZXJIZXg6IHN0cmluZyk6IFRyYW5zZmVyQ29udHJhY3RbXSB7XG4gIGNvbnN0IGNvbnRyYWN0Qnl0ZXMgPSBCdWZmZXIuZnJvbSh0cmFuc2ZlckhleCwgJ2Jhc2U2NCcpO1xuICBsZXQgdHJhbnNmZXJDb250cmFjdDtcblxuICB0cnkge1xuICAgIHRyYW5zZmVyQ29udHJhY3QgPSBwcm90b2NvbC5UcmFuc2ZlckNvbnRyYWN0LmRlY29kZShjb250cmFjdEJ5dGVzKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHRocm93IG5ldyBVdGlsc0Vycm9yKCdUaGVyZSB3YXMgYW4gZXJyb3IgZGVjb2RpbmcgdGhlIHRyYW5zZmVyIGNvbnRyYWN0IGluIHRoZSB0cmFuc2FjdGlvbi4nKTtcbiAgfVxuXG4gIGlmICghdHJhbnNmZXJDb250cmFjdC5vd25lckFkZHJlc3MpIHtcbiAgICB0aHJvdyBuZXcgVXRpbHNFcnJvcignT3duZXIgYWRkcmVzcyBkb2VzIG5vdCBleGlzdCBpbiB0aGlzIHRyYW5zZmVyIGNvbnRyYWN0LicpO1xuICB9XG5cbiAgaWYgKCF0cmFuc2ZlckNvbnRyYWN0LnRvQWRkcmVzcykge1xuICAgIHRocm93IG5ldyBVdGlsc0Vycm9yKCdEZXN0aW5hdGlvbiBhZGRyZXNzIGRvZXMgbm90IGV4aXN0IGluIHRoaXMgdHJhbnNmZXIgY29udHJhY3QuJyk7XG4gIH1cblxuICBpZiAoIXRyYW5zZmVyQ29udHJhY3QuaGFzT3duUHJvcGVydHkoJ2Ftb3VudCcpKSB7XG4gICAgdGhyb3cgbmV3IFV0aWxzRXJyb3IoJ0Ftb3VudCBkb2VzIG5vdCBleGlzdCBpbiB0aGlzIHRyYW5zZmVyIGNvbnRyYWN0LicpO1xuICB9XG5cbiAgLy8gZGVzZXJpYWxpemUgYXR0cmlidXRlc1xuICBjb25zdCBvd25lcl9hZGRyZXNzID0gZ2V0QmFzZTU4QWRkcmVzc0Zyb21CeXRlQXJyYXkoXG4gICAgZ2V0Qnl0ZUFycmF5RnJvbUhleEFkZHJlc3MoQnVmZmVyLmZyb20odHJhbnNmZXJDb250cmFjdC5vd25lckFkZHJlc3MsICdiYXNlNjQnKS50b1N0cmluZygnaGV4JykpXG4gICk7XG4gIGNvbnN0IHRvX2FkZHJlc3MgPSBnZXRCYXNlNThBZGRyZXNzRnJvbUJ5dGVBcnJheShcbiAgICBnZXRCeXRlQXJyYXlGcm9tSGV4QWRkcmVzcyhCdWZmZXIuZnJvbSh0cmFuc2ZlckNvbnRyYWN0LnRvQWRkcmVzcywgJ2Jhc2U2NCcpLnRvU3RyaW5nKCdoZXgnKSlcbiAgKTtcbiAgY29uc3QgYW1vdW50ID0gdHJhbnNmZXJDb250cmFjdC5hbW91bnQ7XG5cbiAgcmV0dXJuIFtcbiAgICB7XG4gICAgICBwYXJhbWV0ZXI6IHtcbiAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICBhbW91bnQ6IE51bWJlcihhbW91bnQpLFxuICAgICAgICAgIG93bmVyX2FkZHJlc3MsXG4gICAgICAgICAgdG9fYWRkcmVzcyxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSxcbiAgXTtcbn1cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZSB0aGUgc2VnbWVudCBvZiB0aGUgdHhIZXggY29ycmVzcG9uZGluZyB3aXRoIHRyaWdnZXIgc21hcnQgY29udHJhY3RcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gYmFzZTY0XG4gKiBAcmV0dXJucyB7QWNjb3VudFBlcm1pc3Npb25VcGRhdGVDb250cmFjdH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlY29kZVRyaWdnZXJTbWFydENvbnRyYWN0KGJhc2U2NDogc3RyaW5nKTogVHJpZ2dlclNtYXJ0Q29udHJhY3RbXSB7XG4gIGxldCBjb250cmFjdENhbGxEZWNvZGVkO1xuICB0cnkge1xuICAgIGNvbnRyYWN0Q2FsbERlY29kZWQgPSBwcm90b2NvbC5UcmlnZ2VyU21hcnRDb250cmFjdC5kZWNvZGUoQnVmZmVyLmZyb20oYmFzZTY0LCAnYmFzZTY0JykpLnRvSlNPTigpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgdGhyb3cgbmV3IFV0aWxzRXJyb3IoJ1RoZXJlIHdhcyBhbiBlcnJvciBkZWNvZGluZyB0aGUgY29udHJhY3QgY2FsbCBpbiB0aGUgdHJhbnNhY3Rpb24uJyk7XG4gIH1cblxuICBpZiAoIWNvbnRyYWN0Q2FsbERlY29kZWQub3duZXJBZGRyZXNzKSB7XG4gICAgdGhyb3cgbmV3IFV0aWxzRXJyb3IoJ093bmVyIGFkZHJlc3MgZG9lcyBub3QgZXhpc3QgaW4gdGhpcyBjb250cmFjdCBjYWxsLicpO1xuICB9XG5cbiAgaWYgKCFjb250cmFjdENhbGxEZWNvZGVkLmNvbnRyYWN0QWRkcmVzcykge1xuICAgIHRocm93IG5ldyBVdGlsc0Vycm9yKCdEZXN0aW5hdGlvbiBjb250cmFjdCBhZGRyZXNzIGRvZXMgbm90IGV4aXN0IGluIHRoaXMgY29udHJhY3QgY2FsbC4nKTtcbiAgfVxuXG4gIGlmICghY29udHJhY3RDYWxsRGVjb2RlZC5kYXRhKSB7XG4gICAgdGhyb3cgbmV3IFV0aWxzRXJyb3IoJ0RhdGEgZG9lcyBub3QgZXhpc3QgaW4gdGhpcyBjb250cmFjdCBjYWxsLicpO1xuICB9XG5cbiAgLy8gZGVzZXJpYWxpemUgYXR0cmlidXRlc1xuICBjb25zdCBvd25lcl9hZGRyZXNzID0gZ2V0QmFzZTU4QWRkcmVzc0Zyb21CeXRlQXJyYXkoXG4gICAgZ2V0Qnl0ZUFycmF5RnJvbUhleEFkZHJlc3MoQnVmZmVyLmZyb20oY29udHJhY3RDYWxsRGVjb2RlZC5vd25lckFkZHJlc3MsICdiYXNlNjQnKS50b1N0cmluZygnaGV4JykpXG4gICk7XG4gIGNvbnN0IGNvbnRyYWN0X2FkZHJlc3MgPSBnZXRCYXNlNThBZGRyZXNzRnJvbUJ5dGVBcnJheShcbiAgICBnZXRCeXRlQXJyYXlGcm9tSGV4QWRkcmVzcyhCdWZmZXIuZnJvbShjb250cmFjdENhbGxEZWNvZGVkLmNvbnRyYWN0QWRkcmVzcywgJ2Jhc2U2NCcpLnRvU3RyaW5nKCdoZXgnKSlcbiAgKTtcbiAgY29uc3QgZGF0YSA9IGNvbnRyYWN0Q2FsbERlY29kZWQuZGF0YTtcbiAgcmV0dXJuIFtcbiAgICB7XG4gICAgICBwYXJhbWV0ZXI6IHtcbiAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICBkYXRhOiBkYXRhLFxuICAgICAgICAgIG93bmVyX2FkZHJlc3MsXG4gICAgICAgICAgY29udHJhY3RfYWRkcmVzcyxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSxcbiAgXTtcbn1cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZSB0aGUgc2VnbWVudCBvZiB0aGUgdHhIZXggY29ycmVzcG9uZGluZyB3aXRoIHRoZSBkZXRhaWxzIG9mIHRoZSBjb250cmFjdCB3aGljaCB1cGRhdGVzXG4gKiBhY2NvdW50IHBlcm1pc3Npb25cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gYmFzZTY0XG4gKiBAcmV0dXJucyB7QWNjb3VudFBlcm1pc3Npb25VcGRhdGVDb250cmFjdH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlY29kZUFjY291bnRQZXJtaXNzaW9uVXBkYXRlQ29udHJhY3QoYmFzZTY0OiBzdHJpbmcpOiBBY2NvdW50UGVybWlzc2lvblVwZGF0ZUNvbnRyYWN0IHtcbiAgY29uc3QgYWNjb3VudFVwZGF0ZUNvbnRyYWN0ID0gcHJvdG9jb2wuQWNjb3VudFBlcm1pc3Npb25VcGRhdGVDb250cmFjdC5kZWNvZGUoQnVmZmVyLmZyb20oYmFzZTY0LCAnYmFzZTY0JykpLnRvSlNPTigpO1xuICBhc3NlcnQoYWNjb3VudFVwZGF0ZUNvbnRyYWN0Lm93bmVyQWRkcmVzcyk7XG4gIGFzc2VydChhY2NvdW50VXBkYXRlQ29udHJhY3Qub3duZXIpO1xuICBhc3NlcnQoYWNjb3VudFVwZGF0ZUNvbnRyYWN0Lmhhc093blByb3BlcnR5KCdhY3RpdmVzJykpO1xuXG4gIGNvbnN0IG93bmVyQWRkcmVzcyA9IGdldEJhc2U1OEFkZHJlc3NGcm9tQnl0ZUFycmF5KFxuICAgIGdldEJ5dGVBcnJheUZyb21IZXhBZGRyZXNzKEJ1ZmZlci5mcm9tKGFjY291bnRVcGRhdGVDb250cmFjdC5vd25lckFkZHJlc3MsICdiYXNlNjQnKS50b1N0cmluZygnaGV4JykpXG4gICk7XG4gIGNvbnN0IG93bmVyOiBQZXJtaXNzaW9uID0gY3JlYXRlUGVybWlzc2lvbihhY2NvdW50VXBkYXRlQ29udHJhY3Qub3duZXIpO1xuICBsZXQgd2l0bmVzczogUGVybWlzc2lvbiB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcbiAgaWYgKGFjY291bnRVcGRhdGVDb250cmFjdC53aXRuZXNzKSB7XG4gICAgd2l0bmVzcyA9IGNyZWF0ZVBlcm1pc3Npb24oYWNjb3VudFVwZGF0ZUNvbnRyYWN0LndpdG5lc3MpO1xuICB9XG4gIGNvbnN0IGFjdGl2ZUxpc3QgPSBhY2NvdW50VXBkYXRlQ29udHJhY3QuYWN0aXZlcy5tYXAoKGFjdGl2ZSkgPT4gY3JlYXRlUGVybWlzc2lvbihhY3RpdmUpKTtcblxuICByZXR1cm4ge1xuICAgIG93bmVyQWRkcmVzcyxcbiAgICBvd25lcixcbiAgICB3aXRuZXNzLFxuICAgIGFjdGl2ZXM6IGFjdGl2ZUxpc3QsXG4gIH07XG59XG5cbi8qKlxuICogQHBhcmFtIHJhd1xuICovXG5mdW5jdGlvbiBjcmVhdGVQZXJtaXNzaW9uKHJhdzogeyBwZXJtaXNzaW9uTmFtZTogc3RyaW5nOyB0aHJlc2hvbGQ6IG51bWJlciB9KTogUGVybWlzc2lvbiB7XG4gIGxldCBwZXJtaXNzaW9uVHlwZTogUGVybWlzc2lvblR5cGU7XG4gIGNvbnN0IHBlcm1pc3Npb24gPSByYXcucGVybWlzc2lvbk5hbWUudG9Mb3dlckNhc2UoKS50cmltKCk7XG4gIGlmIChwZXJtaXNzaW9uID09PSAnb3duZXInKSB7XG4gICAgcGVybWlzc2lvblR5cGUgPSBQZXJtaXNzaW9uVHlwZS5Pd25lcjtcbiAgfSBlbHNlIGlmIChwZXJtaXNzaW9uID09PSAnd2l0bmVzcycpIHtcbiAgICBwZXJtaXNzaW9uVHlwZSA9IFBlcm1pc3Npb25UeXBlLldpdG5lc3M7XG4gIH0gZWxzZSBpZiAocGVybWlzc2lvbi5zdWJzdHIoMCwgNikgPT09ICdhY3RpdmUnKSB7XG4gICAgcGVybWlzc2lvblR5cGUgPSBQZXJtaXNzaW9uVHlwZS5BY3RpdmU7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IFV0aWxzRXJyb3IoJ1Blcm1pc3Npb24gdHlwZSBub3QgcGFyc2VhYmxlLicpO1xuICB9XG4gIHJldHVybiB7IHR5cGU6IHBlcm1pc3Npb25UeXBlLCB0aHJlc2hvbGQ6IHJhdy50aHJlc2hvbGQgfTtcbn1cblxuLyoqXG4gKiBAcGFyYW0gcmF3VHJhbnNhY3Rpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzVmFsaWRUeEpzb25TdHJpbmcocmF3VHJhbnNhY3Rpb246IHN0cmluZyk6IGJvb2xlYW4ge1xuICBjb25zdCB0cmFuc2FjdGlvbiA9IEpTT04ucGFyc2UocmF3VHJhbnNhY3Rpb24pO1xuICByZXR1cm4gdHJhbnNhY3Rpb24uaGFzT3duUHJvcGVydHkoJ3R4SUQnKTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHdoZXRoZXIgdGhlIHByb3ZpZGVkIHJhdyB0cmFuc2FjdGlvbiBhY2NvbW1vZGF0ZXMgdG8gYml0Z28ncyBwcmVmZXJyZWQgZm9ybWF0XG4gKlxuICogQHBhcmFtIHthbnl9IHJhd1RyYW5zYWN0aW9uIC0gVGhlIHJhdyB0cmFuc2FjdGlvbiB0byBiZSBjaGVja2VkXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gdGhlIHZhbGlkYXRpb24gcmVzdWx0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1ZhbGlkUmF3VHJhbnNhY3Rpb25Gb3JtYXQocmF3VHJhbnNhY3Rpb246IGFueSk6IGJvb2xlYW4ge1xuICBpZiAodHlwZW9mIHJhd1RyYW5zYWN0aW9uID09PSAnc3RyaW5nJyAmJiAoaXNWYWxpZEhleChyYXdUcmFuc2FjdGlvbikgfHwgaXNWYWxpZFR4SnNvblN0cmluZyhyYXdUcmFuc2FjdGlvbikpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIFJldHVybnMgYW4gaGV4IHN0cmluZyBvZiB0aGUgZ2l2ZW4gYnVmZmVyXG4gKlxuICogQHBhcmFtIHtCdWZmZXIgfCBVaW50OEFycmF5fSBidWZmZXIgLSB0aGUgYnVmZmVyIHRvIGJlIGNvbnZlcnRlZCB0byBoZXhcbiAqIEByZXR1cm5zIHtzdHJpbmd9IC0gdGhlIGhleCB2YWx1ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9IZXgoYnVmZmVyOiBCdWZmZXIgfCBVaW50OEFycmF5KTogc3RyaW5nIHtcbiAgcmV0dXJuIGhleC5lbmNvZGUoYnVmZmVyLCB0cnVlKTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgS2VjY2FrLTI1NiBlbmNvZGVkIHN0cmluZyBvZiB0aGUgcGFyYW1ldGVyc1xuICpcbiAqIEBwYXJhbSB0eXBlcyAtIHN0cmluZ3MgZGVzY3JpYmluZyB0aGUgdHlwZXMgb2YgdGhlIHZhbHVlc1xuICogQHBhcmFtIHZhbHVlcyAtIHZhbHVlIHRvIGVuY29kZVxuICogQHBhcmFtIG1ldGhvZElkIC0gdGhlIGZpcnN0IDQgYnl0ZXMgb2YgdGhlIGZ1bmN0aW9uIHNlbGVjdG9yXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlbmNvZGVEYXRhUGFyYW1zKHR5cGVzOiBzdHJpbmdbXSwgdmFsdWVzOiBhbnlbXSwgbWV0aG9kSWQ/OiBzdHJpbmcpOiBzdHJpbmcge1xuICB0eXBlcy5mb3JFYWNoKCh0eXBlLCBpbmRleCkgPT4ge1xuICAgIGlmICh0eXBlID09ICdhZGRyZXNzJykge1xuICAgICAgdmFsdWVzW2luZGV4XSA9IHZhbHVlc1tpbmRleF0ucmVwbGFjZShBRERSRVNTX1BSRUZJWF9SRUdFWCwgJzB4Jyk7XG4gICAgfVxuICB9KTtcblxuICBjb25zdCBhYmlDb2RlciA9IG5ldyBBYmlDb2RlcigpO1xuICBsZXQgZGF0YTtcbiAgdHJ5IHtcbiAgICBkYXRhID0gYWJpQ29kZXIuZW5jb2RlKHR5cGVzLCB2YWx1ZXMpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgdGhyb3cgbmV3IFV0aWxzRXJyb3IoYFRoZXJlIHdhcyBhbiBlcnJvciBlbmNvZGluZyB0aGUgZGF0YSBwYXJhbXMuIEVycm9yID0gJHtKU09OLnN0cmluZ2lmeShlKX1gKTtcbiAgfVxuICBpZiAobWV0aG9kSWQpIHtcbiAgICByZXR1cm4gaGV4Q29uY2F0KFttZXRob2RJZCwgZGF0YV0pLnJlcGxhY2UoL14oMHgpLywgJycpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBkYXRhLnJlcGxhY2UoL14oMHgpLywgJycpO1xuICB9XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgZGVjb2RlZCB2YWx1ZXMgYWNjb3JkaW5nIHRvIHRoZSBhcnJheSBvZiB0eXBlc1xuICpcbiAqIEBwYXJhbSB0eXBlcyAtIHN0cmluZ3MgZGVzY3JpYmluZyB0aGUgdHlwZXMgb2YgdGhlIHZhbHVlc1xuICogQHBhcmFtIGRhdGEgLSBlbmNvZGVkIHN0cmluZ1xuICovXG5leHBvcnQgZnVuY3Rpb24gZGVjb2RlRGF0YVBhcmFtcyh0eXBlczogc3RyaW5nW10sIGRhdGE6IHN0cmluZyk6IGFueVtdIHtcbiAgY29uc3QgYWJpQ29kZXIgPSBuZXcgQWJpQ29kZXIoKTtcbiAgZGF0YSA9ICcweCcgKyBkYXRhLnN1YnN0cmluZyg4KTtcbiAgcmV0dXJuIGFiaUNvZGVyLmRlY29kZSh0eXBlcywgZGF0YSkucmVkdWNlKChvYmosIGFyZywgaW5kZXgpID0+IHtcbiAgICBpZiAodHlwZXNbaW5kZXhdID09ICdhZGRyZXNzJykgYXJnID0gQUREUkVTU19QUkVGSVggKyBhcmcuc3Vic3RyKDIpLnRvTG93ZXJDYXNlKCk7XG4gICAgb2JqLnB1c2goYXJnKTtcbiAgICByZXR1cm4gb2JqO1xuICB9LCBbXSk7XG59XG4iXX0=
@@ -56,7 +56,7 @@ class WrappedBuilder extends transactionBuilder_1.TransactionBuilder {
56
56
  from(raw) {
57
57
  this.validateRawTransaction(raw);
58
58
  const rawDataHex = this.getTxReceipt(raw);
59
- const decodedTx = utils_1.decodeTransaction(rawDataHex);
59
+ const decodedTx = (0, utils_1.decodeTransaction)(rawDataHex);
60
60
  const contractType = decodedTx.contractType;
61
61
  switch (contractType) {
62
62
  case enum_1.ContractType.Transfer:
@@ -105,4 +105,4 @@ class WrappedBuilder extends transactionBuilder_1.TransactionBuilder {
105
105
  }
106
106
  }
107
107
  exports.WrappedBuilder = WrappedBuilder;
108
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid3JhcHBlZEJ1aWxkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3dyYXBwZWRCdWlsZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUVBLG1EQUF5RjtBQUd6Riw2REFBMEQ7QUFDMUQsdUNBQW9DO0FBQ3BDLG1DQUE0QztBQUM1QyxpQ0FBc0M7QUFDdEMsK0RBQTREO0FBRTVELGlFQUE4RDtBQUU5RDs7OztHQUlHO0FBQ0gsTUFBYSxjQUFlLFNBQVEsdUNBQWtCO0lBR3BELFlBQVksV0FBaUM7UUFDM0MsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ25CLDBCQUEwQjtRQUMxQixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksdUNBQWtCLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDdEQsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsc0JBQXNCLENBQUMsRUFBZ0M7UUFDckQsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUMsRUFBRSxFQUFFLElBQUkseUNBQW1CLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7SUFDL0UsQ0FBQztJQUVELHFCQUFxQixDQUFDLEVBQWdDO1FBQ3BELE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDLEVBQUUsRUFBRSxJQUFJLHVDQUFrQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO0lBQzlFLENBQUM7SUFFRCx1QkFBdUIsQ0FBQyxFQUFnQztRQUN0RCxPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLEVBQUUsSUFBSSwyQ0FBb0IsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztJQUNoRixDQUFDO0lBRU8saUJBQWlCLENBQStCLEVBQTJDLEVBQUUsT0FBVTtRQUM3RyxJQUFJLEVBQUUsRUFBRTtZQUNOLE9BQU8sQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUM7U0FDekI7UUFDRCxPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO0lBRUQsa0JBQWtCO0lBQ2xCLGFBQWEsQ0FBQyxXQUFtQjtRQUMvQixJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBRUQsa0JBQWtCO0lBQ2xCLElBQUksQ0FBQyxHQUFZO1FBQ2YsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDMUIsQ0FBQztJQUVELGtCQUFrQjtJQUNsQixLQUFLLENBQUMsS0FBSztRQUNULE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUMvQixDQUFDO0lBRUQsa0JBQWtCO0lBQ2xCLElBQUksQ0FBQyxHQUFRO1FBQ1gsSUFBSSxDQUFDLHNCQUFzQixDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2pDLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDMUMsTUFBTSxTQUFTLEdBQUcseUJBQWlCLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDaEQsTUFBTSxZQUFZLEdBQUcsU0FBUyxDQUFDLFlBQVksQ0FBQztRQUM1QyxRQUFRLFlBQVksRUFBRTtZQUNwQixLQUFLLG1CQUFZLENBQUMsUUFBUSxDQUFDO1lBQzNCLEtBQUssbUJBQVksQ0FBQyx1QkFBdUI7Z0JBQ3ZDLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUNoRCxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7WUFDdkIsS0FBSyxtQkFBWSxDQUFDLG9CQUFvQjtnQkFDcEMsT0FBTyxJQUFJLENBQUMsc0JBQXNCLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDMUM7Z0JBQ0UsTUFBTSxJQUFJLGtDQUF1QixDQUFDLDRCQUE0QixHQUFHLFlBQVksQ0FBQyxDQUFDO1NBQ2xGO0lBQ0gsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ssWUFBWSxDQUFDLEdBQW9DO1FBQ3ZELE9BQU8sR0FBRyxDQUFDLGNBQWMsQ0FBQyxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFhLENBQUMsQ0FBQyxDQUFDO0lBQzdFLENBQUM7SUFFRCxrQkFBa0I7SUFDbEIsZUFBZSxDQUFDLE9BQWdCO1FBQzlCLElBQUksQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3pDLENBQUM7SUFFRCxrQkFBa0I7SUFDbEIsV0FBVyxDQUFDLEdBQVk7UUFDdEIsSUFBSTtZQUNGLElBQUksaUJBQU8sQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztTQUMvQjtRQUFDLE9BQU8sR0FBRyxFQUFFO1lBQ1osTUFBTSxJQUFJLEtBQUssQ0FBQywrQkFBK0IsQ0FBQyxDQUFDO1NBQ2xEO0lBQ0gsQ0FBQztJQUNELGtCQUFrQjtJQUNsQixzQkFBc0IsQ0FBQyxjQUFtQjtRQUN4QyxJQUFJLENBQUMsUUFBUSxDQUFDLHNCQUFzQixDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ3ZELENBQUM7SUFFRCxrQkFBa0I7SUFDbEIsbUJBQW1CLENBQUMsV0FBd0I7UUFDMUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUNqRCxDQUFDO0lBRUQsa0JBQWtCO0lBQ2xCLGFBQWEsQ0FBQyxLQUFnQjtRQUM1QixJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNyQyxDQUFDO0NBQ0Y7QUF4R0Qsd0NBd0dDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEJpZ051bWJlciBmcm9tICdiaWdudW1iZXIuanMnO1xuaW1wb3J0IHsgQmFzZUNvaW4gYXMgQ29pbkNvbmZpZyB9IGZyb20gJ0BiaXRnby1iZXRhL3N0YXRpY3MnO1xuaW1wb3J0IHsgQmFzZUtleSwgQmFzZVRyYW5zYWN0aW9uLCBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvciB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uIH0gZnJvbSAnLi90cmFuc2FjdGlvbic7XG5pbXBvcnQgeyBBZGRyZXNzIH0gZnJvbSAnLi9hZGRyZXNzJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uQnVpbGRlciB9IGZyb20gJy4vdHJhbnNhY3Rpb25CdWlsZGVyJztcbmltcG9ydCB7IEtleVBhaXIgfSBmcm9tICcuL2tleVBhaXInO1xuaW1wb3J0IHsgZGVjb2RlVHJhbnNhY3Rpb24gfSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB7IENvbnRyYWN0VHlwZSB9IGZyb20gJy4vZW51bSc7XG5pbXBvcnQgeyBDb250cmFjdENhbGxCdWlsZGVyIH0gZnJvbSAnLi9jb250cmFjdENhbGxCdWlsZGVyJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uUmVjZWlwdCB9IGZyb20gJy4vaWZhY2UnO1xuaW1wb3J0IHsgVG9rZW5UcmFuc2ZlckJ1aWxkZXIgfSBmcm9tICcuL3Rva2VuVHJhbnNmZXJCdWlsZGVyJztcblxuLyoqXG4gKiBXcmFwcGVkIEJ1aWxkZXIgY2xhc3NcbiAqIFRoaXMgYnVpbGRlciBpcyBjcmVhdGVkIHRvIG1haW50YWluIGNvbXBhdGliaWxpdHkgd2l0aCB0aGUgY3VycmVudCB1c2VzIG9mIGFjY291bnQtbGliXG4gKiBJdCBoYXMgYW4gaW5zdGFuY2Ugb2YgVHJhbnNhY3Rpb24gQnVpbGRlciBvciBDb250cmFjdCBDYWxsIEJ1aWxkZXIgYXMgcmVxdWlyZWQuXG4gKi9cbmV4cG9ydCBjbGFzcyBXcmFwcGVkQnVpbGRlciBleHRlbmRzIFRyYW5zYWN0aW9uQnVpbGRlciB7XG4gIHByaXZhdGUgX2J1aWxkZXI6IFRyYW5zYWN0aW9uQnVpbGRlcjtcblxuICBjb25zdHJ1Y3RvcihfY29pbkNvbmZpZzogUmVhZG9ubHk8Q29pbkNvbmZpZz4pIHtcbiAgICBzdXBlcihfY29pbkNvbmZpZyk7XG4gICAgLy8gZGVmYXVsdHMgdG8gb2xkIGJ1aWxkZXJcbiAgICB0aGlzLl9idWlsZGVyID0gbmV3IFRyYW5zYWN0aW9uQnVpbGRlcihfY29pbkNvbmZpZyk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIHNwZWNpZmljIGJ1aWxkZXIgdG8gY3JlYXRlIGEgY29udHJhY3QgY2FsbCB0cmFuc2FjdGlvblxuICAgKlxuICAgKiBAcGFyYW0ge1RyYW5zYWN0aW9ufSBbdHhdIFRoZSB0cmFuc2FjdGlvbiB0byBpbml0aWFsaXplIGJ1aWxkZXJcbiAgICogQHJldHVybnMge0NvbnRyYWN0Q2FsbEJ1aWxkZXJ9IFRoZSBzcGVjaWZpYyBjb250cmFjdCBjYWxsIGJ1aWxkZXJcbiAgICovXG4gIGdldENvbnRyYWN0Q2FsbEJ1aWxkZXIodHg/OiBUcmFuc2FjdGlvblJlY2VpcHQgfCBzdHJpbmcpOiBDb250cmFjdENhbGxCdWlsZGVyIHtcbiAgICByZXR1cm4gdGhpcy5pbml0aWFsaXplQnVpbGRlcih0eCwgbmV3IENvbnRyYWN0Q2FsbEJ1aWxkZXIodGhpcy5fY29pbkNvbmZpZykpO1xuICB9XG5cbiAgZ2V0VHJhbnNhY3Rpb25CdWlsZGVyKHR4PzogVHJhbnNhY3Rpb25SZWNlaXB0IHwgc3RyaW5nKTogVHJhbnNhY3Rpb25CdWlsZGVyIHtcbiAgICByZXR1cm4gdGhpcy5pbml0aWFsaXplQnVpbGRlcih0eCwgbmV3IFRyYW5zYWN0aW9uQnVpbGRlcih0aGlzLl9jb2luQ29uZmlnKSk7XG4gIH1cblxuICBnZXRUb2tlblRyYW5zZmVyQnVpbGRlcih0eD86IFRyYW5zYWN0aW9uUmVjZWlwdCB8IHN0cmluZyk6IFRva2VuVHJhbnNmZXJCdWlsZGVyIHtcbiAgICByZXR1cm4gdGhpcy5pbml0aWFsaXplQnVpbGRlcih0eCwgbmV3IFRva2VuVHJhbnNmZXJCdWlsZGVyKHRoaXMuX2NvaW5Db25maWcpKTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdGlhbGl6ZUJ1aWxkZXI8VCBleHRlbmRzIFRyYW5zYWN0aW9uQnVpbGRlcj4odHg6IFRyYW5zYWN0aW9uUmVjZWlwdCB8IHN0cmluZyB8IHVuZGVmaW5lZCwgYnVpbGRlcjogVCk6IFQge1xuICAgIGlmICh0eCkge1xuICAgICAgYnVpbGRlci5pbml0QnVpbGRlcih0eCk7XG4gICAgfVxuICAgIHJldHVybiBidWlsZGVyO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIGV4dGVuZFZhbGlkVG8oZXh0ZW5zaW9uTXM6IG51bWJlcikge1xuICAgIHRoaXMuX2J1aWxkZXIuZXh0ZW5kVmFsaWRUbyhleHRlbnNpb25Ncyk7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgc2lnbihrZXk6IEJhc2VLZXkpIHtcbiAgICB0aGlzLl9idWlsZGVyLnNpZ24oa2V5KTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBhc3luYyBidWlsZCgpOiBQcm9taXNlPEJhc2VUcmFuc2FjdGlvbj4ge1xuICAgIHJldHVybiB0aGlzLl9idWlsZGVyLmJ1aWxkKCk7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgZnJvbShyYXc6IGFueSkge1xuICAgIHRoaXMudmFsaWRhdGVSYXdUcmFuc2FjdGlvbihyYXcpO1xuICAgIGNvbnN0IHJhd0RhdGFIZXggPSB0aGlzLmdldFR4UmVjZWlwdChyYXcpO1xuICAgIGNvbnN0IGRlY29kZWRUeCA9IGRlY29kZVRyYW5zYWN0aW9uKHJhd0RhdGFIZXgpO1xuICAgIGNvbnN0IGNvbnRyYWN0VHlwZSA9IGRlY29kZWRUeC5jb250cmFjdFR5cGU7XG4gICAgc3dpdGNoIChjb250cmFjdFR5cGUpIHtcbiAgICAgIGNhc2UgQ29udHJhY3RUeXBlLlRyYW5zZmVyOlxuICAgICAgY2FzZSBDb250cmFjdFR5cGUuQWNjb3VudFBlcm1pc3Npb25VcGRhdGU6XG4gICAgICAgIHRoaXMuX2J1aWxkZXIgPSB0aGlzLmdldFRyYW5zYWN0aW9uQnVpbGRlcihyYXcpO1xuICAgICAgICByZXR1cm4gdGhpcy5fYnVpbGRlcjtcbiAgICAgIGNhc2UgQ29udHJhY3RUeXBlLlRyaWdnZXJTbWFydENvbnRyYWN0OlxuICAgICAgICByZXR1cm4gdGhpcy5nZXRDb250cmFjdENhbGxCdWlsZGVyKHJhdyk7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IoJ0ludmFsaWQgdHJhbnNhY3Rpb24gdHlwZTogJyArIGNvbnRyYWN0VHlwZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgcmF3IGRhdGEgaGV4IGZyb20gYSByYXcgdHJhbnNhY3Rpb25cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmcgfCB7IFtrZXk6IHN0cmluZ106IGFueSB9fSByYXcgdGhlIHJhdyB0cmFuc2FjdGlvbiBhcyBhIHN0cmluZyBvciBhcyBhbiBvYmplY3RcbiAgICogQHJldHVybnMge3N0cmluZ30gdGhlIHJhdyBkYXRhIGhleFxuICAgKi9cbiAgcHJpdmF0ZSBnZXRUeFJlY2VpcHQocmF3OiBzdHJpbmcgfCB7IFtrZXk6IHN0cmluZ106IGFueSB9KTogc3RyaW5nIHtcbiAgICByZXR1cm4gcmF3WydyYXdfZGF0YV9oZXgnXSB8fCB0aGlzLmdldFR4UmVjZWlwdChKU09OLnBhcnNlKHJhdyBhcyBzdHJpbmcpKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICB2YWxpZGF0ZUFkZHJlc3MoYWRkcmVzczogQWRkcmVzcyk6IHZvaWQge1xuICAgIHRoaXMuX2J1aWxkZXIudmFsaWRhdGVBZGRyZXNzKGFkZHJlc3MpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHZhbGlkYXRlS2V5KGtleTogQmFzZUtleSk6IHZvaWQge1xuICAgIHRyeSB7XG4gICAgICBuZXcgS2V5UGFpcih7IHBydjoga2V5LmtleSB9KTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIHByb3ZpZGVkIGtleSBpcyBub3QgdmFsaWQnKTtcbiAgICB9XG4gIH1cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHZhbGlkYXRlUmF3VHJhbnNhY3Rpb24ocmF3VHJhbnNhY3Rpb246IGFueSk6IHZvaWQge1xuICAgIHRoaXMuX2J1aWxkZXIudmFsaWRhdGVSYXdUcmFuc2FjdGlvbihyYXdUcmFuc2FjdGlvbik7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgdmFsaWRhdGVUcmFuc2FjdGlvbih0cmFuc2FjdGlvbjogVHJhbnNhY3Rpb24pOiB2b2lkIHtcbiAgICB0aGlzLl9idWlsZGVyLnZhbGlkYXRlVHJhbnNhY3Rpb24odHJhbnNhY3Rpb24pO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHZhbGlkYXRlVmFsdWUodmFsdWU6IEJpZ051bWJlcik6IHZvaWQge1xuICAgIHRoaXMuX2J1aWxkZXIudmFsaWRhdGVWYWx1ZSh2YWx1ZSk7XG4gIH1cbn1cbiJdfQ==
108
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid3JhcHBlZEJ1aWxkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3dyYXBwZWRCdWlsZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUVBLG1EQUF5RjtBQUd6Riw2REFBMEQ7QUFDMUQsdUNBQW9DO0FBQ3BDLG1DQUE0QztBQUM1QyxpQ0FBc0M7QUFDdEMsK0RBQTREO0FBRTVELGlFQUE4RDtBQUU5RDs7OztHQUlHO0FBQ0gsTUFBYSxjQUFlLFNBQVEsdUNBQWtCO0lBR3BELFlBQVksV0FBaUM7UUFDM0MsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ25CLDBCQUEwQjtRQUMxQixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksdUNBQWtCLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDdEQsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsc0JBQXNCLENBQUMsRUFBZ0M7UUFDckQsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUMsRUFBRSxFQUFFLElBQUkseUNBQW1CLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7SUFDL0UsQ0FBQztJQUVELHFCQUFxQixDQUFDLEVBQWdDO1FBQ3BELE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDLEVBQUUsRUFBRSxJQUFJLHVDQUFrQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO0lBQzlFLENBQUM7SUFFRCx1QkFBdUIsQ0FBQyxFQUFnQztRQUN0RCxPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLEVBQUUsSUFBSSwyQ0FBb0IsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztJQUNoRixDQUFDO0lBRU8saUJBQWlCLENBQStCLEVBQTJDLEVBQUUsT0FBVTtRQUM3RyxJQUFJLEVBQUUsRUFBRSxDQUFDO1lBQ1AsT0FBTyxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUMxQixDQUFDO1FBQ0QsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztJQUVELGtCQUFrQjtJQUNsQixhQUFhLENBQUMsV0FBbUI7UUFDL0IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUVELGtCQUFrQjtJQUNsQixJQUFJLENBQUMsR0FBWTtRQUNmLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzFCLENBQUM7SUFFRCxrQkFBa0I7SUFDbEIsS0FBSyxDQUFDLEtBQUs7UUFDVCxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDL0IsQ0FBQztJQUVELGtCQUFrQjtJQUNsQixJQUFJLENBQUMsR0FBUTtRQUNYLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNqQyxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzFDLE1BQU0sU0FBUyxHQUFHLElBQUEseUJBQWlCLEVBQUMsVUFBVSxDQUFDLENBQUM7UUFDaEQsTUFBTSxZQUFZLEdBQUcsU0FBUyxDQUFDLFlBQVksQ0FBQztRQUM1QyxRQUFRLFlBQVksRUFBRSxDQUFDO1lBQ3JCLEtBQUssbUJBQVksQ0FBQyxRQUFRLENBQUM7WUFDM0IsS0FBSyxtQkFBWSxDQUFDLHVCQUF1QjtnQkFDdkMsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ2hELE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztZQUN2QixLQUFLLG1CQUFZLENBQUMsb0JBQW9CO2dCQUNwQyxPQUFPLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUMxQztnQkFDRSxNQUFNLElBQUksa0NBQXVCLENBQUMsNEJBQTRCLEdBQUcsWUFBWSxDQUFDLENBQUM7UUFDbkYsQ0FBQztJQUNILENBQUM7SUFFRDs7Ozs7T0FLRztJQUNLLFlBQVksQ0FBQyxHQUFvQztRQUN2RCxPQUFPLEdBQUcsQ0FBQyxjQUFjLENBQUMsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBYSxDQUFDLENBQUMsQ0FBQztJQUM3RSxDQUFDO0lBRUQsa0JBQWtCO0lBQ2xCLGVBQWUsQ0FBQyxPQUFnQjtRQUM5QixJQUFJLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUN6QyxDQUFDO0lBRUQsa0JBQWtCO0lBQ2xCLFdBQVcsQ0FBQyxHQUFZO1FBQ3RCLElBQUksQ0FBQztZQUNILElBQUksaUJBQU8sQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztRQUNoQyxDQUFDO1FBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztZQUNiLE1BQU0sSUFBSSxLQUFLLENBQUMsK0JBQStCLENBQUMsQ0FBQztRQUNuRCxDQUFDO0lBQ0gsQ0FBQztJQUNELGtCQUFrQjtJQUNsQixzQkFBc0IsQ0FBQyxjQUFtQjtRQUN4QyxJQUFJLENBQUMsUUFBUSxDQUFDLHNCQUFzQixDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ3ZELENBQUM7SUFFRCxrQkFBa0I7SUFDbEIsbUJBQW1CLENBQUMsV0FBd0I7UUFDMUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUNqRCxDQUFDO0lBRUQsa0JBQWtCO0lBQ2xCLGFBQWEsQ0FBQyxLQUFnQjtRQUM1QixJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNyQyxDQUFDO0NBQ0Y7QUF4R0Qsd0NBd0dDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEJpZ051bWJlciBmcm9tICdiaWdudW1iZXIuanMnO1xuaW1wb3J0IHsgQmFzZUNvaW4gYXMgQ29pbkNvbmZpZyB9IGZyb20gJ0BiaXRnby1iZXRhL3N0YXRpY3MnO1xuaW1wb3J0IHsgQmFzZUtleSwgQmFzZVRyYW5zYWN0aW9uLCBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvciB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uIH0gZnJvbSAnLi90cmFuc2FjdGlvbic7XG5pbXBvcnQgeyBBZGRyZXNzIH0gZnJvbSAnLi9hZGRyZXNzJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uQnVpbGRlciB9IGZyb20gJy4vdHJhbnNhY3Rpb25CdWlsZGVyJztcbmltcG9ydCB7IEtleVBhaXIgfSBmcm9tICcuL2tleVBhaXInO1xuaW1wb3J0IHsgZGVjb2RlVHJhbnNhY3Rpb24gfSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB7IENvbnRyYWN0VHlwZSB9IGZyb20gJy4vZW51bSc7XG5pbXBvcnQgeyBDb250cmFjdENhbGxCdWlsZGVyIH0gZnJvbSAnLi9jb250cmFjdENhbGxCdWlsZGVyJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uUmVjZWlwdCB9IGZyb20gJy4vaWZhY2UnO1xuaW1wb3J0IHsgVG9rZW5UcmFuc2ZlckJ1aWxkZXIgfSBmcm9tICcuL3Rva2VuVHJhbnNmZXJCdWlsZGVyJztcblxuLyoqXG4gKiBXcmFwcGVkIEJ1aWxkZXIgY2xhc3NcbiAqIFRoaXMgYnVpbGRlciBpcyBjcmVhdGVkIHRvIG1haW50YWluIGNvbXBhdGliaWxpdHkgd2l0aCB0aGUgY3VycmVudCB1c2VzIG9mIGFjY291bnQtbGliXG4gKiBJdCBoYXMgYW4gaW5zdGFuY2Ugb2YgVHJhbnNhY3Rpb24gQnVpbGRlciBvciBDb250cmFjdCBDYWxsIEJ1aWxkZXIgYXMgcmVxdWlyZWQuXG4gKi9cbmV4cG9ydCBjbGFzcyBXcmFwcGVkQnVpbGRlciBleHRlbmRzIFRyYW5zYWN0aW9uQnVpbGRlciB7XG4gIHByaXZhdGUgX2J1aWxkZXI6IFRyYW5zYWN0aW9uQnVpbGRlcjtcblxuICBjb25zdHJ1Y3RvcihfY29pbkNvbmZpZzogUmVhZG9ubHk8Q29pbkNvbmZpZz4pIHtcbiAgICBzdXBlcihfY29pbkNvbmZpZyk7XG4gICAgLy8gZGVmYXVsdHMgdG8gb2xkIGJ1aWxkZXJcbiAgICB0aGlzLl9idWlsZGVyID0gbmV3IFRyYW5zYWN0aW9uQnVpbGRlcihfY29pbkNvbmZpZyk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIHNwZWNpZmljIGJ1aWxkZXIgdG8gY3JlYXRlIGEgY29udHJhY3QgY2FsbCB0cmFuc2FjdGlvblxuICAgKlxuICAgKiBAcGFyYW0ge1RyYW5zYWN0aW9ufSBbdHhdIFRoZSB0cmFuc2FjdGlvbiB0byBpbml0aWFsaXplIGJ1aWxkZXJcbiAgICogQHJldHVybnMge0NvbnRyYWN0Q2FsbEJ1aWxkZXJ9IFRoZSBzcGVjaWZpYyBjb250cmFjdCBjYWxsIGJ1aWxkZXJcbiAgICovXG4gIGdldENvbnRyYWN0Q2FsbEJ1aWxkZXIodHg/OiBUcmFuc2FjdGlvblJlY2VpcHQgfCBzdHJpbmcpOiBDb250cmFjdENhbGxCdWlsZGVyIHtcbiAgICByZXR1cm4gdGhpcy5pbml0aWFsaXplQnVpbGRlcih0eCwgbmV3IENvbnRyYWN0Q2FsbEJ1aWxkZXIodGhpcy5fY29pbkNvbmZpZykpO1xuICB9XG5cbiAgZ2V0VHJhbnNhY3Rpb25CdWlsZGVyKHR4PzogVHJhbnNhY3Rpb25SZWNlaXB0IHwgc3RyaW5nKTogVHJhbnNhY3Rpb25CdWlsZGVyIHtcbiAgICByZXR1cm4gdGhpcy5pbml0aWFsaXplQnVpbGRlcih0eCwgbmV3IFRyYW5zYWN0aW9uQnVpbGRlcih0aGlzLl9jb2luQ29uZmlnKSk7XG4gIH1cblxuICBnZXRUb2tlblRyYW5zZmVyQnVpbGRlcih0eD86IFRyYW5zYWN0aW9uUmVjZWlwdCB8IHN0cmluZyk6IFRva2VuVHJhbnNmZXJCdWlsZGVyIHtcbiAgICByZXR1cm4gdGhpcy5pbml0aWFsaXplQnVpbGRlcih0eCwgbmV3IFRva2VuVHJhbnNmZXJCdWlsZGVyKHRoaXMuX2NvaW5Db25maWcpKTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdGlhbGl6ZUJ1aWxkZXI8VCBleHRlbmRzIFRyYW5zYWN0aW9uQnVpbGRlcj4odHg6IFRyYW5zYWN0aW9uUmVjZWlwdCB8IHN0cmluZyB8IHVuZGVmaW5lZCwgYnVpbGRlcjogVCk6IFQge1xuICAgIGlmICh0eCkge1xuICAgICAgYnVpbGRlci5pbml0QnVpbGRlcih0eCk7XG4gICAgfVxuICAgIHJldHVybiBidWlsZGVyO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIGV4dGVuZFZhbGlkVG8oZXh0ZW5zaW9uTXM6IG51bWJlcikge1xuICAgIHRoaXMuX2J1aWxkZXIuZXh0ZW5kVmFsaWRUbyhleHRlbnNpb25Ncyk7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgc2lnbihrZXk6IEJhc2VLZXkpIHtcbiAgICB0aGlzLl9idWlsZGVyLnNpZ24oa2V5KTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBhc3luYyBidWlsZCgpOiBQcm9taXNlPEJhc2VUcmFuc2FjdGlvbj4ge1xuICAgIHJldHVybiB0aGlzLl9idWlsZGVyLmJ1aWxkKCk7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgZnJvbShyYXc6IGFueSkge1xuICAgIHRoaXMudmFsaWRhdGVSYXdUcmFuc2FjdGlvbihyYXcpO1xuICAgIGNvbnN0IHJhd0RhdGFIZXggPSB0aGlzLmdldFR4UmVjZWlwdChyYXcpO1xuICAgIGNvbnN0IGRlY29kZWRUeCA9IGRlY29kZVRyYW5zYWN0aW9uKHJhd0RhdGFIZXgpO1xuICAgIGNvbnN0IGNvbnRyYWN0VHlwZSA9IGRlY29kZWRUeC5jb250cmFjdFR5cGU7XG4gICAgc3dpdGNoIChjb250cmFjdFR5cGUpIHtcbiAgICAgIGNhc2UgQ29udHJhY3RUeXBlLlRyYW5zZmVyOlxuICAgICAgY2FzZSBDb250cmFjdFR5cGUuQWNjb3VudFBlcm1pc3Npb25VcGRhdGU6XG4gICAgICAgIHRoaXMuX2J1aWxkZXIgPSB0aGlzLmdldFRyYW5zYWN0aW9uQnVpbGRlcihyYXcpO1xuICAgICAgICByZXR1cm4gdGhpcy5fYnVpbGRlcjtcbiAgICAgIGNhc2UgQ29udHJhY3RUeXBlLlRyaWdnZXJTbWFydENvbnRyYWN0OlxuICAgICAgICByZXR1cm4gdGhpcy5nZXRDb250cmFjdENhbGxCdWlsZGVyKHJhdyk7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IoJ0ludmFsaWQgdHJhbnNhY3Rpb24gdHlwZTogJyArIGNvbnRyYWN0VHlwZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgcmF3IGRhdGEgaGV4IGZyb20gYSByYXcgdHJhbnNhY3Rpb25cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmcgfCB7IFtrZXk6IHN0cmluZ106IGFueSB9fSByYXcgdGhlIHJhdyB0cmFuc2FjdGlvbiBhcyBhIHN0cmluZyBvciBhcyBhbiBvYmplY3RcbiAgICogQHJldHVybnMge3N0cmluZ30gdGhlIHJhdyBkYXRhIGhleFxuICAgKi9cbiAgcHJpdmF0ZSBnZXRUeFJlY2VpcHQocmF3OiBzdHJpbmcgfCB7IFtrZXk6IHN0cmluZ106IGFueSB9KTogc3RyaW5nIHtcbiAgICByZXR1cm4gcmF3WydyYXdfZGF0YV9oZXgnXSB8fCB0aGlzLmdldFR4UmVjZWlwdChKU09OLnBhcnNlKHJhdyBhcyBzdHJpbmcpKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICB2YWxpZGF0ZUFkZHJlc3MoYWRkcmVzczogQWRkcmVzcyk6IHZvaWQge1xuICAgIHRoaXMuX2J1aWxkZXIudmFsaWRhdGVBZGRyZXNzKGFkZHJlc3MpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHZhbGlkYXRlS2V5KGtleTogQmFzZUtleSk6IHZvaWQge1xuICAgIHRyeSB7XG4gICAgICBuZXcgS2V5UGFpcih7IHBydjoga2V5LmtleSB9KTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIHByb3ZpZGVkIGtleSBpcyBub3QgdmFsaWQnKTtcbiAgICB9XG4gIH1cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHZhbGlkYXRlUmF3VHJhbnNhY3Rpb24ocmF3VHJhbnNhY3Rpb246IGFueSk6IHZvaWQge1xuICAgIHRoaXMuX2J1aWxkZXIudmFsaWRhdGVSYXdUcmFuc2FjdGlvbihyYXdUcmFuc2FjdGlvbik7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgdmFsaWRhdGVUcmFuc2FjdGlvbih0cmFuc2FjdGlvbjogVHJhbnNhY3Rpb24pOiB2b2lkIHtcbiAgICB0aGlzLl9idWlsZGVyLnZhbGlkYXRlVHJhbnNhY3Rpb24odHJhbnNhY3Rpb24pO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHZhbGlkYXRlVmFsdWUodmFsdWU6IEJpZ051bWJlcik6IHZvaWQge1xuICAgIHRoaXMuX2J1aWxkZXIudmFsaWRhdGVWYWx1ZSh2YWx1ZSk7XG4gIH1cbn1cbiJdfQ==
package/dist/src/trx.d.ts CHANGED
@@ -1,8 +1,12 @@
1
- /// <reference types="node" />
2
1
  import { CoinFamily, BaseCoin as StaticsBaseCoin } from '@bitgo-beta/statics';
3
- import { BaseCoin, BitGoBase, KeyPair, ParsedTransaction, ParseTransactionOptions, SignedTransaction, SignTransactionOptions, TransactionExplanation, TransactionFee, TransactionPrebuild as BaseTransactionPrebuild, TransactionRecipient as Recipient, VerifyAddressOptions, VerifyTransactionOptions } from '@bitgo-beta/sdk-core';
2
+ import { BaseCoin, BitGoBase, KeyPair, ParsedTransaction, ParseTransactionOptions, SignedTransaction, SignTransactionOptions, TransactionExplanation, TransactionFee, TransactionPrebuild as BaseTransactionPrebuild, TransactionRecipient as Recipient, VerifyAddressOptions, VerifyTransactionOptions, BaseTransaction } from '@bitgo-beta/sdk-core';
4
3
  import { Interface } from './lib';
4
+ import { TransactionReceipt } from './lib/iface';
5
5
  export declare const MINIMUM_TRON_MSIG_TRANSACTION_FEE = 1000000;
6
+ export declare const SAFE_TRON_TRANSACTION_FEE: number;
7
+ export declare const SAFE_TRON_TOKEN_TRANSACTION_FEE: number;
8
+ export declare const RECOVER_TRANSACTION_EXPIRY = 86400000;
9
+ export declare const DEFAULT_SCAN_FACTOR = 20;
6
10
  export interface TronSignTransactionOptions extends SignTransactionOptions {
7
11
  txPrebuild: TransactionPrebuild;
8
12
  prv: string;
@@ -40,11 +44,33 @@ export interface RecoveryOptions {
40
44
  bitgoKey: string;
41
45
  recoveryDestination: string;
42
46
  krsProvider?: string;
47
+ tokenContractAddress?: string;
43
48
  walletPassphrase?: string;
49
+ startingScanIndex?: number;
50
+ scan?: number;
51
+ }
52
+ export interface ConsolidationRecoveryOptions {
53
+ userKey: string;
54
+ backupKey: string;
55
+ bitgoKey: string;
56
+ tokenContractAddress?: string;
57
+ startingScanIndex?: number;
58
+ endingScanIndex?: number;
59
+ }
60
+ export interface ConsolidationRecoveryBatch {
61
+ transactions: RecoveryTransaction[];
62
+ }
63
+ export interface FeeInfo {
64
+ fee: string;
44
65
  }
45
66
  export interface RecoveryTransaction {
46
- tx: TransactionPrebuild;
47
- recoveryAmount: number;
67
+ txHex?: string;
68
+ feeInfo?: FeeInfo;
69
+ coin?: string;
70
+ tx?: TransactionPrebuild;
71
+ recoveryAmount?: number;
72
+ tokenTxs?: TransactionReceipt[];
73
+ addressInfo?: AddressInfo;
48
74
  }
49
75
  export declare enum NodeTypes {
50
76
  Full = 0,
@@ -54,14 +80,7 @@ export declare enum NodeTypes {
54
80
  * This structure is not a complete model of the AccountResponse from a node.
55
81
  */
56
82
  export interface AccountResponse {
57
- address: string;
58
- balance: number;
59
- owner_permission: {
60
- keys: [Interface.PermissionKey];
61
- };
62
- active_permission: [{
63
- keys: [Interface.PermissionKey];
64
- }];
83
+ data: [Interface.AccountInfo];
65
84
  }
66
85
  export declare class Trx extends BaseCoin {
67
86
  protected readonly _staticsCoin: Readonly<StaticsBaseCoin>;
@@ -118,7 +137,6 @@ export declare class Trx extends BaseCoin {
118
137
  * @param params
119
138
  * @param params.txPrebuild {Object} prebuild object returned by platform
120
139
  * @param params.prv {String} user prv
121
- * @param params.wallet.addressVersion {String} this is the version of the Algorand multisig address generation format
122
140
  * @returns Bluebird<SignedTransaction>
123
141
  */
124
142
  signTransaction(params: TronSignTransactionOptions): Promise<SignedTransaction>;
@@ -154,18 +172,25 @@ export declare class Trx extends BaseCoin {
154
172
  getExtraPrebuildParams(buildParams: any): Promise<any>;
155
173
  pubToHexAddress(pub: string): string;
156
174
  xprvToCompressedPrv(xprv: string): string;
175
+ private getNodeUrl;
157
176
  /**
158
177
  * Make a query to Trongrid for information such as balance, token balance, solidity calls
159
178
  * @param query {Object} key-value pairs of parameters to append after /api
160
179
  * @returns {Object} response from Trongrid
161
180
  */
162
181
  private recoveryPost;
182
+ /**
183
+ * Make a query to Trongrid for information such as balance, token balance, solidity calls
184
+ * @param query {Object} key-value pairs of parameters to append after /api
185
+ * @returns {Object} response from Trongrid
186
+ */
187
+ private recoveryGet;
163
188
  /**
164
189
  * Query our explorer for the balance of an address
165
190
  * @param address {String} the address encoded in hex
166
191
  * @returns {BigNumber} address balance
167
192
  */
168
- private getAccountFromNode;
193
+ private getAccountBalancesFromNode;
169
194
  /**
170
195
  * Retrieves our build transaction from a node.
171
196
  * @param toAddr hex-encoded address
@@ -173,6 +198,13 @@ export declare class Trx extends BaseCoin {
173
198
  * @param amount
174
199
  */
175
200
  private getBuildTransaction;
201
+ /**
202
+ * Retrieves our build transaction from a node.
203
+ * @param toAddr hex-encoded address
204
+ * @param fromAddr hex-encoded address
205
+ * @param amount
206
+ */
207
+ private getTriggerSmartContractTransaction;
176
208
  /**
177
209
  * Throws an error if any keys in the ownerKeys collection don't match the keys array we pass
178
210
  * @param ownerKeys
@@ -182,15 +214,41 @@ export declare class Trx extends BaseCoin {
182
214
  address: string;
183
215
  weight: number;
184
216
  }[], keys: string[]): void;
217
+ /**
218
+ * Format for offline vault signing
219
+ * @param {BaseTransaction} tx
220
+ * @param {number} fee
221
+ * @param {number} recoveryAmount
222
+ * @returns {RecoveryTransaction}
223
+ */
224
+ formatForOfflineVault(tx: BaseTransaction, fee: number, recoveryAmount: number, addressInfo?: AddressInfo): RecoveryTransaction;
185
225
  /**
186
226
  * Builds a funds recovery transaction without BitGo.
187
227
  * We need to do three queries during this:
188
228
  * 1) Node query - how much money is in the account
189
229
  * 2) Build transaction - build our transaction for the amount
190
230
  * 3) Send signed build - send our signed build to a public node
231
+ *
232
+ * Note 1: for base address recoveries, fund will be recovered to recovery destination if base address balance is
233
+ * more than 2.1 TRX for native TRX recovery and 100 TRX for token recover. For receive addresses, fund will be
234
+ * recovered to base address first then swept to base address(decided as the universal pattern in team meeting).
235
+ *
236
+ * Note 2: the function supports token sweep from base address.
237
+ * TODO: support token sweep from receive address.
238
+ *
191
239
  * @param params
192
240
  */
193
241
  recover(params: RecoveryOptions): Promise<RecoveryTransaction>;
242
+ /**
243
+ * Builds native TRX recoveries of receive addresses in batch without BitGo.
244
+ * Funds will be recovered to base address first. You need to initiate another sweep txn after that.
245
+ * Note: there will be another recoverTokenConsolidations function to support token recover from receive addresses.
246
+ *
247
+ * @param {ConsolidationRecoveryOptions} params - options for consolidation recovery.
248
+ * @param {string} [params.startingScanIndex] - receive address index to start scanning from. default to 1 (inclusive).
249
+ * @param {string} [params.endingScanIndex] - receive address index to end scanning at. default to startingScanIndex + 20 (exclusive).
250
+ */
251
+ recoverConsolidations(params: ConsolidationRecoveryOptions): Promise<ConsolidationRecoveryBatch>;
194
252
  /**
195
253
  * Explain a Tron transaction from txHex
196
254
  * @param params