@bitgo-beta/sdk-coin-canton 1.0.1-beta.55 → 1.0.1-beta.551
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/src/canton.d.ts +20 -1
- package/dist/src/canton.d.ts.map +1 -1
- package/dist/src/canton.js +227 -8
- package/dist/src/cantonToken.d.ts +19 -0
- package/dist/src/cantonToken.d.ts.map +1 -0
- package/dist/src/cantonToken.js +52 -0
- package/dist/src/index.d.ts +2 -0
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +3 -1
- package/dist/src/lib/allocationAllocateBuilder.d.ts +126 -0
- package/dist/src/lib/allocationAllocateBuilder.d.ts.map +1 -0
- package/dist/src/lib/allocationAllocateBuilder.js +250 -0
- package/dist/src/lib/allocationRequestBuilder.d.ts +116 -0
- package/dist/src/lib/allocationRequestBuilder.d.ts.map +1 -0
- package/dist/src/lib/allocationRequestBuilder.js +246 -0
- package/dist/src/lib/cantonCommandBuilder.d.ts +63 -0
- package/dist/src/lib/cantonCommandBuilder.d.ts.map +1 -0
- package/dist/src/lib/cantonCommandBuilder.js +155 -0
- package/dist/src/lib/constant.d.ts +2 -0
- package/dist/src/lib/constant.d.ts.map +1 -1
- package/dist/src/lib/constant.js +4 -2
- package/dist/src/lib/cosignDelegationAcceptBuilder.d.ts +56 -0
- package/dist/src/lib/cosignDelegationAcceptBuilder.d.ts.map +1 -0
- package/dist/src/lib/cosignDelegationAcceptBuilder.js +112 -0
- package/dist/src/lib/cosignDelegationProposalBuilder.d.ts +60 -0
- package/dist/src/lib/cosignDelegationProposalBuilder.d.ts.map +1 -0
- package/dist/src/lib/cosignDelegationProposalBuilder.js +111 -0
- package/dist/src/lib/iface.d.ts +145 -3
- package/dist/src/lib/iface.d.ts.map +1 -1
- package/dist/src/lib/iface.js +3 -1
- package/dist/src/lib/index.d.ts +11 -0
- package/dist/src/lib/index.d.ts.map +1 -1
- package/dist/src/lib/index.js +24 -2
- package/dist/src/lib/oneStepPreApprovalBuilder.d.ts +15 -5
- package/dist/src/lib/oneStepPreApprovalBuilder.d.ts.map +1 -1
- package/dist/src/lib/oneStepPreApprovalBuilder.js +31 -3
- package/dist/src/lib/resourcesInterface.d.ts +1 -1
- package/dist/src/lib/resourcesInterface.d.ts.map +1 -1
- package/dist/src/lib/resourcesInterface.js +1 -1
- package/dist/src/lib/transaction/transaction.d.ts +21 -2
- package/dist/src/lib/transaction/transaction.d.ts.map +1 -1
- package/dist/src/lib/transaction/transaction.js +330 -9
- package/dist/src/lib/transactionBuilder.d.ts +3 -3
- package/dist/src/lib/transactionBuilder.d.ts.map +1 -1
- package/dist/src/lib/transactionBuilder.js +1 -5
- package/dist/src/lib/transactionBuilderFactory.d.ts +20 -0
- package/dist/src/lib/transactionBuilderFactory.d.ts.map +1 -1
- package/dist/src/lib/transactionBuilderFactory.js +78 -4
- package/dist/src/lib/transferAcceptanceBuilder.d.ts +59 -0
- package/dist/src/lib/transferAcceptanceBuilder.d.ts.map +1 -0
- package/dist/src/lib/transferAcceptanceBuilder.js +116 -0
- package/dist/src/lib/transferAcknowledgeBuilder.d.ts +72 -0
- package/dist/src/lib/transferAcknowledgeBuilder.d.ts.map +1 -0
- package/dist/src/lib/transferAcknowledgeBuilder.js +133 -0
- package/dist/src/lib/transferBuilder.d.ts +87 -3
- package/dist/src/lib/transferBuilder.d.ts.map +1 -1
- package/dist/src/lib/transferBuilder.js +169 -1
- package/dist/src/lib/transferOfferWithdrawnBuilder.d.ts +67 -0
- package/dist/src/lib/transferOfferWithdrawnBuilder.d.ts.map +1 -0
- package/dist/src/lib/transferOfferWithdrawnBuilder.js +130 -0
- package/dist/src/lib/transferRejectionBuilder.d.ts +59 -0
- package/dist/src/lib/transferRejectionBuilder.d.ts.map +1 -0
- package/dist/src/lib/transferRejectionBuilder.js +116 -0
- package/dist/src/lib/utils.d.ts +49 -3
- package/dist/src/lib/utils.d.ts.map +1 -1
- package/dist/src/lib/utils.js +666 -44
- package/dist/src/lib/walletInitBuilder.d.ts +2 -1
- package/dist/src/lib/walletInitBuilder.d.ts.map +1 -1
- package/dist/src/lib/walletInitBuilder.js +4 -1
- package/dist/src/lib/walletInitialization/walletInitTransaction.d.ts +2 -1
- package/dist/src/lib/walletInitialization/walletInitTransaction.d.ts.map +1 -1
- package/dist/src/lib/walletInitialization/walletInitTransaction.js +14 -1
- package/dist/src/register.d.ts.map +1 -1
- package/dist/src/register.js +5 -1
- package/dist/test/helper.d.ts +3 -0
- package/dist/test/helper.d.ts.map +1 -0
- package/dist/test/helper.js +9 -0
- package/dist/test/integration/canton.integration.d.ts +2 -0
- package/dist/test/integration/canton.integration.d.ts.map +1 -0
- package/dist/test/integration/canton.integration.js +157 -0
- package/dist/test/integration/canton.token.integration.d.ts +2 -0
- package/dist/test/integration/canton.token.integration.d.ts.map +1 -0
- package/dist/test/integration/canton.token.integration.js +51 -0
- package/dist/test/resources.d.ts +220 -2
- package/dist/test/resources.d.ts.map +1 -1
- package/dist/test/resources.js +225 -7
- package/dist/test/unit/builder/allocationAllocate/allocationAllocateBuilder.d.ts +2 -0
- package/dist/test/unit/builder/allocationAllocate/allocationAllocateBuilder.d.ts.map +1 -0
- package/dist/test/unit/builder/allocationAllocate/allocationAllocateBuilder.js +341 -0
- package/dist/test/unit/builder/allocationRequest/allocationRequestBuilder.d.ts +2 -0
- package/dist/test/unit/builder/allocationRequest/allocationRequestBuilder.d.ts.map +1 -0
- package/dist/test/unit/builder/allocationRequest/allocationRequestBuilder.js +386 -0
- package/dist/test/unit/builder/cantonCommand/cantonCommandBuilder.d.ts +2 -0
- package/dist/test/unit/builder/cantonCommand/cantonCommandBuilder.d.ts.map +1 -0
- package/dist/test/unit/builder/cantonCommand/cantonCommandBuilder.js +296 -0
- package/dist/test/unit/builder/cosignDelegationAccept/cosignDelegationAcceptBuilder.d.ts +2 -0
- package/dist/test/unit/builder/cosignDelegationAccept/cosignDelegationAcceptBuilder.d.ts.map +1 -0
- package/dist/test/unit/builder/cosignDelegationAccept/cosignDelegationAcceptBuilder.js +75 -0
- package/dist/test/unit/builder/cosignDelegationProposal/cosignDelegationProposalBuilder.d.ts +2 -0
- package/dist/test/unit/builder/cosignDelegationProposal/cosignDelegationProposalBuilder.d.ts.map +1 -0
- package/dist/test/unit/builder/cosignDelegationProposal/cosignDelegationProposalBuilder.js +74 -0
- package/dist/test/unit/builder/oneStepEnablement/oneStepEnablementBuilder.js +26 -8
- package/dist/test/unit/builder/transfer/transferBuilder.d.ts +2 -0
- package/dist/test/unit/builder/transfer/transferBuilder.d.ts.map +1 -0
- package/dist/test/unit/builder/transfer/transferBuilder.js +84 -0
- package/dist/test/unit/builder/transferAccept/transferAcceptBuilder.d.ts +2 -0
- package/dist/test/unit/builder/transferAccept/transferAcceptBuilder.d.ts.map +1 -0
- package/dist/test/unit/builder/transferAccept/transferAcceptBuilder.js +120 -0
- package/dist/test/unit/builder/transferAcknowledge/transferAcknowledgeBuilder.d.ts +2 -0
- package/dist/test/unit/builder/transferAcknowledge/transferAcknowledgeBuilder.d.ts.map +1 -0
- package/dist/test/unit/builder/transferAcknowledge/transferAcknowledgeBuilder.js +32 -0
- package/dist/test/unit/builder/transferOfferWithdrawn/transferOfferWithdrawnBuilder.d.ts +2 -0
- package/dist/test/unit/builder/transferOfferWithdrawn/transferOfferWithdrawnBuilder.d.ts.map +1 -0
- package/dist/test/unit/builder/transferOfferWithdrawn/transferOfferWithdrawnBuilder.js +64 -0
- package/dist/test/unit/builder/transferReject/transferRejectBuilder.d.ts +2 -0
- package/dist/test/unit/builder/transferReject/transferRejectBuilder.d.ts.map +1 -0
- package/dist/test/unit/builder/transferReject/transferRejectBuilder.js +96 -0
- package/dist/test/unit/canton.d.ts +2 -0
- package/dist/test/unit/canton.d.ts.map +1 -0
- package/dist/test/unit/canton.js +689 -0
- package/dist/test/unit/index.d.ts +1 -0
- package/dist/test/unit/index.d.ts.map +1 -1
- package/dist/test/unit/index.js +2 -1
- package/dist/test/unit/utils.js +327 -5
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +11 -8
package/dist/src/canton.d.ts
CHANGED
|
@@ -1,9 +1,19 @@
|
|
|
1
|
-
import { AuditDecryptedKeyParams, BaseCoin, BitGoBase, KeyPair, MPCAlgorithm, MultisigType, ParsedTransaction, ParseTransactionOptions, SignedTransaction, SignTransactionOptions, TssVerifyAddressOptions, VerifyTransactionOptions } from '@bitgo-beta/sdk-core';
|
|
1
|
+
import { AuditDecryptedKeyParams, BaseCoin, BitGoBase, CantonCommandParams, KeyPair, MPCAlgorithm, MultisigType, ParsedTransaction, ParseTransactionOptions, PopulatedIntent, PrebuildTransactionWithIntentOptions, SignedTransaction, SignTransactionOptions, TokenEnablementConfig, TransactionExplanation as BaseTransactionExplanation, TransactionParams, TransactionType, TssVerifyAddressOptions, VerifyTransactionOptions } from '@bitgo-beta/sdk-core';
|
|
2
2
|
import { BaseCoin as StaticsBaseCoin } from '@bitgo-beta/statics';
|
|
3
|
+
export interface TransactionExplanation extends BaseTransactionExplanation {
|
|
4
|
+
type: TransactionType;
|
|
5
|
+
}
|
|
6
|
+
export interface ExplainTransactionOptions {
|
|
7
|
+
txHex: string;
|
|
8
|
+
}
|
|
9
|
+
export interface CantonTransactionParams extends TransactionParams {
|
|
10
|
+
cantonCommandParams?: CantonCommandParams;
|
|
11
|
+
}
|
|
3
12
|
export declare class Canton extends BaseCoin {
|
|
4
13
|
protected readonly _staticsCoin: Readonly<StaticsBaseCoin>;
|
|
5
14
|
protected constructor(bitgo: BitGoBase, staticsCoin?: Readonly<StaticsBaseCoin>);
|
|
6
15
|
static createInstance(bitgo: BitGoBase, staticsCoin?: Readonly<StaticsBaseCoin>): BaseCoin;
|
|
16
|
+
private getBuilder;
|
|
7
17
|
/** @inheritDoc */
|
|
8
18
|
getBaseFactor(): number;
|
|
9
19
|
/** @inheritDoc */
|
|
@@ -21,6 +31,8 @@ export declare class Canton extends BaseCoin {
|
|
|
21
31
|
getMPCAlgorithm(): MPCAlgorithm;
|
|
22
32
|
/** @inheritDoc */
|
|
23
33
|
verifyTransaction(params: VerifyTransactionOptions): Promise<boolean>;
|
|
34
|
+
private verifyCantonCommandTransaction;
|
|
35
|
+
private relativeSkipPaths;
|
|
24
36
|
/** @inheritDoc */
|
|
25
37
|
isWalletAddress(params: TssVerifyAddressOptions): Promise<boolean>;
|
|
26
38
|
/** @inheritDoc */
|
|
@@ -28,12 +40,19 @@ export declare class Canton extends BaseCoin {
|
|
|
28
40
|
/** @inheritDoc */
|
|
29
41
|
generateKeyPair(seed?: Buffer): KeyPair;
|
|
30
42
|
/** @inheritDoc */
|
|
43
|
+
explainTransaction(params: ExplainTransactionOptions): Promise<TransactionExplanation>;
|
|
44
|
+
/** @inheritDoc */
|
|
31
45
|
isValidPub(pub: string): boolean;
|
|
32
46
|
/** @inheritDoc */
|
|
33
47
|
isValidAddress(address: string): boolean;
|
|
34
48
|
/** @inheritDoc */
|
|
49
|
+
getTokenEnablementConfig(): TokenEnablementConfig;
|
|
50
|
+
getAddressFromPublicKey(publicKeyHex: string): string;
|
|
51
|
+
/** @inheritDoc */
|
|
35
52
|
signTransaction(params: SignTransactionOptions): Promise<SignedTransaction>;
|
|
36
53
|
/** @inheritDoc */
|
|
37
54
|
auditDecryptedKey({ multiSigType, prv, publicKey }: AuditDecryptedKeyParams): void;
|
|
55
|
+
/** @inheritDoc */
|
|
56
|
+
setCoinSpecificFieldsInIntent(intent: PopulatedIntent, params: PrebuildTransactionWithIntentOptions): void;
|
|
38
57
|
}
|
|
39
58
|
//# sourceMappingURL=canton.d.ts.map
|
package/dist/src/canton.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"canton.d.ts","sourceRoot":"","sources":["../../src/canton.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,uBAAuB,EACvB,QAAQ,
|
|
1
|
+
{"version":3,"file":"canton.d.ts","sourceRoot":"","sources":["../../src/canton.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,uBAAuB,EACvB,QAAQ,EAER,SAAS,EAET,mBAAmB,EAMnB,OAAO,EACP,YAAY,EACZ,YAAY,EAEZ,iBAAiB,EACjB,uBAAuB,EACvB,eAAe,EACf,oCAAoC,EACpC,iBAAiB,EACjB,sBAAsB,EACtB,qBAAqB,EACrB,sBAAsB,IAAI,0BAA0B,EACpD,iBAAiB,EACjB,eAAe,EACf,uBAAuB,EACvB,wBAAwB,EACzB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAE,QAAQ,IAAI,eAAe,EAAS,MAAM,qBAAqB,CAAC;AAOzE,MAAM,WAAW,sBAAuB,SAAQ,0BAA0B;IACxE,IAAI,EAAE,eAAe,CAAC;CACvB;AAED,MAAM,WAAW,yBAAyB;IACxC,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,uBAAwB,SAAQ,iBAAiB;IAChE,mBAAmB,CAAC,EAAE,mBAAmB,CAAC;CAC3C;AAED,qBAAa,MAAO,SAAQ,QAAQ;IAClC,SAAS,CAAC,QAAQ,CAAC,YAAY,EAAE,QAAQ,CAAC,eAAe,CAAC,CAAC;IAE3D,SAAS,aAAa,KAAK,EAAE,SAAS,EAAE,WAAW,CAAC,EAAE,QAAQ,CAAC,eAAe,CAAC;IAU/E,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,SAAS,EAAE,WAAW,CAAC,EAAE,QAAQ,CAAC,eAAe,CAAC,GAAG,QAAQ;IAI1F,OAAO,CAAC,UAAU;IAIlB,kBAAkB;IACX,aAAa,IAAI,MAAM;IAI9B,kBAAkB;IACX,QAAQ,IAAI,MAAM;IAIzB,kBAAkB;IACX,SAAS,IAAI,MAAM;IAI1B,kBAAkB;IACX,WAAW,IAAI,MAAM;IAI5B,kBAAkB;IAClB,WAAW,IAAI,OAAO;IAItB,oBAAoB;IACpB,sBAAsB,IAAI,YAAY;IAItC,oBAAoB;IACpB,uCAAuC,IAAI,OAAO;IAIlD,eAAe,IAAI,YAAY;IAI/B,kBAAkB;IACZ,iBAAiB,CAAC,MAAM,EAAE,wBAAwB,GAAG,OAAO,CAAC,OAAO,CAAC;IA6F3E,OAAO,CAAC,8BAA8B;IAoItC,OAAO,CAAC,iBAAiB;IAWzB,kBAAkB;IACZ,eAAe,CAAC,MAAM,EAAE,uBAAuB,GAAG,OAAO,CAAC,OAAO,CAAC;IAqBxE,kBAAkB;IAClB,gBAAgB,CAAC,MAAM,EAAE,uBAAuB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAI7E,kBAAkB;IAClB,eAAe,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO;IAYvC,kBAAkB;IAClB,kBAAkB,CAAC,MAAM,EAAE,yBAAyB,GAAG,OAAO,CAAC,sBAAsB,CAAC;IAatF,kBAAkB;IAClB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAIhC,kBAAkB;IAClB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAMxC,kBAAkB;IAClB,wBAAwB,IAAI,qBAAqB;IAOjD,uBAAuB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM;IAKrD,kBAAkB;IAClB,eAAe,CAAC,MAAM,EAAE,sBAAsB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAI3E,kBAAkB;IAClB,iBAAiB,CAAC,EAAE,YAAY,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE,uBAAuB,GAAG,IAAI;IAOlF,kBAAkB;IAClB,6BAA6B,CAAC,MAAM,EAAE,eAAe,EAAE,MAAM,EAAE,oCAAoC,GAAG,IAAI;CAc3G"}
|
package/dist/src/canton.js
CHANGED
|
@@ -21,6 +21,9 @@ class Canton extends sdk_core_1.BaseCoin {
|
|
|
21
21
|
static createInstance(bitgo, staticsCoin) {
|
|
22
22
|
return new Canton(bitgo, staticsCoin);
|
|
23
23
|
}
|
|
24
|
+
getBuilder() {
|
|
25
|
+
return new lib_1.TransactionBuilderFactory(statics_1.coins.get(this.getChain()));
|
|
26
|
+
}
|
|
24
27
|
/** @inheritDoc */
|
|
25
28
|
getBaseFactor() {
|
|
26
29
|
return 1e10;
|
|
@@ -55,27 +58,203 @@ class Canton extends sdk_core_1.BaseCoin {
|
|
|
55
58
|
/** @inheritDoc */
|
|
56
59
|
async verifyTransaction(params) {
|
|
57
60
|
const coinConfig = statics_1.coins.get(this.getChain());
|
|
58
|
-
|
|
59
|
-
const { txPrebuild: txPrebuild } = params;
|
|
61
|
+
const { txPrebuild: txPrebuild, txParams } = params;
|
|
60
62
|
const rawTx = txPrebuild.txHex;
|
|
61
63
|
if (!rawTx) {
|
|
62
64
|
throw new Error('missing required tx prebuild property txHex');
|
|
63
65
|
}
|
|
64
66
|
const txBuilder = new lib_1.TransactionBuilderFactory(coinConfig).from(rawTx);
|
|
65
67
|
const transaction = txBuilder.transaction;
|
|
68
|
+
const explainedTx = transaction.explainTransaction();
|
|
66
69
|
switch (transaction.type) {
|
|
67
|
-
case sdk_core_1.TransactionType.WalletInitialization:
|
|
68
|
-
|
|
70
|
+
case sdk_core_1.TransactionType.WalletInitialization:
|
|
71
|
+
case sdk_core_1.TransactionType.TransferAccept:
|
|
72
|
+
case sdk_core_1.TransactionType.TransferReject:
|
|
73
|
+
case sdk_core_1.TransactionType.TransferAcknowledge:
|
|
74
|
+
case sdk_core_1.TransactionType.TransferOfferWithdrawn:
|
|
75
|
+
case sdk_core_1.TransactionType.CosignDelegationAccept:
|
|
76
|
+
case sdk_core_1.TransactionType.CosignDelegationProposal:
|
|
77
|
+
case sdk_core_1.TransactionType.AllocationAllocate:
|
|
78
|
+
case sdk_core_1.TransactionType.AllocationRequest:
|
|
79
|
+
// There is no recipient info to verify for these transaction types, so always return true.
|
|
80
|
+
return true;
|
|
81
|
+
case sdk_core_1.TransactionType.CantonCommand:
|
|
82
|
+
return this.verifyCantonCommandTransaction(transaction, txParams.cantonCommandParams);
|
|
83
|
+
case sdk_core_1.TransactionType.OneStepPreApproval:
|
|
84
|
+
// Canton is always a TSS wallet. The SDK's buildTokenEnablements passes enableTokens
|
|
85
|
+
// through unchanged for TSS wallets (no conversion to recipients), so txParams.enableTokens
|
|
86
|
+
// is the only source of user intent here.
|
|
87
|
+
//
|
|
88
|
+
// Receiver validation: the receiver of a OneStepPreApproval is always the wallet's root address.
|
|
89
|
+
// We use enableToken.address if explicitly provided, otherwise fall back to
|
|
90
|
+
// wallet.coinSpecific().rootAddress (the Canton party ID stored at wallet creation time).
|
|
91
|
+
// Token name validation: checked when the token is resolvable from statics.
|
|
92
|
+
if (txParams.type === 'enabletoken' &&
|
|
93
|
+
txParams.enableTokens !== undefined &&
|
|
94
|
+
txParams.enableTokens.length > 0) {
|
|
95
|
+
const txData = transaction.toJson();
|
|
96
|
+
const enableToken = txParams.enableTokens[0];
|
|
97
|
+
const walletRootAddress = params.wallet?.coinSpecific?.()?.rootAddress;
|
|
98
|
+
const expectedReceiver = enableToken.address ?? walletRootAddress;
|
|
99
|
+
if (expectedReceiver) {
|
|
100
|
+
// Strip ?memoId suffix if present in the stored address
|
|
101
|
+
const [expectedReceiverBase] = expectedReceiver.split('?memoId=');
|
|
102
|
+
if (txData.receiver !== expectedReceiverBase) {
|
|
103
|
+
throw new Error(`OneStepPreApproval receiver mismatch: expected '${expectedReceiverBase}', got '${txData.receiver}'`);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
if (txData.token !== undefined && txData.token !== enableToken.name) {
|
|
107
|
+
throw new Error(`OneStepPreApproval token name mismatch: expected '${enableToken.name}', got '${txData.token}'`);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
return true;
|
|
111
|
+
case sdk_core_1.TransactionType.Send:
|
|
112
|
+
if (txParams.recipients !== undefined) {
|
|
113
|
+
const filteredRecipients = txParams.recipients?.map((recipient) => {
|
|
114
|
+
const { address, amount, tokenName } = recipient;
|
|
115
|
+
const [addressPart, memoId] = address.split('?memoId=');
|
|
116
|
+
return {
|
|
117
|
+
address: addressPart,
|
|
118
|
+
amount,
|
|
119
|
+
...(memoId && { memo: memoId }),
|
|
120
|
+
...(tokenName && { tokenName }),
|
|
121
|
+
};
|
|
122
|
+
});
|
|
123
|
+
const filteredOutputs = explainedTx.outputs?.map((output) => {
|
|
124
|
+
const { address, amount, tokenName, memo } = output;
|
|
125
|
+
return {
|
|
126
|
+
address,
|
|
127
|
+
amount,
|
|
128
|
+
...(memo && { memo }),
|
|
129
|
+
...(tokenName && { tokenName }),
|
|
130
|
+
};
|
|
131
|
+
});
|
|
132
|
+
if (JSON.stringify(filteredRecipients) !== JSON.stringify(filteredOutputs)) {
|
|
133
|
+
throw new Error('Tx outputs do not match with expected txParams recipients');
|
|
134
|
+
}
|
|
135
|
+
}
|
|
69
136
|
return true;
|
|
70
|
-
}
|
|
71
137
|
default: {
|
|
72
138
|
throw new Error(`unknown transaction type, ${transaction.type}`);
|
|
73
139
|
}
|
|
74
140
|
}
|
|
75
141
|
}
|
|
142
|
+
verifyCantonCommandTransaction(transaction, userParams) {
|
|
143
|
+
if (!userParams) {
|
|
144
|
+
return true;
|
|
145
|
+
}
|
|
146
|
+
const cantonTx = transaction;
|
|
147
|
+
const rawPrepared = cantonTx.prepareCommand?.preparedTransaction;
|
|
148
|
+
if (!rawPrepared) {
|
|
149
|
+
throw new Error('CantonCommand verifyTransaction: missing preparedTransaction protobuf on tx prebuild');
|
|
150
|
+
}
|
|
151
|
+
const decodedCommand = utils_1.default.extractCantonCommandInfo(rawPrepared);
|
|
152
|
+
const userCommand = userParams.command;
|
|
153
|
+
// Input shape is enforced by mpcUtils at build time; here we resolve which branch is present.
|
|
154
|
+
const hasCreate = 'CreateCommand' in userCommand && utils_1.default.isPlainObject(userCommand.CreateCommand);
|
|
155
|
+
const hasExercise = 'ExerciseCommand' in userCommand && utils_1.default.isPlainObject(userCommand.ExerciseCommand);
|
|
156
|
+
if (!hasCreate && !hasExercise) {
|
|
157
|
+
throw new Error(`CantonCommand verifyTransaction: command must contain a CreateCommand or ExerciseCommand wrapper`);
|
|
158
|
+
}
|
|
159
|
+
if (hasCreate && hasExercise) {
|
|
160
|
+
throw new Error(`CantonCommand verifyTransaction: command must contain exactly one of CreateCommand or ExerciseCommand, not both`);
|
|
161
|
+
}
|
|
162
|
+
const userKind = hasCreate ? 'CreateCommand' : 'ExerciseCommand';
|
|
163
|
+
if (decodedCommand.kind !== userKind) {
|
|
164
|
+
throw new Error(`CantonCommand verifyTransaction: command kind mismatch — expected ${userKind}, got ${decodedCommand.kind}`);
|
|
165
|
+
}
|
|
166
|
+
const userInner = userKind === 'CreateCommand'
|
|
167
|
+
? userCommand.CreateCommand
|
|
168
|
+
: userCommand.ExerciseCommand;
|
|
169
|
+
if (!userInner?.templateId) {
|
|
170
|
+
throw new Error(`CantonCommand verifyTransaction: ${userKind}.templateId must be a non-empty string`);
|
|
171
|
+
}
|
|
172
|
+
// templateId (moduleName + entityName; package id is mutable, so ignored)
|
|
173
|
+
const parsed = utils_1.default.parseCantonTemplateId(userInner.templateId);
|
|
174
|
+
if (!parsed) {
|
|
175
|
+
throw new Error(`CantonCommand verifyTransaction: invalid user templateId '${userInner.templateId}' — expected format 'Pkg:Module:Entity'`);
|
|
176
|
+
}
|
|
177
|
+
if (decodedCommand.templateId.moduleName !== parsed.moduleName ||
|
|
178
|
+
decodedCommand.templateId.entityName !== parsed.entityName) {
|
|
179
|
+
throw new Error(`CantonCommand verifyTransaction: templateId mismatch — expected '${parsed.moduleName}:${parsed.entityName}', got '${decodedCommand.templateId.moduleName}:${decodedCommand.templateId.entityName}'`);
|
|
180
|
+
}
|
|
181
|
+
// Build the inject-as skip set once for use across the contractId and argument checks
|
|
182
|
+
const skipPaths = utils_1.default.normalizeInjectAs(userParams.resolveContracts);
|
|
183
|
+
// metadata.submitterInfo.actAs must contain exactly the same parties as the user's actAs
|
|
184
|
+
if (!Array.isArray(userParams.actAs) || userParams.actAs.length === 0) {
|
|
185
|
+
throw new Error(`CantonCommand verifyTransaction: actAs must be a non-empty array of party IDs`);
|
|
186
|
+
}
|
|
187
|
+
if (!userParams.actAs.every((p) => typeof p === 'string' && p.trim() !== '')) {
|
|
188
|
+
throw new Error(`CantonCommand verifyTransaction: all actAs entries must be non-empty strings`);
|
|
189
|
+
}
|
|
190
|
+
const submitterActAs = cantonTx.cantonCommandActAsParties ?? [];
|
|
191
|
+
if (!utils_1.default.sameElements(submitterActAs, userParams.actAs)) {
|
|
192
|
+
throw new Error(`CantonCommand verifyTransaction: submitterInfo.actAs [${submitterActAs.join(', ')}] does not match user actAs [${userParams.actAs.join(', ')}]`);
|
|
193
|
+
}
|
|
194
|
+
if (userKind === 'ExerciseCommand') {
|
|
195
|
+
const exerciseInner = userInner;
|
|
196
|
+
// choice id
|
|
197
|
+
if (decodedCommand.choice !== exerciseInner.choice) {
|
|
198
|
+
throw new Error(`CantonCommand verifyTransaction: choice mismatch — expected '${exerciseInner.choice}', got '${decodedCommand.choice ?? ''}'`);
|
|
199
|
+
}
|
|
200
|
+
// every on-chain actingParty must be in the user's actAs (prevents privilege escalation)
|
|
201
|
+
const onChainActors = decodedCommand.actingParties ?? [];
|
|
202
|
+
for (const actor of onChainActors) {
|
|
203
|
+
if (!userParams.actAs.includes(actor)) {
|
|
204
|
+
throw new Error(`CantonCommand verifyTransaction: unauthorized acting party '${actor}' on root exercise (not in user actAs)`);
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
// contractId — skip when absent/empty or when IMS will inject it via resolveContracts
|
|
208
|
+
if (exerciseInner.contractId !== undefined &&
|
|
209
|
+
exerciseInner.contractId !== '' &&
|
|
210
|
+
!skipPaths.has('ExerciseCommand.contractId')) {
|
|
211
|
+
if (decodedCommand.contractId !== exerciseInner.contractId) {
|
|
212
|
+
throw new Error(`CantonCommand verifyTransaction: contractId mismatch — expected '${exerciseInner.contractId}', got '${decodedCommand.contractId ?? ''}'`);
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
// deep argument compare
|
|
216
|
+
const argumentSkipPaths = this.relativeSkipPaths(skipPaths, 'ExerciseCommand.choiceArgument.');
|
|
217
|
+
utils_1.default.assertDeepCantonMatch(exerciseInner.choiceArgument, decodedCommand.argument, argumentSkipPaths);
|
|
218
|
+
}
|
|
219
|
+
else {
|
|
220
|
+
const createInner = userInner;
|
|
221
|
+
// deep argument compare
|
|
222
|
+
const argumentSkipPaths = this.relativeSkipPaths(skipPaths, 'CreateCommand.createArguments.');
|
|
223
|
+
utils_1.default.assertDeepCantonMatch(createInner.createArguments, decodedCommand.argument, argumentSkipPaths);
|
|
224
|
+
}
|
|
225
|
+
return true;
|
|
226
|
+
}
|
|
227
|
+
relativeSkipPaths(skipPaths, prefix) {
|
|
228
|
+
const out = new Set();
|
|
229
|
+
for (const p of skipPaths) {
|
|
230
|
+
if (p.startsWith(prefix)) {
|
|
231
|
+
const stripped = p.slice(prefix.length);
|
|
232
|
+
if (stripped)
|
|
233
|
+
out.add(stripped);
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
return out;
|
|
237
|
+
}
|
|
76
238
|
/** @inheritDoc */
|
|
77
|
-
isWalletAddress(params) {
|
|
78
|
-
|
|
239
|
+
async isWalletAddress(params) {
|
|
240
|
+
// TODO: refactor this and use the `verifyEddsaMemoBasedWalletAddress` once published from sdk-core
|
|
241
|
+
// https://bitgoinc.atlassian.net/browse/COIN-6347
|
|
242
|
+
const { keychains, address: newAddress, index } = params;
|
|
243
|
+
const [addressPart, memoId] = newAddress.split('?memoId=');
|
|
244
|
+
if (!this.isValidAddress(addressPart)) {
|
|
245
|
+
throw new sdk_core_1.InvalidAddressError(`invalid address: ${newAddress}`);
|
|
246
|
+
}
|
|
247
|
+
if (memoId && memoId !== `${index}`) {
|
|
248
|
+
throw new sdk_core_1.InvalidAddressError(`invalid memoId index: ${memoId}`);
|
|
249
|
+
}
|
|
250
|
+
const commonKeychain = (0, sdk_core_1.extractCommonKeychain)(keychains);
|
|
251
|
+
const MPC = await sdk_core_1.EDDSAMethods.getInitializedMpcInstance();
|
|
252
|
+
const derivationPath = 'm/0';
|
|
253
|
+
const derivedPublicKey = MPC.deriveUnhardened(commonKeychain, derivationPath).slice(0, 64);
|
|
254
|
+
const publicKeyBase64 = Buffer.from(derivedPublicKey, 'hex').toString('base64');
|
|
255
|
+
const rootAddressFingerprint = utils_1.default.getAddressFromPublicKey(publicKeyBase64);
|
|
256
|
+
const rootAddress = `${rootAddressFingerprint.slice(0, 5)}::${rootAddressFingerprint}`;
|
|
257
|
+
return addressPart === rootAddress;
|
|
79
258
|
}
|
|
80
259
|
/** @inheritDoc */
|
|
81
260
|
parseTransaction(params) {
|
|
@@ -94,6 +273,20 @@ class Canton extends sdk_core_1.BaseCoin {
|
|
|
94
273
|
};
|
|
95
274
|
}
|
|
96
275
|
/** @inheritDoc */
|
|
276
|
+
explainTransaction(params) {
|
|
277
|
+
const factory = this.getBuilder();
|
|
278
|
+
let rebuiltTransaction;
|
|
279
|
+
const txRaw = params.txHex;
|
|
280
|
+
try {
|
|
281
|
+
const txBuilder = factory.from(txRaw);
|
|
282
|
+
rebuiltTransaction = txBuilder.transaction;
|
|
283
|
+
}
|
|
284
|
+
catch (e) {
|
|
285
|
+
throw new Error('Invalid transaction');
|
|
286
|
+
}
|
|
287
|
+
return rebuiltTransaction.explainTransaction();
|
|
288
|
+
}
|
|
289
|
+
/** @inheritDoc */
|
|
97
290
|
isValidPub(pub) {
|
|
98
291
|
return utils_1.default.isValidPublicKey(pub);
|
|
99
292
|
}
|
|
@@ -104,6 +297,17 @@ class Canton extends sdk_core_1.BaseCoin {
|
|
|
104
297
|
return utils_1.default.isValidAddress(address);
|
|
105
298
|
}
|
|
106
299
|
/** @inheritDoc */
|
|
300
|
+
getTokenEnablementConfig() {
|
|
301
|
+
return {
|
|
302
|
+
requiresTokenEnablement: true,
|
|
303
|
+
supportsMultipleTokenEnablements: false,
|
|
304
|
+
};
|
|
305
|
+
}
|
|
306
|
+
getAddressFromPublicKey(publicKeyHex) {
|
|
307
|
+
const publicKeyBase64 = Buffer.from(publicKeyHex, 'hex').toString('base64');
|
|
308
|
+
return utils_1.default.getAddressFromPublicKey(publicKeyBase64);
|
|
309
|
+
}
|
|
310
|
+
/** @inheritDoc */
|
|
107
311
|
signTransaction(params) {
|
|
108
312
|
throw new Error('Method not implemented.');
|
|
109
313
|
}
|
|
@@ -114,6 +318,21 @@ class Canton extends sdk_core_1.BaseCoin {
|
|
|
114
318
|
}
|
|
115
319
|
(0, sdk_lib_mpc_1.auditEddsaPrivateKey)(prv, publicKey ?? '');
|
|
116
320
|
}
|
|
321
|
+
/** @inheritDoc */
|
|
322
|
+
setCoinSpecificFieldsInIntent(intent, params) {
|
|
323
|
+
if (params.txRequestId) {
|
|
324
|
+
intent.txRequestId = params.txRequestId;
|
|
325
|
+
}
|
|
326
|
+
if (params.transferOfferId) {
|
|
327
|
+
intent.transferOfferId = params.transferOfferId;
|
|
328
|
+
}
|
|
329
|
+
if (params.unspents) {
|
|
330
|
+
intent.unspents = params.unspents;
|
|
331
|
+
}
|
|
332
|
+
if (params.cantonCommandParams) {
|
|
333
|
+
intent.cantonCommandParams = params.cantonCommandParams;
|
|
334
|
+
}
|
|
335
|
+
}
|
|
117
336
|
}
|
|
118
337
|
exports.Canton = Canton;
|
|
119
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FudG9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NhbnRvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxtREFlOEI7QUFDOUIseURBQStEO0FBQy9ELGlEQUF5RTtBQUN6RSwrQkFBa0Q7QUFDbEQsMkNBQXlEO0FBQ3pELHdEQUFnQztBQUVoQyxNQUFhLE1BQU8sU0FBUSxtQkFBUTtJQUdsQyxZQUFzQixLQUFnQixFQUFFLFdBQXVDO1FBQzdFLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUViLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNqQixNQUFNLElBQUksS0FBSyxDQUFDLG9EQUFvRCxDQUFDLENBQUM7UUFDeEUsQ0FBQztRQUVELElBQUksQ0FBQyxZQUFZLEdBQUcsV0FBVyxDQUFDO0lBQ2xDLENBQUM7SUFFRCxNQUFNLENBQUMsY0FBYyxDQUFDLEtBQWdCLEVBQUUsV0FBdUM7UUFDN0UsT0FBTyxJQUFJLE1BQU0sQ0FBQyxLQUFLLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDeEMsQ0FBQztJQUVELGtCQUFrQjtJQUNYLGFBQWE7UUFDbEIsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsa0JBQWtCO0lBQ1gsUUFBUTtRQUNiLE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7SUFFRCxrQkFBa0I7SUFDWCxTQUFTO1FBQ2QsT0FBTyxRQUFRLENBQUM7SUFDbEIsQ0FBQztJQUVELGtCQUFrQjtJQUNYLFdBQVc7UUFDaEIsT0FBTyxRQUFRLENBQUM7SUFDbEIsQ0FBQztJQUVELGtCQUFrQjtJQUNsQixXQUFXO1FBQ1QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsb0JBQW9CO0lBQ3BCLHNCQUFzQjtRQUNwQixPQUFPLHdCQUFhLENBQUMsR0FBRyxDQUFDO0lBQzNCLENBQUM7SUFFRCxvQkFBb0I7SUFDcEIsdUNBQXVDO1FBQ3JDLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJ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QTdIRCx3QkE2SEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBdWRpdERlY3J5cHRlZEtleVBhcmFtcyxcbiAgQmFzZUNvaW4sXG4gIEJpdEdvQmFzZSxcbiAgS2V5UGFpcixcbiAgTVBDQWxnb3JpdGhtLFxuICBNdWx0aXNpZ1R5cGUsXG4gIG11bHRpc2lnVHlwZXMsXG4gIFBhcnNlZFRyYW5zYWN0aW9uLFxuICBQYXJzZVRyYW5zYWN0aW9uT3B0aW9ucyxcbiAgU2lnbmVkVHJhbnNhY3Rpb24sXG4gIFNpZ25UcmFuc2FjdGlvbk9wdGlvbnMsXG4gIFRyYW5zYWN0aW9uVHlwZSxcbiAgVHNzVmVyaWZ5QWRkcmVzc09wdGlvbnMsXG4gIFZlcmlmeVRyYW5zYWN0aW9uT3B0aW9ucyxcbn0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0IHsgYXVkaXRFZGRzYVByaXZhdGVLZXkgfSBmcm9tICdAYml0Z28tYmV0YS9zZGstbGliLW1wYyc7XG5pbXBvcnQgeyBCYXNlQ29pbiBhcyBTdGF0aWNzQmFzZUNvaW4sIGNvaW5zIH0gZnJvbSAnQGJpdGdvLWJldGEvc3RhdGljcyc7XG5pbXBvcnQgeyBUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5IH0gZnJvbSAnLi9saWInO1xuaW1wb3J0IHsgS2V5UGFpciBhcyBDYW50b25LZXlQYWlyIH0gZnJvbSAnLi9saWIva2V5UGFpcic7XG5pbXBvcnQgdXRpbHMgZnJvbSAnLi9saWIvdXRpbHMnO1xuXG5leHBvcnQgY2xhc3MgQ2FudG9uIGV4dGVuZHMgQmFzZUNvaW4ge1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgX3N0YXRpY3NDb2luOiBSZWFkb25seTxTdGF0aWNzQmFzZUNvaW4+O1xuXG4gIHByb3RlY3RlZCBjb25zdHJ1Y3RvcihiaXRnbzogQml0R29CYXNlLCBzdGF0aWNzQ29pbj86IFJlYWRvbmx5PFN0YXRpY3NCYXNlQ29pbj4pIHtcbiAgICBzdXBlcihiaXRnbyk7XG5cbiAgICBpZiAoIXN0YXRpY3NDb2luKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ21pc3NpbmcgcmVxdWlyZWQgY29uc3RydWN0b3IgcGFyYW1ldGVyIHN0YXRpY3NDb2luJyk7XG4gICAgfVxuXG4gICAgdGhpcy5fc3RhdGljc0NvaW4gPSBzdGF0aWNzQ29pbjtcbiAgfVxuXG4gIHN0YXRpYyBjcmVhdGVJbnN0YW5jZShiaXRnbzogQml0R29CYXNlLCBzdGF0aWNzQ29pbj86IFJlYWRvbmx5PFN0YXRpY3NCYXNlQ29pbj4pOiBCYXNlQ29pbiB7XG4gICAgcmV0dXJuIG5ldyBDYW50b24oYml0Z28sIHN0YXRpY3NDb2luKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgZ2V0QmFzZUZhY3RvcigpOiBudW1iZXIge1xuICAgIHJldHVybiAxZTEwO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBnZXRDaGFpbigpOiBzdHJpbmcge1xuICAgIHJldHVybiAnY2FudG9uJztcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgZ2V0RmFtaWx5KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuICdjYW50b24nO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBnZXRGdWxsTmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiAnQ2FudG9uJztcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBzdXBwb3J0c1RzcygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKiBpbmhlcml0ZWQgZG9jICovXG4gIGdldERlZmF1bHRNdWx0aXNpZ1R5cGUoKTogTXVsdGlzaWdUeXBlIHtcbiAgICByZXR1cm4gbXVsdGlzaWdUeXBlcy50c3M7XG4gIH1cblxuICAvKiogaW5oZXJpdGVkIGRvYyAqL1xuICByZXF1aXJlc1dhbGxldEluaXRpYWxpemF0aW9uVHJhbnNhY3Rpb24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBnZXRNUENBbGdvcml0aG0oKTogTVBDQWxnb3JpdGhtIHtcbiAgICByZXR1cm4gJ2VkZHNhJztcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBhc3luYyB2ZXJpZnlUcmFuc2FjdGlvbihwYXJhbXM6IFZlcmlmeVRyYW5zYWN0aW9uT3B0aW9ucyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IGNvaW5Db25maWcgPSBjb2lucy5nZXQodGhpcy5nZXRDaGFpbigpKTtcbiAgICAvLyBleHRyYWN0IGB0eFBhcmFtc2Agd2hlbiB2ZXJpZnlpbmcgb3RoZXIgdHJhbnNhY3Rpb24gdHlwZXNcbiAgICBjb25zdCB7IHR4UHJlYnVpbGQ6IHR4UHJlYnVpbGQgfSA9IHBhcmFtcztcbiAgICBjb25zdCByYXdUeCA9IHR4UHJlYnVpbGQudHhIZXg7XG4gICAgaWYgKCFyYXdUeCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdtaXNzaW5nIHJlcXVpcmVkIHR4IHByZWJ1aWxkIHByb3BlcnR5IHR4SGV4Jyk7XG4gICAgfVxuICAgIGNvbnN0IHR4QnVpbGRlciA9IG5ldyBUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5KGNvaW5Db25maWcpLmZyb20ocmF3VHgpO1xuICAgIGNvbnN0IHRyYW5zYWN0aW9uID0gdHhCdWlsZGVyLnRyYW5zYWN0aW9uO1xuICAgIHN3aXRjaCAodHJhbnNhY3Rpb24udHlwZSkge1xuICAgICAgY2FzZSBUcmFuc2FjdGlvblR5cGUuV2FsbGV0SW5pdGlhbGl6YXRpb246IHtcbiAgICAgICAgLy8gdGhlcmUgaXMgbm8gaW5wdXQgZm9yIHRoaXMgdHlwZSBvZiB0cmFuc2FjdGlvbiwgc28gYWx3YXlzIHJldHVybiB0cnVlXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgZGVmYXVsdDoge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHVua25vd24gdHJhbnNhY3Rpb24gdHlwZSwgJHt0cmFuc2FjdGlvbi50eXBlfWApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBpc1dhbGxldEFkZHJlc3MocGFyYW1zOiBUc3NWZXJpZnlBZGRyZXNzT3B0aW9ucyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHRocm93IG5ldyBFcnJvcignTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC4nKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwYXJzZVRyYW5zYWN0aW9uKHBhcmFtczogUGFyc2VUcmFuc2FjdGlvbk9wdGlvbnMpOiBQcm9taXNlPFBhcnNlZFRyYW5zYWN0aW9uPiB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdNZXRob2Qgbm90IGltcGxlbWVudGVkLicpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIGdlbmVyYXRlS2V5UGFpcihzZWVkPzogQnVmZmVyKTogS2V5UGFpciB7XG4gICAgY29uc3Qga2V5UGFpciA9IHNlZWQgPyBuZXcgQ2FudG9uS2V5UGFpcih7IHNlZWQgfSkgOiBuZXcgQ2FudG9uS2V5UGFpcigpO1xuICAgIGNvbnN0IGtleXMgPSBrZXlQYWlyLmdldEtleXMoKTtcbiAgICBpZiAoIWtleXMucHJ2KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ01pc3NpbmcgcHJ2IGluIGtleSBnZW5lcmF0aW9uLicpO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgcHViOiBrZXlzLnB1YixcbiAgICAgIHBydjoga2V5cy5wcnYsXG4gICAgfTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBpc1ZhbGlkUHViKHB1Yjogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHV0aWxzLmlzVmFsaWRQdWJsaWNLZXkocHViKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBpc1ZhbGlkQWRkcmVzcyhhZGRyZXNzOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAvLyBjYW50b24gYWRkcmVzc2VzIGFyZSBvZiB0aGUgZm9ybSwgcGFydHlIaW50OjpmaW5nZXJwcmludFxuICAgIC8vIHdoZXJlIHBhcnR5SGludCBpcyBvZiBsZW5ndGggNSBhbmQgZmluZ2VycHJpbnQgaXMgNjggY2hhcmFjdGVycyBsb25nXG4gICAgcmV0dXJuIHV0aWxzLmlzVmFsaWRBZGRyZXNzKGFkZHJlc3MpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHNpZ25UcmFuc2FjdGlvbihwYXJhbXM6IFNpZ25UcmFuc2FjdGlvbk9wdGlvbnMpOiBQcm9taXNlPFNpZ25lZFRyYW5zYWN0aW9uPiB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdNZXRob2Qgbm90IGltcGxlbWVudGVkLicpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIGF1ZGl0RGVjcnlwdGVkS2V5KHsgbXVsdGlTaWdUeXBlLCBwcnYsIHB1YmxpY0tleSB9OiBBdWRpdERlY3J5cHRlZEtleVBhcmFtcyk6IHZvaWQge1xuICAgIGlmIChtdWx0aVNpZ1R5cGUgIT09IG11bHRpc2lnVHlwZXMudHNzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vuc3VwcG9ydGVkIG11bHRpU2lnVHlwZScpO1xuICAgIH1cbiAgICBhdWRpdEVkZHNhUHJpdmF0ZUtleShwcnYsIHB1YmxpY0tleSA/PyAnJyk7XG4gIH1cbn1cbiJdfQ==
|
|
338
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FudG9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NhbnRvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxtREE0QjhCO0FBQzlCLHlEQUErRDtBQUMvRCxpREFBeUU7QUFDekUsK0JBQWtEO0FBQ2xELDJDQUF5RDtBQUd6RCx3REFBZ0M7QUFjaEMsTUFBYSxNQUFPLFNBQVEsbUJBQVE7SUFHbEMsWUFBc0IsS0FBZ0IsRUFBRSxXQUF1QztRQUM3RSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFYixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDakIsTUFBTSxJQUFJLEtBQUssQ0FBQyxvREFBb0QsQ0FBQyxDQUFDO1FBQ3hFLENBQUM7UUFFRCxJQUFJLENBQUMsWUFBWSxHQUFHLFdBQVcsQ0FBQztJQUNsQyxDQUFDO0lBRUQsTUFBTSxDQUFDLGNBQWMsQ0FBQyxLQUFnQixFQUFFLFdBQXVDO1FBQzdFLE9BQU8sSUFBSSxNQUFNLENBQUMsS0FBSyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBQ3hDLENBQUM7SUFFTyxVQUFVO1FBQ2hCLE9BQU8sSUFBSSwrQkFBeUIsQ0FBQyxlQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDbkUsQ0FBQztJQUVELGtCQUFrQjtJQUNYLGFBQWE7UUFDbEIsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsa0JBQWtCO0lBQ1gsUUFBUTtRQUNiLE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7SUFFRCxrQkFBa0I7SUFDWCxTQUFTO1FBQ2QsT0FBTyxRQUFRLENBQUM7SUFDbEIsQ0FBQztJQUVELGtCQUFrQjtJQUNYLFdBQVc7UUFDaEIsT0FBTyxRQUFRLENBQUM7SUFDbEIsQ0FBQztJQUVELGtCQUFrQjtJQUNsQixXQUFXO1FBQ1QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsb0JBQW9CO0lBQ3BCLHNCQUFzQjtRQUNwQixPQUFPLHdCQUFhLENBQUMsR0FBRyxDQUFDO0lBQzNCLENBQUM7SUFFRCxvQkFBb0I7SUFDcEIsdUNBQXVDO1FBQ3JDLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELGVBQWU7UUFDYixPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO0lBRUQsa0JBQWtCO0lBQ2xCLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxNQUFnQztRQUN0RCxNQUFNLFVBQVUsR0FBRyxlQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQzlDLE1BQU0sRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxHQUFHLE1BQU0sQ0FBQztRQUNwRCxNQUFNLEtBQUssR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDO1FBQy9CLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNYLE1BQU0sSUFBSSxLQUFLLENBQUMsNkNBQTZDLENBQUMsQ0FBQztRQUNqRSxDQUFDO1FBQ0QsTUFBTSxTQUFTLEdBQUcsSUFBSSwrQkFBeUIsQ0FBQyxVQUFVLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDeEUsTUFBTSxXQUFXLEdBQUcsU0FBUyxDQUFDLFdBQVcsQ0FBQztRQUMxQyxNQUFNLFdBQVcsR0FBRyxXQUFXLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUNyRCxRQUFRLFdBQVcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUN6QixLQUFLLDBCQUFlLENBQUMsb0JBQW9CLENBQUM7WUFDMUMsS0FBSywwQkFBZSxDQUFDLGNBQWMsQ0FBQztZQUNwQyxLQUFLLDBCQUFlLENBQUMsY0FBYyxDQUFDO1lBQ3BDLEtBQUssMEJBQWUsQ0FBQyxtQkFBbUIsQ0FBQztZQUN6QyxLQUFLLDBCQUFlLENBQUMsc0JBQXNCLENBQUM7WUFDNUMsS0FBSywwQkFBZSxDQUFDLHNCQUFzQixDQUFDO1lBQzVDLEtBQUssMEJBQWUsQ0FBQyx3QkFBd0IsQ0FBQztZQUM5QyxLQUFLLDBCQUFlLENBQUMsa0JBQWtCLENBQUM7WUFDeEMsS0FBSywwQkFBZSxDQUFDLGlCQUFpQjtnQkFDcEMsMkZBQTJGO2dCQUMzRixPQUFPLElBQUksQ0FBQztZQUNkLEtBQUssMEJBQWUsQ0FBQyxhQUFhO2dCQUNoQyxPQUFPLElBQUksQ0FBQyw4QkFBOEIsQ0FDeEMsV0FBVyxFQUNWLFFBQW9DLENBQUMsbUJBQW1CLENBQzFELENBQUM7WUFDSixLQUFLLDBCQUFlLENBQUMsa0JBQWtCO2dCQUNyQyxxRkFBcUY7Z0JBQ3JGLDRGQUE0RjtnQkFDNUYsMENBQTBDO2dCQUMxQyxFQUFFO2dCQUNGLGlHQUFpRztnQkFDakcsNEVBQTRFO2dCQUM1RSwwRkFBMEY7Z0JBQzFGLDRFQUE0RTtnQkFDNUUsSUFDRSxRQUFRLENBQUMsSUFBSSxLQUFLLGFBQWE7b0JBQy9CLFFBQVEsQ0FBQyxZQUFZLEtBQUssU0FBUztvQkFDbkMsUUFBUSxDQUFDLFlBQVksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUNoQyxDQUFDO29CQUNELE1BQU0sTUFBTSxHQUFHLFdBQVcsQ0FBQyxNQUFNLEVBQVksQ0FBQztvQkFDOUMsTUFBTSxXQUFXLEdBQUcsUUFBUSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDN0MsTUFBTSxpQkFBaUIsR0FBRyxNQUFNLENBQUMsTUFBTSxFQUFFLFlBQVksRUFBRSxFQUFFLEVBQUUsV0FBVyxDQUFDO29CQUN2RSxNQUFNLGdCQUFnQixHQUFHLFdBQVcsQ0FBQyxPQUFPLElBQUksaUJBQWlCLENBQUM7b0JBQ2xFLElBQUksZ0JBQWdCLEVBQUUsQ0FBQzt3QkFDckIsd0RBQXdEO3dCQUN4RCxNQUFNLENBQUMsb0JBQW9CLENBQUMsR0FBRyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7d0JBQ2xFLElBQUksTUFBTSxDQUFDLFFBQVEsS0FBSyxvQkFBb0IsRUFBRSxDQUFDOzRCQUM3QyxNQUFNLElBQUksS0FBSyxDQUNiLG1EQUFtRCxvQkFBb0IsV0FBVyxNQUFNLENBQUMsUUFBUSxHQUFHLENBQ3JHLENBQUM7d0JBQ0osQ0FBQztvQkFDSCxDQUFDO29CQUNELElBQUksTUFBTSxDQUFDLEtBQUssS0FBSyxTQUFTLElBQUksTUFBTSxDQUFDLEtBQUssS0FBSyxXQUFXLENBQUMsSUFBSSxFQUFFLENBQUM7d0JBQ3BFLE1BQU0sSUFBSSxLQUFLLENBQ2IscURBQXFELFdBQVcsQ0FBQyxJQUFJLFdBQVcsTUFBTSxDQUFDLEtBQUssR0FBRyxDQUNoRyxDQUFDO29CQUNKLENBQUM7Z0JBQ0gsQ0FBQztnQkFDRCxPQUFPLElBQUksQ0FBQztZQUNkLEtBQUssMEJBQWUsQ0FBQyxJQUFJO2dCQUN2QixJQUFJLFFBQVEsQ0FBQyxVQUFVLEtBQUssU0FBUyxFQUFFLENBQUM7b0JBQ3RDLE1BQU0sa0JBQWtCLEdBQUcsUUFBUSxDQUFDLFVBQVUsRUFBRSxHQUFHLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBRTt3QkFDaEUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLEdBQUcsU0FBUyxDQUFDO3dCQUNqRCxNQUFNLENBQUMsV0FBVyxFQUFFLE1BQU0sQ0FBQyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7d0JBQ3hELE9BQU87NEJBQ0wsT0FBTyxFQUFFLFdBQVc7NEJBQ3BCLE1BQU07NEJBQ04sR0FBRyxDQUFDLE1BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsQ0FBQzs0QkFDL0IsR0FBRyxDQUFDLFNBQVMsSUFBSSxFQUFFLFNBQVMsRUFBRSxDQUFDO3lCQUNoQyxDQUFDO29CQUNKLENBQUMsQ0FBQyxDQUFDO29CQUNILE1BQU0sZUFBZSxHQUFHLFdBQVcsQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7d0JBQzFELE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsR0FBRyxNQUFNLENBQUM7d0JBQ3BELE9BQU87NEJBQ0wsT0FBTzs0QkFDUCxNQUFNOzRCQUNOLEdBQUcsQ0FBQyxJQUFJLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQzs0QkFDckIsR0FBRyxDQUFDLFNBQVMsSUFBSSxFQUFFLFNBQVMsRUFBRSxDQUFDO3lCQUNoQyxDQUFDO29CQUNKLENBQUMsQ0FBQyxDQUFDO29CQUNILElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLElBQUksQ0FBQyxTQUFTLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBQzt3QkFDM0UsTUFBTSxJQUFJLEtBQUssQ0FBQywyREFBMkQsQ0FBQyxDQUFDO29CQUMvRSxDQUFDO2dCQUNILENBQUM7Z0JBQ0QsT0FBTyxJQUFJLENBQUM7WUFDZCxPQUFPLENBQUMsQ0FBQyxDQUFDO2dCQUNSLE1BQU0sSUFBSSxLQUFLLENBQUMsNkJBQTZCLFdBQVcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBQ25FLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVPLDhCQUE4QixDQUNwQyxXQUE0QixFQUM1QixVQUEyQztRQUUzQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDaEIsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBRUQsTUFBTSxRQUFRLEdBQUcsV0FBMEIsQ0FBQztRQUM1QyxNQUFNLFdBQVcsR0FBRyxRQUFRLENBQUMsY0FBYyxFQUFFLG1CQUFtQixDQUFDO1FBQ2pFLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNqQixNQUFNLElBQUksS0FBSyxDQUFDLHNGQUFzRixDQUFDLENBQUM7UUFDMUcsQ0FBQztRQUVELE1BQU0sY0FBYyxHQUFHLGVBQUssQ0FBQyx3QkFBd0IsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNuRSxNQUFNLFdBQVcsR0FBRyxVQUFVLENBQUMsT0FBaUMsQ0FBQztRQUVqRSw4RkFBOEY7UUFDOUYsTUFBTSxTQUFTLEdBQUcsZUFBZSxJQUFJLFdBQVcsSUFBSSxlQUFLLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUNuRyxNQUFNLFdBQVcsR0FBRyxpQkFBaUIsSUFBSSxXQUFXLElBQUksZUFBSyxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDekcsSUFBSSxDQUFDLFNBQVMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQy9CLE1BQU0sSUFBSSxLQUFLLENBQ2Isa0dBQWtHLENBQ25HLENBQUM7UUFDSixDQUFDO1FBQ0QsSUFBSSxTQUFTLElBQUksV0FBVyxFQUFFLENBQUM7WUFDN0IsTUFBTSxJQUFJLEtBQUssQ0FDYixpSEFBaUgsQ0FDbEgsQ0FBQztRQUNKLENBQUM7UUFDRCxNQUFNLFFBQVEsR0FBc0IsU0FBUyxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixDQUFDO1FBQ3BGLElBQUksY0FBYyxDQUFDLElBQUksS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUNyQyxNQUFNLElBQUksS0FBSyxDQUNiLHFFQUFxRSxRQUFRLFNBQVMsY0FBYyxDQUFDLElBQUksRUFBRSxDQUM1RyxDQUFDO1FBQ0osQ0FBQztRQUVELE1BQU0sU0FBUyxHQUNiLFFBQVEsS0FBSyxlQUFlO1lBQzFCLENBQUMsQ0FBRSxXQUFtQyxDQUFDLGFBQWE7WUFDcEQsQ0FBQyxDQUFFLFdBQXFDLENBQUMsZUFBZSxDQUFDO1FBRTdELElBQUksQ0FBQyxTQUFTLEVBQUUsVUFBVSxFQUFFLENBQUM7WUFDM0IsTUFBTSxJQUFJLEtBQUssQ0FBQyxvQ0FBb0MsUUFBUSx3Q0FBd0MsQ0FBQyxDQUFDO1FBQ3hHLENBQUM7UUFFRCwwRUFBMEU7UUFDMUUsTUFBTSxNQUFNLEdBQUcsZUFBSyxDQUFDLHFCQUFxQixDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNqRSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDWixNQUFNLElBQUksS0FBSyxDQUNiLDZEQUE2RCxTQUFTLENBQUMsVUFBVSx5Q0FBeUMsQ0FDM0gsQ0FBQztRQUNKLENBQUM7UUFDRCxJQUNFLGNBQWMsQ0FBQyxVQUFVLENBQUMsVUFBVSxLQUFLLE1BQU0sQ0FBQyxVQUFVO1lBQzFELGNBQWMsQ0FBQyxVQUFVLENBQUMsVUFBVSxLQUFLLE1BQU0sQ0FBQyxVQUFVLEVBQzFELENBQUM7WUFDRCxNQUFNLElBQUksS0FBSyxDQUNiLG9FQUFvRSxNQUFNLENBQUMsVUFBVSxJQUFJLE1BQU0sQ0FBQyxVQUFVLFdBQVcsY0FBYyxDQUFDLFVBQVUsQ0FBQyxVQUFVLElBQUksY0FBYyxDQUFDLFVBQVUsQ0FBQyxVQUFVLEdBQUcsQ0FDck0sQ0FBQztRQUNKLENBQUM7UUFFRCxzRkFBc0Y7UUFDdEYsTUFBTSxTQUFTLEdBQUcsZUFBSyxDQUFDLGlCQUFpQixDQUFDLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBRXZFLHlGQUF5RjtRQUN6RixJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLElBQUksVUFBVSxDQUFDLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDdEUsTUFBTSxJQUFJLEtBQUssQ0FBQywrRUFBK0UsQ0FBQyxDQUFDO1FBQ25HLENBQUM7UUFDRCxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLFFBQVEsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztZQUM3RSxNQUFNLElBQUksS0FBSyxDQUFDLDhFQUE4RSxDQUFDLENBQUM7UUFDbEcsQ0FBQztRQUNELE1BQU0sY0FBYyxHQUFHLFFBQVEsQ0FBQyx5QkFBeUIsSUFBSSxFQUFFLENBQUM7UUFDaEUsSUFBSSxDQUFDLGVBQUssQ0FBQyxZQUFZLENBQUMsY0FBYyxFQUFFLFVBQVUsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQzFELE1BQU0sSUFBSSxLQUFLLENBQ2IseURBQXlELGNBQWMsQ0FBQyxJQUFJLENBQzFFLElBQUksQ0FDTCxnQ0FBZ0MsVUFBVSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FDaEUsQ0FBQztRQUNKLENBQUM7UUFFRCxJQUFJLFFBQVEsS0FBSyxpQkFBaUIsRUFBRSxDQUFDO1lBQ25DLE1BQU0sYUFBYSxHQUFHLFNBQXFELENBQUM7WUFFNUUsWUFBWTtZQUNaLElBQUksY0FBYyxDQUFDLE1BQU0sS0FBSyxhQUFhLENBQUMsTUFBTSxFQUFFLENBQUM7Z0JBQ25ELE1BQU0sSUFBSSxLQUFLLENBQ2IsZ0VBQWdFLGFBQWEsQ0FBQyxNQUFNLFdBQ2xGLGNBQWMsQ0FBQyxNQUFNLElBQUksRUFDM0IsR0FBRyxDQUNKLENBQUM7WUFDSixDQUFDO1lBRUQseUZBQXlGO1lBQ3pGLE1BQU0sYUFBYSxHQUFHLGNBQWMsQ0FBQyxhQUFhLElBQUksRUFBRSxDQUFDO1lBQ3pELEtBQUssTUFBTSxLQUFLLElBQUksYUFBYSxFQUFFLENBQUM7Z0JBQ2xDLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO29CQUN0QyxNQUFNLElBQUksS0FBSyxDQUNiLCtEQUErRCxLQUFLLHdDQUF3QyxDQUM3RyxDQUFDO2dCQUNKLENBQUM7WUFDSCxDQUFDO1lBRUQsc0ZBQXNGO1lBQ3RGLElBQ0UsYUFBYSxDQUFDLFVBQVUsS0FBSyxTQUFTO2dCQUN0QyxhQUFhLENBQUMsVUFBVSxLQUFLLEVBQUU7Z0JBQy9CLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyw0QkFBNEIsQ0FBQyxFQUM1QyxDQUFDO2dCQUNELElBQUksY0FBYyxDQUFDLFVBQVUsS0FBSyxhQUFhLENBQUMsVUFBVSxFQUFFLENBQUM7b0JBQzNELE1BQU0sSUFBSSxLQUFLLENBQ2Isb0VBQW9FLGFBQWEsQ0FBQyxVQUFVLFdBQzFGLGNBQWMsQ0FBQyxVQUFVLElBQUksRUFDL0IsR0FBRyxDQUNKLENBQUM7Z0JBQ0osQ0FBQztZQUNILENBQUM7WUFFRCx3QkFBd0I7WUFDeEIsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsU0FBUyxFQUFFLGlDQUFpQyxDQUFDLENBQUM7WUFDL0YsZUFBSyxDQUFDLHFCQUFxQixDQUFDLGFBQWEsQ0FBQyxjQUFjLEVBQUUsY0FBYyxDQUFDLFFBQVEsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO1FBQ3hHLENBQUM7YUFBTSxDQUFDO1lBQ04sTUFBTSxXQUFXLEdBQUcsU0FBaUQsQ0FBQztZQUV0RSx3QkFBd0I7WUFDeEIsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsU0FBUyxFQUFFLGdDQUFnQyxDQUFDLENBQUM7WUFDOUYsZUFBSyxDQUFDLHFCQUFxQixDQUFDLFdBQVcsQ0FBQyxlQUFlLEVBQUUsY0FBYyxDQUFDLFFBQVEsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO1FBQ3ZHLENBQUM7UUFFRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFTyxpQkFBaUIsQ0FBQyxTQUFzQixFQUFFLE1BQWM7UUFDOUQsTUFBTSxHQUFHLEdBQUcsSUFBSSxHQUFHLEVBQVUsQ0FBQztRQUM5QixLQUFLLE1BQU0sQ0FBQyxJQUFJLFNBQVMsRUFBRSxDQUFDO1lBQzFCLElBQUksQ0FBQyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO2dCQUN6QixNQUFNLFFBQVEsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDeEMsSUFBSSxRQUFRO29CQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDbEMsQ0FBQztRQUNILENBQUM7UUFDRCxPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7SUFFRCxrQkFBa0I7SUFDbEIsS0FBSyxDQUFDLGVBQWUsQ0FBQyxNQUErQjtRQUNuRCxtR0FBbUc7UUFDbkcsa0RBQWtEO1FBQ2xELE1BQU0sRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsR0FBRyxNQUFNLENBQUM7UUFDekQsTUFBTSxDQUFDLFdBQVcsRUFBRSxNQUFNLENBQUMsR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQzNELElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUM7WUFDdEMsTUFBTSxJQUFJLDhCQUFtQixDQUFDLG9CQUFvQixVQUFVLEVBQUUsQ0FBQyxDQUFDO1FBQ2xFLENBQUM7UUFDRCxJQUFJLE1BQU0sSUFBSSxNQUFNLEtBQUssR0FBRyxLQUFLLEVBQUUsRUFBRSxDQUFDO1lBQ3BDLE1BQU0sSUFBSSw4QkFBbUIsQ0FBQyx5QkFBeUIsTUFBTSxFQUFFLENBQUMsQ0FBQztRQUNuRSxDQUFDO1FBQ0QsTUFBTSxjQUFjLEdBQUcsSUFBQSxnQ0FBcUIsRUFBQyxTQUFTLENBQUMsQ0FBQztRQUN4RCxNQUFNLEdBQUcsR0FBRyxNQUFNLHVCQUFZLENBQUMseUJBQXlCLEVBQUUsQ0FBQztRQUMzRCxNQUFNLGNBQWMsR0FBRyxLQUFLLENBQUM7UUFDN0IsTUFBTSxnQkFBZ0IsR0FBRyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsY0FBYyxFQUFFLGNBQWMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDM0YsTUFBTSxlQUFlLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxLQUFLLENBQUMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDaEYsTUFBTSxzQkFBc0IsR0FBRyxlQUFLLENBQUMsdUJBQXVCLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDOUUsTUFBTSxXQUFXLEdBQUcsR0FBRyxzQkFBc0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLHNCQUFzQixFQUFFLENBQUM7UUFDdkYsT0FBTyxXQUFXLEtBQUssV0FBVyxDQUFDO0lBQ3JDLENBQUM7SUFFRCxrQkFBa0I7SUFDbEIsZ0JBQWdCLENBQUMsTUFBK0I7UUFDOUMsTUFBTSxJQUFJLEtBQUssQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFFRCxrQkFBa0I7SUFDbEIsZUFBZSxDQUFDLElBQWE7UUFDM0IsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLGlCQUFhLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLGlCQUFhLEVBQUUsQ0FBQztRQUN6RSxNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDL0IsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUNkLE1BQU0sSUFBSSxLQUFLLENBQUMsZ0NBQWdDLENBQUMsQ0FBQztRQUNwRCxDQUFDO1FBQ0QsT0FBTztZQUNMLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRztZQUNiLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRztTQUNkLENBQUM7SUFDSixDQUFDO0lBRUQsa0JBQWtCO0lBQ2xCLGtCQUFrQixDQUFDLE1BQWlDO1FBQ2xELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUNsQyxJQUFJLGtCQUFtQyxDQUFDO1FBQ3hDLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUM7UUFDM0IsSUFBSSxDQUFDO1lBQ0gsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN0QyxrQkFBa0IsR0FBRyxTQUFTLENBQUMsV0FBVyxDQUFDO1FBQzdDLENBQUM7UUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ1gsTUFBTSxJQUFJLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1FBQ3pDLENBQUM7UUFDRCxPQUFPLGtCQUFrQixDQUFDLGtCQUFrQixFQUFFLENBQUM7SUFDakQsQ0FBQztJQUVELGtCQUFrQjtJQUNsQixVQUFVLENBQUMsR0FBVztRQUNwQixPQUFPLGVBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBRUQsa0JBQWtCO0lBQ2xCLGNBQWMsQ0FBQyxPQUFlO1FBQzVCLDJEQUEyRDtRQUMzRCx1RUFBdUU7UUFDdkUsT0FBTyxlQUFLLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFFRCxrQkFBa0I7SUFDbEIsd0JBQXdCO1FBQ3RCLE9BQU87WUFDTCx1QkFBdUIsRUFBRSxJQUFJO1lBQzdCLGdDQUFnQyxFQUFFLEtBQUs7U0FDeEMsQ0FBQztJQUNKLENBQUM7SUFFRCx1QkFBdUIsQ0FBQyxZQUFvQjtRQUMxQyxNQUFNLGVBQWUsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxLQUFLLENBQUMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDNUUsT0FBTyxlQUFLLENBQUMsdUJBQXVCLENBQUMsZUFBZSxDQUFDLENBQUM7SUFDeEQsQ0FBQztJQUVELGtCQUFrQjtJQUNsQixlQUFlLENBQUMsTUFBOEI7UUFDNUMsTUFBTSxJQUFJLEtBQUssQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFFRCxrQkFBa0I7SUFDbEIsaUJBQWlCLENBQUMsRUFBRSxZQUFZLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBMkI7UUFDekUsSUFBSSxZQUFZLEtBQUssd0JBQWEsQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUN2QyxNQUFNLElBQUksS0FBSyxDQUFDLDBCQUEwQixDQUFDLENBQUM7UUFDOUMsQ0FBQztRQUNELElBQUEsa0NBQW9CLEVBQUMsR0FBRyxFQUFFLFNBQVMsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBRUQsa0JBQWtCO0lBQ2xCLDZCQUE2QixDQUFDLE1BQXVCLEVBQUUsTUFBNEM7UUFDakcsSUFBSSxNQUFNLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDdkIsTUFBTSxDQUFDLFdBQVcsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDO1FBQzFDLENBQUM7UUFDRCxJQUFJLE1BQU0sQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUMzQixNQUFNLENBQUMsZUFBZSxHQUFHLE1BQU0sQ0FBQyxlQUFlLENBQUM7UUFDbEQsQ0FBQztRQUNELElBQUksTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ3BCLE1BQU0sQ0FBQyxRQUFRLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQztRQUNwQyxDQUFDO1FBQ0QsSUFBSSxNQUFNLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztZQUMvQixNQUFNLENBQUMsbUJBQW1CLEdBQUcsTUFBTSxDQUFDLG1CQUFtQixDQUFDO1FBQzFELENBQUM7SUFDSCxDQUFDO0NBQ0Y7QUFwWkQsd0JBb1pDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQXVkaXREZWNyeXB0ZWRLZXlQYXJhbXMsXG4gIEJhc2VDb2luLFxuICBCYXNlVHJhbnNhY3Rpb24sXG4gIEJpdEdvQmFzZSxcbiAgQ2FudG9uQ29tbWFuZCxcbiAgQ2FudG9uQ29tbWFuZFBhcmFtcyxcbiAgQ2FudG9uQ3JlYXRlQ29tbWFuZCxcbiAgQ2FudG9uRXhlcmNpc2VDb21tYW5kLFxuICBFRERTQU1ldGhvZHMsXG4gIGV4dHJhY3RDb21tb25LZXljaGFpbixcbiAgSW52YWxpZEFkZHJlc3NFcnJvcixcbiAgS2V5UGFpcixcbiAgTVBDQWxnb3JpdGhtLFxuICBNdWx0aXNpZ1R5cGUsXG4gIG11bHRpc2lnVHlwZXMsXG4gIFBhcnNlZFRyYW5zYWN0aW9uLFxuICBQYXJzZVRyYW5zYWN0aW9uT3B0aW9ucyxcbiAgUG9wdWxhdGVkSW50ZW50LFxuICBQcmVidWlsZFRyYW5zYWN0aW9uV2l0aEludGVudE9wdGlvbnMsXG4gIFNpZ25lZFRyYW5zYWN0aW9uLFxuICBTaWduVHJhbnNhY3Rpb25PcHRpb25zLFxuICBUb2tlbkVuYWJsZW1lbnRDb25maWcsXG4gIFRyYW5zYWN0aW9uRXhwbGFuYXRpb24gYXMgQmFzZVRyYW5zYWN0aW9uRXhwbGFuYXRpb24sXG4gIFRyYW5zYWN0aW9uUGFyYW1zLFxuICBUcmFuc2FjdGlvblR5cGUsXG4gIFRzc1ZlcmlmeUFkZHJlc3NPcHRpb25zLFxuICBWZXJpZnlUcmFuc2FjdGlvbk9wdGlvbnMsXG59IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcbmltcG9ydCB7IGF1ZGl0RWRkc2FQcml2YXRlS2V5IH0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWxpYi1tcGMnO1xuaW1wb3J0IHsgQmFzZUNvaW4gYXMgU3RhdGljc0Jhc2VDb2luLCBjb2lucyB9IGZyb20gJ0BiaXRnby1iZXRhL3N0YXRpY3MnO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeSB9IGZyb20gJy4vbGliJztcbmltcG9ydCB7IEtleVBhaXIgYXMgQ2FudG9uS2V5UGFpciB9IGZyb20gJy4vbGliL2tleVBhaXInO1xuaW1wb3J0IHsgQ2FudG9uQ29tbWFuZEtpbmQsIFR4RGF0YSB9IGZyb20gJy4vbGliL2lmYWNlJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uIH0gZnJvbSAnLi9saWIvdHJhbnNhY3Rpb24vdHJhbnNhY3Rpb24nO1xuaW1wb3J0IHV0aWxzIGZyb20gJy4vbGliL3V0aWxzJztcblxuZXhwb3J0IGludGVyZmFjZSBUcmFuc2FjdGlvbkV4cGxhbmF0aW9uIGV4dGVuZHMgQmFzZVRyYW5zYWN0aW9uRXhwbGFuYXRpb24ge1xuICB0eXBlOiBUcmFuc2FjdGlvblR5cGU7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRXhwbGFpblRyYW5zYWN0aW9uT3B0aW9ucyB7XG4gIHR4SGV4OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2FudG9uVHJhbnNhY3Rpb25QYXJhbXMgZXh0ZW5kcyBUcmFuc2FjdGlvblBhcmFtcyB7XG4gIGNhbnRvbkNvbW1hbmRQYXJhbXM/OiBDYW50b25Db21tYW5kUGFyYW1zO1xufVxuXG5leHBvcnQgY2xhc3MgQ2FudG9uIGV4dGVuZHMgQmFzZUNvaW4ge1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgX3N0YXRpY3NDb2luOiBSZWFkb25seTxTdGF0aWNzQmFzZUNvaW4+O1xuXG4gIHByb3RlY3RlZCBjb25zdHJ1Y3RvcihiaXRnbzogQml0R29CYXNlLCBzdGF0aWNzQ29pbj86IFJlYWRvbmx5PFN0YXRpY3NCYXNlQ29pbj4pIHtcbiAgICBzdXBlcihiaXRnbyk7XG5cbiAgICBpZiAoIXN0YXRpY3NDb2luKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ21pc3NpbmcgcmVxdWlyZWQgY29uc3RydWN0b3IgcGFyYW1ldGVyIHN0YXRpY3NDb2luJyk7XG4gICAgfVxuXG4gICAgdGhpcy5fc3RhdGljc0NvaW4gPSBzdGF0aWNzQ29pbjtcbiAgfVxuXG4gIHN0YXRpYyBjcmVhdGVJbnN0YW5jZShiaXRnbzogQml0R29CYXNlLCBzdGF0aWNzQ29pbj86IFJlYWRvbmx5PFN0YXRpY3NCYXNlQ29pbj4pOiBCYXNlQ29pbiB7XG4gICAgcmV0dXJuIG5ldyBDYW50b24oYml0Z28sIHN0YXRpY3NDb2luKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0QnVpbGRlcigpOiBUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5IHtcbiAgICByZXR1cm4gbmV3IFRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnkoY29pbnMuZ2V0KHRoaXMuZ2V0Q2hhaW4oKSkpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBnZXRCYXNlRmFjdG9yKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIDFlMTA7XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIGdldENoYWluKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuICdjYW50b24nO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBnZXRGYW1pbHkoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gJ2NhbnRvbic7XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIGdldEZ1bGxOYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuICdDYW50b24nO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHN1cHBvcnRzVHNzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqIGluaGVyaXRlZCBkb2MgKi9cbiAgZ2V0RGVmYXVsdE11bHRpc2lnVHlwZSgpOiBNdWx0aXNpZ1R5cGUge1xuICAgIHJldHVybiBtdWx0aXNpZ1R5cGVzLnRzcztcbiAgfVxuXG4gIC8qKiBpbmhlcml0ZWQgZG9jICovXG4gIHJlcXVpcmVzV2FsbGV0SW5pdGlhbGl6YXRpb25UcmFuc2FjdGlvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGdldE1QQ0FsZ29yaXRobSgpOiBNUENBbGdvcml0aG0ge1xuICAgIHJldHVybiAnZWRkc2EnO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIGFzeW5jIHZlcmlmeVRyYW5zYWN0aW9uKHBhcmFtczogVmVyaWZ5VHJhbnNhY3Rpb25PcHRpb25zKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgY29pbkNvbmZpZyA9IGNvaW5zLmdldCh0aGlzLmdldENoYWluKCkpO1xuICAgIGNvbnN0IHsgdHhQcmVidWlsZDogdHhQcmVidWlsZCwgdHhQYXJhbXMgfSA9IHBhcmFtcztcbiAgICBjb25zdCByYXdUeCA9IHR4UHJlYnVpbGQudHhIZXg7XG4gICAgaWYgKCFyYXdUeCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdtaXNzaW5nIHJlcXVpcmVkIHR4IHByZWJ1aWxkIHByb3BlcnR5IHR4SGV4Jyk7XG4gICAgfVxuICAgIGNvbnN0IHR4QnVpbGRlciA9IG5ldyBUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5KGNvaW5Db25maWcpLmZyb20ocmF3VHgpO1xuICAgIGNvbnN0IHRyYW5zYWN0aW9uID0gdHhCdWlsZGVyLnRyYW5zYWN0aW9uO1xuICAgIGNvbnN0IGV4cGxhaW5lZFR4ID0gdHJhbnNhY3Rpb24uZXhwbGFpblRyYW5zYWN0aW9uKCk7XG4gICAgc3dpdGNoICh0cmFuc2FjdGlvbi50eXBlKSB7XG4gICAgICBjYXNlIFRyYW5zYWN0aW9uVHlwZS5XYWxsZXRJbml0aWFsaXphdGlvbjpcbiAgICAgIGNhc2UgVHJhbnNhY3Rpb25UeXBlLlRyYW5zZmVyQWNjZXB0OlxuICAgICAgY2FzZSBUcmFuc2FjdGlvblR5cGUuVHJhbnNmZXJSZWplY3Q6XG4gICAgICBjYXNlIFRyYW5zYWN0aW9uVHlwZS5UcmFuc2ZlckFja25vd2xlZGdlOlxuICAgICAgY2FzZSBUcmFuc2FjdGlvblR5cGUuVHJhbnNmZXJPZmZlcldpdGhkcmF3bjpcbiAgICAgIGNhc2UgVHJhbnNhY3Rpb25UeXBlLkNvc2lnbkRlbGVnYXRpb25BY2NlcHQ6XG4gICAgICBjYXNlIFRyYW5zYWN0aW9uVHlwZS5Db3NpZ25EZWxlZ2F0aW9uUHJvcG9zYWw6XG4gICAgICBjYXNlIFRyYW5zYWN0aW9uVHlwZS5BbGxvY2F0aW9uQWxsb2NhdGU6XG4gICAgICBjYXNlIFRyYW5zYWN0aW9uVHlwZS5BbGxvY2F0aW9uUmVxdWVzdDpcbiAgICAgICAgLy8gVGhlcmUgaXMgbm8gcmVjaXBpZW50IGluZm8gdG8gdmVyaWZ5IGZvciB0aGVzZSB0cmFuc2FjdGlvbiB0eXBlcywgc28gYWx3YXlzIHJldHVybiB0cnVlLlxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIGNhc2UgVHJhbnNhY3Rpb25UeXBlLkNhbnRvbkNvbW1hbmQ6XG4gICAgICAgIHJldHVybiB0aGlzLnZlcmlmeUNhbnRvbkNvbW1hbmRUcmFuc2FjdGlvbihcbiAgICAgICAgICB0cmFuc2FjdGlvbixcbiAgICAgICAgICAodHhQYXJhbXMgYXMgQ2FudG9uVHJhbnNhY3Rpb25QYXJhbXMpLmNhbnRvbkNvbW1hbmRQYXJhbXNcbiAgICAgICAgKTtcbiAgICAgIGNhc2UgVHJhbnNhY3Rpb25UeXBlLk9uZVN0ZXBQcmVBcHByb3ZhbDpcbiAgICAgICAgLy8gQ2FudG9uIGlzIGFsd2F5cyBhIFRTUyB3YWxsZXQuIFRoZSBTREsncyBidWlsZFRva2VuRW5hYmxlbWVudHMgcGFzc2VzIGVuYWJsZVRva2Vuc1xuICAgICAgICAvLyB0aHJvdWdoIHVuY2hhbmdlZCBmb3IgVFNTIHdhbGxldHMgKG5vIGNvbnZlcnNpb24gdG8gcmVjaXBpZW50cyksIHNvIHR4UGFyYW1zLmVuYWJsZVRva2Vuc1xuICAgICAgICAvLyBpcyB0aGUgb25seSBzb3VyY2Ugb2YgdXNlciBpbnRlbnQgaGVyZS5cbiAgICAgICAgLy9cbiAgICAgICAgLy8gUmVjZWl2ZXIgdmFsaWRhdGlvbjogdGhlIHJlY2VpdmVyIG9mIGEgT25lU3RlcFByZUFwcHJvdmFsIGlzIGFsd2F5cyB0aGUgd2FsbGV0J3Mgcm9vdCBhZGRyZXNzLlxuICAgICAgICAvLyBXZSB1c2UgZW5hYmxlVG9rZW4uYWRkcmVzcyBpZiBleHBsaWNpdGx5IHByb3ZpZGVkLCBvdGhlcndpc2UgZmFsbCBiYWNrIHRvXG4gICAgICAgIC8vIHdhbGxldC5jb2luU3BlY2lmaWMoKS5yb290QWRkcmVzcyAodGhlIENhbnRvbiBwYXJ0eSBJRCBzdG9yZWQgYXQgd2FsbGV0IGNyZWF0aW9uIHRpbWUpLlxuICAgICAgICAvLyBUb2tlbiBuYW1lIHZhbGlkYXRpb246IGNoZWNrZWQgd2hlbiB0aGUgdG9rZW4gaXMgcmVzb2x2YWJsZSBmcm9tIHN0YXRpY3MuXG4gICAgICAgIGlmIChcbiAgICAgICAgICB0eFBhcmFtcy50eXBlID09PSAnZW5hYmxldG9rZW4nICYmXG4gICAgICAgICAgdHhQYXJhbXMuZW5hYmxlVG9rZW5zICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICB0eFBhcmFtcy5lbmFibGVUb2tlbnMubGVuZ3RoID4gMFxuICAgICAgICApIHtcbiAgICAgICAgICBjb25zdCB0eERhdGEgPSB0cmFuc2FjdGlvbi50b0pzb24oKSBhcyBUeERhdGE7XG4gICAgICAgICAgY29uc3QgZW5hYmxlVG9rZW4gPSB0eFBhcmFtcy5lbmFibGVUb2tlbnNbMF07XG4gICAgICAgICAgY29uc3Qgd2FsbGV0Um9vdEFkZHJlc3MgPSBwYXJhbXMud2FsbGV0Py5jb2luU3BlY2lmaWM/LigpPy5yb290QWRkcmVzcztcbiAgICAgICAgICBjb25zdCBleHBlY3RlZFJlY2VpdmVyID0gZW5hYmxlVG9rZW4uYWRkcmVzcyA/PyB3YWxsZXRSb290QWRkcmVzcztcbiAgICAgICAgICBpZiAoZXhwZWN0ZWRSZWNlaXZlcikge1xuICAgICAgICAgICAgLy8gU3RyaXAgP21lbW9JZCBzdWZmaXggaWYgcHJlc2VudCBpbiB0aGUgc3RvcmVkIGFkZHJlc3NcbiAgICAgICAgICAgIGNvbnN0IFtleHBlY3RlZFJlY2VpdmVyQmFzZV0gPSBleHBlY3RlZFJlY2VpdmVyLnNwbGl0KCc/bWVtb0lkPScpO1xuICAgICAgICAgICAgaWYgKHR4RGF0YS5yZWNlaXZlciAhPT0gZXhwZWN0ZWRSZWNlaXZlckJhc2UpIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICAgIGBPbmVTdGVwUHJlQXBwcm92YWwgcmVjZWl2ZXIgbWlzbWF0Y2g6IGV4cGVjdGVkICcke2V4cGVjdGVkUmVjZWl2ZXJCYXNlfScsIGdvdCAnJHt0eERhdGEucmVjZWl2ZXJ9J2BcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHR4RGF0YS50b2tlbiAhPT0gdW5kZWZpbmVkICYmIHR4RGF0YS50b2tlbiAhPT0gZW5hYmxlVG9rZW4ubmFtZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICBgT25lU3RlcFByZUFwcHJvdmFsIHRva2VuIG5hbWUgbWlzbWF0Y2g6IGV4cGVjdGVkICcke2VuYWJsZVRva2VuLm5hbWV9JywgZ290ICcke3R4RGF0YS50b2tlbn0nYFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICBjYXNlIFRyYW5zYWN0aW9uVHlwZS5TZW5kOlxuICAgICAgICBpZiAodHhQYXJhbXMucmVjaXBpZW50cyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgY29uc3QgZmlsdGVyZWRSZWNpcGllbnRzID0gdHhQYXJhbXMucmVjaXBpZW50cz8ubWFwKChyZWNpcGllbnQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHsgYWRkcmVzcywgYW1vdW50LCB0b2tlbk5hbWUgfSA9IHJlY2lwaWVudDtcbiAgICAgICAgICAgIGNvbnN0IFthZGRyZXNzUGFydCwgbWVtb0lkXSA9IGFkZHJlc3Muc3BsaXQoJz9tZW1vSWQ9Jyk7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBhZGRyZXNzOiBhZGRyZXNzUGFydCxcbiAgICAgICAgICAgICAgYW1vdW50LFxuICAgICAgICAgICAgICAuLi4obWVtb0lkICYmIHsgbWVtbzogbWVtb0lkIH0pLFxuICAgICAgICAgICAgICAuLi4odG9rZW5OYW1lICYmIHsgdG9rZW5OYW1lIH0pLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBjb25zdCBmaWx0ZXJlZE91dHB1dHMgPSBleHBsYWluZWRUeC5vdXRwdXRzPy5tYXAoKG91dHB1dCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgeyBhZGRyZXNzLCBhbW91bnQsIHRva2VuTmFtZSwgbWVtbyB9ID0gb3V0cHV0O1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgYWRkcmVzcyxcbiAgICAgICAgICAgICAgYW1vdW50LFxuICAgICAgICAgICAgICAuLi4obWVtbyAmJiB7IG1lbW8gfSksXG4gICAgICAgICAgICAgIC4uLih0b2tlbk5hbWUgJiYgeyB0b2tlbk5hbWUgfSksXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIGlmIChKU09OLnN0cmluZ2lmeShmaWx0ZXJlZFJlY2lwaWVudHMpICE9PSBKU09OLnN0cmluZ2lmeShmaWx0ZXJlZE91dHB1dHMpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1R4IG91dHB1dHMgZG8gbm90IG1hdGNoIHdpdGggZXhwZWN0ZWQgdHhQYXJhbXMgcmVjaXBpZW50cycpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGB1bmtub3duIHRyYW5zYWN0aW9uIHR5cGUsICR7dHJhbnNhY3Rpb24udHlwZX1gKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHZlcmlmeUNhbnRvbkNvbW1hbmRUcmFuc2FjdGlvbihcbiAgICB0cmFuc2FjdGlvbjogQmFzZVRyYW5zYWN0aW9uLFxuICAgIHVzZXJQYXJhbXM6IENhbnRvbkNvbW1hbmRQYXJhbXMgfCB1bmRlZmluZWRcbiAgKTogYm9vbGVhbiB7XG4gICAgaWYgKCF1c2VyUGFyYW1zKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBjb25zdCBjYW50b25UeCA9IHRyYW5zYWN0aW9uIGFzIFRyYW5zYWN0aW9uO1xuICAgIGNvbnN0IHJhd1ByZXBhcmVkID0gY2FudG9uVHgucHJlcGFyZUNvbW1hbmQ/LnByZXBhcmVkVHJhbnNhY3Rpb247XG4gICAgaWYgKCFyYXdQcmVwYXJlZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW50b25Db21tYW5kIHZlcmlmeVRyYW5zYWN0aW9uOiBtaXNzaW5nIHByZXBhcmVkVHJhbnNhY3Rpb24gcHJvdG9idWYgb24gdHggcHJlYnVpbGQnKTtcbiAgICB9XG5cbiAgICBjb25zdCBkZWNvZGVkQ29tbWFuZCA9IHV0aWxzLmV4dHJhY3RDYW50b25Db21tYW5kSW5mbyhyYXdQcmVwYXJlZCk7XG4gICAgY29uc3QgdXNlckNvbW1hbmQgPSB1c2VyUGFyYW1zLmNvbW1hbmQgYXMgUGFydGlhbDxDYW50b25Db21tYW5kPjtcblxuICAgIC8vIElucHV0IHNoYXBlIGlzIGVuZm9yY2VkIGJ5IG1wY1V0aWxzIGF0IGJ1aWxkIHRpbWU7IGhlcmUgd2UgcmVzb2x2ZSB3aGljaCBicmFuY2ggaXMgcHJlc2VudC5cbiAgICBjb25zdCBoYXNDcmVhdGUgPSAnQ3JlYXRlQ29tbWFuZCcgaW4gdXNlckNvbW1hbmQgJiYgdXRpbHMuaXNQbGFpbk9iamVjdCh1c2VyQ29tbWFuZC5DcmVhdGVDb21tYW5kKTtcbiAgICBjb25zdCBoYXNFeGVyY2lzZSA9ICdFeGVyY2lzZUNvbW1hbmQnIGluIHVzZXJDb21tYW5kICYmIHV0aWxzLmlzUGxhaW5PYmplY3QodXNlckNvbW1hbmQuRXhlcmNpc2VDb21tYW5kKTtcbiAgICBpZiAoIWhhc0NyZWF0ZSAmJiAhaGFzRXhlcmNpc2UpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYENhbnRvbkNvbW1hbmQgdmVyaWZ5VHJhbnNhY3Rpb246IGNvbW1hbmQgbXVzdCBjb250YWluIGEgQ3JlYXRlQ29tbWFuZCBvciBFeGVyY2lzZUNvbW1hbmQgd3JhcHBlcmBcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChoYXNDcmVhdGUgJiYgaGFzRXhlcmNpc2UpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYENhbnRvbkNvbW1hbmQgdmVyaWZ5VHJhbnNhY3Rpb246IGNvbW1hbmQgbXVzdCBjb250YWluIGV4YWN0bHkgb25lIG9mIENyZWF0ZUNvbW1hbmQgb3IgRXhlcmNpc2VDb21tYW5kLCBub3QgYm90aGBcbiAgICAgICk7XG4gICAgfVxuICAgIGNvbnN0IHVzZXJLaW5kOiBDYW50b25Db21tYW5kS2luZCA9IGhhc0NyZWF0ZSA/ICdDcmVhdGVDb21tYW5kJyA6ICdFeGVyY2lzZUNvbW1hbmQnO1xuICAgIGlmIChkZWNvZGVkQ29tbWFuZC5raW5kICE9PSB1c2VyS2luZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgQ2FudG9uQ29tbWFuZCB2ZXJpZnlUcmFuc2FjdGlvbjogY29tbWFuZCBraW5kIG1pc21hdGNoIOKAlCBleHBlY3RlZCAke3VzZXJLaW5kfSwgZ290ICR7ZGVjb2RlZENvbW1hbmQua2luZH1gXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IHVzZXJJbm5lciA9XG4gICAgICB1c2VyS2luZCA9PT0gJ0NyZWF0ZUNvbW1hbmQnXG4gICAgICAgID8gKHVzZXJDb21tYW5kIGFzIENhbnRvbkNyZWF0ZUNvbW1hbmQpLkNyZWF0ZUNvbW1hbmRcbiAgICAgICAgOiAodXNlckNvbW1hbmQgYXMgQ2FudG9uRXhlcmNpc2VDb21tYW5kKS5FeGVyY2lzZUNvbW1hbmQ7XG5cbiAgICBpZiAoIXVzZXJJbm5lcj8udGVtcGxhdGVJZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW50b25Db21tYW5kIHZlcmlmeVRyYW5zYWN0aW9uOiAke3VzZXJLaW5kfS50ZW1wbGF0ZUlkIG11c3QgYmUgYSBub24tZW1wdHkgc3RyaW5nYCk7XG4gICAgfVxuXG4gICAgLy8gdGVtcGxhdGVJZCAobW9kdWxlTmFtZSArIGVudGl0eU5hbWU7IHBhY2thZ2UgaWQgaXMgbXV0YWJsZSwgc28gaWdub3JlZClcbiAgICBjb25zdCBwYXJzZWQgPSB1dGlscy5wYXJzZUNhbnRvblRlbXBsYXRlSWQodXNlcklubmVyLnRlbXBsYXRlSWQpO1xuICAgIGlmICghcGFyc2VkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBDYW50b25Db21tYW5kIHZlcmlmeVRyYW5zYWN0aW9uOiBpbnZhbGlkIHVzZXIgdGVtcGxhdGVJZCAnJHt1c2VySW5uZXIudGVtcGxhdGVJZH0nIOKAlCBleHBlY3RlZCBmb3JtYXQgJ1BrZzpNb2R1bGU6RW50aXR5J2BcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChcbiAgICAgIGRlY29kZWRDb21tYW5kLnRlbXBsYXRlSWQubW9kdWxlTmFtZSAhPT0gcGFyc2VkLm1vZHVsZU5hbWUgfHxcbiAgICAgIGRlY29kZWRDb21tYW5kLnRlbXBsYXRlSWQuZW50aXR5TmFtZSAhPT0gcGFyc2VkLmVudGl0eU5hbWVcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYENhbnRvbkNvbW1hbmQgdmVyaWZ5VHJhbnNhY3Rpb246IHRlbXBsYXRlSWQgbWlzbWF0Y2gg4oCUIGV4cGVjdGVkICcke3BhcnNlZC5tb2R1bGVOYW1lfToke3BhcnNlZC5lbnRpdHlOYW1lfScsIGdvdCAnJHtkZWNvZGVkQ29tbWFuZC50ZW1wbGF0ZUlkLm1vZHVsZU5hbWV9OiR7ZGVjb2RlZENvbW1hbmQudGVtcGxhdGVJZC5lbnRpdHlOYW1lfSdgXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIEJ1aWxkIHRoZSBpbmplY3QtYXMgc2tpcCBzZXQgb25jZSBmb3IgdXNlIGFjcm9zcyB0aGUgY29udHJhY3RJZCBhbmQgYXJndW1lbnQgY2hlY2tzXG4gICAgY29uc3Qgc2tpcFBhdGhzID0gdXRpbHMubm9ybWFsaXplSW5qZWN0QXModXNlclBhcmFtcy5yZXNvbHZlQ29udHJhY3RzKTtcblxuICAgIC8vIG1ldGFkYXRhLnN1Ym1pdHRlckluZm8uYWN0QXMgbXVzdCBjb250YWluIGV4YWN0bHkgdGhlIHNhbWUgcGFydGllcyBhcyB0aGUgdXNlcidzIGFjdEFzXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHVzZXJQYXJhbXMuYWN0QXMpIHx8IHVzZXJQYXJhbXMuYWN0QXMubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbnRvbkNvbW1hbmQgdmVyaWZ5VHJhbnNhY3Rpb246IGFjdEFzIG11c3QgYmUgYSBub24tZW1wdHkgYXJyYXkgb2YgcGFydHkgSURzYCk7XG4gICAgfVxuICAgIGlmICghdXNlclBhcmFtcy5hY3RBcy5ldmVyeSgocCkgPT4gdHlwZW9mIHAgPT09ICdzdHJpbmcnICYmIHAudHJpbSgpICE9PSAnJykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ2FudG9uQ29tbWFuZCB2ZXJpZnlUcmFuc2FjdGlvbjogYWxsIGFjdEFzIGVudHJpZXMgbXVzdCBiZSBub24tZW1wdHkgc3RyaW5nc2ApO1xuICAgIH1cbiAgICBjb25zdCBzdWJtaXR0ZXJBY3RBcyA9IGNhbnRvblR4LmNhbnRvbkNvbW1hbmRBY3RBc1BhcnRpZXMgPz8gW107XG4gICAgaWYgKCF1dGlscy5zYW1lRWxlbWVudHMoc3VibWl0dGVyQWN0QXMsIHVzZXJQYXJhbXMuYWN0QXMpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBDYW50b25Db21tYW5kIHZlcmlmeVRyYW5zYWN0aW9uOiBzdWJtaXR0ZXJJbmZvLmFjdEFzIFske3N1Ym1pdHRlckFjdEFzLmpvaW4oXG4gICAgICAgICAgJywgJ1xuICAgICAgICApfV0gZG9lcyBub3QgbWF0Y2ggdXNlciBhY3RBcyBbJHt1c2VyUGFyYW1zLmFjdEFzLmpvaW4oJywgJyl9XWBcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKHVzZXJLaW5kID09PSAnRXhlcmNpc2VDb21tYW5kJykge1xuICAgICAgY29uc3QgZXhlcmNpc2VJbm5lciA9IHVzZXJJbm5lciBhcyBDYW50b25FeGVyY2lzZUNvbW1hbmRbJ0V4ZXJjaXNlQ29tbWFuZCddO1xuXG4gICAgICAvLyBjaG9pY2UgaWRcbiAgICAgIGlmIChkZWNvZGVkQ29tbWFuZC5jaG9pY2UgIT09IGV4ZXJjaXNlSW5uZXIuY2hvaWNlKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgQ2FudG9uQ29tbWFuZCB2ZXJpZnlUcmFuc2FjdGlvbjogY2hvaWNlIG1pc21hdGNoIOKAlCBleHBlY3RlZCAnJHtleGVyY2lzZUlubmVyLmNob2ljZX0nLCBnb3QgJyR7XG4gICAgICAgICAgICBkZWNvZGVkQ29tbWFuZC5jaG9pY2UgPz8gJydcbiAgICAgICAgICB9J2BcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgLy8gZXZlcnkgb24tY2hhaW4gYWN0aW5nUGFydHkgbXVzdCBiZSBpbiB0aGUgdXNlcidzIGFjdEFzIChwcmV2ZW50cyBwcml2aWxlZ2UgZXNjYWxhdGlvbilcbiAgICAgIGNvbnN0IG9uQ2hhaW5BY3RvcnMgPSBkZWNvZGVkQ29tbWFuZC5hY3RpbmdQYXJ0aWVzID8/IFtdO1xuICAgICAgZm9yIChjb25zdCBhY3RvciBvZiBvbkNoYWluQWN0b3JzKSB7XG4gICAgICAgIGlmICghdXNlclBhcmFtcy5hY3RBcy5pbmNsdWRlcyhhY3RvcikpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICBgQ2FudG9uQ29tbWFuZCB2ZXJpZnlUcmFuc2FjdGlvbjogdW5hdXRob3JpemVkIGFjdGluZyBwYXJ0eSAnJHthY3Rvcn0nIG9uIHJvb3QgZXhlcmNpc2UgKG5vdCBpbiB1c2VyIGFjdEFzKWBcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIGNvbnRyYWN0SWQg4oCUIHNraXAgd2hlbiBhYnNlbnQvZW1wdHkgb3Igd2hlbiBJTVMgd2lsbCBpbmplY3QgaXQgdmlhIHJlc29sdmVDb250cmFjdHNcbiAgICAgIGlmIChcbiAgICAgICAgZXhlcmNpc2VJbm5lci5jb250cmFjdElkICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgZXhlcmNpc2VJbm5lci5jb250cmFjdElkICE9PSAnJyAmJlxuICAgICAgICAhc2tpcFBhdGhzLmhhcygnRXhlcmNpc2VDb21tYW5kLmNvbnRyYWN0SWQnKVxuICAgICAgKSB7XG4gICAgICAgIGlmIChkZWNvZGVkQ29tbWFuZC5jb250cmFjdElkICE9PSBleGVyY2lzZUlubmVyLmNvbnRyYWN0SWQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICBgQ2FudG9uQ29tbWFuZCB2ZXJpZnlUcmFuc2FjdGlvbjogY29udHJhY3RJZCBtaXNtYXRjaCDigJQgZXhwZWN0ZWQgJyR7ZXhlcmNpc2VJbm5lci5jb250cmFjdElkfScsIGdvdCAnJHtcbiAgICAgICAgICAgICAgZGVjb2RlZENvbW1hbmQuY29udHJhY3RJZCA/PyAnJ1xuICAgICAgICAgICAgfSdgXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBkZWVwIGFyZ3VtZW50IGNvbXBhcmVcbiAgICAgIGNvbnN0IGFyZ3VtZW50U2tpcFBhdGhzID0gdGhpcy5yZWxhdGl2ZVNraXBQYXRocyhza2lwUGF0aHMsICdFeGVyY2lzZUNvbW1hbmQuY2hvaWNlQXJndW1lbnQuJyk7XG4gICAgICB1dGlscy5hc3NlcnREZWVwQ2FudG9uTWF0Y2goZXhlcmNpc2VJbm5lci5jaG9pY2VBcmd1bWVudCwgZGVjb2RlZENvbW1hbmQuYXJndW1lbnQsIGFyZ3VtZW50U2tpcFBhdGhzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgY3JlYXRlSW5uZXIgPSB1c2VySW5uZXIgYXMgQ2FudG9uQ3JlYXRlQ29tbWFuZFsnQ3JlYXRlQ29tbWFuZCddO1xuXG4gICAgICAvLyBkZWVwIGFyZ3VtZW50IGNvbXBhcmVcbiAgICAgIGNvbnN0IGFyZ3VtZW50U2tpcFBhdGhzID0gdGhpcy5yZWxhdGl2ZVNraXBQYXRocyhza2lwUGF0aHMsICdDcmVhdGVDb21tYW5kLmNyZWF0ZUFyZ3VtZW50cy4nKTtcbiAgICAgIHV0aWxzLmFzc2VydERlZXBDYW50b25NYXRjaChjcmVhdGVJbm5lci5jcmVhdGVBcmd1bWVudHMsIGRlY29kZWRDb21tYW5kLmFyZ3VtZW50LCBhcmd1bWVudFNraXBQYXRocyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBwcml2YXRlIHJlbGF0aXZlU2tpcFBhdGhzKHNraXBQYXRoczogU2V0PHN0cmluZz4sIHByZWZpeDogc3RyaW5nKTogU2V0PHN0cmluZz4ge1xuICAgIGNvbnN0IG91dCA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgIGZvciAoY29uc3QgcCBvZiBza2lwUGF0aHMpIHtcbiAgICAgIGlmIChwLnN0YXJ0c1dpdGgocHJlZml4KSkge1xuICAgICAgICBjb25zdCBzdHJpcHBlZCA9IHAuc2xpY2UocHJlZml4Lmxlbmd0aCk7XG4gICAgICAgIGlmIChzdHJpcHBlZCkgb3V0LmFkZChzdHJpcHBlZCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBvdXQ7XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgYXN5bmMgaXNXYWxsZXRBZGRyZXNzKHBhcmFtczogVHNzVmVyaWZ5QWRkcmVzc09wdGlvbnMpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICAvLyBUT0RPOiByZWZhY3RvciB0aGlzIGFuZCB1c2UgdGhlIGB2ZXJpZnlFZGRzYU1lbW9CYXNlZFdhbGxldEFkZHJlc3NgIG9uY2UgcHVibGlzaGVkIGZyb20gc2RrLWNvcmVcbiAgICAvLyBodHRwczovL2JpdGdvaW5jLmF0bGFzc2lhbi5uZXQvYnJvd3NlL0NPSU4tNjM0N1xuICAgIGNvbnN0IHsga2V5Y2hhaW5zLCBhZGRyZXNzOiBuZXdBZGRyZXNzLCBpbmRleCB9ID0gcGFyYW1zO1xuICAgIGNvbnN0IFthZGRyZXNzUGFydCwgbWVtb0lkXSA9IG5ld0FkZHJlc3Muc3BsaXQoJz9tZW1vSWQ9Jyk7XG4gICAgaWYgKCF0aGlzLmlzVmFsaWRBZGRyZXNzKGFkZHJlc3NQYXJ0KSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBZGRyZXNzRXJyb3IoYGludmFsaWQgYWRkcmVzczogJHtuZXdBZGRyZXNzfWApO1xuICAgIH1cbiAgICBpZiAobWVtb0lkICYmIG1lbW9JZCAhPT0gYCR7aW5kZXh9YCkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBZGRyZXNzRXJyb3IoYGludmFsaWQgbWVtb0lkIGluZGV4OiAke21lbW9JZH1gKTtcbiAgICB9XG4gICAgY29uc3QgY29tbW9uS2V5Y2hhaW4gPSBleHRyYWN0Q29tbW9uS2V5Y2hhaW4oa2V5Y2hhaW5zKTtcbiAgICBjb25zdCBNUEMgPSBhd2FpdCBFRERTQU1ldGhvZHMuZ2V0SW5pdGlhbGl6ZWRNcGNJbnN0YW5jZSgpO1xuICAgIGNvbnN0IGRlcml2YXRpb25QYXRoID0gJ20vMCc7XG4gICAgY29uc3QgZGVyaXZlZFB1YmxpY0tleSA9IE1QQy5kZXJpdmVVbmhhcmRlbmVkKGNvbW1vbktleWNoYWluLCBkZXJpdmF0aW9uUGF0aCkuc2xpY2UoMCwgNjQpO1xuICAgIGNvbnN0IHB1YmxpY0tleUJhc2U2NCA9IEJ1ZmZlci5mcm9tKGRlcml2ZWRQdWJsaWNLZXksICdoZXgnKS50b1N0cmluZygnYmFzZTY0Jyk7XG4gICAgY29uc3Qgcm9vdEFkZHJlc3NGaW5nZXJwcmludCA9IHV0aWxzLmdldEFkZHJlc3NGcm9tUHVibGljS2V5KHB1YmxpY0tleUJhc2U2NCk7XG4gICAgY29uc3Qgcm9vdEFkZHJlc3MgPSBgJHtyb290QWRkcmVzc0ZpbmdlcnByaW50LnNsaWNlKDAsIDUpfTo6JHtyb290QWRkcmVzc0ZpbmdlcnByaW50fWA7XG4gICAgcmV0dXJuIGFkZHJlc3NQYXJ0ID09PSByb290QWRkcmVzcztcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwYXJzZVRyYW5zYWN0aW9uKHBhcmFtczogUGFyc2VUcmFuc2FjdGlvbk9wdGlvbnMpOiBQcm9taXNlPFBhcnNlZFRyYW5zYWN0aW9uPiB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdNZXRob2Qgbm90IGltcGxlbWVudGVkLicpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIGdlbmVyYXRlS2V5UGFpcihzZWVkPzogQnVmZmVyKTogS2V5UGFpciB7XG4gICAgY29uc3Qga2V5UGFpciA9IHNlZWQgPyBuZXcgQ2FudG9uS2V5UGFpcih7IHNlZWQgfSkgOiBuZXcgQ2FudG9uS2V5UGFpcigpO1xuICAgIGNvbnN0IGtleXMgPSBrZXlQYWlyLmdldEtleXMoKTtcbiAgICBpZiAoIWtleXMucHJ2KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ01pc3NpbmcgcHJ2IGluIGtleSBnZW5lcmF0aW9uLicpO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgcHViOiBrZXlzLnB1YixcbiAgICAgIHBydjoga2V5cy5wcnYsXG4gICAgfTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBleHBsYWluVHJhbnNhY3Rpb24ocGFyYW1zOiBFeHBsYWluVHJhbnNhY3Rpb25PcHRpb25zKTogUHJvbWlzZTxUcmFuc2FjdGlvbkV4cGxhbmF0aW9uPiB7XG4gICAgY29uc3QgZmFjdG9yeSA9IHRoaXMuZ2V0QnVpbGRlcigpO1xuICAgIGxldCByZWJ1aWx0VHJhbnNhY3Rpb246IEJhc2VUcmFuc2FjdGlvbjtcbiAgICBjb25zdCB0eFJhdyA9IHBhcmFtcy50eEhleDtcbiAgICB0cnkge1xuICAgICAgY29uc3QgdHhCdWlsZGVyID0gZmFjdG9yeS5mcm9tKHR4UmF3KTtcbiAgICAgIHJlYnVpbHRUcmFuc2FjdGlvbiA9IHR4QnVpbGRlci50cmFuc2FjdGlvbjtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgdHJhbnNhY3Rpb24nKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlYnVpbHRUcmFuc2FjdGlvbi5leHBsYWluVHJhbnNhY3Rpb24oKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBpc1ZhbGlkUHViKHB1Yjogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHV0aWxzLmlzVmFsaWRQdWJsaWNLZXkocHViKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBpc1ZhbGlkQWRkcmVzcyhhZGRyZXNzOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAvLyBjYW50b24gYWRkcmVzc2VzIGFyZSBvZiB0aGUgZm9ybSwgcGFydHlIaW50OjpmaW5nZXJwcmludFxuICAgIC8vIHdoZXJlIHBhcnR5SGludCBpcyBvZiBsZW5ndGggNSBhbmQgZmluZ2VycHJpbnQgaXMgNjggY2hhcmFjdGVycyBsb25nXG4gICAgcmV0dXJuIHV0aWxzLmlzVmFsaWRBZGRyZXNzKGFkZHJlc3MpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIGdldFRva2VuRW5hYmxlbWVudENvbmZpZygpOiBUb2tlbkVuYWJsZW1lbnRDb25maWcge1xuICAgIHJldHVybiB7XG4gICAgICByZXF1aXJlc1Rva2VuRW5hYmxlbWVudDogdHJ1ZSxcbiAgICAgIHN1cHBvcnRzTXVsdGlwbGVUb2tlbkVuYWJsZW1lbnRzOiBmYWxzZSxcbiAgICB9O1xuICB9XG5cbiAgZ2V0QWRkcmVzc0Zyb21QdWJsaWNLZXkocHVibGljS2V5SGV4OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IHB1YmxpY0tleUJhc2U2NCA9IEJ1ZmZlci5mcm9tKHB1YmxpY0tleUhleCwgJ2hleCcpLnRvU3RyaW5nKCdiYXNlNjQnKTtcbiAgICByZXR1cm4gdXRpbHMuZ2V0QWRkcmVzc0Zyb21QdWJsaWNLZXkocHVibGljS2V5QmFzZTY0KTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBzaWduVHJhbnNhY3Rpb24ocGFyYW1zOiBTaWduVHJhbnNhY3Rpb25PcHRpb25zKTogUHJvbWlzZTxTaWduZWRUcmFuc2FjdGlvbj4ge1xuICAgIHRocm93IG5ldyBFcnJvcignTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC4nKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBhdWRpdERlY3J5cHRlZEtleSh7IG11bHRpU2lnVHlwZSwgcHJ2LCBwdWJsaWNLZXkgfTogQXVkaXREZWNyeXB0ZWRLZXlQYXJhbXMpOiB2b2lkIHtcbiAgICBpZiAobXVsdGlTaWdUeXBlICE9PSBtdWx0aXNpZ1R5cGVzLnRzcykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbnN1cHBvcnRlZCBtdWx0aVNpZ1R5cGUnKTtcbiAgICB9XG4gICAgYXVkaXRFZGRzYVByaXZhdGVLZXkocHJ2LCBwdWJsaWNLZXkgPz8gJycpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHNldENvaW5TcGVjaWZpY0ZpZWxkc0luSW50ZW50KGludGVudDogUG9wdWxhdGVkSW50ZW50LCBwYXJhbXM6IFByZWJ1aWxkVHJhbnNhY3Rpb25XaXRoSW50ZW50T3B0aW9ucyk6IHZvaWQge1xuICAgIGlmIChwYXJhbXMudHhSZXF1ZXN0SWQpIHtcbiAgICAgIGludGVudC50eFJlcXVlc3RJZCA9IHBhcmFtcy50eFJlcXVlc3RJZDtcbiAgICB9XG4gICAgaWYgKHBhcmFtcy50cmFuc2Zlck9mZmVySWQpIHtcbiAgICAgIGludGVudC50cmFuc2Zlck9mZmVySWQgPSBwYXJhbXMudHJhbnNmZXJPZmZlcklkO1xuICAgIH1cbiAgICBpZiAocGFyYW1zLnVuc3BlbnRzKSB7XG4gICAgICBpbnRlbnQudW5zcGVudHMgPSBwYXJhbXMudW5zcGVudHM7XG4gICAgfVxuICAgIGlmIChwYXJhbXMuY2FudG9uQ29tbWFuZFBhcmFtcykge1xuICAgICAgaW50ZW50LmNhbnRvbkNvbW1hbmRQYXJhbXMgPSBwYXJhbXMuY2FudG9uQ29tbWFuZFBhcmFtcztcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { BitGoBase, CoinConstructor, NamedCoinConstructor } from '@bitgo-beta/sdk-core';
|
|
2
|
+
import { CantonTokenConfig } from '@bitgo-beta/statics';
|
|
3
|
+
import { Canton } from './canton';
|
|
4
|
+
export declare class CantonToken extends Canton {
|
|
5
|
+
readonly tokenConfig: CantonTokenConfig;
|
|
6
|
+
constructor(bitgo: BitGoBase, tokenConfig: CantonTokenConfig);
|
|
7
|
+
static createTokenConstructor(config: CantonTokenConfig): CoinConstructor;
|
|
8
|
+
static createTokenConstructors(tokenConfig?: CantonTokenConfig[]): NamedCoinConstructor[];
|
|
9
|
+
get name(): string;
|
|
10
|
+
get coin(): string;
|
|
11
|
+
get baseUrl(): string;
|
|
12
|
+
get contractAddress(): string;
|
|
13
|
+
get decimalPlaces(): number;
|
|
14
|
+
getChain(): string;
|
|
15
|
+
getBaseChain(): string;
|
|
16
|
+
getFullName(): string;
|
|
17
|
+
getBaseFactor(): number;
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=cantonToken.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cantonToken.d.ts","sourceRoot":"","sources":["../../src/cantonToken.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AACxF,OAAO,EAAS,iBAAiB,EAAuB,MAAM,qBAAqB,CAAC;AAEpF,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAElC,qBAAa,WAAY,SAAQ,MAAM;IACrC,SAAgB,WAAW,EAAE,iBAAiB,CAAC;gBAEnC,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,iBAAiB;IAM5D,MAAM,CAAC,sBAAsB,CAAC,MAAM,EAAE,iBAAiB,GAAG,eAAe;IAIzE,MAAM,CAAC,uBAAuB,CAC5B,WAAW,GAAE,iBAAiB,EAAuE,GACpG,oBAAoB,EAAE;IASzB,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,IAAI,OAAO,IAAI,MAAM,CAEpB;IAED,IAAI,eAAe,IAAI,MAAM,CAE5B;IAED,IAAI,aAAa,IAAI,MAAM,CAE1B;IAED,QAAQ,IAAI,MAAM;IAIlB,YAAY,IAAI,MAAM;IAItB,WAAW,IAAI,MAAM;IAIrB,aAAa,IAAI,MAAM;CAGxB"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CantonToken = void 0;
|
|
4
|
+
const statics_1 = require("@bitgo-beta/statics");
|
|
5
|
+
const canton_1 = require("./canton");
|
|
6
|
+
class CantonToken extends canton_1.Canton {
|
|
7
|
+
constructor(bitgo, tokenConfig) {
|
|
8
|
+
const staticsCoin = tokenConfig.network === statics_1.NetworkType.MAINNET ? statics_1.coins.get('canton') : statics_1.coins.get('tcanton');
|
|
9
|
+
super(bitgo, staticsCoin);
|
|
10
|
+
this.tokenConfig = tokenConfig;
|
|
11
|
+
}
|
|
12
|
+
static createTokenConstructor(config) {
|
|
13
|
+
return (bitgo) => new CantonToken(bitgo, config);
|
|
14
|
+
}
|
|
15
|
+
static createTokenConstructors(tokenConfig = [...statics_1.tokens.bitcoin.canton.tokens, ...statics_1.tokens.testnet.canton.tokens]) {
|
|
16
|
+
const tokensCtors = [];
|
|
17
|
+
for (const token of tokenConfig) {
|
|
18
|
+
const tokenConstructor = CantonToken.createTokenConstructor(token);
|
|
19
|
+
tokensCtors.push({ name: token.type, coinConstructor: tokenConstructor });
|
|
20
|
+
}
|
|
21
|
+
return tokensCtors;
|
|
22
|
+
}
|
|
23
|
+
get name() {
|
|
24
|
+
return this.tokenConfig.name;
|
|
25
|
+
}
|
|
26
|
+
get coin() {
|
|
27
|
+
return this.tokenConfig.coin;
|
|
28
|
+
}
|
|
29
|
+
get baseUrl() {
|
|
30
|
+
return this.tokenConfig.baseUrl;
|
|
31
|
+
}
|
|
32
|
+
get contractAddress() {
|
|
33
|
+
return this.tokenConfig.contractAddress;
|
|
34
|
+
}
|
|
35
|
+
get decimalPlaces() {
|
|
36
|
+
return this.tokenConfig.decimalPlaces;
|
|
37
|
+
}
|
|
38
|
+
getChain() {
|
|
39
|
+
return this.tokenConfig.type;
|
|
40
|
+
}
|
|
41
|
+
getBaseChain() {
|
|
42
|
+
return this.coin;
|
|
43
|
+
}
|
|
44
|
+
getFullName() {
|
|
45
|
+
return 'Canton Token';
|
|
46
|
+
}
|
|
47
|
+
getBaseFactor() {
|
|
48
|
+
return Math.pow(10, this.tokenConfig.decimalPlaces);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
exports.CantonToken = CantonToken;
|
|
52
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FudG9uVG9rZW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY2FudG9uVG9rZW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EsaURBQW9GO0FBRXBGLHFDQUFrQztBQUVsQyxNQUFhLFdBQVksU0FBUSxlQUFNO0lBR3JDLFlBQVksS0FBZ0IsRUFBRSxXQUE4QjtRQUMxRCxNQUFNLFdBQVcsR0FBRyxXQUFXLENBQUMsT0FBTyxLQUFLLHFCQUFXLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxlQUFLLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxlQUFLLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzdHLEtBQUssQ0FBQyxLQUFLLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDMUIsSUFBSSxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUM7SUFDakMsQ0FBQztJQUVELE1BQU0sQ0FBQyxzQkFBc0IsQ0FBQyxNQUF5QjtRQUNyRCxPQUFPLENBQUMsS0FBZ0IsRUFBRSxFQUFFLENBQUMsSUFBSSxXQUFXLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQzlELENBQUM7SUFFRCxNQUFNLENBQUMsdUJBQXVCLENBQzVCLGNBQW1DLENBQUMsR0FBRyxnQkFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLEdBQUcsZ0JBQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQztRQUVyRyxNQUFNLFdBQVcsR0FBMkIsRUFBRSxDQUFDO1FBQy9DLEtBQUssTUFBTSxLQUFLLElBQUksV0FBVyxFQUFFLENBQUM7WUFDaEMsTUFBTSxnQkFBZ0IsR0FBRyxXQUFXLENBQUMsc0JBQXNCLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDbkUsV0FBVyxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSSxFQUFFLGVBQWUsRUFBRSxnQkFBZ0IsRUFBRSxDQUFDLENBQUM7UUFDNUUsQ0FBQztRQUNELE9BQU8sV0FBVyxDQUFDO0lBQ3JCLENBQUM7SUFFRCxJQUFJLElBQUk7UUFDTixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDO0lBQy9CLENBQUM7SUFFRCxJQUFJLElBQUk7UUFDTixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDO0lBQy9CLENBQUM7SUFFRCxJQUFJLE9BQU87UUFDVCxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDO0lBQ2xDLENBQUM7SUFFRCxJQUFJLGVBQWU7UUFDakIsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLGVBQWUsQ0FBQztJQUMxQyxDQUFDO0lBRUQsSUFBSSxhQUFhO1FBQ2YsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQztJQUN4QyxDQUFDO0lBRUQsUUFBUTtRQUNOLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUM7SUFDL0IsQ0FBQztJQUVELFlBQVk7UUFDVixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUM7SUFDbkIsQ0FBQztJQUVELFdBQVc7UUFDVCxPQUFPLGNBQWMsQ0FBQztJQUN4QixDQUFDO0lBRUQsYUFBYTtRQUNYLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUN0RCxDQUFDO0NBQ0Y7QUEzREQsa0NBMkRDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQml0R29CYXNlLCBDb2luQ29uc3RydWN0b3IsIE5hbWVkQ29pbkNvbnN0cnVjdG9yIH0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0IHsgY29pbnMsIENhbnRvblRva2VuQ29uZmlnLCBOZXR3b3JrVHlwZSwgdG9rZW5zIH0gZnJvbSAnQGJpdGdvLWJldGEvc3RhdGljcyc7XG5cbmltcG9ydCB7IENhbnRvbiB9IGZyb20gJy4vY2FudG9uJztcblxuZXhwb3J0IGNsYXNzIENhbnRvblRva2VuIGV4dGVuZHMgQ2FudG9uIHtcbiAgcHVibGljIHJlYWRvbmx5IHRva2VuQ29uZmlnOiBDYW50b25Ub2tlbkNvbmZpZztcblxuICBjb25zdHJ1Y3RvcihiaXRnbzogQml0R29CYXNlLCB0b2tlbkNvbmZpZzogQ2FudG9uVG9rZW5Db25maWcpIHtcbiAgICBjb25zdCBzdGF0aWNzQ29pbiA9IHRva2VuQ29uZmlnLm5ldHdvcmsgPT09IE5ldHdvcmtUeXBlLk1BSU5ORVQgPyBjb2lucy5nZXQoJ2NhbnRvbicpIDogY29pbnMuZ2V0KCd0Y2FudG9uJyk7XG4gICAgc3VwZXIoYml0Z28sIHN0YXRpY3NDb2luKTtcbiAgICB0aGlzLnRva2VuQ29uZmlnID0gdG9rZW5Db25maWc7XG4gIH1cblxuICBzdGF0aWMgY3JlYXRlVG9rZW5Db25zdHJ1Y3Rvcihjb25maWc6IENhbnRvblRva2VuQ29uZmlnKTogQ29pbkNvbnN0cnVjdG9yIHtcbiAgICByZXR1cm4gKGJpdGdvOiBCaXRHb0Jhc2UpID0+IG5ldyBDYW50b25Ub2tlbihiaXRnbywgY29uZmlnKTtcbiAgfVxuXG4gIHN0YXRpYyBjcmVhdGVUb2tlbkNvbnN0cnVjdG9ycyhcbiAgICB0b2tlbkNvbmZpZzogQ2FudG9uVG9rZW5Db25maWdbXSA9IFsuLi50b2tlbnMuYml0Y29pbi5jYW50b24udG9rZW5zLCAuLi50b2tlbnMudGVzdG5ldC5jYW50b24udG9rZW5zXVxuICApOiBOYW1lZENvaW5Db25zdHJ1Y3RvcltdIHtcbiAgICBjb25zdCB0b2tlbnNDdG9yczogTmFtZWRDb2luQ29uc3RydWN0b3JbXSA9IFtdO1xuICAgIGZvciAoY29uc3QgdG9rZW4gb2YgdG9rZW5Db25maWcpIHtcbiAgICAgIGNvbnN0IHRva2VuQ29uc3RydWN0b3IgPSBDYW50b25Ub2tlbi5jcmVhdGVUb2tlbkNvbnN0cnVjdG9yKHRva2VuKTtcbiAgICAgIHRva2Vuc0N0b3JzLnB1c2goeyBuYW1lOiB0b2tlbi50eXBlLCBjb2luQ29uc3RydWN0b3I6IHRva2VuQ29uc3RydWN0b3IgfSk7XG4gICAgfVxuICAgIHJldHVybiB0b2tlbnNDdG9ycztcbiAgfVxuXG4gIGdldCBuYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMudG9rZW5Db25maWcubmFtZTtcbiAgfVxuXG4gIGdldCBjb2luKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMudG9rZW5Db25maWcuY29pbjtcbiAgfVxuXG4gIGdldCBiYXNlVXJsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMudG9rZW5Db25maWcuYmFzZVVybDtcbiAgfVxuXG4gIGdldCBjb250cmFjdEFkZHJlc3MoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy50b2tlbkNvbmZpZy5jb250cmFjdEFkZHJlc3M7XG4gIH1cblxuICBnZXQgZGVjaW1hbFBsYWNlcygpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnRva2VuQ29uZmlnLmRlY2ltYWxQbGFjZXM7XG4gIH1cblxuICBnZXRDaGFpbigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnRva2VuQ29uZmlnLnR5cGU7XG4gIH1cblxuICBnZXRCYXNlQ2hhaW4oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5jb2luO1xuICB9XG5cbiAgZ2V0RnVsbE5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gJ0NhbnRvbiBUb2tlbic7XG4gIH1cblxuICBnZXRCYXNlRmFjdG9yKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIE1hdGgucG93KDEwLCB0aGlzLnRva2VuQ29uZmlnLmRlY2ltYWxQbGFjZXMpO1xuICB9XG59XG4iXX0=
|
package/dist/src/index.d.ts
CHANGED
package/dist/src/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,OAAO,CAAC;AACtB,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,OAAO,CAAC;AACtB,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC"}
|
package/dist/src/index.js
CHANGED
|
@@ -17,4 +17,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
17
17
|
__exportStar(require("./lib"), exports);
|
|
18
18
|
__exportStar(require("./canton"), exports);
|
|
19
19
|
__exportStar(require("./tcanton"), exports);
|
|
20
|
-
|
|
20
|
+
__exportStar(require("./register"), exports);
|
|
21
|
+
__exportStar(require("./cantonToken"), exports);
|
|
22
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLHdDQUFzQjtBQUN0QiwyQ0FBeUI7QUFDekIsNENBQTBCO0FBQzFCLDZDQUEyQjtBQUMzQixnREFBOEIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2xpYic7XG5leHBvcnQgKiBmcm9tICcuL2NhbnRvbic7XG5leHBvcnQgKiBmcm9tICcuL3RjYW50b24nO1xuZXhwb3J0ICogZnJvbSAnLi9yZWdpc3Rlcic7XG5leHBvcnQgKiBmcm9tICcuL2NhbnRvblRva2VuJztcbiJdfQ==
|