@bitgo-beta/sdk-coin-canton 1.0.1-beta.82 → 1.0.1-beta.821

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (181) hide show
  1. package/dist/src/canton.d.ts +22 -1
  2. package/dist/src/canton.d.ts.map +1 -1
  3. package/dist/src/canton.js +293 -10
  4. package/dist/src/cantonToken.d.ts +19 -0
  5. package/dist/src/cantonToken.d.ts.map +1 -0
  6. package/dist/src/cantonToken.js +52 -0
  7. package/dist/src/index.d.ts +1 -0
  8. package/dist/src/index.d.ts.map +1 -1
  9. package/dist/src/index.js +2 -1
  10. package/dist/src/lib/allocationAllocateBuilder.d.ts +126 -0
  11. package/dist/src/lib/allocationAllocateBuilder.d.ts.map +1 -0
  12. package/dist/src/lib/allocationAllocateBuilder.js +248 -0
  13. package/dist/src/lib/allocationAllocateWithdrawnBuilder.d.ts +67 -0
  14. package/dist/src/lib/allocationAllocateWithdrawnBuilder.d.ts.map +1 -0
  15. package/dist/src/lib/allocationAllocateWithdrawnBuilder.js +130 -0
  16. package/dist/src/lib/allocationRejectBuilder.d.ts +51 -0
  17. package/dist/src/lib/allocationRejectBuilder.d.ts.map +1 -0
  18. package/dist/src/lib/allocationRejectBuilder.js +107 -0
  19. package/dist/src/lib/allocationRequestBuilder.d.ts +116 -0
  20. package/dist/src/lib/allocationRequestBuilder.d.ts.map +1 -0
  21. package/dist/src/lib/allocationRequestBuilder.js +243 -0
  22. package/dist/src/lib/amount.d.ts +8 -0
  23. package/dist/src/lib/amount.d.ts.map +1 -0
  24. package/dist/src/lib/amount.js +33 -0
  25. package/dist/src/lib/cantonCommandBuilder.d.ts +72 -0
  26. package/dist/src/lib/cantonCommandBuilder.d.ts.map +1 -0
  27. package/dist/src/lib/cantonCommandBuilder.js +173 -0
  28. package/dist/src/lib/clearSigning.d.ts +58 -0
  29. package/dist/src/lib/clearSigning.d.ts.map +1 -0
  30. package/dist/src/lib/clearSigning.js +66 -0
  31. package/dist/src/lib/cosignDelegationAcceptBuilder.d.ts +56 -0
  32. package/dist/src/lib/cosignDelegationAcceptBuilder.d.ts.map +1 -0
  33. package/dist/src/lib/cosignDelegationAcceptBuilder.js +112 -0
  34. package/dist/src/lib/cosignDelegationProposalBuilder.d.ts +60 -0
  35. package/dist/src/lib/cosignDelegationProposalBuilder.d.ts.map +1 -0
  36. package/dist/src/lib/cosignDelegationProposalBuilder.js +111 -0
  37. package/dist/src/lib/endInvestorOnboardingOfferBuilder.d.ts +58 -0
  38. package/dist/src/lib/endInvestorOnboardingOfferBuilder.d.ts.map +1 -0
  39. package/dist/src/lib/endInvestorOnboardingOfferBuilder.js +112 -0
  40. package/dist/src/lib/iface.d.ts +141 -2
  41. package/dist/src/lib/iface.d.ts.map +1 -1
  42. package/dist/src/lib/iface.js +3 -1
  43. package/dist/src/lib/index.d.ts +13 -0
  44. package/dist/src/lib/index.d.ts.map +1 -1
  45. package/dist/src/lib/index.js +29 -2
  46. package/dist/src/lib/messages/cantonBaseMessage.d.ts +16 -0
  47. package/dist/src/lib/messages/cantonBaseMessage.d.ts.map +1 -0
  48. package/dist/src/lib/messages/cantonBaseMessage.js +28 -0
  49. package/dist/src/lib/messages/cantonSignTopology/cantonSignTopologyMessage.d.ts +14 -0
  50. package/dist/src/lib/messages/cantonSignTopology/cantonSignTopologyMessage.d.ts.map +1 -0
  51. package/dist/src/lib/messages/cantonSignTopology/cantonSignTopologyMessage.js +23 -0
  52. package/dist/src/lib/messages/cantonSignTopology/cantonSignTopologyMessageBuilder.d.ts +17 -0
  53. package/dist/src/lib/messages/cantonSignTopology/cantonSignTopologyMessageBuilder.d.ts.map +1 -0
  54. package/dist/src/lib/messages/cantonSignTopology/cantonSignTopologyMessageBuilder.js +25 -0
  55. package/dist/src/lib/messages/cantonSignTopology/index.d.ts +3 -0
  56. package/dist/src/lib/messages/cantonSignTopology/index.d.ts.map +1 -0
  57. package/dist/src/lib/messages/cantonSignTopology/index.js +19 -0
  58. package/dist/src/lib/messages/cantonSignTransaction/cantonSignTransactionMessage.d.ts +13 -0
  59. package/dist/src/lib/messages/cantonSignTransaction/cantonSignTransactionMessage.d.ts.map +1 -0
  60. package/dist/src/lib/messages/cantonSignTransaction/cantonSignTransactionMessage.js +22 -0
  61. package/dist/src/lib/messages/cantonSignTransaction/cantonSignTransactionMessageBuilder.d.ts +14 -0
  62. package/dist/src/lib/messages/cantonSignTransaction/cantonSignTransactionMessageBuilder.d.ts.map +1 -0
  63. package/dist/src/lib/messages/cantonSignTransaction/cantonSignTransactionMessageBuilder.js +22 -0
  64. package/dist/src/lib/messages/cantonSignTransaction/index.d.ts +3 -0
  65. package/dist/src/lib/messages/cantonSignTransaction/index.d.ts.map +1 -0
  66. package/dist/src/lib/messages/cantonSignTransaction/index.js +19 -0
  67. package/dist/src/lib/messages/index.d.ts +5 -0
  68. package/dist/src/lib/messages/index.d.ts.map +1 -0
  69. package/dist/src/lib/messages/index.js +21 -0
  70. package/dist/src/lib/messages/messageBuilderFactory.d.ts +7 -0
  71. package/dist/src/lib/messages/messageBuilderFactory.d.ts.map +1 -0
  72. package/dist/src/lib/messages/messageBuilderFactory.js +23 -0
  73. package/dist/src/lib/oneStepPreApprovalBuilder.d.ts +8 -0
  74. package/dist/src/lib/oneStepPreApprovalBuilder.d.ts.map +1 -1
  75. package/dist/src/lib/oneStepPreApprovalBuilder.js +15 -1
  76. package/dist/src/lib/resourcesInterface.d.ts +1 -1
  77. package/dist/src/lib/resourcesInterface.d.ts.map +1 -1
  78. package/dist/src/lib/resourcesInterface.js +1 -1
  79. package/dist/src/lib/transaction/transaction.d.ts +17 -1
  80. package/dist/src/lib/transaction/transaction.d.ts.map +1 -1
  81. package/dist/src/lib/transaction/transaction.js +307 -16
  82. package/dist/src/lib/transactionBuilderFactory.d.ts +22 -0
  83. package/dist/src/lib/transactionBuilderFactory.d.ts.map +1 -1
  84. package/dist/src/lib/transactionBuilderFactory.js +78 -1
  85. package/dist/src/lib/transferAcknowledgeBuilder.d.ts +4 -4
  86. package/dist/src/lib/transferAcknowledgeBuilder.d.ts.map +1 -1
  87. package/dist/src/lib/transferAcknowledgeBuilder.js +5 -7
  88. package/dist/src/lib/transferBuilder.d.ts +84 -2
  89. package/dist/src/lib/transferBuilder.d.ts.map +1 -1
  90. package/dist/src/lib/transferBuilder.js +164 -2
  91. package/dist/src/lib/transferOfferWithdrawnBuilder.d.ts +67 -0
  92. package/dist/src/lib/transferOfferWithdrawnBuilder.d.ts.map +1 -0
  93. package/dist/src/lib/transferOfferWithdrawnBuilder.js +130 -0
  94. package/dist/src/lib/transferPreapprovalCancelBuilder.d.ts +68 -0
  95. package/dist/src/lib/transferPreapprovalCancelBuilder.d.ts.map +1 -0
  96. package/dist/src/lib/transferPreapprovalCancelBuilder.js +124 -0
  97. package/dist/src/lib/utils.d.ts +45 -3
  98. package/dist/src/lib/utils.d.ts.map +1 -1
  99. package/dist/src/lib/utils.js +776 -66
  100. package/dist/src/lib/walletInitBuilder.d.ts +2 -1
  101. package/dist/src/lib/walletInitBuilder.d.ts.map +1 -1
  102. package/dist/src/lib/walletInitBuilder.js +4 -1
  103. package/dist/src/lib/walletInitialization/walletInitTransaction.d.ts +2 -1
  104. package/dist/src/lib/walletInitialization/walletInitTransaction.d.ts.map +1 -1
  105. package/dist/src/lib/walletInitialization/walletInitTransaction.js +14 -1
  106. package/dist/src/register.d.ts +2 -0
  107. package/dist/src/register.d.ts.map +1 -1
  108. package/dist/src/register.js +19 -2
  109. package/dist/test/helper.d.ts +3 -0
  110. package/dist/test/helper.d.ts.map +1 -0
  111. package/dist/test/helper.js +9 -0
  112. package/dist/test/integration/canton.integration.d.ts +2 -0
  113. package/dist/test/integration/canton.integration.d.ts.map +1 -0
  114. package/dist/test/integration/canton.integration.js +157 -0
  115. package/dist/test/integration/canton.token.integration.d.ts +2 -0
  116. package/dist/test/integration/canton.token.integration.d.ts.map +1 -0
  117. package/dist/test/integration/canton.token.integration.js +51 -0
  118. package/dist/test/resources.d.ts +263 -2
  119. package/dist/test/resources.d.ts.map +1 -1
  120. package/dist/test/resources.js +269 -7
  121. package/dist/test/unit/builder/allocationAllocate/allocationAllocateBuilder.d.ts +2 -0
  122. package/dist/test/unit/builder/allocationAllocate/allocationAllocateBuilder.d.ts.map +1 -0
  123. package/dist/test/unit/builder/allocationAllocate/allocationAllocateBuilder.js +368 -0
  124. package/dist/test/unit/builder/allocationAllocateWithdrawn/allocationAllocateWithdrawnBuilder.d.ts +2 -0
  125. package/dist/test/unit/builder/allocationAllocateWithdrawn/allocationAllocateWithdrawnBuilder.d.ts.map +1 -0
  126. package/dist/test/unit/builder/allocationAllocateWithdrawn/allocationAllocateWithdrawnBuilder.js +133 -0
  127. package/dist/test/unit/builder/allocationReject/allocationRejectBuilder.d.ts +2 -0
  128. package/dist/test/unit/builder/allocationReject/allocationRejectBuilder.d.ts.map +1 -0
  129. package/dist/test/unit/builder/allocationReject/allocationRejectBuilder.js +121 -0
  130. package/dist/test/unit/builder/allocationRequest/allocationRequestBuilder.d.ts +2 -0
  131. package/dist/test/unit/builder/allocationRequest/allocationRequestBuilder.d.ts.map +1 -0
  132. package/dist/test/unit/builder/allocationRequest/allocationRequestBuilder.js +437 -0
  133. package/dist/test/unit/builder/cantonCommand/cantonCommandBuilder.d.ts +2 -0
  134. package/dist/test/unit/builder/cantonCommand/cantonCommandBuilder.d.ts.map +1 -0
  135. package/dist/test/unit/builder/cantonCommand/cantonCommandBuilder.js +340 -0
  136. package/dist/test/unit/builder/cosignDelegationAccept/cosignDelegationAcceptBuilder.d.ts +2 -0
  137. package/dist/test/unit/builder/cosignDelegationAccept/cosignDelegationAcceptBuilder.d.ts.map +1 -0
  138. package/dist/test/unit/builder/cosignDelegationAccept/cosignDelegationAcceptBuilder.js +116 -0
  139. package/dist/test/unit/builder/cosignDelegationProposal/cosignDelegationProposalBuilder.d.ts +2 -0
  140. package/dist/test/unit/builder/cosignDelegationProposal/cosignDelegationProposalBuilder.d.ts.map +1 -0
  141. package/dist/test/unit/builder/cosignDelegationProposal/cosignDelegationProposalBuilder.js +74 -0
  142. package/dist/test/unit/builder/endInvestorOnboardingOffer/endInvestorOnboardingOfferBuilder.d.ts +2 -0
  143. package/dist/test/unit/builder/endInvestorOnboardingOffer/endInvestorOnboardingOfferBuilder.d.ts.map +1 -0
  144. package/dist/test/unit/builder/endInvestorOnboardingOffer/endInvestorOnboardingOfferBuilder.js +116 -0
  145. package/dist/test/unit/builder/oneStepEnablement/oneStepEnablementBuilder.js +20 -1
  146. package/dist/test/unit/builder/transfer/transferBuilder.d.ts +2 -0
  147. package/dist/test/unit/builder/transfer/transferBuilder.d.ts.map +1 -0
  148. package/dist/test/unit/builder/transfer/transferBuilder.js +100 -0
  149. package/dist/test/unit/builder/transferAccept/transferAcceptBuilder.js +65 -1
  150. package/dist/test/unit/builder/transferAcknowledge/transferAcknowledgeBuilder.js +34 -1
  151. package/dist/test/unit/builder/transferOfferWithdrawn/transferOfferWithdrawnBuilder.d.ts +2 -0
  152. package/dist/test/unit/builder/transferOfferWithdrawn/transferOfferWithdrawnBuilder.d.ts.map +1 -0
  153. package/dist/test/unit/builder/transferOfferWithdrawn/transferOfferWithdrawnBuilder.js +64 -0
  154. package/dist/test/unit/builder/transferPreapprovalCancel/transferPreapprovalCancelBuilder.d.ts +2 -0
  155. package/dist/test/unit/builder/transferPreapprovalCancel/transferPreapprovalCancelBuilder.d.ts.map +1 -0
  156. package/dist/test/unit/builder/transferPreapprovalCancel/transferPreapprovalCancelBuilder.js +74 -0
  157. package/dist/test/unit/builder/transferReject/transferRejectBuilder.js +41 -1
  158. package/dist/test/unit/canton.d.ts +2 -0
  159. package/dist/test/unit/canton.d.ts.map +1 -0
  160. package/dist/test/unit/canton.js +853 -0
  161. package/dist/test/unit/index.d.ts +5 -0
  162. package/dist/test/unit/index.d.ts.map +1 -1
  163. package/dist/test/unit/index.js +6 -1
  164. package/dist/test/unit/messages/cantonSignTopologyMessage.d.ts +2 -0
  165. package/dist/test/unit/messages/cantonSignTopologyMessage.d.ts.map +1 -0
  166. package/dist/test/unit/messages/cantonSignTopologyMessage.js +46 -0
  167. package/dist/test/unit/messages/cantonSignTransactionMessage.d.ts +2 -0
  168. package/dist/test/unit/messages/cantonSignTransactionMessage.d.ts.map +1 -0
  169. package/dist/test/unit/messages/cantonSignTransactionMessage.js +48 -0
  170. package/dist/test/unit/messages/clearSigning.d.ts +2 -0
  171. package/dist/test/unit/messages/clearSigning.d.ts.map +1 -0
  172. package/dist/test/unit/messages/clearSigning.js +72 -0
  173. package/dist/test/unit/messages/messageBuilderFactory.d.ts +2 -0
  174. package/dist/test/unit/messages/messageBuilderFactory.d.ts.map +1 -0
  175. package/dist/test/unit/messages/messageBuilderFactory.js +52 -0
  176. package/dist/test/unit/register.d.ts +2 -0
  177. package/dist/test/unit/register.d.ts.map +1 -0
  178. package/dist/test/unit/register.js +65 -0
  179. package/dist/test/unit/utils.js +389 -9
  180. package/dist/tsconfig.tsbuildinfo +1 -1
  181. package/package.json +8 -8
