@bitgo/sdk-coin-stx 4.4.0 → 5.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/src/lib/abstractContractBuilder.d.ts +2 -2
- package/dist/src/lib/abstractContractBuilder.d.ts.map +1 -1
- package/dist/src/lib/abstractContractBuilder.js +11 -7
- package/dist/src/lib/constants.d.ts +0 -1
- package/dist/src/lib/constants.d.ts.map +1 -1
- package/dist/src/lib/constants.js +2 -4
- package/dist/src/lib/contractBuilder.d.ts +14 -0
- package/dist/src/lib/contractBuilder.d.ts.map +1 -1
- package/dist/src/lib/contractBuilder.js +29 -5
- package/dist/src/lib/fungibleTokenTransferBuilder.d.ts.map +1 -1
- package/dist/src/lib/fungibleTokenTransferBuilder.js +10 -5
- package/dist/src/lib/index.d.ts +1 -0
- package/dist/src/lib/index.d.ts.map +1 -1
- package/dist/src/lib/index.js +2 -1
- package/dist/src/lib/keyPair.d.ts +1 -1
- package/dist/src/lib/keyPair.d.ts.map +1 -1
- package/dist/src/lib/keyPair.js +8 -4
- package/dist/src/lib/network.d.ts.map +1 -1
- package/dist/src/lib/network.js +4 -3
- package/dist/src/lib/postConditions.d.ts +31 -0
- package/dist/src/lib/postConditions.d.ts.map +1 -0
- package/dist/src/lib/postConditions.js +61 -0
- package/dist/src/lib/sbtcWithdrawBuilder.d.ts +1 -1
- package/dist/src/lib/sbtcWithdrawBuilder.d.ts.map +1 -1
- package/dist/src/lib/sbtcWithdrawBuilder.js +11 -9
- package/dist/src/lib/sendmanyBuilder.d.ts +1 -1
- package/dist/src/lib/sendmanyBuilder.d.ts.map +1 -1
- package/dist/src/lib/sendmanyBuilder.js +5 -3
- package/dist/src/lib/transaction.d.ts +3 -3
- package/dist/src/lib/transaction.d.ts.map +1 -1
- package/dist/src/lib/transaction.js +22 -20
- package/dist/src/lib/transactionBuilder.d.ts +0 -1
- package/dist/src/lib/transactionBuilder.d.ts.map +1 -1
- package/dist/src/lib/transactionBuilder.js +20 -10
- package/dist/src/lib/transactionBuilderFactory.d.ts.map +1 -1
- package/dist/src/lib/transactionBuilderFactory.js +2 -2
- package/dist/src/lib/transferBuilder.d.ts.map +1 -1
- package/dist/src/lib/transferBuilder.js +1 -2
- package/dist/src/lib/utils.d.ts +2 -2
- package/dist/src/lib/utils.d.ts.map +1 -1
- package/dist/src/lib/utils.js +30 -21
- package/dist/src/stx.d.ts.map +1 -1
- package/dist/src/stx.js +13 -13
- package/dist/test/fixtures.d.ts +3 -18
- package/dist/test/fixtures.d.ts.map +1 -1
- package/dist/test/fixtures.js +7 -20
- package/dist/test/unit/btcAddressUtils.js +54 -1
- package/dist/test/unit/keyPair.js +9 -4
- package/dist/test/unit/network.js +5 -5
- package/dist/test/unit/postConditions.d.ts +2 -0
- package/dist/test/unit/postConditions.d.ts.map +1 -0
- package/dist/test/unit/postConditions.js +56 -0
- package/dist/test/unit/register.d.ts +2 -0
- package/dist/test/unit/register.d.ts.map +1 -0
- package/dist/test/unit/register.js +94 -0
- package/dist/test/unit/resources.d.ts +2 -0
- package/dist/test/unit/resources.d.ts.map +1 -1
- package/dist/test/unit/resources.js +7 -4
- package/dist/test/unit/sip10Token.js +47 -1
- package/dist/test/unit/stx.js +71 -2
- package/dist/test/unit/stxNodeErrors.d.ts +2 -0
- package/dist/test/unit/stxNodeErrors.d.ts.map +1 -0
- package/dist/test/unit/stxNodeErrors.js +118 -0
- package/dist/test/unit/transaction.js +24 -1
- package/dist/test/unit/transactionBuilder/builderValidators.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/builderValidators.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/builderValidators.js +119 -0
- package/dist/test/unit/transactionBuilder/contractBuilder.js +37 -3
- package/dist/test/unit/transactionBuilder/fungibleTokenTransferBuilder.js +86 -3
- package/dist/test/unit/transactionBuilder/pox5Builder.js +51 -2
- package/dist/test/unit/transactionBuilder/sbtcWithdrawBuilder.js +94 -27
- package/dist/test/unit/transactionBuilder/sendmanyBuilder.js +31 -8
- package/dist/test/unit/transactionBuilder/transferBuilder.js +69 -3
- package/dist/test/unit/transactionBuilderFactory.d.ts +2 -0
- package/dist/test/unit/transactionBuilderFactory.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilderFactory.js +63 -0
- package/dist/test/unit/tstxsignet.js +14 -3
- package/dist/test/unit/util.js +94 -14
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +8 -8
package/dist/src/lib/utils.js
CHANGED
|
@@ -72,6 +72,7 @@ const url = __importStar(require("url"));
|
|
|
72
72
|
const bignumber_js_1 = __importDefault(require("bignumber.js"));
|
|
73
73
|
const ethereumjs_util_1 = require("ethereumjs-util");
|
|
74
74
|
const transactions_1 = require("@stacks/transactions");
|
|
75
|
+
const network_1 = require("@stacks/network");
|
|
75
76
|
const secp256k1_1 = require("@noble/curves/secp256k1");
|
|
76
77
|
const _ = __importStar(require("lodash"));
|
|
77
78
|
const sdk_core_1 = require("@bitgo/sdk-core");
|
|
@@ -115,6 +116,9 @@ function bufferToHexPrefixString(buff) {
|
|
|
115
116
|
function removeHexPrefix(hex) {
|
|
116
117
|
return (0, ethereumjs_util_1.stripHexPrefix)(hex);
|
|
117
118
|
}
|
|
119
|
+
function transactionVersionToNetworkName(transactionVersion) {
|
|
120
|
+
return transactionVersion === network_1.TransactionVersion.Testnet ? 'testnet' : 'mainnet';
|
|
121
|
+
}
|
|
118
122
|
/**
|
|
119
123
|
* Get stacks address from public key hash
|
|
120
124
|
*
|
|
@@ -127,7 +131,7 @@ function getAddressFromPublicKeyHash(publicKeyHash, hashMode, transactionVersion
|
|
|
127
131
|
if (publicKeyHash.length !== 20) {
|
|
128
132
|
throw new Error('expected 20-byte pubkeyhash');
|
|
129
133
|
}
|
|
130
|
-
const addrVer = (0, transactions_1.addressHashModeToVersion)(hashMode, transactionVersion);
|
|
134
|
+
const addrVer = (0, transactions_1.addressHashModeToVersion)(hashMode, transactionVersionToNetworkName(transactionVersion));
|
|
131
135
|
const addr = (0, transactions_1.addressFromVersionHash)(addrVer, publicKeyHash.toString('hex'));
|
|
132
136
|
const addrString = (0, transactions_1.addressToString)(addr);
|
|
133
137
|
return addrString;
|
|
@@ -138,7 +142,7 @@ function getAddressFromPublicKeyHash(publicKeyHash, hashMode, transactionVersion
|
|
|
138
142
|
function getTxSenderAddress(tx) {
|
|
139
143
|
if (tx.auth.spendingCondition !== null && tx.auth.spendingCondition !== undefined) {
|
|
140
144
|
const spendingCondition = tx.auth.spendingCondition;
|
|
141
|
-
const txSender = getAddressFromPublicKeyHash(Buffer.from(spendingCondition.signer, 'hex'), spendingCondition.hashMode, tx.
|
|
145
|
+
const txSender = getAddressFromPublicKeyHash(Buffer.from(spendingCondition.signer, 'hex'), spendingCondition.hashMode, tx.transactionVersion);
|
|
142
146
|
return txSender;
|
|
143
147
|
}
|
|
144
148
|
else
|
|
@@ -252,7 +256,7 @@ function allHexChars(maybe) {
|
|
|
252
256
|
function isValidRawTransaction(rawTransaction) {
|
|
253
257
|
try {
|
|
254
258
|
if (typeof rawTransaction === 'string') {
|
|
255
|
-
(0, transactions_1.deserializeTransaction)(transactions_1.
|
|
259
|
+
(0, transactions_1.deserializeTransaction)(new transactions_1.BytesReader(removeHexPrefix(rawTransaction)));
|
|
256
260
|
}
|
|
257
261
|
else {
|
|
258
262
|
return false;
|
|
@@ -270,6 +274,12 @@ function isValidRawTransaction(rawTransaction) {
|
|
|
270
274
|
* @returns {boolean} - the validation result
|
|
271
275
|
*/
|
|
272
276
|
function isValidMemo(memo) {
|
|
277
|
+
// v7's `createMemoString` only guards byte length via `exceedsMaxLengthBytes`, which (unlike
|
|
278
|
+
// v2's `Buffer.from(string)`) no longer throws on non-strings — it silently coerces them.
|
|
279
|
+
// Reject non-strings explicitly so a non-string memo stays invalid, matching v2 behaviour.
|
|
280
|
+
if (typeof memo !== 'string') {
|
|
281
|
+
return false;
|
|
282
|
+
}
|
|
273
283
|
try {
|
|
274
284
|
(0, transactions_1.createMemoString)(memo);
|
|
275
285
|
}
|
|
@@ -328,7 +338,7 @@ function unpadMemo(memo) {
|
|
|
328
338
|
* @param {number} [signaturesRequired] - number of signatures required, default value its 2
|
|
329
339
|
* @returns {address: string, hash160: string} - a multisig address
|
|
330
340
|
*/
|
|
331
|
-
function getSTXAddressFromPubKeys(pubKeys, addressVersion = transactions_1.AddressVersion.MainnetMultiSig, addressHashMode = transactions_1.AddressHashMode.
|
|
341
|
+
function getSTXAddressFromPubKeys(pubKeys, addressVersion = transactions_1.AddressVersion.MainnetMultiSig, addressHashMode = transactions_1.AddressHashMode.P2SH, signaturesRequired = 2) {
|
|
332
342
|
if (pubKeys.length === 0) {
|
|
333
343
|
throw new Error('Invalid number of public keys');
|
|
334
344
|
}
|
|
@@ -352,7 +362,7 @@ function getSTXAddressFromPubKeys(pubKeys, addressVersion = transactions_1.Addre
|
|
|
352
362
|
function signMessage(keyPair, data) {
|
|
353
363
|
const prv = keyPair.getKeys().prv;
|
|
354
364
|
if (prv) {
|
|
355
|
-
return (0, transactions_1.signWithKey)(
|
|
365
|
+
return (0, transactions_1.signWithKey)(prv, Buffer.from(data).toString('hex'));
|
|
356
366
|
}
|
|
357
367
|
else {
|
|
358
368
|
throw new sdk_core_1.SigningError('Missing private key');
|
|
@@ -380,8 +390,7 @@ function verifySignature(message, signature, publicKey) {
|
|
|
380
390
|
throw new sdk_core_1.UtilsError('Cannot verify empty messages');
|
|
381
391
|
// provided publicKey can be compressed or uncompressed
|
|
382
392
|
const keyEncoding = publicKey.length === 66 ? transactions_1.PubKeyEncoding.Compressed : transactions_1.PubKeyEncoding.Uncompressed;
|
|
383
|
-
const
|
|
384
|
-
const foundKey = (0, transactions_1.publicKeyFromSignature)(Buffer.from(message).toString('hex'), messageSig, keyEncoding);
|
|
393
|
+
const foundKey = (0, transactions_1.publicKeyFromSignatureVrs)(Buffer.from(message).toString('hex'), signature, keyEncoding);
|
|
385
394
|
return foundKey === publicKey;
|
|
386
395
|
}
|
|
387
396
|
/**
|
|
@@ -474,12 +483,12 @@ function stringifyCv(cv) {
|
|
|
474
483
|
case transactions_1.ClarityType.Tuple:
|
|
475
484
|
return {
|
|
476
485
|
type: cv.type,
|
|
477
|
-
data: _.mapValues(cv.
|
|
486
|
+
data: _.mapValues(cv.value, (value) => stringifyCv(value)),
|
|
478
487
|
};
|
|
479
488
|
case transactions_1.ClarityType.List:
|
|
480
489
|
return {
|
|
481
490
|
type: cv.type,
|
|
482
|
-
list: cv.
|
|
491
|
+
list: cv.value.map(stringifyCv),
|
|
483
492
|
};
|
|
484
493
|
default:
|
|
485
494
|
return cv;
|
|
@@ -495,17 +504,17 @@ function functionArgsToSendParams(args) {
|
|
|
495
504
|
if (args.length !== 1 || args[0].type !== transactions_1.ClarityType.List) {
|
|
496
505
|
throw new sdk_core_1.InvalidTransactionError("function args don't match send-many-memo type declaration");
|
|
497
506
|
}
|
|
498
|
-
return args[0].
|
|
507
|
+
return args[0].value.map((tuple) => {
|
|
499
508
|
if (tuple.type !== transactions_1.ClarityType.Tuple ||
|
|
500
|
-
tuple.
|
|
501
|
-
tuple.
|
|
502
|
-
tuple.
|
|
509
|
+
tuple.value.to?.type !== transactions_1.ClarityType.PrincipalStandard ||
|
|
510
|
+
tuple.value.ustx?.type !== transactions_1.ClarityType.UInt ||
|
|
511
|
+
tuple.value.memo?.type !== transactions_1.ClarityType.Buffer) {
|
|
503
512
|
throw new sdk_core_1.InvalidTransactionError("function args don't match send-many-memo type declaration");
|
|
504
513
|
}
|
|
505
514
|
return {
|
|
506
|
-
address: (0, transactions_1.cvToString)(tuple.
|
|
507
|
-
amount: (0, transactions_1.cvToValue)(tuple.
|
|
508
|
-
memo: tuple.
|
|
515
|
+
address: (0, transactions_1.cvToString)(tuple.value.to),
|
|
516
|
+
amount: (0, transactions_1.cvToValue)(tuple.value.ustx, true),
|
|
517
|
+
memo: Buffer.from(tuple.value.memo.value, 'hex').toString('ascii'),
|
|
509
518
|
};
|
|
510
519
|
});
|
|
511
520
|
}
|
|
@@ -524,7 +533,7 @@ function functionArgsToTokenTransferParams(args) {
|
|
|
524
533
|
recipient: (0, transactions_1.cvToString)(args[2]),
|
|
525
534
|
};
|
|
526
535
|
if (args.length === 4 && args[3].type === transactions_1.ClarityType.Buffer) {
|
|
527
|
-
tokenTransferParams['memo'] = args[3].
|
|
536
|
+
tokenTransferParams['memo'] = Buffer.from(args[3].value, 'hex').toString('ascii');
|
|
528
537
|
}
|
|
529
538
|
return tokenTransferParams;
|
|
530
539
|
}
|
|
@@ -562,7 +571,7 @@ function getEncodedPrincipal(principal) {
|
|
|
562
571
|
if (!isValidAddress(principal)) {
|
|
563
572
|
throw new sdk_core_1.UtilsError(`invalid Stacks address in principal: ${principal}`);
|
|
564
573
|
}
|
|
565
|
-
return (0, transactions_1.serializeCV)((0, transactions_1.standardPrincipalCV)(principal))
|
|
574
|
+
return (0, transactions_1.serializeCV)((0, transactions_1.standardPrincipalCV)(principal));
|
|
566
575
|
}
|
|
567
576
|
/**
|
|
568
577
|
* Returns a STX pub key from an xpub
|
|
@@ -608,7 +617,7 @@ function findTokenNameByContract(contractAddress, contractName) {
|
|
|
608
617
|
const tokenName = statics_1.coins
|
|
609
618
|
.filter((coin) => coin instanceof statics_1.Sip10Token && coin.assetId.includes(`${contractAddress}.${contractName}`))
|
|
610
619
|
.map((coin) => coin.name);
|
|
611
|
-
return tokenName ? tokenName[0] : undefined;
|
|
620
|
+
return tokenName.length > 0 ? tokenName[0] : undefined;
|
|
612
621
|
}
|
|
613
622
|
}
|
|
614
623
|
/**
|
|
@@ -623,7 +632,7 @@ function findContractTokenNameUsingContract(contractAddress, contractName) {
|
|
|
623
632
|
const sip10Token = statics_1.coins
|
|
624
633
|
.filter((coin) => coin instanceof statics_1.Sip10Token && coin.assetId.includes(`${contractAddress}.${contractName}`))
|
|
625
634
|
.map((coin) => coin);
|
|
626
|
-
return sip10Token ? sip10Token[0].assetId.split('::')[1] : undefined;
|
|
635
|
+
return sip10Token.length > 0 ? sip10Token[0].assetId.split('::')[1] : undefined;
|
|
627
636
|
}
|
|
628
637
|
}
|
|
629
638
|
/**
|
|
@@ -641,4 +650,4 @@ function getMemoIdAndBaseAddressFromAddress(address) {
|
|
|
641
650
|
memoId: memoId ? memoId : undefined,
|
|
642
651
|
};
|
|
643
652
|
}
|
|
644
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBcURBLHNFQVVDO0FBR0Qsc0VBS0M7QUFRRCwwREFFQztBQVFELDBDQUVDO0FBNEJELGdEQVVDO0FBUUQsc0NBR0M7QUFRRCx3Q0FFQztBQVlELG9EQU1DO0FBWUQsNENBc0JDO0FBYUQsOENBUUM7QUFrQkQsc0RBWUM7QUFRRCxrQ0FRQztBQVNELHdEQU1DO0FBUUQsa0VBUUM7QUFVRCw4QkFJQztBQVdELDREQW9CQztBQVNELGtDQU9DO0FBYUQsMENBY0M7QUFRRCw4Q0E2QkM7QUFRRCw0Q0FZQztBQVFELGtFQU9DO0FBUUQsa0NBMEJDO0FBUUQsNERBbUJDO0FBRUQsOEVBb0JDO0FBUUQsOENBR0M7QUFnQkQsa0RBV0M7QUFRRCwwQ0FFQztBQVFELHdDQUdDO0FBU0QsOENBS0M7QUFTRCwwREFPQztBQVNELGdGQU9DO0FBUUQsZ0ZBU0M7QUF6cEJELHlDQUEyQjtBQUMzQixnRUFBcUM7QUFDckMscURBQThEO0FBQzlELHVEQTJCOEI7QUFDOUIsdURBQW9EO0FBQ3BELDBDQUE0QjtBQUM1Qiw4Q0FPeUI7QUFFekIsd0JBQTRCO0FBQzVCLDRDQUF3RjtBQUN4RiwyQ0FNcUI7QUFFckIsZ0dBQWdHO0FBQ2hHLFNBQWdCLDZCQUE2QixDQUFDLEtBQWE7SUFDekQsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNyQyxJQUFJLFNBQVMsSUFBSSxDQUFDLElBQUksU0FBUyxLQUFLLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLFNBQVMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ2pHLE1BQU0sSUFB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R0FBRyxDQUFDLENBQUM7SUFDdEQsTUFBTSxNQUFNLEdBQUcsSUFBSSxlQUFlLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDaEQsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUVwQyxPQUFPO1FBQ0wsT0FBTyxFQUFFLFdBQVc7UUFDcEIsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxTQUFTO0tBQ3BDLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgdXJsIGZyb20gJ3VybCc7XG5pbXBvcnQgQmlnTnVtYmVyIGZyb20gJ2JpZ251bWJlci5qcyc7XG5pbXBvcnQgeyBidWZmZXJUb0hleCwgc3RyaXBIZXhQcmVmaXggfSBmcm9tICdldGhlcmV1bWpzLXV0aWwnO1xuaW1wb3J0IHtcbiAgYWRkcmVzc0Zyb21QdWJsaWNLZXlzLFxuICBhZGRyZXNzRnJvbVZlcnNpb25IYXNoLFxuICBBZGRyZXNzSGFzaE1vZGUsXG4gIGFkZHJlc3NIYXNoTW9kZVRvVmVyc2lvbixcbiAgYWRkcmVzc1RvU3RyaW5nLFxuICBBZGRyZXNzVmVyc2lvbixcbiAgQnVmZmVyUmVhZGVyLFxuICBDbGFyaXR5VHlwZSxcbiAgQ2xhcml0eVZhbHVlLFxuICBjb250cmFjdFByaW5jaXBhbENWLFxuICBjcmVhdGVBZGRyZXNzLFxuICBjcmVhdGVNZW1vU3RyaW5nLFxuICBjcmVhdGVNZXNzYWdlU2lnbmF0dXJlLFxuICBjcmVhdGVTdGFja3NQcml2YXRlS2V5LFxuICBjcmVhdGVTdGFja3NQdWJsaWNLZXksXG4gIGN2VG9TdHJpbmcsXG4gIGN2VG9WYWx1ZSxcbiAgZGVzZXJpYWxpemVUcmFuc2FjdGlvbixcbiAgUHViS2V5RW5jb2RpbmcsXG4gIHB1YmxpY0tleUZyb21TaWduYXR1cmUsXG4gIHNlcmlhbGl6ZUNWLFxuICBzaWduV2l0aEtleSxcbiAgU3RhY2tzVHJhbnNhY3Rpb24sXG4gIHN0YW5kYXJkUHJpbmNpcGFsQ1YsXG4gIFRyYW5zYWN0aW9uVmVyc2lvbixcbiAgdmFsaWRhdGVTdGFja3NBZGRyZXNzLFxufSBmcm9tICdAc3RhY2tzL3RyYW5zYWN0aW9ucyc7XG5pbXBvcnQgeyBzZWNwMjU2azEgfSBmcm9tICdAbm9ibGUvY3VydmVzL3NlY3AyNTZrMSc7XG5pbXBvcnQgKiBhcyBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQge1xuICBJbnZhbGlkUGFyYW1ldGVyVmFsdWVFcnJvcixcbiAgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IsXG4gIGlzVmFsaWRYcHJ2LFxuICBpc1ZhbGlkWHB1YixcbiAgU2lnbmluZ0Vycm9yLFxuICBVdGlsc0Vycm9yLFxufSBmcm9tICdAYml0Z28vc2RrLWNvcmUnO1xuaW1wb3J0IHsgQWRkcmVzc0RldGFpbHMsIFNlbmRQYXJhbXMsIFRva2VuVHJhbnNmZXJQYXJhbXMgfSBmcm9tICcuL2lmYWNlJztcbmltcG9ydCB7IEtleVBhaXIgfSBmcm9tICcuJztcbmltcG9ydCB7IGNvaW5zLCBTaXAxMFRva2VuLCBTdGFja3NOZXR3b3JrIGFzIEJpdGdvU3RhY2tzTmV0d29yayB9IGZyb20gJ0BiaXRnby9zdGF0aWNzJztcbmltcG9ydCB7XG4gIENPTlRSQUNUX05BTUVfU0VORE1BTlksXG4gIENPTlRSQUNUX05BTUVfU1RBS0lORyxcbiAgQ09OVFJBQ1RfTkFNRV9QT1g1LFxuICBWQUxJRF9DT05UUkFDVF9GVU5DVElPTl9OQU1FUyxcbiAgVkFMSURfUE9YNV9DT05UUkFDVF9GVU5DVElPTl9OQU1FUyxcbn0gZnJvbSAnLi9jb25zdGFudHMnO1xuXG4vKiogQ29udmVydCBhIGNvbnRyYWN0IHByaW5jaXBhbCBzdHJpbmcgdG8gYSBDbGFyaXR5IHZhbHVlIHdpdGggbm9ybWFsaXplZCB2YWxpZGF0aW9uIGVycm9ycy4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb250cmFjdFByaW5jaXBhbENWRnJvbVN0cmluZyh2YWx1ZTogc3RyaW5nKTogQ2xhcml0eVZhbHVlIHtcbiAgY29uc3Qgc2VwYXJhdG9yID0gdmFsdWUuaW5kZXhPZignLicpO1xuICBpZiAoc2VwYXJhdG9yIDw9IDAgfHwgc2VwYXJhdG9yID09PSB2YWx1ZS5sZW5ndGggLSAxIHx8IHZhbHVlLmluZGV4T2YoJy4nLCBzZXBhcmF0b3IgKyAxKSAhPT0gLTEpIHtcbiAgICB0aHJvdyBuZXcgSW52YWxpZFBhcmFtZXRlclZhbHVlRXJyb3IoYCR7dmFsdWV9IG11c3QgaGF2ZSBhZGRyZXNzLmNvbnRyYWN0LW5hbWUgZm9ybWF0YCk7XG4gIH1cbiAgY29uc3QgYWRkcmVzcyA9IHZhbHVlLnNsaWNlKDAsIHNlcGFyYXRvcik7XG4gIGlmICghaXNWYWxpZEFkZHJlc3MoYWRkcmVzcykpIHtcbiAgICB0aHJvdyBuZXcgSW52YWxpZFBhcmFtZXRlclZhbHVlRXJyb3IoYCR7dmFsdWV9IG11c3QgY29udGFpbiBhIHZhbGlkIGFkZHJlc3NgKTtcbiAgfVxuICByZXR1cm4gY29udHJhY3RQcmluY2lwYWxDVihhZGRyZXNzLCB2YWx1ZS5zbGljZShzZXBhcmF0b3IgKyAxKSk7XG59XG5cbi8qKiBDb252ZXJ0IGEgc3RhbmRhcmQgcHJpbmNpcGFsIHN0cmluZyB0byBhIENsYXJpdHkgdmFsdWUgd2l0aCBhIG5vcm1hbGl6ZWQgdmFsaWRhdGlvbiBlcnJvci4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdGFuZGFyZFByaW5jaXBhbENWRnJvbVN0cmluZyh2YWx1ZTogc3RyaW5nKTogQ2xhcml0eVZhbHVlIHtcbiAgaWYgKCFpc1ZhbGlkQWRkcmVzcyh2YWx1ZSkpIHtcbiAgICB0aHJvdyBuZXcgSW52YWxpZFBhcmFtZXRlclZhbHVlRXJyb3IoYCR7dmFsdWV9IG11c3QgYmUgYSB2YWxpZCBzdGFuZGFyZCBwcmluY2lwYWxgKTtcbiAgfVxuICByZXR1cm4gc3RhbmRhcmRQcmluY2lwYWxDVih2YWx1ZSk7XG59XG5cbi8qKlxuICogRW5jb2RlcyBhIGJ1ZmZlciBhcyBhIFwiMHhcIiBwcmVmaXhlZCBsb3dlci1jYXNlIGhleCBzdHJpbmcuXG4gKlxuICogQHBhcmFtIHtCdWZmZXJ9IGJ1ZmYgLSBhIGJ1ZmZlciB3aXRoIGEgaGV4YWRlY2ltYWwgc3RyaW5nXG4gKiBAcmV0dXJucyB7c3RyaW5nfSAtIHRoZSBoZXhhZGVjaW1hbCBzdHJpbmcgcHJlZml4ZWQgd2l0aCBcIjB4XCJcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJ1ZmZlclRvSGV4UHJlZml4U3RyaW5nKGJ1ZmY6IEJ1ZmZlcik6IHN0cmluZyB7XG4gIHJldHVybiBidWZmZXJUb0hleChidWZmKTtcbn1cblxuLyoqXG4gKiBSZW1vdmUgdGhlIFwiMHhcIiBwcmVmaXggZnJvbSB0aGUgZ2l2ZW4gc3RyaW5nLCBpZiBwcmVzZW50LlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBoZXggLSBhIGhleGFkZWNpbWFsIHN0cmluZ1xuICogQHJldHVybnMge3N0cmluZ30gLSB0aGUgaGV4YWRlY2ltYWwgc3RyaW5nIHdpdGhvdXQgYSBsZWFkaW5nIFwiMHhcIlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlSGV4UHJlZml4KGhleDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHN0cmlwSGV4UHJlZml4KGhleCk7XG59XG5cbi8qKlxuICogR2V0IHN0YWNrcyBhZGRyZXNzIGZyb20gcHVibGljIGtleSBoYXNoXG4gKlxuICogQHBhcmFtIHtCdWZmZXJ9IHB1YmxpY0tleUhhc2ggLSBoYXNoIG9mIHB1YmxpYyBrZXlcbiAqIEBwYXJhbSB7QWRkcmVzc0hhc2hNb2RlfSBoYXNoTW9kZSAtIGhhc2ggbW9kZVxuICogQHBhcmFtIHtUcmFuc2FjdGlvblZlcnNpb259IHRyYW5zYWN0aW9uVmVyc2lvbiAtIHR4IHZlcnNpb25cbiAqIEByZXR1cm5zIHtzdHJpbmd9IHN0YWNrcyBhZGRyZXNzXG4gKi9cbmZ1bmN0aW9uIGdldEFkZHJlc3NGcm9tUHVibGljS2V5SGFzaChcbiAgcHVibGljS2V5SGFzaDogQnVmZmVyLFxuICBoYXNoTW9kZTogQWRkcmVzc0hhc2hNb2RlLFxuICB0cmFuc2FjdGlvblZlcnNpb246IFRyYW5zYWN0aW9uVmVyc2lvblxuKTogc3RyaW5nIHtcbiAgaWYgKHB1YmxpY0tleUhhc2gubGVuZ3RoICE9PSAyMCkge1xuICAgIHRocm93IG5ldyBFcnJvcignZXhwZWN0ZWQgMjAtYnl0ZSBwdWJrZXloYXNoJyk7XG4gIH1cblxuICBjb25zdCBhZGRyVmVyID0gYWRkcmVzc0hhc2hNb2RlVG9WZXJzaW9uKGhhc2hNb2RlLCB0cmFuc2FjdGlvblZlcnNpb24pO1xuICBjb25zdCBhZGRyID0gYWRkcmVzc0Zyb21WZXJzaW9uSGFzaChhZGRyVmVyLCBwdWJsaWNLZXlIYXNoLnRvU3RyaW5nKCdoZXgnKSk7XG4gIGNvbnN0IGFkZHJTdHJpbmcgPSBhZGRyZXNzVG9TdHJpbmcoYWRkcik7XG4gIHJldHVybiBhZGRyU3RyaW5nO1xufVxuXG4vKipcbiAqIEBwYXJhbSB0eFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0VHhTZW5kZXJBZGRyZXNzKHR4OiBTdGFja3NUcmFuc2FjdGlvbik6IHN0cmluZyB7XG4gIGlmICh0eC5hdXRoLnNwZW5kaW5nQ29uZGl0aW9uICE9PSBudWxsICYmIHR4LmF1dGguc3BlbmRpbmdDb25kaXRpb24gIT09IHVuZGVmaW5lZCkge1xuICAgIGNvbnN0IHNwZW5kaW5nQ29uZGl0aW9uID0gdHguYXV0aC5zcGVuZGluZ0NvbmRpdGlvbjtcbiAgICBjb25zdCB0eFNlbmRlciA9IGdldEFkZHJlc3NGcm9tUHVibGljS2V5SGFzaChcbiAgICAgIEJ1ZmZlci5mcm9tKHNwZW5kaW5nQ29uZGl0aW9uLnNpZ25lciwgJ2hleCcpLFxuICAgICAgc3BlbmRpbmdDb25kaXRpb24uaGFzaE1vZGUgYXMgbnVtYmVyLFxuICAgICAgdHgudmVyc2lvblxuICAgICk7XG4gICAgcmV0dXJuIHR4U2VuZGVyO1xuICB9IGVsc2UgdGhyb3cgbmV3IEVycm9yKCdzcGVuZGluZ0NvbmRpdGlvbiBzaG91bGQgbm90IGJlIG51bGwnKTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHdoZXRoZXIgb3Igbm90IHRoZSBzdHJpbmcgaXMgYSB2YWxpZCBhbW91bnQgbnVtYmVyXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGFtb3VudCAtIHRoZSBzdHJpbmcgdG8gdmFsaWRhdGVcbiAqIEByZXR1cm5zIHtib29sZWFufSAtIHRoZSB2YWxpZGF0aW9uIHJlc3VsdFxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNWYWxpZEFtb3VudChhbW91bnQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICBjb25zdCBiaWdOdW1iZXJBbW91bnQgPSBuZXcgQmlnTnVtYmVyKGFtb3VudCk7XG4gIHJldHVybiBiaWdOdW1iZXJBbW91bnQuaXNJbnRlZ2VyKCkgJiYgYmlnTnVtYmVyQW1vdW50LmlzR3JlYXRlclRoYW5PckVxdWFsVG8oMCk7XG59XG5cbi8qKlxuICogUmV0dXJucyB3aGV0aGVyIG9yIG5vdCB0aGUgc3RyaW5nIGlzIGEgdmFsaWQgcHJvdG9jb2wgYWRkcmVzc1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBhZGRyZXNzIC0gdGhlIGFkZHJlc3MgdG8gYmUgdmFsaWRhdGVkXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gLSB0aGUgdmFsaWRhdGlvbiByZXN1bHRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzVmFsaWRBZGRyZXNzKGFkZHJlc3M6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gdmFsaWRhdGVTdGFja3NBZGRyZXNzKGFkZHJlc3MpO1xufVxuXG4vKipcbiAqIFJldHVybnMgd2hldGhlciBvciBub3QgdGhlIHN0cmluZyBpcyBhIHZhbGlkIHByb3RvY29sIHRyYW5zYWN0aW9uIGlkIG9yIG5vdC5cbiAqXG4gKiBBIHZhbGlkIHRyYW5zYWN0aW9uIGlkIGlzIGEgU0hBLTUxMi8yNTYgaGFzaCBvZiBhIHNlcmlhbGl6ZWQgdHJhbnNhY3Rpb247IHNlZVxuICogdGhlIHR4aWRGcm9tRGF0YSBmdW5jdGlvbiBpbiBAc3RhY2tzL3RyYW5zYWN0aW9uOlxuICogaHR0cHM6Ly9naXRodWIuY29tL2Jsb2Nrc3RhY2svc3RhY2tzLmpzL2Jsb2IvbWFzdGVyL3BhY2thZ2VzL3RyYW5zYWN0aW9ucy9zcmMvdXRpbHMudHMjTDk3XG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHR4SWQgLSB0aGUgdHJhbnNhY3Rpb24gaWQgdG8gYmUgdmFsaWRhdGVkXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gLSB0aGUgdmFsaWRhdGlvbiByZXN1bHRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzVmFsaWRUcmFuc2FjdGlvbklkKHR4SWQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICBpZiAodHhJZC5sZW5ndGggIT09IDY0ICYmIHR4SWQubGVuZ3RoICE9PSA2NikgcmV0dXJuIGZhbHNlO1xuICBjb25zdCBub1ByZWZpeCA9IHJlbW92ZUhleFByZWZpeCh0eElkKTtcbiAgaWYgKG5vUHJlZml4Lmxlbmd0aCAhPT0gNjQpIHJldHVybiBmYWxzZTtcblxuICByZXR1cm4gYWxsSGV4Q2hhcnMobm9QcmVmaXgpO1xufVxuXG4vKipcbiAqIFJldHVybnMgd2hldGhlciBvciBub3QgdGhlIHN0cmluZyBpcyBhIHZhbGlkIHByb3RvY29sIHB1YmxpYyBrZXkgb3JcbiAqIGV4dGVuZGVkIHB1YmxpYyBrZXkuXG4gKlxuICogVGhlIGtleSBmb3JtYXQgaXMgZG9jdW1lbnRlZCBhdFxuICogaHR0cHM6Ly9naXRodWIuY29tL3N0YWNrc2dvdi9zaXBzL2Jsb2IvbWFpbi9zaXBzL3NpcC0wMDUvc2lwLTAwNS1ibG9ja3MtYW5kLXRyYW5zYWN0aW9ucy5tZCN0cmFuc2FjdGlvbi1hdXRob3JpemF0aW9uXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHB1YiAtIHRoZSAgcHVibGljIGtleSB0byBiZSB2YWxpZGF0ZWRcbiAqIEByZXR1cm5zIHtib29sZWFufSAtIHRoZSB2YWxpZGF0aW9uIHJlc3VsdFxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNWYWxpZFB1YmxpY0tleShwdWI6IHN0cmluZyk6IGJvb2xlYW4ge1xuICBpZiAoaXNWYWxpZFhwdWIocHViKSkgcmV0dXJuIHRydWU7XG5cbiAgaWYgKHB1Yi5sZW5ndGggIT09IDY2ICYmIHB1Yi5sZW5ndGggIT09IDEzMCkgcmV0dXJuIGZhbHNlO1xuXG4gIGNvbnN0IGZpcnN0Qnl0ZSA9IHB1Yi5zbGljZSgwLCAyKTtcblxuICAvLyB1bmNvbXByZXNzZWQgcHVibGljIGtleVxuICBpZiAocHViLmxlbmd0aCA9PT0gMTMwICYmIGZpcnN0Qnl0ZSAhPT0gJzA0JykgcmV0dXJuIGZhbHNlO1xuXG4gIC8vIGNvbXByZXNzZWQgcHVibGljIGtleVxuICBpZiAocHViLmxlbmd0aCA9PT0gNjYgJiYgZmlyc3RCeXRlICE9PSAnMDInICYmIGZpcnN0Qnl0ZSAhPT0gJzAzJykgcmV0dXJuIGZhbHNlO1xuXG4gIGlmICghYWxsSGV4Q2hhcnMocHViKSkgcmV0dXJuIGZhbHNlO1xuXG4gIC8vIHZhbGlkYXRlIHRoZSBwdWJsaWMga2V5XG4gIHRyeSB7XG4gICAgc2VjcDI1NmsxLlByb2plY3RpdmVQb2ludC5mcm9tSGV4KHB1Yik7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuLyoqXG4gKiBSZXR1cm5zIHdoZXRoZXIgb3Igbm90IHRoZSBzdHJpbmcgaXMgYSB2YWxpZCBwcm90b2NvbCBwcml2YXRlIGtleSwgb3IgZXh0ZW5kZWRcbiAqIHByaXZhdGUga2V5LlxuICpcbiAqIFRoZSBwcm90b2NvbCBrZXkgZm9ybWF0IGlzIGRlc2NyaWJlZCBpbiB0aGUgQHN0YWNrcy90cmFuc2FjdGlvbnMgbnBtIHBhY2thZ2UsIGluIHRoZVxuICogY3JlYXRlU3RhY2tzUHJpdmF0ZUtleSBmdW5jdGlvbjpcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9ibG9ja3N0YWNrL3N0YWNrcy5qcy9ibG9iL21hc3Rlci9wYWNrYWdlcy90cmFuc2FjdGlvbnMvc3JjL2tleXMudHMjTDEyNVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBwcnYgLSB0aGUgcHJpdmF0ZSBrZXkgKG9yIGV4dGVuZGVkIHByaXZhdGUga2V5KSB0byBiZSB2YWxpZGF0ZWRcbiAqIEByZXR1cm5zIHtib29sZWFufSAtIHRoZSB2YWxpZGF0aW9uIHJlc3VsdFxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNWYWxpZFByaXZhdGVLZXkocHJ2OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgaWYgKGlzVmFsaWRYcHJ2KHBydikpIHJldHVybiB0cnVlO1xuXG4gIGlmIChwcnYubGVuZ3RoICE9PSA2NCAmJiBwcnYubGVuZ3RoICE9PSA2NikgcmV0dXJuIGZhbHNlO1xuXG4gIGlmIChwcnYubGVuZ3RoID09PSA2NiAmJiBwcnYuc2xpY2UoNjQpICE9PSAnMDEnKSByZXR1cm4gZmFsc2U7XG5cbiAgcmV0dXJuIGFsbEhleENoYXJzKHBydik7XG59XG5cbi8qKlxuICogUmV0dXJucyB3aGV0aGVyIG9yIG5vdCB0aGUgc3RyaW5nIGlzIGEgY29tcG9zZWQgb2YgaGV4IGNoYXJzIG9ubHlcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbWF5YmUgLSB0aGUgIHN0cmluZyB0byBiZSB2YWxpZGF0ZWRcbiAqIEByZXR1cm5zIHtib29sZWFufSAtIHRoZSB2YWxpZGF0aW9uIHJlc3VsdFxuICovXG5mdW5jdGlvbiBhbGxIZXhDaGFycyhtYXliZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHJldHVybiAvXihbMC05YS1mXSkrJC9pLnRlc3QobWF5YmUpO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiByYXcgdHJhbnNhY3Rpb24gY2FuIGJlIGRlc2VyaWFsaXplZFxuICpcbiAqIEBwYXJhbSB7dW5rbm93bn0gcmF3VHJhbnNhY3Rpb24gLSB0cmFuc2FjdGlvbiBpbiByYXcgaGV4IGZvcm1hdFxuICogQHJldHVybnMge2Jvb2xlYW59IC0gdGhlIHZhbGlkYXRpb24gcmVzdWx0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1ZhbGlkUmF3VHJhbnNhY3Rpb24ocmF3VHJhbnNhY3Rpb246IHVua25vd24pOiBib29sZWFuIHtcbiAgdHJ5IHtcbiAgICBpZiAodHlwZW9mIHJhd1RyYW5zYWN0aW9uID09PSAnc3RyaW5nJykge1xuICAgICAgZGVzZXJpYWxpemVUcmFuc2FjdGlvbihCdWZmZXJSZWFkZXIuZnJvbUJ1ZmZlcihCdWZmZXIuZnJvbShyZW1vdmVIZXhQcmVmaXgocmF3VHJhbnNhY3Rpb24pLCAnaGV4JykpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG4vKipcbiAqIFJldHVybnMgd2hldGhlciBvciBub3QgdGhlIG1lbW8gc3RyaW5nIGlzIHZhbGlkXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG1lbW8gLSB0aGUgc3RyaW5nIHRvIGJlIHZhbGlkYXRlZFxuICogQHJldHVybnMge2Jvb2xlYW59IC0gdGhlIHZhbGlkYXRpb24gcmVzdWx0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1ZhbGlkTWVtbyhtZW1vOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgdHJ5IHtcbiAgICBjcmVhdGVNZW1vU3RyaW5nKG1lbW8pO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbi8qKlxuICogQ2hlY2tzIGZvciB2YWxpZCBjb250cmFjdCBhZGRyZXNzXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGFkZHIgLSBjb250cmFjdCBkZXBsb3llciBhZGRyZXNzXG4gKiBAcGFyYW0ge0JpdGdvU3RhY2tzTmV0d29ya30gbmV0d29yayAtIG5ldHdvcmsgb2JqZWN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gLSB0aGUgdmFsaWRhdGlvbiByZXN1bHRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzVmFsaWRDb250cmFjdEFkZHJlc3MoYWRkcjogc3RyaW5nLCBuZXR3b3JrOiBCaXRnb1N0YWNrc05ldHdvcmspOiBib29sZWFuIHtcbiAgcmV0dXJuIChcbiAgICBhZGRyID09PSBuZXR3b3JrLnN0YWtpbmdDb250cmFjdEFkZHJlc3MgfHxcbiAgICBhZGRyID09PSBuZXR3b3JrLnNlbmRtYW55bWVtb0NvbnRyYWN0QWRkcmVzcyB8fFxuICAgIGFkZHIgPT09IG5ldHdvcmsuc2J0Y1dpdGhkcmF3YWxDb250cmFjdEFkZHJlc3NcbiAgKTtcbn1cblxuLyoqXG4gKiBDaGVjayBpZiB0aGUgbmFtZSBpcyBvbmUgb2YgdmFsaWQgY29udHJhY3QgbmFtZXNcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIGZ1bmN0aW9uIG5hbWVcbiAqIEByZXR1cm5zIHtib29sZWFufSAtIHZhbGlkYXRpb24gcmVzdWx0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1ZhbGlkQ29udHJhY3RGdW5jdGlvbk5hbWUobmFtZTogc3RyaW5nLCBjb250cmFjdE5hbWU/OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgaWYgKGNvbnRyYWN0TmFtZSA9PT0gQ09OVFJBQ1RfTkFNRV9QT1g1KSB7XG4gICAgcmV0dXJuIFZBTElEX1BPWDVfQ09OVFJBQ1RfRlVOQ1RJT05fTkFNRVMuaW5jbHVkZXMobmFtZSk7XG4gIH1cbiAgaWYgKGNvbnRyYWN0TmFtZSA9PT0gQ09OVFJBQ1RfTkFNRV9TVEFLSU5HIHx8IGNvbnRyYWN0TmFtZSA9PT0gQ09OVFJBQ1RfTkFNRV9TRU5ETUFOWSkge1xuICAgIHJldHVybiBWQUxJRF9DT05UUkFDVF9GVU5DVElPTl9OQU1FUy5pbmNsdWRlcyhuYW1lKSAmJiAhVkFMSURfUE9YNV9DT05UUkFDVF9GVU5DVElPTl9OQU1FUy5pbmNsdWRlcyhuYW1lKTtcbiAgfVxuICByZXR1cm4gVkFMSURfQ09OVFJBQ1RfRlVOQ1RJT05fTkFNRVMuaW5jbHVkZXMobmFtZSk7XG59XG5cbi8qKlxuICogVW5wYWRzIGEgbWVtbyBzdHJpbmcsIHNvIGl0IHJlbW92ZXMgbnVsbHMuXG4gKlxuICogVXNlZnVsIHdoZW4gbWVtbyBpcyBmaWxsIHVwIHRoZSBsZW5ndGguIFJlc3VsdCBpcyBiZWNvbWVzIHJlYWRhYmxlLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBtZW1vIC0gdGhlIHN0cmluZyB0byBiZSB2YWxpZGF0ZWRcbiAqIEByZXR1cm5zIHtib29sZWFufSAtIHRoZSB2YWxpZGF0aW9uIHJlc3VsdFxuICovXG5leHBvcnQgZnVuY3Rpb24gdW5wYWRNZW1vKG1lbW86IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IGVuZCA9IG1lbW8uaW5kZXhPZignXFx1MDAwMCcpO1xuICBpZiAoZW5kIDwgMCkgcmV0dXJuIG1lbW87XG4gIHJldHVybiBtZW1vLnNsaWNlKDAsIGVuZCk7XG59XG5cbi8qKlxuICogR2VuZXJhdGUgYSBtdWx0aXNpZyBhZGRyZXNzIGZyb20gbXVsdGlwbGUgU1RYIHB1YmxpYyBrZXlzXG4gKlxuICogQHBhcmFtIHtzdHJpbmdbXX0gcHViS2V5cyAtIGxpc3Qgb2YgcHVibGljIGtleXMgYXMgc3RyaW5nc1xuICogQHBhcmFtIHtBZGRyZXNzVmVyc2lvbn0gYWRkcmVzc1ZlcnNpb24gLSBNYWlubmV0TXVsdGlTaWcsIFRlc3RuZXRNdWx0aVNpZ1xuICogQHBhcmFtIHtBZGRyZXNzSGFzaE1vZGV9IGFkZHJlc3NIYXNoTW9kZSAtIFNlcmlhbGl6ZVAyU0hcbiAqIEBwYXJhbSB7bnVtYmVyfSBbc2lnbmF0dXJlc1JlcXVpcmVkXSAtIG51bWJlciBvZiBzaWduYXR1cmVzIHJlcXVpcmVkLCBkZWZhdWx0IHZhbHVlIGl0cyAyXG4gKiBAcmV0dXJucyB7YWRkcmVzczogc3RyaW5nLCBoYXNoMTYwOiBzdHJpbmd9IC0gYSBtdWx0aXNpZyBhZGRyZXNzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTVFhBZGRyZXNzRnJvbVB1YktleXMoXG4gIHB1YktleXM6IHN0cmluZ1tdLFxuICBhZGRyZXNzVmVyc2lvbjogQWRkcmVzc1ZlcnNpb24gPSBBZGRyZXNzVmVyc2lvbi5NYWlubmV0TXVsdGlTaWcsXG4gIGFkZHJlc3NIYXNoTW9kZTogQWRkcmVzc0hhc2hNb2RlID0gQWRkcmVzc0hhc2hNb2RlLlNlcmlhbGl6ZVAyU0gsXG4gIHNpZ25hdHVyZXNSZXF1aXJlZCA9IDJcbik6IHsgYWRkcmVzczogc3RyaW5nOyBoYXNoMTYwOiBzdHJpbmcgfSB7XG4gIGlmIChwdWJLZXlzLmxlbmd0aCA9PT0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBudW1iZXIgb2YgcHVibGljIGtleXMnKTtcbiAgfVxuICBpZiAoIXB1YktleXMuZXZlcnkoaXNWYWxpZFB1YmxpY0tleSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgcHVibGljIGtleXMnKTtcbiAgfVxuICBpZiAoc2lnbmF0dXJlc1JlcXVpcmVkID4gcHViS2V5cy5sZW5ndGgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ051bWJlciBvZiBzaWduYXR1cmVzIHJlcXVpcmVkIG11c3QgYmUgbG93ZXIgb3IgZXF1YWwgdG8gdGhlIG51bWJlciBvZiBQdWJsaWMgS2V5cycpO1xuICB9XG5cbiAgY29uc3Qgc3R4UHViS2V5cyA9IHB1YktleXMubWFwKGNyZWF0ZVN0YWNrc1B1YmxpY0tleSk7XG4gIGNvbnN0IGFkZHJlc3MgPSBhZGRyZXNzRnJvbVB1YmxpY0tleXMoYWRkcmVzc1ZlcnNpb24sIGFkZHJlc3NIYXNoTW9kZSwgc2lnbmF0dXJlc1JlcXVpcmVkLCBzdHhQdWJLZXlzKTtcblxuICByZXR1cm4geyBhZGRyZXNzOiBhZGRyZXNzVG9TdHJpbmcoYWRkcmVzcyksIGhhc2gxNjA6IGFkZHJlc3MuaGFzaDE2MCB9O1xufVxuXG4vKipcbiAqIHNpZ25zIGEgc3RyaW5nIG1lc3NhZ2VcbiAqXG4gKiBAcGFyYW0ga2V5UGFpclxuICogQHBhcmFtIGRhdGEgIC0gbWVzc2FnZSB0byBiZSBzaWduZWRcbiAqIEByZXR1cm5zIHNpZ25lZCBtZXNzYWdlIHN0cmluZ1xuICovXG5leHBvcnQgZnVuY3Rpb24gc2lnbk1lc3NhZ2Uoa2V5UGFpcjogS2V5UGFpciwgZGF0YTogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgcHJ2ID0ga2V5UGFpci5nZXRLZXlzKCkucHJ2O1xuICBpZiAocHJ2KSB7XG4gICAgcmV0dXJuIHNpZ25XaXRoS2V5KGNyZWF0ZVN0YWNrc1ByaXZhdGVLZXkocHJ2KSwgQnVmZmVyLmZyb20oZGF0YSkudG9TdHJpbmcoJ2hleCcpKS5kYXRhO1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBTaWduaW5nRXJyb3IoJ01pc3NpbmcgcHJpdmF0ZSBrZXknKTtcbiAgfVxufVxuXG4vKipcbiAqIFZlcmlmaWVzIGEgc2lnbmVkIG1lc3NhZ2VcbiAqXG4gKiBUaGUgc2lnbmF0dXJlIG11c3QgYmUgMTMwIGJ5dGVzIGxvbmcgLS0gc2VlIFJFQ09WRVJBQkxFX0VDRFNBX1NJR19MRU5HVEhfQllURVNcbiAqIGluIEBzdGFja3MvdHJhbnNhY3Rpb25zL3NyYy9jb25zdGFudHMudHNcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZSAtIG1lc3NhZ2UgdG8gdmVyaWZ5IHRoZSBzaWduYXR1cmVcbiAqIEBwYXJhbSB7c3RyaW5nfSBzaWduYXR1cmUgLSBzaWduYXR1cmUgdG8gdmVyaWZ5XG4gKiBAcGFyYW0ge3N0cmluZ30gcHVibGljS2V5IC0gcHVibGljIGtleSBhcyBoZXggc3RyaW5nIHVzZWQgdG8gdmVyaWZ5IHRoZSBzaWduYXR1cmVcbiAqIEByZXR1cm5zIHtib29sZWFufSAtIHZlcmlmaWNhdGlvbiByZXN1bHRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZlcmlmeVNpZ25hdHVyZShtZXNzYWdlOiBzdHJpbmcsIHNpZ25hdHVyZTogc3RyaW5nLCBwdWJsaWNLZXk6IHN0cmluZyk6IGJvb2xlYW4ge1xuICBpZiAoIWlzVmFsaWRQdWJsaWNLZXkocHVibGljS2V5KSkgcmV0dXJuIGZhbHNlO1xuICBpZiAoc2lnbmF0dXJlLmxlbmd0aCAhPT0gMTMwKSByZXR1cm4gZmFsc2U7XG4gIGlmICghYWxsSGV4Q2hhcnMoc2lnbmF0dXJlKSkgdGhyb3cgbmV3IFV0aWxzRXJyb3IoJ0ludmFsaWQgc2lnbmF0dXJlIGlucHV0IHRvIHZlcmlmeVNpZ25hdHVyZScpO1xuICBpZiAoXy5pc0VtcHR5KG1lc3NhZ2UpKSB0aHJvdyBuZXcgVXRpbHNFcnJvcignQ2Fubm90IHZlcmlmeSBlbXB0eSBtZXNzYWdlcycpO1xuXG4gIC8vIHByb3ZpZGVkIHB1YmxpY0tleSBjYW4gYmUgY29tcHJlc3NlZCBvciB1bmNvbXByZXNzZWRcbiAgY29uc3Qga2V5RW5jb2RpbmcgPSBwdWJsaWNLZXkubGVuZ3RoID09PSA2NiA/IFB1YktleUVuY29kaW5nLkNvbXByZXNzZWQgOiBQdWJLZXlFbmNvZGluZy5VbmNvbXByZXNzZWQ7XG5cbiAgY29uc3QgbWVzc2FnZVNpZyA9IGNyZWF0ZU1lc3NhZ2VTaWduYXR1cmUoc2lnbmF0dXJlKTtcblxuICBjb25zdCBmb3VuZEtleSA9IHB1YmxpY0tleUZyb21TaWduYXR1cmUoQnVmZmVyLmZyb20obWVzc2FnZSkudG9TdHJpbmcoJ2hleCcpLCBtZXNzYWdlU2lnLCBrZXlFbmNvZGluZyk7XG5cbiAgcmV0dXJuIGZvdW5kS2V5ID09PSBwdWJsaWNLZXk7XG59XG5cbi8qKlxuICogUHJvY2VzcyBhZGRyZXNzIGludG8gYWRkcmVzcyBhbmQgbWVtbyBpZFxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBhZGRyZXNzIHRoZSBhZGRyZXNzIHRvIHByb2Nlc3NcbiAqIEByZXR1cm5zIHtPYmplY3R9IG9iamVjdCBjb250YWluaW5nIGFkZHJlc3MgYW5kIG1lbW8gaWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEFkZHJlc3NEZXRhaWxzKGFkZHJlc3M6IHN0cmluZyk6IEFkZHJlc3NEZXRhaWxzIHtcbiAgY29uc3QgYWRkcmVzc0RldGFpbHMgPSB1cmwucGFyc2UoYWRkcmVzcyk7XG4gIGNvbnN0IHF1ZXJ5RGV0YWlscyA9IGFkZHJlc3NEZXRhaWxzLnF1ZXJ5ID8gbmV3IFVSTFNlYXJjaFBhcmFtcyhhZGRyZXNzRGV0YWlscy5xdWVyeSkgOiB1bmRlZmluZWQ7XG4gIGNvbnN0IGJhc2VBZGRyZXNzID0gYWRkcmVzc0RldGFpbHMucGF0aG5hbWUgYXMgc3RyaW5nO1xuICBpZiAoIWlzVmFsaWRBZGRyZXNzKGJhc2VBZGRyZXNzKSkge1xuICAgIHRocm93IG5ldyBVdGlsc0Vycm9yKGBpbnZhbGlkIGFkZHJlc3M6ICR7YWRkcmVzc31gKTtcbiAgfVxuICAvLyBhZGRyZXNzIGRvZXNuJ3QgaGF2ZSBhIG1lbW8gaWRcbiAgaWYgKGJhc2VBZGRyZXNzID09PSBhZGRyZXNzKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGFkZHJlc3M6IGFkZHJlc3MsXG4gICAgICBtZW1vSWQ6IHVuZGVmaW5lZCxcbiAgICB9O1xuICB9XG5cbiAgaWYgKCFxdWVyeURldGFpbHMgfHwgXy5pc05pbChxdWVyeURldGFpbHMuZ2V0KCdtZW1vSWQnKSkpIHtcbiAgICAvLyBpZiB0aGVyZSBhcmUgbW9yZSBwcm9wZXJ0aWVzLCB0aGUgcXVlcnkgZGV0YWlscyBuZWVkIHRvIGNvbnRhaW4gdGhlIG1lbW8gaWQgcHJvcGVydHlcbiAgICB0aHJvdyBuZXcgVXRpbHNFcnJvcihgaW52YWxpZCBhZGRyZXNzIHdpdGggbWVtbyBpZDogJHthZGRyZXNzfWApO1xuICB9XG4gIGNvbnN0IG1lbW9JZCA9IHF1ZXJ5RGV0YWlscy5nZXQoJ21lbW9JZCcpIGFzIHN0cmluZztcbiAgY29uc3QgaW50TWVtb0lkID0gcGFyc2VJbnQobWVtb0lkLCAxMCk7XG4gIGlmIChpc05hTihpbnRNZW1vSWQpIHx8IGludE1lbW9JZCA8IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYGludmFsaWQgbWVtbyBpZDogJHttZW1vSWR9YCk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGFkZHJlc3M6IGJhc2VBZGRyZXNzLFxuICAgIG1lbW9JZCxcbiAgfTtcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZSBhbmQgcmV0dXJuIGFkZHJlc3Mgd2l0aCBhcHBlbmRlZCBtZW1vIGlkXG4gKlxuICogQHBhcmFtIHtBZGRyZXNzRGV0YWlsc30gYWRkcmVzc0RldGFpbHNcbiAqIEByZXR1cm5zIHtzdHJpbmd9IGFkZHJlc3Mgd2l0aCBtZW1vIGlkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVBZGRyZXNzKHsgYWRkcmVzcywgbWVtb0lkIH06IEFkZHJlc3NEZXRhaWxzKTogc3RyaW5nIHtcbiAgaWYgKCFpc1ZhbGlkQWRkcmVzcyhhZGRyZXNzKSkge1xuICAgIHRocm93IG5ldyBVdGlsc0Vycm9yKGBpbnZhbGlkIGFkZHJlc3M6ICR7YWRkcmVzc31gKTtcbiAgfVxuICBpZiAoIV8uaXNVbmRlZmluZWQobWVtb0lkKSkge1xuICAgIGNvbnN0IGludE1lbW9JZCA9IHBhcnNlSW50KG1lbW9JZCwgMTApO1xuICAgIGlmIChpc05hTihpbnRNZW1vSWQpIHx8IGludE1lbW9JZCA8IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgaW52YWxpZCBtZW1vIGlkOiAke21lbW9JZH1gKTtcbiAgICB9XG4gICAgcmV0dXJuIGAke2FkZHJlc3N9P21lbW9JZD0ke21lbW9JZH1gO1xuICB9XG4gIHJldHVybiBhZGRyZXNzO1xufVxuXG4vKipcbiAqIFJldHVybiBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciBpbnB1dCBpcyBhIHZhbGlkIGFkZHJlc3Mgd2l0aCBtZW1vIGlkXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGFkZHJlc3MgYWRkcmVzcyBpbiB0aGUgZm9ybSA8YWRkcmVzcz4/bWVtb0lkPTxtZW1vSWQ+XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gdHJ1ZSBpcyBpbnB1dCBpcyBhIHZhbGlkIGFkZHJlc3NcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzVmFsaWRBZGRyZXNzV2l0aFBheW1lbnRJZChhZGRyZXNzOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBhZGRyZXNzRGV0YWlscyA9IGdldEFkZHJlc3NEZXRhaWxzKGFkZHJlc3MpO1xuICAgIHJldHVybiBhZGRyZXNzID09PSBub3JtYWxpemVBZGRyZXNzKGFkZHJlc3NEZXRhaWxzKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG4vKipcbiAqIFJldHVybiBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgY2xhcml0eSB2YWx1ZSBpbnB1dFxuICpcbiAqIEBwYXJhbSB7Q2xhcml0eVZhbHVlfSBjdiBjbGFyaXR5IHZhbHVlIGZ1bmN0aW9uIGFyZ3VtZW50XG4gKiBAcmV0dXJucyB7U3RyaW5nfSBzdHJpbmdpZmllZCBjbGFyaXR5IHZhbHVlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdHJpbmdpZnlDdihjdjogQ2xhcml0eVZhbHVlKTogYW55IHtcbiAgc3dpdGNoIChjdi50eXBlKSB7XG4gICAgY2FzZSBDbGFyaXR5VHlwZS5JbnQ6XG4gICAgY2FzZSBDbGFyaXR5VHlwZS5VSW50OlxuICAgICAgcmV0dXJuIHsgdHlwZTogY3YudHlwZSwgdmFsdWU6IGN2LnZhbHVlLnRvU3RyaW5nKCkgfTtcbiAgICBjYXNlIENsYXJpdHlUeXBlLk9wdGlvbmFsU29tZTpcbiAgICAgIHJldHVybiB7IHR5cGU6IGN2LnR5cGUsIHZhbHVlOiBzdHJpbmdpZnlDdihjdi52YWx1ZSkgfTtcbiAgICAvLyBSZXNwb25zZU9rL1Jlc3BvbnNlRXJyIHdyYXAgYSBDbGFyaXR5VmFsdWUgKGUuZy4gcmVnaXN0ZXItZm9yLWJvbmQncyBsb2NrdXAgdHVwbGUvbGlzdCkuXG4gICAgLy8gV2l0aG91dCB0aGVzZSBjYXNlcyB0aGUgaW5uZXIgaW50cyByZWFjaCBgdG9Kc29uKClgIGFzIG5hdGl2ZSBCaWdJbnQsIHdoaWNoIEpTT04uc3RyaW5naWZ5XG4gICAgLy8gcmVqZWN0cyDigJQgbWFraW5nIHRoZSBwYXlsb2FkIHVuc2VyaWFsaXNhYmxlIGZvciBjb25zdW1lcnMgc3VjaCBhcyB0aGUgcG9saWN5IHNlcnZpY2UgKFNJLTE5MjIpLlxuICAgIGNhc2UgQ2xhcml0eVR5cGUuUmVzcG9uc2VPazpcbiAgICBjYXNlIENsYXJpdHlUeXBlLlJlc3BvbnNlRXJyOlxuICAgICAgcmV0dXJuIHsgdHlwZTogY3YudHlwZSwgdmFsdWU6IHN0cmluZ2lmeUN2KGN2LnZhbHVlKSB9O1xuICAgIGNhc2UgQ2xhcml0eVR5cGUuVHVwbGU6XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiBjdi50eXBlLFxuICAgICAgICBkYXRhOiBfLm1hcFZhbHVlcyhjdi5kYXRhLCAodmFsdWUpID0+IHN0cmluZ2lmeUN2KHZhbHVlKSksXG4gICAgICB9O1xuICAgIGNhc2UgQ2xhcml0eVR5cGUuTGlzdDpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6IGN2LnR5cGUsXG4gICAgICAgIGxpc3Q6IGN2Lmxpc3QubWFwKHN0cmluZ2lmeUN2KSxcbiAgICAgIH07XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBjdjtcbiAgfVxufVxuXG4vKipcbiAqIFBhcnNlIGZ1bmN0aW9uQXJncyBpbnRvIHNlbmQgcGFyYW1zIGZvciBzZW5kLW1hbnktbWVtbyBjb250cmFjdCBjYWxsc1xuICpcbiAqIEBwYXJhbSB7Q2xhcml0eVZhbHVlW119IGFyZ3MgZnVuY3Rpb25BcmdzIGZyb20gYSBjb250cmFjdCBjYWxsIHBheWxvYWRcbiAqIEByZXR1cm5zIHtTZW5kUGFyYW1zW119IEFuIGFycmF5IG9mIHNlbmRQYXJhbXNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZ1bmN0aW9uQXJnc1RvU2VuZFBhcmFtcyhhcmdzOiBDbGFyaXR5VmFsdWVbXSk6IFNlbmRQYXJhbXNbXSB7XG4gIGlmIChhcmdzLmxlbmd0aCAhPT0gMSB8fCBhcmdzWzBdLnR5cGUgIT09IENsYXJpdHlUeXBlLkxpc3QpIHtcbiAgICB0aHJvdyBuZXcgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IoXCJmdW5jdGlvbiBhcmdzIGRvbid0IG1hdGNoIHNlbmQtbWFueS1tZW1vIHR5cGUgZGVjbGFyYXRpb25cIik7XG4gIH1cbiAgcmV0dXJuIGFyZ3NbMF0ubGlzdC5tYXAoKHR1cGxlKSA9PiB7XG4gICAgaWYgKFxuICAgICAgdHVwbGUudHlwZSAhPT0gQ2xhcml0eVR5cGUuVHVwbGUgfHxcbiAgICAgIHR1cGxlLmRhdGEudG8/LnR5cGUgIT09IENsYXJpdHlUeXBlLlByaW5jaXBhbFN0YW5kYXJkIHx8XG4gICAgICB0dXBsZS5kYXRhLnVzdHg/LnR5cGUgIT09IENsYXJpdHlUeXBlLlVJbnQgfHxcbiAgICAgIHR1cGxlLmRhdGEubWVtbz8udHlwZSAhPT0gQ2xhcml0eVR5cGUuQnVmZmVyXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IoXCJmdW5jdGlvbiBhcmdzIGRvbid0IG1hdGNoIHNlbmQtbWFueS1tZW1vIHR5cGUgZGVjbGFyYXRpb25cIik7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBhZGRyZXNzOiBjdlRvU3RyaW5nKHR1cGxlLmRhdGEudG8pLFxuICAgICAgYW1vdW50OiBjdlRvVmFsdWUodHVwbGUuZGF0YS51c3R4LCB0cnVlKSxcbiAgICAgIG1lbW86IHR1cGxlLmRhdGEubWVtby5idWZmZXIudG9TdHJpbmcoJ2FzY2lpJyksXG4gICAgfTtcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmdW5jdGlvbkFyZ3NUb1Rva2VuVHJhbnNmZXJQYXJhbXMoYXJnczogQ2xhcml0eVZhbHVlW10pOiBUb2tlblRyYW5zZmVyUGFyYW1zIHtcbiAgaWYgKGFyZ3MubGVuZ3RoIDwgMykge1xuICAgIHRocm93IG5ldyBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvcihcImZ1bmN0aW9uIGFyZ3MgZG9uJ3QgbWF0Y2ggdG9rZW4gdHJhbnNmZXIgZGVjbGFyYXRpb25cIik7XG4gIH1cbiAgaWYgKFxuICAgIGFyZ3NbMF0udHlwZSAhPT0gQ2xhcml0eVR5cGUuVUludCB8fFxuICAgIGFyZ3NbMV0udHlwZSAhPT0gQ2xhcml0eVR5cGUuUHJpbmNpcGFsU3RhbmRhcmQgfHxcbiAgICBhcmdzWzJdLnR5cGUgIT09IENsYXJpdHlUeXBlLlByaW5jaXBhbFN0YW5kYXJkXG4gICkge1xuICAgIHRocm93IG5ldyBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvcihcImZ1bmN0aW9uIGFyZ3MgZG9uJ3QgbWF0Y2ggdG9rZW4gdHJhbnNmZXIgZGVjbGFyYXRpb25cIik7XG4gIH1cbiAgY29uc3QgdG9rZW5UcmFuc2ZlclBhcmFtcyA9IHtcbiAgICBhbW91bnQ6IGN2VG9WYWx1ZShhcmdzWzBdLCB0cnVlKSxcbiAgICBzZW5kZXI6IGN2VG9TdHJpbmcoYXJnc1sxXSksXG4gICAgcmVjaXBpZW50OiBjdlRvU3RyaW5nKGFyZ3NbMl0pLFxuICB9O1xuICBpZiAoYXJncy5sZW5ndGggPT09IDQgJiYgYXJnc1szXS50eXBlID09PSBDbGFyaXR5VHlwZS5CdWZmZXIpIHtcbiAgICB0b2tlblRyYW5zZmVyUGFyYW1zWydtZW1vJ10gPSBhcmdzWzNdLmJ1ZmZlci50b1N0cmluZygnYXNjaWknKTtcbiAgfVxuICByZXR1cm4gdG9rZW5UcmFuc2ZlclBhcmFtcztcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSB2ZXJzaW9uIG9mIGFuIGFkZHJlc3NcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gYWRkcmVzcyB0aGUgYWRkcmVzcyB3aXRoIG9yIHdpdGhvdXQgdGhlIG1lbW9JZFxuICogQHJldHVybnMge0FkZHJlc3NWZXJzaW9ufSBBIG51bWJlciB0aGF0IHJlcHJlc2VudCB0aGUgQWRkcmVzcyBWZXJzaW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRBZGRyZXNzVmVyc2lvbihhZGRyZXNzOiBzdHJpbmcpOiBBZGRyZXNzVmVyc2lvbiB7XG4gIGNvbnN0IGJhc2VBZGRyZXNzID0gZ2V0QWRkcmVzc0RldGFpbHMoYWRkcmVzcykuYWRkcmVzcztcbiAgcmV0dXJuIGNyZWF0ZUFkZHJlc3MoYmFzZUFkZHJlc3MpLnZlcnNpb247XG59XG5cbi8qKlxuICogRW5jb2RlIGEgU3RhY2tzICpzdGFuZGFyZCogcHJpbmNpcGFsIGFzIHRoZSBDbGFyaXR5IFNJUC0wMDUgaGV4IHdpcmUgZm9ybWF0XG4gKiDigJQgYSAyMi1ieXRlIGJsb2I6XG4gKlxuICogICAgIGAweDA1YCB8fCB2ZXJzaW9uICgxIGJ5dGUpIHx8IGhhc2gxNjAgKDIwIGJ5dGVzKVxuICpcbiAqIENvbnRyYWN0IHByaW5jaXBhbHMgKGA8YWRkcmVzcz4uPGNvbnRyYWN0LW5hbWU+YCkgYW5kIGFkZHJlc3NlcyB3aXRoIGFcbiAqIGA/bWVtb0lkPeKApmAgc3VmZml4IGFyZSByZWplY3RlZC4gVGhlIENsYXJpdHkgdHlwZSBieXRlIChgMHgwNWApIGlzIHNldFxuICogYnkgYHNlcmlhbGl6ZUNWYCBmcm9tIGBAc3RhY2tzL3RyYW5zYWN0aW9uc2AsIHNvIHRoaXMgaGVscGVyIGRvZXMgbm90XG4gKiBoYW5kLXJvbGwgYW55IGJ5dGUgY29uY2F0ZW5hdGlvbi5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gcHJpbmNpcGFsIGEgU3RhY2tzIHN0YW5kYXJkIHByaW5jaXBhbCAoZS5nLiBgU1DigKZgIC8gYFNU4oCmYClcbiAqIEByZXR1cm5zIHtzdHJpbmd9IGhleC1lbmNvZGVkIDIyLWJ5dGUgQ2xhcml0eSBzdGFuZGFyZCBwcmluY2lwYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEVuY29kZWRQcmluY2lwYWwocHJpbmNpcGFsOiBzdHJpbmcpOiBzdHJpbmcge1xuICBpZiAocHJpbmNpcGFsLmluY2x1ZGVzKCc/JykpIHtcbiAgICB0aHJvdyBuZXcgVXRpbHNFcnJvcihgcHJpbmNpcGFsIG11c3Qgbm90IGluY2x1ZGUgYSBxdWVyeSBzdHJpbmc6ICR7cHJpbmNpcGFsfWApO1xuICB9XG4gIGlmIChwcmluY2lwYWwuaW5jbHVkZXMoJy4nKSkge1xuICAgIHRocm93IG5ldyBVdGlsc0Vycm9yKGBjb250cmFjdCBwcmluY2lwYWxzIGFyZSBub3Qgc3VwcG9ydGVkLCBleHBlY3RlZCBhIHN0YW5kYXJkIHByaW5jaXBhbDogJHtwcmluY2lwYWx9YCk7XG4gIH1cbiAgaWYgKCFpc1ZhbGlkQWRkcmVzcyhwcmluY2lwYWwpKSB7XG4gICAgdGhyb3cgbmV3IFV0aWxzRXJyb3IoYGludmFsaWQgU3RhY2tzIGFkZHJlc3MgaW4gcHJpbmNpcGFsOiAke3ByaW5jaXBhbH1gKTtcbiAgfVxuICByZXR1cm4gc2VyaWFsaXplQ1Yoc3RhbmRhcmRQcmluY2lwYWxDVihwcmluY2lwYWwpKS50b1N0cmluZygnaGV4Jyk7XG59XG5cbi8qKlxuICogUmV0dXJucyBhIFNUWCBwdWIga2V5IGZyb20gYW4geHB1YlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSB4cHViIGFuIHhwdWJcbiAqIEByZXR1cm5zIHtTdHJpbmd9IGEgY29tcHJlc3NlZCBTVFggcHViIGtleVxuICovXG5leHBvcnQgZnVuY3Rpb24geHB1YlRvU1RYUHVia2V5KHhwdWI6IHN0cmluZywgY29tcHJlc3NlZCA9IHRydWUpOiBzdHJpbmcge1xuICByZXR1cm4gbmV3IEtleVBhaXIoeyBwdWI6IHhwdWIgfSkuZ2V0S2V5cyhjb21wcmVzc2VkKS5wdWI7XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgYmFzZSBhZGRyZXNzIHBvcnRpb24gb2YgYW4gYWRkcmVzc1xuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBhZGRyZXNzIC0gYW4gYWRkcmVzc1xuICogQHJldHVybnMge1N0cmluZ30gLSB0aGUgYmFzZSBhZGRyZXNzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRCYXNlQWRkcmVzcyhhZGRyZXNzOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBhZGRyZXNzRGV0YWlscyA9IGdldEFkZHJlc3NEZXRhaWxzKGFkZHJlc3MpO1xuICByZXR1cm4gYWRkcmVzc0RldGFpbHMuYWRkcmVzcztcbn1cblxuLyoqXG4gKiBDb21wYXJlcyBhbiBhZGRyZXNzIHRvIHRoZSBiYXNlIGFkZHJlc3MgdG8gY2hlY2sgaWYgbWF0Y2hzLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBhZGRyZXNzIC0gYW4gYWRkcmVzc1xuICogQHBhcmFtIHtTdHJpbmd9IGJhc2VBZGRyZXNzIC0gYSBiYXNlIGFkZHJlc3NcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNTYW1lQmFzZUFkZHJlc3MoYWRkcmVzczogc3RyaW5nLCBiYXNlQWRkcmVzczogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGlmICghaXNWYWxpZEFkZHJlc3NXaXRoUGF5bWVudElkKGFkZHJlc3MpKSB7XG4gICAgdGhyb3cgbmV3IFV0aWxzRXJyb3IoYGludmFsaWQgYWRkcmVzczogJHthZGRyZXNzfWApO1xuICB9XG4gIHJldHVybiBnZXRCYXNlQWRkcmVzcyhhZGRyZXNzKSA9PT0gZ2V0QmFzZUFkZHJlc3MoYmFzZUFkZHJlc3MpO1xufVxuXG4vKipcbiAqIEZ1bmN0aW9uIHRvIGdldCB0b2tlbk5hbWUgZnJvbSBsaXN0IG9mIHNpcDEwIHRva2VucyB1c2luZyBjb250cmFjdCBkZXRhaWxzXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGNvbnRyYWN0QWRkcmVzc1xuICogQHBhcmFtIHtTdHJpbmd9IGNvbnRyYWN0TmFtZVxuICogQHJldHVybnMge1N0cmluZ3xVbmRlZmluZWR9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmaW5kVG9rZW5OYW1lQnlDb250cmFjdChjb250cmFjdEFkZHJlc3M6IHN0cmluZywgY29udHJhY3ROYW1lOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICB7XG4gICAgY29uc3QgdG9rZW5OYW1lID0gY29pbnNcbiAgICAgIC5maWx0ZXIoKGNvaW4pID0+IGNvaW4gaW5zdGFuY2VvZiBTaXAxMFRva2VuICYmIGNvaW4uYXNzZXRJZC5pbmNsdWRlcyhgJHtjb250cmFjdEFkZHJlc3N9LiR7Y29udHJhY3ROYW1lfWApKVxuICAgICAgLm1hcCgoY29pbikgPT4gY29pbi5uYW1lKTtcbiAgICByZXR1cm4gdG9rZW5OYW1lID8gdG9rZW5OYW1lWzBdIDogdW5kZWZpbmVkO1xuICB9XG59XG5cbi8qKlxuICogRnVuY3Rpb24gdG8gZ2V0IGNvbnRyYWN0VG9rZW5OYW1lIGZyb20gbGlzdCBvZiBzaXAxMCB0b2tlbnMgdXNpbmcgY29udHJhY3QgZGV0YWlsc1xuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBjb250cmFjdEFkZHJlc3NcbiAqIEBwYXJhbSB7U3RyaW5nfSBjb250cmFjdE5hbWVcbiAqIEByZXR1cm5zIHtTdHJpbmd8VW5kZWZpbmVkfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZmluZENvbnRyYWN0VG9rZW5OYW1lVXNpbmdDb250cmFjdChjb250cmFjdEFkZHJlc3M6IHN0cmluZywgY29udHJhY3ROYW1lOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICB7XG4gICAgY29uc3Qgc2lwMTBUb2tlbiA9IGNvaW5zXG4gICAgICAuZmlsdGVyKChjb2luKSA9PiBjb2luIGluc3RhbmNlb2YgU2lwMTBUb2tlbiAmJiBjb2luLmFzc2V0SWQuaW5jbHVkZXMoYCR7Y29udHJhY3RBZGRyZXNzfS4ke2NvbnRyYWN0TmFtZX1gKSlcbiAgICAgIC5tYXAoKGNvaW4pID0+IGNvaW4gYXMgU2lwMTBUb2tlbik7XG4gICAgcmV0dXJuIHNpcDEwVG9rZW4gPyBzaXAxMFRva2VuWzBdLmFzc2V0SWQuc3BsaXQoJzo6JylbMV0gOiB1bmRlZmluZWQ7XG4gIH1cbn1cblxuLyoqXG4gKiBGdW5jdGlvbiB0byBnZXQgYWRkcmVzcyBhbmQgbWVtbyBkZXRhaWxzIGZyb20gYWRkcmVzcyBpbnB1dFxuICpcbiAqIEBwYXJhbSBhZGRyZXNzXG4gKiBAcmV0dXJucyB7QWRkcmVzc0RldGFpbHN9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRNZW1vSWRBbmRCYXNlQWRkcmVzc0Zyb21BZGRyZXNzKGFkZHJlc3M6IHN0cmluZyk6IEFkZHJlc3NEZXRhaWxzIHtcbiAgY29uc3QgW2Jhc2VBZGRyZXNzLCBxdWVyeVN0cmluZ10gPSBhZGRyZXNzLnNwbGl0KCc/Jyk7XG4gIGNvbnN0IHBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMocXVlcnlTdHJpbmcpO1xuICBjb25zdCBtZW1vSWQgPSBwYXJhbXMuZ2V0KCdtZW1vSWQnKTtcblxuICByZXR1cm4ge1xuICAgIGFkZHJlc3M6IGJhc2VBZGRyZXNzLFxuICAgIG1lbW9JZDogbWVtb0lkID8gbWVtb0lkIDogdW5kZWZpbmVkLFxuICB9O1xufVxuIl19
|
|
653
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBbURBLHNFQVVDO0FBR0Qsc0VBS0M7QUFRRCwwREFFQztBQVFELDBDQUVDO0FBZ0NELGdEQVVDO0FBUUQsc0NBR0M7QUFRRCx3Q0FFQztBQVlELG9EQU1DO0FBWUQsNENBc0JDO0FBYUQsOENBUUM7QUFrQkQsc0RBWUM7QUFRRCxrQ0FjQztBQVNELHdEQU1DO0FBUUQsa0VBUUM7QUFVRCw4QkFJQztBQVdELDREQW9CQztBQVNELGtDQU9DO0FBYUQsMENBWUM7QUFRRCw4Q0E2QkM7QUFRRCw0Q0FZQztBQVFELGtFQU9DO0FBUUQsa0NBMEJDO0FBUUQsNERBbUJDO0FBRUQsOEVBb0JDO0FBUUQsOENBR0M7QUFnQkQsa0RBV0M7QUFRRCwwQ0FFQztBQVFELHdDQUdDO0FBU0QsOENBS0M7QUFTRCwwREFPQztBQVNELGdGQU9DO0FBUUQsZ0ZBU0M7QUEvcEJELHlDQUEyQjtBQUMzQixnRUFBcUM7QUFDckMscURBQThEO0FBQzlELHVEQXdCOEI7QUFDOUIsNkNBQXdFO0FBQ3hFLHVEQUFvRDtBQUNwRCwwQ0FBNEI7QUFDNUIsOENBT3lCO0FBRXpCLHdCQUE0QjtBQUM1Qiw0Q0FBd0Y7QUFDeEYsMkNBTXFCO0FBRXJCLGdHQUFnRztBQUNoRyxTQUFnQiw2QkFBNkIsQ0FBQyxLQUFhO0lBQ3pELE1BQU0sU0FBUyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDckMsSUFBSSxTQUFTLElBQUksQ0FBQyxJQUFJLFNBQVMsS0FBSyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxTQUFTLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQztR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QUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztJQUNsRixDQUFDO0FBQ0gsQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsU0FBZ0Isa0NBQWtDLENBQUMsT0FBZTtJQUNoRSxNQUFNLENBQUMsV0FBVyxFQUFFLFdBQVcsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDdEQsTUFBTSxNQUFNLEdBQUcsSUFBSSxlQUFlLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDaEQsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUVwQyxPQUFPO1FBQ0wsT0FBTyxFQUFFLFdBQVc7UUFDcEIsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxTQUFTO0tBQ3BDLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgdXJsIGZyb20gJ3VybCc7XG5pbXBvcnQgQmlnTnVtYmVyIGZyb20gJ2JpZ251bWJlci5qcyc7XG5pbXBvcnQgeyBidWZmZXJUb0hleCwgc3RyaXBIZXhQcmVmaXggfSBmcm9tICdldGhlcmV1bWpzLXV0aWwnO1xuaW1wb3J0IHtcbiAgYWRkcmVzc0Zyb21QdWJsaWNLZXlzLFxuICBhZGRyZXNzRnJvbVZlcnNpb25IYXNoLFxuICBBZGRyZXNzSGFzaE1vZGUsXG4gIGFkZHJlc3NIYXNoTW9kZVRvVmVyc2lvbixcbiAgYWRkcmVzc1RvU3RyaW5nLFxuICBBZGRyZXNzVmVyc2lvbixcbiAgQnl0ZXNSZWFkZXIsXG4gIENsYXJpdHlUeXBlLFxuICBDbGFyaXR5VmFsdWUsXG4gIGNvbnRyYWN0UHJpbmNpcGFsQ1YsXG4gIGNyZWF0ZUFkZHJlc3MsXG4gIGNyZWF0ZU1lbW9TdHJpbmcsXG4gIGNyZWF0ZVN0YWNrc1B1YmxpY0tleSxcbiAgY3ZUb1N0cmluZyxcbiAgY3ZUb1ZhbHVlLFxuICBkZXNlcmlhbGl6ZVRyYW5zYWN0aW9uLFxuICBQdWJLZXlFbmNvZGluZyxcbiAgcHVibGljS2V5RnJvbVNpZ25hdHVyZVZycyxcbiAgc2VyaWFsaXplQ1YsXG4gIHNpZ25XaXRoS2V5LFxuICBTdGFja3NUcmFuc2FjdGlvbldpcmUsXG4gIHN0YW5kYXJkUHJpbmNpcGFsQ1YsXG4gIHZhbGlkYXRlU3RhY2tzQWRkcmVzcyxcbn0gZnJvbSAnQHN0YWNrcy90cmFuc2FjdGlvbnMnO1xuaW1wb3J0IHsgU3RhY2tzTmV0d29ya05hbWUsIFRyYW5zYWN0aW9uVmVyc2lvbiB9IGZyb20gJ0BzdGFja3MvbmV0d29yayc7XG5pbXBvcnQgeyBzZWNwMjU2azEgfSBmcm9tICdAbm9ibGUvY3VydmVzL3NlY3AyNTZrMSc7XG5pbXBvcnQgKiBhcyBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQge1xuICBJbnZhbGlkUGFyYW1ldGVyVmFsdWVFcnJvcixcbiAgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IsXG4gIGlzVmFsaWRYcHJ2LFxuICBpc1ZhbGlkWHB1YixcbiAgU2lnbmluZ0Vycm9yLFxuICBVdGlsc0Vycm9yLFxufSBmcm9tICdAYml0Z28vc2RrLWNvcmUnO1xuaW1wb3J0IHsgQWRkcmVzc0RldGFpbHMsIFNlbmRQYXJhbXMsIFRva2VuVHJhbnNmZXJQYXJhbXMgfSBmcm9tICcuL2lmYWNlJztcbmltcG9ydCB7IEtleVBhaXIgfSBmcm9tICcuJztcbmltcG9ydCB7IGNvaW5zLCBTaXAxMFRva2VuLCBTdGFja3NOZXR3b3JrIGFzIEJpdGdvU3RhY2tzTmV0d29yayB9IGZyb20gJ0BiaXRnby9zdGF0aWNzJztcbmltcG9ydCB7XG4gIENPTlRSQUNUX05BTUVfU0VORE1BTlksXG4gIENPTlRSQUNUX05BTUVfU1RBS0lORyxcbiAgQ09OVFJBQ1RfTkFNRV9QT1g1LFxuICBWQUxJRF9DT05UUkFDVF9GVU5DVElPTl9OQU1FUyxcbiAgVkFMSURfUE9YNV9DT05UUkFDVF9GVU5DVElPTl9OQU1FUyxcbn0gZnJvbSAnLi9jb25zdGFudHMnO1xuXG4vKiogQ29udmVydCBhIGNvbnRyYWN0IHByaW5jaXBhbCBzdHJpbmcgdG8gYSBDbGFyaXR5IHZhbHVlIHdpdGggbm9ybWFsaXplZCB2YWxpZGF0aW9uIGVycm9ycy4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb250cmFjdFByaW5jaXBhbENWRnJvbVN0cmluZyh2YWx1ZTogc3RyaW5nKTogQ2xhcml0eVZhbHVlIHtcbiAgY29uc3Qgc2VwYXJhdG9yID0gdmFsdWUuaW5kZXhPZignLicpO1xuICBpZiAoc2VwYXJhdG9yIDw9IDAgfHwgc2VwYXJhdG9yID09PSB2YWx1ZS5sZW5ndGggLSAxIHx8IHZhbHVlLmluZGV4T2YoJy4nLCBzZXBhcmF0b3IgKyAxKSAhPT0gLTEpIHtcbiAgICB0aHJvdyBuZXcgSW52YWxpZFBhcmFtZXRlclZhbHVlRXJyb3IoYCR7dmFsdWV9IG11c3QgaGF2ZSBhZGRyZXNzLmNvbnRyYWN0LW5hbWUgZm9ybWF0YCk7XG4gIH1cbiAgY29uc3QgYWRkcmVzcyA9IHZhbHVlLnNsaWNlKDAsIHNlcGFyYXRvcik7XG4gIGlmICghaXNWYWxpZEFkZHJlc3MoYWRkcmVzcykpIHtcbiAgICB0aHJvdyBuZXcgSW52YWxpZFBhcmFtZXRlclZhbHVlRXJyb3IoYCR7dmFsdWV9IG11c3QgY29udGFpbiBhIHZhbGlkIGFkZHJlc3NgKTtcbiAgfVxuICByZXR1cm4gY29udHJhY3RQcmluY2lwYWxDVihhZGRyZXNzLCB2YWx1ZS5zbGljZShzZXBhcmF0b3IgKyAxKSk7XG59XG5cbi8qKiBDb252ZXJ0IGEgc3RhbmRhcmQgcHJpbmNpcGFsIHN0cmluZyB0byBhIENsYXJpdHkgdmFsdWUgd2l0aCBhIG5vcm1hbGl6ZWQgdmFsaWRhdGlvbiBlcnJvci4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdGFuZGFyZFByaW5jaXBhbENWRnJvbVN0cmluZyh2YWx1ZTogc3RyaW5nKTogQ2xhcml0eVZhbHVlIHtcbiAgaWYgKCFpc1ZhbGlkQWRkcmVzcyh2YWx1ZSkpIHtcbiAgICB0aHJvdyBuZXcgSW52YWxpZFBhcmFtZXRlclZhbHVlRXJyb3IoYCR7dmFsdWV9IG11c3QgYmUgYSB2YWxpZCBzdGFuZGFyZCBwcmluY2lwYWxgKTtcbiAgfVxuICByZXR1cm4gc3RhbmRhcmRQcmluY2lwYWxDVih2YWx1ZSk7XG59XG5cbi8qKlxuICogRW5jb2RlcyBhIGJ1ZmZlciBhcyBhIFwiMHhcIiBwcmVmaXhlZCBsb3dlci1jYXNlIGhleCBzdHJpbmcuXG4gKlxuICogQHBhcmFtIHtCdWZmZXJ9IGJ1ZmYgLSBhIGJ1ZmZlciB3aXRoIGEgaGV4YWRlY2ltYWwgc3RyaW5nXG4gKiBAcmV0dXJucyB7c3RyaW5nfSAtIHRoZSBoZXhhZGVjaW1hbCBzdHJpbmcgcHJlZml4ZWQgd2l0aCBcIjB4XCJcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJ1ZmZlclRvSGV4UHJlZml4U3RyaW5nKGJ1ZmY6IEJ1ZmZlcik6IHN0cmluZyB7XG4gIHJldHVybiBidWZmZXJUb0hleChidWZmKTtcbn1cblxuLyoqXG4gKiBSZW1vdmUgdGhlIFwiMHhcIiBwcmVmaXggZnJvbSB0aGUgZ2l2ZW4gc3RyaW5nLCBpZiBwcmVzZW50LlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBoZXggLSBhIGhleGFkZWNpbWFsIHN0cmluZ1xuICogQHJldHVybnMge3N0cmluZ30gLSB0aGUgaGV4YWRlY2ltYWwgc3RyaW5nIHdpdGhvdXQgYSBsZWFkaW5nIFwiMHhcIlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlSGV4UHJlZml4KGhleDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHN0cmlwSGV4UHJlZml4KGhleCk7XG59XG5cbmZ1bmN0aW9uIHRyYW5zYWN0aW9uVmVyc2lvblRvTmV0d29ya05hbWUodHJhbnNhY3Rpb25WZXJzaW9uOiBUcmFuc2FjdGlvblZlcnNpb24pOiBTdGFja3NOZXR3b3JrTmFtZSB7XG4gIHJldHVybiB0cmFuc2FjdGlvblZlcnNpb24gPT09IFRyYW5zYWN0aW9uVmVyc2lvbi5UZXN0bmV0ID8gJ3Rlc3RuZXQnIDogJ21haW5uZXQnO1xufVxuXG4vKipcbiAqIEdldCBzdGFja3MgYWRkcmVzcyBmcm9tIHB1YmxpYyBrZXkgaGFzaFxuICpcbiAqIEBwYXJhbSB7QnVmZmVyfSBwdWJsaWNLZXlIYXNoIC0gaGFzaCBvZiBwdWJsaWMga2V5XG4gKiBAcGFyYW0ge0FkZHJlc3NIYXNoTW9kZX0gaGFzaE1vZGUgLSBoYXNoIG1vZGVcbiAqIEBwYXJhbSB7VHJhbnNhY3Rpb25WZXJzaW9ufSB0cmFuc2FjdGlvblZlcnNpb24gLSB0eCB2ZXJzaW9uXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBzdGFja3MgYWRkcmVzc1xuICovXG5mdW5jdGlvbiBnZXRBZGRyZXNzRnJvbVB1YmxpY0tleUhhc2goXG4gIHB1YmxpY0tleUhhc2g6IEJ1ZmZlcixcbiAgaGFzaE1vZGU6IEFkZHJlc3NIYXNoTW9kZSxcbiAgdHJhbnNhY3Rpb25WZXJzaW9uOiBUcmFuc2FjdGlvblZlcnNpb25cbik6IHN0cmluZyB7XG4gIGlmIChwdWJsaWNLZXlIYXNoLmxlbmd0aCAhPT0gMjApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2V4cGVjdGVkIDIwLWJ5dGUgcHVia2V5aGFzaCcpO1xuICB9XG5cbiAgY29uc3QgYWRkclZlciA9IGFkZHJlc3NIYXNoTW9kZVRvVmVyc2lvbihoYXNoTW9kZSwgdHJhbnNhY3Rpb25WZXJzaW9uVG9OZXR3b3JrTmFtZSh0cmFuc2FjdGlvblZlcnNpb24pKTtcbiAgY29uc3QgYWRkciA9IGFkZHJlc3NGcm9tVmVyc2lvbkhhc2goYWRkclZlciwgcHVibGljS2V5SGFzaC50b1N0cmluZygnaGV4JykpO1xuICBjb25zdCBhZGRyU3RyaW5nID0gYWRkcmVzc1RvU3RyaW5nKGFkZHIpO1xuICByZXR1cm4gYWRkclN0cmluZztcbn1cblxuLyoqXG4gKiBAcGFyYW0gdHhcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFR4U2VuZGVyQWRkcmVzcyh0eDogU3RhY2tzVHJhbnNhY3Rpb25XaXJlKTogc3RyaW5nIHtcbiAgaWYgKHR4LmF1dGguc3BlbmRpbmdDb25kaXRpb24gIT09IG51bGwgJiYgdHguYXV0aC5zcGVuZGluZ0NvbmRpdGlvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgY29uc3Qgc3BlbmRpbmdDb25kaXRpb24gPSB0eC5hdXRoLnNwZW5kaW5nQ29uZGl0aW9uO1xuICAgIGNvbnN0IHR4U2VuZGVyID0gZ2V0QWRkcmVzc0Zyb21QdWJsaWNLZXlIYXNoKFxuICAgICAgQnVmZmVyLmZyb20oc3BlbmRpbmdDb25kaXRpb24uc2lnbmVyLCAnaGV4JyksXG4gICAgICBzcGVuZGluZ0NvbmRpdGlvbi5oYXNoTW9kZSBhcyBudW1iZXIsXG4gICAgICB0eC50cmFuc2FjdGlvblZlcnNpb25cbiAgICApO1xuICAgIHJldHVybiB0eFNlbmRlcjtcbiAgfSBlbHNlIHRocm93IG5ldyBFcnJvcignc3BlbmRpbmdDb25kaXRpb24gc2hvdWxkIG5vdCBiZSBudWxsJyk7XG59XG5cbi8qKlxuICogUmV0dXJucyB3aGV0aGVyIG9yIG5vdCB0aGUgc3RyaW5nIGlzIGEgdmFsaWQgYW1vdW50IG51bWJlclxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBhbW91bnQgLSB0aGUgc3RyaW5nIHRvIHZhbGlkYXRlXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gLSB0aGUgdmFsaWRhdGlvbiByZXN1bHRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzVmFsaWRBbW91bnQoYW1vdW50OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgY29uc3QgYmlnTnVtYmVyQW1vdW50ID0gbmV3IEJpZ051bWJlcihhbW91bnQpO1xuICByZXR1cm4gYmlnTnVtYmVyQW1vdW50LmlzSW50ZWdlcigpICYmIGJpZ051bWJlckFtb3VudC5pc0dyZWF0ZXJUaGFuT3JFcXVhbFRvKDApO1xufVxuXG4vKipcbiAqIFJldHVybnMgd2hldGhlciBvciBub3QgdGhlIHN0cmluZyBpcyBhIHZhbGlkIHByb3RvY29sIGFkZHJlc3NcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gYWRkcmVzcyAtIHRoZSBhZGRyZXNzIHRvIGJlIHZhbGlkYXRlZFxuICogQHJldHVybnMge2Jvb2xlYW59IC0gdGhlIHZhbGlkYXRpb24gcmVzdWx0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1ZhbGlkQWRkcmVzcyhhZGRyZXNzOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIHZhbGlkYXRlU3RhY2tzQWRkcmVzcyhhZGRyZXNzKTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHdoZXRoZXIgb3Igbm90IHRoZSBzdHJpbmcgaXMgYSB2YWxpZCBwcm90b2NvbCB0cmFuc2FjdGlvbiBpZCBvciBub3QuXG4gKlxuICogQSB2YWxpZCB0cmFuc2FjdGlvbiBpZCBpcyBhIFNIQS01MTIvMjU2IGhhc2ggb2YgYSBzZXJpYWxpemVkIHRyYW5zYWN0aW9uOyBzZWVcbiAqIHRoZSB0eGlkRnJvbURhdGEgZnVuY3Rpb24gaW4gQHN0YWNrcy90cmFuc2FjdGlvbjpcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9ibG9ja3N0YWNrL3N0YWNrcy5qcy9ibG9iL21hc3Rlci9wYWNrYWdlcy90cmFuc2FjdGlvbnMvc3JjL3V0aWxzLnRzI0w5N1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB0eElkIC0gdGhlIHRyYW5zYWN0aW9uIGlkIHRvIGJlIHZhbGlkYXRlZFxuICogQHJldHVybnMge2Jvb2xlYW59IC0gdGhlIHZhbGlkYXRpb24gcmVzdWx0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1ZhbGlkVHJhbnNhY3Rpb25JZCh0eElkOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgaWYgKHR4SWQubGVuZ3RoICE9PSA2NCAmJiB0eElkLmxlbmd0aCAhPT0gNjYpIHJldHVybiBmYWxzZTtcbiAgY29uc3Qgbm9QcmVmaXggPSByZW1vdmVIZXhQcmVmaXgodHhJZCk7XG4gIGlmIChub1ByZWZpeC5sZW5ndGggIT09IDY0KSByZXR1cm4gZmFsc2U7XG5cbiAgcmV0dXJuIGFsbEhleENoYXJzKG5vUHJlZml4KTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHdoZXRoZXIgb3Igbm90IHRoZSBzdHJpbmcgaXMgYSB2YWxpZCBwcm90b2NvbCBwdWJsaWMga2V5IG9yXG4gKiBleHRlbmRlZCBwdWJsaWMga2V5LlxuICpcbiAqIFRoZSBrZXkgZm9ybWF0IGlzIGRvY3VtZW50ZWQgYXRcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9zdGFja3Nnb3Yvc2lwcy9ibG9iL21haW4vc2lwcy9zaXAtMDA1L3NpcC0wMDUtYmxvY2tzLWFuZC10cmFuc2FjdGlvbnMubWQjdHJhbnNhY3Rpb24tYXV0aG9yaXphdGlvblxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBwdWIgLSB0aGUgIHB1YmxpYyBrZXkgdG8gYmUgdmFsaWRhdGVkXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gLSB0aGUgdmFsaWRhdGlvbiByZXN1bHRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzVmFsaWRQdWJsaWNLZXkocHViOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgaWYgKGlzVmFsaWRYcHViKHB1YikpIHJldHVybiB0cnVlO1xuXG4gIGlmIChwdWIubGVuZ3RoICE9PSA2NiAmJiBwdWIubGVuZ3RoICE9PSAxMzApIHJldHVybiBmYWxzZTtcblxuICBjb25zdCBmaXJzdEJ5dGUgPSBwdWIuc2xpY2UoMCwgMik7XG5cbiAgLy8gdW5jb21wcmVzc2VkIHB1YmxpYyBrZXlcbiAgaWYgKHB1Yi5sZW5ndGggPT09IDEzMCAmJiBmaXJzdEJ5dGUgIT09ICcwNCcpIHJldHVybiBmYWxzZTtcblxuICAvLyBjb21wcmVzc2VkIHB1YmxpYyBrZXlcbiAgaWYgKHB1Yi5sZW5ndGggPT09IDY2ICYmIGZpcnN0Qnl0ZSAhPT0gJzAyJyAmJiBmaXJzdEJ5dGUgIT09ICcwMycpIHJldHVybiBmYWxzZTtcblxuICBpZiAoIWFsbEhleENoYXJzKHB1YikpIHJldHVybiBmYWxzZTtcblxuICAvLyB2YWxpZGF0ZSB0aGUgcHVibGljIGtleVxuICB0cnkge1xuICAgIHNlY3AyNTZrMS5Qcm9qZWN0aXZlUG9pbnQuZnJvbUhleChwdWIpO1xuICAgIHJldHVybiB0cnVlO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbi8qKlxuICogUmV0dXJucyB3aGV0aGVyIG9yIG5vdCB0aGUgc3RyaW5nIGlzIGEgdmFsaWQgcHJvdG9jb2wgcHJpdmF0ZSBrZXksIG9yIGV4dGVuZGVkXG4gKiBwcml2YXRlIGtleS5cbiAqXG4gKiBUaGUgcHJvdG9jb2wga2V5IGZvcm1hdCBpcyBkZXNjcmliZWQgaW4gdGhlIEBzdGFja3MvdHJhbnNhY3Rpb25zIG5wbSBwYWNrYWdlLCBpbiB0aGVcbiAqIGNyZWF0ZVN0YWNrc1ByaXZhdGVLZXkgZnVuY3Rpb246XG4gKiBodHRwczovL2dpdGh1Yi5jb20vYmxvY2tzdGFjay9zdGFja3MuanMvYmxvYi9tYXN0ZXIvcGFja2FnZXMvdHJhbnNhY3Rpb25zL3NyYy9rZXlzLnRzI0wxMjVcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gcHJ2IC0gdGhlIHByaXZhdGUga2V5IChvciBleHRlbmRlZCBwcml2YXRlIGtleSkgdG8gYmUgdmFsaWRhdGVkXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gLSB0aGUgdmFsaWRhdGlvbiByZXN1bHRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzVmFsaWRQcml2YXRlS2V5KHBydjogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGlmIChpc1ZhbGlkWHBydihwcnYpKSByZXR1cm4gdHJ1ZTtcblxuICBpZiAocHJ2Lmxlbmd0aCAhPT0gNjQgJiYgcHJ2Lmxlbmd0aCAhPT0gNjYpIHJldHVybiBmYWxzZTtcblxuICBpZiAocHJ2Lmxlbmd0aCA9PT0gNjYgJiYgcHJ2LnNsaWNlKDY0KSAhPT0gJzAxJykgcmV0dXJuIGZhbHNlO1xuXG4gIHJldHVybiBhbGxIZXhDaGFycyhwcnYpO1xufVxuXG4vKipcbiAqIFJldHVybnMgd2hldGhlciBvciBub3QgdGhlIHN0cmluZyBpcyBhIGNvbXBvc2VkIG9mIGhleCBjaGFycyBvbmx5XG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG1heWJlIC0gdGhlICBzdHJpbmcgdG8gYmUgdmFsaWRhdGVkXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gLSB0aGUgdmFsaWRhdGlvbiByZXN1bHRcbiAqL1xuZnVuY3Rpb24gYWxsSGV4Q2hhcnMobWF5YmU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gL14oWzAtOWEtZl0pKyQvaS50ZXN0KG1heWJlKTtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgcmF3IHRyYW5zYWN0aW9uIGNhbiBiZSBkZXNlcmlhbGl6ZWRcbiAqXG4gKiBAcGFyYW0ge3Vua25vd259IHJhd1RyYW5zYWN0aW9uIC0gdHJhbnNhY3Rpb24gaW4gcmF3IGhleCBmb3JtYXRcbiAqIEByZXR1cm5zIHtib29sZWFufSAtIHRoZSB2YWxpZGF0aW9uIHJlc3VsdFxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNWYWxpZFJhd1RyYW5zYWN0aW9uKHJhd1RyYW5zYWN0aW9uOiB1bmtub3duKTogYm9vbGVhbiB7XG4gIHRyeSB7XG4gICAgaWYgKHR5cGVvZiByYXdUcmFuc2FjdGlvbiA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGRlc2VyaWFsaXplVHJhbnNhY3Rpb24obmV3IEJ5dGVzUmVhZGVyKHJlbW92ZUhleFByZWZpeChyYXdUcmFuc2FjdGlvbikpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG4vKipcbiAqIFJldHVybnMgd2hldGhlciBvciBub3QgdGhlIG1lbW8gc3RyaW5nIGlzIHZhbGlkXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG1lbW8gLSB0aGUgc3RyaW5nIHRvIGJlIHZhbGlkYXRlZFxuICogQHJldHVybnMge2Jvb2xlYW59IC0gdGhlIHZhbGlkYXRpb24gcmVzdWx0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1ZhbGlkTWVtbyhtZW1vOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgLy8gdjcncyBgY3JlYXRlTWVtb1N0cmluZ2Agb25seSBndWFyZHMgYnl0ZSBsZW5ndGggdmlhIGBleGNlZWRzTWF4TGVuZ3RoQnl0ZXNgLCB3aGljaCAodW5saWtlXG4gIC8vIHYyJ3MgYEJ1ZmZlci5mcm9tKHN0cmluZylgKSBubyBsb25nZXIgdGhyb3dzIG9uIG5vbi1zdHJpbmdzIOKAlCBpdCBzaWxlbnRseSBjb2VyY2VzIHRoZW0uXG4gIC8vIFJlamVjdCBub24tc3RyaW5ncyBleHBsaWNpdGx5IHNvIGEgbm9uLXN0cmluZyBtZW1vIHN0YXlzIGludmFsaWQsIG1hdGNoaW5nIHYyIGJlaGF2aW91ci5cbiAgaWYgKHR5cGVvZiBtZW1vICE9PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB0cnkge1xuICAgIGNyZWF0ZU1lbW9TdHJpbmcobWVtbyk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuLyoqXG4gKiBDaGVja3MgZm9yIHZhbGlkIGNvbnRyYWN0IGFkZHJlc3NcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gYWRkciAtIGNvbnRyYWN0IGRlcGxveWVyIGFkZHJlc3NcbiAqIEBwYXJhbSB7Qml0Z29TdGFja3NOZXR3b3JrfSBuZXR3b3JrIC0gbmV0d29yayBvYmplY3RcbiAqIEByZXR1cm5zIHtib29sZWFufSAtIHRoZSB2YWxpZGF0aW9uIHJlc3VsdFxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNWYWxpZENvbnRyYWN0QWRkcmVzcyhhZGRyOiBzdHJpbmcsIG5ldHdvcms6IEJpdGdvU3RhY2tzTmV0d29yayk6IGJvb2xlYW4ge1xuICByZXR1cm4gKFxuICAgIGFkZHIgPT09IG5ldHdvcmsuc3Rha2luZ0NvbnRyYWN0QWRkcmVzcyB8fFxuICAgIGFkZHIgPT09IG5ldHdvcmsuc2VuZG1hbnltZW1vQ29udHJhY3RBZGRyZXNzIHx8XG4gICAgYWRkciA9PT0gbmV0d29yay5zYnRjV2l0aGRyYXdhbENvbnRyYWN0QWRkcmVzc1xuICApO1xufVxuXG4vKipcbiAqIENoZWNrIGlmIHRoZSBuYW1lIGlzIG9uZSBvZiB2YWxpZCBjb250cmFjdCBuYW1lc1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gZnVuY3Rpb24gbmFtZVxuICogQHJldHVybnMge2Jvb2xlYW59IC0gdmFsaWRhdGlvbiByZXN1bHRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzVmFsaWRDb250cmFjdEZ1bmN0aW9uTmFtZShuYW1lOiBzdHJpbmcsIGNvbnRyYWN0TmFtZT86IHN0cmluZyk6IGJvb2xlYW4ge1xuICBpZiAoY29udHJhY3ROYW1lID09PSBDT05UUkFDVF9OQU1FX1BPWDUpIHtcbiAgICByZXR1cm4gVkFMSURfUE9YNV9DT05UUkFDVF9GVU5DVElPTl9OQU1FUy5pbmNsdWRlcyhuYW1lKTtcbiAgfVxuICBpZiAoY29udHJhY3ROYW1lID09PSBDT05UUkFDVF9OQU1FX1NUQUtJTkcgfHwgY29udHJhY3ROYW1lID09PSBDT05UUkFDVF9OQU1FX1NFTkRNQU5ZKSB7XG4gICAgcmV0dXJuIFZBTElEX0NPTlRSQUNUX0ZVTkNUSU9OX05BTUVTLmluY2x1ZGVzKG5hbWUpICYmICFWQUxJRF9QT1g1X0NPTlRSQUNUX0ZVTkNUSU9OX05BTUVTLmluY2x1ZGVzKG5hbWUpO1xuICB9XG4gIHJldHVybiBWQUxJRF9DT05UUkFDVF9GVU5DVElPTl9OQU1FUy5pbmNsdWRlcyhuYW1lKTtcbn1cblxuLyoqXG4gKiBVbnBhZHMgYSBtZW1vIHN0cmluZywgc28gaXQgcmVtb3ZlcyBudWxscy5cbiAqXG4gKiBVc2VmdWwgd2hlbiBtZW1vIGlzIGZpbGwgdXAgdGhlIGxlbmd0aC4gUmVzdWx0IGlzIGJlY29tZXMgcmVhZGFibGUuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG1lbW8gLSB0aGUgc3RyaW5nIHRvIGJlIHZhbGlkYXRlZFxuICogQHJldHVybnMge2Jvb2xlYW59IC0gdGhlIHZhbGlkYXRpb24gcmVzdWx0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1bnBhZE1lbW8obWVtbzogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgZW5kID0gbWVtby5pbmRleE9mKCdcXHUwMDAwJyk7XG4gIGlmIChlbmQgPCAwKSByZXR1cm4gbWVtbztcbiAgcmV0dXJuIG1lbW8uc2xpY2UoMCwgZW5kKTtcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZSBhIG11bHRpc2lnIGFkZHJlc3MgZnJvbSBtdWx0aXBsZSBTVFggcHVibGljIGtleXNcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBwdWJLZXlzIC0gbGlzdCBvZiBwdWJsaWMga2V5cyBhcyBzdHJpbmdzXG4gKiBAcGFyYW0ge0FkZHJlc3NWZXJzaW9ufSBhZGRyZXNzVmVyc2lvbiAtIE1haW5uZXRNdWx0aVNpZywgVGVzdG5ldE11bHRpU2lnXG4gKiBAcGFyYW0ge0FkZHJlc3NIYXNoTW9kZX0gYWRkcmVzc0hhc2hNb2RlIC0gU2VyaWFsaXplUDJTSFxuICogQHBhcmFtIHtudW1iZXJ9IFtzaWduYXR1cmVzUmVxdWlyZWRdIC0gbnVtYmVyIG9mIHNpZ25hdHVyZXMgcmVxdWlyZWQsIGRlZmF1bHQgdmFsdWUgaXRzIDJcbiAqIEByZXR1cm5zIHthZGRyZXNzOiBzdHJpbmcsIGhhc2gxNjA6IHN0cmluZ30gLSBhIG11bHRpc2lnIGFkZHJlc3NcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFNUWEFkZHJlc3NGcm9tUHViS2V5cyhcbiAgcHViS2V5czogc3RyaW5nW10sXG4gIGFkZHJlc3NWZXJzaW9uOiBBZGRyZXNzVmVyc2lvbiA9IEFkZHJlc3NWZXJzaW9uLk1haW5uZXRNdWx0aVNpZyxcbiAgYWRkcmVzc0hhc2hNb2RlOiBBZGRyZXNzSGFzaE1vZGUgPSBBZGRyZXNzSGFzaE1vZGUuUDJTSCxcbiAgc2lnbmF0dXJlc1JlcXVpcmVkID0gMlxuKTogeyBhZGRyZXNzOiBzdHJpbmc7IGhhc2gxNjA6IHN0cmluZyB9IHtcbiAgaWYgKHB1YktleXMubGVuZ3RoID09PSAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIG51bWJlciBvZiBwdWJsaWMga2V5cycpO1xuICB9XG4gIGlmICghcHViS2V5cy5ldmVyeShpc1ZhbGlkUHVibGljS2V5KSkge1xuICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBwdWJsaWMga2V5cycpO1xuICB9XG4gIGlmIChzaWduYXR1cmVzUmVxdWlyZWQgPiBwdWJLZXlzLmxlbmd0aCkge1xuICAgIHRocm93IG5ldyBFcnJvcignTnVtYmVyIG9mIHNpZ25hdHVyZXMgcmVxdWlyZWQgbXVzdCBiZSBsb3dlciBvciBlcXVhbCB0byB0aGUgbnVtYmVyIG9mIFB1YmxpYyBLZXlzJyk7XG4gIH1cblxuICBjb25zdCBzdHhQdWJLZXlzID0gcHViS2V5cy5tYXAoY3JlYXRlU3RhY2tzUHVibGljS2V5KTtcbiAgY29uc3QgYWRkcmVzcyA9IGFkZHJlc3NGcm9tUHVibGljS2V5cyhhZGRyZXNzVmVyc2lvbiwgYWRkcmVzc0hhc2hNb2RlLCBzaWduYXR1cmVzUmVxdWlyZWQsIHN0eFB1YktleXMpO1xuXG4gIHJldHVybiB7IGFkZHJlc3M6IGFkZHJlc3NUb1N0cmluZyhhZGRyZXNzKSwgaGFzaDE2MDogYWRkcmVzcy5oYXNoMTYwIH07XG59XG5cbi8qKlxuICogc2lnbnMgYSBzdHJpbmcgbWVzc2FnZVxuICpcbiAqIEBwYXJhbSBrZXlQYWlyXG4gKiBAcGFyYW0gZGF0YSAgLSBtZXNzYWdlIHRvIGJlIHNpZ25lZFxuICogQHJldHVybnMgc2lnbmVkIG1lc3NhZ2Ugc3RyaW5nXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzaWduTWVzc2FnZShrZXlQYWlyOiBLZXlQYWlyLCBkYXRhOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBwcnYgPSBrZXlQYWlyLmdldEtleXMoKS5wcnY7XG4gIGlmIChwcnYpIHtcbiAgICByZXR1cm4gc2lnbldpdGhLZXkocHJ2LCBCdWZmZXIuZnJvbShkYXRhKS50b1N0cmluZygnaGV4JykpO1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBTaWduaW5nRXJyb3IoJ01pc3NpbmcgcHJpdmF0ZSBrZXknKTtcbiAgfVxufVxuXG4vKipcbiAqIFZlcmlmaWVzIGEgc2lnbmVkIG1lc3NhZ2VcbiAqXG4gKiBUaGUgc2lnbmF0dXJlIG11c3QgYmUgMTMwIGJ5dGVzIGxvbmcgLS0gc2VlIFJFQ09WRVJBQkxFX0VDRFNBX1NJR19MRU5HVEhfQllURVNcbiAqIGluIEBzdGFja3MvdHJhbnNhY3Rpb25zL3NyYy9jb25zdGFudHMudHNcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZSAtIG1lc3NhZ2UgdG8gdmVyaWZ5IHRoZSBzaWduYXR1cmVcbiAqIEBwYXJhbSB7c3RyaW5nfSBzaWduYXR1cmUgLSBzaWduYXR1cmUgdG8gdmVyaWZ5XG4gKiBAcGFyYW0ge3N0cmluZ30gcHVibGljS2V5IC0gcHVibGljIGtleSBhcyBoZXggc3RyaW5nIHVzZWQgdG8gdmVyaWZ5IHRoZSBzaWduYXR1cmVcbiAqIEByZXR1cm5zIHtib29sZWFufSAtIHZlcmlmaWNhdGlvbiByZXN1bHRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZlcmlmeVNpZ25hdHVyZShtZXNzYWdlOiBzdHJpbmcsIHNpZ25hdHVyZTogc3RyaW5nLCBwdWJsaWNLZXk6IHN0cmluZyk6IGJvb2xlYW4ge1xuICBpZiAoIWlzVmFsaWRQdWJsaWNLZXkocHVibGljS2V5KSkgcmV0dXJuIGZhbHNlO1xuICBpZiAoc2lnbmF0dXJlLmxlbmd0aCAhPT0gMTMwKSByZXR1cm4gZmFsc2U7XG4gIGlmICghYWxsSGV4Q2hhcnMoc2lnbmF0dXJlKSkgdGhyb3cgbmV3IFV0aWxzRXJyb3IoJ0ludmFsaWQgc2lnbmF0dXJlIGlucHV0IHRvIHZlcmlmeVNpZ25hdHVyZScpO1xuICBpZiAoXy5pc0VtcHR5KG1lc3NhZ2UpKSB0aHJvdyBuZXcgVXRpbHNFcnJvcignQ2Fubm90IHZlcmlmeSBlbXB0eSBtZXNzYWdlcycpO1xuXG4gIC8vIHByb3ZpZGVkIHB1YmxpY0tleSBjYW4gYmUgY29tcHJlc3NlZCBvciB1bmNvbXByZXNzZWRcbiAgY29uc3Qga2V5RW5jb2RpbmcgPSBwdWJsaWNLZXkubGVuZ3RoID09PSA2NiA/IFB1YktleUVuY29kaW5nLkNvbXByZXNzZWQgOiBQdWJLZXlFbmNvZGluZy5VbmNvbXByZXNzZWQ7XG5cbiAgY29uc3QgZm91bmRLZXkgPSBwdWJsaWNLZXlGcm9tU2lnbmF0dXJlVnJzKEJ1ZmZlci5mcm9tKG1lc3NhZ2UpLnRvU3RyaW5nKCdoZXgnKSwgc2lnbmF0dXJlLCBrZXlFbmNvZGluZyk7XG5cbiAgcmV0dXJuIGZvdW5kS2V5ID09PSBwdWJsaWNLZXk7XG59XG5cbi8qKlxuICogUHJvY2VzcyBhZGRyZXNzIGludG8gYWRkcmVzcyBhbmQgbWVtbyBpZFxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBhZGRyZXNzIHRoZSBhZGRyZXNzIHRvIHByb2Nlc3NcbiAqIEByZXR1cm5zIHtPYmplY3R9IG9iamVjdCBjb250YWluaW5nIGFkZHJlc3MgYW5kIG1lbW8gaWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEFkZHJlc3NEZXRhaWxzKGFkZHJlc3M6IHN0cmluZyk6IEFkZHJlc3NEZXRhaWxzIHtcbiAgY29uc3QgYWRkcmVzc0RldGFpbHMgPSB1cmwucGFyc2UoYWRkcmVzcyk7XG4gIGNvbnN0IHF1ZXJ5RGV0YWlscyA9IGFkZHJlc3NEZXRhaWxzLnF1ZXJ5ID8gbmV3IFVSTFNlYXJjaFBhcmFtcyhhZGRyZXNzRGV0YWlscy5xdWVyeSkgOiB1bmRlZmluZWQ7XG4gIGNvbnN0IGJhc2VBZGRyZXNzID0gYWRkcmVzc0RldGFpbHMucGF0aG5hbWUgYXMgc3RyaW5nO1xuICBpZiAoIWlzVmFsaWRBZGRyZXNzKGJhc2VBZGRyZXNzKSkge1xuICAgIHRocm93IG5ldyBVdGlsc0Vycm9yKGBpbnZhbGlkIGFkZHJlc3M6ICR7YWRkcmVzc31gKTtcbiAgfVxuICAvLyBhZGRyZXNzIGRvZXNuJ3QgaGF2ZSBhIG1lbW8gaWRcbiAgaWYgKGJhc2VBZGRyZXNzID09PSBhZGRyZXNzKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGFkZHJlc3M6IGFkZHJlc3MsXG4gICAgICBtZW1vSWQ6IHVuZGVmaW5lZCxcbiAgICB9O1xuICB9XG5cbiAgaWYgKCFxdWVyeURldGFpbHMgfHwgXy5pc05pbChxdWVyeURldGFpbHMuZ2V0KCdtZW1vSWQnKSkpIHtcbiAgICAvLyBpZiB0aGVyZSBhcmUgbW9yZSBwcm9wZXJ0aWVzLCB0aGUgcXVlcnkgZGV0YWlscyBuZWVkIHRvIGNvbnRhaW4gdGhlIG1lbW8gaWQgcHJvcGVydHlcbiAgICB0aHJvdyBuZXcgVXRpbHNFcnJvcihgaW52YWxpZCBhZGRyZXNzIHdpdGggbWVtbyBpZDogJHthZGRyZXNzfWApO1xuICB9XG4gIGNvbnN0IG1lbW9JZCA9IHF1ZXJ5RGV0YWlscy5nZXQoJ21lbW9JZCcpIGFzIHN0cmluZztcbiAgY29uc3QgaW50TWVtb0lkID0gcGFyc2VJbnQobWVtb0lkLCAxMCk7XG4gIGlmIChpc05hTihpbnRNZW1vSWQpIHx8IGludE1lbW9JZCA8IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYGludmFsaWQgbWVtbyBpZDogJHttZW1vSWR9YCk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGFkZHJlc3M6IGJhc2VBZGRyZXNzLFxuICAgIG1lbW9JZCxcbiAgfTtcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZSBhbmQgcmV0dXJuIGFkZHJlc3Mgd2l0aCBhcHBlbmRlZCBtZW1vIGlkXG4gKlxuICogQHBhcmFtIHtBZGRyZXNzRGV0YWlsc30gYWRkcmVzc0RldGFpbHNcbiAqIEByZXR1cm5zIHtzdHJpbmd9IGFkZHJlc3Mgd2l0aCBtZW1vIGlkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVBZGRyZXNzKHsgYWRkcmVzcywgbWVtb0lkIH06IEFkZHJlc3NEZXRhaWxzKTogc3RyaW5nIHtcbiAgaWYgKCFpc1ZhbGlkQWRkcmVzcyhhZGRyZXNzKSkge1xuICAgIHRocm93IG5ldyBVdGlsc0Vycm9yKGBpbnZhbGlkIGFkZHJlc3M6ICR7YWRkcmVzc31gKTtcbiAgfVxuICBpZiAoIV8uaXNVbmRlZmluZWQobWVtb0lkKSkge1xuICAgIGNvbnN0IGludE1lbW9JZCA9IHBhcnNlSW50KG1lbW9JZCwgMTApO1xuICAgIGlmIChpc05hTihpbnRNZW1vSWQpIHx8IGludE1lbW9JZCA8IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgaW52YWxpZCBtZW1vIGlkOiAke21lbW9JZH1gKTtcbiAgICB9XG4gICAgcmV0dXJuIGAke2FkZHJlc3N9P21lbW9JZD0ke21lbW9JZH1gO1xuICB9XG4gIHJldHVybiBhZGRyZXNzO1xufVxuXG4vKipcbiAqIFJldHVybiBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciBpbnB1dCBpcyBhIHZhbGlkIGFkZHJlc3Mgd2l0aCBtZW1vIGlkXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGFkZHJlc3MgYWRkcmVzcyBpbiB0aGUgZm9ybSA8YWRkcmVzcz4/bWVtb0lkPTxtZW1vSWQ+XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gdHJ1ZSBpcyBpbnB1dCBpcyBhIHZhbGlkIGFkZHJlc3NcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzVmFsaWRBZGRyZXNzV2l0aFBheW1lbnRJZChhZGRyZXNzOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBhZGRyZXNzRGV0YWlscyA9IGdldEFkZHJlc3NEZXRhaWxzKGFkZHJlc3MpO1xuICAgIHJldHVybiBhZGRyZXNzID09PSBub3JtYWxpemVBZGRyZXNzKGFkZHJlc3NEZXRhaWxzKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG4vKipcbiAqIFJldHVybiBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgY2xhcml0eSB2YWx1ZSBpbnB1dFxuICpcbiAqIEBwYXJhbSB7Q2xhcml0eVZhbHVlfSBjdiBjbGFyaXR5IHZhbHVlIGZ1bmN0aW9uIGFyZ3VtZW50XG4gKiBAcmV0dXJucyB7U3RyaW5nfSBzdHJpbmdpZmllZCBjbGFyaXR5IHZhbHVlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdHJpbmdpZnlDdihjdjogQ2xhcml0eVZhbHVlKTogYW55IHtcbiAgc3dpdGNoIChjdi50eXBlKSB7XG4gICAgY2FzZSBDbGFyaXR5VHlwZS5JbnQ6XG4gICAgY2FzZSBDbGFyaXR5VHlwZS5VSW50OlxuICAgICAgcmV0dXJuIHsgdHlwZTogY3YudHlwZSwgdmFsdWU6IGN2LnZhbHVlLnRvU3RyaW5nKCkgfTtcbiAgICBjYXNlIENsYXJpdHlUeXBlLk9wdGlvbmFsU29tZTpcbiAgICAgIHJldHVybiB7IHR5cGU6IGN2LnR5cGUsIHZhbHVlOiBzdHJpbmdpZnlDdihjdi52YWx1ZSkgfTtcbiAgICAvLyBSZXNwb25zZU9rL1Jlc3BvbnNlRXJyIHdyYXAgYSBDbGFyaXR5VmFsdWUgKGUuZy4gcmVnaXN0ZXItZm9yLWJvbmQncyBsb2NrdXAgdHVwbGUvbGlzdCkuXG4gICAgLy8gV2l0aG91dCB0aGVzZSBjYXNlcyB0aGUgaW5uZXIgaW50cyByZWFjaCBgdG9Kc29uKClgIGFzIG5hdGl2ZSBCaWdJbnQsIHdoaWNoIEpTT04uc3RyaW5naWZ5XG4gICAgLy8gcmVqZWN0cyDigJQgbWFraW5nIHRoZSBwYXlsb2FkIHVuc2VyaWFsaXNhYmxlIGZvciBjb25zdW1lcnMgc3VjaCBhcyB0aGUgcG9saWN5IHNlcnZpY2UgKFNJLTE5MjIpLlxuICAgIGNhc2UgQ2xhcml0eVR5cGUuUmVzcG9uc2VPazpcbiAgICBjYXNlIENsYXJpdHlUeXBlLlJlc3BvbnNlRXJyOlxuICAgICAgcmV0dXJuIHsgdHlwZTogY3YudHlwZSwgdmFsdWU6IHN0cmluZ2lmeUN2KGN2LnZhbHVlKSB9O1xuICAgIGNhc2UgQ2xhcml0eVR5cGUuVHVwbGU6XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiBjdi50eXBlLFxuICAgICAgICBkYXRhOiBfLm1hcFZhbHVlcyhjdi52YWx1ZSwgKHZhbHVlKSA9PiBzdHJpbmdpZnlDdih2YWx1ZSkpLFxuICAgICAgfTtcbiAgICBjYXNlIENsYXJpdHlUeXBlLkxpc3Q6XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiBjdi50eXBlLFxuICAgICAgICBsaXN0OiBjdi52YWx1ZS5tYXAoc3RyaW5naWZ5Q3YpLFxuICAgICAgfTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGN2O1xuICB9XG59XG5cbi8qKlxuICogUGFyc2UgZnVuY3Rpb25BcmdzIGludG8gc2VuZCBwYXJhbXMgZm9yIHNlbmQtbWFueS1tZW1vIGNvbnRyYWN0IGNhbGxzXG4gKlxuICogQHBhcmFtIHtDbGFyaXR5VmFsdWVbXX0gYXJncyBmdW5jdGlvbkFyZ3MgZnJvbSBhIGNvbnRyYWN0IGNhbGwgcGF5bG9hZFxuICogQHJldHVybnMge1NlbmRQYXJhbXNbXX0gQW4gYXJyYXkgb2Ygc2VuZFBhcmFtc1xuICovXG5leHBvcnQgZnVuY3Rpb24gZnVuY3Rpb25BcmdzVG9TZW5kUGFyYW1zKGFyZ3M6IENsYXJpdHlWYWx1ZVtdKTogU2VuZFBhcmFtc1tdIHtcbiAgaWYgKGFyZ3MubGVuZ3RoICE9PSAxIHx8IGFyZ3NbMF0udHlwZSAhPT0gQ2xhcml0eVR5cGUuTGlzdCkge1xuICAgIHRocm93IG5ldyBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvcihcImZ1bmN0aW9uIGFyZ3MgZG9uJ3QgbWF0Y2ggc2VuZC1tYW55LW1lbW8gdHlwZSBkZWNsYXJhdGlvblwiKTtcbiAgfVxuICByZXR1cm4gYXJnc1swXS52YWx1ZS5tYXAoKHR1cGxlKSA9PiB7XG4gICAgaWYgKFxuICAgICAgdHVwbGUudHlwZSAhPT0gQ2xhcml0eVR5cGUuVHVwbGUgfHxcbiAgICAgIHR1cGxlLnZhbHVlLnRvPy50eXBlICE9PSBDbGFyaXR5VHlwZS5QcmluY2lwYWxTdGFuZGFyZCB8fFxuICAgICAgdHVwbGUudmFsdWUudXN0eD8udHlwZSAhPT0gQ2xhcml0eVR5cGUuVUludCB8fFxuICAgICAgdHVwbGUudmFsdWUubWVtbz8udHlwZSAhPT0gQ2xhcml0eVR5cGUuQnVmZmVyXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IoXCJmdW5jdGlvbiBhcmdzIGRvbid0IG1hdGNoIHNlbmQtbWFueS1tZW1vIHR5cGUgZGVjbGFyYXRpb25cIik7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBhZGRyZXNzOiBjdlRvU3RyaW5nKHR1cGxlLnZhbHVlLnRvKSxcbiAgICAgIGFtb3VudDogY3ZUb1ZhbHVlKHR1cGxlLnZhbHVlLnVzdHgsIHRydWUpLFxuICAgICAgbWVtbzogQnVmZmVyLmZyb20odHVwbGUudmFsdWUubWVtby52YWx1ZSwgJ2hleCcpLnRvU3RyaW5nKCdhc2NpaScpLFxuICAgIH07XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZnVuY3Rpb25BcmdzVG9Ub2tlblRyYW5zZmVyUGFyYW1zKGFyZ3M6IENsYXJpdHlWYWx1ZVtdKTogVG9rZW5UcmFuc2ZlclBhcmFtcyB7XG4gIGlmIChhcmdzLmxlbmd0aCA8IDMpIHtcbiAgICB0aHJvdyBuZXcgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IoXCJmdW5jdGlvbiBhcmdzIGRvbid0IG1hdGNoIHRva2VuIHRyYW5zZmVyIGRlY2xhcmF0aW9uXCIpO1xuICB9XG4gIGlmIChcbiAgICBhcmdzWzBdLnR5cGUgIT09IENsYXJpdHlUeXBlLlVJbnQgfHxcbiAgICBhcmdzWzFdLnR5cGUgIT09IENsYXJpdHlUeXBlLlByaW5jaXBhbFN0YW5kYXJkIHx8XG4gICAgYXJnc1syXS50eXBlICE9PSBDbGFyaXR5VHlwZS5QcmluY2lwYWxTdGFuZGFyZFxuICApIHtcbiAgICB0aHJvdyBuZXcgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IoXCJmdW5jdGlvbiBhcmdzIGRvbid0IG1hdGNoIHRva2VuIHRyYW5zZmVyIGRlY2xhcmF0aW9uXCIpO1xuICB9XG4gIGNvbnN0IHRva2VuVHJhbnNmZXJQYXJhbXMgPSB7XG4gICAgYW1vdW50OiBjdlRvVmFsdWUoYXJnc1swXSwgdHJ1ZSksXG4gICAgc2VuZGVyOiBjdlRvU3RyaW5nKGFyZ3NbMV0pLFxuICAgIHJlY2lwaWVudDogY3ZUb1N0cmluZyhhcmdzWzJdKSxcbiAgfTtcbiAgaWYgKGFyZ3MubGVuZ3RoID09PSA0ICYmIGFyZ3NbM10udHlwZSA9PT0gQ2xhcml0eVR5cGUuQnVmZmVyKSB7XG4gICAgdG9rZW5UcmFuc2ZlclBhcmFtc1snbWVtbyddID0gQnVmZmVyLmZyb20oYXJnc1szXS52YWx1ZSwgJ2hleCcpLnRvU3RyaW5nKCdhc2NpaScpO1xuICB9XG4gIHJldHVybiB0b2tlblRyYW5zZmVyUGFyYW1zO1xufVxuXG4vKipcbiAqIEdldHMgdGhlIHZlcnNpb24gb2YgYW4gYWRkcmVzc1xuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBhZGRyZXNzIHRoZSBhZGRyZXNzIHdpdGggb3Igd2l0aG91dCB0aGUgbWVtb0lkXG4gKiBAcmV0dXJucyB7QWRkcmVzc1ZlcnNpb259IEEgbnVtYmVyIHRoYXQgcmVwcmVzZW50IHRoZSBBZGRyZXNzIFZlcnNpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEFkZHJlc3NWZXJzaW9uKGFkZHJlc3M6IHN0cmluZyk6IEFkZHJlc3NWZXJzaW9uIHtcbiAgY29uc3QgYmFzZUFkZHJlc3MgPSBnZXRBZGRyZXNzRGV0YWlscyhhZGRyZXNzKS5hZGRyZXNzO1xuICByZXR1cm4gY3JlYXRlQWRkcmVzcyhiYXNlQWRkcmVzcykudmVyc2lvbjtcbn1cblxuLyoqXG4gKiBFbmNvZGUgYSBTdGFja3MgKnN0YW5kYXJkKiBwcmluY2lwYWwgYXMgdGhlIENsYXJpdHkgU0lQLTAwNSBoZXggd2lyZSBmb3JtYXRcbiAqIOKAlCBhIDIyLWJ5dGUgYmxvYjpcbiAqXG4gKiAgICAgYDB4MDVgIHx8IHZlcnNpb24gKDEgYnl0ZSkgfHwgaGFzaDE2MCAoMjAgYnl0ZXMpXG4gKlxuICogQ29udHJhY3QgcHJpbmNpcGFscyAoYDxhZGRyZXNzPi48Y29udHJhY3QtbmFtZT5gKSBhbmQgYWRkcmVzc2VzIHdpdGggYVxuICogYD9tZW1vSWQ94oCmYCBzdWZmaXggYXJlIHJlamVjdGVkLiBUaGUgQ2xhcml0eSB0eXBlIGJ5dGUgKGAweDA1YCkgaXMgc2V0XG4gKiBieSBgc2VyaWFsaXplQ1ZgIGZyb20gYEBzdGFja3MvdHJhbnNhY3Rpb25zYCwgc28gdGhpcyBoZWxwZXIgZG9lcyBub3RcbiAqIGhhbmQtcm9sbCBhbnkgYnl0ZSBjb25jYXRlbmF0aW9uLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBwcmluY2lwYWwgYSBTdGFja3Mgc3RhbmRhcmQgcHJpbmNpcGFsIChlLmcuIGBTUOKApmAgLyBgU1TigKZgKVxuICogQHJldHVybnMge3N0cmluZ30gaGV4LWVuY29kZWQgMjItYnl0ZSBDbGFyaXR5IHN0YW5kYXJkIHByaW5jaXBhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RW5jb2RlZFByaW5jaXBhbChwcmluY2lwYWw6IHN0cmluZyk6IHN0cmluZyB7XG4gIGlmIChwcmluY2lwYWwuaW5jbHVkZXMoJz8nKSkge1xuICAgIHRocm93IG5ldyBVdGlsc0Vycm9yKGBwcmluY2lwYWwgbXVzdCBub3QgaW5jbHVkZSBhIHF1ZXJ5IHN0cmluZzogJHtwcmluY2lwYWx9YCk7XG4gIH1cbiAgaWYgKHByaW5jaXBhbC5pbmNsdWRlcygnLicpKSB7XG4gICAgdGhyb3cgbmV3IFV0aWxzRXJyb3IoYGNvbnRyYWN0IHByaW5jaXBhbHMgYXJlIG5vdCBzdXBwb3J0ZWQsIGV4cGVjdGVkIGEgc3RhbmRhcmQgcHJpbmNpcGFsOiAke3ByaW5jaXBhbH1gKTtcbiAgfVxuICBpZiAoIWlzVmFsaWRBZGRyZXNzKHByaW5jaXBhbCkpIHtcbiAgICB0aHJvdyBuZXcgVXRpbHNFcnJvcihgaW52YWxpZCBTdGFja3MgYWRkcmVzcyBpbiBwcmluY2lwYWw6ICR7cHJpbmNpcGFsfWApO1xuICB9XG4gIHJldHVybiBzZXJpYWxpemVDVihzdGFuZGFyZFByaW5jaXBhbENWKHByaW5jaXBhbCkpO1xufVxuXG4vKipcbiAqIFJldHVybnMgYSBTVFggcHViIGtleSBmcm9tIGFuIHhwdWJcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30geHB1YiBhbiB4cHViXG4gKiBAcmV0dXJucyB7U3RyaW5nfSBhIGNvbXByZXNzZWQgU1RYIHB1YiBrZXlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHhwdWJUb1NUWFB1YmtleSh4cHViOiBzdHJpbmcsIGNvbXByZXNzZWQgPSB0cnVlKTogc3RyaW5nIHtcbiAgcmV0dXJuIG5ldyBLZXlQYWlyKHsgcHViOiB4cHViIH0pLmdldEtleXMoY29tcHJlc3NlZCkucHViO1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIGJhc2UgYWRkcmVzcyBwb3J0aW9uIG9mIGFuIGFkZHJlc3NcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gYWRkcmVzcyAtIGFuIGFkZHJlc3NcbiAqIEByZXR1cm5zIHtTdHJpbmd9IC0gdGhlIGJhc2UgYWRkcmVzc1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0QmFzZUFkZHJlc3MoYWRkcmVzczogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgYWRkcmVzc0RldGFpbHMgPSBnZXRBZGRyZXNzRGV0YWlscyhhZGRyZXNzKTtcbiAgcmV0dXJuIGFkZHJlc3NEZXRhaWxzLmFkZHJlc3M7XG59XG5cbi8qKlxuICogQ29tcGFyZXMgYW4gYWRkcmVzcyB0byB0aGUgYmFzZSBhZGRyZXNzIHRvIGNoZWNrIGlmIG1hdGNocy5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gYWRkcmVzcyAtIGFuIGFkZHJlc3NcbiAqIEBwYXJhbSB7U3RyaW5nfSBiYXNlQWRkcmVzcyAtIGEgYmFzZSBhZGRyZXNzXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzU2FtZUJhc2VBZGRyZXNzKGFkZHJlc3M6IHN0cmluZywgYmFzZUFkZHJlc3M6IHN0cmluZyk6IGJvb2xlYW4ge1xuICBpZiAoIWlzVmFsaWRBZGRyZXNzV2l0aFBheW1lbnRJZChhZGRyZXNzKSkge1xuICAgIHRocm93IG5ldyBVdGlsc0Vycm9yKGBpbnZhbGlkIGFkZHJlc3M6ICR7YWRkcmVzc31gKTtcbiAgfVxuICByZXR1cm4gZ2V0QmFzZUFkZHJlc3MoYWRkcmVzcykgPT09IGdldEJhc2VBZGRyZXNzKGJhc2VBZGRyZXNzKTtcbn1cblxuLyoqXG4gKiBGdW5jdGlvbiB0byBnZXQgdG9rZW5OYW1lIGZyb20gbGlzdCBvZiBzaXAxMCB0b2tlbnMgdXNpbmcgY29udHJhY3QgZGV0YWlsc1xuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBjb250cmFjdEFkZHJlc3NcbiAqIEBwYXJhbSB7U3RyaW5nfSBjb250cmFjdE5hbWVcbiAqIEByZXR1cm5zIHtTdHJpbmd8VW5kZWZpbmVkfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZmluZFRva2VuTmFtZUJ5Q29udHJhY3QoY29udHJhY3RBZGRyZXNzOiBzdHJpbmcsIGNvbnRyYWN0TmFtZTogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAge1xuICAgIGNvbnN0IHRva2VuTmFtZSA9IGNvaW5zXG4gICAgICAuZmlsdGVyKChjb2luKSA9PiBjb2luIGluc3RhbmNlb2YgU2lwMTBUb2tlbiAmJiBjb2luLmFzc2V0SWQuaW5jbHVkZXMoYCR7Y29udHJhY3RBZGRyZXNzfS4ke2NvbnRyYWN0TmFtZX1gKSlcbiAgICAgIC5tYXAoKGNvaW4pID0+IGNvaW4ubmFtZSk7XG4gICAgcmV0dXJuIHRva2VuTmFtZS5sZW5ndGggPiAwID8gdG9rZW5OYW1lWzBdIDogdW5kZWZpbmVkO1xuICB9XG59XG5cbi8qKlxuICogRnVuY3Rpb24gdG8gZ2V0IGNvbnRyYWN0VG9rZW5OYW1lIGZyb20gbGlzdCBvZiBzaXAxMCB0b2tlbnMgdXNpbmcgY29udHJhY3QgZGV0YWlsc1xuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBjb250cmFjdEFkZHJlc3NcbiAqIEBwYXJhbSB7U3RyaW5nfSBjb250cmFjdE5hbWVcbiAqIEByZXR1cm5zIHtTdHJpbmd8VW5kZWZpbmVkfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZmluZENvbnRyYWN0VG9rZW5OYW1lVXNpbmdDb250cmFjdChjb250cmFjdEFkZHJlc3M6IHN0cmluZywgY29udHJhY3ROYW1lOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICB7XG4gICAgY29uc3Qgc2lwMTBUb2tlbiA9IGNvaW5zXG4gICAgICAuZmlsdGVyKChjb2luKSA9PiBjb2luIGluc3RhbmNlb2YgU2lwMTBUb2tlbiAmJiBjb2luLmFzc2V0SWQuaW5jbHVkZXMoYCR7Y29udHJhY3RBZGRyZXNzfS4ke2NvbnRyYWN0TmFtZX1gKSlcbiAgICAgIC5tYXAoKGNvaW4pID0+IGNvaW4gYXMgU2lwMTBUb2tlbik7XG4gICAgcmV0dXJuIHNpcDEwVG9rZW4ubGVuZ3RoID4gMCA/IHNpcDEwVG9rZW5bMF0uYXNzZXRJZC5zcGxpdCgnOjonKVsxXSA6IHVuZGVmaW5lZDtcbiAgfVxufVxuXG4vKipcbiAqIEZ1bmN0aW9uIHRvIGdldCBhZGRyZXNzIGFuZCBtZW1vIGRldGFpbHMgZnJvbSBhZGRyZXNzIGlucHV0XG4gKlxuICogQHBhcmFtIGFkZHJlc3NcbiAqIEByZXR1cm5zIHtBZGRyZXNzRGV0YWlsc31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldE1lbW9JZEFuZEJhc2VBZGRyZXNzRnJvbUFkZHJlc3MoYWRkcmVzczogc3RyaW5nKTogQWRkcmVzc0RldGFpbHMge1xuICBjb25zdCBbYmFzZUFkZHJlc3MsIHF1ZXJ5U3RyaW5nXSA9IGFkZHJlc3Muc3BsaXQoJz8nKTtcbiAgY29uc3QgcGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcyhxdWVyeVN0cmluZyk7XG4gIGNvbnN0IG1lbW9JZCA9IHBhcmFtcy5nZXQoJ21lbW9JZCcpO1xuXG4gIHJldHVybiB7XG4gICAgYWRkcmVzczogYmFzZUFkZHJlc3MsXG4gICAgbWVtb0lkOiBtZW1vSWQgPyBtZW1vSWQgOiB1bmRlZmluZWQsXG4gIH07XG59XG4iXX0=
|
package/dist/src/stx.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stx.d.ts","sourceRoot":"","sources":["../../src/stx.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,uBAAuB,EACvB,QAAQ,EACR,eAAe,EACf,SAAS,EAKT,OAAO,EAEP,YAAY,EAEZ,iBAAiB,EAKjB,oBAAoB,EACpB,wBAAwB,EACzB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,QAAQ,IAAI,eAAe,EAAE,UAAU,EAAS,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"stx.d.ts","sourceRoot":"","sources":["../../src/stx.ts"],"names":[],"mappings":"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"}
|