@bitgo/sdk-core 26.16.0 → 27.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/CHANGELOG.md +14 -0
- package/dist/src/bitgo/keychain/iKeychains.d.ts +1 -0
- package/dist/src/bitgo/keychain/iKeychains.d.ts.map +1 -1
- package/dist/src/bitgo/keychain/iKeychains.js +1 -1
- package/dist/src/bitgo/keychain/keychains.d.ts.map +1 -1
- package/dist/src/bitgo/keychain/keychains.js +4 -1
- package/dist/src/bitgo/tss/common.d.ts +35 -5
- package/dist/src/bitgo/tss/common.d.ts.map +1 -1
- package/dist/src/bitgo/tss/common.js +67 -7
- package/dist/src/bitgo/tss/ecdsa/ecdsa.d.ts +5 -2
- package/dist/src/bitgo/tss/ecdsa/ecdsa.d.ts.map +1 -1
- package/dist/src/bitgo/tss/ecdsa/ecdsa.js +11 -9
- package/dist/src/bitgo/tss/eddsa/eddsa.d.ts +7 -3
- package/dist/src/bitgo/tss/eddsa/eddsa.d.ts.map +1 -1
- package/dist/src/bitgo/tss/eddsa/eddsa.js +10 -7
- package/dist/src/bitgo/utils/tss/baseTSSUtils.d.ts +6 -3
- package/dist/src/bitgo/utils/tss/baseTSSUtils.d.ts.map +1 -1
- package/dist/src/bitgo/utils/tss/baseTSSUtils.js +13 -5
- package/dist/src/bitgo/utils/tss/ecdsa/ecdsa.d.ts +3 -1
- package/dist/src/bitgo/utils/tss/ecdsa/ecdsa.d.ts.map +1 -1
- package/dist/src/bitgo/utils/tss/ecdsa/ecdsa.js +10 -9
- package/dist/src/bitgo/utils/tss/ecdsa/ecdsaMPCv2.d.ts.map +1 -1
- package/dist/src/bitgo/utils/tss/ecdsa/ecdsaMPCv2.js +6 -7
- package/dist/src/bitgo/utils/tss/eddsa/eddsa.d.ts +2 -1
- package/dist/src/bitgo/utils/tss/eddsa/eddsa.d.ts.map +1 -1
- package/dist/src/bitgo/utils/tss/eddsa/eddsa.js +13 -13
- package/dist/src/bitgo/wallet/iWallet.d.ts +1 -0
- package/dist/src/bitgo/wallet/iWallet.d.ts.map +1 -1
- package/dist/src/bitgo/wallet/iWallet.js +1 -1
- package/dist/src/bitgo/wallet/wallet.d.ts.map +1 -1
- package/dist/src/bitgo/wallet/wallet.js +14 -9
- package/dist/src/bitgo/wallet/wallets.d.ts.map +1 -1
- package/dist/src/bitgo/wallet/wallets.js +3 -2
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +5 -5
|
@@ -8,6 +8,7 @@ import { KShare, MUShare, SignConvertStep2Response, SShare } from '../../../acco
|
|
|
8
8
|
import * as pgp from 'openpgp';
|
|
9
9
|
import { ApiKeyShare } from '../../keychain';
|
|
10
10
|
import { Hash } from 'crypto';
|
|
11
|
+
import { IRequestTracer } from '../../../api';
|
|
11
12
|
/**
|
|
12
13
|
* Combines NShares to combine the final TSS key
|
|
13
14
|
* This can only be used to create the User or Backup key since it requires the common keychain from BitGo first
|
|
@@ -64,18 +65,20 @@ export declare type MuDShare = {
|
|
|
64
65
|
* @param privateShareProof - the uSig of the share
|
|
65
66
|
* @param publicShare - the y value of the share
|
|
66
67
|
* @param userPublicGpgKey - the public key of the gpg key used for creating the privateShareProof
|
|
68
|
+
* @param reqId - request tracer request id
|
|
67
69
|
* @returns {Promise<SignatureShareRecord>} - a Signature Share
|
|
68
70
|
*/
|
|
69
|
-
export declare function sendShareToBitgo(bitgo: BitGoBase, walletId: string, txRequestId: string, requestType: RequestType, shareType: SendShareType, share: SShare | MuDShare | KShare, signerShare?: string, vssProof?: string, privateShareProof?: string, publicShare?: string, userPublicGpgKey?: string): Promise<SendShareToBitgoRT>;
|
|
71
|
+
export declare function sendShareToBitgo(bitgo: BitGoBase, walletId: string, txRequestId: string, requestType: RequestType, shareType: SendShareType, share: SShare | MuDShare | KShare, signerShare?: string, vssProof?: string, privateShareProof?: string, publicShare?: string, userPublicGpgKey?: string, reqId?: IRequestTracer): Promise<SendShareToBitgoRT>;
|
|
70
72
|
/**
|
|
71
73
|
* Gets the latest user's share from bitgo needed to continue signing flow
|
|
72
74
|
* @param {BitGoBase} bitgo - the bitgo instance
|
|
73
75
|
* @param {String} walletId - the wallet id *
|
|
74
76
|
* @param {String} txRequestId - the txRequest Id
|
|
75
77
|
* @param {ReceivedShareType} shareType - the excpected share type
|
|
78
|
+
* @param {IRequestTracer} reqId - request tracer request id
|
|
76
79
|
* @returns {Promise<SendShareToBitgoRT>} - share from bitgo to user
|
|
77
80
|
*/
|
|
78
|
-
export declare function getBitgoToUserLatestShare(bitgo: BitGoBase, walletId: string, txRequestId: string, shareType: ReceivedShareType, requestType: RequestType): Promise<SendShareToBitgoRT>;
|
|
81
|
+
export declare function getBitgoToUserLatestShare(bitgo: BitGoBase, walletId: string, txRequestId: string, shareType: ReceivedShareType, requestType: RequestType, reqId?: IRequestTracer): Promise<SendShareToBitgoRT>;
|
|
79
82
|
/**
|
|
80
83
|
* Prepares a NShare to be exchanged with other key holders.
|
|
81
84
|
* Output is in a format that is usable within BitGo's ecosystem.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ecdsa.d.ts","sourceRoot":"","sources":["../../../../../src/bitgo/tss/ecdsa/ecdsa.ts"],"names":[],"mappings":";;AACA,OAAO,EACL,MAAM,EACN,MAAM,EACN,WAAW,EACX,gCAAgC,EAChC,iBAAiB,EACjB,MAAM,EACN,eAAe,EACf,MAAM,EACN,QAAQ,EACR,MAAM,EACN,MAAM,EACN,iBAAiB,EACjB,kBAAkB,EAClB,aAAa,EACb,SAAS,EACT,cAAc,EAEd,SAAS,EACT,MAAM,EACN,oBAAoB,EACpB,oBAAoB,EACrB,MAAM,SAAS,CAAC;AACjB,OAAO,EAAoB,WAAW,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACtG,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EACL,MAAM,EACN,OAAO,EAGP,wBAAwB,EACxB,MAAM,EACP,MAAM,0CAA0C,CAAC;AAKlD,OAAO,KAAK,GAAG,MAAM,SAAS,CAAC;AAE/B,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"ecdsa.d.ts","sourceRoot":"","sources":["../../../../../src/bitgo/tss/ecdsa/ecdsa.ts"],"names":[],"mappings":"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"}
|
|
@@ -169,9 +169,10 @@ exports.createUserSignatureShare = createUserSignatureShare;
|
|
|
169
169
|
* @param privateShareProof - the uSig of the share
|
|
170
170
|
* @param publicShare - the y value of the share
|
|
171
171
|
* @param userPublicGpgKey - the public key of the gpg key used for creating the privateShareProof
|
|
172
|
+
* @param reqId - request tracer request id
|
|
172
173
|
* @returns {Promise<SignatureShareRecord>} - a Signature Share
|
|
173
174
|
*/
|
|
174
|
-
async function sendShareToBitgo(bitgo, walletId, txRequestId, requestType, shareType, share, signerShare, vssProof, privateShareProof, publicShare, userPublicGpgKey) {
|
|
175
|
+
async function sendShareToBitgo(bitgo, walletId, txRequestId, requestType, shareType, share, signerShare, vssProof, privateShareProof, publicShare, userPublicGpgKey, reqId) {
|
|
175
176
|
if (shareType !== types_1.SendShareType.SShare && share.i !== types_2.ShareKeyPosition.BITGO) {
|
|
176
177
|
throw new Error('Invalid Share, is not from User to Bitgo');
|
|
177
178
|
}
|
|
@@ -185,8 +186,8 @@ async function sendShareToBitgo(bitgo, walletId, txRequestId, requestType, share
|
|
|
185
186
|
signatureShare.vssProof = vssProof;
|
|
186
187
|
signatureShare.publicShare = publicShare;
|
|
187
188
|
signatureShare.privateShareProof = privateShareProof;
|
|
188
|
-
await (0, common_1.sendSignatureShare)(bitgo, walletId, txRequestId, signatureShare, requestType, signerShare, 'ecdsa', 'full', userPublicGpgKey);
|
|
189
|
-
responseFromBitgo = await getBitgoToUserLatestShare(bitgo, walletId, txRequestId, types_1.ReceivedShareType.AShare, requestType);
|
|
189
|
+
await (0, common_1.sendSignatureShare)(bitgo, walletId, txRequestId, signatureShare, requestType, signerShare, 'ecdsa', 'full', userPublicGpgKey, reqId);
|
|
190
|
+
responseFromBitgo = await getBitgoToUserLatestShare(bitgo, walletId, txRequestId, types_1.ReceivedShareType.AShare, requestType, reqId);
|
|
190
191
|
break;
|
|
191
192
|
case types_1.SendShareType.MUShare:
|
|
192
193
|
const shareToSend = share;
|
|
@@ -197,13 +198,13 @@ async function sendShareToBitgo(bitgo, walletId, txRequestId, requestType, share
|
|
|
197
198
|
from: getParticipantFromIndex(shareToSend.dShare.j),
|
|
198
199
|
share: `${muShareRecord.share}${exports.secondaryDelimeter}${dShareRecord.share}`,
|
|
199
200
|
};
|
|
200
|
-
await (0, common_1.sendSignatureShare)(bitgo, walletId, txRequestId, signatureShare, requestType, signerShare, 'ecdsa');
|
|
201
|
-
responseFromBitgo = await getBitgoToUserLatestShare(bitgo, walletId, txRequestId, types_1.ReceivedShareType.DShare, requestType);
|
|
201
|
+
await (0, common_1.sendSignatureShare)(bitgo, walletId, txRequestId, signatureShare, requestType, signerShare, 'ecdsa', undefined, undefined, reqId);
|
|
202
|
+
responseFromBitgo = await getBitgoToUserLatestShare(bitgo, walletId, txRequestId, types_1.ReceivedShareType.DShare, requestType, reqId);
|
|
202
203
|
break;
|
|
203
204
|
case types_1.SendShareType.SShare:
|
|
204
205
|
const sShare = share;
|
|
205
206
|
signatureShare = convertSignatureShare(sShare, 1, 3);
|
|
206
|
-
await (0, common_1.sendSignatureShare)(bitgo, walletId, txRequestId, signatureShare, requestType, signerShare, 'ecdsa');
|
|
207
|
+
await (0, common_1.sendSignatureShare)(bitgo, walletId, txRequestId, signatureShare, requestType, signerShare, 'ecdsa', undefined, undefined, reqId);
|
|
207
208
|
responseFromBitgo = sShare;
|
|
208
209
|
break;
|
|
209
210
|
default:
|
|
@@ -218,11 +219,12 @@ exports.sendShareToBitgo = sendShareToBitgo;
|
|
|
218
219
|
* @param {String} walletId - the wallet id *
|
|
219
220
|
* @param {String} txRequestId - the txRequest Id
|
|
220
221
|
* @param {ReceivedShareType} shareType - the excpected share type
|
|
222
|
+
* @param {IRequestTracer} reqId - request tracer request id
|
|
221
223
|
* @returns {Promise<SendShareToBitgoRT>} - share from bitgo to user
|
|
222
224
|
*/
|
|
223
|
-
async function getBitgoToUserLatestShare(bitgo, walletId, txRequestId, shareType, requestType) {
|
|
225
|
+
async function getBitgoToUserLatestShare(bitgo, walletId, txRequestId, shareType, requestType, reqId) {
|
|
224
226
|
let responseFromBitgo;
|
|
225
|
-
const txRequest = await (0, common_1.getTxRequest)(bitgo, walletId, txRequestId);
|
|
227
|
+
const txRequest = await (0, common_1.getTxRequest)(bitgo, walletId, txRequestId, reqId);
|
|
226
228
|
let userShares;
|
|
227
229
|
switch (requestType) {
|
|
228
230
|
case utils_1.RequestType.tx:
|
|
@@ -811,4 +813,4 @@ async function verifyWalletSignature(params) {
|
|
|
811
813
|
Buffer.from(rawNotations[publicUValueRawNotationIndex].value).toString(), 'bitgo share mismatch');
|
|
812
814
|
}
|
|
813
815
|
exports.verifyWalletSignature = verifyWalletSignature;
|
|
814
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWNkc2EuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvYml0Z28vdHNzL2VjZHNhL2VjZHNhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsd0RBQXVEO0FBQ3ZELG1DQXNCaUI7QUFDakIsdUNBQXNHO0FBQ3RHLG9DQUE0QztBQVU1QyxzQ0FBMEY7QUFDMUYsb0RBQXNDO0FBQ3RDLG9EQUE0QjtBQUM1Qiw4Q0FBNkM7QUFDN0MsNkNBQStCO0FBQy9CLGdEQUF3QjtBQUd4QixvREFBd0Q7QUFFeEQsTUFBTSxHQUFHLEdBQUcsSUFBSSxXQUFLLEVBQUUsQ0FBQztBQUV4Qjs7Ozs7Ozs7R0FRRztBQUNJLEtBQUssVUFBVSxpQkFBaUIsQ0FDckMsUUFBa0IsRUFDbEIsZ0JBQXFDLEVBQ3JDLGNBQXNCO0lBRXRCLE1BQU0sT0FBTyxHQUFhLEVBQUUsQ0FBQztJQUU3QixJQUFJLFdBQStCLENBQUM7SUFDcEMsSUFBSSxVQUE4QixDQUFDO0lBQ25DLElBQUksWUFBZ0MsQ0FBQztJQUVyQyxLQUFLLE1BQU0sZUFBZSxJQUFJLGdCQUFnQixFQUFFO1FBQzlDLE1BQU0sTUFBTSxHQUFHLE1BQU0sYUFBYSxDQUFDLGVBQWUsRUFBRSxlQUFlLENBQUMsYUFBYSxDQUFDLENBQUM7UUFFbkYsUUFBUSxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRTtZQUNoQyxLQUFLLENBQUM7Z0JBQ0osVUFBVSxHQUFHLE1BQU0sQ0FBQztnQkFDcEIsTUFBTTtZQUNSLEtBQUssQ0FBQztnQkFDSixZQUFZLEdBQUcsTUFBTSxDQUFDO2dCQUN0QixNQUFNO1lBQ1IsS0FBSyxDQUFDO2dCQUNKLFdBQVcsR0FBRyxNQUFNLENBQUM7Z0JBQ3JCLE1BQU07WUFDUjtnQkFDRSxNQUFNLElBQUksS0FBSyxDQUFDLHNCQUFzQixDQUFDLENBQUM7U0FDM0M7UUFFRCxPQUFPLENBQUMsSUFBSSxD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QUMsQ0FBQztRQUNwQyxJQUFJLEVBQUUsdUJBQXVCLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUN0QyxLQUFLLEVBQUUsR0FBRyxLQUFLLENBQUMsQ0FBQyxHQUFHLGlCQUFTLEdBQUcsS0FBSyxDQUFDLEtBQUssR0FBRyxpQkFBUyxHQUFHLEtBQUssQ0FBQyxFQUFFLEdBQUcsaUJBQVMsR0FBRyxLQUFLLENBQUMsQ0FBQyxHQUFHLGlCQUFTLEdBQ2xHLEtBQUssQ0FBQyxNQUNSLEdBQUcsaUJBQVMsR0FBRyxLQUFLLENBQUMsRUFBRSxHQUFHLGlCQUFTLEdBQUcsS0FBSyxDQUFDLEVBQUUsR0FBRyxpQkFBUyxHQUFHLENBQUEsTUFBQSxLQUFLLENBQUMsS0FBSywwQ0FBRSxDQUFDLEtBQUksRUFBRSxHQUFHLGlCQUFTLEdBQzNGLENBQUEsTUFBQSxLQUFLLENBQUMsS0FBSywwQ0FBRSxDQUFDLEtBQUksRUFDcEIsR0FBRyxpQkFBUyxHQUFHLENBQUEsTUFBQSxLQUFLLENBQUMsS0FBSywwQ0FBRSxDQUFDLEtBQUksRUFBRSxHQUFHLGlCQUFTLEdBQUcsQ0FBQSxNQUFBLEtBQUssQ0FBQyxLQUFLLDBDQUFFLENBQUMsS0FBSSxFQUFFLEdBQUcsaUJBQVMsR0FDaEYsQ0FBQSxNQUFBLEtBQUssQ0FBQyxLQUFLLDBDQUFFLEVBQUUsS0FBSSxFQUNyQixHQUFHLGlCQUFTLEdBQUcsQ0FBQSxNQUFBLEtBQUssQ0FBQyxLQUFLLDBDQUFFLEVBQUUsS0FBSSxFQUFFLEdBQUcsaUJBQVMsR0FBRyxDQUFBLE1BQUEsS0FBSyxDQUFDLFVBQVUsMENBQUUsQ0FBQyxLQUFJLEVBQUUsR0FBRyxpQkFBUyxHQUN0RixDQUFBLE1BQUEsS0FBSyxDQUFDLFVBQVUsMENBQUUsSUFBSSxLQUFJLEVBQzVCLEdBQUcsaUJBQVMsR0FBRyxDQUFBLE1BQUEsS0FBSyxDQUFDLFVBQVUsMENBQUUsQ0FBQyxLQUFJLEVBQUUsR0FBRyxpQkFBUyxHQUFHLENBQUEsTUFBQSxLQUFLLENBQUMsVUFBVSwwQ0FBRSxDQUFDLEtBQUksRUFBRSxHQUFHLGlCQUFTLEdBQzFGLENBQUEsTUFBQSxLQUFLLENBQUMsVUFBVSwwQ0FBRSxDQUFDLEtBQUksRUFDekIsR0FBRyxpQkFBUyxHQUFHLENBQUEsTUFBQSxLQUFLLENBQUMsVUFBVSwwQ0FBRSxDQUFDLEtBQUksRUFBRSxHQUFHLGlCQUFTLEdBQUcsQ0FBQSxNQUFBLEtBQUssQ0FBQyxVQUFVLDBDQUFFLEVBQUUsS0FBSSxFQUFFLEdBQUcsaUJBQVMsR0FDM0YsQ0FBQSxNQUFBLEtBQUssQ0FBQyxVQUFVLDBDQUFFLEVBQUUsS0FBSSxFQUMxQixHQUFHLGlCQUFTLEdBQUcsQ0FBQSxNQUFBLEtBQUssQ0FBQyxVQUFVLDBDQUFFLEVBQUUsS0FBSSxFQUFFLEdBQUcsaUJBQVMsR0FBRyxDQUFBLE1BQUEsS0FBSyxDQUFDLFVBQVUsMENBQUUsRUFBRSxLQUFJLEVBQUUsR0FBRyxpQkFBUyxHQUM1RixDQUFBLE1BQUEsS0FBSyxDQUFDLFVBQVUsMENBQUUsQ0FBQyxLQUFJLEVBQ3pCLEdBQUcsaUJBQVMsR0FBRyxDQUFBLE1BQUEsS0FBSyxDQUFDLFVBQVUsMENBQUUsQ0FBQyxLQUFJLEVBQUUsR0FBRyxpQkFBUyxHQUFHLENBQUEsTUFBQSxLQUFLLENBQUMsTUFBTSwwQ0FBRSxDQUFDLEtBQUksRUFBRSxHQUFHLGlCQUFTLEdBQ3RGLENBQUEsTUFBQSxLQUFLLENBQUMsTUFBTSwwQ0FBRSxJQUFJLEtBQUksRUFDeEIsR0FBRyxpQkFBUyxHQUFHLENBQUEsTUFBQSxLQUFLLENBQUMsTUFBTSwwQ0FBRSxDQUFDLEtBQUksRUFBRSxHQUFHLGlCQUFTLEdBQUcsQ0FBQSxNQUFBLEtBQUssQ0FBQyxNQUFNLDBDQUFFLENBQUMsS0FBSSxFQUFFLEdBQUcsaUJBQVMsR0FDbEYsQ0FBQSxNQUFBLEtBQUssQ0FBQyxNQUFNLDBDQUFFLENBQUMsS0FBSSxFQUNyQixHQUFHLGlCQUFTLEdBQUcsQ0FBQSxNQUFBLEtBQUssQ0FBQyxNQUFNLDBDQUFFLENBQUMsS0FBSSxFQUFFLEdBQUcsaUJBQVMsR0FBRyxDQUFBLE1BQUEsS0FBSyxDQUFDLE1BQU0sMENBQUUsRUFBRSxLQUFJLEVBQUUsR0FBRyxpQkFBUyxHQUNuRixDQUFBLE1BQUEsS0FBSyxDQUFDLE1BQU0sMENBQUUsRUFBRSxLQUFJLEVBQ3RCLEdBQUcsaUJBQVMsR0FBRyxDQUFBLE1BQUEsS0FBSyxDQUFDLE1BQU0sMENBQUUsRUFBRSxLQUFJLEVBQUUsR0FBRyxpQkFBUyxHQUFHLENBQUEsTUFBQSxLQUFLLENBQUMsTUFBTSwwQ0FBRSxFQUFFLEtBQUksRUFBRSxHQUFHLGlCQUFTLEdBQ3BGLENBQUEsTUFBQSxLQUFLLENBQUMsTUFBTSwwQ0FBRSxDQUFDLEtBQUksRUFDckIsR0FBRyxpQkFBUyxHQUFHLENBQUEsTUFBQSxLQUFLLENBQUMsTUFBTSwwQ0FBRSxDQUFDLEtBQUksRUFBRSxHQUFHLGlCQUFTLEdBQUcsQ0FBQyxLQUFLLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxpQkFBUyxDQUFDLEVBQUU7S0FDekYsQ0FBQztBQUNKLENBQUM7QUE1QkQsc0NBNEJDO0FBRUQ7Ozs7R0FJRztBQUNILFNBQWdCLFlBQVksQ0FBQyxLQUEyQjtJQUN0RCxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxpQkFBUyxDQUFDLENBQUM7SUFDNUMsb0JBQW9CLENBQUMsTUFBTSxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUN2QyxNQUFNLGFBQWEsR0FBRyxzQkFBc0IsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsWUFBWSxDQUFDLENBQUM7SUFDaEYsTUFBTSxTQUFTLEdBQUcsc0JBQXNCLENBQUMsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBRXpFLElBQUksVUFBVSxDQUFDO0lBQ2YsSUFBSSxhQUFhLEVBQUU7UUFDakIsVUFBVSxHQUFHO1lBQ1gsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7WUFDWixJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztZQUNmLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO1lBQ1osQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7WUFDWixDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztZQUNaLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO1lBQ1osRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7WUFDYixFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztZQUNiLEVBQUUsRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQ2QsRUFBRSxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDZCxDQUFDLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUNiLENBQUMsRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDO1NBQ2QsQ0FBQztLQUNIO0lBRUQsSUFBSSxNQUFNLENBQUM7SUFDWCxJQUFJLFNBQVMsRUFBRTtRQUNiLE1BQU0sR0FBRztZQUNQLENBQUMsRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQ2IsSUFBSSxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDaEIsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDYixDQUFDLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUNiLENBQUMsRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQ2IsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDYixFQUFFLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUNkLEVBQUUsRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQ2QsRUFBRSxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDZCxFQUFFLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUNkLENBQUMsRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQ2IsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUM7U0FDZCxDQUFDO0tBQ0g7SUFFRCxPQUFPO1FBQ0wsQ0FBQyxFQUFFLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDaEMsQ0FBQyxFQUFFLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUM7UUFDbEMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDaEIsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDYixVQUFVO1FBQ1YsTUFBTTtLQUNQLENBQUM7QUFDSixDQUFDO0FBbERELG9DQWtEQztBQUVEOzs7O0dBSUc7QUFDSCxTQUFnQixjQUFjLENBQUMsS0FBYzs7SUFDM0MsT0FBTztRQUNMLEVBQUUsRUFBRSx1QkFBdUIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ3BDLElBQUksRUFBRSx1QkFBdUIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ3RDLEtBQUssRUFBRSxHQUFHLEtBQUssQ0FBQyxLQUFLLEdBQUcsaUJBQVMsR0FBRyxLQUFLLENBQUMsRUFBRSxHQUFHLGlCQUFTLEdBQUcsQ0FBQSxNQUFBLEtBQUssQ0FBQyxVQUFVLDBDQUFFLENBQUMsS0FBSSxFQUFFLEdBQUcsaUJBQVMsR0FDOUYsQ0FBQSxNQUFBLEtBQUssQ0FBQyxVQUFVLDBDQUFFLElBQUksS0FBSSxFQUM1QixHQUFHLGlCQUFTLEdBQUcsQ0FBQSxNQUFBLEtBQUssQ0FBQyxVQUFVLDBDQUFFLENBQUMsS0FBSSxFQUFFLEdBQUcsaUJBQVMsR0FBRyxDQUFBLE1BQUEsS0FBSyxDQUFDLFVBQVUsMENBQUUsQ0FBQyxLQUFJLEVBQUUsR0FBRyxpQkFBUyxHQUMxRixDQUFBLE1BQUEsS0FBSyxDQUFDLFVBQVUsMENBQUUsQ0FBQyxLQUFJLEVBQ3pCLEdBQUcsaUJBQVMsR0FBRyxDQUFBLE1BQUEsS0FBSyxDQUFDLFVBQVUsMENBQUUsQ0FBQyxLQUFJLEVBQUUsR0FBRyxpQkFBUyxHQUFHLENBQUEsTUFBQSxLQUFLLENBQUMsVUFBVSwwQ0FBRSxFQUFFLEtBQUksRUFBRSxHQUFHLGlCQUFTLEdBQzNGLENBQUEsTUFBQSxLQUFLLENBQUMsVUFBVSwwQ0FBRSxFQUFFLEtBQUksRUFDMUIsR0FBRyxpQkFBUyxHQUFHLENBQUEsTUFBQSxLQUFLLENBQUMsVUFBVSwwQ0FBRSxFQUFFLEtBQUksRUFBRSxHQUFHLGlCQUFTLEdBQUcsQ0FBQSxNQUFBLEtBQUssQ0FBQyxVQUFVLDBDQUFFLEVBQUUsS0FBSSxFQUFFLEdBQUcsaUJBQVMsR0FDNUYsQ0FBQSxNQUFBLEtBQUssQ0FBQyxVQUFVLDBDQUFFLENBQUMsS0FBSSxFQUN6QixHQUFHLGlCQUFTLEdBQUcsQ0FBQSxNQUFBLEtBQUssQ0FBQyxVQUFVLDBDQUFFLENBQUMsS0FBSSxFQUFFLEdBQUcsaUJBQVMsR0FBRyxDQUFBLE1BQUEsS0FBSyxDQUFDLE1BQU0sMENBQUUsQ0FBQyxLQUFJLEVBQUUsR0FBRyxpQkFBUyxHQUN0RixDQUFBLE1BQUEsS0FBSyxDQUFDLE1BQU0sMENBQUUsSUFBSSxLQUFJLEVBQ3hCLEdBQUcsaUJBQVMsR0FBRyxDQUFBLE1BQUEsS0FBSyxDQUFDLE1BQU0sMENBQUUsQ0FBQyxLQUFJLEVBQUUsR0FBRyxpQkFBUyxHQUFHLENBQUEsTUFBQSxLQUFLLENBQUMsTUFBTSwwQ0FBRSxDQUFDLEtBQUksRUFBRSxHQUFHLGlCQUFTLEdBQ2xGLENBQUEsTUFBQSxLQUFLLENBQUMsTUFBTSwwQ0FBRSxDQUFDLEtBQUksRUFDckIsR0FBRyxpQkFBUyxHQUFHLENBQUEsTUFBQSxLQUFLLENBQUMsTUFBTSwwQ0FBRSxDQUFDLEtBQUksRUFBRSxHQUFHLGlCQUFTLEdBQUcsQ0FBQSxNQUFBLEtBQUssQ0FBQyxNQUFNLDBDQUFFLEVBQUUsS0FBSSxFQUFFLEdBQUcsaUJBQVMsR0FDbkYsQ0FBQSxNQUFBLEtBQUssQ0FBQyxNQUFNLDBDQUFFLEVBQUUsS0FBSSxFQUN0QixHQUFHLGlCQUFTLEdBQUcsQ0FBQSxNQUFBLEtBQUssQ0FBQyxNQUFNLDBDQUFFLEVBQUUsS0FBSSxFQUFFLEdBQUcsaUJBQVMsR0FBRyxDQUFBLE1BQUEsS0FBSyxDQUFDLE1BQU0sMENBQUUs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USxFQUFFLEVBQzFFLHNCQUFzQixDQUN2QixDQUFDO0FBQ0osQ0FBQztBQXJCRCxzREFxQkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFY2RzYSB9IGZyb20gJy4vLi4vLi4vLi4vYWNjb3VudC1saWIvbXBjL3Rzcyc7XG5pbXBvcnQge1xuICBBU2hhcmUsXG4gIEJTaGFyZSxcbiAgQ29tYmluZWRLZXksXG4gIENyZWF0ZVVzZXJPbWljcm9uQW5kRGVsdGFTaGFyZVJULFxuICBEZWNyeXB0YWJsZU5TaGFyZSxcbiAgRFNoYXJlLFxuICBFbmNyeXB0ZWROU2hhcmUsXG4gIEdTaGFyZSxcbiAgS2V5U2hhcmUsXG4gIE5TaGFyZSxcbiAgT1NoYXJlLFxuICBSZWNlaXZlZFNoYXJlVHlwZSxcbiAgU2VuZFNoYXJlVG9CaXRnb1JULFxuICBTZW5kU2hhcmVUeXBlLFxuICBTaWduYXR1cmUsXG4gIFNpZ25hdHVyZVNoYXJlLFxuICBTaWduaW5nTWF0ZXJpYWwsXG4gIFNpZ25TaGFyZSxcbiAgV1NoYXJlLFxuICBYU2hhcmVXaXRoQ2hhbGxlbmdlcyxcbiAgWVNoYXJlV2l0aENoYWxsZW5nZXMsXG59IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgY3JlYXRlU2hhcmVQcm9vZiwgUmVxdWVzdFR5cGUsIFNpZ25hdHVyZVNoYXJlUmVjb3JkLCBTaWduYXR1cmVTaGFyZVR5cGUgfSBmcm9tICcuLi8uLi91dGlscyc7XG5pbXBvcnQgeyBTaGFyZUtleVBvc2l0aW9uIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgQml0R29CYXNlIH0gZnJvbSAnLi4vLi4vYml0Z29CYXNlJztcbmltcG9ydCB7XG4gIEtTaGFyZSxcbiAgTVVTaGFyZSxcbiAgUmFuZ2VQcm9vZlNoYXJlLFxuICBSYW5nZVByb29mV2l0aENoZWNrU2hhcmUsXG4gIFNpZ25Db252ZXJ0U3RlcDJSZXNwb25zZSxcbiAgU1NoYXJlLFxufSBmcm9tICcuLi8uLi8uLi9hY2NvdW50LWxpYi9tcGMvdHNzL2VjZHNhL3R5cGVzJztcbmltcG9ydCB7IGNvbW1vblZlcmlmeVdhbGxldFNpZ25hdHVyZSwgZ2V0VHhSZXF1ZXN0LCBzZW5kU2lnbmF0dXJlU2hhcmUgfSBmcm9tICcuLi9jb21tb24nO1xuaW1wb3J0IGNyZWF0ZUtlY2Nha0hhc2ggZnJvbSAna2VjY2FrJztcbmltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcbmltcG9ydCB7IGJpcDMyLCBlY2MgfSBmcm9tICdAYml0Z28vdXR4by1saWInO1xuaW1wb3J0ICogYXMgcGdwIGZyb20gJ29wZW5wZ3AnO1xuaW1wb3J0IGJzNTggZnJvbSAnYnM1OCc7XG5pbXBvcnQgeyBBcGlLZXlTaGFyZSB9IGZyb20gJy4uLy4uL2tleWNoYWluJztcbmltcG9ydCB7IEhhc2ggfSBmcm9tICdjcnlwdG8nO1xuaW1wb3J0IHsgRWNkc2FQYWlsbGllclByb29mIH0gZnJvbSAnQGJpdGdvL3Nkay1saWItbXBjJztcblxuY29uc3QgTVBDID0gbmV3IEVjZHNhKCk7XG5cbi8qKlxuICogQ29tYmluZXMgTlNoYXJlcyB0byBjb21iaW5lIHRoZSBmaW5hbCBUU1Mga2V5XG4gKiBUaGlzIGNhbiBvbmx5IGJlIHVzZWQgdG8gY3JlYXRlIHRoZSBVc2VyIG9yIEJhY2t1cCBrZXkgc2luY2UgaXQgcmVxdWlyZXMgdGhlIGNvbW1vbiBrZXljaGFpbiBmcm9tIEJpdEdvIGZpcnN0XG4gKlxuICogQHBhcmFtIGtleVNoYXJlIC0gVFNTIGtleSBzaGFyZVxuICogQHBhcmFtIGVuY3J5cHRlZE5TaGFyZXMgLSBlbmNyeXB0ZWQgTlNoYXJlcyB3aXRoIGluZm9ybWF0aW9uIG9uIGhvdyB0byBkZWNyeXB0XG4gKiBAcGFyYW0gY29tbW9uS2V5Y2hhaW4gLSBleHBlY3RlZCBjb21tb24ga2V5Y2hhaW4gb2YgdGhlIGNvbWJpbmVkIGtleVxuICogQHJldHVybnMge0NvbWJpbmVkS2V5fSBjb21iaW5lZCBUU1Mga2V5XG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjcmVhdGVDb21iaW5lZEtleShcbiAga2V5U2hhcmU6IEtleVNoYXJlLFxuICBlbmNyeXB0ZWROU2hhcmVzOiBEZWNyeXB0YWJsZU5TaGFyZVtdLFxuICBjb21tb25LZXljaGFpbjogc3RyaW5nXG4pOiBQcm9taXNlPENvbWJpbmVkS2V5PiB7XG4gIGNvbnN0IG5TaGFyZXM6IE5TaGFyZVtdID0gW107XG5cbiAgbGV0IGJpdGdvTlNoYXJlOiBOU2hhcmUgfCB1bmRlZmluZWQ7XG4gIGxldCB1c2VyTlNoYXJlOiBOU2hhcmUgfCB1bmRlZmluZWQ7XG4gIGxldCBiYWNrdXBOU2hhcmU6IE5TaGFyZSB8IHVuZGVmaW5lZDtcblxuICBmb3IgKGNvbnN0IGVuY3J5cHRlZE5TaGFyZSBvZiBlbmNyeXB0ZWROU2hhcmVzKSB7XG4gICAgY29uc3QgblNoYXJlID0gYXdhaXQgZGVjcnlwdE5TaGFyZShlbmNyeXB0ZWROU2hhcmUsIGVuY3J5cHRlZE5TaGFyZS5pc2JzNThFbmNvZGVkKTtcblxuICAgIHN3aXRjaCAoZW5jcnlwdGVkTlNoYXJlLm5TaGFyZS5qKSB7XG4gICAgICBjYXNlIDE6XG4gICAgICAgIHVzZXJOU2hhcmUgPSBuU2hhcmU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAyOlxuICAgICAgICBiYWNrdXBOU2hhcmUgPSBuU2hhcmU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAzOlxuICAgICAgICBiaXRnb05TaGFyZSA9IG5TaGFyZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgTlNoYXJlIGluZGV4Jyk7XG4gICAgfVxuXG4gICAgblNoYXJlcy5wdXNoKG5TaGFyZSk7XG4gIH1cblxuICBpZiAoIWJpdGdvTlNoYXJlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdNaXNzaW5nIEJpdEdvIE4gU2hhcmUnKTtcbiAgfVxuXG4gIGNvbnN0IGNvbWJpbmVkS2V5ID0gTVBDLmtleUNvbWJpbmUoa2V5U2hhcmUucFNoYXJlLCBuU2hhcmVzKTtcbiAgaWYgKGNvbWJpbmVkS2V5LnhTaGFyZS55ICsgY29tYmluZWRLZXkueFNoYXJlLmNoYWluY29kZSAhPT0gY29tbW9uS2V5Y2hhaW4pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvbW1vbiBrZXljaGFpbnMgZG8gbm90IG1hdGNoJyk7XG4gIH1cblxuICBjb25zdCBzaWduaW5nTWF0ZXJpYWw6IFNpZ25pbmdNYXRlcmlhbCA9IHtcbiAgICBwU2hhcmU6IGtleVNoYXJlLnBTaGFyZSxcbiAgICBiaXRnb05TaGFyZSxcbiAgICBiYWNrdXBOU2hhcmUsXG4gICAgdXNlck5TaGFyZSxcbiAgfTtcblxuICByZXR1cm4ge1xuICAgIHNpZ25pbmdNYXRlcmlhbCxcbiAgICBjb21tb25LZXljaGFpbixcbiAgfTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIHRoZSBTaWduU2hhcmUgd2l0aCBVc2VyIFhTaGFyZSBhbmQgWVNoYXJlIENvcnJlc3BvbmRpbmcgdG8gQml0R29cbiAqIEBwYXJhbSB7WFNoYXJlfSB4U2hhcmUgVXNlciBzZWNyZXQgeFNoYXJlXG4gKiBAcGFyYW0ge1lTaGFyZX0geVNoYXJlIFlTaGFyZSBmcm9tIEJpdGdvXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxTaWduU2hhcmU+fVxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3JlYXRlVXNlclNpZ25TaGFyZShcbiAgeFNoYXJlOiBYU2hhcmVXaXRoQ2hhbGxlbmdlcyxcbiAgeVNoYXJlOiBZU2hhcmVXaXRoQ2hhbGxlbmdlc1xuKTogUHJvbWlzZTxTaWduU2hhcmU+IHtcbiAgaWYgKHhTaGFyZS5pICE9PSBTaGFyZUtleVBvc2l0aW9uLlVTRVIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgWFNoYXJlLCBYU2hhcmUgZG9lc24ndCBiZWxvbmcgdG8gdGhlIFVzZXJgKTtcbiAgfVxuXG4gIGlmICh5U2hhcmUuaSAhPT0gU2hhcmVLZXlQb3NpdGlvbi5VU0VSIHx8IHlTaGFyZS5qICE9PSBTaGFyZUtleVBvc2l0aW9uLkJJVEdPKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIFlTaGFyZSBwcm92aWRlZCBmb3Igc2lnbicpO1xuICB9XG4gIHJldHVybiBhd2FpdCBNUEMuc2lnblNoYXJlKHhTaGFyZSwgeVNoYXJlKTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIHRoZSBHYW1tYSBTaGFyZSBhbmQgTXVTaGFyZSB3aXRoIFVzZXIgV1NoYXJlIGFuZCBBU2hhcmUgRnJvbSBCaXRHb1xuICogQHBhcmFtIHtXU2hhcmV9IHdTaGFyZSBVc2VyIFdTaGFyZVxuICogQHBhcmFtIHtBU2hhcmV9IGFTaGFyZSBBU2hhcmUgZnJvbSBCaXRnb1xuICogQHJldHVybnMge1Byb21pc2U8U2lnbkNvbnZlcnRTdGVwMlJlc3BvbnNlPn1cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZVVzZXJHYW1tYUFuZE11U2hhcmUod1NoYXJlOiBXU2hhcmUsIGFTaGFyZTogQVNoYXJlKTogUHJvbWlzZTxTaWduQ29udmVydFN0ZXAyUmVzcG9uc2U+IHtcbiAgaWYgKHdTaGFyZS5pICE9PSBTaGFyZUtleVBvc2l0aW9uLlVTRVIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgV1NoYXJlLCBkb2Vzbid0IGJlbG9uZyB0byB0aGUgVXNlcmApO1xuICB9XG4gIGlmIChhU2hhcmUuaSAhPT0gU2hhcmVLZXlQb3NpdGlvbi5VU0VSIHx8IGFTaGFyZS5qICE9PSBTaGFyZUtleVBvc2l0aW9uLkJJVEdPKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIEFTaGFyZSwgaXMgbm90IGZyb20gQml0Z28gdG8gVXNlcicpO1xuICB9XG4gIHJldHVybiBNUEMuc2lnbkNvbnZlcnRTdGVwMih7IHdTaGFyZSwgYVNoYXJlIH0pO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgdGhlIE9taWNyb24gU2hhcmUgYW5kIERlbHRhIHNoYXJlIHdpdGggdXNlciBHU2hhcmVcbiAqIEBwYXJhbSB7R1NoYXJlfSBnU2hhcmUgVXNlciBHU2hhcmVcbiAqIEByZXR1cm5zIHtQcm9taXNlPENyZWF0ZVVzZXJPbWljcm9uQW5kRGVsdGFTaGFyZVJUPn1cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZVVzZXJPbWljcm9uQW5kRGVsdGFTaGFyZShnU2hhcmU6IEdTaGFyZSk6IFByb21pc2U8Q3JlYXRlVXNlck9taWNyb25BbmREZWx0YVNoYXJlUlQ+IHtcbiAgaWYgKGdTaGFyZS5pICE9PSBTaGFyZUtleVBvc2l0aW9uLlVTRVIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgR1NoYXJlLCBkb2Vzbid0IGJlbG9uZyB0byB0aGUgVXNlcmApO1xuICB9XG4gIHJldHVybiBNUEMuc2lnbkNvbWJpbmUoe1xuICAgIGdTaGFyZTogZ1NoYXJlLFxuICAgIHNpZ25JbmRleDoge1xuICAgICAgaTogU2hhcmVLZXlQb3NpdGlvbi5CSVRHTyxcbiAgICAgIGo6IGdTaGFyZS5pLFxuICAgIH0sXG4gIH0pO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgdGhlIFNpZ25hdHVyZSBTaGFyZSB3aXRoIFVzZXIgT1NoYXJlIGFuZCBEU2hhcmUgRnJvbSBCaXRHb1xuICogQHBhcmFtIHtPU2hhcmV9IG9TaGFyZSBVc2VyIE9TaGFyZVxuICogQHBhcmFtIHtEU2hhcmV9IGRTaGFyZSBEU2hhcmUgZnJvbSBiaXRnb1xuICogQHBhcmFtIHtCdWZmZXJ9IG1lc3NhZ2UgbWVzc2FnZSB0byBwZXJmb3JtIHNpZ25cbiAqIEByZXR1cm5zIHtQcm9taXNlPGNyZWF0ZVVzZXJTaWduU2hhcmVSVD59XG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjcmVhdGVVc2VyU2lnbmF0dXJlU2hhcmUoXG4gIG9TaGFyZTogT1NoYXJlLFxuICBkU2hhcmU6IERTaGFyZSxcbiAgbWVzc2FnZTogQnVmZmVyLFxuICBoYXNoOiBIYXNoID0gY3JlYXRlS2VjY2FrSGFzaCgna2VjY2FrMjU2Jylcbik6IFByb21pc2U8U2lnbmF0dXJlU2hhcmU+IHtcbiAgaWYgKG9TaGFyZS5pICE9PSBTaGFyZUtleVBvc2l0aW9uLlVTRVIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgT1NoYXJlLCBkb2Vzbid0IGJlbG9uZyB0byB0aGUgVXNlcmApO1xuICB9XG5cbiAgaWYgKGRTaGFyZS5pICE9PSBTaGFyZUtleVBvc2l0aW9uLlVTRVIgfHwgZFNoYXJlLmogIT09IFNoYXJlS2V5UG9zaXRpb24uQklUR08pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgRFNoYXJlLCBkb2Vzbid0IHNlZW0gdG8gYmUgZnJvbSBCaXRHb2ApO1xuICB9XG4gIHJldHVybiBNUEMuc2lnbihtZXNzYWdlLCBvU2hhcmUsIGRTaGFyZSwgaGFzaCk7XG59XG5cbmV4cG9ydCB0eXBlIE11RFNoYXJlID0geyBtdVNoYXJlOiBNVVNoYXJlOyBkU2hhcmU6IERTaGFyZTsgaTogU2hhcmVLZXlQb3NpdGlvbiB9O1xuXG4vKipcbiAqIFNlbmRzIFNoYXJlIFRvIEJpdGdvXG4gKiBAcGFyYW0ge0JpdEdvQmFzZX0gYml0Z28gLSB0aGUgYml0Z28gaW5zdGFuY2VcbiAqIEBwYXJhbSB7U3RyaW5nfSB3YWxsZXRJZCAtIHRoZSB3YWxsZXQgaWQgICpcbiAqIEBwYXJhbSB7U3RyaW5nfSB0eFJlcXVlc3RJZCAtIHRoZSB0eFJlcXVlc3QgSWRcbiAqIEBwYXJhbSByZXF1ZXN0VHlwZSAtIHRoZSB0eXBlIG9mIHJlcXVlc3QgYmVpbmcgc3VibWl0dGVkIChlaXRoZXIgdHggb3IgbWVzc2FnZSBmb3Igc2lnbmluZylcbiAqIEBwYXJhbSBzaGFyZVR5cGVcbiAqIEBwYXJhbSBzaGFyZVxuICogQHBhcmFtIHNpZ25lclNoYXJlXG4gKiBAcGFyYW0gdnNzUHJvb2YgLSB0aGUgdiB2YWx1ZSBvZiB0aGUgc2hhcmVcbiAqIEBwYXJhbSBwcml2YXRlU2hhcmVQcm9vZiAtIHRoZSB1U2lnIG9mIHRoZSBzaGFyZVxuICogQHBhcmFtIHB1YmxpY1NoYXJlIC0gdGhlIHkgdmFsdWUgb2YgdGhlIHNoYXJlXG4gKiBAcGFyYW0gdXNlclB1YmxpY0dwZ0tleSAtIHRoZSBwdWJsaWMga2V5IG9mIHRoZSBncGcga2V5IHVzZWQgZm9yIGNyZWF0aW5nIHRoZSBwcml2YXRlU2hhcmVQcm9vZlxuICogQHJldHVybnMge1Byb21pc2U8U2lnbmF0dXJlU2hhcmVSZWNvcmQ+fSAtIGEgU2lnbmF0dXJlIFNoYXJlXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzZW5kU2hhcmVUb0JpdGdvKFxuICBiaXRnbzogQml0R29CYXNlLFxuICB3YWxsZXRJZDogc3RyaW5nLFxuICB0eFJlcXVlc3RJZDogc3RyaW5nLFxuICByZXF1ZXN0VHlwZTogUmVxdWVzdFR5cGUsXG4gIHNoYXJlVHlwZTogU2VuZFNoYXJlVHlwZSxcbiAgc2hhcmU6IFNTaGFyZSB8IE11RFNoYXJlIHwgS1NoYXJlLFxuICBzaWduZXJTaGFyZT86IHN0cmluZyxcbiAgdnNzUHJvb2Y/OiBzdHJpbmcsXG4gIHByaXZhdGVTaGFyZVByb29mPzogc3RyaW5nLFxuICBwdWJsaWNTaGFyZT86IHN0cmluZyxcbiAgdXNlclB1YmxpY0dwZ0tleT86IHN0cmluZ1xuKTogUHJvbWlzZTxTZW5kU2hhcmVUb0JpdGdvUlQ+IHtcbiAgaWYgKHNoYXJlVHlwZSAhPT0gU2VuZFNoYXJlVHlwZS5TU2hhcmUgJiYgc2hhcmUuaSAhPT0gU2hhcmVLZXlQb3NpdGlvbi5CSVRHTykge1xuICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBTaGFyZSwgaXMgbm90IGZyb20gVXNlciB0byBCaXRnbycpO1xuICB9XG4gIGxldCBzaWduYXR1cmVTaGFyZTogU2lnbmF0dXJlU2hhcmVSZWNvcmQ7XG4gIGxldCByZXNwb25zZUZyb21CaXRnbzogU2VuZFNoYXJlVG9CaXRnb1JUO1xuXG4gIHN3aXRjaCAoc2hhcmVUeXBlKSB7XG4gICAgY2FzZSBTZW5kU2hhcmVUeXBlLktTaGFyZTpcbiAgICAgIGFzc2VydChzaWduZXJTaGFyZSwgYHNpZ25lciBzaGFyZSBtdXN0IGJlIHByZXNlbnRgKTtcbiAgICAgIGNvbnN0IGtTaGFyZSA9IHNoYXJlIGFzIEtTaGFyZTtcbiAgICAgIHNpZ25hdHVyZVNoYXJlID0gY29udmVydEtTaGFyZShrU2hhcmUpO1xuICAgICAgc2lnbmF0dXJlU2hhcmUudnNzUHJvb2YgPSB2c3NQcm9vZjtcbiAgICAgIHNpZ25hdHVyZVNoYXJlLnB1YmxpY1NoYXJlID0gcHVibGljU2hhcmU7XG4gICAgICBzaWduYXR1cmVTaGFyZS5wcml2YXRlU2hhcmVQcm9vZiA9IHByaXZhdGVTaGFyZVByb29mO1xuICAgICAgYXdhaXQgc2VuZFNpZ25hdHVyZVNoYXJlKFxuICAgICAgICBiaXRnbyxcbiAgICAgICAgd2FsbGV0SWQsXG4gICAgICAgIHR4UmVxdWVzdElkLFxuICAgICAgICBzaWduYXR1cmVTaGFyZSxcbiAgICAgICAgcmVxdWVzdFR5cGUsXG4gICAgICAgIHNpZ25lclNoYXJlLFxuICAgICAgICAnZWNkc2EnLFxuICAgICAgICAnZnVsbCcsXG4gICAgICAgIHVzZXJQdWJsaWNHcGdLZXlcbiAgICAgICk7XG4gICAgICByZXNwb25zZUZyb21CaXRnbyA9IGF3YWl0IGdldEJpdGdvVG9Vc2VyTGF0ZXN0U2hhcmUoXG4gICAgICAgIGJpdGdvLFxuICAgICAgICB3YWxsZXRJZCxcbiAgICAgICAgdHhSZXF1ZXN0SWQsXG4gICAgICAgIFJlY2VpdmVkU2hhcmVUeXBlLkFTaGFyZSxcbiAgICAgICAgcmVxdWVzdFR5cGVcbiAgICAgICk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFNlbmRTaGFyZVR5cGUuTVVTaGFyZTpcbiAgICAgIGNvbnN0IHNoYXJlVG9TZW5kID0gc2hhcmUgYXMgTXVEU2hhcmU7XG4gICAgICBjb25zdCBtdVNoYXJlUmVjb3JkID0gY29udmVydE11U2hhcmUoc2hhcmVUb1NlbmQubXVTaGFyZSk7XG4gICAgICBjb25zdCBkU2hhcmVSZWNvcmQgPSBjb252ZXJ0RFNoYXJlKHNoYXJlVG9TZW5kLmRTaGFyZSk7XG4gICAgICBzaWduYXR1cmVTaGFyZSA9IHtcbiAgICAgICAgdG86IFNpZ25hdHVyZVNoYXJlVHlwZS5CSVRHTyxcbiAgICAgICAgZnJvbTogZ2V0UGFydGljaXBhbnRGcm9tSW5kZXgoc2hhcmVUb1NlbmQuZFNoYXJlLmopLFxuICAgICAgICBzaGFyZTogYCR7bXVTaGFyZVJlY29yZC5zaGFyZX0ke3NlY29uZGFyeURlbGltZXRlcn0ke2RTaGFyZVJlY29yZC5zaGFyZX1gLFxuICAgICAgfTtcbiAgICAgIGF3YWl0IHNlbmRTaWduYXR1cmVTaGFyZShiaXRnbywgd2FsbGV0SWQsIHR4UmVxdWVzdElkLCBzaWduYXR1cmVTaGFyZSwgcmVxdWVzdFR5cGUsIHNpZ25lclNoYXJlLCAnZWNkc2EnKTtcbiAgICAgIHJlc3BvbnNlRnJvbUJpdGdvID0gYXdhaXQgZ2V0Qml0Z29Ub1VzZXJMYXRlc3RTaGFyZShcbiAgICAgICAgYml0Z28sXG4gICAgICAgIHdhbGxldElkLFxuICAgICAgICB0eFJlcXVlc3RJZCxcbiAgICAgICAgUmVjZWl2ZWRTaGFyZVR5cGUuRFNoYXJlLFxuICAgICAgICByZXF1ZXN0VHlwZVxuICAgICAgKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgU2VuZFNoYXJlVHlwZS5TU2hhcmU6XG4gICAgICBjb25zdCBzU2hhcmUgPSBzaGFyZSBhcyBTU2hhcmU7XG4gICAgICBzaWduYXR1cmVTaGFyZSA9IGNvbnZlcnRTaWduYXR1cmVTaGFyZShzU2hhcmUsIDEsIDMpO1xuICAgICAgYXdhaXQgc2VuZFNpZ25hdHVyZVNoYXJlKGJpdGdvLCB3YWxsZXRJZCwgdHhSZXF1ZXN0SWQsIHNpZ25hdHVyZVNoYXJlLCByZXF1ZXN0VHlwZSwgc2lnbmVyU2hhcmUsICdlY2RzYScpO1xuICAgICAgcmVzcG9uc2VGcm9tQml0Z28gPSBzU2hhcmU7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIFNoYXJlIGdpdmVuIHRvIHNlbmQnKTtcbiAgfVxuXG4gIHJldHVybiByZXNwb25zZUZyb21CaXRnbztcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBsYXRlc3QgdXNlcidzIHNoYXJlIGZyb20gYml0Z28gbmVlZGVkIHRvIGNvbnRpbnVlIHNpZ25pbmcgZmxvd1xuICogQHBhcmFtIHtCaXRHb0Jhc2V9IGJpdGdvIC0gdGhlIGJpdGdvIGluc3RhbmNlXG4gKiBAcGFyYW0ge1N0cmluZ30gd2FsbGV0SWQgLSB0aGUgd2FsbGV0IGlkICAqXG4gKiBAcGFyYW0ge1N0cmluZ30gdHhSZXF1ZXN0SWQgLSB0aGUgdHhSZXF1ZXN0IElkXG4gKiBAcGFyYW0ge1JlY2VpdmVkU2hhcmVUeXBlfSBzaGFyZVR5cGUgLSB0aGUgZXhjcGVjdGVkIHNoYXJlIHR5cGVcbiAqIEByZXR1cm5zIHtQcm9taXNlPFNlbmRTaGFyZVRvQml0Z29SVD59IC0gc2hhcmUgZnJvbSBiaXRnbyB0byB1c2VyXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRCaXRnb1RvVXNlckxhdGVzdFNoYXJlKFxuICBiaXRnbzogQml0R29CYXNlLFxuICB3YWxsZXRJZDogc3RyaW5nLFxuICB0eFJlcXVlc3RJZDogc3RyaW5nLFxuICBzaGFyZVR5cGU6IFJlY2VpdmVkU2hhcmVUeXBlLFxuICByZXF1ZXN0VHlwZTogUmVxdWVzdFR5cGVcbik6IFByb21pc2U8U2VuZFNoYXJlVG9CaXRnb1JUPiB7XG4gIGxldCByZXNwb25zZUZyb21CaXRnbzogU2VuZFNoYXJlVG9CaXRnb1JUO1xuICBjb25zdCB0eFJlcXVlc3QgPSBhd2FpdCBnZXRUeFJlcXVlc3QoYml0Z28sIHdhbGxldElkLCB0eFJlcXVlc3RJZCk7XG4gIGxldCB1c2VyU2hhcmVzO1xuICBzd2l0Y2ggKHJlcXVlc3RUeXBlKSB7XG4gICAgY2FzZSBSZXF1ZXN0VHlwZS50eDpcbiAgICAgIGFzc2VydCh0eFJlcXVlc3QudHJhbnNhY3Rpb25zLCAndHJhbnNhY3Rpb25zIHJlcXVpcmVkIGFzIHBhcnQgb2YgdHhSZXF1ZXN0Jyk7XG4gICAgICB1c2VyU2hhcmVzID0gdHhSZXF1ZXN0LnRyYW5zYWN0aW9uc1swXS5zaWduYXR1cmVTaGFyZXM7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFJlcXVlc3RUeXBlLm1lc3NhZ2U6XG4gICAgICBhc3NlcnQodHhSZXF1ZXN0Lm1lc3NhZ2VzLCAnbWVzc2FnZXMgcmVxdWlyZWQgYXMgcGFydCBvZiB0eFJlcXVlc3QnKTtcbiAgICAgIHVzZXJTaGFyZXMgPSB0eFJlcXVlc3QubWVzc2FnZXNbMF0uc2lnbmF0dXJlU2hhcmVzO1xuICAgICAgYnJlYWs7XG4gIH1cbiAgaWYgKCF1c2VyU2hhcmVzIHx8ICF1c2VyU2hhcmVzLmxlbmd0aCkge1xuICAgIHRocm93IG5ldyBFcnJvcigndXNlciBzaGFyZSBpcyBub3QgcHJlc2VudCcpO1xuICB9XG5cbiAgY29uc3Qgc2hhcmVSZWNvcmQgPSB1c2VyU2hhcmVzW3VzZXJTaGFyZXMubGVuZ3RoIC0gMV07XG4gIHN3aXRjaCAoc2hhcmVUeXBlKSB7XG4gICAgY2FzZSBSZWNlaXZlZFNoYXJlVHlwZS5BU2hhcmU6XG4gICAgICByZXNwb25zZUZyb21CaXRnbyA9IHBhcnNlQVNoYXJlKHNoYXJlUmVjb3JkKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgUmVjZWl2ZWRTaGFyZVR5cGUuRFNoYXJlOlxuICAgICAgcmVzcG9uc2VGcm9tQml0Z28gPSBwYXJzZURTaGFyZShzaGFyZVJlY29yZCk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFJlY2VpdmVkU2hhcmVUeXBlLlNpZ25hdHVyZTpcbiAgICAgIHJlc3BvbnNlRnJvbUJpdGdvID0gcGFyc2VTaWduYXR1cmVTaGFyZShzaGFyZVJlY29yZCk7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHNoYXJlIHJlY2VpdmVkJyk7XG4gIH1cblxuICByZXR1cm4gcmVzcG9uc2VGcm9tQml0Z287XG59XG5cbi8qKlxuICogUHJlcGFyZXMgYSBOU2hhcmUgdG8gYmUgZXhjaGFuZ2VkIHdpdGggb3RoZXIga2V5IGhvbGRlcnMuXG4gKiBPdXRwdXQgaXMgaW4gYSBmb3JtYXQgdGhhdCBpcyB1c2FibGUgd2l0aGluIEJpdEdvJ3MgZWNvc3lzdGVtLlxuICpcbiAqIEBwYXJhbSBrZXlTaGFyZSAtIFRTUyBrZXkgc2hhcmUgb2YgdGhlIHBhcnR5IHByZXBhcmluZyBleGNoYW5nZSBtYXRlcmlhbHNcbiAqIEBwYXJhbSByZWNpcGllbnRJbmRleCAtIGluZGV4IG9mIHRoZSByZWNpcGllbnQgKDEsIDIsIG9yIDMpXG4gKiBAcGFyYW0gcmVjaXBpZW50R3BnUHVibGljQXJtb3IgLSByZWNpcGllbnQncyBwdWJsaWMgZ3BnIGtleSBpbiBhcm1vciBmb3JtYXRcbiAqIEBwYXJhbSBzZW5kZXJHcGdLZXkgLSBlcGhlbWVyYWwgR1BHIGtleSB0byBlbmNyeXB0IC8gZGVjcnlwdCBzZW5zaXR2ZSBkYXRhIGV4Y2hhbmdlZCBiZXR3ZWVuIHVzZXIgYW5kIHNlcnZlclxuICogQHBhcmFtIGlzYnM1OEVuY29kZWQgLSBpcyBiczU4IGVuY29kZWQgb3Igbm90XG4gKiBAcmV0dXJucyBlbmNyeXB0ZWQgTiBTaGFyZVxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZW5jcnlwdE5TaGFyZShcbiAga2V5U2hhcmU6IEtleVNoYXJlLFxuICByZWNpcGllbnRJbmRleDogbnVtYmVyLFxuICByZWNpcGllbnRHcGdQdWJsaWNBcm1vcjogc3RyaW5nLFxuICBzZW5kZXJHcGdLZXk6IHBncC5TZXJpYWxpemVkS2V5UGFpcjxzdHJpbmc+LFxuICBpc2JzNThFbmNvZGVkID0gdHJ1ZVxuKTogUHJvbWlzZTxFbmNyeXB0ZWROU2hhcmU+IHtcbiAgY29uc3QgblNoYXJlID0ga2V5U2hhcmUublNoYXJlc1tyZWNpcGllbnRJbmRleF07XG4gIGlmICghblNoYXJlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHJlY2lwaWVudCcpO1xuICB9XG5cbiAgY29uc3QgcHVibGljU2hhcmUgPSBCdWZmZXIuY29uY2F0KFtcbiAgICBCdWZmZXIuZnJvbShrZXlTaGFyZS5wU2hhcmUueSwgJ2hleCcpLFxuICAgIEJ1ZmZlci5mcm9tKGtleVNoYXJlLnBTaGFyZS5jaGFpbmNvZGUsICdoZXgnKSxcbiAgXSkudG9TdHJpbmcoJ2hleCcpO1xuXG4gIGxldCBwcml2YXRlU2hhcmU7XG4gIGlmIChpc2JzNThFbmNvZGVkKSB7XG4gICAgcHJpdmF0ZVNoYXJlID0gYmlwMzIuZnJvbVByaXZhdGVLZXkoQnVmZmVyLmZyb20oblNoYXJlLnUsICdoZXgnKSwgQnVmZmVyLmZyb20oblNoYXJlLmNoYWluY29kZSwgJ2hleCcpKS50b0Jhc2U1OCgpO1xuICB9IGVsc2Uge1xuICAgIHByaXZhdGVTaGFyZSA9IEJ1ZmZlci5jb25jYXQoW0J1ZmZlci5mcm9tKG5TaGFyZS51LCAnaGV4JyksIEJ1ZmZlci5mcm9tKG5TaGFyZS5jaGFpbmNvZGUsICdoZXgnKV0pLnRvU3RyaW5nKCdoZXgnKTtcbiAgfVxuICBjb25zdCByZWNpcGllbnRQdWJsaWNLZXkgPSBhd2FpdCBwZ3AucmVhZEtleSh7IGFybW9yZWRLZXk6IHJlY2lwaWVudEdwZ1B1YmxpY0FybW9yIH0pO1xuXG4gIGNvbnN0IGVuY3J5cHRlZFByaXZhdGVTaGFyZSA9IChhd2FpdCBwZ3AuZW5jcnlwdCh7XG4gICAgbWVzc2FnZTogYXdhaXQgcGdwLmNyZWF0ZU1lc3NhZ2Uoe1xuICAgICAgdGV4dDogcHJpdmF0ZVNoYXJlLFxuICAgIH0pLFxuICAgIGVuY3J5cHRpb25LZXlzOiBbcmVjaXBpZW50UHVibGljS2V5XSxcbiAgfSkpIGFzIHN0cmluZztcblxuICByZXR1cm4ge1xuICAgIGk6IG5TaGFyZS5pLFxuICAgIGo6IG5TaGFyZS5qLFxuICAgIHB1YmxpY1NoYXJlLFxuICAgIGVuY3J5cHRlZFByaXZhdGVTaGFyZSxcbiAgICBuOiBuU2hhcmUubixcbiAgICB2c3NQcm9vZjogblNoYXJlLnYsXG4gICAgcHJpdmF0ZVNoYXJlUHJvb2Y6IGF3YWl0IGNyZWF0ZVNoYXJlUHJvb2Yoc2VuZGVyR3BnS2V5LnByaXZhdGVLZXksIG5TaGFyZS51LCAnZWNkc2EnKSxcbiAgfTtcbn1cblxuLyoqXG4gKiBQcmVwYXJlcyBhIE5TaGFyZSB0byBiZSBleGNoYW5nZWQgd2l0aCBvdGhlciBrZXkgaG9sZGVycy5cbiAqIEFuIEFQSSBrZXkgc2hhcmUgcmVjZWl2ZWQgZnJvbSBhIHRoaXJkIHBhcnR5IHNob3VsZCBhbHJlYWR5IGJlIGVuY3J5cHRlZFxuICpcbiAqIEBwYXJhbSBrZXlTaGFyZSAtIFRTUyBrZXkgc2hhcmUgb2YgdGhlIHBhcnR5IHByZXBhcmluZyBleGNoYW5nZSBtYXRlcmlhbHNcbiAqIEByZXR1cm5zIGVuY3J5cHRlZCBOIFNoYXJlXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBidWlsZE5TaGFyZUZyb21BUElLZXlTaGFyZShrZXlTaGFyZTogQXBpS2V5U2hhcmUpOiBQcm9taXNlPEVuY3J5cHRlZE5TaGFyZT4ge1xuICByZXR1cm4ge1xuICAgIGk6IGdldFBhcnRpY2lwYW50SW5kZXgoa2V5U2hhcmUudG8pLFxuICAgIGo6IGdldFBhcnRpY2lwYW50SW5kZXgoa2V5U2hhcmUuZnJvbSksXG4gICAgcHVibGljU2hhcmU6IGtleVNoYXJlLnB1YmxpY1NoYXJlLFxuICAgIGVuY3J5cHRlZFByaXZhdGVTaGFyZToga2V5U2hhcmUucHJpdmF0ZVNoYXJlLFxuICAgIG46IGtleVNoYXJlLm4gPz8gJycsIC8vIHRoaXMgaXMgbm90IGN1cnJlbnRseSBuZWVkZWQgZm9yIGtleSBjcmVhdGlvblxuICAgIHByaXZhdGVTaGFyZVByb29mOiBrZXlTaGFyZS5wcml2YXRlU2hhcmVQcm9vZixcbiAgICB2c3NQcm9vZjoga2V5U2hhcmUudnNzUHJvb2YsXG4gIH07XG59XG5cbi8qKlxuICogRGVjcnlwdHMgZW5jcnlwdGVkIG4gc2hhcmVcbiAqIEBwYXJhbSBlbmNyeXB0ZWROU2hhcmUgLSBkZWNyeXB0YWJsZSBuIHNoYXJlIHdpdGggcmVjaXBpZW50IHByaXZhdGUgZ3BnIGtleSBhcm1vciBhbmQgc2VuZGVyIHB1YmxpYyBncGcga2V5XG4gKiBAcGFyYW0gaXNiczU4RW5jb2RlZFxuICogQHJldHVybnMgTiBzaGFyZVxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZGVjcnlwdE5TaGFyZShlbmNyeXB0ZWROU2hhcmU6IERlY3J5cHRhYmxlTlNoYXJlLCBpc2JzNThFbmNvZGVkID0gdHJ1ZSk6IFByb21pc2U8TlNoYXJlPiB7XG4gIGNvbnN0IHJlY2lwaWVudFByaXZhdGVLZXkgPSBhd2FpdCBwZ3AucmVhZEtleSh7IGFybW9yZWRLZXk6IGVuY3J5cHRlZE5TaGFyZS5yZWNpcGllbnRQcml2YXRlQXJtb3IgfSk7XG4gIGNvbnN0IHBydiA9IChcbiAgICBhd2FpdCBwZ3AuZGVjcnlwdCh7XG4gICAgICBtZXNzYWdlOiBhd2FpdCBwZ3AucmVhZE1lc3NhZ2UoeyBhcm1vcmVkTWVzc2FnZTogZW5jcnlwdGVkTlNoYXJlLm5TaGFyZS5lbmNyeXB0ZWRQcml2YXRlU2hhcmUgfSksXG4gICAgICBkZWNyeXB0aW9uS2V5czogW3JlY2lwaWVudFByaXZhdGVLZXkgYXMgcGdwLlByaXZhdGVLZXldLFxuICAgIH0pXG4gICkuZGF0YSBhcyBzdHJpbmc7XG5cbiAgbGV0IHU6IHN0cmluZztcbiAgaWYgKGlzYnM1OEVuY29kZWQpIHtcbiAgICBjb25zdCBwcml2YXRlU2hhcmUgPSBiczU4LmRlY29kZShwcnYpLnRvU3RyaW5nKCdoZXgnKTtcbiAgICB1ID0gcHJpdmF0ZVNoYXJlLnNsaWNlKDkyLCAxNTYpO1xuICB9IGVsc2Uge1xuICAgIHUgPSBwcnYuc2xpY2UoMCwgNjQpO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBpOiBlbmNyeXB0ZWROU2hhcmUublNoYXJlLmksXG4gICAgajogZW5jcnlwdGVkTlNoYXJlLm5TaGFyZS5qLFxuICAgIG46IGVuY3J5cHRlZE5TaGFyZS5uU2hhcmUubixcbiAgICB5OiBlbmNyeXB0ZWROU2hhcmUublNoYXJlLnB1YmxpY1NoYXJlLnNsaWNlKDAsIDY2KSxcbiAgICB1OiB1LFxuICAgIGNoYWluY29kZTogZW5jcnlwdGVkTlNoYXJlLm5TaGFyZS5wdWJsaWNTaGFyZS5zbGljZSg2NiwgMTMwKSxcbiAgICB2OiBlbmNyeXB0ZWROU2hhcmUublNoYXJlLnZzc1Byb29mLFxuICB9O1xufVxuXG4vKipcbiAqIEdldHMgcHVibGljIGtleSBmcm9tIGNvbW1vbiBrZXljaGFpblxuICogQHBhcmFtIGNvbW1vbktleUNoYWluIC0gY29tbW9uIGtleWNoYWluIG9mIGVjZHNhIHRzc1xuICogQHJldHVybnMgcHVibGljIGtleVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0UHVibGljS2V5KGNvbW1vbktleUNoYWluOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gY29tbW9uS2V5Q2hhaW4uc2xpY2UoMCwgNjYpO1xufVxuXG5leHBvcnQgY29uc3QgZGVsaW1ldGVyID0gJzonO1xuZXhwb3J0IGNvbnN0IHNlY29uZGFyeURlbGltZXRlciA9ICctJztcblxuZnVuY3Rpb24gdmFsaWRhdGVTaGFyZXNMZW5ndGgoc2hhcmVzOiBzdHJpbmdbXSwgZXhwZWN0ZWRMZW5ndGg6IG51bWJlciwgc2hhcmVOYW1lOiBzdHJpbmcpIHtcbiAgaWYgKHNoYXJlcy5sZW5ndGggPCBleHBlY3RlZExlbmd0aCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCAke3NoYXJlTmFtZX0gc2hhcmVgKTtcbiAgfVxufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZU9wdGlvbmFsVmFsdWVzKHNoYXJlczogc3RyaW5nW10sIHN0YXJ0OiBudW1iZXIsIGVuZDogbnVtYmVyLCBzaGFyZU5hbWU6IHN0cmluZywgdmFsdWVOYW1lOiBzdHJpbmcpIHtcbiAgbGV0IGZvdW5kID0gZmFsc2U7XG4gIGZvciAobGV0IGkgPSBzdGFydDsgaSA8IGVuZDsgaSsrKSB7XG4gICAgaWYgKHNoYXJlc1tpXSkge1xuICAgICAgZm91bmQgPSB0cnVlO1xuICAgIH0gZWxzZSBpZiAoZm91bmQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW5jb25zaXN0ZW50IG9wdGlvbmFsICR7dmFsdWVOYW1lfSB2YWx1ZSBpbiAke3NoYXJlTmFtZX0gc2hhcmVgKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZvdW5kO1xufVxuXG4vKipcbiAqIHBhcnNlcyBLIHNoYXJlIGZyb20gc2lnbmF0dXJlIHNoYXJlIHJlY29yZFxuICogQHBhcmFtIHNoYXJlIC0gc2lnbmF0dXJlIHNoYXJlIHJlY29yZFxuICogQHJldHVybnMgSyBTaGFyZVxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VLU2hhcmUoc2hhcmU6IFNpZ25hdHVyZVNoYXJlUmVjb3JkKTogS1NoYXJlIHtcbiAgY29uc3Qgc2hhcmVzID0gc2hhcmUuc2hhcmUuc3BsaXQoZGVsaW1ldGVyKTtcbiAgdmFsaWRhdGVTaGFyZXNMZW5ndGgoc2hhcmVzLCAxMSArIDIgKiBFY2RzYVBhaWxsaWVyUHJvb2YubSwgJ0snKTtcbiAgY29uc3QgaGFzUHJvb2YgPSB2YWxpZGF0ZU9wdGlvbmFsVmFsdWVzKHNoYXJlcywgNSwgMTEsICdLJywgJ3Byb29mJyk7XG5cbiAgY29uc3QgcHJvb2Y6IFJhbmdlUHJvb2ZTaGFyZSB8IHVuZGVmaW5lZCA9IGhhc1Byb29mXG4gICAgPyB7XG4gICAgICAgIHo6IHNoYXJlc1s1XSxcbiAgICAgICAgdTogc2hhcmVzWzZdLFxuICAgICAgICB3OiBzaGFyZXNbN10sXG4gICAgICAgIHM6IHNoYXJlc1s4XSxcbiAgICAgICAgczE6IHNoYXJlc1s5XSxcbiAgICAgICAgczI6IHNoYXJlc1sxMF0sXG4gICAgICB9XG4gICAgOiB1bmRlZmluZWQ7XG5cbiAgcmV0dXJuIHtcbiAgICBpOiBnZXRQYXJ0aWNpcGFudEluZGV4KHNoYXJlLnRvKSxcbiAgICBqOiBnZXRQYXJ0aWNpcGFudEluZGV4KHNoYXJlLmZyb20pLFxuICAgIGs6IHNoYXJlc1swXSxcbiAgICBuOiBzaGFyZXNbMV0sXG4gICAgbnRpbGRlOiBzaGFyZXNbMl0sXG4gICAgaDE6IHNoYXJlc1szXSxcbiAgICBoMjogc2hhcmVzWzRdLFxuICAgIHByb29mLFxuICAgIHA6IHNoYXJlcy5zbGljZSgxMSwgMTEgKyBFY2RzYVBhaWxsaWVyUHJvb2YubSksXG4gICAgc2lnbWE6IHNoYXJlcy5zbGljZSgxMSArIEVjZHNhUGFpbGxpZXJQcm9vZi5tLCAxMSArIDIgKiBFY2RzYVBhaWxsaWVyUHJvb2YubSksXG4gIH07XG59XG5cbi8qKlxuICogY29udmVydCBLIHNoYXJlIHRvIHNpZ25hdHVyZSBzaGFyZSByZWNvcmRcbiAqIEBwYXJhbSBzaGFyZSAtIEsgc2hhcmVcbiAqIEByZXR1cm5zIHNpZ25hdHVyZSBzaGFyZSByZWNvcmRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnRLU2hhcmUoc2hhcmU6IEtTaGFyZSk6IFNpZ25hdHVyZVNoYXJlUmVjb3JkIHtcbiAgcmV0dXJuIHtcbiAgICB0bzogZ2V0UGFydGljaXBhbnRGcm9tSW5kZXgoc2hhcmUuaSksXG4gICAgZnJvbTogZ2V0UGFydGljaXBhbnRGcm9tSW5kZXgoc2hhcmUuaiksXG4gICAgc2hhcmU6IGAke3NoYXJlLmt9JHtkZWxpbWV0ZXJ9JHtzaGFyZS5ufSR7ZGVsaW1ldGVyfSR7c2hhcmUubnRpbGRlfSR7ZGVsaW1ldGVyfSR7c2hhcmUuaDF9JHtkZWxpbWV0ZXJ9JHtcbiAgICAgIHNoYXJlLmgyXG4gICAgfSR7ZGVsaW1ldGVyfSR7c2hhcmUucHJvb2Y/LnogfHwgJyd9JHtkZWxpbWV0ZXJ9JHtzaGFyZS5wcm9vZj8udSB8fCAnJ30ke2RlbGltZXRlcn0ke1xuICAgICAgc2hhcmUucHJvb2Y/LncgfHwgJydcbiAgICB9JHtkZWxpbWV0ZXJ9JHtzaGFyZS5wcm9vZj8ucyB8fCAnJ30ke2RlbGltZXRlcn0ke3NoYXJlLnByb29mPy5zMSB8fCAnJ30ke2RlbGltZXRlcn0ke1xuICAgICAgc2hhcmUucHJvb2Y/LnMyIHx8ICcnXG4gICAgfSR7ZGVsaW1ldGVyfSR7KHNoYXJlLnAgfHwgW10pLmpvaW4oZGVsaW1ldGVyKX0ke2RlbGltZXRlcn0keyhzaGFyZS5zaWdtYSB8fCBbXSkuam9pbihkZWxpbWV0ZXIpfWAsXG4gIH07XG59XG5cbi8qKlxuICogcGFyc2VzIEEgc2hhcmUgZnJvbSBzaWduYXR1cmUgc2hhcmUgcmVjb3JkXG4gKiBAcGFyYW0gc2hhcmUgLSBzaWduYXR1cmUgc2hhcmUgcmVjb3JkXG4gKiBAcmV0dXJucyBBIFNoYXJlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUFTaGFyZShzaGFyZTogU2lnbmF0dXJlU2hhcmVSZWNvcmQpOiBBU2hhcmUge1xuICBjb25zdCBzaGFyZXMgPSBzaGFyZS5zaGFyZS5zcGxpdChkZWxpbWV0ZXIpO1xuICB2YWxpZGF0ZVNoYXJlc0xlbmd0aChzaGFyZXMsIDM3ICsgRWNkc2FQYWlsbGllclByb29mLm0sICdBJyk7XG4gIGNvbnN0IGhhc1Byb29mID0gdmFsaWRhdGVPcHRpb25hbFZhbHVlcyhzaGFyZXMsIDcsIDEzLCAnQScsICdwcm9vZicpO1xuICBjb25zdCBoYXNHYW1tYVByb29mID0gdmFsaWRhdGVPcHRpb25hbFZhbHVlcyhzaGFyZXMsIDEzLCAyNSwgJ0EnLCAnZ2FtbWFQcm9vZicpO1xuICBjb25zdCBoYXNXUHJvb2YgPSB2YWxpZGF0ZU9wdGlvbmFsVmFsdWVzKHNoYXJlcywgMjUsIDM3LCAnQScsICd3UHJvb2YnKTtcblxuICBjb25zdCBwcm9vZjogUmFuZ2VQcm9vZlNoYXJlIHwgdW5kZWZpbmVkID0gaGFzUHJvb2ZcbiAgICA/IHtcbiAgICAgICAgejogc2hhcmVzWzddLFxuICAgICAgICB1OiBzaGFyZXNbOF0sXG4gICAgICAgIHc6IHNoYXJlc1s5XSxcbiAgICAgICAgczogc2hhcmVzWzEwXSxcbiAgICAgICAgczE6IHNoYXJlc1sxMV0sXG4gICAgICAgIHMyOiBzaGFyZXNbMTJdLFxuICAgICAgfVxuICAgIDogdW5kZWZpbmVkO1xuXG4gIGNvbnN0IGdhbW1hUHJvb2Y6IFJhbmdlUHJvb2ZXaXRoQ2hlY2tTaGFyZSB8IHVuZGVmaW5lZCA9IGhhc0dhbW1hUHJvb2ZcbiAgICA/IHtcbiAgICAgICAgejogc2hhcmVzWzEzXSxcbiAgICAgICAgenBybTogc2hhcmVzWzE0XSxcbiAgICAgICAgdDogc2hhcmVzWzE1XSxcbiAgICAgICAgdjogc2hhcmVzWzE2XSxcbiAgICAgICAgdzogc2hhcmVzWzE3XSxcbiAgICAgICAgczogc2hhcmVzWzE4XSxcbiAgICAgICAgczE6IHNoYXJlc1sxOV0sXG4gICAgICAgIHMyOiBzaGFyZXNbMjBdLFxuICAgICAgICB0MTogc2hhcmVzWzIxXSxcbiAgICAgICAgdDI6IHNoYXJlc1syMl0sXG4gICAgICAgIHU6IHNoYXJlc1syM10sXG4gICAgICAgIHg6IHNoYXJlc1syNF0sXG4gICAgICB9XG4gICAgOiB1bmRlZmluZWQ7XG5cbiAgY29uc3Qgd1Byb29mOiBSYW5nZVByb29mV2l0aENoZWNrU2hhcmUgfCB1bmRlZmluZWQgPSBoYXNXUHJvb2ZcbiAgICA/IHtcbiAgICAgICAgejogc2hhcmVzWzI1XSxcbiAgICAgICAgenBybTogc2hhcmVzWzI2XSxcbiAgICAgICAgdDogc2hhcmVzWzI3XSxcbiAgICAgICAgdjogc2hhcmVzWzI4XSxcbiAgICAgICAgdzogc2hhcmVzWzI5XSxcbiAgICAgICAgczogc2hhcmVzWzMwXSxcbiAgICAgICAgczE6IHNoYXJlc1szMV0sXG4gICAgICAgIHMyOiBzaGFyZXNbMzJdLFxuICAgICAgICB0MTogc2hhcmVzWzMzXSxcbiAgICAgICAgdDI6IHNoYXJlc1szNF0sXG4gICAgICAgIHU6IHNoYXJlc1szNV0sXG4gICAgICAgIHg6IHNoYXJlc1szNl0sXG4gICAgICB9XG4gICAgOiB1bmRlZmluZWQ7XG5cbiAgcmV0dXJuIHtcbiAgICBpOiBnZXRQYXJ0aWNpcGFudEluZGV4KHNoYXJlLnRvKSxcbiAgICBqOiBnZXRQYXJ0aWNpcGFudEluZGV4KHNoYXJlLmZyb20pLFxuICAgIGs6IHNoYXJlc1swXSxcbiAgICBhbHBoYTogc2hhcmVzWzFdLFxuICAgIG11OiBzaGFyZXNbMl0sXG4gICAgbjogc2hhcmVzWzNdLFxuICAgIG50aWxkZTogc2hhcmVzWzRdLFxuICAgIGgxOiBzaGFyZXNbNV0sXG4gICAgaDI6IHNoYXJlc1s2XSxcbiAgICBwcm9vZixcbiAgICBnYW1tYVByb29mLFxuICAgIHdQcm9vZixcbiAgICBzaWdtYTogc2hhcmVzLnNsaWNlKDM3KSxcbiAgfTtcbn1cblxuLyoqXG4gKiBjb252ZXJ0IEEgc2hhcmUgdG8gc2lnbmF0dXJlIHNoYXJlIHJlY29yZFxuICogQHBhcmFtIHNoYXJlIC0gQSBzaGFyZVxuICogQHJldHVybnMgc2lnbmF0dXJlIHNoYXJlIHJlY29yZFxuICovXG5leHBvcnQgZnVuY3Rpb24gY29udmVydEFTaGFyZShzaGFyZTogQVNoYXJlKTogU2lnbmF0dXJlU2hhcmVSZWNvcmQge1xuICByZXR1cm4ge1xuICAgIHRvOiBnZXRQYXJ0aWNpcGFudEZyb21JbmRleChzaGFyZS5pKSxcbiAgICBmcm9tOiBnZXRQYXJ0aWNpcGFudEZyb21JbmRleChzaGFyZS5qKSxcbiAgICBzaGFyZTogYCR7c2hhcmUua30ke2RlbGltZXRlcn0ke3NoYXJlLmFscGhhfSR7ZGVsaW1ldGVyfSR7c2hhcmUubXV9JHtkZWxpbWV0ZXJ9JHtzaGFyZS5ufSR7ZGVsaW1ldGVyfSR7XG4gICAgICBzaGFyZS5udGlsZGVcbiAgICB9JHtkZWxpbWV0ZXJ9JHtzaGFyZS5oMX0ke2RlbGltZXRlcn0ke3NoYXJlLmgyfSR7ZGVsaW1ldGVyfSR7c2hhcmUucHJvb2Y/LnogfHwgJyd9JHtkZWxpbWV0ZXJ9JHtcbiAgICAgIHNoYXJlLnByb29mPy51IHx8ICcnXG4gICAgfSR7ZGVsaW1ldGVyfSR7c2hhcmUucHJvb2Y/LncgfHwgJyd9JHtkZWxpbWV0ZXJ9JHtzaGFyZS5wcm9vZj8ucyB8fCAnJ30ke2RlbGltZXRlcn0ke1xuICAgICAgc2hhcmUucHJvb2Y/LnMxIHx8ICcnXG4gICAgfSR7ZGVsaW1ldGVyfSR7c2hhcmUucHJvb2Y/LnMyIHx8ICcnfSR7ZGVsaW1ldGVyfSR7c2hhcmUuZ2FtbWFQcm9vZj8ueiB8fCAnJ30ke2RlbGltZXRlcn0ke1xuICAgICAgc2hhcmUuZ2FtbWFQcm9vZj8uenBybSB8fCAnJ1xuICAgIH0ke2RlbGltZXRlcn0ke3NoYXJlLmdhbW1hUHJvb2Y/LnQgfHwgJyd9JHtkZWxpbWV0ZXJ9JHtzaGFyZS5nYW1tYVByb29mPy52IHx8ICcnfSR7ZGVsaW1ldGVyfSR7XG4gICAgICBzaGFyZS5nYW1tYVByb29mPy53IHx8ICcnXG4gICAgfSR7ZGVsaW1ldGVyfSR7c2hhcmUuZ2FtbWFQcm9vZj8ucyB8fCAnJ30ke2RlbGltZXRlcn0ke3NoYXJlLmdhbW1hUHJvb2Y/LnMxIHx8ICcnfSR7ZGVsaW1ldGVyfSR7XG4gICAgICBzaGFyZS5nYW1tYVByb29mPy5zMiB8fCAnJ1xuICAgIH0ke2RlbGltZXRlcn0ke3NoYXJlLmdhbW1hUHJvb2Y/LnQxIHx8ICcnfSR7ZGVsaW1ldGVyfSR7c2hhcmUuZ2FtbWFQcm9vZj8udDIgfHwgJyd9JHtkZWxpbWV0ZXJ9JHtcbiAgICAgIHNoYXJlLmdhbW1hUHJvb2Y/LnUgfHwgJydcbiAgICB9JHtkZWxpbWV0ZXJ9JHtzaGFyZS5nYW1tYVByb29mPy54IHx8ICcnfSR7ZGVsaW1ldGVyfSR7c2hhcmUud1Byb29mPy56IHx8ICcnfSR7ZGVsaW1ldGVyfSR7XG4gICAgICBzaGFyZS53UHJvb2Y/Lnpwcm0gfHwgJydcbiAgICB9JHtkZWxpbWV0ZXJ9JHtzaGFyZS53UHJvb2Y/LnQgfHwgJyd9JHtkZWxpbWV0ZXJ9JHtzaGFyZS53UHJvb2Y/LnYgfHwgJyd9JHtkZWxpbWV0ZXJ9JHtcbiAgICAgIHNoYXJlLndQcm9vZj8udyB8fCAnJ1xuICAgIH0ke2RlbGltZXRlcn0ke3NoYXJlLndQcm9vZj8ucyB8fCAnJ30ke2RlbGltZXRlcn0ke3NoYXJlLndQcm9vZj8uczEgfHwgJyd9JHtkZWxpbWV0ZXJ9JHtcbiAgICAgIHNoYXJlLndQcm9vZj8uczIgfHwgJydcbiAgICB9JHtkZWxpbWV0ZXJ9JHtzaGFyZS53UHJvb2Y/LnQxIHx8ICcnfSR7ZGVsaW1ldGVyfSR7c2hhcmUud1Byb29mPy50MiB8fCAnJ30ke2RlbGltZXRlcn0ke1xuICAgICAgc2hhcmUud1Byb29mPy51IHx8ICcnXG4gICAgfSR7ZGVsaW1ldGVyfSR7c2hhcmUud1Byb29mPy54IHx8ICcnfSR7ZGVsaW1ldGVyfSR7KHNoYXJlLnNpZ21hIHx8IFtdKS5qb2luKGRlbGltZXRlcil9YCxcbiAgfTtcbn1cblxuLyoqXG4gKiBwYXJzZXMgTXUgc2hhcmUgZnJvbSBzaWduYXR1cmUgc2hhcmUgcmVjb3JkXG4gKiBAcGFyYW0gc2hhcmUgLSBzaWduYXR1cmUgc2hhcmUgcmVjb3JkXG4gKiBAcmV0dXJucyBNdSBTaGFyZVxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VNdVNoYXJlKHNoYXJlOiBTaWduYXR1cmVTaGFyZVJlY29yZCk6IE1VU2hhcmUge1xuICBjb25zdCBzaGFyZXMgPSBzaGFyZS5zaGFyZS5zcGxpdChkZWxpbWV0ZXIpO1xuICB2YWxpZGF0ZVNoYXJlc0xlbmd0aChzaGFyZXMsIDI2LCAnTXUnKTtcbiAgY29uc3QgaGFzR2FtbWFQcm9vZiA9IHZhbGlkYXRlT3B0aW9uYWxWYWx1ZXMoc2hhcmVzLCAyLCAxNCwgJ011JywgJ2dhbW1hUHJvb2YnKTtcbiAgY29uc3QgaGFzV1Byb29mID0gdmFsaWRhdGVPcHRpb25hbFZhbHVlcyhzaGFyZXMsIDE0LCAyNiwgJ011JywgJ3dQcm9vZicpO1xuXG4gIGxldCBnYW1tYVByb29mO1xuICBpZiAoaGFzR2FtbWFQcm9vZikge1xuICAgIGdhbW1hUHJvb2YgPSB7XG4gICAgICB6OiBzaGFyZXNbMl0sXG4gICAgICB6cHJtOiBzaGFyZXNbM10sXG4gICAgICB0OiBzaGFyZXNbNF0sXG4gICAgICB2OiBzaGFyZXNbNV0sXG4gICAgICB3OiBzaGFyZXNbNl0sXG4gICAgICBzOiBzaGFyZXNbN10sXG4gICAgICBzMTogc2hhcmVzWzhdLFxuICAgICAgczI6IHNoYXJlc1s5XSxcbiAgICAgIHQxOiBzaGFyZXNbMTBdLFxuICAgICAgdDI6IHNoYXJlc1sxMV0sXG4gICAgICB1OiBzaGFyZXNbMTJdLFxuICAgICAgeDogc2hhcmVzWzEzXSxcbiAgICB9O1xuICB9XG5cbiAgbGV0IHdQcm9vZjtcbiAgaWYgKGhhc1dQcm9vZikge1xuICAgIHdQcm9vZiA9IHtcbiAgICAgIHo6IHNoYXJlc1sxNF0sXG4gICAgICB6cHJtOiBzaGFyZXNbMTVdLFxuICAgICAgdDogc2hhcmVzWzE2XSxcbiAgICAgIHY6IHNoYXJlc1sxN10sXG4gICAgICB3OiBzaGFyZXNbMThdLFxuICAgICAgczogc2hhcmVzWzE5XSxcbiAgICAgIHMxOiBzaGFyZXNbMjBdLFxuICAgICAgczI6IHNoYXJlc1syMV0sXG4gICAgICB0MTogc2hhcmVzWzIyXSxcbiAgICAgIHQyOiBzaGFyZXNbMjNdLFxuICAgICAgdTogc2hhcmVzWzI0XSxcbiAgICAgIHg6IHNoYXJlc1syNV0sXG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgaTogZ2V0UGFydGljaXBhbnRJbmRleChzaGFyZS50byksXG4gICAgajogZ2V0UGFydGljaXBhbnRJbmRleChzaGFyZS5mcm9tKSxcbiAgICBhbHBoYTogc2hhcmVzWzBdLFxuICAgIG11OiBzaGFyZXNbMV0sXG4gICAgZ2FtbWFQcm9vZixcbiAgICB3UHJvb2YsXG4gIH07XG59XG5cbi8qKlxuICogY29udmVydCBNdSBzaGFyZSB0byBzaWduYXR1cmUgc2hhcmUgcmVjb3JkXG4gKiBAcGFyYW0gc2hhcmUgLSBNdSBzaGFyZVxuICogQHJldHVybnMgc2lnbmF0dXJlIHNoYXJlIHJlY29yZFxuICovXG5leHBvcnQgZnVuY3Rpb24gY29udmVydE11U2hhcmUoc2hhcmU6IE1VU2hhcmUpOiBTaWduYXR1cmVTaGFyZVJlY29yZCB7XG4gIHJldHVybiB7XG4gICAgdG86IGdldFBhcnRpY2lwYW50RnJvbUluZGV4KHNoYXJlLmkpLFxuICAgIGZyb206IGdldFBhcnRpY2lwYW50RnJvbUluZGV4KHNoYXJlLmopLFxuICAgIHNoYXJlOiBgJHtzaGFyZS5hbHBoYX0ke2RlbGltZXRlcn0ke3NoYXJlLm11fSR7ZGVsaW1ldGVyfSR7c2hhcmUuZ2FtbWFQcm9vZj8ueiB8fCAnJ30ke2RlbGltZXRlcn0ke1xuICAgICAgc2hhcmUuZ2FtbWFQcm9vZj8uenBybSB8fCAnJ1xuICAgIH0ke2RlbGltZXRlcn0ke3NoYXJlLmdhbW1hUHJvb2Y/LnQgfHwgJyd9JHtkZWxpbWV0ZXJ9JHtzaGFyZS5nYW1tYVByb29mPy52IHx8ICcnfSR7ZGVsaW1ldGVyfSR7XG4gICAgICBzaGFyZS5nYW1tYVByb29mPy53IHx8ICcnXG4gICAgfSR7ZGVsaW1ldGVyfSR7c2hhcmUuZ2FtbWFQcm9vZj8ucyB8fCAnJ30ke2RlbGltZXRlcn0ke3NoYXJlLmdhbW1hUHJvb2Y/LnMxIHx8ICcnfSR7ZGVsaW1ldGVyfSR7XG4gICAgICBzaGFyZS5nYW1tYVByb29mPy5zMiB8fCAnJ1xuICAgIH0ke2RlbGltZXRlcn0ke3NoYXJlLmdhbW1hUHJvb2Y/LnQxIHx8ICcnfSR7ZGVsaW1ldGVyfSR7c2hhcmUuZ2FtbWFQcm9vZj8udDIgfHwgJyd9JHtkZWxpbWV0ZXJ9JHtcbiAgICAgIHNoYXJlLmdhbW1hUHJvb2Y/LnUgfHwgJydcbiAgICB9JHtkZWxpbWV0ZXJ9JHtzaGFyZS5nYW1tYVByb29mPy54IHx8ICcnfSR7ZGVsaW1ldGVyfSR7c2hhcmUud1Byb29mPy56IHx8ICcnfSR7ZGVsaW1ldGVyfSR7XG4gICAgICBzaGFyZS53UHJvb2Y/Lnpwcm0gfHwgJydcbiAgICB9JHtkZWxpbWV0ZXJ9JHtzaGFyZS53UHJvb2Y/LnQgfHwgJyd9JHtkZWxpbWV0ZXJ9JHtzaGFyZS53UHJvb2Y/LnYgfHwgJyd9JHtkZWxpbWV0ZXJ9JHtcbiAgICAgIHNoYXJlLndQcm9vZj8udyB8fCAnJ1xuICAgIH0ke2RlbGltZXRlcn0ke3NoYXJlLndQcm9vZj8ucyB8fCAnJ30ke2RlbGltZXRlcn0ke3NoYXJlLndQcm9vZj8uczEgfHwgJyd9JHtkZWxpbWV0ZXJ9JHtcbiAgICAgIHNoYXJlLndQcm9vZj8uczIgfHwgJydcbiAgICB9JHtkZWxpbWV0ZXJ9JHtzaGFyZS53UHJvb2Y/LnQxIHx8ICcnfSR7ZGVsaW1ldGVyfSR7c2hhcmUud1Byb29mPy50MiB8fCAnJ30ke2RlbGltZXRlcn0ke1xuICAgICAgc2hhcmUud1Byb29mPy51IHx8ICcnXG4gICAgfSR7ZGVsaW1ldGVyfSR7c2hhcmUud1Byb29mPy54IHx8ICcnfWAsXG4gIH07XG59XG5cbi8qKlxuICogcGFyc2VzIEQgc2hhcmUgZnJvbSBzaWduYXR1cmUgc2hhcmUgcmVjb3JkXG4gKiBAcGFyYW0gc2hhcmUgLSBzaWduYXR1cmUgc2hhcmUgcmVjb3JkXG4gKiBAcmV0dXJucyBEIFNoYXJlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZURTaGFyZShzaGFyZTogU2lnbmF0dXJlU2hhcmVSZWNvcmQpOiBEU2hhcmUge1xuICBjb25zdCBzaGFyZXMgPSBzaGFyZS5zaGFyZS5zcGxpdChkZWxpbWV0ZXIpO1xuICB2YWxpZGF0ZVNoYXJlc0xlbmd0aChzaGFyZXMsIDIsICdEJyk7XG5cbiAgcmV0dXJuIHtcbiAgICBpOiBnZXRQYXJ0aWNpcGFudEluZGV4KHNoYXJlLnRvKSxcbiAgICBqOiBnZXRQYXJ0aWNpcGFudEluZGV4KHNoYXJlLmZyb20pLFxuICAgIGRlbHRhOiBzaGFyZXNbMF0sXG4gICAgR2FtbWE6IHNoYXJlc1sxXSxcbiAgfTtcbn1cblxuLyoqXG4gKiBjb252ZXJ0IEQgc2hhcmUgdG8gc2lnbmF0dXJlIHNoYXJlIHJlY29yZFxuICogQHBhcmFtIHNoYXJlIC0gRCBzaGFyZVxuICogQHJldHVybnMgc2lnbmF0dXJlIHNoYXJlIHJlY29yZFxuICovXG5leHBvcnQgZnVuY3Rpb24gY29udmVydERTaGFyZShzaGFyZTogRFNoYXJlKTogU2lnbmF0dXJlU2hhcmVSZWNvcmQge1xuICByZXR1cm4ge1xuICAgIHRvOiBnZXRQYXJ0aWNpcGFudEZyb21JbmRleChzaGFyZS5pKSxcbiAgICBmcm9tOiBnZXRQYXJ0aWNpcGFudEZyb21JbmRleChzaGFyZS5qKSxcbiAgICBzaGFyZTogYCR7c2hhcmUuZGVsdGF9JHtkZWxpbWV0ZXJ9JHtzaGFyZS5HYW1tYX1gLFxuICB9O1xufVxuXG4vKipcbiAqIHBhcnNlcyBTIGFuZCBEIHNoYXJlIGZyb20gc2lnbmF0dXJlIHNoYXJlIHJlY29yZFxuICogQHBhcmFtIHNoYXJlIC0gc2lnbmF0dXJlIHNoYXJlIHJlY29yZFxuICogQHJldHVybnMgT2JqZWN0IGNvbnRhaW5pbmcgUyBhbmQgRCBTaGFyZVxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VTRFNoYXJlKHNoYXJlOiBTaWduYXR1cmVTaGFyZVJlY29yZCk6IHsgc1NoYXJlOiBTaWduYXR1cmVTaGFyZTsgZFNoYXJlOiBEU2hhcmUgfSB7XG4gIGNvbnN0IHNoYXJlcyA9IHNoYXJlLnNoYXJlLnNwbGl0KHNlY29uZGFyeURlbGltZXRlcik7XG4gIHZhbGlkYXRlU2hhcmVzTGVuZ3RoKHNoYXJlcywgMiwgJ1NEJyk7XG5cbiAgcmV0dXJuIHtcbiAgICBzU2hhcmU6IHBhcnNlU2lnbmF0dXJlU2hhcmUoeyB0bzogc2hhcmUudG8sIGZyb206IHNoYXJlLmZyb20sIHNoYXJlOiBzaGFyZXNbMF0gfSksXG4gICAgZFNoYXJlOiBwYXJzZURTaGFyZSh7IHRvOiBzaGFyZS50bywgZnJvbTogc2hhcmUuZnJvbSwgc2hhcmU6IHNoYXJlc1sxXSB9KSxcbiAgfTtcbn1cblxuLyoqXG4gKiBjb252ZXJ0IFMgYW5kIEQgc2hhcmUgdG8gc2lnbmF0dXJlIHNoYXJlIHJlY29yZFxuICogQHBhcmFtIHNoYXJlIC0gUyBhbmQgRCBzaGFyZSBpbiBhIG9iamVjdFxuICogQHJldHVybnMgc2lnbmF0dXJlIHNoYXJlIHJlY29yZFxuICovXG5leHBvcnQgZnVuY3Rpb24gY29udmVydFNEU2hhcmUoc2hhcmU6IHsgc1NoYXJlOiBTU2hhcmU7IGRTaGFyZTogRFNoYXJlIH0pOiBTaWduYXR1cmVTaGFyZVJlY29yZCB7XG4gIHJldHVybiB7XG4gICAgdG86IGdldFBhcnRpY2lwYW50RnJvbUluZGV4KHNoYXJlLmRTaGFyZS5pKSxcbiAgICBmcm9tOiBnZXRQYXJ0aWNpcGFudEZyb21JbmRleChzaGFyZS5kU2hhcmUuaiksXG4gICAgc2hhcmU6IGAke3NoYXJlLnNTaGFyZS5SfSR7ZGVsaW1ldGVyfSR7c2hhcmUuc1NoYXJlLnN9JHtkZWxpbWV0ZXJ9JHtzaGFyZS5zU2hhcmUueX0ke3NlY29uZGFyeURlbGltZXRlcn0ke3NoYXJlLmRTaGFyZS5kZWx0YX0ke2RlbGltZXRlcn0ke3NoYXJlLmRTaGFyZS5HYW1tYX1gLFxuICB9O1xufVxuXG4vKipcbiAqIHBhcnNlcyBzaWduYXR1cmUgc2hhcmUgZnJvbSBzaWduYXR1cmUgc2hhcmUgcmVjb3JkXG4gKiBAcGFyYW0gc2hhcmUgLSBzaWduYXR1cmUgc2hhcmUgcmVjb3JkXG4gKiBAcmV0dXJucyBTaWduYXR1cmUgU2hhcmVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlU2lnbmF0dXJlU2hhcmUoc2hhcmU6IFNpZ25hdHVyZVNoYXJlUmVjb3JkKTogU2lnbmF0dXJlU2hhcmUge1xuICBjb25zdCBzaGFyZXMgPSBzaGFyZS5zaGFyZS5zcGxpdChkZWxpbWV0ZXIpO1xuICB2YWxpZGF0ZVNoYXJlc0xlbmd0aChzaGFyZXMsIDMsICdTaWduYXR1cmUnKTtcblxuICByZXR1cm4ge1xuICAgIGk6IGdldFBhcnRpY2lwYW50SW5kZXgoc2hhcmUudG8pLFxuICAgIFI6IHNoYXJlc1swXSxcbiAgICBzOiBzaGFyZXNbMV0sXG4gICAgeTogc2hhcmVzWzJdLFxuICB9O1xufVxuXG4vKipcbiAqIGNvbnZldHMgY29tYmluZWQgc2lnbmF0dXJlIHRvIHNpZ25hdHVyZSBzaGFyZSByZWNvcmRcbiAqIEBwYXJhbSBzaWduYXR1cmUgLSBjb21iaW5lZCBzaWduYXR1cmUgc2hhcmVcbiAqIEBwYXJhbSB1c2VySW5kZXggLSB1c2VyIGluZGV4LCBlaXRoZXIgMSAodXNlcikgb3IgMiAoYmFja3VwKVxuICogQHJldHVybnMgc2lnbmF0dXJlIHNoYXJlIHJlY29yZFxuICovXG5leHBvcnQgZnVuY3Rpb24gY29udmVydENvbWJpbmVkU2lnbmF0dXJlKHNpZ25hdHVyZTogU2lnbmF0dXJlLCB1c2VySW5kZXg6IG51bWJlcik6IFNpZ25hdHVyZVNoYXJlUmVjb3JkIHtcbiAgcmV0dXJuIHtcbiAgICB0bzogU2lnbmF0dXJlU2hhcmVUeXBlLkJJVEdPLFxuICAgIGZyb206IGdldFBhcnRpY2lwYW50RnJvbUluZGV4KHVzZXJJbmRleCksXG4gICAgc2hhcmU6IGAke3NpZ25hdHVyZS5yZWNpZH0ke2RlbGltZXRlcn0ke3NpZ25hdHVyZS5yfSR7ZGVsaW1ldGVyfSR7c2lnbmF0dXJlLnN9JHtkZWxpbWV0ZXJ9JHtzaWduYXR1cmUueX1gLFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VDb21iaW5lZFNpZ25hdHVyZShzaGFyZTogU2lnbmF0dXJlU2hhcmVSZWNvcmQpOiBTaWduYXR1cmUge1xuICBjb25zdCBzaGFyZXMgPSBzaGFyZS5zaGFyZS5zcGxpdChkZWxpbWV0ZXIpO1xuICB2YWxpZGF0ZVNoYXJlc0xlbmd0aChzaGFyZXMsIDMsICdTaWduYXR1cmUnKTtcblxuICByZXR1cm4ge1xuICAgIHJlY2lkOiBOdW1iZXIoc2hhcmVzWzBdKSxcbiAgICByOiBzaGFyZXNbMV0sXG4gICAgczogc2hhcmVzWzJdLFxuICAgIHk6IHNoYXJlc1szXSxcbiAgfTtcbn1cblxuLyoqXG4gKiBjb252ZXJ0IHNpZ25hdHVyZSBzaGFyZSB0byBzaWduYXR1cmUgc2hhcmUgcmVjb3JkXG4gKiBAcGFyYW0gc2hhcmUgLSBTaWduYXR1cmUgc2hhcmVcbiAqIEBwYXJhbSBzZW5kZXJJbmRleFxuICogQHBhcmFtIHJlY2lwaWVudEluZGV4XG4gKiBAcmV0dXJucyBzaWduYXR1cmUgc2hhcmUgcmVjb3JkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0U2lnbmF0dXJlU2hhcmUoXG4gIHNoYXJlOiBTaWduYXR1cmVTaGFyZSxcbiAgc2VuZGVySW5kZXg6IG51bWJlcixcbiAgcmVjaXBpZW50SW5kZXg6IG51bWJlclxuKTogU2lnbmF0dXJlU2hhcmVSZWNvcmQge1xuICByZXR1cm4ge1xuICAgIHRvOiBnZXRQYXJ0aWNpcGFudEZyb21JbmRleChyZWNpcGllbnRJbmRleCksXG4gICAgZnJvbTogZ2V0UGFydGljaXBhbnRGcm9tSW5kZXgoc2VuZGVySW5kZXgpLFxuICAgIHNoYXJlOiBgJHtzaGFyZS5SfSR7ZGVsaW1ldGVyfSR7c2hhcmUuc30ke2RlbGltZXRlcn0ke3NoYXJlLnl9YCxcbiAgfTtcbn1cblxuLyoqXG4gKiBjb252ZXJ0cyBCIHNoYXJlIHRvIHNpZ25hdHVyZSBzaGFyZSByZWNvcmRcbiAqIEBwYXJhbSBzaGFyZSAtIEIgc2hhcmVcbiAqIEByZXR1cm5zIHNpZ25hdHVyZSBzaGFyZSByZWNvcmRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnRCU2hhcmUoc2hhcmU6IEJTaGFyZSk6IFNpZ25hdHVyZVNoYXJlUmVjb3JkIHtcbiAgcmV0dXJuIHtcbiAgICB0bzogU2lnbmF0dXJlU2hhcmVUeXBlLkJJVEdPLFxuICAgIGZyb206IGdldFBhcnRpY2lwYW50RnJvbUluZGV4KHNoYXJlLmkpLFxuICAgIHNoYXJlOiBgJHtzaGFyZS5iZXRhfSR7ZGVsaW1ldGVyfSR7c2hhcmUuZ2FtbWF9JHtkZWxpbWV0ZXJ9JHtzaGFyZS5rfSR7ZGVsaW1ldGVyfSR7c2hhcmUubnV9JHtkZWxpbWV0ZXJ9JHtcbiAgICAgIHNoYXJlLndcbiAgICB9JHtkZWxpbWV0ZXJ9JHtzaGFyZS55fSR7ZGVsaW1ldGVyfSR7c2hhcmUubH0ke2RlbGltZXRlcn0ke3NoYXJlLm19JHtkZWxpbWV0ZXJ9JHtzaGFyZS5ufSR7ZGVsaW1ldGVyfSR7XG4gICAgICBzaGFyZS5udGlsZGVcbiAgICB9JHtkZWxpbWV0ZXJ9JHtzaGFyZS5oMX0ke2RlbGltZXRlcn0ke3NoYXJlLmgyfSR7ZGVsaW1ldGVyfSR7c2hhcmUuY2t9JHtkZWxpbWV0ZXJ9JHsoc2hhcmUucCB8fCBbXSkuam9pbihcbiAgICAgIGRlbGltZXRlclxuICAgICl9YCxcbiAgfTtcbn1cblxuLyoqXG4gKiBwYXJzZXMgQiBzaGFyZSBmcm9tIHNpZ25hdHVyZSBzaGFyZSByZWNvcmRcbiAqIEBwYXJhbSBzaGFyZSBCIHNoYXJlIHJlY29yZFxuICogQHJldHVybnMgQiBTaGFyZVxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VCU2hhcmUoc2hhcmU6IFNpZ25hdHVyZVNoYXJlUmVjb3JkKTogQlNoYXJlIHtcbiAgY29uc3Qgc2hhcmVzID0gc2hhcmUuc2hhcmUuc3BsaXQoZGVsaW1ldGVyKTtcbiAgdmFsaWRhdGVTaGFyZXNMZW5ndGgoc2hhcmVzLCAxMyArIEVjZHNhUGFpbGxpZXJQcm9vZi5tLCAnQicpO1xuXG4gIHJldHVybiB7XG4gICAgaTogZ2V0UGFydGljaXBhbnRJbmRleChzaGFyZS50byksXG4gICAgYmV0YTogc2hhcmVzWzBdLFxuICAgIGdhbW1hOiBzaGFyZXNbMV0sXG4gICAgazogc2hhcmVzWzJdLFxuICAgIG51OiBzaGFyZXNbM10sXG4gICAgdzogc2hhcmVzWzRdLFxuICAgIHk6IHNoYXJlc1s1XSxcbiAgICBsOiBzaGFyZXNbNl0sXG4gICAgbTogc2hhcmVzWzddLFxuICAgIG46IHNoYXJlc1s4XSxcbiAgICBudGlsZGU6IHNoYXJlc1s5XSxcbiAgICBoMTogc2hhcmVzWzEwXSxcbiAgICBoMjogc2hhcmVzWzExXSxcbiAgICBjazogc2hhcmVzWzEyXSxcbiAgICBwOiBzaGFyZXMuc2xpY2UoMTMsIDEzICsgRWNkc2FQYWlsbGllclByb29mLm0pLFxuICB9O1xufVxuXG4vKipcbiAqIGNvbnZlcnRzIE8gc2hhcmUgdG8gc2lnbmF0dXJlIHNoYXJlIHJlY29yZFxuICogQHBhcmFtIHNoYXJlIE8gc2hhcmVcbiAqIEByZXR1cm5zIHNpZ25hdHVyZSBzaGFyZSByZWNvcmRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnRPU2hhcmUoc2hhcmU6IE9TaGFyZSk6IFNpZ25hdHVyZVNoYXJlUmVjb3JkIHtcbiAgcmV0dXJuIHtcbiAgICB0bzogU2lnbmF0dXJlU2hhcmVUeXBlLkJJVEdPLFxuICAgIGZyb206IGdldFBhcnRpY2lwYW50RnJvbUluZGV4KHNoYXJlLmkpLFxuICAgIHNoYXJlOiBgJHtzaGFyZS5HYW1tYX0ke2RlbGltZXRlcn0ke3NoYXJlLmRlbHRhfSR7ZGVsaW1ldGVyfSR7c2hhcmUua30ke2RlbGltZXRlcn0ke3NoYXJlLm9taWNyb259JHtkZWxpbWV0ZXJ9JHtzaGFyZS55fWAsXG4gIH07XG59XG5cbi8qKlxuICogcGFyc2VzIE8gc2hhcmUgZnJvbSBzaWduYXR1cmUgc2hhcmUgcmVjb3JkXG4gKiBAcGFyYW0gc2hhcmUgTyBzaGFyZSByZWNvcmRcbiAqIEByZXR1cm5zIE8gU2hhcmVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlT1NoYXJlKHNoYXJlOiBTaWduYXR1cmVTaGFyZVJlY29yZCk6IE9TaGFyZSB7XG4gIGNvbnN0IHNoYXJlcyA9IHNoYXJlLnNoYXJlLnNwbGl0KGRlbGltZXRlcik7XG4gIHZhbGlkYXRlU2hhcmVzTGVuZ3RoKHNoYXJlcywgNSwgJ08nKTtcblxuICByZXR1cm4ge1xuICAgIGk6IGdldFBhcnRpY2lwYW50SW5kZXgoc2hhcmUudG8pLFxuICAgIEdhbW1hOiBzaGFyZXNbMF0sXG4gICAgZGVsdGE6IHNoYXJlc1sxXSxcbiAgICBrOiBzaGFyZXNbMl0sXG4gICAgb21pY3Jvbjogc2hhcmVzWzNdLFxuICAgIHk6IHNoYXJlc1s0XSxcbiAgfTtcbn1cblxuLyoqXG4gKiBnZXRzIHBhcnRpY2lwYW50IGluZGV4XG4gKiBAcGFyYW0gcGFydGljaXBhbnQgLSBwYXJ0aWNpcGFudHMgKHVzZXIsIGJhY2t1cCwgb3IgYml0Z28pXG4gKiBAcmV0dXJucyBpbmRleCAoMSwgMiwgMHIgMylcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFBhcnRpY2lwYW50SW5kZXgocGFydGljaXBhbnQ6ICd1c2VyJyB8ICdiYWNrdXAnIHwgJ2JpdGdvJyk6IG51bWJlciB7XG4gIHN3aXRjaCAocGFydGljaXBhbnQpIHtcbiAgICBjYXNlICd1c2VyJzpcbiAgICAgIHJldHVybiAxO1xuICAgIGNhc2UgJ2JhY2t1cCc6XG4gICAgICByZXR1cm4gMjtcbiAgICBjYXNlICdiaXRnbyc6XG4gICAgICByZXR1cm4gMztcbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgRXJyb3IoJ1Vua293biBwYXJ0aWNpcGFudCcpO1xuICB9XG59XG5cbi8qKlxuICogZ2V0cyBwYXJ0aWNpcGFudCBuYW1lIGJ5IGluZGV4XG4gKiBAcGFyYW0gaW5kZXggcGFydGljaXBhbnQgaW5kZXhcbiAqIEByZXR1cm5zIHBhcnRpY2lwYW50IG5hbWVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFBhcnRpY2lwYW50RnJvbUluZGV4KGluZGV4OiBudW1iZXIpOiBTaWduYXR1cmVTaGFyZVR5cGUge1xuICBzd2l0Y2ggKGluZGV4KSB7XG4gICAgY2FzZSAxOlxuICAgICAgcmV0dXJuIFNpZ25hdHVyZVNoYXJlVHlwZS5VU0VSO1xuICAgIGNhc2UgMjpcbiAgICAgIHJldHVybiBTaWduYXR1cmVTaGFyZVR5cGUuQkFDS1VQO1xuICAgIGNhc2UgMzpcbiAgICAgIHJldHVybiBTaWduYXR1cmVTaGFyZVR5cGUuQklUR087XG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBwYXJ0aWNpcGFudCBpbmRleCAke2luZGV4fWApO1xuICB9XG59XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRvIHZlcmlmeSB1LXZhbHVlIHdhbGxldCBzaWduYXR1cmVzIGZvciB0aGUgYml0Z28tdXNlciBhbmQgYml0Z28tYmFja3VwIHNoYXJlcy5cbiAqIEBwYXJhbSBwYXJhbXNcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHZlcmlmeVdhbGxldFNpZ25hdHVyZShwYXJhbXM6IHtcbiAgd2FsbGV0U2lnbmF0dXJlOiBwZ3AuS2V5O1xuICBiaXRnb1B1YjogcGdwLktleTtcbiAgY29tbW9uS2V5Y2hhaW46IHN0cmluZztcbiAgdXNlcktleUlkOiBzdHJpbmc7XG4gIGJhY2t1cEtleUlkOiBzdHJpbmc7XG4gIGRlY3J5cHRlZFNoYXJlOiBzdHJpbmc7XG4gIHZlcmlmaWVySW5kZXg6IDEgfCAyO1xufSk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCByYXdOb3RhdGlvbnMgPSBhd2FpdCBjb21tb25WZXJpZnlXYWxsZXRTaWduYXR1cmUocGFyYW1zKTtcbiAgY29uc3QgcHVibGljVVZhbHVlUmF3Tm90YXRpb25JbmRleCA9IDIgKyBwYXJhbXMudmVyaWZpZXJJbmRleDtcblxuICAvLyBEZXJpdmUgcHVibGljIGZvcm0gb2YgdS12YWx1ZVxuICBjb25zdCBwdWJsaWNVVmFsdWUgPSBlY2MucG9pbnRGcm9tU2NhbGFyKEJ1ZmZlci5mcm9tKHBhcmFtcy5kZWNyeXB0ZWRTaGFyZS5zbGljZSgwLCA2NCksICdoZXgnKSwgdHJ1ZSk7XG4gIGFzc2VydChwdWJsaWNVVmFsdWUgIT09IG51bGwsICdudWxsIHB1YmxpYyB1LXZhbHVlJyk7XG4gIC8vIFZlcmlmeSB0aGF0IHRoZSB1IHZhbHVlICsgY2hhaW5jb2RlIGlzIGVxdWFsIHRvIHRoZSBwcm9vZiByZXRyaWV2ZWQgZnJvbSB0aGUgcmF3IG5vdGF0aW9uc1xuICBhc3NlcnQoXG4gICAgQnVmZmVyLmZyb20ocHVibGljVVZhbHVlKS50b1N0cmluZygnaGV4JykgKyBwYXJhbXMuZGVjcnlwdGVkU2hhcmUuc2xpY2UoNjQpID09PVxuICAgICAgQnVmZmVyLmZyb20ocmF3Tm90YXRpb25zW3B1YmxpY1VWYWx1ZVJhd05vdGF0aW9uSW5kZXhdLnZhbHVlKS50b1N0cmluZygpLFxuICAgICdiaXRnbyBzaGFyZSBtaXNtYXRjaCdcbiAgKTtcbn1cbiJdfQ==
|
|
816
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWNkc2EuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvYml0Z28vdHNzL2VjZHNhL2VjZHNhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsd0RBQXVEO0FBQ3ZELG1DQXNCaUI7QUFDakIsdUNBQXNHO0FBQ3RHLG9DQUE0QztBQVU1QyxzQ0FBMEY7QUFDMUYsb0RBQXNDO0FBQ3RDLG9EQUE0QjtBQUM1Qiw4Q0FBNkM7QUFDN0MsNkNBQStCO0FBQy9CLGdEQUF3QjtBQUd4QixvREFBd0Q7QUFHeEQsTUFBTSxHQUFHLEdBQUcsSUFBSSxXQUFLLEVBQUUsQ0FBQztBQUV4Qjs7Ozs7Ozs7R0FRRztBQUNJLEtBQUssVUFBVSxpQkFBaUIsQ0FDckMsUUFBa0IsRUFDbEIsZ0JBQXFDLEVBQ3JDLGNBQXNCO0lBRXRCLE1BQU0sT0FBTyxHQUFhLEVBQUUsQ0FBQztJQUU3QixJQUFJLFdBQStCLENBQUM7SUFDcEMsSUFBSSxVQUE4QixDQUFDO0lBQ25DLElBQUksWUFBZ0MsQ0FBQztJQUVyQyxLQUFLLE1BQU0sZUFBZSxJQUFJLGdCQUFnQixFQUFFO1FBQzlDLE1BQU0sTUFBTSxHQUFHLE1BQU0sYUFBYSxDQUFDLGVBQWUsRUFBRSxlQUFlLENBQUMsYUFBYSxDQUFDLENBQUM7UUFFbkYsUUFBUSxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRTtZQUNoQyxLQUFLLENBQUM7Z0JBQ0osVUFBVSxHQUFHLE1BQU0sQ0FBQztnQkFDcEIsTUFBTTtZQUNSLEtBQUssQ0FBQztnQkFDSixZQUFZLEdBQUcsTUFBTSxDQUFDO2dCQUN0QixNQUFNO1lBQ1IsS0FBSyxDQUFDO2dCQUNKLFdBQVcsR0FBRyxNQUFNLENBQUM7Z0JBQ3JCLE1BQU07WUFDUjtnQkFDRSxNQUFNLElBQUksS0FBSyxDQUFDLHNCQUFzQixDQUFDLENBQUM7U0FDM0M7UUFFRCxPQUFPLENBQUMsSUFBSSxD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QyxTQUFTO1FBQzVELENBQUMsQ0FBQztZQUNFLENBQUMsRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQ2IsSUFBSSxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDaEIsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDYixDQUFDLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUNiLENBQUMsRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQ2IsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDYixFQUFFLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUNkLEVBQUUsRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQ2QsRUFBRSxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDZCxFQUFFLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUNkLENBQUMsRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQ2IsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUM7U0FDZDtRQUNILENBQUMsQ0FBQyxTQUFTLENBQUM7SUFFZCxPQUFPO1FBQ0wsQ0FBQyxFQUFFLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDaEMsQ0FBQyxFQUFFLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUM7UUFDbEMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDWixLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUNoQixFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUNiLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBQ1osTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDakIsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDYixFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUNiLEtBQUs7UUFDTCxVQUFVO1FBQ1YsTUFBTTtRQUNOLEtBQUssRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztLQUN4QixDQUFDO0FBQ0osQ0FBQztBQW5FRCxrQ0FtRUM7QUFFRDs7OztHQUlHO0FBQ0gsU0FBZ0IsYUFBYSxDQUFDLEtBQWE7O0lBQ3pDLE9BQU87UUFDTCxFQUFFLEVBQUUsdUJBQXVCLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUNwQyxJQUFJLEVBQUUsdUJBQXVCLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUN0QyxLQUFLLEVBQUUsR0FBRyxLQUFLLENBQUMsQ0FBQyxHQUFHLGlCQUFTLEdBQUcsS0FBSyxDQUFDLEtBQUssR0FBRyxpQkFBUyxHQUFHLEtBQUssQ0FBQyxFQUFFLEdBQUcsaUJBQVMsR0FBRyxLQUFLLENBQUMsQ0FBQyxHQUFHLGlCQUFTLEdBQ2xHLEtBQUssQ0FBQyxNQUNSLEdBQUcsaUJBQVMsR0FBRyxLQUFLLENBQUMsRUFBRSxHQUFHLGlCQUFTLEdBQUcsS0FBSyxDQUFDLEVBQUUsR0FBRyxpQkFBUyxHQUFHLENBQUEsTUFBQSxLQUFLLENBQUMsS0FBSywwQ0FBRSxDQUFDLEtBQUksRUFBRSxHQUFHLGlCQUFTLEdBQzNGLENBQUEsTUFBQSxLQUFLLENBQUMsS0FBSywwQ0FBRSxDQUFDLEtBQUksRUFDcEIsR0FBRyxpQkFBUyxHQUFHLENBQUEsTUFBQSxLQUFLLENBQUMsS0FBSywwQ0FBRSxDQUFDLEtBQUksRUFBRSxHQUFHLGlCQUFTLEdBQUcsQ0FBQSxNQUFBLEtBQUssQ0FBQyxLQUFLLDBDQUFFLENBQUMsS0FBSSxFQUFFLEdBQUcsaUJBQVMsR0FDaEYsQ0FBQSxNQUFBLEtBQUssQ0FBQyxLQUFLLDBDQUFFLEVBQUUsS0FBSSxFQUNyQixHQUFHLGlCQUFTLEdBQUcsQ0FBQSxNQUFBLEtBQUssQ0FBQyxLQUFLLDBDQUFFLEVBQUUsS0FBSSxFQUFFLEdBQUcsaUJBQVMsR0FBRyxDQUFBLE1BQUEsS0FBSyxDQUFDLFVBQVUsMENBQUUsQ0FBQyxLQUFJLEVBQUUsR0FBRyxpQkFBUyxHQUN0RixDQUFBLE1BQUEsS0FBSyxDQUFDLFVBQVUsMENBQUUsSUFBSSxLQUFJLEVBQzVCLEdBQUcsaUJBQVMsR0FBRyxDQUFBLE1BQUEsS0FBSyxDQUFDLFVBQVUsMENBQUUsQ0FBQyxLQUFJLEVBQUUsR0FBRyxpQkFBUyxHQUFHLENBQUEsTUFBQSxLQUFLLENBQUMsVUFBVSwwQ0FBRSxDQUFDLEtBQUksRUFBRSxHQUFHLGlCQUFTLEdBQzFGLENBQUEsTUFBQSxLQUFLLENBQUMsVUFBVSwwQ0FBRSxDQUFDLEtBQUksRUFDekIsR0FBRyxpQkFBUyxHQUFHLENBQUEsTUFBQSxLQUFLLENBQUMsVUFBVSwwQ0FBRSxDQUFDLEtBQUksRUFBRSxHQUFHLGlCQUFTLEdBQUcsQ0FBQSxNQUFBLEtBQUssQ0FBQyxVQUFVLDBDQUFFLEVBQUUsS0FBSSxFQUFFLEdBQUcsaUJBQVMsR0FDM0YsQ0FBQSxNQUFBLEtBQUssQ0FBQyxVQUFVLDBDQUFFLEVBQUUsS0FBSSxFQUMxQixHQUFHLGlCQUFTLEdBQUcsQ0FBQSxNQUFBLEtBQUssQ0FBQyxVQUFVLDBDQUFFLEVBQUUsS0FBSSxFQUFFLEdBQUcsaUJBQVMsR0FBRyxDQUFBLE1BQUEsS0FBSyxDQUFDLFVBQVUsMENBQUUsRUFBRSxLQUFJLEVBQUUsR0FBRyxpQkFBUyxHQUM1RixDQUFBLE1BQUEsS0FBSyxDQUFDLFVBQVUsMENBQUUsQ0FBQyxLQUFJLEVBQ3pCLEdBQUcsaUJBQVMsR0FBRyxDQUFBLE1BQUEsS0FBSyxDQUFDLFVBQVUsMENBQUUsQ0FBQyxLQUFJLEVBQUUsR0FBRyxpQkFBUyxHQUFHLENBQUEsTUFBQSxLQUFLLENBQUMsTUFBTSwwQ0FBRSxDQUFDLEtBQUksRUFBRSxHQUFHLGlCQUFTLEdBQ3RGLENBQUEsTUFBQSxLQUFLLENBQUMsTUFBTSwwQ0FBRSxJQUFJLEtBQUksRUFDeEIsR0FBRyxpQkFBUyxHQUFHLENBQUEsTUFBQSxLQUFLLENBQUMsTUFBTSwwQ0FBRSxDQUFDLEtBQUksRUFBRSxHQUFHLGlCQUFTLEdBQUcsQ0FBQSxNQUFBLEtBQUssQ0FBQyxNQUFNLDBDQUFFLENBQUMsS0FBSSxFQUFFLEdBQUcsaUJBQVMsR0FDbEYs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QUEsS0FBSyxDQUFDLFVBQVUsMENBQUUsQ0FBQyxLQUFJLEVBQUUsR0FBRyxpQkFBUyxHQUFHLENBQUEsTUFBQSxLQUFLLENBQUMsVUFBVSwwQ0FBRSxFQUFFLEtBQUksRUFBRSxHQUFHLGlCQUFTLEdBQzNGLENBQUEsTUFBQSxLQUFLLENBQUMsVUFBVSwwQ0FBRSxFQUFFLEtBQUksRUFDMUIsR0FBRyxpQkFBUyxHQUFHLENBQUEsTUFBQSxLQUFLLENBQUMsVUFBVSwwQ0FBRSxFQUFFLEtBQUksRUFBRSxHQUFHLGlCQUFTLEdBQUcsQ0FBQSxNQUFBLEtBQUssQ0FBQyxVQUFVLDBDQUFFLEVBQUUsS0FBSSxFQUFFLEdBQUcsaUJBQVMsR0FDNUYsQ0FBQSxNQUFBLEtBQUssQ0FBQyxVQUFVLDBDQUFFLENBQUMsS0FBSSxFQUN6QixHQUFHLGlCQUFTLEdBQUcsQ0FBQSxNQUFBLEtBQUssQ0FBQyxVQUFVLDBDQUFFLENBQUMsS0FBSSxFQUFFLEdBQUcsaUJBQVMsR0FBRyxDQUFBLE1BQUEsS0FBSyxDQUFDLE1BQU0sMENBQUUsQ0FBQyxLQUFJLEVBQUUsR0FBRyxpQkFBUyxHQUN0RixDQUFBLE1BQUEsS0FBSyxDQUFDLE1BQU0sMENBQUUsSUFBSSxLQUFJLEVBQ3hCLEdBQUcsaUJBQVMsR0FBRyxDQUFBLE1BQUEsS0FBSyxDQUFDLE1BQU0sMENBQUUsQ0FBQyxLQUFJLEVBQUUsR0FBRyxpQkFBUyxHQUFHLENBQUEsTUFBQSxLQUFLLENBQUMsTUFBTSwwQ0FBRSxDQUFDLEtBQUksRUFBRSxHQUFHLGlCQUFTLEdBQ2xGLENBQUEsTUFBQSxLQUFLLENBQUMsTUFBTSwwQ0FBRSxDQUFDLEtBQUksRUFDckIsR0FBRyxpQkFBUyxHQUFHLENBQUEsTUFBQSxLQUFLLENBQUMsTUFBTSwwQ0FBRSxDQUFDLEtBQUksRUFBRSxHQUFHLGlCQUFTLEdBQUcsQ0FBQSxNQUFBLEtBQUssQ0FBQyxNQUFNLDBDQUFFLEVBQUUsS0FBSSxFQUFFLEdBQUcsaUJBQVMsR0FDbkYsQ0FBQSxNQUFBLEtBQUssQ0FBQyxNQUFNLDBDQUFF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S0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ3pFLE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLDRCQUE0QixDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQzFFLHNCQUFzQixDQUN2QixDQUFDO0FBQ0osQ0FBQztBQXJCRCxzREFxQkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFY2RzYSB9IGZyb20gJy4vLi4vLi4vLi4vYWNjb3VudC1saWIvbXBjL3Rzcyc7XG5pbXBvcnQge1xuICBBU2hhcmUsXG4gIEJTaGFyZSxcbiAgQ29tYmluZWRLZXksXG4gIENyZWF0ZVVzZXJPbWljcm9uQW5kRGVsdGFTaGFyZVJULFxuICBEZWNyeXB0YWJsZU5TaGFyZSxcbiAgRFNoYXJlLFxuICBFbmNyeXB0ZWROU2hhcmUsXG4gIEdTaGFyZSxcbiAgS2V5U2hhcmUsXG4gIE5TaGFyZSxcbiAgT1NoYXJlLFxuICBSZWNlaXZlZFNoYXJlVHlwZSxcbiAgU2VuZFNoYXJlVG9CaXRnb1JULFxuICBTZW5kU2hhcmVUeXBlLFxuICBTaWduYXR1cmUsXG4gIFNpZ25hdHVyZVNoYXJlLFxuICBTaWduaW5nTWF0ZXJpYWwsXG4gIFNpZ25TaGFyZSxcbiAgV1NoYXJlLFxuICBYU2hhcmVXaXRoQ2hhbGxlbmdlcyxcbiAgWVNoYXJlV2l0aENoYWxsZW5nZXMsXG59IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgY3JlYXRlU2hhcmVQcm9vZiwgUmVxdWVzdFR5cGUsIFNpZ25hdHVyZVNoYXJlUmVjb3JkLCBTaWduYXR1cmVTaGFyZVR5cGUgfSBmcm9tICcuLi8uLi91dGlscyc7XG5pbXBvcnQgeyBTaGFyZUtleVBvc2l0aW9uIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgQml0R29CYXNlIH0gZnJvbSAnLi4vLi4vYml0Z29CYXNlJztcbmltcG9ydCB7XG4gIEtTaGFyZSxcbiAgTVVTaGFyZSxcbiAgUmFuZ2VQcm9vZlNoYXJlLFxuICBSYW5nZVByb29mV2l0aENoZWNrU2hhcmUsXG4gIFNpZ25Db252ZXJ0U3RlcDJSZXNwb25zZSxcbiAgU1NoYXJlLFxufSBmcm9tICcuLi8uLi8uLi9hY2NvdW50LWxpYi9tcGMvdHNzL2VjZHNhL3R5cGVzJztcbmltcG9ydCB7IGNvbW1vblZlcmlmeVdhbGxldFNpZ25hdHVyZSwgZ2V0VHhSZXF1ZXN0LCBzZW5kU2lnbmF0dXJlU2hhcmUgfSBmcm9tICcuLi9jb21tb24nO1xuaW1wb3J0IGNyZWF0ZUtlY2Nha0hhc2ggZnJvbSAna2VjY2FrJztcbmltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcbmltcG9ydCB7IGJpcDMyLCBlY2MgfSBmcm9tICdAYml0Z28vdXR4by1saWInO1xuaW1wb3J0ICogYXMgcGdwIGZyb20gJ29wZW5wZ3AnO1xuaW1wb3J0IGJzNTggZnJvbSAnYnM1OCc7XG5pbXBvcnQgeyBBcGlLZXlTaGFyZSB9IGZyb20gJy4uLy4uL2tleWNoYWluJztcbmltcG9ydCB7IEhhc2ggfSBmcm9tICdjcnlwdG8nO1xuaW1wb3J0IHsgRWNkc2FQYWlsbGllclByb29mIH0gZnJvbSAnQGJpdGdvL3Nkay1saWItbXBjJztcbmltcG9ydCB7IElSZXF1ZXN0VHJhY2VyIH0gZnJvbSAnLi4vLi4vLi4vYXBpJztcblxuY29uc3QgTVBDID0gbmV3IEVjZHNhKCk7XG5cbi8qKlxuICogQ29tYmluZXMgTlNoYXJlcyB0byBjb21iaW5lIHRoZSBmaW5hbCBUU1Mga2V5XG4gKiBUaGlzIGNhbiBvbmx5IGJlIHVzZWQgdG8gY3JlYXRlIHRoZSBVc2VyIG9yIEJhY2t1cCBrZXkgc2luY2UgaXQgcmVxdWlyZXMgdGhlIGNvbW1vbiBrZXljaGFpbiBmcm9tIEJpdEdvIGZpcnN0XG4gKlxuICogQHBhcmFtIGtleVNoYXJlIC0gVFNTIGtleSBzaGFyZVxuICogQHBhcmFtIGVuY3J5cHRlZE5TaGFyZXMgLSBlbmNyeXB0ZWQgTlNoYXJlcyB3aXRoIGluZm9ybWF0aW9uIG9uIGhvdyB0byBkZWNyeXB0XG4gKiBAcGFyYW0gY29tbW9uS2V5Y2hhaW4gLSBleHBlY3RlZCBjb21tb24ga2V5Y2hhaW4gb2YgdGhlIGNvbWJpbmVkIGtleVxuICogQHJldHVybnMge0NvbWJpbmVkS2V5fSBjb21iaW5lZCBUU1Mga2V5XG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjcmVhdGVDb21iaW5lZEtleShcbiAga2V5U2hhcmU6IEtleVNoYXJlLFxuICBlbmNyeXB0ZWROU2hhcmVzOiBEZWNyeXB0YWJsZU5TaGFyZVtdLFxuICBjb21tb25LZXljaGFpbjogc3RyaW5nXG4pOiBQcm9taXNlPENvbWJpbmVkS2V5PiB7XG4gIGNvbnN0IG5TaGFyZXM6IE5TaGFyZVtdID0gW107XG5cbiAgbGV0IGJpdGdvTlNoYXJlOiBOU2hhcmUgfCB1bmRlZmluZWQ7XG4gIGxldCB1c2VyTlNoYXJlOiBOU2hhcmUgfCB1bmRlZmluZWQ7XG4gIGxldCBiYWNrdXBOU2hhcmU6IE5TaGFyZSB8IHVuZGVmaW5lZDtcblxuICBmb3IgKGNvbnN0IGVuY3J5cHRlZE5TaGFyZSBvZiBlbmNyeXB0ZWROU2hhcmVzKSB7XG4gICAgY29uc3QgblNoYXJlID0gYXdhaXQgZGVjcnlwdE5TaGFyZShlbmNyeXB0ZWROU2hhcmUsIGVuY3J5cHRlZE5TaGFyZS5pc2JzNThFbmNvZGVkKTtcblxuICAgIHN3aXRjaCAoZW5jcnlwdGVkTlNoYXJlLm5TaGFyZS5qKSB7XG4gICAgICBjYXNlIDE6XG4gICAgICAgIHVzZXJOU2hhcmUgPSBuU2hhcmU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAyOlxuICAgICAgICBiYWNrdXBOU2hhcmUgPSBuU2hhcmU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAzOlxuICAgICAgICBiaXRnb05TaGFyZSA9IG5TaGFyZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgTlNoYXJlIGluZGV4Jyk7XG4gICAgfVxuXG4gICAgblNoYXJlcy5wdXNoKG5TaGFyZSk7XG4gIH1cblxuICBpZiAoIWJpdGdvTlNoYXJlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdNaXNzaW5nIEJpdEdvIE4gU2hhcmUnKTtcbiAgfVxuXG4gIGNvbnN0IGNvbWJpbmVkS2V5ID0gTVBDLmtleUNvbWJpbmUoa2V5U2hhcmUucFNoYXJlLCBuU2hhcmVzKTtcbiAgaWYgKGNvbWJpbmVkS2V5LnhTaGFyZS55ICsgY29tYmluZWRLZXkueFNoYXJlLmNoYWluY29kZSAhPT0gY29tbW9uS2V5Y2hhaW4pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvbW1vbiBrZXljaGFpbnMgZG8gbm90IG1hdGNoJyk7XG4gIH1cblxuICBjb25zdCBzaWduaW5nTWF0ZXJpYWw6IFNpZ25pbmdNYXRlcmlhbCA9IHtcbiAgICBwU2hhcmU6IGtleVNoYXJlLnBTaGFyZSxcbiAgICBiaXRnb05TaGFyZSxcbiAgICBiYWNrdXBOU2hhcmUsXG4gICAgdXNlck5TaGFyZSxcbiAgfTtcblxuICByZXR1cm4ge1xuICAgIHNpZ25pbmdNYXRlcmlhbCxcbiAgICBjb21tb25LZXljaGFpbixcbiAgfTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIHRoZSBTaWduU2hhcmUgd2l0aCBVc2VyIFhTaGFyZSBhbmQgWVNoYXJlIENvcnJlc3BvbmRpbmcgdG8gQml0R29cbiAqIEBwYXJhbSB7WFNoYXJlfSB4U2hhcmUgVXNlciBzZWNyZXQgeFNoYXJlXG4gKiBAcGFyYW0ge1lTaGFyZX0geVNoYXJlIFlTaGFyZSBmcm9tIEJpdGdvXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxTaWduU2hhcmU+fVxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3JlYXRlVXNlclNpZ25TaGFyZShcbiAgeFNoYXJlOiBYU2hhcmVXaXRoQ2hhbGxlbmdlcyxcbiAgeVNoYXJlOiBZU2hhcmVXaXRoQ2hhbGxlbmdlc1xuKTogUHJvbWlzZTxTaWduU2hhcmU+IHtcbiAgaWYgKHhTaGFyZS5pICE9PSBTaGFyZUtleVBvc2l0aW9uLlVTRVIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgWFNoYXJlLCBYU2hhcmUgZG9lc24ndCBiZWxvbmcgdG8gdGhlIFVzZXJgKTtcbiAgfVxuXG4gIGlmICh5U2hhcmUuaSAhPT0gU2hhcmVLZXlQb3NpdGlvbi5VU0VSIHx8IHlTaGFyZS5qICE9PSBTaGFyZUtleVBvc2l0aW9uLkJJVEdPKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIFlTaGFyZSBwcm92aWRlZCBmb3Igc2lnbicpO1xuICB9XG4gIHJldHVybiBhd2FpdCBNUEMuc2lnblNoYXJlKHhTaGFyZSwgeVNoYXJlKTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIHRoZSBHYW1tYSBTaGFyZSBhbmQgTXVTaGFyZSB3aXRoIFVzZXIgV1NoYXJlIGFuZCBBU2hhcmUgRnJvbSBCaXRHb1xuICogQHBhcmFtIHtXU2hhcmV9IHdTaGFyZSBVc2VyIFdTaGFyZVxuICogQHBhcmFtIHtBU2hhcmV9IGFTaGFyZSBBU2hhcmUgZnJvbSBCaXRnb1xuICogQHJldHVybnMge1Byb21pc2U8U2lnbkNvbnZlcnRTdGVwMlJlc3BvbnNlPn1cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZVVzZXJHYW1tYUFuZE11U2hhcmUod1NoYXJlOiBXU2hhcmUsIGFTaGFyZTogQVNoYXJlKTogUHJvbWlzZTxTaWduQ29udmVydFN0ZXAyUmVzcG9uc2U+IHtcbiAgaWYgKHdTaGFyZS5pICE9PSBTaGFyZUtleVBvc2l0aW9uLlVTRVIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgV1NoYXJlLCBkb2Vzbid0IGJlbG9uZyB0byB0aGUgVXNlcmApO1xuICB9XG4gIGlmIChhU2hhcmUuaSAhPT0gU2hhcmVLZXlQb3NpdGlvbi5VU0VSIHx8IGFTaGFyZS5qICE9PSBTaGFyZUtleVBvc2l0aW9uLkJJVEdPKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIEFTaGFyZSwgaXMgbm90IGZyb20gQml0Z28gdG8gVXNlcicpO1xuICB9XG4gIHJldHVybiBNUEMuc2lnbkNvbnZlcnRTdGVwMih7IHdTaGFyZSwgYVNoYXJlIH0pO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgdGhlIE9taWNyb24gU2hhcmUgYW5kIERlbHRhIHNoYXJlIHdpdGggdXNlciBHU2hhcmVcbiAqIEBwYXJhbSB7R1NoYXJlfSBnU2hhcmUgVXNlciBHU2hhcmVcbiAqIEByZXR1cm5zIHtQcm9taXNlPENyZWF0ZVVzZXJPbWljcm9uQW5kRGVsdGFTaGFyZVJUPn1cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZVVzZXJPbWljcm9uQW5kRGVsdGFTaGFyZShnU2hhcmU6IEdTaGFyZSk6IFByb21pc2U8Q3JlYXRlVXNlck9taWNyb25BbmREZWx0YVNoYXJlUlQ+IHtcbiAgaWYgKGdTaGFyZS5pICE9PSBTaGFyZUtleVBvc2l0aW9uLlVTRVIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgR1NoYXJlLCBkb2Vzbid0IGJlbG9uZyB0byB0aGUgVXNlcmApO1xuICB9XG4gIHJldHVybiBNUEMuc2lnbkNvbWJpbmUoe1xuICAgIGdTaGFyZTogZ1NoYXJlLFxuICAgIHNpZ25JbmRleDoge1xuICAgICAgaTogU2hhcmVLZXlQb3NpdGlvbi5CSVRHTyxcbiAgICAgIGo6IGdTaGFyZS5pLFxuICAgIH0sXG4gIH0pO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgdGhlIFNpZ25hdHVyZSBTaGFyZSB3aXRoIFVzZXIgT1NoYXJlIGFuZCBEU2hhcmUgRnJvbSBCaXRHb1xuICogQHBhcmFtIHtPU2hhcmV9IG9TaGFyZSBVc2VyIE9TaGFyZVxuICogQHBhcmFtIHtEU2hhcmV9IGRTaGFyZSBEU2hhcmUgZnJvbSBiaXRnb1xuICogQHBhcmFtIHtCdWZmZXJ9IG1lc3NhZ2UgbWVzc2FnZSB0byBwZXJmb3JtIHNpZ25cbiAqIEByZXR1cm5zIHtQcm9taXNlPGNyZWF0ZVVzZXJTaWduU2hhcmVSVD59XG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjcmVhdGVVc2VyU2lnbmF0dXJlU2hhcmUoXG4gIG9TaGFyZTogT1NoYXJlLFxuICBkU2hhcmU6IERTaGFyZSxcbiAgbWVzc2FnZTogQnVmZmVyLFxuICBoYXNoOiBIYXNoID0gY3JlYXRlS2VjY2FrSGFzaCgna2VjY2FrMjU2Jylcbik6IFByb21pc2U8U2lnbmF0dXJlU2hhcmU+IHtcbiAgaWYgKG9TaGFyZS5pICE9PSBTaGFyZUtleVBvc2l0aW9uLlVTRVIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgT1NoYXJlLCBkb2Vzbid0IGJlbG9uZyB0byB0aGUgVXNlcmApO1xuICB9XG5cbiAgaWYgKGRTaGFyZS5pICE9PSBTaGFyZUtleVBvc2l0aW9uLlVTRVIgfHwgZFNoYXJlLmogIT09IFNoYXJlS2V5UG9zaXRpb24uQklUR08pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgRFNoYXJlLCBkb2Vzbid0IHNlZW0gdG8gYmUgZnJvbSBCaXRHb2ApO1xuICB9XG4gIHJldHVybiBNUEMuc2lnbihtZXNzYWdlLCBvU2hhcmUsIGRTaGFyZSwgaGFzaCk7XG59XG5cbmV4cG9ydCB0eXBlIE11RFNoYXJlID0geyBtdVNoYXJlOiBNVVNoYXJlOyBkU2hhcmU6IERTaGFyZTsgaTogU2hhcmVLZXlQb3NpdGlvbiB9O1xuXG4vKipcbiAqIFNlbmRzIFNoYXJlIFRvIEJpdGdvXG4gKiBAcGFyYW0ge0JpdEdvQmFzZX0gYml0Z28gLSB0aGUgYml0Z28gaW5zdGFuY2VcbiAqIEBwYXJhbSB7U3RyaW5nfSB3YWxsZXRJZCAtIHRoZSB3YWxsZXQgaWQgICpcbiAqIEBwYXJhbSB7U3RyaW5nfSB0eFJlcXVlc3RJZCAtIHRoZSB0eFJlcXVlc3QgSWRcbiAqIEBwYXJhbSByZXF1ZXN0VHlwZSAtIHRoZSB0eXBlIG9mIHJlcXVlc3QgYmVpbmcgc3VibWl0dGVkIChlaXRoZXIgdHggb3IgbWVzc2FnZSBmb3Igc2lnbmluZylcbiAqIEBwYXJhbSBzaGFyZVR5cGVcbiAqIEBwYXJhbSBzaGFyZVxuICogQHBhcmFtIHNpZ25lclNoYXJlXG4gKiBAcGFyYW0gdnNzUHJvb2YgLSB0aGUgdiB2YWx1ZSBvZiB0aGUgc2hhcmVcbiAqIEBwYXJhbSBwcml2YXRlU2hhcmVQcm9vZiAtIHRoZSB1U2lnIG9mIHRoZSBzaGFyZVxuICogQHBhcmFtIHB1YmxpY1NoYXJlIC0gdGhlIHkgdmFsdWUgb2YgdGhlIHNoYXJlXG4gKiBAcGFyYW0gdXNlclB1YmxpY0dwZ0tleSAtIHRoZSBwdWJsaWMga2V5IG9mIHRoZSBncGcga2V5IHVzZWQgZm9yIGNyZWF0aW5nIHRoZSBwcml2YXRlU2hhcmVQcm9vZlxuICogQHBhcmFtIHJlcUlkIC0gcmVxdWVzdCB0cmFjZXIgcmVxdWVzdCBpZFxuICogQHJldHVybnMge1Byb21pc2U8U2lnbmF0dXJlU2hhcmVSZWNvcmQ+fSAtIGEgU2lnbmF0dXJlIFNoYXJlXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzZW5kU2hhcmVUb0JpdGdvKFxuICBiaXRnbzogQml0R29CYXNlLFxuICB3YWxsZXRJZDogc3RyaW5nLFxuICB0eFJlcXVlc3RJZDogc3RyaW5nLFxuICByZXF1ZXN0VHlwZTogUmVxdWVzdFR5cGUsXG4gIHNoYXJlVHlwZTogU2VuZFNoYXJlVHlwZSxcbiAgc2hhcmU6IFNTaGFyZSB8IE11RFNoYXJlIHwgS1NoYXJlLFxuICBzaWduZXJTaGFyZT86IHN0cmluZyxcbiAgdnNzUHJvb2Y/OiBzdHJpbmcsXG4gIHByaXZhdGVTaGFyZVByb29mPzogc3RyaW5nLFxuICBwdWJsaWNTaGFyZT86IHN0cmluZyxcbiAgdXNlclB1YmxpY0dwZ0tleT86IHN0cmluZyxcbiAgcmVxSWQ/OiBJUmVxdWVzdFRyYWNlclxuKTogUHJvbWlzZTxTZW5kU2hhcmVUb0JpdGdvUlQ+IHtcbiAgaWYgKHNoYXJlVHlwZSAhPT0gU2VuZFNoYXJlVHlwZS5TU2hhcmUgJiYgc2hhcmUuaSAhPT0gU2hhcmVLZXlQb3NpdGlvbi5CSVRHTykge1xuICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBTaGFyZSwgaXMgbm90IGZyb20gVXNlciB0byBCaXRnbycpO1xuICB9XG4gIGxldCBzaWduYXR1cmVTaGFyZTogU2lnbmF0dXJlU2hhcmVSZWNvcmQ7XG4gIGxldCByZXNwb25zZUZyb21CaXRnbzogU2VuZFNoYXJlVG9CaXRnb1JUO1xuXG4gIHN3aXRjaCAoc2hhcmVUeXBlKSB7XG4gICAgY2FzZSBTZW5kU2hhcmVUeXBlLktTaGFyZTpcbiAgICAgIGFzc2VydChzaWduZXJTaGFyZSwgYHNpZ25lciBzaGFyZSBtdXN0IGJlIHByZXNlbnRgKTtcbiAgICAgIGNvbnN0IGtTaGFyZSA9IHNoYXJlIGFzIEtTaGFyZTtcbiAgICAgIHNpZ25hdHVyZVNoYXJlID0gY29udmVydEtTaGFyZShrU2hhcmUpO1xuICAgICAgc2lnbmF0dXJlU2hhcmUudnNzUHJvb2YgPSB2c3NQcm9vZjtcbiAgICAgIHNpZ25hdHVyZVNoYXJlLnB1YmxpY1NoYXJlID0gcHVibGljU2hhcmU7XG4gICAgICBzaWduYXR1cmVTaGFyZS5wcml2YXRlU2hhcmVQcm9vZiA9IHByaXZhdGVTaGFyZVByb29mO1xuICAgICAgYXdhaXQgc2VuZFNpZ25hdHVyZVNoYXJlKFxuICAgICAgICBiaXRnbyxcbiAgICAgICAgd2FsbGV0SWQsXG4gICAgICAgIHR4UmVxdWVzdElkLFxuICAgICAgICBzaWduYXR1cmVTaGFyZSxcbiAgICAgICAgcmVxdWVzdFR5cGUsXG4gICAgICAgIHNpZ25lclNoYXJlLFxuICAgICAgICAnZWNkc2EnLFxuICAgICAgICAnZnVsbCcsXG4gICAgICAgIHVzZXJQdWJsaWNHcGdLZXksXG4gICAgICAgIHJlcUlkXG4gICAgICApO1xuICAgICAgcmVzcG9uc2VGcm9tQml0Z28gPSBhd2FpdCBnZXRCaXRnb1RvVXNlckxhdGVzdFNoYXJlKFxuICAgICAgICBiaXRnbyxcbiAgICAgICAgd2FsbGV0SWQsXG4gICAgICAgIHR4UmVxdWVzdElkLFxuICAgICAgICBSZWNlaXZlZFNoYXJlVHlwZS5BU2hhcmUsXG4gICAgICAgIHJlcXVlc3RUeXBlLFxuICAgICAgICByZXFJZFxuICAgICAgKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgU2VuZFNoYXJlVHlwZS5NVVNoYXJlOlxuICAgICAgY29uc3Qgc2hhcmVUb1NlbmQgPSBzaGFyZSBhcyBNdURTaGFyZTtcbiAgICAgIGNvbnN0IG11U2hhcmVSZWNvcmQgPSBjb252ZXJ0TXVTaGFyZShzaGFyZVRvU2VuZC5tdVNoYXJlKTtcbiAgICAgIGNvbnN0IGRTaGFyZVJlY29yZCA9IGNvbnZlcnREU2hhcmUoc2hhcmVUb1NlbmQuZFNoYXJlKTtcbiAgICAgIHNpZ25hdHVyZVNoYXJlID0ge1xuICAgICAgICB0bzogU2lnbmF0dXJlU2hhcmVUeXBlLkJJVEdPLFxuICAgICAgICBmcm9tOiBnZXRQYXJ0aWNpcGFudEZyb21JbmRleChzaGFyZVRvU2VuZC5kU2hhcmUuaiksXG4gICAgICAgIHNoYXJlOiBgJHttdVNoYXJlUmVjb3JkLnNoYXJlfSR7c2Vjb25kYXJ5RGVsaW1ldGVyfSR7ZFNoYXJlUmVjb3JkLnNoYXJlfWAsXG4gICAgICB9O1xuICAgICAgYXdhaXQgc2VuZFNpZ25hdHVyZVNoYXJlKFxuICAgICAgICBiaXRnbyxcbiAgICAgICAgd2FsbGV0SWQsXG4gICAgICAgIHR4UmVxdWVzdElkLFxuICAgICAgICBzaWduYXR1cmVTaGFyZSxcbiAgICAgICAgcmVxdWVzdFR5cGUsXG4gICAgICAgIHNpZ25lclNoYXJlLFxuICAgICAgICAnZWNkc2EnLFxuICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgcmVxSWRcbiAgICAgICk7XG4gICAgICByZXNwb25zZUZyb21CaXRnbyA9IGF3YWl0IGdldEJpdGdvVG9Vc2VyTGF0ZXN0U2hhcmUoXG4gICAgICAgIGJpdGdvLFxuICAgICAgICB3YWxsZXRJZCxcbiAgICAgICAgdHhSZXF1ZXN0SWQsXG4gICAgICAgIFJlY2VpdmVkU2hhcmVUeXBlLkRTaGFyZSxcbiAgICAgICAgcmVxdWVzdFR5cGUsXG4gICAgICAgIHJlcUlkXG4gICAgICApO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBTZW5kU2hhcmVUeXBlLlNTaGFyZTpcbiAgICAgIGNvbnN0IHNTaGFyZSA9IHNoYXJlIGFzIFNTaGFyZTtcbiAgICAgIHNpZ25hdHVyZVNoYXJlID0gY29udmVydFNpZ25hdHVyZVNoYXJlKHNTaGFyZSwgMSwgMyk7XG4gICAgICBhd2FpdCBzZW5kU2lnbmF0dXJlU2hhcmUoXG4gICAgICAgIGJpdGdvLFxuICAgICAgICB3YWxsZXRJZCxcbiAgICAgICAgdHhSZXF1ZXN0SWQsXG4gICAgICAgIHNpZ25hdHVyZVNoYXJlLFxuICAgICAgICByZXF1ZXN0VHlwZSxcbiAgICAgICAgc2lnbmVyU2hhcmUsXG4gICAgICAgICdlY2RzYScsXG4gICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICByZXFJZFxuICAgICAgKTtcbiAgICAgIHJlc3BvbnNlRnJvbUJpdGdvID0gc1NoYXJlO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBTaGFyZSBnaXZlbiB0byBzZW5kJyk7XG4gIH1cblxuICByZXR1cm4gcmVzcG9uc2VGcm9tQml0Z287XG59XG5cbi8qKlxuICogR2V0cyB0aGUgbGF0ZXN0IHVzZXIncyBzaGFyZSBmcm9tIGJpdGdvIG5lZWRlZCB0byBjb250aW51ZSBzaWduaW5nIGZsb3dcbiAqIEBwYXJhbSB7Qml0R29CYXNlfSBiaXRnbyAtIHRoZSBiaXRnbyBpbnN0YW5jZVxuICogQHBhcmFtIHtTdHJpbmd9IHdhbGxldElkIC0gdGhlIHdhbGxldCBpZCAgKlxuICogQHBhcmFtIHtTdHJpbmd9IHR4UmVxdWVzdElkIC0gdGhlIHR4UmVxdWVzdCBJZFxuICogQHBhcmFtIHtSZWNlaXZlZFNoYXJlVHlwZX0gc2hhcmVUeXBlIC0gdGhlIGV4Y3BlY3RlZCBzaGFyZSB0eXBlXG4gKiBAcGFyYW0ge0lSZXF1ZXN0VHJhY2VyfSByZXFJZCAtIHJlcXVlc3QgdHJhY2VyIHJlcXVlc3QgaWRcbiAqIEByZXR1cm5zIHtQcm9taXNlPFNlbmRTaGFyZVRvQml0Z29SVD59IC0gc2hhcmUgZnJvbSBiaXRnbyB0byB1c2VyXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRCaXRnb1RvVXNlckxhdGVzdFNoYXJlKFxuICBiaXRnbzogQml0R29CYXNlLFxuICB3YWxsZXRJZDogc3RyaW5nLFxuICB0eFJlcXVlc3RJZDogc3RyaW5nLFxuICBzaGFyZVR5cGU6IFJlY2VpdmVkU2hhcmVUeXBlLFxuICByZXF1ZXN0VHlwZTogUmVxdWVzdFR5cGUsXG4gIHJlcUlkPzogSVJlcXVlc3RUcmFjZXJcbik6IFByb21pc2U8U2VuZFNoYXJlVG9CaXRnb1JUPiB7XG4gIGxldCByZXNwb25zZUZyb21CaXRnbzogU2VuZFNoYXJlVG9CaXRnb1JUO1xuICBjb25zdCB0eFJlcXVlc3QgPSBhd2FpdCBnZXRUeFJlcXVlc3QoYml0Z28sIHdhbGxldElkLCB0eFJlcXVlc3RJZCwgcmVxSWQpO1xuICBsZXQgdXNlclNoYXJlcztcbiAgc3dpdGNoIChyZXF1ZXN0VHlwZSkge1xuICAgIGNhc2UgUmVxdWVzdFR5cGUudHg6XG4gICAgICBhc3NlcnQodHhSZXF1ZXN0LnRyYW5zYWN0aW9ucywgJ3RyYW5zYWN0aW9ucyByZXF1aXJlZCBhcyBwYXJ0IG9mIHR4UmVxdWVzdCcpO1xuICAgICAgdXNlclNoYXJlcyA9IHR4UmVxdWVzdC50cmFuc2FjdGlvbnNbMF0uc2lnbmF0dXJlU2hhcmVzO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBSZXF1ZXN0VHlwZS5tZXNzYWdlOlxuICAgICAgYXNzZXJ0KHR4UmVxdWVzdC5tZXNzYWdlcywgJ21lc3NhZ2VzIHJlcXVpcmVkIGFzIHBhcnQgb2YgdHhSZXF1ZXN0Jyk7XG4gICAgICB1c2VyU2hhcmVzID0gdHhSZXF1ZXN0Lm1lc3NhZ2VzWzBdLnNpZ25hdHVyZVNoYXJlcztcbiAgICAgIGJyZWFrO1xuICB9XG4gIGlmICghdXNlclNoYXJlcyB8fCAhdXNlclNoYXJlcy5sZW5ndGgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3VzZXIgc2hhcmUgaXMgbm90IHByZXNlbnQnKTtcbiAgfVxuXG4gIGNvbnN0IHNoYXJlUmVjb3JkID0gdXNlclNoYXJlc1t1c2VyU2hhcmVzLmxlbmd0aCAtIDFdO1xuICBzd2l0Y2ggKHNoYXJlVHlwZSkge1xuICAgIGNhc2UgUmVjZWl2ZWRTaGFyZVR5cGUuQVNoYXJlOlxuICAgICAgcmVzcG9uc2VGcm9tQml0Z28gPSBwYXJzZUFTaGFyZShzaGFyZVJlY29yZCk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFJlY2VpdmVkU2hhcmVUeXBlLkRTaGFyZTpcbiAgICAgIHJlc3BvbnNlRnJvbUJpdGdvID0gcGFyc2VEU2hhcmUoc2hhcmVSZWNvcmQpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBSZWNlaXZlZFNoYXJlVHlwZS5TaWduYXR1cmU6XG4gICAgICByZXNwb25zZUZyb21CaXRnbyA9IHBhcnNlU2lnbmF0dXJlU2hhcmUoc2hhcmVSZWNvcmQpO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBzaGFyZSByZWNlaXZlZCcpO1xuICB9XG5cbiAgcmV0dXJuIHJlc3BvbnNlRnJvbUJpdGdvO1xufVxuXG4vKipcbiAqIFByZXBhcmVzIGEgTlNoYXJlIHRvIGJlIGV4Y2hhbmdlZCB3aXRoIG90aGVyIGtleSBob2xkZXJzLlxuICogT3V0cHV0IGlzIGluIGEgZm9ybWF0IHRoYXQgaXMgdXNhYmxlIHdpdGhpbiBCaXRHbydzIGVjb3N5c3RlbS5cbiAqXG4gKiBAcGFyYW0ga2V5U2hhcmUgLSBUU1Mga2V5IHNoYXJlIG9mIHRoZSBwYXJ0eSBwcmVwYXJpbmcgZXhjaGFuZ2UgbWF0ZXJpYWxzXG4gKiBAcGFyYW0gcmVjaXBpZW50SW5kZXggLSBpbmRleCBvZiB0aGUgcmVjaXBpZW50ICgxLCAyLCBvciAzKVxuICogQHBhcmFtIHJlY2lwaWVudEdwZ1B1YmxpY0FybW9yIC0gcmVjaXBpZW50J3MgcHVibGljIGdwZyBrZXkgaW4gYXJtb3IgZm9ybWF0XG4gKiBAcGFyYW0gc2VuZGVyR3BnS2V5IC0gZXBoZW1lcmFsIEdQRyBrZXkgdG8gZW5jcnlwdCAvIGRlY3J5cHQgc2Vuc2l0dmUgZGF0YSBleGNoYW5nZWQgYmV0d2VlbiB1c2VyIGFuZCBzZXJ2ZXJcbiAqIEBwYXJhbSBpc2JzNThFbmNvZGVkIC0gaXMgYnM1OCBlbmNvZGVkIG9yIG5vdFxuICogQHJldHVybnMgZW5jcnlwdGVkIE4gU2hhcmVcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGVuY3J5cHROU2hhcmUoXG4gIGtleVNoYXJlOiBLZXlTaGFyZSxcbiAgcmVjaXBpZW50SW5kZXg6IG51bWJlcixcbiAgcmVjaXBpZW50R3BnUHVibGljQXJtb3I6IHN0cmluZyxcbiAgc2VuZGVyR3BnS2V5OiBwZ3AuU2VyaWFsaXplZEtleVBhaXI8c3RyaW5nPixcbiAgaXNiczU4RW5jb2RlZCA9IHRydWVcbik6IFByb21pc2U8RW5jcnlwdGVkTlNoYXJlPiB7XG4gIGNvbnN0IG5TaGFyZSA9IGtleVNoYXJlLm5TaGFyZXNbcmVjaXBpZW50SW5kZXhdO1xuICBpZiAoIW5TaGFyZSkge1xuICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCByZWNpcGllbnQnKTtcbiAgfVxuXG4gIGNvbnN0IHB1YmxpY1NoYXJlID0gQnVmZmVyLmNvbmNhdChbXG4gICAgQnVmZmVyLmZyb20oa2V5U2hhcmUucFNoYXJlLnksICdoZXgnKSxcbiAgICBCdWZmZXIuZnJvbShrZXlTaGFyZS5wU2hhcmUuY2hhaW5jb2RlLCAnaGV4JyksXG4gIF0pLnRvU3RyaW5nKCdoZXgnKTtcblxuICBsZXQgcHJpdmF0ZVNoYXJlO1xuICBpZiAoaXNiczU4RW5jb2RlZCkge1xuICAgIHByaXZhdGVTaGFyZSA9IGJpcDMyLmZyb21Qcml2YXRlS2V5KEJ1ZmZlci5mcm9tKG5TaGFyZS51LCAnaGV4JyksIEJ1ZmZlci5mcm9tKG5TaGFyZS5jaGFpbmNvZGUsICdoZXgnKSkudG9CYXNlNTgoKTtcbiAgfSBlbHNlIHtcbiAgICBwcml2YXRlU2hhcmUgPSBCdWZmZXIuY29uY2F0KFtCdWZmZXIuZnJvbShuU2hhcmUudSwgJ2hleCcpLCBCdWZmZXIuZnJvbShuU2hhcmUuY2hhaW5jb2RlLCAnaGV4JyldKS50b1N0cmluZygnaGV4Jyk7XG4gIH1cbiAgY29uc3QgcmVjaXBpZW50UHVibGljS2V5ID0gYXdhaXQgcGdwLnJlYWRLZXkoeyBhcm1vcmVkS2V5OiByZWNpcGllbnRHcGdQdWJsaWNBcm1vciB9KTtcblxuICBjb25zdCBlbmNyeXB0ZWRQcml2YXRlU2hhcmUgPSAoYXdhaXQgcGdwLmVuY3J5cHQoe1xuICAgIG1lc3NhZ2U6IGF3YWl0IHBncC5jcmVhdGVNZXNzYWdlKHtcbiAgICAgIHRleHQ6IHByaXZhdGVTaGFyZSxcbiAgICB9KSxcbiAgICBlbmNyeXB0aW9uS2V5czogW3JlY2lwaWVudFB1YmxpY0tleV0sXG4gIH0pKSBhcyBzdHJpbmc7XG5cbiAgcmV0dXJuIHtcbiAgICBpOiBuU2hhcmUuaSxcbiAgICBqOiBuU2hhcmUuaixcbiAgICBwdWJsaWNTaGFyZSxcbiAgICBlbmNyeXB0ZWRQcml2YXRlU2hhcmUsXG4gICAgbjogblNoYXJlLm4sXG4gICAgdnNzUHJvb2Y6IG5TaGFyZS52LFxuICAgIHByaXZhdGVTaGFyZVByb29mOiBhd2FpdCBjcmVhdGVTaGFyZVByb29mKHNlbmRlckdwZ0tleS5wcml2YXRlS2V5LCBuU2hhcmUudSwgJ2VjZHNhJyksXG4gIH07XG59XG5cbi8qKlxuICogUHJlcGFyZXMgYSBOU2hhcmUgdG8gYmUgZXhjaGFuZ2VkIHdpdGggb3RoZXIga2V5IGhvbGRlcnMuXG4gKiBBbiBBUEkga2V5IHNoYXJlIHJlY2VpdmVkIGZyb20gYSB0aGlyZCBwYXJ0eSBzaG91bGQgYWxyZWFkeSBiZSBlbmNyeXB0ZWRcbiAqXG4gKiBAcGFyYW0ga2V5U2hhcmUgLSBUU1Mga2V5IHNoYXJlIG9mIHRoZSBwYXJ0eSBwcmVwYXJpbmcgZXhjaGFuZ2UgbWF0ZXJpYWxzXG4gKiBAcmV0dXJucyBlbmNyeXB0ZWQgTiBTaGFyZVxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYnVpbGROU2hhcmVGcm9tQVBJS2V5U2hhcmUoa2V5U2hhcmU6IEFwaUtleVNoYXJlKTogUHJvbWlzZTxFbmNyeXB0ZWROU2hhcmU+IHtcbiAgcmV0dXJuIHtcbiAgICBpOiBnZXRQYXJ0aWNpcGFudEluZGV4KGtleVNoYXJlLnRvKSxcbiAgICBqOiBnZXRQYXJ0aWNpcGFudEluZGV4KGtleVNoYXJlLmZyb20pLFxuICAgIHB1YmxpY1NoYXJlOiBrZXlTaGFyZS5wdWJsaWNTaGFyZSxcbiAgICBlbmNyeXB0ZWRQcml2YXRlU2hhcmU6IGtleVNoYXJlLnByaXZhdGVTaGFyZSxcbiAgICBuOiBrZXlTaGFyZS5uID8/ICcnLCAvLyB0aGlzIGlzIG5vdCBjdXJyZW50bHkgbmVlZGVkIGZvciBrZXkgY3JlYXRpb25cbiAgICBwcml2YXRlU2hhcmVQcm9vZjoga2V5U2hhcmUucHJpdmF0ZVNoYXJlUHJvb2YsXG4gICAgdnNzUHJvb2Y6IGtleVNoYXJlLnZzc1Byb29mLFxuICB9O1xufVxuXG4vKipcbiAqIERlY3J5cHRzIGVuY3J5cHRlZCBuIHNoYXJlXG4gKiBAcGFyYW0gZW5jcnlwdGVkTlNoYXJlIC0gZGVjcnlwdGFibGUgbiBzaGFyZSB3aXRoIHJlY2lwaWVudCBwcml2YXRlIGdwZyBrZXkgYXJtb3IgYW5kIHNlbmRlciBwdWJsaWMgZ3BnIGtleVxuICogQHBhcmFtIGlzYnM1OEVuY29kZWRcbiAqIEByZXR1cm5zIE4gc2hhcmVcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGRlY3J5cHROU2hhcmUoZW5jcnlwdGVkTlNoYXJlOiBEZWNyeXB0YWJsZU5TaGFyZSwgaXNiczU4RW5jb2RlZCA9IHRydWUpOiBQcm9taXNlPE5TaGFyZT4ge1xuICBjb25zdCByZWNpcGllbnRQcml2YXRlS2V5ID0gYXdhaXQgcGdwLnJlYWRLZXkoeyBhcm1vcmVkS2V5OiBlbmNyeXB0ZWROU2hhcmUucmVjaXBpZW50UHJpdmF0ZUFybW9yIH0pO1xuICBjb25zdCBwcnYgPSAoXG4gICAgYXdhaXQgcGdwLmRlY3J5cHQoe1xuICAgICAgbWVzc2FnZTogYXdhaXQgcGdwLnJlYWRNZXNzYWdlKHsgYXJtb3JlZE1lc3NhZ2U6IGVuY3J5cHRlZE5TaGFyZS5uU2hhcmUuZW5jcnlwdGVkUHJpdmF0ZVNoYXJlIH0pLFxuICAgICAgZGVjcnlwdGlvbktleXM6IFtyZWNpcGllbnRQcml2YXRlS2V5IGFzIHBncC5Qcml2YXRlS2V5XSxcbiAgICB9KVxuICApLmRhdGEgYXMgc3RyaW5nO1xuXG4gIGxldCB1OiBzdHJpbmc7XG4gIGlmIChpc2JzNThFbmNvZGVkKSB7XG4gICAgY29uc3QgcHJpdmF0ZVNoYXJlID0gYnM1OC5kZWNvZGUocHJ2KS50b1N0cmluZygnaGV4Jyk7XG4gICAgdSA9IHByaXZhdGVTaGFyZS5zbGljZSg5MiwgMTU2KTtcbiAgfSBlbHNlIHtcbiAgICB1ID0gcHJ2LnNsaWNlKDAsIDY0KTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgaTogZW5jcnlwdGVkTlNoYXJlLm5TaGFyZS5pLFxuICAgIGo6IGVuY3J5cHRlZE5TaGFyZS5uU2hhcmUuaixcbiAgICBuOiBlbmNyeXB0ZWROU2hhcmUublNoYXJlLm4sXG4gICAgeTogZW5jcnlwdGVkTlNoYXJlLm5TaGFyZS5wdWJsaWNTaGFyZS5zbGljZSgwLCA2NiksXG4gICAgdTogdSxcbiAgICBjaGFpbmNvZGU6IGVuY3J5cHRlZE5TaGFyZS5uU2hhcmUucHVibGljU2hhcmUuc2xpY2UoNjYsIDEzMCksXG4gICAgdjogZW5jcnlwdGVkTlNoYXJlLm5TaGFyZS52c3NQcm9vZixcbiAgfTtcbn1cblxuLyoqXG4gKiBHZXRzIHB1YmxpYyBrZXkgZnJvbSBjb21tb24ga2V5Y2hhaW5cbiAqIEBwYXJhbSBjb21tb25LZXlDaGFpbiAtIGNvbW1vbiBrZXljaGFpbiBvZiBlY2RzYSB0c3NcbiAqIEByZXR1cm5zIHB1YmxpYyBrZXlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFB1YmxpY0tleShjb21tb25LZXlDaGFpbjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGNvbW1vbktleUNoYWluLnNsaWNlKDAsIDY2KTtcbn1cblxuZXhwb3J0IGNvbnN0IGRlbGltZXRlciA9ICc6JztcbmV4cG9ydCBjb25zdCBzZWNvbmRhcnlEZWxpbWV0ZXIgPSAnLSc7XG5cbmZ1bmN0aW9uIHZhbGlkYXRlU2hhcmVzTGVuZ3RoKHNoYXJlczogc3RyaW5nW10sIGV4cGVjdGVkTGVuZ3RoOiBudW1iZXIsIHNoYXJlTmFtZTogc3RyaW5nKSB7XG4gIGlmIChzaGFyZXMubGVuZ3RoIDwgZXhwZWN0ZWRMZW5ndGgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgJHtzaGFyZU5hbWV9IHNoYXJlYCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVPcHRpb25hbFZhbHVlcyhzaGFyZXM6IHN0cmluZ1tdLCBzdGFydDogbnVtYmVyLCBlbmQ6IG51bWJlciwgc2hhcmVOYW1lOiBzdHJpbmcsIHZhbHVlTmFtZTogc3RyaW5nKSB7XG4gIGxldCBmb3VuZCA9IGZhbHNlO1xuICBmb3IgKGxldCBpID0gc3RhcnQ7IGkgPCBlbmQ7IGkrKykge1xuICAgIGlmIChzaGFyZXNbaV0pIHtcbiAgICAgIGZvdW5kID0gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKGZvdW5kKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEluY29uc2lzdGVudCBvcHRpb25hbCAke3ZhbHVlTmFtZX0gdmFsdWUgaW4gJHtzaGFyZU5hbWV9IHNoYXJlYCk7XG4gICAgfVxuICB9XG4gIHJldHVybiBmb3VuZDtcbn1cblxuLyoqXG4gKiBwYXJzZXMgSyBzaGFyZSBmcm9tIHNpZ25hdHVyZSBzaGFyZSByZWNvcmRcbiAqIEBwYXJhbSBzaGFyZSAtIHNpZ25hdHVyZSBzaGFyZSByZWNvcmRcbiAqIEByZXR1cm5zIEsgU2hhcmVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlS1NoYXJlKHNoYXJlOiBTaWduYXR1cmVTaGFyZVJlY29yZCk6IEtTaGFyZSB7XG4gIGNvbnN0IHNoYXJlcyA9IHNoYXJlLnNoYXJlLnNwbGl0KGRlbGltZXRlcik7XG4gIHZhbGlkYXRlU2hhcmVzTGVuZ3RoKHNoYXJlcywgMTEgKyAyICogRWNkc2FQYWlsbGllclByb29mLm0sICdLJyk7XG4gIGNvbnN0IGhhc1Byb29mID0gdmFsaWRhdGVPcHRpb25hbFZhbHVlcyhzaGFyZXMsIDUsIDExLCAnSycsICdwcm9vZicpO1xuXG4gIGNvbnN0IHByb29mOiBSYW5nZVByb29mU2hhcmUgfCB1bmRlZmluZWQgPSBoYXNQcm9vZlxuICAgID8ge1xuICAgICAgICB6OiBzaGFyZXNbNV0sXG4gICAgICAgIHU6IHNoYXJlc1s2XSxcbiAgICAgICAgdzogc2hhcmVzWzddLFxuICAgICAgICBzOiBzaGFyZXNbOF0sXG4gICAgICAgIHMxOiBzaGFyZXNbOV0sXG4gICAgICAgIHMyOiBzaGFyZXNbMTBdLFxuICAgICAgfVxuICAgIDogdW5kZWZpbmVkO1xuXG4gIHJldHVybiB7XG4gICAgaTogZ2V0UGFydGljaXBhbnRJbmRleChzaGFyZS50byksXG4gICAgajogZ2V0UGFydGljaXBhbnRJbmRleChzaGFyZS5mcm9tKSxcbiAgICBrOiBzaGFyZXNbMF0sXG4gICAgbjogc2hhcmVzWzFdLFxuICAgIG50aWxkZTogc2hhcmVzWzJdLFxuICAgIGgxOiBzaGFyZXNbM10sXG4gICAgaDI6IHNoYXJlc1s0XSxcbiAgICBwcm9vZixcbiAgICBwOiBzaGFyZXMuc2xpY2UoMTEsIDExICsgRWNkc2FQYWlsbGllclByb29mLm0pLFxuICAgIHNpZ21hOiBzaGFyZXMuc2xpY2UoMTEgKyBFY2RzYVBhaWxsaWVyUHJvb2YubSwgMTEgKyAyICogRWNkc2FQYWlsbGllclByb29mLm0pLFxuICB9O1xufVxuXG4vKipcbiAqIGNvbnZlcnQgSyBzaGFyZSB0byBzaWduYXR1cmUgc2hhcmUgcmVjb3JkXG4gKiBAcGFyYW0gc2hhcmUgLSBLIHNoYXJlXG4gKiBAcmV0dXJucyBzaWduYXR1cmUgc2hhcmUgcmVjb3JkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0S1NoYXJlKHNoYXJlOiBLU2hhcmUpOiBTaWduYXR1cmVTaGFyZVJlY29yZCB7XG4gIHJldHVybiB7XG4gICAgdG86IGdldFBhcnRpY2lwYW50RnJvbUluZGV4KHNoYXJlLmkpLFxuICAgIGZyb206IGdldFBhcnRpY2lwYW50RnJvbUluZGV4KHNoYXJlLmopLFxuICAgIHNoYXJlOiBgJHtzaGFyZS5rfSR7ZGVsaW1ldGVyfSR7c2hhcmUubn0ke2RlbGltZXRlcn0ke3NoYXJlLm50aWxkZX0ke2RlbGltZXRlcn0ke3NoYXJlLmgxfSR7ZGVsaW1ldGVyfSR7XG4gICAgICBzaGFyZS5oMlxuICAgIH0ke2RlbGltZXRlcn0ke3NoYXJlLnByb29mPy56IHx8ICcnfSR7ZGVsaW1ldGVyfSR7c2hhcmUucHJvb2Y/LnUgfHwgJyd9JHtkZWxpbWV0ZXJ9JHtcbiAgICAgIHNoYXJlLnByb29mPy53IHx8ICcnXG4gICAgfSR7ZGVsaW1ldGVyfSR7c2hhcmUucHJvb2Y/LnMgfHwgJyd9JHtkZWxpbWV0ZXJ9JHtzaGFyZS5wcm9vZj8uczEgfHwgJyd9JHtkZWxpbWV0ZXJ9JHtcbiAgICAgIHNoYXJlLnByb29mPy5zMiB8fCAnJ1xuICAgIH0ke2RlbGltZXRlcn0keyhzaGFyZS5wIHx8IFtdKS5qb2luKGRlbGltZXRlcil9JHtkZWxpbWV0ZXJ9JHsoc2hhcmUuc2lnbWEgfHwgW10pLmpvaW4oZGVsaW1ldGVyKX1gLFxuICB9O1xufVxuXG4vKipcbiAqIHBhcnNlcyBBIHNoYXJlIGZyb20gc2lnbmF0dXJlIHNoYXJlIHJlY29yZFxuICogQHBhcmFtIHNoYXJlIC0gc2lnbmF0dXJlIHNoYXJlIHJlY29yZFxuICogQHJldHVybnMgQSBTaGFyZVxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VBU2hhcmUoc2hhcmU6IFNpZ25hdHVyZVNoYXJlUmVjb3JkKTogQVNoYXJlIHtcbiAgY29uc3Qgc2hhcmVzID0gc2hhcmUuc2hhcmUuc3BsaXQoZGVsaW1ldGVyKTtcbiAgdmFsaWRhdGVTaGFyZXNMZW5ndGgoc2hhcmVzLCAzNyArIEVjZHNhUGFpbGxpZXJQcm9vZi5tLCAnQScpO1xuICBjb25zdCBoYXNQcm9vZiA9IHZhbGlkYXRlT3B0aW9uYWxWYWx1ZXMoc2hhcmVzLCA3LCAxMywgJ0EnLCAncHJvb2YnKTtcbiAgY29uc3QgaGFzR2FtbWFQcm9vZiA9IHZhbGlkYXRlT3B0aW9uYWxWYWx1ZXMoc2hhcmVzLCAxMywgMjUsICdBJywgJ2dhbW1hUHJvb2YnKTtcbiAgY29uc3QgaGFzV1Byb29mID0gdmFsaWRhdGVPcHRpb25hbFZhbHVlcyhzaGFyZXMsIDI1LCAzNywgJ0EnLCAnd1Byb29mJyk7XG5cbiAgY29uc3QgcHJvb2Y6IFJhbmdlUHJvb2ZTaGFyZSB8IHVuZGVmaW5lZCA9IGhhc1Byb29mXG4gICAgPyB7XG4gICAgICAgIHo6IHNoYXJlc1s3XSxcbiAgICAgICAgdTogc2hhcmVzWzhdLFxuICAgICAgICB3OiBzaGFyZXNbOV0sXG4gICAgICAgIHM6IHNoYXJlc1sxMF0sXG4gICAgICAgIHMxOiBzaGFyZXNbMTFdLFxuICAgICAgICBzMjogc2hhcmVzWzEyXSxcbiAgICAgIH1cbiAgICA6IHVuZGVmaW5lZDtcblxuICBjb25zdCBnYW1tYVByb29mOiBSYW5nZVByb29mV2l0aENoZWNrU2hhcmUgfCB1bmRlZmluZWQgPSBoYXNHYW1tYVByb29mXG4gICAgPyB7XG4gICAgICAgIHo6IHNoYXJlc1sxM10sXG4gICAgICAgIHpwcm06IHNoYXJlc1sxNF0sXG4gICAgICAgIHQ6IHNoYXJlc1sxNV0sXG4gICAgICAgIHY6IHNoYXJlc1sxNl0sXG4gICAgICAgIHc6IHNoYXJlc1sxN10sXG4gICAgICAgIHM6IHNoYXJlc1sxOF0sXG4gICAgICAgIHMxOiBzaGFyZXNbMTldLFxuICAgICAgICBzMjogc2hhcmVzWzIwXSxcbiAgICAgICAgdDE6IHNoYXJlc1syMV0sXG4gICAgICAgIHQyOiBzaGFyZXNbMjJdLFxuICAgICAgICB1OiBzaGFyZXNbMjNdLFxuICAgICAgICB4OiBzaGFyZXNbMjRdLFxuICAgICAgfVxuICAgIDogdW5kZWZpbmVkO1xuXG4gIGNvbnN0IHdQcm9vZjogUmFuZ2VQcm9vZldpdGhDaGVja1NoYXJlIHwgdW5kZWZpbmVkID0gaGFzV1Byb29mXG4gICAgPyB7XG4gICAgICAgIHo6IHNoYXJlc1syNV0sXG4gICAgICAgIHpwcm06IHNoYXJlc1syNl0sXG4gICAgICAgIHQ6IHNoYXJlc1syN10sXG4gICAgICAgIHY6IHNoYXJlc1syOF0sXG4gICAgICAgIHc6IHNoYXJlc1syOV0sXG4gICAgICAgIHM6IHNoYXJlc1szMF0sXG4gICAgICAgIHMxOiBzaGFyZXNbMzFdLFxuICAgICAgICBzMjogc2hhcmVzWzMyXSxcbiAgICAgICAgdDE6IHNoYXJlc1szM10sXG4gICAgICAgIHQyOiBzaGFyZXNbMzRdLFxuICAgICAgICB1OiBzaGFyZXNbMzVdLFxuICAgICAgICB4OiBzaGFyZXNbMzZdLFxuICAgICAgfVxuICAgIDogdW5kZWZpbmVkO1xuXG4gIHJldHVybiB7XG4gICAgaTogZ2V0UGFydGljaXBhbnRJbmRleChzaGFyZS50byksXG4gICAgajogZ2V0UGFydGljaXBhbnRJbmRleChzaGFyZS5mcm9tKSxcbiAgICBrOiBzaGFyZXNbMF0sXG4gICAgYWxwaGE6IHNoYXJlc1sxXSxcbiAgICBtdTogc2hhcmVzWzJdLFxuICAgIG46IHNoYXJlc1szXSxcbiAgICBudGlsZGU6IHNoYXJlc1s0XSxcbiAgICBoMTogc2hhcmVzWzVdLFxuICAgIGgyOiBzaGFyZXNbNl0sXG4gICAgcHJvb2YsXG4gICAgZ2FtbWFQcm9vZixcbiAgICB3UHJvb2YsXG4gICAgc2lnbWE6IHNoYXJlcy5zbGljZSgzNyksXG4gIH07XG59XG5cbi8qKlxuICogY29udmVydCBBIHNoYXJlIHRvIHNpZ25hdHVyZSBzaGFyZSByZWNvcmRcbiAqIEBwYXJhbSBzaGFyZSAtIEEgc2hhcmVcbiAqIEByZXR1cm5zIHNpZ25hdHVyZSBzaGFyZSByZWNvcmRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnRBU2hhcmUoc2hhcmU6IEFTaGFyZSk6IFNpZ25hdHVyZVNoYXJlUmVjb3JkIHtcbiAgcmV0dXJuIHtcbiAgICB0bzogZ2V0UGFydGljaXBhbnRGcm9tSW5kZXgoc2hhcmUuaSksXG4gICAgZnJvbTogZ2V0UGFydGljaXBhbnRGcm9tSW5kZXgoc2hhcmUuaiksXG4gICAgc2hhcmU6IGAke3NoYXJlLmt9JHtkZWxpbWV0ZXJ9JHtzaGFyZS5hbHBoYX0ke2RlbGltZXRlcn0ke3NoYXJlLm11fSR7ZGVsaW1ldGVyfSR7c2hhcmUubn0ke2RlbGltZXRlcn0ke1xuICAgICAgc2hhcmUubnRpbGRlXG4gICAgfSR7ZGVsaW1ldGVyfSR7c2hhcmUuaDF9JHtkZWxpbWV0ZXJ9JHtzaGFyZS5oMn0ke2RlbGltZXRlcn0ke3NoYXJlLnByb29mPy56IHx8ICcnfSR7ZGVsaW1ldGVyfSR7XG4gICAgICBzaGFyZS5wcm9vZj8udSB8fCAnJ1xuICAgIH0ke2RlbGltZXRlcn0ke3NoYXJlLnByb29mPy53IHx8ICcnfSR7ZGVsaW1ldGVyfSR7c2hhcmUucHJvb2Y/LnMgfHwgJyd9JHtkZWxpbWV0ZXJ9JHtcbiAgICAgIHNoYXJlLnByb29mPy5zMSB8fCAnJ1xuICAgIH0ke2RlbGltZXRlcn0ke3NoYXJlLnByb29mPy5zMiB8fCAnJ30ke2RlbGltZXRlcn0ke3NoYXJlLmdhbW1hUHJvb2Y/LnogfHwgJyd9JHtkZWxpbWV0ZXJ9JHtcbiAgICAgIHNoYXJlLmdhbW1hUHJvb2Y/Lnpwcm0gfHwgJydcbiAgICB9JHtkZWxpbWV0ZXJ9JHtzaGFyZS5nYW1tYVByb29mPy50IHx8ICcnfSR7ZGVsaW1ldGVyfSR7c2hhcmUuZ2FtbWFQcm9vZj8udiB8fCAnJ30ke2RlbGltZXRlcn0ke1xuICAgICAgc2hhcmUuZ2FtbWFQcm9vZj8udyB8fCAnJ1xuICAgIH0ke2RlbGltZXRlcn0ke3NoYXJlLmdhbW1hUHJvb2Y/LnMgfHwgJyd9JHtkZWxpbWV0ZXJ9JHtzaGFyZS5nYW1tYVByb29mPy5zMSB8fCAnJ30ke2RlbGltZXRlcn0ke1xuICAgICAgc2hhcmUuZ2FtbWFQcm9vZj8uczIgfHwgJydcbiAgICB9JHtkZWxpbWV0ZXJ9JHtzaGFyZS5nYW1tYVByb29mPy50MSB8fCAnJ30ke2RlbGltZXRlcn0ke3NoYXJlLmdhbW1hUHJvb2Y/LnQyIHx8ICcnfSR7ZGVsaW1ldGVyfSR7XG4gICAgICBzaGFyZS5nYW1tYVByb29mPy51IHx8ICcnXG4gICAgfSR7ZGVsaW1ldGVyfSR7c2hhcmUuZ2FtbWFQcm9vZj8ueCB8fCAnJ30ke2RlbGltZXRlcn0ke3NoYXJlLndQcm9vZj8ueiB8fCAnJ30ke2RlbGltZXRlcn0ke1xuICAgICAgc2hhcmUud1Byb29mPy56cHJtIHx8ICcnXG4gICAgfSR7ZGVsaW1ldGVyfSR7c2hhcmUud1Byb29mPy50IHx8ICcnfSR7ZGVsaW1ldGVyfSR7c2hhcmUud1Byb29mPy52IHx8ICcnfSR7ZGVsaW1ldGVyfSR7XG4gICAgICBzaGFyZS53UHJvb2Y/LncgfHwgJydcbiAgICB9JHtkZWxpbWV0ZXJ9JHtzaGFyZS53UHJvb2Y/LnMgfHwgJyd9JHtkZWxpbWV0ZXJ9JHtzaGFyZS53UHJvb2Y/LnMxIHx8ICcnfSR7ZGVsaW1ldGVyfSR7XG4gICAgICBzaGFyZS53UHJvb2Y/LnMyIHx8ICcnXG4gICAgfSR7ZGVsaW1ldGVyfSR7c2hhcmUud1Byb29mPy50MSB8fCAnJ30ke2RlbGltZXRlcn0ke3NoYXJlLndQcm9vZj8udDIgfHwgJyd9JHtkZWxpbWV0ZXJ9JHtcbiAgICAgIHNoYXJlLndQcm9vZj8udSB8fCAnJ1xuICAgIH0ke2RlbGltZXRlcn0ke3NoYXJlLndQcm9vZj8ueCB8fCAnJ30ke2RlbGltZXRlcn0keyhzaGFyZS5zaWdtYSB8fCBbXSkuam9pbihkZWxpbWV0ZXIpfWAsXG4gIH07XG59XG5cbi8qKlxuICogcGFyc2VzIE11IHNoYXJlIGZyb20gc2lnbmF0dXJlIHNoYXJlIHJlY29yZFxuICogQHBhcmFtIHNoYXJlIC0gc2lnbmF0dXJlIHNoYXJlIHJlY29yZFxuICogQHJldHVybnMgTXUgU2hhcmVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlTXVTaGFyZShzaGFyZTogU2lnbmF0dXJlU2hhcmVSZWNvcmQpOiBNVVNoYXJlIHtcbiAgY29uc3Qgc2hhcmVzID0gc2hhcmUuc2hhcmUuc3BsaXQoZGVsaW1ldGVyKTtcbiAgdmFsaWRhdGVTaGFyZXNMZW5ndGgoc2hhcmVzLCAyNiwgJ011Jyk7XG4gIGNvbnN0IGhhc0dhbW1hUHJvb2YgPSB2YWxpZGF0ZU9wdGlvbmFsVmFsdWVzKHNoYXJlcywgMiwgMTQsICdNdScsICdnYW1tYVByb29mJyk7XG4gIGNvbnN0IGhhc1dQcm9vZiA9IHZhbGlkYXRlT3B0aW9uYWxWYWx1ZXMoc2hhcmVzLCAxNCwgMjYsICdNdScsICd3UHJvb2YnKTtcblxuICBsZXQgZ2FtbWFQcm9vZjtcbiAgaWYgKGhhc0dhbW1hUHJvb2YpIHtcbiAgICBnYW1tYVByb29mID0ge1xuICAgICAgejogc2hhcmVzWzJdLFxuICAgICAgenBybTogc2hhcmVzWzNdLFxuICAgICAgdDogc2hhcmVzWzRdLFxuICAgICAgdjogc2hhcmVzWzVdLFxuICAgICAgdzogc2hhcmVzWzZdLFxuICAgICAgczogc2hhcmVzWzddLFxuICAgICAgczE6IHNoYXJlc1s4XSxcbiAgICAgIHMyOiBzaGFyZXNbOV0sXG4gICAgICB0MTogc2hhcmVzWzEwXSxcbiAgICAgIHQyOiBzaGFyZXNbMTFdLFxuICAgICAgdTogc2hhcmVzWzEyXSxcbiAgICAgIHg6IHNoYXJlc1sxM10sXG4gICAgfTtcbiAgfVxuXG4gIGxldCB3UHJvb2Y7XG4gIGlmIChoYXNXUHJvb2YpIHtcbiAgICB3UHJvb2YgPSB7XG4gICAgICB6OiBzaGFyZXNbMTRdLFxuICAgICAgenBybTogc2hhcmVzWzE1XSxcbiAgICAgIHQ6IHNoYXJlc1sxNl0sXG4gICAgICB2OiBzaGFyZXNbMTddLFxuICAgICAgdzogc2hhcmVzWzE4XSxcbiAgICAgIHM6IHNoYXJlc1sxOV0sXG4gICAgICBzMTogc2hhcmVzWzIwXSxcbiAgICAgIHMyOiBzaGFyZXNbMjFdLFxuICAgICAgdDE6IHNoYXJlc1syMl0sXG4gICAgICB0Mjogc2hhcmVzWzIzXSxcbiAgICAgIHU6IHNoYXJlc1syNF0sXG4gICAgICB4OiBzaGFyZXNbMjVdLFxuICAgIH07XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGk6IGdldFBhcnRpY2lwYW50SW5kZXgoc2hhcmUudG8pLFxuICAgIGo6IGdldFBhcnRpY2lwYW50SW5kZXgoc2hhcmUuZnJvbSksXG4gICAgYWxwaGE6IHNoYXJlc1swXSxcbiAgICBtdTogc2hhcmVzWzFdLFxuICAgIGdhbW1hUHJvb2YsXG4gICAgd1Byb29mLFxuICB9O1xufVxuXG4vKipcbiAqIGNvbnZlcnQgTXUgc2hhcmUgdG8gc2lnbmF0dXJlIHNoYXJlIHJlY29yZFxuICogQHBhcmFtIHNoYXJlIC0gTXUgc2hhcmVcbiAqIEByZXR1cm5zIHNpZ25hdHVyZSBzaGFyZSByZWNvcmRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnRNdVNoYXJlKHNoYXJlOiBNVVNoYXJlKTogU2lnbmF0dXJlU2hhcmVSZWNvcmQge1xuICByZXR1cm4ge1xuICAgIHRvOiBnZXRQYXJ0aWNpcGFudEZyb21JbmRleChzaGFyZS5pKSxcbiAgICBmcm9tOiBnZXRQYXJ0aWNpcGFudEZyb21JbmRleChzaGFyZS5qKSxcbiAgICBzaGFyZTogYCR7c2hhcmUuYWxwaGF9JHtkZWxpbWV0ZXJ9JHtzaGFyZS5tdX0ke2RlbGltZXRlcn0ke3NoYXJlLmdhbW1hUHJvb2Y/LnogfHwgJyd9JHtkZWxpbWV0ZXJ9JHtcbiAgICAgIHNoYXJlLmdhbW1hUHJvb2Y/Lnpwcm0gfHwgJydcbiAgICB9JHtkZWxpbWV0ZXJ9JHtzaGFyZS5nYW1tYVByb29mPy50IHx8ICcnfSR7ZGVsaW1ldGVyfSR7c2hhcmUuZ2FtbWFQcm9vZj8udiB8fCAnJ30ke2RlbGltZXRlcn0ke1xuICAgICAgc2hhcmUuZ2FtbWFQcm9vZj8udyB8fCAnJ1xuICAgIH0ke2RlbGltZXRlcn0ke3NoYXJlLmdhbW1hUHJvb2Y/LnMgfHwgJyd9JHtkZWxpbWV0ZXJ9JHtzaGFyZS5nYW1tYVByb29mPy5zMSB8fCAnJ30ke2RlbGltZXRlcn0ke1xuICAgICAgc2hhcmUuZ2FtbWFQcm9vZj8uczIgfHwgJydcbiAgICB9JHtkZWxpbWV0ZXJ9JHtzaGFyZS5nYW1tYVByb29mPy50MSB8fCAnJ30ke2RlbGltZXRlcn0ke3NoYXJlLmdhbW1hUHJvb2Y/LnQyIHx8ICcnfSR7ZGVsaW1ldGVyfSR7XG4gICAgICBzaGFyZS5nYW1tYVByb29mPy51IHx8ICcnXG4gICAgfSR7ZGVsaW1ldGVyfSR7c2hhcmUuZ2FtbWFQcm9vZj8ueCB8fCAnJ30ke2RlbGltZXRlcn0ke3NoYXJlLndQcm9vZj8ueiB8fCAnJ30ke2RlbGltZXRlcn0ke1xuICAgICAgc2hhcmUud1Byb29mPy56cHJtIHx8ICcnXG4gICAgfSR7ZGVsaW1ldGVyfSR7c2hhcmUud1Byb29mPy50IHx8ICcnfSR7ZGVsaW1ldGVyfSR7c2hhcmUud1Byb29mPy52IHx8ICcnfSR7ZGVsaW1ldGVyfSR7XG4gICAgICBzaGFyZS53UHJvb2Y/LncgfHwgJydcbiAgICB9JHtkZWxpbWV0ZXJ9JHtzaGFyZS53UHJvb2Y/LnMgfHwgJyd9JHtkZWxpbWV0ZXJ9JHtzaGFyZS53UHJvb2Y/LnMxIHx8ICcnfSR7ZGVsaW1ldGVyfSR7XG4gICAgICBzaGFyZS53UHJvb2Y/LnMyIHx8ICcnXG4gICAgfSR7ZGVsaW1ldGVyfSR7c2hhcmUud1Byb29mPy50MSB8fCAnJ30ke2RlbGltZXRlcn0ke3NoYXJlLndQcm9vZj8udDIgfHwgJyd9JHtkZWxpbWV0ZXJ9JHtcbiAgICAgIHNoYXJlLndQcm9vZj8udSB8fCAnJ1xuICAgIH0ke2RlbGltZXRlcn0ke3NoYXJlLndQcm9vZj8ueCB8fCAnJ31gLFxuICB9O1xufVxuXG4vKipcbiAqIHBhcnNlcyBEIHNoYXJlIGZyb20gc2lnbmF0dXJlIHNoYXJlIHJlY29yZFxuICogQHBhcmFtIHNoYXJlIC0gc2lnbmF0dXJlIHNoYXJlIHJlY29yZFxuICogQHJldHVybnMgRCBTaGFyZVxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VEU2hhcmUoc2hhcmU6IFNpZ25hdHVyZVNoYXJlUmVjb3JkKTogRFNoYXJlIHtcbiAgY29uc3Qgc2hhcmVzID0gc2hhcmUuc2hhcmUuc3BsaXQoZGVsaW1ldGVyKTtcbiAgdmFsaWRhdGVTaGFyZXNMZW5ndGgoc2hhcmVzLCAyLCAnRCcpO1xuXG4gIHJldHVybiB7XG4gICAgaTogZ2V0UGFydGljaXBhbnRJbmRleChzaGFyZS50byksXG4gICAgajogZ2V0UGFydGljaXBhbnRJbmRleChzaGFyZS5mcm9tKSxcbiAgICBkZWx0YTogc2hhcmVzWzBdLFxuICAgIEdhbW1hOiBzaGFyZXNbMV0sXG4gIH07XG59XG5cbi8qKlxuICogY29udmVydCBEIHNoYXJlIHRvIHNpZ25hdHVyZSBzaGFyZSByZWNvcmRcbiAqIEBwYXJhbSBzaGFyZSAtIEQgc2hhcmVcbiAqIEByZXR1cm5zIHNpZ25hdHVyZSBzaGFyZSByZWNvcmRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnREU2hhcmUoc2hhcmU6IERTaGFyZSk6IFNpZ25hdHVyZVNoYXJlUmVjb3JkIHtcbiAgcmV0dXJuIHtcbiAgICB0bzogZ2V0UGFydGljaXBhbnRGcm9tSW5kZXgoc2hhcmUuaSksXG4gICAgZnJvbTogZ2V0UGFydGljaXBhbnRGcm9tSW5kZXgoc2hhcmUuaiksXG4gICAgc2hhcmU6IGAke3NoYXJlLmRlbHRhfSR7ZGVsaW1ldGVyfSR7c2hhcmUuR2FtbWF9YCxcbiAgfTtcbn1cblxuLyoqXG4gKiBwYXJzZXMgUyBhbmQgRCBzaGFyZSBmcm9tIHNpZ25hdHVyZSBzaGFyZSByZWNvcmRcbiAqIEBwYXJhbSBzaGFyZSAtIHNpZ25hdHVyZSBzaGFyZSByZWNvcmRcbiAqIEByZXR1cm5zIE9iamVjdCBjb250YWluaW5nIFMgYW5kIEQgU2hhcmVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlU0RTaGFyZShzaGFyZTogU2lnbmF0dXJlU2hhcmVSZWNvcmQpOiB7IHNTaGFyZTogU2lnbmF0dXJlU2hhcmU7IGRTaGFyZTogRFNoYXJlIH0ge1xuICBjb25zdCBzaGFyZXMgPSBzaGFyZS5zaGFyZS5zcGxpdChzZWNvbmRhcnlEZWxpbWV0ZXIpO1xuICB2YWxpZGF0ZVNoYXJlc0xlbmd0aChzaGFyZXMsIDIsICdTRCcpO1xuXG4gIHJldHVybiB7XG4gICAgc1NoYXJlOiBwYXJzZVNpZ25hdHVyZVNoYXJlKHsgdG86IHNoYXJlLnRvLCBmcm9tOiBzaGFyZS5mcm9tLCBzaGFyZTogc2hhcmVzWzBdIH0pLFxuICAgIGRTaGFyZTogcGFyc2VEU2hhcmUoeyB0bzogc2hhcmUudG8sIGZyb206IHNoYXJlLmZyb20sIHNoYXJlOiBzaGFyZXNbMV0gfSksXG4gIH07XG59XG5cbi8qKlxuICogY29udmVydCBTIGFuZCBEIHNoYXJlIHRvIHNpZ25hdHVyZSBzaGFyZSByZWNvcmRcbiAqIEBwYXJhbSBzaGFyZSAtIFMgYW5kIEQgc2hhcmUgaW4gYSBvYmplY3RcbiAqIEByZXR1cm5zIHNpZ25hdHVyZSBzaGFyZSByZWNvcmRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnRTRFNoYXJlKHNoYXJlOiB7IHNTaGFyZTogU1NoYXJlOyBkU2hhcmU6IERTaGFyZSB9KTogU2lnbmF0dXJlU2hhcmVSZWNvcmQge1xuICByZXR1cm4ge1xuICAgIHRvOiBnZXRQYXJ0aWNpcGFudEZyb21JbmRleChzaGFyZS5kU2hhcmUuaSksXG4gICAgZnJvbTogZ2V0UGFydGljaXBhbnRGcm9tSW5kZXgoc2hhcmUuZFNoYXJlLmopLFxuICAgIHNoYXJlOiBgJHtzaGFyZS5zU2hhcmUuUn0ke2RlbGltZXRlcn0ke3NoYXJlLnNTaGFyZS5zfSR7ZGVsaW1ldGVyfSR7c2hhcmUuc1NoYXJlLnl9JHtzZWNvbmRhcnlEZWxpbWV0ZXJ9JHtzaGFyZS5kU2hhcmUuZGVsdGF9JHtkZWxpbWV0ZXJ9JHtzaGFyZS5kU2hhcmUuR2FtbWF9YCxcbiAgfTtcbn1cblxuLyoqXG4gKiBwYXJzZXMgc2lnbmF0dXJlIHNoYXJlIGZyb20gc2lnbmF0dXJlIHNoYXJlIHJlY29yZFxuICogQHBhcmFtIHNoYXJlIC0gc2lnbmF0dXJlIHNoYXJlIHJlY29yZFxuICogQHJldHVybnMgU2lnbmF0dXJlIFNoYXJlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVNpZ25hdHVyZVNoYXJlKHNoYXJlOiBTaWduYXR1cmVTaGFyZVJlY29yZCk6IFNpZ25hdHVyZVNoYXJlIHtcbiAgY29uc3Qgc2hhcmVzID0gc2hhcmUuc2hhcmUuc3BsaXQoZGVsaW1ldGVyKTtcbiAgdmFsaWRhdGVTaGFyZXNMZW5ndGgoc2hhcmVzLCAzLCAnU2lnbmF0dXJlJyk7XG5cbiAgcmV0dXJuIHtcbiAgICBpOiBnZXRQYXJ0aWNpcGFudEluZGV4KHNoYXJlLnRvKSxcbiAgICBSOiBzaGFyZXNbMF0sXG4gICAgczogc2hhcmVzWzFdLFxuICAgIHk6IHNoYXJlc1syXSxcbiAgfTtcbn1cblxuLyoqXG4gKiBjb252ZXRzIGNvbWJpbmVkIHNpZ25hdHVyZSB0byBzaWduYXR1cmUgc2hhcmUgcmVjb3JkXG4gKiBAcGFyYW0gc2lnbmF0dXJlIC0gY29tYmluZWQgc2lnbmF0dXJlIHNoYXJlXG4gKiBAcGFyYW0gdXNlckluZGV4IC0gdXNlciBpbmRleCwgZWl0aGVyIDEgKHVzZXIpIG9yIDIgKGJhY2t1cClcbiAqIEByZXR1cm5zIHNpZ25hdHVyZSBzaGFyZSByZWNvcmRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnRDb21iaW5lZFNpZ25hdHVyZShzaWduYXR1cmU6IFNpZ25hdHVyZSwgdXNlckluZGV4OiBudW1iZXIpOiBTaWduYXR1cmVTaGFyZVJlY29yZCB7XG4gIHJldHVybiB7XG4gICAgdG86IFNpZ25hdHVyZVNoYXJlVHlwZS5CSVRHTyxcbiAgICBmcm9tOiBnZXRQYXJ0aWNpcGFudEZyb21JbmRleCh1c2VySW5kZXgpLFxuICAgIHNoYXJlOiBgJHtzaWduYXR1cmUucmVjaWR9JHtkZWxpbWV0ZXJ9JHtzaWduYXR1cmUucn0ke2RlbGltZXRlcn0ke3NpZ25hdHVyZS5zfSR7ZGVsaW1ldGVyfSR7c2lnbmF0dXJlLnl9YCxcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlQ29tYmluZWRTaWduYXR1cmUoc2hhcmU6IFNpZ25hdHVyZVNoYXJlUmVjb3JkKTogU2lnbmF0dXJlIHtcbiAgY29uc3Qgc2hhcmVzID0gc2hhcmUuc2hhcmUuc3BsaXQoZGVsaW1ldGVyKTtcbiAgdmFsaWRhdGVTaGFyZXNMZW5ndGgoc2hhcmVzLCAzLCAnU2lnbmF0dXJlJyk7XG5cbiAgcmV0dXJuIHtcbiAgICByZWNpZDogTnVtYmVyKHNoYXJlc1swXSksXG4gICAgcjogc2hhcmVzWzFdLFxuICAgIHM6IHNoYXJlc1syXSxcbiAgICB5OiBzaGFyZXNbM10sXG4gIH07XG59XG5cbi8qKlxuICogY29udmVydCBzaWduYXR1cmUgc2hhcmUgdG8gc2lnbmF0dXJlIHNoYXJlIHJlY29yZFxuICogQHBhcmFtIHNoYXJlIC0gU2lnbmF0dXJlIHNoYXJlXG4gKiBAcGFyYW0gc2VuZGVySW5kZXhcbiAqIEBwYXJhbSByZWNpcGllbnRJbmRleFxuICogQHJldHVybnMgc2lnbmF0dXJlIHNoYXJlIHJlY29yZFxuICovXG5leHBvcnQgZnVuY3Rpb24gY29udmVydFNpZ25hdHVyZVNoYXJlKFxuICBzaGFyZTogU2lnbmF0dXJlU2hhcmUsXG4gIHNlbmRlckluZGV4OiBudW1iZXIsXG4gIHJlY2lwaWVudEluZGV4OiBudW1iZXJcbik6IFNpZ25hdHVyZVNoYXJlUmVjb3JkIHtcbiAgcmV0dXJuIHtcbiAgICB0bzogZ2V0UGFydGljaXBhbnRGcm9tSW5kZXgocmVjaXBpZW50SW5kZXgpLFxuICAgIGZyb206IGdldFBhcnRpY2lwYW50RnJvbUluZGV4KHNlbmRlckluZGV4KSxcbiAgICBzaGFyZTogYCR7c2hhcmUuUn0ke2RlbGltZXRlcn0ke3NoYXJlLnN9JHtkZWxpbWV0ZXJ9JHtzaGFyZS55fWAsXG4gIH07XG59XG5cbi8qKlxuICogY29udmVydHMgQiBzaGFyZSB0byBzaWduYXR1cmUgc2hhcmUgcmVjb3JkXG4gKiBAcGFyYW0gc2hhcmUgLSBCIHNoYXJlXG4gKiBAcmV0dXJucyBzaWduYXR1cmUgc2hhcmUgcmVjb3JkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0QlNoYXJlKHNoYXJlOiBCU2hhcmUpOiBTaWduYXR1cmVTaGFyZVJlY29yZCB7XG4gIHJldHVybiB7XG4gICAgdG86IFNpZ25hdHVyZVNoYXJlVHlwZS5CSVRHTyxcbiAgICBmcm9tOiBnZXRQYXJ0aWNpcGFudEZyb21JbmRleChzaGFyZS5pKSxcbiAgICBzaGFyZTogYCR7c2hhcmUuYmV0YX0ke2RlbGltZXRlcn0ke3NoYXJlLmdhbW1hfSR7ZGVsaW1ldGVyfSR7c2hhcmUua30ke2RlbGltZXRlcn0ke3NoYXJlLm51fSR7ZGVsaW1ldGVyfSR7XG4gICAgICBzaGFyZS53XG4gICAgfSR7ZGVsaW1ldGVyfSR7c2hhcmUueX0ke2RlbGltZXRlcn0ke3NoYXJlLmx9JHtkZWxpbWV0ZXJ9JHtzaGFyZS5tfSR7ZGVsaW1ldGVyfSR7c2hhcmUubn0ke2RlbGltZXRlcn0ke1xuICAgICAgc2hhcmUubnRpbGRlXG4gICAgfSR7ZGVsaW1ldGVyfSR7c2hhcmUuaDF9JHtkZWxpbWV0ZXJ9JHtzaGFyZS5oMn0ke2RlbGltZXRlcn0ke3NoYXJlLmNrfSR7ZGVsaW1ldGVyfSR7KHNoYXJlLnAgfHwgW10pLmpvaW4oXG4gICAgICBkZWxpbWV0ZXJcbiAgICApfWAsXG4gIH07XG59XG5cbi8qKlxuICogcGFyc2VzIEIgc2hhcmUgZnJvbSBzaWduYXR1cmUgc2hhcmUgcmVjb3JkXG4gKiBAcGFyYW0gc2hhcmUgQiBzaGFyZSByZWNvcmRcbiAqIEByZXR1cm5zIEIgU2hhcmVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlQlNoYXJlKHNoYXJlOiBTaWduYXR1cmVTaGFyZVJlY29yZCk6IEJTaGFyZSB7XG4gIGNvbnN0IHNoYXJlcyA9IHNoYXJlLnNoYXJlLnNwbGl0KGRlbGltZXRlcik7XG4gIHZhbGlkYXRlU2hhcmVzTGVuZ3RoKHNoYXJlcywgMTMgKyBFY2RzYVBhaWxsaWVyUHJvb2YubSwgJ0InKTtcblxuICByZXR1cm4ge1xuICAgIGk6IGdldFBhcnRpY2lwYW50SW5kZXgoc2hhcmUudG8pLFxuICAgIGJldGE6IHNoYXJlc1swXSxcbiAgICBnYW1tYTogc2hhcmVzWzFdLFxuICAgIGs6IHNoYXJlc1syXSxcbiAgICBudTogc2hhcmVzWzNdLFxuICAgIHc6IHNoYXJlc1s0XSxcbiAgICB5OiBzaGFyZXNbNV0sXG4gICAgbDogc2hhcmVzWzZdLFxuICAgIG06IHNoYXJlc1s3XSxcbiAgICBuOiBzaGFyZXNbOF0sXG4gICAgbnRpbGRlOiBzaGFyZXNbOV0sXG4gICAgaDE6IHNoYXJlc1sxMF0sXG4gICAgaDI6IHNoYXJlc1sxMV0sXG4gICAgY2s6IHNoYXJlc1sxMl0sXG4gICAgcDogc2hhcmVzLnNsaWNlKDEzLCAxMyArIEVjZHNhUGFpbGxpZXJQcm9vZi5tKSxcbiAgfTtcbn1cblxuLyoqXG4gKiBjb252ZXJ0cyBPIHNoYXJlIHRvIHNpZ25hdHVyZSBzaGFyZSByZWNvcmRcbiAqIEBwYXJhbSBzaGFyZSBPIHNoYXJlXG4gKiBAcmV0dXJucyBzaWduYXR1cmUgc2hhcmUgcmVjb3JkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0T1NoYXJlKHNoYXJlOiBPU2hhcmUpOiBTaWduYXR1cmVTaGFyZVJlY29yZCB7XG4gIHJldHVybiB7XG4gICAgdG86IFNpZ25hdHVyZVNoYXJlVHlwZS5CSVRHTyxcbiAgICBmcm9tOiBnZXRQYXJ0aWNpcGFudEZyb21JbmRleChzaGFyZS5pKSxcbiAgICBzaGFyZTogYCR7c2hhcmUuR2FtbWF9JHtkZWxpbWV0ZXJ9JHtzaGFyZS5kZWx0YX0ke2RlbGltZXRlcn0ke3NoYXJlLmt9JHtkZWxpbWV0ZXJ9JHtzaGFyZS5vbWljcm9ufSR7ZGVsaW1ldGVyfSR7c2hhcmUueX1gLFxuICB9O1xufVxuXG4vKipcbiAqIHBhcnNlcyBPIHNoYXJlIGZyb20gc2lnbmF0dXJlIHNoYXJlIHJlY29yZFxuICogQHBhcmFtIHNoYXJlIE8gc2hhcmUgcmVjb3JkXG4gKiBAcmV0dXJucyBPIFNoYXJlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZU9TaGFyZShzaGFyZTogU2lnbmF0dXJlU2hhcmVSZWNvcmQpOiBPU2hhcmUge1xuICBjb25zdCBzaGFyZXMgPSBzaGFyZS5zaGFyZS5zcGxpdChkZWxpbWV0ZXIpO1xuICB2YWxpZGF0ZVNoYXJlc0xlbmd0aChzaGFyZXMsIDUsICdPJyk7XG5cbiAgcmV0dXJuIHtcbiAgICBpOiBnZXRQYXJ0aWNpcGFudEluZGV4KHNoYXJlLnRvKSxcbiAgICBHYW1tYTogc2hhcmVzWzBdLFxuICAgIGRlbHRhOiBzaGFyZXNbMV0sXG4gICAgazogc2hhcmVzWzJdLFxuICAgIG9taWNyb246IHNoYXJlc1szXSxcbiAgICB5OiBzaGFyZXNbNF0sXG4gIH07XG59XG5cbi8qKlxuICogZ2V0cyBwYXJ0aWNpcGFudCBpbmRleFxuICogQHBhcmFtIHBhcnRpY2lwYW50IC0gcGFydGljaXBhbnRzICh1c2VyLCBiYWNrdXAsIG9yIGJpdGdvKVxuICogQHJldHVybnMgaW5kZXggKDEsIDIsIDByIDMpXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRQYXJ0aWNpcGFudEluZGV4KHBhcnRpY2lwYW50OiAndXNlcicgfCAnYmFja3VwJyB8ICdiaXRnbycpOiBudW1iZXIge1xuICBzd2l0Y2ggKHBhcnRpY2lwYW50KSB7XG4gICAgY2FzZSAndXNlcic6XG4gICAgICByZXR1cm4gMTtcbiAgICBjYXNlICdiYWNrdXAnOlxuICAgICAgcmV0dXJuIDI7XG4gICAgY2FzZSAnYml0Z28nOlxuICAgICAgcmV0dXJuIDM7XG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IEVycm9yKCdVbmtvd24gcGFydGljaXBhbnQnKTtcbiAgfVxufVxuXG4vKipcbiAqIGdldHMgcGFydGljaXBhbnQgbmFtZSBieSBpbmRleFxuICogQHBhcmFtIGluZGV4IHBhcnRpY2lwYW50IGluZGV4XG4gKiBAcmV0dXJucyBwYXJ0aWNpcGFudCBuYW1lXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRQYXJ0aWNpcGFudEZyb21JbmRleChpbmRleDogbnVtYmVyKTogU2lnbmF0dXJlU2hhcmVUeXBlIHtcbiAgc3dpdGNoIChpbmRleCkge1xuICAgIGNhc2UgMTpcbiAgICAgIHJldHVybiBTaWduYXR1cmVTaGFyZVR5cGUuVVNFUjtcbiAgICBjYXNlIDI6XG4gICAgICByZXR1cm4gU2lnbmF0dXJlU2hhcmVUeXBlLkJBQ0tVUDtcbiAgICBjYXNlIDM6XG4gICAgICByZXR1cm4gU2lnbmF0dXJlU2hhcmVUeXBlLkJJVEdPO1xuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gcGFydGljaXBhbnQgaW5kZXggJHtpbmRleH1gKTtcbiAgfVxufVxuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0byB2ZXJpZnkgdS12YWx1ZSB3YWxsZXQgc2lnbmF0dXJlcyBmb3IgdGhlIGJpdGdvLXVzZXIgYW5kIGJpdGdvLWJhY2t1cCBzaGFyZXMuXG4gKiBAcGFyYW0gcGFyYW1zXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB2ZXJpZnlXYWxsZXRTaWduYXR1cmUocGFyYW1zOiB7XG4gIHdhbGxldFNpZ25hdHVyZTogcGdwLktleTtcbiAgYml0Z29QdWI6IHBncC5LZXk7XG4gIGNvbW1vbktleWNoYWluOiBzdHJpbmc7XG4gIHVzZXJLZXlJZDogc3RyaW5nO1xuICBiYWNrdXBLZXlJZDogc3RyaW5nO1xuICBkZWNyeXB0ZWRTaGFyZTogc3RyaW5nO1xuICB2ZXJpZmllckluZGV4OiAxIHwgMjtcbn0pOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgcmF3Tm90YXRpb25zID0gYXdhaXQgY29tbW9uVmVyaWZ5V2FsbGV0U2lnbmF0dXJlKHBhcmFtcyk7XG4gIGNvbnN0IHB1YmxpY1VWYWx1ZVJhd05vdGF0aW9uSW5kZXggPSAyICsgcGFyYW1zLnZlcmlmaWVySW5kZXg7XG5cbiAgLy8gRGVyaXZlIHB1YmxpYyBmb3JtIG9mIHUtdmFsdWVcbiAgY29uc3QgcHVibGljVVZhbHVlID0gZWNjLnBvaW50RnJvbVNjYWxhcihCdWZmZXIuZnJvbShwYXJhbXMuZGVjcnlwdGVkU2hhcmUuc2xpY2UoMCwgNjQpLCAnaGV4JyksIHRydWUpO1xuICBhc3NlcnQocHVibGljVVZhbHVlICE9PSBudWxsLCAnbnVsbCBwdWJsaWMgdS12YWx1ZScpO1xuICAvLyBWZXJpZnkgdGhhdCB0aGUgdSB2YWx1ZSArIGNoYWluY29kZSBpcyBlcXVhbCB0byB0aGUgcHJvb2YgcmV0cmlldmVkIGZyb20gdGhlIHJhdyBub3RhdGlvbnNcbiAgYXNzZXJ0KFxuICAgIEJ1ZmZlci5mcm9tKHB1YmxpY1VWYWx1ZSkudG9TdHJpbmcoJ2hleCcpICsgcGFyYW1zLmRlY3J5cHRlZFNoYXJlLnNsaWNlKDY0KSA9PT1cbiAgICAgIEJ1ZmZlci5mcm9tKHJhd05vdGF0aW9uc1twdWJsaWNVVmFsdWVSYXdOb3RhdGlvbkluZGV4XS52YWx1ZSkudG9TdHJpbmcoKSxcbiAgICAnYml0Z28gc2hhcmUgbWlzbWF0Y2gnXG4gICk7XG59XG4iXX0=
|
|
@@ -6,6 +6,7 @@ import { DecryptableYShare, CombinedKey, EncryptedYShare, UserSigningMaterial, B
|
|
|
6
6
|
import { SignatureShareRecord, CommitmentShareRecord } from '../../utils';
|
|
7
7
|
import { BaseTransaction } from '../../../account-lib';
|
|
8
8
|
import { getTxRequest, sendSignatureShare } from '../common';
|
|
9
|
+
import { IRequestTracer } from '../../../api';
|
|
9
10
|
export { getTxRequest, sendSignatureShare };
|
|
10
11
|
/**
|
|
11
12
|
* Combines YShares to combine the final TSS key
|
|
@@ -48,17 +49,19 @@ export declare function createUserToBitGoGShare(userSignShare: SignShare, bitgoT
|
|
|
48
49
|
* @param {SignShare} userSignShare - the user Sign Share
|
|
49
50
|
* @param {String} encryptedSignerShare - signer share encrypted to bitgo key
|
|
50
51
|
* @returns {Promise<void>}
|
|
52
|
+
* @param {IRequestTracer} reqId - the request tracer request id
|
|
51
53
|
*/
|
|
52
|
-
export declare function offerUserToBitgoRShare(bitgo: BitGoBase, walletId: string, txRequestId: string, userSignShare: SignShare, encryptedSignerShare: string, apiMode?: 'full' | 'lite', vssProof?: string, privateShareProof?: string, userPublicGpgKey?: string, publicShare?: string): Promise<void>;
|
|
54
|
+
export declare function offerUserToBitgoRShare(bitgo: BitGoBase, walletId: string, txRequestId: string, userSignShare: SignShare, encryptedSignerShare: string, apiMode?: 'full' | 'lite', vssProof?: string, privateShareProof?: string, userPublicGpgKey?: string, publicShare?: string, reqId?: IRequestTracer): Promise<void>;
|
|
53
55
|
/**
|
|
54
56
|
* Gets the Bitgo to User RShare from Bitgo
|
|
55
57
|
*
|
|
56
58
|
* @param {BitGoBase} bitgo - the bitgo instance
|
|
57
59
|
* @param {String} walletId - the wallet id
|
|
58
60
|
* @param {String} txRequestId - the txRequest Id
|
|
61
|
+
* @param {IRequestTracer} reqId - the request tracer request id
|
|
59
62
|
* @returns {Promise<SignatureShareRecord>} - a Signature Share
|
|
60
63
|
*/
|
|
61
|
-
export declare function getBitgoToUserRShare(bitgo: BitGoBase, walletId: string, txRequestId: string): Promise<SignatureShareRecord>;
|
|
64
|
+
export declare function getBitgoToUserRShare(bitgo: BitGoBase, walletId: string, txRequestId: string, reqId?: IRequestTracer): Promise<SignatureShareRecord>;
|
|
62
65
|
/**
|
|
63
66
|
* Sends the User to Bitgo GShare to Bitgo
|
|
64
67
|
*
|
|
@@ -66,9 +69,10 @@ export declare function getBitgoToUserRShare(bitgo: BitGoBase, walletId: string,
|
|
|
66
69
|
* @param {String} walletId - the wallet id
|
|
67
70
|
* @param {String} txRequestId - the txRequest Id
|
|
68
71
|
* @param {GShare} userToBitgoGShare - the User to Bitgo GShare
|
|
72
|
+
* @param {IRequestTracer} reqId - the request tracer request id
|
|
69
73
|
* @returns {Promise<void>}
|
|
70
74
|
*/
|
|
71
|
-
export declare function sendUserToBitgoGShare(bitgo: BitGoBase, walletId: string, txRequestId: string, userToBitgoGShare: GShare, apiMode?: 'full' | 'lite'): Promise<void>;
|
|
75
|
+
export declare function sendUserToBitgoGShare(bitgo: BitGoBase, walletId: string, txRequestId: string, userToBitgoGShare: GShare, apiMode?: 'full' | 'lite', reqId?: IRequestTracer): Promise<void>;
|
|
72
76
|
/**
|
|
73
77
|
* Prepares a YShare to be exchanged with other key holders.
|
|
74
78
|
* Output is in a format that is usable within BitGo's ecosystem.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"eddsa.d.ts","sourceRoot":"","sources":["../../../../../src/bitgo/tss/eddsa/eddsa.ts"],"names":[],"mappings":";AACA,OAAO,OAAO,MAAM,SAAS,CAAC;AAE9B,OAAO,KAAK,EAAE,EAAE,MAAM,EAAU,QAAQ,EAAE,MAAM,EAAU,SAAS,EAAE,MAAM,EAAE,MAAM,gCAAgC,CAAC;AACpH,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EACL,iBAAiB,EACjB,WAAW,EAEX,eAAe,EACf,mBAAmB,EACnB,qBAAqB,EACtB,MAAM,SAAS,CAAC;AAEjB,OAAO,EAGL,oBAAoB,EAGpB,qBAAqB,EAEtB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAGvD,OAAO,EAA+B,YAAY,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"eddsa.d.ts","sourceRoot":"","sources":["../../../../../src/bitgo/tss/eddsa/eddsa.ts"],"names":[],"mappings":"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"}
|