@@ -0,0 +1,437 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const assert_1 = __importDefault(require("assert"));
7
+ const should_1 = __importDefault(require("should"));
8
+ const statics_1 = require("@bitgo-beta/statics");
9
+ const src_1 = require("../../../../src");
10
+ const updateId = '12205b0b024b6f72c5484696271e8e87d7c1e0cc7bed5e9c901088b41ebe97a09a43';
11
+ const operatorId = 'treasury-tokenization-1::1220906cb6b369890324880c977a44d10e91b70b4cc9abe62d031bdafcf5dabecf89';
12
+ const contractId = '0020108b7aee0e0215538668a7ebb00e7e811135ff2ebf23137760056e077b9347ca121220dfa25cd905caba01345b515d1002af94b0ba2a9c2e9a6751c07ed28795454a9e';
13
+ const tradeId = 'CASH-TRADE-662AA1BA';
14
+ const transferLegId = 'CASH-TRADE-662AA1BA-security-leg';
15
+ const senderPartyId = 'ravi-2-step-party-new::122092e7d33ac10c0f3d55976342f37555df05da5b742956d56a62ae2367769079d2';
16
+ const receiverPartyId = 'ravi-2-step-party::122092e7d33ac10c0f3d55976342f37555df05da5b742956d56a62ae2367769079d2';
17
+ const amount = 70;
18
+ const token = 'tcanton:testtoken';
19
+ const receiveToken = 'tcanton:testcoin1';
20
+ const receiveAmount = 80;
21
+ const allocateBefore = '2026-05-06T16:46:17.184609Z';
22
+ const settleBefore = '2026-05-07T16:46:17.184609Z';
23
+ const comment = 'security leg allocation';
24
+ // Helper to set all required fields on a builder
25
+ function buildWithAllRequired(txBuilder) {
26
+ return txBuilder
27
+ .updateId(updateId)
28
+ .operatorId(operatorId)
29
+ .contractId(contractId)
30
+ .tradeId(tradeId)
31
+ .transferLegId(transferLegId)
32
+ .senderPartyId(senderPartyId)
33
+ .receiverPartyId(receiverPartyId)
34
+ .amount(amount)
35
+ .token(token)
36
+ .receiveToken(receiveToken)
37
+ .receiveAmount(receiveAmount)
38
+ .allocateBefore(allocateBefore)
39
+ .settleBefore(settleBefore);
40
+ }
41
+ describe('AllocationRequest Builder', () => {
42
+ it('should build the allocation request object with all fields', function () {
43
+ const txBuilder = new src_1.AllocationRequestBuilder(statics_1.coins.get('tcanton'));
44
+ const tx = new src_1.Transaction(statics_1.coins.get('tcanton'));
45
+ txBuilder.initBuilder(tx);
46
+ buildWithAllRequired(txBuilder).comment(comment);
47
+ const requestObj = txBuilder.toRequestObject();
48
+ should_1.default.exist(requestObj);
49
+ assert_1.default.equal(requestObj.updateId, updateId);
50
+ assert_1.default.equal(requestObj.operatorId, operatorId);
51
+ assert_1.default.equal(requestObj.contractId, contractId);
52
+ assert_1.default.equal(requestObj.tradeId, tradeId);
53
+ assert_1.default.equal(requestObj.transferLegId, transferLegId);
54
+ assert_1.default.equal(requestObj.senderPartyId, senderPartyId);
55
+ assert_1.default.equal(requestObj.receiverPartyId, receiverPartyId);
56
+ assert_1.default.equal(requestObj.amount, amount);
57
+ assert_1.default.equal(requestObj.token, token);
58
+ assert_1.default.equal(requestObj.receiveToken, receiveToken);
59
+ assert_1.default.equal(requestObj.receiveAmount, receiveAmount);
60
+ assert_1.default.equal(requestObj.allocateBefore, allocateBefore);
61
+ assert_1.default.equal(requestObj.settleBefore, settleBefore);
62
+ assert_1.default.equal(requestObj.comment, comment);
63
+ });
64
+ it('should preserve large allocation amounts through serialized request data', function () {
65
+ const txBuilder = new src_1.AllocationRequestBuilder(statics_1.coins.get('tcanton'));
66
+ const tx = new src_1.Transaction(statics_1.coins.get('tcanton'));
67
+ txBuilder.initBuilder(tx);
68
+ const amount = '36868615888941900';
69
+ const receiveAmount = '123456789012345678901234567890';
70
+ txBuilder
71
+ .updateId(updateId)
72
+ .operatorId(operatorId)
73
+ .contractId(contractId)
74
+ .tradeId(tradeId)
75
+ .transferLegId(transferLegId)
76
+ .senderPartyId(senderPartyId)
77
+ .receiverPartyId(receiverPartyId)
78
+ .amount(amount)
79
+ .token(token)
80
+ .receiveToken(receiveToken)
81
+ .receiveAmount(receiveAmount)
82
+ .allocateBefore(allocateBefore)
83
+ .settleBefore(settleBefore);
84
+ const requestObj = txBuilder.toRequestObject();
85
+ assert_1.default.strictEqual(requestObj.amount, amount);
86
+ assert_1.default.strictEqual(requestObj.receiveAmount, receiveAmount);
87
+ tx.allocationRequestData = requestObj;
88
+ const parsedTx = new src_1.Transaction(statics_1.coins.get('tcanton'));
89
+ parsedTx.fromRawTransaction(tx.toBroadcastFormat());
90
+ const parsedData = parsedTx.toJson().allocationRequestData;
91
+ assert_1.default.strictEqual(parsedData?.amount, amount);
92
+ assert_1.default.strictEqual(parsedData?.receiveAmount, receiveAmount);
93
+ });
94
+ it('should build the allocation request object without optional comment', function () {
95
+ const txBuilder = new src_1.AllocationRequestBuilder(statics_1.coins.get('tcanton'));
96
+ const tx = new src_1.Transaction(statics_1.coins.get('tcanton'));
97
+ txBuilder.initBuilder(tx);
98
+ buildWithAllRequired(txBuilder);
99
+ const requestObj = txBuilder.toRequestObject();
100
+ should_1.default.exist(requestObj);
101
+ assert_1.default.equal(requestObj.comment, undefined);
102
+ });
103
+ it('should set the transaction id to the updateId', function () {
104
+ const txBuilder = new src_1.AllocationRequestBuilder(statics_1.coins.get('tcanton'));
105
+ const tx = new src_1.Transaction(statics_1.coins.get('tcanton'));
106
+ txBuilder.initBuilder(tx);
107
+ txBuilder.updateId(updateId);
108
+ assert_1.default.equal(tx.id, updateId);
109
+ });
110
+ // --- missing required field tests ---
111
+ it('should throw if updateId is missing', function () {
112
+ const txBuilder = new src_1.AllocationRequestBuilder(statics_1.coins.get('tcanton'));
113
+ txBuilder.initBuilder(new src_1.Transaction(statics_1.coins.get('tcanton')));
114
+ txBuilder
115
+ .operatorId(operatorId)
116
+ .contractId(contractId)
117
+ .tradeId(tradeId)
118
+ .transferLegId(transferLegId)
119
+ .senderPartyId(senderPartyId)
120
+ .receiverPartyId(receiverPartyId)
121
+ .amount(amount)
122
+ .token(token)
123
+ .receiveToken(receiveToken)
124
+ .receiveAmount(receiveAmount)
125
+ .allocateBefore(allocateBefore)
126
+ .settleBefore(settleBefore);
127
+ assert_1.default.throws(() => txBuilder.toRequestObject(), /updateId is missing/);
128
+ });
129
+ it('should throw if operatorId is missing', function () {
130
+ const txBuilder = new src_1.AllocationRequestBuilder(statics_1.coins.get('tcanton'));
131
+ txBuilder.initBuilder(new src_1.Transaction(statics_1.coins.get('tcanton')));
132
+ txBuilder
133
+ .updateId(updateId)
134
+ .contractId(contractId)
135
+ .tradeId(tradeId)
136
+ .transferLegId(transferLegId)
137
+ .senderPartyId(senderPartyId)
138
+ .receiverPartyId(receiverPartyId)
139
+ .amount(amount)
140
+ .token(token)
141
+ .receiveToken(receiveToken)
142
+ .receiveAmount(receiveAmount)
143
+ .allocateBefore(allocateBefore)
144
+ .settleBefore(settleBefore);
145
+ assert_1.default.throws(() => txBuilder.toRequestObject(), /operatorId is missing/);
146
+ });
147
+ it('should throw if contractId is missing', function () {
148
+ const txBuilder = new src_1.AllocationRequestBuilder(statics_1.coins.get('tcanton'));
149
+ txBuilder.initBuilder(new src_1.Transaction(statics_1.coins.get('tcanton')));
150
+ txBuilder
151
+ .updateId(updateId)
152
+ .operatorId(operatorId)
153
+ .tradeId(tradeId)
154
+ .transferLegId(transferLegId)
155
+ .senderPartyId(senderPartyId)
156
+ .receiverPartyId(receiverPartyId)
157
+ .amount(amount)
158
+ .token(token)
159
+ .receiveToken(receiveToken)
160
+ .receiveAmount(receiveAmount)
161
+ .allocateBefore(allocateBefore)
162
+ .settleBefore(settleBefore);
163
+ assert_1.default.throws(() => txBuilder.toRequestObject(), /contractId is missing/);
164
+ });
165
+ it('should throw if tradeId is missing', function () {
166
+ const txBuilder = new src_1.AllocationRequestBuilder(statics_1.coins.get('tcanton'));
167
+ txBuilder.initBuilder(new src_1.Transaction(statics_1.coins.get('tcanton')));
168
+ txBuilder
169
+ .updateId(updateId)
170
+ .operatorId(operatorId)
171
+ .contractId(contractId)
172
+ .transferLegId(transferLegId)
173
+ .senderPartyId(senderPartyId)
174
+ .receiverPartyId(receiverPartyId)
175
+ .amount(amount)
176
+ .token(token)
177
+ .receiveToken(receiveToken)
178
+ .receiveAmount(receiveAmount)
179
+ .allocateBefore(allocateBefore)
180
+ .settleBefore(settleBefore);
181
+ assert_1.default.throws(() => txBuilder.toRequestObject(), /tradeId is missing/);
182
+ });
183
+ it('should throw if transferLegId is missing', function () {
184
+ const txBuilder = new src_1.AllocationRequestBuilder(statics_1.coins.get('tcanton'));
185
+ txBuilder.initBuilder(new src_1.Transaction(statics_1.coins.get('tcanton')));
186
+ txBuilder
187
+ .updateId(updateId)
188
+ .operatorId(operatorId)
189
+ .contractId(contractId)
190
+ .tradeId(tradeId)
191
+ .senderPartyId(senderPartyId)
192
+ .receiverPartyId(receiverPartyId)
193
+ .amount(amount)
194
+ .token(token)
195
+ .receiveToken(receiveToken)
196
+ .receiveAmount(receiveAmount)
197
+ .allocateBefore(allocateBefore)
198
+ .settleBefore(settleBefore);
199
+ assert_1.default.throws(() => txBuilder.toRequestObject(), /transferLegId is missing/);
200
+ });
201
+ it('should throw if senderPartyId is missing', function () {
202
+ const txBuilder = new src_1.AllocationRequestBuilder(statics_1.coins.get('tcanton'));
203
+ txBuilder.initBuilder(new src_1.Transaction(statics_1.coins.get('tcanton')));
204
+ txBuilder
205
+ .updateId(updateId)
206
+ .operatorId(operatorId)
207
+ .contractId(contractId)
208
+ .tradeId(tradeId)
209
+ .transferLegId(transferLegId)
210
+ .receiverPartyId(receiverPartyId)
211
+ .amount(amount)
212
+ .token(token)
213
+ .receiveToken(receiveToken)
214
+ .receiveAmount(receiveAmount)
215
+ .allocateBefore(allocateBefore)
216
+ .settleBefore(settleBefore);
217
+ assert_1.default.throws(() => txBuilder.toRequestObject(), /senderPartyId is missing/);
218
+ });
219
+ it('should throw if receiverPartyId is missing', function () {
220
+ const txBuilder = new src_1.AllocationRequestBuilder(statics_1.coins.get('tcanton'));
221
+ txBuilder.initBuilder(new src_1.Transaction(statics_1.coins.get('tcanton')));
222
+ txBuilder
223
+ .updateId(updateId)
224
+ .operatorId(operatorId)
225
+ .contractId(contractId)
226
+ .tradeId(tradeId)
227
+ .transferLegId(transferLegId)
228
+ .senderPartyId(senderPartyId)
229
+ .amount(amount)
230
+ .token(token)
231
+ .receiveToken(receiveToken)
232
+ .receiveAmount(receiveAmount)
233
+ .allocateBefore(allocateBefore)
234
+ .settleBefore(settleBefore);
235
+ assert_1.default.throws(() => txBuilder.toRequestObject(), /receiverPartyId is missing/);
236
+ });
237
+ it('should throw if token is missing', function () {
238
+ const txBuilder = new src_1.AllocationRequestBuilder(statics_1.coins.get('tcanton'));
239
+ txBuilder.initBuilder(new src_1.Transaction(statics_1.coins.get('tcanton')));
240
+ txBuilder
241
+ .updateId(updateId)
242
+ .operatorId(operatorId)
243
+ .contractId(contractId)
244
+ .tradeId(tradeId)
245
+ .transferLegId(transferLegId)
246
+ .senderPartyId(senderPartyId)
247
+ .receiverPartyId(receiverPartyId)
248
+ .amount(amount)
249
+ .receiveToken(receiveToken)
250
+ .receiveAmount(receiveAmount)
251
+ .allocateBefore(allocateBefore)
252
+ .settleBefore(settleBefore);
253
+ assert_1.default.throws(() => txBuilder.toRequestObject(), /token is missing/);
254
+ });
255
+ it('should throw if receiveToken is missing', function () {
256
+ const txBuilder = new src_1.AllocationRequestBuilder(statics_1.coins.get('tcanton'));
257
+ txBuilder.initBuilder(new src_1.Transaction(statics_1.coins.get('tcanton')));
258
+ txBuilder
259
+ .updateId(updateId)
260
+ .operatorId(operatorId)
261
+ .contractId(contractId)
262
+ .tradeId(tradeId)
263
+ .transferLegId(transferLegId)
264
+ .senderPartyId(senderPartyId)
265
+ .receiverPartyId(receiverPartyId)
266
+ .amount(amount)
267
+ .token(token)
268
+ .receiveAmount(receiveAmount)
269
+ .allocateBefore(allocateBefore)
270
+ .settleBefore(settleBefore);
271
+ assert_1.default.throws(() => txBuilder.toRequestObject(), /receiveToken is missing/);
272
+ });
273
+ it('should throw if amount was never set', function () {
274
+ const txBuilder = new src_1.AllocationRequestBuilder(statics_1.coins.get('tcanton'));
275
+ txBuilder.initBuilder(new src_1.Transaction(statics_1.coins.get('tcanton')));
276
+ txBuilder
277
+ .updateId(updateId)
278
+ .operatorId(operatorId)
279
+ .contractId(contractId)
280
+ .tradeId(tradeId)
281
+ .transferLegId(transferLegId)
282
+ .senderPartyId(senderPartyId)
283
+ .receiverPartyId(receiverPartyId)
284
+ .token(token)
285
+ .receiveToken(receiveToken)
286
+ .receiveAmount(receiveAmount)
287
+ .allocateBefore(allocateBefore)
288
+ .settleBefore(settleBefore);
289
+ assert_1.default.throws(() => txBuilder.toRequestObject(), /amount is missing/);
290
+ });
291
+ it('should throw if receiveAmount was never set', function () {
292
+ const txBuilder = new src_1.AllocationRequestBuilder(statics_1.coins.get('tcanton'));
293
+ txBuilder.initBuilder(new src_1.Transaction(statics_1.coins.get('tcanton')));
294
+ txBuilder
295
+ .updateId(updateId)
296
+ .operatorId(operatorId)
297
+ .contractId(contractId)
298
+ .tradeId(tradeId)
299
+ .transferLegId(transferLegId)
300
+ .senderPartyId(senderPartyId)
301
+ .receiverPartyId(receiverPartyId)
302
+ .amount(amount)
303
+ .token(token)
304
+ .receiveToken(receiveToken)
305
+ .allocateBefore(allocateBefore)
306
+ .settleBefore(settleBefore);
307
+ assert_1.default.throws(() => txBuilder.toRequestObject(), /receiveAmount is missing/);
308
+ });
309
+ it('should throw if allocateBefore is missing', function () {
310
+ const txBuilder = new src_1.AllocationRequestBuilder(statics_1.coins.get('tcanton'));
311
+ txBuilder.initBuilder(new src_1.Transaction(statics_1.coins.get('tcanton')));
312
+ txBuilder
313
+ .updateId(updateId)
314
+ .operatorId(operatorId)
315
+ .contractId(contractId)
316
+ .tradeId(tradeId)
317
+ .transferLegId(transferLegId)
318
+ .senderPartyId(senderPartyId)
319
+ .receiverPartyId(receiverPartyId)
320
+ .amount(amount)
321
+ .token(token)
322
+ .receiveToken(receiveToken)
323
+ .receiveAmount(receiveAmount)
324
+ .settleBefore(settleBefore);
325
+ assert_1.default.throws(() => txBuilder.toRequestObject(), /allocateBefore is missing/);
326
+ });
327
+ it('should throw if settleBefore is missing', function () {
328
+ const txBuilder = new src_1.AllocationRequestBuilder(statics_1.coins.get('tcanton'));
329
+ txBuilder.initBuilder(new src_1.Transaction(statics_1.coins.get('tcanton')));
330
+ txBuilder
331
+ .updateId(updateId)
332
+ .operatorId(operatorId)
333
+ .contractId(contractId)
334
+ .tradeId(tradeId)
335
+ .transferLegId(transferLegId)
336
+ .senderPartyId(senderPartyId)
337
+ .receiverPartyId(receiverPartyId)
338
+ .amount(amount)
339
+ .token(token)
340
+ .receiveToken(receiveToken)
341
+ .receiveAmount(receiveAmount)
342
+ .allocateBefore(allocateBefore);
343
+ assert_1.default.throws(() => txBuilder.toRequestObject(), /settleBefore is missing/);
344
+ });
345
+ // --- invalid setter argument tests ---
346
+ it('should throw if updateId is an empty string', function () {
347
+ const txBuilder = new src_1.AllocationRequestBuilder(statics_1.coins.get('tcanton'));
348
+ assert_1.default.throws(() => txBuilder.updateId(''), /updateId must be a non-empty string/);
349
+ });
350
+ it('should throw if operatorId is an empty string', function () {
351
+ const txBuilder = new src_1.AllocationRequestBuilder(statics_1.coins.get('tcanton'));
352
+ assert_1.default.throws(() => txBuilder.operatorId(''), /operatorId must be a non-empty string/);
353
+ });
354
+ it('should throw if contractId is an empty string', function () {
355
+ const txBuilder = new src_1.AllocationRequestBuilder(statics_1.coins.get('tcanton'));
356
+ assert_1.default.throws(() => txBuilder.contractId(''), /contractId must be a non-empty string/);
357
+ });
358
+ it('should accept null contractId and omit it from the request object', function () {
359
+ const txBuilder = new src_1.AllocationRequestBuilder(statics_1.coins.get('tcanton'));
360
+ const tx = new src_1.Transaction(statics_1.coins.get('tcanton'));
361
+ txBuilder.initBuilder(tx);
362
+ txBuilder
363
+ .updateId(updateId)
364
+ .operatorId(operatorId)
365
+ .contractId(null)
366
+ .tradeId(tradeId)
367
+ .transferLegId(transferLegId)
368
+ .senderPartyId(senderPartyId)
369
+ .receiverPartyId(receiverPartyId)
370
+ .amount(amount)
371
+ .token(token)
372
+ .receiveToken(receiveToken)
373
+ .receiveAmount(receiveAmount)
374
+ .allocateBefore(allocateBefore)
375
+ .settleBefore(settleBefore);
376
+ const requestObj = txBuilder.toRequestObject();
377
+ assert_1.default.equal(requestObj.contractId, undefined, 'contractId should be absent when set to null');
378
+ });
379
+ it('should throw if tradeId is an empty string', function () {
380
+ const txBuilder = new src_1.AllocationRequestBuilder(statics_1.coins.get('tcanton'));
381
+ assert_1.default.throws(() => txBuilder.tradeId(''), /tradeId must be a non-empty string/);
382
+ });
383
+ it('should throw if transferLegId is an empty string', function () {
384
+ const txBuilder = new src_1.AllocationRequestBuilder(statics_1.coins.get('tcanton'));
385
+ assert_1.default.throws(() => txBuilder.transferLegId(''), /transferLegId must be a non-empty string/);
386
+ });
387
+ it('should throw if senderPartyId is an empty string', function () {
388
+ const txBuilder = new src_1.AllocationRequestBuilder(statics_1.coins.get('tcanton'));
389
+ assert_1.default.throws(() => txBuilder.senderPartyId(''), /senderPartyId must be a non-empty string/);
390
+ });
391
+ it('should throw if receiverPartyId is an empty string', function () {
392
+ const txBuilder = new src_1.AllocationRequestBuilder(statics_1.coins.get('tcanton'));
393
+ assert_1.default.throws(() => txBuilder.receiverPartyId(''), /receiverPartyId must be a non-empty string/);
394
+ });
395
+ it('should throw if amount is zero', function () {
396
+ const txBuilder = new src_1.AllocationRequestBuilder(statics_1.coins.get('tcanton'));
397
+ assert_1.default.throws(() => txBuilder.amount(0), /amount must be a positive number/);
398
+ });
399
+ it('should throw if amount is negative', function () {
400
+ const txBuilder = new src_1.AllocationRequestBuilder(statics_1.coins.get('tcanton'));
401
+ assert_1.default.throws(() => txBuilder.amount(-5), /amount must be a positive number/);
402
+ });
403
+ it('should throw if token is an empty string', function () {
404
+ const txBuilder = new src_1.AllocationRequestBuilder(statics_1.coins.get('tcanton'));
405
+ assert_1.default.throws(() => txBuilder.token(''), /token must be a non-empty string/);
406
+ });
407
+ it('should throw if receiveToken is an empty string', function () {
408
+ const txBuilder = new src_1.AllocationRequestBuilder(statics_1.coins.get('tcanton'));
409
+ assert_1.default.throws(() => txBuilder.receiveToken(''), /receiveToken must be a non-empty string/);
410
+ });
411
+ it('should throw if receiveAmount is zero', function () {
412
+ const txBuilder = new src_1.AllocationRequestBuilder(statics_1.coins.get('tcanton'));
413
+ assert_1.default.throws(() => txBuilder.receiveAmount(0), /receiveAmount must be a positive number/);
414
+ });
415
+ it('should throw if receiveAmount is negative', function () {
416
+ const txBuilder = new src_1.AllocationRequestBuilder(statics_1.coins.get('tcanton'));
417
+ assert_1.default.throws(() => txBuilder.receiveAmount(-1), /receiveAmount must be a positive number/);
418
+ });
419
+ it('should throw if allocateBefore is an empty string', function () {
420
+ const txBuilder = new src_1.AllocationRequestBuilder(statics_1.coins.get('tcanton'));
421
+ assert_1.default.throws(() => txBuilder.allocateBefore(''), /allocateBefore must be a non-empty string/);
422
+ });
423
+ it('should throw if settleBefore is an empty string', function () {
424
+ const txBuilder = new src_1.AllocationRequestBuilder(statics_1.coins.get('tcanton'));
425
+ assert_1.default.throws(() => txBuilder.settleBefore(''), /settleBefore must be a non-empty string/);
426
+ });
427
+ // --- not-implemented methods ---
428
+ it('should throw on setTransaction', function () {
429
+ const txBuilder = new src_1.AllocationRequestBuilder(statics_1.coins.get('tcanton'));
430
+ assert_1.default.throws(() => txBuilder.setTransaction({}), /Not implemented/);
431
+ });
432
+ it('should throw on addSignature', function () {
433
+ const txBuilder = new src_1.AllocationRequestBuilder(statics_1.coins.get('tcanton'));
434
+ assert_1.default.throws(() => txBuilder.addSignature({}, Buffer.from('')), /Not implemented/);
435
+ });
436
+ });
437
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxsb2NhdGlvblJlcXVlc3RCdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vdGVzdC91bml0L2J1aWxkZXIvYWxsb2NhdGlvblJlcXVlc3QvYWxsb2NhdGlvblJlcXVlc3RCdWlsZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsb0RBQTRCO0FBQzVCLG9EQUE0QjtBQUU1QixpREFBNEM7QUFFNUMseUNBQXdFO0FBR3hFLE1BQU0sUUFBUSxHQUFHLHNFQUFzRSxDQUFDO0FBQ3hGLE1BQU0sVUFBVSxHQUFHLCtGQUErRixDQUFDO0FBQ25ILE1BQU0sVUFBVSxHQUNkLDRJQUE0SSxDQUFDO0FBQy9JLE1BQU0sT0FBTyxHQUFHLHFCQUFxQixDQUFDO0FBQ3RDLE1BQU0sYUFBYSxHQUFHLGtDQUFrQyxDQUFDO0FBQ3pELE1BQU0sYUFBYSxHQUFHLDZGQUE2RixDQUFDO0FBQ3BILE1BQU0sZUFBZSxHQUFHLHlGQUF5RixDQUFDO0FBQ2xILE1BQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQztBQUNsQixNQUFNLEtBQUssR0FBRyxtQkFBbUIsQ0FBQztBQUNsQyxNQUFNLFlBQVksR0FBRyxtQkFBbUIsQ0FBQztBQUN6QyxNQUFNLGFBQWEsR0FBRyxFQUFFLENBQUM7QUFDekIsTUFBTSxjQUFjLEdBQUcsNkJBQTZCLENBQUM7QUFDckQsTUFBTSxZQUFZLEdBQUcsNkJBQTZCLENBQUM7QUFDbkQsTUFBTSxPQUFPLEdBQUcseUJBQXlCLENBQUM7QUFFMUMsaURBQWlEO0FBQ2pELFNBQVMsb0JBQW9CLENBQUMsU0FBbUM7SUFDL0QsT0FBTyxTQUFTO1NBQ2IsUUFBUSxDQUFDLFFBQVEsQ0FBQztTQUNsQixVQUFVLENBQUMsVUFBVSxDQUFDO1NBQ3RCLFVBQVUsQ0FBQyxVQUFVLENBQUM7U0FDdEIsT0FBTyxDQUFDLE9BQU8sQ0FBQztTQUNoQixhQUFhLENBQUMsYUFBYSxDQUFDO1NBQzVCLGFBQWEsQ0FBQyxh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RyxFQUFFLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUMsRUFBRSwyQ0FBMkMsQ0FBQyxDQUFDO0lBQ2pHLENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLGlEQUFpRCxFQUFFO1FBQ3BELE1BQU0sU0FBUyxHQUFHLElBQUksOEJBQXdCLENBQUMsZUFBSyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO1FBQ3JFLGdCQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLEVBQUUseUNBQXlDLENBQUMsQ0FBQztJQUM3RixDQUFDLENBQUMsQ0FBQztJQUVILGtDQUFrQztJQUVsQyxFQUFFLENBQUMsZ0NBQWdDLEVBQUU7UUFDbkMsTUFBTSxTQUFTLEdBQUcsSUFBSSw4QkFBd0IsQ0FBQyxlQUFLLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7UUFDckUsZ0JBQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxFQUFTLENBQUMsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO0lBQzlFLENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLDhCQUE4QixFQUFFO1FBQ2pDLE1BQU0sU0FBUyxHQUFHLElBQUksOEJBQXdCLENBQUMsZUFBSyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO1FBQ3JFLGdCQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsRUFBUyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO0lBQzdGLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5pbXBvcnQgc2hvdWxkIGZyb20gJ3Nob3VsZCc7XG5cbmltcG9ydCB7IGNvaW5zIH0gZnJvbSAnQGJpdGdvLWJldGEvc3RhdGljcyc7XG5cbmltcG9ydCB7IEFsbG9jYXRpb25SZXF1ZXN0QnVpbGRlciwgVHJhbnNhY3Rpb24gfSBmcm9tICcuLi8uLi8uLi8uLi9zcmMnO1xuaW1wb3J0IHsgQWxsb2NhdGlvblJlcXVlc3QgfSBmcm9tICcuLi8uLi8uLi8uLi9zcmMvbGliL2lmYWNlJztcblxuY29uc3QgdXBkYXRlSWQgPSAnMTIyMDViMGIwMjRiNmY3MmM1NDg0Njk2MjcxZThlODdkN2MxZTBjYzdiZWQ1ZTljOTAxMDg4YjQxZWJlOTdhMDlhNDMnO1xuY29uc3Qgb3BlcmF0b3JJZCA9ICd0cmVhc3VyeS10b2tlbml6YXRpb24tMTo6MTIyMDkwNmNiNmIzNjk4OTAzMjQ4ODBjOTc3YTQ0ZDEwZTkxYjcwYjRjYzlhYmU2MmQwMzFiZGFmY2Y1ZGFiZWNmODknO1xuY29uc3QgY29udHJhY3RJZCA9XG4gICcwMDIwMTA4YjdhZWUwZTAyMTU1Mzg2NjhhN2ViYjAwZTdlODExMTM1ZmYyZWJmMjMxMzc3NjAwNTZlMDc3YjkzNDdjYTEyMTIyMGRmYTI1Y2Q5MDVjYWJhMDEzNDViNTE1ZDEwMDJhZjk0YjBiYTJhOWMyZTlhNjc1MWMwN2VkMjg3OTU0NTRhOWUnO1xuY29uc3QgdHJhZGVJZCA9ICdDQVNILVRSQURFLTY2MkFBMUJBJztcbmNvbnN0IHRyYW5zZmVyTGVnSWQgPSAnQ0FTSC1UUkFERS02NjJBQTFCQS1zZWN1cml0eS1sZWcnO1xuY29uc3Qgc2VuZGVyUGFydHlJZCA9ICdyYXZpLTItc3RlcC1wYXJ0eS1uZXc6OjEyMjA5MmU3ZDMzYWMxMGMwZjNkNTU5NzYzNDJmMzc1NTVkZjA1ZGE1Yjc0Mjk1NmQ1NmE2MmFlMjM2Nzc2OTA3OWQyJztcbmNvbnN0IHJlY2VpdmVyUGFydHlJZCA9ICdyYXZpLTItc3RlcC1wYXJ0eTo6MTIyMDkyZTdkMzNhYzEwYzBmM2Q1NTk3NjM0MmYzNzU1NWRmMDVkYTViNzQyOTU2ZDU2YTYyYWUyMzY3NzY5MDc5ZDInO1xuY29uc3QgYW1vdW50ID0gNzA7XG5jb25zdCB0b2tlbiA9ICd0Y2FudG9uOnRlc3R0b2tlbic7XG5jb25zdCByZWNlaXZlVG9rZW4gPSAndGNhbnRvbjp0ZXN0Y29pbjEnO1xuY29uc3QgcmVjZWl2ZUFtb3VudCA9IDgwO1xuY29uc3QgYWxsb2NhdGVCZWZvcmUgPSAnMjAyNi0wNS0wNlQxNjo0NjoxNy4xODQ2MDlaJztcbmNvbnN0IHNldHRsZUJlZm9yZSA9ICcyMDI2LTA1LTA3VDE2OjQ2OjE3LjE4NDYwOVonO1xuY29uc3QgY29tbWVudCA9ICdzZWN1cml0eSBsZWcgYWxsb2NhdGlvbic7XG5cbi8vIEhlbHBlciB0byBzZXQgYWxsIHJlcXVpcmVkIGZpZWxkcyBvbiBhIGJ1aWxkZXJcbmZ1bmN0aW9uIGJ1aWxkV2l0aEFsbFJlcXVpcmVkKHR4QnVpbGRlcjogQWxsb2NhdGlvblJlcXVlc3RCdWlsZGVyKTogQWxsb2NhdGlvblJlcXVlc3RCdWlsZGVyIHtcbiAgcmV0dXJuIHR4QnVpbGRlclxuICAgIC51cGRhdGVJZCh1cGRhdGVJZClcbiAgICAub3BlcmF0b3JJZChvcGVyYXRvcklkKVxuICAgIC5jb250cmFjdElkKGNvbnRyYWN0SWQpXG4gICAgLnRyYWRlSWQodHJhZGVJZClcbiAgICAudHJhbnNmZXJMZWdJZCh0cmFuc2ZlckxlZ0lkKVxuICAgIC5zZW5kZXJQYXJ0eUlkKHNlbmRlclBhcnR5SWQpXG4gICAgLnJlY2VpdmVyUGFydHlJZChyZWNlaXZlclBhcnR5SWQpXG4gICAgLmFtb3VudChhbW91bnQpXG4gICAgLnRva2VuKHRva2VuKVxuICAgIC5yZWNlaXZlVG9rZW4ocmVjZWl2ZVRva2VuKVxuICAgIC5yZWNlaXZlQW1vdW50KHJlY2VpdmVBbW91bnQpXG4gICAgLmFsbG9jYXRlQmVmb3JlKGFsbG9jYXRlQmVmb3JlKVxuICAgIC5zZXR0bGVCZWZvcmUoc2V0dGxlQmVmb3JlKTtcbn1cblxuZGVzY3JpYmUoJ0FsbG9jYXRpb25SZXF1ZXN0IEJ1aWxkZXInLCAoKSA9PiB7XG4gIGl0KCdzaG91bGQgYnVpbGQgdGhlIGFsbG9jYXRpb24gcmVxdWVzdCBvYmplY3Qgd2l0aCBhbGwgZmllbGRzJywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHR4QnVpbGRlciA9IG5ldyBBbGxvY2F0aW9uUmVxdWVzdEJ1aWxkZXIoY29pbnMuZ2V0KCd0Y2FudG9uJykpO1xuICAgIGNvbnN0IHR4ID0gbmV3IFRyYW5zYWN0aW9uKGNvaW5zLmdldCgndGNhbnRvbicpKTtcbiAgICB0eEJ1aWxkZXIuaW5pdEJ1aWxkZXIodHgpO1xuICAgIGJ1aWxkV2l0aEFsbFJlcXVpcmVkKHR4QnVpbGRlcikuY29tbWVudChjb21tZW50KTtcbiAgICBjb25zdCByZXF1ZXN0T2JqOiBBbGxvY2F0aW9uUmVxdWVzdCA9IHR4QnVpbGRlci50b1JlcXVlc3RPYmplY3QoKTtcbiAgICBzaG91bGQuZXhpc3QocmVxdWVzdE9iaik7XG4gICAgYXNzZXJ0LmVxdWFsKHJlcXVlc3RPYmoudXBkYXRlSWQsIHVwZGF0ZUlkKTtcbiAgICBhc3NlcnQuZXF1YWwocmVxdWVzdE9iai5vcGVyYXRvcklkLCBvcGVyYXRvcklkKTtcbiAgICBhc3NlcnQuZXF1YWwocmVxdWVzdE9iai5jb250cmFjdElkLCBjb250cmFjdElkKTtcbiAgICBhc3NlcnQuZXF1YWwocmVxdWVzdE9iai50cmFkZUlkLCB0cmFkZUlkKTtcbiAgICBhc3NlcnQuZXF1YWwocmVxdWVzdE9iai50cmFuc2ZlckxlZ0lkLCB0cmFuc2ZlckxlZ0lkKTtcbiAgICBhc3NlcnQuZXF1YWwocmVxdWVzdE9iai5zZW5kZXJQYXJ0eUlkLCBzZW5kZXJQYXJ0eUlkKTtcbiAgICBhc3NlcnQuZXF1YWwocmVxdWVzdE9iai5yZWNlaXZlclBhcnR5SWQsIHJlY2VpdmVyUGFydHlJZCk7XG4gICAgYXNzZXJ0LmVxdWFsKHJlcXVlc3RPYmouYW1vdW50LCBhbW91bnQpO1xuICAgIGFzc2VydC5lcXVhbChyZXF1ZXN0T2JqLnRva2VuLCB0b2tlbik7XG4gICAgYXNzZXJ0LmVxdWFsKHJlcXVlc3RPYmoucmVjZWl2ZVRva2VuLCByZWNlaXZlVG9rZW4pO1xuICAgIGFzc2VydC5lcXVhbChyZXF1ZXN0T2JqLnJlY2VpdmVBbW91bnQsIHJlY2VpdmVBbW91bnQpO1xuICAgIGFzc2VydC5lcXVhbChyZXF1ZXN0T2JqLmFsbG9jYXRlQmVmb3JlLCBhbGxvY2F0ZUJlZm9yZSk7XG4gICAgYXNzZXJ0LmVxdWFsKHJlcXVlc3RPYmouc2V0dGxlQmVmb3JlLCBzZXR0bGVCZWZvcmUpO1xuICAgIGFzc2VydC5lcXVhbChyZXF1ZXN0T2JqLmNvbW1lbnQsIGNvbW1lbnQpO1xuICB9KTtcbiAgaXQoJ3Nob3VsZCBwcmVzZXJ2ZSBsYXJnZSBhbGxvY2F0aW9uIGFtb3VudHMgdGhyb3VnaCBzZXJpYWxpemVkIHJlcXVlc3QgZGF0YScsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCB0eEJ1aWxkZXIgPSBuZXcgQWxsb2NhdGlvblJlcXVlc3RCdWlsZGVyKGNvaW5zLmdldCgndGNhbnRvbicpKTtcbiAgICBjb25zdCB0eCA9IG5ldyBUcmFuc2FjdGlvbihjb2lucy5nZXQoJ3RjYW50b24nKSk7XG4gICAgdHhCdWlsZGVyLmluaXRCdWlsZGVyKHR4KTtcbiAgICBjb25zdCBhbW91bnQgPSAnMzY4Njg2MTU4ODg5NDE5MDAnO1xuICAgIGNvbnN0IHJlY2VpdmVBbW91bnQgPSAnMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwJztcbiAgICB0eEJ1aWxkZXJcbiAgICAgIC51cGRhdGVJZCh1cGRhdGVJZClcbiAgICAgIC5vcGVyYXRvcklkKG9wZXJhdG9ySWQpXG4gICAgICAuY29udHJhY3RJZChjb250cmFjdElkKVxuICAgICAgLnRyYWRlSWQodHJhZGVJZClcbiAgICAgIC50cmFuc2ZlckxlZ0lkKHRyYW5zZmVyTGVnSWQpXG4gICAgICAuc2VuZGVyUGFydHlJZChzZW5kZXJQYXJ0eUlkKVxuICAgICAgLnJlY2VpdmVyUGFydHlJZChyZWNlaXZlclBhcnR5SWQpXG4gICAgICAuYW1vdW50KGFtb3VudClcbiAgICAgIC50b2tlbih0b2tlbilcbiAgICAgIC5yZWNlaXZlVG9rZW4ocmVjZWl2ZVRva2VuKVxuICAgICAgLnJlY2VpdmVBbW91bnQocmVjZWl2ZUFtb3VudClcbiAgICAgIC5hbGxvY2F0ZUJlZm9yZShhbGxvY2F0ZUJlZm9yZSlcbiAgICAgIC5zZXR0bGVCZWZvcmUoc2V0dGxlQmVmb3JlKTtcblxuICAgIGNvbnN0IHJlcXVlc3RPYmogPSB0eEJ1aWxkZXIudG9SZXF1ZXN0T2JqZWN0KCk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlcXVlc3RPYmouYW1vdW50LCBhbW91bnQpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXF1ZXN0T2JqLnJlY2VpdmVBbW91bnQsIHJlY2VpdmVBbW91bnQpO1xuICAgIHR4LmFsbG9jYXRpb25SZXF1ZXN0RGF0YSA9IHJlcXVlc3RPYmo7XG5cbiAgICBjb25zdCBwYXJzZWRUeCA9IG5ldyBUcmFuc2FjdGlvbihjb2lucy5nZXQoJ3RjYW50b24nKSk7XG4gICAgcGFyc2VkVHguZnJvbVJhd1RyYW5zYWN0aW9uKHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCkpO1xuICAgIGNvbnN0IHBhcnNlZERhdGEgPSBwYXJzZWRUeC50b0pzb24oKS5hbGxvY2F0aW9uUmVxdWVzdERhdGE7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHBhcnNlZERhdGE/LmFtb3VudCwgYW1vdW50KTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwocGFyc2VkRGF0YT8ucmVjZWl2ZUFtb3VudCwgcmVjZWl2ZUFtb3VudCk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgYnVpbGQgdGhlIGFsbG9jYXRpb24gcmVxdWVzdCBvYmplY3Qgd2l0aG91dCBvcHRpb25hbCBjb21tZW50JywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHR4QnVpbGRlciA9IG5ldyBBbGxvY2F0aW9uUmVxdWVzdEJ1aWxkZXIoY29pbnMuZ2V0KCd0Y2FudG9uJykpO1xuICAgIGNvbnN0IHR4ID0gbmV3IFRyYW5zYWN0aW9uKGNvaW5zLmdldCgndGNhbnRvbicpKTtcbiAgICB0eEJ1aWxkZXIuaW5pdEJ1aWxkZXIodHgpO1xuICAgIGJ1aWxkV2l0aEFsbFJlcXVpcmVkKHR4QnVpbGRlcik7XG4gICAgY29uc3QgcmVxdWVzdE9iajogQWxsb2NhdGlvblJlcXVlc3QgPSB0eEJ1aWxkZXIudG9SZXF1ZXN0T2JqZWN0KCk7XG4gICAgc2hvdWxkLmV4aXN0KHJlcXVlc3RPYmopO1xuICAgIGFzc2VydC5lcXVhbChyZXF1ZXN0T2JqLmNvbW1lbnQsIHVuZGVmaW5lZCk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgc2V0IHRoZSB0cmFuc2FjdGlvbiBpZCB0byB0aGUgdXBkYXRlSWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgdHhCdWlsZGVyID0gbmV3IEFsbG9jYXRpb25SZXF1ZXN0QnVpbGRlcihjb2lucy5nZXQoJ3RjYW50b24nKSk7XG4gICAgY29uc3QgdHggPSBuZXcgVHJhbnNhY3Rpb24oY29pbnMuZ2V0KCd0Y2FudG9uJykpO1xuICAgIHR4QnVpbGRlci5pbml0QnVpbGRlcih0eCk7XG4gICAgdHhCdWlsZGVyLnVwZGF0ZUlkKHVwZGF0ZUlkKTtcbiAgICBhc3NlcnQuZXF1YWwodHguaWQsIHVwZGF0ZUlkKTtcbiAgfSk7XG5cbiAgLy8gLS0tIG1pc3NpbmcgcmVxdWlyZWQgZmllbGQgdGVzdHMgLS0tXG5cbiAgaXQoJ3Nob3VsZCB0aHJvdyBpZiB1cGRhdGVJZCBpcyBtaXNzaW5nJywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHR4QnVpbGRlciA9IG5ldyBBbGxvY2F0aW9uUmVxdWVzdEJ1aWxkZXIoY29pbnMuZ2V0KCd0Y2FudG9uJykpO1xuICAgIHR4QnVpbGRlci5pbml0QnVpbGRlcihuZXcgVHJhbnNhY3Rpb24oY29pbnMuZ2V0KCd0Y2FudG9uJykpKTtcbiAgICB0eEJ1aWxkZXJcbiAgICAgIC5vcGVyYXRvcklkKG9wZXJhdG9ySWQpXG4gICAgICAuY29udHJhY3RJZChjb250cmFjdElkKVxuICAgICAgLnRyYWRlSWQodHJhZGVJZClcbiAgICAgIC50cmFuc2ZlckxlZ0lkKHRyYW5zZmVyTGVnSWQpXG4gICAgICAuc2VuZGVyUGFydHlJZChzZW5kZXJQYXJ0eUlkKVxuICAgICAgLnJlY2VpdmVyUGFydHlJZChyZWNlaXZlclBhcnR5SWQpXG4gICAgICAuYW1vdW50KGFtb3VudClcbiAgICAgIC50b2tlbih0b2tlbilcbiAgICAgIC5yZWNlaXZlVG9rZW4ocmVjZWl2ZVRva2VuKVxuICAgICAgLnJlY2VpdmVBbW91bnQocmVjZWl2ZUFtb3VudClcbiAgICAgIC5hbGxvY2F0ZUJlZm9yZShhbGxvY2F0ZUJlZm9yZSlcbiAgICAgIC5zZXR0bGVCZWZvcmUoc2V0dGxlQmVmb3JlKTtcbiAgICBhc3NlcnQudGhyb3dzKCgpID0+IHR4QnVpbGRlci50b1JlcXVlc3RPYmplY3QoKSwgL3VwZGF0ZUlkIGlzIG1pc3NpbmcvKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCB0aHJvdyBpZiBvcGVyYXRvcklkIGlzIG1pc3NpbmcnLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgdHhCdWlsZGVyID0gbmV3IEFsbG9jYXRpb25SZXF1ZXN0QnVpbGRlcihjb2lucy5nZXQoJ3RjYW50b24nKSk7XG4gICAgdHhCdWlsZGVyLmluaXRCdWlsZGVyKG5ldyBUcmFuc2FjdGlvbihjb2lucy5nZXQoJ3RjYW50b24nKSkpO1xuICAgIHR4QnVpbGRlclxuICAgICAgLnVwZGF0ZUlkKHVwZGF0ZUlkKVxuICAgICAgLmNvbnRyYWN0SWQoY29udHJhY3RJZClcbiAgICAgIC50cmFkZUlkKHRyYWRlSWQpXG4gICAgICAudHJhbnNmZXJMZWdJZCh0cmFuc2ZlckxlZ0lkKVxuICAgICAgLnNlbmRlclBhcnR5SWQoc2VuZGVyUGFydHlJZClcbiAgICAgIC5yZWNlaXZlclBhcnR5SWQocmVjZWl2ZXJQYXJ0eUlkKVxuICAgICAgLmFtb3VudChhbW91bnQpXG4gICAgICAudG9rZW4odG9rZW4pXG4gICAgICAucmVjZWl2ZVRva2VuKHJlY2VpdmVUb2tlbilcbiAgICAgIC5yZWNlaXZlQW1vdW50KHJlY2VpdmVBbW91bnQpXG4gICAgICAuYWxsb2NhdGVCZWZvcmUoYWxsb2NhdGVCZWZvcmUpXG4gICAgICAuc2V0dGxlQmVmb3JlKHNldHRsZUJlZm9yZSk7XG4gICAgYXNzZXJ0LnRocm93cygoKSA9PiB0eEJ1aWxkZXIudG9SZXF1ZXN0T2JqZWN0KCksIC9vcGVyYXRvcklkIGlzIG1pc3NpbmcvKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCB0aHJvdyBpZiBjb250cmFjdElkIGlzIG1pc3NpbmcnLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgdHhCdWlsZGVyID0gbmV3IEFsbG9jYXRpb25SZXF1ZXN0QnVpbGRlcihjb2lucy5nZXQoJ3RjYW50b24nKSk7XG4gICAgdHhCdWlsZGVyLmluaXRCdWlsZGVyKG5ldyBUcmFuc2FjdGlvbihjb2lucy5nZXQoJ3RjYW50b24nKSkpO1xuICAgIHR4QnVpbGRlclxuICAgICAgLnVwZGF0ZUlkKHVwZGF0ZUlkKVxuICAgICAgLm9wZXJhdG9ySWQob3BlcmF0b3JJZClcbiAgICAgIC50cmFkZUlkKHRyYWRlSWQpXG4gICAgICAudHJhbnNmZXJMZWdJZCh0cmFuc2ZlckxlZ0lkKVxuICAgICAgLnNlbmRlclBhcnR5SWQoc2VuZGVyUGFydHlJZClcbiAgICAgIC5yZWNlaXZlclBhcnR5SWQocmVjZWl2ZXJQYXJ0eUlkKVxuICAgICAgLmFtb3VudChhbW91bnQpXG4gICAgICAudG9rZW4odG9rZW4pXG4gICAgICAucmVjZWl2ZVRva2VuKHJlY2VpdmVUb2tlbilcbiAgICAgIC5yZWNlaXZlQW1vdW50KHJlY2VpdmVBbW91bnQpXG4gICAgICAuYWxsb2NhdGVCZWZvcmUoYWxsb2NhdGVCZWZvcmUpXG4gICAgICAuc2V0dGxlQmVmb3JlKHNldHRsZUJlZm9yZSk7XG4gICAgYXNzZXJ0LnRocm93cygoKSA9PiB0eEJ1aWxkZXIudG9SZXF1ZXN0T2JqZWN0KCksIC9jb250cmFjdElkIGlzIG1pc3NpbmcvKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCB0aHJvdyBpZiB0cmFkZUlkIGlzIG1pc3NpbmcnLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgdHhCdWlsZGVyID0gbmV3IEFsbG9jYXRpb25SZXF1ZXN0QnVpbGRlcihjb2lucy5nZXQoJ3RjYW50b24nKSk7XG4gICAgdHhCdWlsZGVyLmluaXRCdWlsZGVyKG5ldyBUcmFuc2FjdGlvbihjb2lucy5nZXQoJ3RjYW50b24nKSkpO1xuICAgIHR4QnVpbGRlclxuICAgICAgLnVwZGF0ZUlkKHVwZGF0ZUlkKVxuICAgICAgLm9wZXJhdG9ySWQob3BlcmF0b3JJZClcbiAgICAgIC5jb250cmFjdElkKGNvbnRyYWN0SWQpXG4gICAgICAudHJhbnNmZXJMZWdJZCh0cmFuc2ZlckxlZ0lkKVxuICAgICAgLnNlbmRlclBhcnR5SWQoc2VuZGVyUGFydHlJZClcbiAgICAgIC5yZWNlaXZlclBhcnR5SWQocmVjZWl2ZXJQYXJ0eUlkKVxuICAgICAgLmFtb3VudChhbW91bnQpXG4gICAgICAudG9rZW4odG9rZW4pXG4gICAgICAucmVjZWl2ZVRva2VuKHJlY2VpdmVUb2tlbilcbiAgICAgIC5yZWNlaXZlQW1vdW50KHJlY2VpdmVBbW91bnQpXG4gICAgICAuYWxsb2NhdGVCZWZvcmUoYWxsb2NhdGVCZWZvcmUpXG4gICAgICAuc2V0dGxlQmVmb3JlKHNldHRsZUJlZm9yZSk7XG4gICAgYXNzZXJ0LnRocm93cygoKSA9PiB0eEJ1aWxkZXIudG9SZXF1ZXN0T2JqZWN0KCksIC90cmFkZUlkIGlzIG1pc3NpbmcvKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCB0aHJvdyBpZiB0cmFuc2ZlckxlZ0lkIGlzIG1pc3NpbmcnLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgdHhCdWlsZGVyID0gbmV3IEFsbG9jYXRpb25SZXF1ZXN0QnVpbGRlcihjb2lucy5nZXQoJ3RjYW50b24nKSk7XG4gICAgdHhCdWlsZGVyLmluaXRCdWlsZGVyKG5ldyBUcmFuc2FjdGlvbihjb2lucy5nZXQoJ3RjYW50b24nKSkpO1xuICAgIHR4QnVpbGRlclxuICAgICAgLnVwZGF0ZUlkKHVwZGF0ZUlkKVxuICAgICAgLm9wZXJhdG9ySWQob3BlcmF0b3JJZClcbiAgICAgIC5jb250cmFjdElkKGNvbnRyYWN0SWQpXG4gICAgICAudHJhZGVJZCh0cmFkZUlkKVxuICAgICAgLnNlbmRlclBhcnR5SWQoc2VuZGVyUGFydHlJZClcbiAgICAgIC5yZWNlaXZlclBhcnR5SWQocmVjZWl2ZXJQYXJ0eUlkKVxuICAgICAgLmFtb3VudChhbW91bnQpXG4gICAgICAudG9rZW4odG9rZW4pXG4gICAgICAucmVjZWl2ZVRva2VuKHJlY2VpdmVUb2tlbilcbiAgICAgIC5yZWNlaXZlQW1vdW50KHJlY2VpdmVBbW91bnQpXG4gICAgICAuYWxsb2NhdGVCZWZvcmUoYWxsb2NhdGVCZWZvcmUpXG4gICAgICAuc2V0dGxlQmVmb3JlKHNldHRsZUJlZm9yZSk7XG4gICAgYXNzZXJ0LnRocm93cygoKSA9PiB0eEJ1aWxkZXIudG9SZXF1ZXN0T2JqZWN0KCksIC90cmFuc2ZlckxlZ0lkIGlzIG1pc3NpbmcvKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCB0aHJvdyBpZiBzZW5kZXJQYXJ0eUlkIGlzIG1pc3NpbmcnLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgdHhCdWlsZGVyID0gbmV3IEFsbG9jYXRpb25SZXF1ZXN0QnVpbGRlcihjb2lucy5nZXQoJ3RjYW50b24nKSk7XG4gICAgdHhCdWlsZGVyLmluaXRCdWlsZGVyKG5ldyBUcmFuc2FjdGlvbihjb2lucy5nZXQoJ3RjYW50b24nKSkpO1xuICAgIHR4QnVpbGRlclxuICAgICAgLnVwZGF0ZUlkKHVwZGF0ZUlkKVxuICAgICAgLm9wZXJhdG9ySWQob3BlcmF0b3JJZClcbiAgICAgIC5jb250cmFjdElkKGNvbnRyYWN0SWQpXG4gICAgICAudHJhZGVJZCh0cmFkZUlkKVxuICAgICAgLnRyYW5zZmVyTGVnSWQodHJhbnNmZXJMZWdJZClcbiAgICAgIC5yZWNlaXZlclBhcnR5SWQocmVjZWl2ZXJQYXJ0eUlkKVxuICAgICAgLmFtb3VudChhbW91bnQpXG4gICAgICAudG9rZW4odG9rZW4pXG4gICAgICAucmVjZWl2ZVRva2VuKHJlY2VpdmVUb2tlbilcbiAgICAgIC5yZWNlaXZlQW1vdW50KHJlY2VpdmVBbW91bnQpXG4gICAgICAuYWxsb2NhdGVCZWZvcmUoYWxsb2NhdGVCZWZvcmUpXG4gICAgICAuc2V0dGxlQmVmb3JlKHNldHRsZUJlZm9yZSk7XG4gICAgYXNzZXJ0LnRocm93cygoKSA9PiB0eEJ1aWxkZXIudG9SZXF1ZXN0T2JqZWN0KCksIC9zZW5kZXJQYXJ0eUlkIGlzIG1pc3NpbmcvKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCB0aHJvdyBpZiByZWNlaXZlclBhcnR5SWQgaXMgbWlzc2luZycsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCB0eEJ1aWxkZXIgPSBuZXcgQWxsb2NhdGlvblJlcXVlc3RCdWlsZGVyKGNvaW5zLmdldCgndGNhbnRvbicpKTtcbiAgICB0eEJ1aWxkZXIuaW5pdEJ1aWxkZXIobmV3IFRyYW5zYWN0aW9uKGNvaW5zLmdldCgndGNhbnRvbicpKSk7XG4gICAgdHhCdWlsZGVyXG4gICAgICAudXBkYXRlSWQodXBkYXRlSWQpXG4gICAgICAub3BlcmF0b3JJZChvcGVyYXRvcklkKVxuICAgICAgLmNvbnRyYWN0SWQoY29udHJhY3RJZClcbiAgICAgIC50cmFkZUlkKHRyYWRlSWQpXG4gICAgICAudHJhbnNmZXJMZWdJZCh0cmFuc2ZlckxlZ0lkKVxuICAgICAgLnNlbmRlclBhcnR5SWQoc2VuZGVyUGFydHlJZClcbiAgICAgIC5hbW91bnQoYW1vdW50KVxuICAgICAgLnRva2VuKHRva2VuKVxuICAgICAgLnJlY2VpdmVUb2tlbihyZWNlaXZlVG9rZW4pXG4gICAgICAucmVjZWl2ZUFtb3VudChyZWNlaXZlQW1vdW50KVxuICAgICAgLmFsbG9jYXRlQmVmb3JlKGFsbG9jYXRlQmVmb3JlKVxuICAgICAgLnNldHRsZUJlZm9yZShzZXR0bGVCZWZvcmUpO1xuICAgIGFzc2VydC50aHJvd3MoKCkgPT4gdHhCdWlsZGVyLnRvUmVxdWVzdE9iamVjdCgpLCAvcmVjZWl2ZXJQYXJ0eUlkIGlzIG1pc3NpbmcvKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCB0aHJvdyBpZiB0b2tlbiBpcyBtaXNzaW5nJywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHR4QnVpbGRlciA9IG5ldyBBbGxvY2F0aW9uUmVxdWVzdEJ1aWxkZXIoY29pbnMuZ2V0KCd0Y2FudG9uJykpO1xuICAgIHR4QnVpbGRlci5pbml0QnVpbGRlcihuZXcgVHJhbnNhY3Rpb24oY29pbnMuZ2V0KCd0Y2FudG9uJykpKTtcbiAgICB0eEJ1aWxkZXJcbiAgICAgIC51cGRhdGVJZCh1cGRhdGVJZClcbiAgICAgIC5vcGVyYXRvcklkKG9wZXJhdG9ySWQpXG4gICAgICAuY29udHJhY3RJZChjb250cmFjdElkKVxuICAgICAgLnRyYWRlSWQodHJhZGVJZClcbiAgICAgIC50cmFuc2ZlckxlZ0lkKHRyYW5zZmVyTGVnSWQpXG4gICAgICAuc2VuZGVyUGFydHlJZChzZW5kZXJQYXJ0eUlkKVxuICAgICAgLnJlY2VpdmVyUGFydHlJZChyZWNlaXZlclBhcnR5SWQpXG4gICAgICAuYW1vdW50KGFtb3VudClcbiAgICAgIC5yZWNlaXZlVG9rZW4ocmVjZWl2ZVRva2VuKVxuICAgICAgLnJlY2VpdmVBbW91bnQocmVjZWl2ZUFtb3VudClcbiAgICAgIC5hbGxvY2F0ZUJlZm9yZShhbGxvY2F0ZUJlZm9yZSlcbiAgICAgIC5zZXR0bGVCZWZvcmUoc2V0dGxlQmVmb3JlKTtcbiAgICBhc3NlcnQudGhyb3dzKCgpID0+IHR4QnVpbGRlci50b1JlcXVlc3RPYmplY3QoKSwgL3Rva2VuIGlzIG1pc3NpbmcvKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCB0aHJvdyBpZiByZWNlaXZlVG9rZW4gaXMgbWlzc2luZycsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCB0eEJ1aWxkZXIgPSBuZXcgQWxsb2NhdGlvblJlcXVlc3RCdWlsZGVyKGNvaW5zLmdldCgndGNhbnRvbicpKTtcbiAgICB0eEJ1aWxkZXIuaW5pdEJ1aWxkZXIobmV3IFRyYW5zYWN0aW9uKGNvaW5zLmdldCgndGNhbnRvbicpKSk7XG4gICAgdHhCdWlsZGVyXG4gICAgICAudXBkYXRlSWQodXBkYXRlSWQpXG4gICAgICAub3BlcmF0b3JJZChvcGVyYXRvcklkKVxuICAgICAgLmNvbnRyYWN0SWQoY29udHJhY3RJZClcbiAgICAgIC50cmFkZUlkKHRyYWRlSWQpXG4gICAgICAudHJhbnNmZXJMZWdJZCh0cmFuc2ZlckxlZ0lkKVxuICAgICAgLnNlbmRlclBhcnR5SWQoc2VuZGVyUGFydHlJZClcbiAgICAgIC5yZWNlaXZlclBhcnR5SWQocmVjZWl2ZXJQYXJ0eUlkKVxuICAgICAgLmFtb3VudChhbW91bnQpXG4gICAgICAudG9rZW4odG9rZW4pXG4gICAgICAucmVjZWl2ZUFtb3VudChyZWNlaXZlQW1vdW50KVxuICAgICAgLmFsbG9jYXRlQmVmb3JlKGFsbG9jYXRlQmVmb3JlKVxuICAgICAgLnNldHRsZUJlZm9yZShzZXR0bGVCZWZvcmUpO1xuICAgIGFzc2VydC50aHJvd3MoKCkgPT4gdHhCdWlsZGVyLnRvUmVxdWVzdE9iamVjdCgpLCAvcmVjZWl2ZVRva2VuIGlzIG1pc3NpbmcvKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCB0aHJvdyBpZiBhbW91bnQgd2FzIG5ldmVyIHNldCcsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCB0eEJ1aWxkZXIgPSBuZXcgQWxsb2NhdGlvblJlcXVlc3RCdWlsZGVyKGNvaW5zLmdldCgndGNhbnRvbicpKTtcbiAgICB0eEJ1aWxkZXIuaW5pdEJ1aWxkZXIobmV3IFRyYW5zYWN0aW9uKGNvaW5zLmdldCgndGNhbnRvbicpKSk7XG4gICAgdHhCdWlsZGVyXG4gICAgICAudXBkYXRlSWQodXBkYXRlSWQpXG4gICAgICAub3BlcmF0b3JJZChvcGVyYXRvcklkKVxuICAgICAgLmNvbnRyYWN0SWQoY29udHJhY3RJZClcbiAgICAgIC50cmFkZUlkKHRyYWRlSWQpXG4gICAgICAudHJhbnNmZXJMZWdJZCh0cmFuc2ZlckxlZ0lkKVxuICAgICAgLnNlbmRlclBhcnR5SWQoc2VuZGVyUGFydHlJZClcbiAgICAgIC5yZWNlaXZlclBhcnR5SWQocmVjZWl2ZXJQYXJ0eUlkKVxuICAgICAgLnRva2VuKHRva2VuKVxuICAgICAgLnJlY2VpdmVUb2tlbihyZWNlaXZlVG9rZW4pXG4gICAgICAucmVjZWl2ZUFtb3VudChyZWNlaXZlQW1vdW50KVxuICAgICAgLmFsbG9jYXRlQmVmb3JlKGFsbG9jYXRlQmVmb3JlKVxuICAgICAgLnNldHRsZUJlZm9yZShzZXR0bGVCZWZvcmUpO1xuICAgIGFzc2VydC50aHJvd3MoKCkgPT4gdHhCdWlsZGVyLnRvUmVxdWVzdE9iamVjdCgpLCAvYW1vdW50IGlzIG1pc3NpbmcvKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCB0aHJvdyBpZiByZWNlaXZlQW1vdW50IHdhcyBuZXZlciBzZXQnLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgdHhCdWlsZGVyID0gbmV3IEFsbG9jYXRpb25SZXF1ZXN0QnVpbGRlcihjb2lucy5nZXQoJ3RjYW50b24nKSk7XG4gICAgdHhCdWlsZGVyLmluaXRCdWlsZGVyKG5ldyBUcmFuc2FjdGlvbihjb2lucy5nZXQoJ3RjYW50b24nKSkpO1xuICAgIHR4QnVpbGRlclxuICAgICAgLnVwZGF0ZUlkKHVwZGF0ZUlkKVxuICAgICAgLm9wZXJhdG9ySWQob3BlcmF0b3JJZClcbiAgICAgIC5jb250cmFjdElkKGNvbnRyYWN0SWQpXG4gICAgICAudHJhZGVJZCh0cmFkZUlkKVxuICAgICAgLnRyYW5zZmVyTGVnSWQodHJhbnNmZXJMZWdJZClcbiAgICAgIC5zZW5kZXJQYXJ0eUlkKHNlbmRlclBhcnR5SWQpXG4gICAgICAucmVjZWl2ZXJQYXJ0eUlkKHJlY2VpdmVyUGFydHlJZClcbiAgICAgIC5hbW91bnQoYW1vdW50KVxuICAgICAgLnRva2VuKHRva2VuKVxuICAgICAgLnJlY2VpdmVUb2tlbihyZWNlaXZlVG9rZW4pXG4gICAgICAuYWxsb2NhdGVCZWZvcmUoYWxsb2NhdGVCZWZvcmUpXG4gICAgICAuc2V0dGxlQmVmb3JlKHNldHRsZUJlZm9yZSk7XG4gICAgYXNzZXJ0LnRocm93cygoKSA9PiB0eEJ1aWxkZXIudG9SZXF1ZXN0T2JqZWN0KCksIC9yZWNlaXZlQW1vdW50IGlzIG1pc3NpbmcvKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCB0aHJvdyBpZiBhbGxvY2F0ZUJlZm9yZSBpcyBtaXNzaW5nJywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHR4QnVpbGRlciA9IG5ldyBBbGxvY2F0aW9uUmVxdWVzdEJ1aWxkZXIoY29pbnMuZ2V0KCd0Y2FudG9uJykpO1xuICAgIHR4QnVpbGRlci5pbml0QnVpbGRlcihuZXcgVHJhbnNhY3Rpb24oY29pbnMuZ2V0KCd0Y2FudG9uJykpKTtcbiAgICB0eEJ1aWxkZXJcbiAgICAgIC51cGRhdGVJZCh1cGRhdGVJZClcbiAgICAgIC5vcGVyYXRvcklkKG9wZXJhdG9ySWQpXG4gICAgICAuY29udHJhY3RJZChjb250cmFjdElkKVxuICAgICAgLnRyYWRlSWQodHJhZGVJZClcbiAgICAgIC50cmFuc2ZlckxlZ0lkKHRyYW5zZmVyTGVnSWQpXG4gICAgICAuc2VuZGVyUGFydHlJZChzZW5kZXJQYXJ0eUlkKVxuICAgICAgLnJlY2VpdmVyUGFydHlJZChyZWNlaXZlclBhcnR5SWQpXG4gICAgICAuYW1vdW50KGFtb3VudClcbiAgICAgIC50b2tlbih0b2tlbilcbiAgICAgIC5yZWNlaXZlVG9rZW4ocmVjZWl2ZVRva2VuKVxuICAgICAgLnJlY2VpdmVBbW91bnQocmVjZWl2ZUFtb3VudClcbiAgICAgIC5zZXR0bGVCZWZvcmUoc2V0dGxlQmVmb3JlKTtcbiAgICBhc3NlcnQudGhyb3dzKCgpID0+IHR4QnVpbGRlci50b1JlcXVlc3RPYmplY3QoKSwgL2FsbG9jYXRlQmVmb3JlIGlzIG1pc3NpbmcvKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCB0aHJvdyBpZiBzZXR0bGVCZWZvcmUgaXMgbWlzc2luZycsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCB0eEJ1aWxkZXIgPSBuZXcgQWxsb2NhdGlvblJlcXVlc3RCdWlsZGVyKGNvaW5zLmdldCgndGNhbnRvbicpKTtcbiAgICB0eEJ1aWxkZXIuaW5pdEJ1aWxkZXIobmV3IFRyYW5zYWN0aW9uKGNvaW5zLmdldCgndGNhbnRvbicpKSk7XG4gICAgdHhCdWlsZGVyXG4gICAgICAudXBkYXRlSWQodXBkYXRlSWQpXG4gICAgICAub3BlcmF0b3JJZChvcGVyYXRvcklkKVxuICAgICAgLmNvbnRyYWN0SWQoY29udHJhY3RJZClcbiAgICAgIC50cmFkZUlkKHRyYWRlSWQpXG4gICAgICAudHJhbnNmZXJMZWdJZCh0cmFuc2ZlckxlZ0lkKVxuICAgICAgLnNlbmRlclBhcnR5SWQoc2VuZGVyUGFydHlJZClcbiAgICAgIC5yZWNlaXZlclBhcnR5SWQocmVjZWl2ZXJQYXJ0eUlkKVxuICAgICAgLmFtb3VudChhbW91bnQpXG4gICAgICAudG9rZW4odG9rZW4pXG4gICAgICAucmVjZWl2ZVRva2VuKHJlY2VpdmVUb2tlbilcbiAgICAgIC5yZWNlaXZlQW1vdW50KHJlY2VpdmVBbW91bnQpXG4gICAgICAuYWxsb2NhdGVCZWZvcmUoYWxsb2NhdGVCZWZvcmUpO1xuICAgIGFzc2VydC50aHJvd3MoKCkgPT4gdHhCdWlsZGVyLnRvUmVxdWVzdE9iamVjdCgpLCAvc2V0dGxlQmVmb3JlIGlzIG1pc3NpbmcvKTtcbiAgfSk7XG5cbiAgLy8gLS0tIGludmFsaWQgc2V0dGVyIGFyZ3VtZW50IHRlc3RzIC0tLVxuXG4gIGl0KCdzaG91bGQgdGhyb3cgaWYgdXBkYXRlSWQgaXMgYW4gZW1wdHkgc3RyaW5nJywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHR4QnVpbGRlciA9IG5ldyBBbGxvY2F0aW9uUmVxdWVzdEJ1aWxkZXIoY29pbnMuZ2V0KCd0Y2FudG9uJykpO1xuICAgIGFzc2VydC50aHJvd3MoKCkgPT4gdHhCdWlsZGVyLnVwZGF0ZUlkKCcnKSwgL3VwZGF0ZUlkIG11c3QgYmUgYSBub24tZW1wdHkgc3RyaW5nLyk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgdGhyb3cgaWYgb3BlcmF0b3JJZCBpcyBhbiBlbXB0eSBzdHJpbmcnLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgdHhCdWlsZGVyID0gbmV3IEFsbG9jYXRpb25SZXF1ZXN0QnVpbGRlcihjb2lucy5nZXQoJ3RjYW50b24nKSk7XG4gICAgYXNzZXJ0LnRocm93cygoKSA9PiB0eEJ1aWxkZXIub3BlcmF0b3JJZCgnJyksIC9vcGVyYXRvcklkIG11c3QgYmUgYSBub24tZW1wdHkgc3RyaW5nLyk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgdGhyb3cgaWYgY29udHJhY3RJZCBpcyBhbiBlbXB0eSBzdHJpbmcnLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgdHhCdWlsZGVyID0gbmV3IEFsbG9jYXRpb25SZXF1ZXN0QnVpbGRlcihjb2lucy5nZXQoJ3RjYW50b24nKSk7XG4gICAgYXNzZXJ0LnRocm93cygoKSA9PiB0eEJ1aWxkZXIuY29udHJhY3RJZCgnJyksIC9jb250cmFjdElkIG11c3QgYmUgYSBub24tZW1wdHkgc3RyaW5nLyk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgYWNjZXB0IG51bGwgY29udHJhY3RJZCBhbmQgb21pdCBpdCBmcm9tIHRoZSByZXF1ZXN0IG9iamVjdCcsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCB0eEJ1aWxkZXIgPSBuZXcgQWxsb2NhdGlvblJlcXVlc3RCdWlsZGVyKGNvaW5zLmdldCgndGNhbnRvbicpKTtcbiAgICBjb25zdCB0eCA9IG5ldyBUcmFuc2FjdGlvbihjb2lucy5nZXQoJ3RjYW50b24nKSk7XG4gICAgdHhCdWlsZGVyLmluaXRCdWlsZGVyKHR4KTtcbiAgICB0eEJ1aWxkZXJcbiAgICAgIC51cGRhdGVJZCh1cGRhdGVJZClcbiAgICAgIC5vcGVyYXRvcklkKG9wZXJhdG9ySWQpXG4gICAgICAuY29udHJhY3RJZChudWxsKVxuICAgICAgLnRyYWRlSWQodHJhZGVJZClcbiAgICAgIC50cmFuc2ZlckxlZ0lkKHRyYW5zZmVyTGVnSWQpXG4gICAgICAuc2VuZGVyUGFydHlJZChzZW5kZXJQYXJ0eUlkKVxuICAgICAgLnJlY2VpdmVyUGFydHlJZChyZWNlaXZlclBhcnR5SWQpXG4gICAgICAuYW1vdW50KGFtb3VudClcbiAgICAgIC50b2tlbih0b2tlbilcbiAgICAgIC5yZWNlaXZlVG9rZW4ocmVjZWl2ZVRva2VuKVxuICAgICAgLnJlY2VpdmVBbW91bnQocmVjZWl2ZUFtb3VudClcbiAgICAgIC5hbGxvY2F0ZUJlZm9yZShhbGxvY2F0ZUJlZm9yZSlcbiAgICAgIC5zZXR0bGVCZWZvcmUoc2V0dGxlQmVmb3JlKTtcbiAgICBjb25zdCByZXF1ZXN0T2JqOiBBbGxvY2F0aW9uUmVxdWVzdCA9IHR4QnVpbGRlci50b1JlcXVlc3RPYmplY3QoKTtcbiAgICBhc3NlcnQuZXF1YWwocmVxdWVzdE9iai5jb250cmFjdElkLCB1bmRlZmluZWQsICdjb250cmFjdElkIHNob3VsZCBiZSBhYnNlbnQgd2hlbiBzZXQgdG8gbnVsbCcpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHRocm93IGlmIHRyYWRlSWQgaXMgYW4gZW1wdHkgc3RyaW5nJywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHR4QnVpbGRlciA9IG5ldyBBbGxvY2F0aW9uUmVxdWVzdEJ1aWxkZXIoY29pbnMuZ2V0KCd0Y2FudG9uJykpO1xuICAgIGFzc2VydC50aHJvd3MoKCkgPT4gdHhCdWlsZGVyLnRyYWRlSWQoJycpLCAvdHJhZGVJZCBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZy8pO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHRocm93IGlmIHRyYW5zZmVyTGVnSWQgaXMgYW4gZW1wdHkgc3RyaW5nJywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHR4QnVpbGRlciA9IG5ldyBBbGxvY2F0aW9uUmVxdWVzdEJ1aWxkZXIoY29pbnMuZ2V0KCd0Y2FudG9uJykpO1xuICAgIGFzc2VydC50aHJvd3MoKCkgPT4gdHhCdWlsZGVyLnRyYW5zZmVyTGVnSWQoJycpLCAvdHJhbnNmZXJMZWdJZCBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZy8pO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHRocm93IGlmIHNlbmRlclBhcnR5SWQgaXMgYW4gZW1wdHkgc3RyaW5nJywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHR4QnVpbGRlciA9IG5ldyBBbGxvY2F0aW9uUmVxdWVzdEJ1aWxkZXIoY29pbnMuZ2V0KCd0Y2FudG9uJykpO1xuICAgIGFzc2VydC50aHJvd3MoKCkgPT4gdHhCdWlsZGVyLnNlbmRlclBhcnR5SWQoJycpLCAvc2VuZGVyUGFydHlJZCBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZy8pO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHRocm93IGlmIHJlY2VpdmVyUGFydHlJZCBpcyBhbiBlbXB0eSBzdHJpbmcnLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgdHhCdWlsZGVyID0gbmV3IEFsbG9jYXRpb25SZXF1ZXN0QnVpbGRlcihjb2lucy5nZXQoJ3RjYW50b24nKSk7XG4gICAgYXNzZXJ0LnRocm93cygoKSA9PiB0eEJ1aWxkZXIucmVjZWl2ZXJQYXJ0eUlkKCcnKSwgL3JlY2VpdmVyUGFydHlJZCBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZy8pO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHRocm93IGlmIGFtb3VudCBpcyB6ZXJvJywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHR4QnVpbGRlciA9IG5ldyBBbGxvY2F0aW9uUmVxdWVzdEJ1aWxkZXIoY29pbnMuZ2V0KCd0Y2FudG9uJykpO1xuICAgIGFzc2VydC50aHJvd3MoKCkgPT4gdHhCdWlsZGVyLmFtb3VudCgwKSwgL2Ftb3VudCBtdXN0IGJlIGEgcG9zaXRpdmUgbnVtYmVyLyk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgdGhyb3cgaWYgYW1vdW50IGlzIG5lZ2F0aXZlJywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHR4QnVpbGRlciA9IG5ldyBBbGxvY2F0aW9uUmVxdWVzdEJ1aWxkZXIoY29pbnMuZ2V0KCd0Y2FudG9uJykpO1xuICAgIGFzc2VydC50aHJvd3MoKCkgPT4gdHhCdWlsZGVyLmFtb3VudCgtNSksIC9hbW91bnQgbXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlci8pO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHRocm93IGlmIHRva2VuIGlzIGFuIGVtcHR5IHN0cmluZycsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCB0eEJ1aWxkZXIgPSBuZXcgQWxsb2NhdGlvblJlcXVlc3RCdWlsZGVyKGNvaW5zLmdldCgndGNhbnRvbicpKTtcbiAgICBhc3NlcnQudGhyb3dzKCgpID0+IHR4QnVpbGRlci50b2tlbignJyksIC90b2tlbiBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZy8pO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHRocm93IGlmIHJlY2VpdmVUb2tlbiBpcyBhbiBlbXB0eSBzdHJpbmcnLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgdHhCdWlsZGVyID0gbmV3IEFsbG9jYXRpb25SZXF1ZXN0QnVpbGRlcihjb2lucy5nZXQoJ3RjYW50b24nKSk7XG4gICAgYXNzZXJ0LnRocm93cygoKSA9PiB0eEJ1aWxkZXIucmVjZWl2ZVRva2VuKCcnKSwgL3JlY2VpdmVUb2tlbiBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZy8pO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHRocm93IGlmIHJlY2VpdmVBbW91bnQgaXMgemVybycsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCB0eEJ1aWxkZXIgPSBuZXcgQWxsb2NhdGlvblJlcXVlc3RCdWlsZGVyKGNvaW5zLmdldCgndGNhbnRvbicpKTtcbiAgICBhc3NlcnQudGhyb3dzKCgpID0+IHR4QnVpbGRlci5yZWNlaXZlQW1vdW50KDApLCAvcmVjZWl2ZUFtb3VudCBtdXN0IGJlIGEgcG9zaXRpdmUgbnVtYmVyLyk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgdGhyb3cgaWYgcmVjZWl2ZUFtb3VudCBpcyBuZWdhdGl2ZScsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCB0eEJ1aWxkZXIgPSBuZXcgQWxsb2NhdGlvblJlcXVlc3RCdWlsZGVyKGNvaW5zLmdldCgndGNhbnRvbicpKTtcbiAgICBhc3NlcnQudGhyb3dzKCgpID0+IHR4QnVpbGRlci5yZWNlaXZlQW1vdW50KC0xKSwgL3JlY2VpdmVBbW91bnQgbXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlci8pO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHRocm93IGlmIGFsbG9jYXRlQmVmb3JlIGlzIGFuIGVtcHR5IHN0cmluZycsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCB0eEJ1aWxkZXIgPSBuZXcgQWxsb2NhdGlvblJlcXVlc3RCdWlsZGVyKGNvaW5zLmdldCgndGNhbnRvbicpKTtcbiAgICBhc3NlcnQudGhyb3dzKCgpID0+IHR4QnVpbGRlci5hbGxvY2F0ZUJlZm9yZSgnJyksIC9hbGxvY2F0ZUJlZm9yZSBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZy8pO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHRocm93IGlmIHNldHRsZUJlZm9yZSBpcyBhbiBlbXB0eSBzdHJpbmcnLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgdHhCdWlsZGVyID0gbmV3IEFsbG9jYXRpb25SZXF1ZXN0QnVpbGRlcihjb2lucy5nZXQoJ3RjYW50b24nKSk7XG4gICAgYXNzZXJ0LnRocm93cygoKSA9PiB0eEJ1aWxkZXIuc2V0dGxlQmVmb3JlKCcnKSwgL3NldHRsZUJlZm9yZSBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZy8pO1xuICB9KTtcblxuICAvLyAtLS0gbm90LWltcGxlbWVudGVkIG1ldGhvZHMgLS0tXG5cbiAgaXQoJ3Nob3VsZCB0aHJvdyBvbiBzZXRUcmFuc2FjdGlvbicsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCB0eEJ1aWxkZXIgPSBuZXcgQWxsb2NhdGlvblJlcXVlc3RCdWlsZGVyKGNvaW5zLmdldCgndGNhbnRvbicpKTtcbiAgICBhc3NlcnQudGhyb3dzKCgpID0+IHR4QnVpbGRlci5zZXRUcmFuc2FjdGlvbih7fSBhcyBhbnkpLCAvTm90IGltcGxlbWVudGVkLyk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgdGhyb3cgb24gYWRkU2lnbmF0dXJlJywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHR4QnVpbGRlciA9IG5ldyBBbGxvY2F0aW9uUmVxdWVzdEJ1aWxkZXIoY29pbnMuZ2V0KCd0Y2FudG9uJykpO1xuICAgIGFzc2VydC50aHJvd3MoKCkgPT4gdHhCdWlsZGVyLmFkZFNpZ25hdHVyZSh7fSBhcyBhbnksIEJ1ZmZlci5mcm9tKCcnKSksIC9Ob3QgaW1wbGVtZW50ZWQvKTtcbiAgfSk7XG59KTtcbiJdfQ==
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=cantonCommandBuilder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cantonCommandBuilder.d.ts","sourceRoot":"","sources":["../../../../../test/unit/builder/cantonCommand/cantonCommandBuilder.ts"],"names":[],"mappings":""}