@bitgo-beta/sdk-lib-mpc 8.2.1-alpha.15 → 8.2.1-alpha.151

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 (97) hide show
  1. package/CHANGELOG.md +553 -0
  2. package/dist/src/curves/constant.d.ts +2 -0
  3. package/dist/src/curves/constant.d.ts.map +1 -0
  4. package/dist/src/curves/constant.js +6 -0
  5. package/dist/src/curves/{baseCurve.d.ts → ed25519.d.ts} +9 -7
  6. package/dist/src/curves/ed25519.d.ts.map +1 -0
  7. package/dist/src/curves/ed25519.js +72 -0
  8. package/dist/src/curves/ed25519Bip32HdTree.d.ts +10 -0
  9. package/dist/src/curves/ed25519Bip32HdTree.d.ts.map +1 -0
  10. package/dist/src/curves/ed25519Bip32HdTree.js +85 -0
  11. package/dist/src/curves/index.d.ts +6 -1
  12. package/dist/src/curves/index.d.ts.map +1 -1
  13. package/dist/src/curves/index.js +12 -3
  14. package/dist/src/curves/secp256k1.d.ts +3 -1
  15. package/dist/src/curves/secp256k1.d.ts.map +1 -1
  16. package/dist/src/curves/secp256k1.js +29 -38
  17. package/dist/src/curves/secp256k1Bip32HdTree.d.ts +8 -0
  18. package/dist/src/curves/secp256k1Bip32HdTree.d.ts.map +1 -0
  19. package/dist/src/curves/secp256k1Bip32HdTree.js +54 -0
  20. package/dist/src/curves/types.d.ts +36 -0
  21. package/dist/src/curves/types.d.ts.map +1 -0
  22. package/dist/src/curves/types.js +3 -0
  23. package/dist/src/curves/util.d.ts +2 -0
  24. package/dist/src/curves/util.d.ts.map +1 -0
  25. package/dist/src/curves/util.js +11 -0
  26. package/dist/src/hashCommitment.d.ts +17 -0
  27. package/dist/src/hashCommitment.d.ts.map +1 -0
  28. package/dist/src/hashCommitment.js +45 -0
  29. package/dist/src/index.d.ts +6 -2
  30. package/dist/src/index.d.ts.map +1 -1
  31. package/dist/src/index.js +25 -4
  32. package/dist/src/openssl/index.js +6 -2
  33. package/dist/src/openssl/openssl.d.ts +1 -2
  34. package/dist/src/openssl/openssl.d.ts.map +1 -1
  35. package/dist/src/openssl/openssl.js +4 -12
  36. package/dist/src/safePrime.d.ts +3 -0
  37. package/dist/src/safePrime.d.ts.map +1 -0
  38. package/dist/src/safePrime.js +20 -0
  39. package/dist/src/schnorrProof.d.ts +22 -0
  40. package/dist/src/schnorrProof.d.ts.map +1 -0
  41. package/dist/src/schnorrProof.js +62 -0
  42. package/dist/src/shamir/index.d.ts +3 -0
  43. package/dist/src/shamir/index.d.ts.map +1 -0
  44. package/dist/src/shamir/index.js +19 -0
  45. package/dist/src/shamir/shamir.d.ts +38 -0
  46. package/dist/src/shamir/shamir.d.ts.map +1 -0
  47. package/dist/src/shamir/shamir.js +136 -0
  48. package/dist/src/shamir/types.d.ts +5 -0
  49. package/dist/src/shamir/types.d.ts.map +1 -0
  50. package/dist/src/shamir/types.js +3 -0
  51. package/dist/src/tss/ecdsa/index.d.ts +1 -0
  52. package/dist/src/tss/ecdsa/index.d.ts.map +1 -1
  53. package/dist/src/tss/ecdsa/index.js +8 -3
  54. package/dist/src/tss/ecdsa/paillierproof.js +6 -6
  55. package/dist/src/tss/ecdsa/rangeproof.d.ts +1 -2
  56. package/dist/src/tss/ecdsa/rangeproof.d.ts.map +1 -1
  57. package/dist/src/tss/ecdsa/rangeproof.js +105 -111
  58. package/dist/src/tss/ecdsa/types.d.ts +16 -0
  59. package/dist/src/tss/ecdsa/types.d.ts.map +1 -1
  60. package/dist/src/tss/ecdsa/types.js +19 -20
  61. package/dist/src/tss/ecdsa/zkVProof.d.ts +25 -0
  62. package/dist/src/tss/ecdsa/zkVProof.d.ts.map +1 -0
  63. package/dist/src/tss/ecdsa/zkVProof.js +71 -0
  64. package/dist/src/tss/ecdsa-dkls/commsLayer.d.ts +43 -0
  65. package/dist/src/tss/ecdsa-dkls/commsLayer.d.ts.map +1 -0
  66. package/dist/src/tss/ecdsa-dkls/commsLayer.js +224 -0
  67. package/dist/src/tss/ecdsa-dkls/dkg.d.ts +34 -0
  68. package/dist/src/tss/ecdsa-dkls/dkg.d.ts.map +1 -0
  69. package/dist/src/tss/ecdsa-dkls/dkg.js +266 -0
  70. package/dist/src/tss/ecdsa-dkls/dsg.d.ts +48 -0
  71. package/dist/src/tss/ecdsa-dkls/dsg.d.ts.map +1 -0
  72. package/dist/src/tss/ecdsa-dkls/dsg.js +257 -0
  73. package/dist/src/tss/ecdsa-dkls/index.d.ts +6 -0
  74. package/dist/src/tss/ecdsa-dkls/index.d.ts.map +1 -0
  75. package/dist/src/tss/ecdsa-dkls/index.js +32 -0
  76. package/dist/src/tss/ecdsa-dkls/types.d.ts +119 -0
  77. package/dist/src/tss/ecdsa-dkls/types.d.ts.map +1 -0
  78. package/dist/src/tss/ecdsa-dkls/types.js +155 -0
  79. package/dist/src/tss/ecdsa-dkls/util.d.ts +28 -0
  80. package/dist/src/tss/ecdsa-dkls/util.d.ts.map +1 -0
  81. package/dist/src/tss/ecdsa-dkls/util.js +267 -0
  82. package/dist/src/tss/index.d.ts +1 -0
  83. package/dist/src/tss/index.d.ts.map +1 -1
  84. package/dist/src/tss/index.js +7 -2
  85. package/dist/src/types.d.ts +14 -0
  86. package/dist/src/types.d.ts.map +1 -0
  87. package/dist/src/types.js +3 -0
  88. package/dist/src/util.d.ts +8 -2
  89. package/dist/src/util.d.ts.map +1 -1
  90. package/dist/src/util.js +35 -13
  91. package/dist/tsconfig.tsbuildinfo +1 -1
  92. package/package.json +27 -7
  93. package/dist/src/curves/baseCurve.d.ts.map +0 -1
  94. package/dist/src/curves/baseCurve.js +0 -6
  95. package/dist/src/openssl/opensslbytes.d.ts +0 -4
  96. package/dist/src/openssl/opensslbytes.d.ts.map +0 -1
  97. package/dist/src/openssl/opensslbytes.js +0 -20
@@ -0,0 +1,257 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ exports.Dsg = void 0;
27
+ const types_1 = require("./types");
28
+ const cbor_x_1 = require("cbor-x");
29
+ class Dsg {
30
+ constructor(keyShare, partyIdx, derivationPath, messageHash, dklsWasm) {
31
+ this.dsgState = types_1.DsgState.Uninitialized;
32
+ this.partyIdx = partyIdx;
33
+ this.keyShareBytes = keyShare;
34
+ this.derivationPath = derivationPath;
35
+ this.messageHash = messageHash;
36
+ this.dklsWasm = dklsWasm !== null && dklsWasm !== void 0 ? dklsWasm : null;
37
+ }
38
+ _restoreSession() {
39
+ if (!this.dsgSession) {
40
+ this.dsgSession = this.getDklsWasm().SignSession.fromBytes(this.dsgSessionBytes);
41
+ }
42
+ }
43
+ _deserializeState() {
44
+ if (!this.dsgSession) {
45
+ throw Error('Session not intialized');
46
+ }
47
+ const round = (0, cbor_x_1.decode)(this.dsgSession.toBytes()).round;
48
+ switch (round) {
49
+ case 'WaitMsg1':
50
+ this.dsgState = types_1.DsgState.Round1;
51
+ break;
52
+ case 'WaitMsg2':
53
+ this.dsgState = types_1.DsgState.Round2;
54
+ break;
55
+ case 'WaitMsg3':
56
+ this.dsgState = types_1.DsgState.Round3;
57
+ break;
58
+ case 'Ended':
59
+ this.dsgState = types_1.DsgState.Complete;
60
+ break;
61
+ default:
62
+ this.dsgState = types_1.DsgState.InvalidState;
63
+ throw Error(`Invalid State: ${round}`);
64
+ }
65
+ }
66
+ async loadDklsWasm() {
67
+ if (!this.dklsWasm) {
68
+ this.dklsWasm = await Promise.resolve().then(() => __importStar(require('@silencelaboratories/dkls-wasm-ll-node')));
69
+ }
70
+ }
71
+ getDklsWasm() {
72
+ if (!this.dklsWasm) {
73
+ throw Error('DKLS wasm not loaded');
74
+ }
75
+ return this.dklsWasm;
76
+ }
77
+ /**
78
+ * Returns the current DSG session as a base64 string.
79
+ * @returns {string} - base64 string of the current DSG session
80
+ */
81
+ getSession() {
82
+ return Buffer.from(this.dsgSessionBytes).toString('base64');
83
+ }
84
+ /**
85
+ * Sets the DSG session from a base64 string.
86
+ * @param {string} session - base64 string of the DSG session
87
+ */
88
+ async setSession(session) {
89
+ this.dsgSession = undefined;
90
+ if (!this.dklsWasm) {
91
+ await this.loadDklsWasm();
92
+ }
93
+ const sessionBytes = new Uint8Array(Buffer.from(session, 'base64'));
94
+ const round = (0, cbor_x_1.decode)(sessionBytes).round;
95
+ switch (true) {
96
+ case round === 'WaitMsg1':
97
+ this.dsgState = types_1.DsgState.Round1;
98
+ break;
99
+ case round === 'WaitMsg2':
100
+ this.dsgState = types_1.DsgState.Round2;
101
+ break;
102
+ case round === 'WaitMsg3':
103
+ this.dsgState = types_1.DsgState.Round3;
104
+ break;
105
+ case 'WaitMsg4' in round:
106
+ this.dsgState = types_1.DsgState.Round4;
107
+ break;
108
+ default:
109
+ throw Error(`Invalid State: ${round}`);
110
+ }
111
+ this.dsgSessionBytes = sessionBytes;
112
+ }
113
+ async init() {
114
+ var _a;
115
+ if (this.dsgState !== types_1.DsgState.Uninitialized) {
116
+ throw Error('DSG session already initialized');
117
+ }
118
+ if (!this.dklsWasm) {
119
+ await this.loadDklsWasm();
120
+ }
121
+ if (typeof window !== 'undefined' &&
122
+ /* checks for electron processes */
123
+ !window.process &&
124
+ !((_a = window.process) === null || _a === void 0 ? void 0 : _a['type'])) {
125
+ /* This is only needed for browsers/web because it uses fetch to resolve the wasm asset for the web */
126
+ const initDkls = await Promise.resolve().then(() => __importStar(require('@silencelaboratories/dkls-wasm-ll-web')));
127
+ await initDkls.default();
128
+ }
129
+ const { Keyshare, SignSession } = this.getDklsWasm();
130
+ const keyShare = Keyshare.fromBytes(this.keyShareBytes);
131
+ if (keyShare.partyId !== this.partyIdx) {
132
+ throw Error(`Party index: ${this.partyIdx} does not match key share partyId: ${keyShare.partyId} `);
133
+ }
134
+ this.dsgSession = new SignSession(keyShare, this.derivationPath);
135
+ try {
136
+ const payload = this.dsgSession.createFirstMessage().payload;
137
+ this._deserializeState();
138
+ this.dsgSessionBytes = this.dsgSession.toBytes();
139
+ this.dsgSession = undefined;
140
+ return {
141
+ payload: payload,
142
+ from: this.partyIdx,
143
+ };
144
+ }
145
+ catch (e) {
146
+ throw Error(`Error while creating the first message from party ${this.partyIdx}: ${e}`);
147
+ }
148
+ }
149
+ get signature() {
150
+ if (!this._signature) {
151
+ throw Error('Can not request signature. Signature not produced yet.');
152
+ }
153
+ return this._signature;
154
+ }
155
+ /**
156
+ * Ends the DSG session by freeing any heap allocations from wasm. Note that the session is freed if a signature is produced.
157
+ */
158
+ endSession() {
159
+ if (this._signature) {
160
+ new Error('Session already ended because combined signature was produced.');
161
+ }
162
+ if (this.dsgSession) {
163
+ this.dsgSession.free();
164
+ }
165
+ this.dsgState = types_1.DsgState.Uninitialized;
166
+ }
167
+ /**
168
+ * Proccesses incoming messages to this party in the DKLs DSG protocol and
169
+ * produces messages from this party to other parties for the next round.
170
+ * @param messagesForIthRound - messages to process the current round
171
+ * @returns {DeserializedMessages} - messages to send to other parties for the next round
172
+ */
173
+ handleIncomingMessages(messagesForIthRound) {
174
+ let nextRoundMessages = [];
175
+ let nextRoundDeserializedMessages = { broadcastMessages: [], p2pMessages: [] };
176
+ this._restoreSession();
177
+ if (!this.dsgSession) {
178
+ throw Error('Session not initialized');
179
+ }
180
+ const { Message } = this.getDklsWasm();
181
+ try {
182
+ if (this.dsgState === types_1.DsgState.Round4) {
183
+ this.dsgState = types_1.DsgState.Complete;
184
+ const combineResult = this.dsgSession.combine(messagesForIthRound.broadcastMessages.map((m) => new Message(m.payload, m.from, undefined)));
185
+ this._signature = {
186
+ R: combineResult[0],
187
+ S: combineResult[1],
188
+ };
189
+ return { broadcastMessages: [], p2pMessages: [] };
190
+ }
191
+ else {
192
+ nextRoundMessages = this.dsgSession.handleMessages(messagesForIthRound.broadcastMessages
193
+ .map((m) => new Message(m.payload, m.from, undefined))
194
+ .concat(messagesForIthRound.p2pMessages.map((m) => new Message(m.payload, m.from, m.to))));
195
+ }
196
+ if (this.dsgState === types_1.DsgState.Round3) {
197
+ nextRoundMessages = [this.dsgSession.lastMessage(this.messageHash)];
198
+ this.dsgState = types_1.DsgState.Round4;
199
+ return {
200
+ broadcastMessages: [
201
+ {
202
+ payload: nextRoundMessages[0].payload,
203
+ from: nextRoundMessages[0].from_id,
204
+ signatureR: (0, cbor_x_1.decode)(this.dsgSession.toBytes()).round.WaitMsg4.r,
205
+ },
206
+ ],
207
+ p2pMessages: [],
208
+ };
209
+ }
210
+ else {
211
+ // Update round data.
212
+ this._deserializeState();
213
+ }
214
+ nextRoundDeserializedMessages = {
215
+ p2pMessages: nextRoundMessages
216
+ .filter((m) => m.to_id !== undefined)
217
+ .map((m) => {
218
+ if (m.to_id === undefined) {
219
+ throw Error('Invalid P2P message, missing to_id.');
220
+ }
221
+ const p2pReturn = {
222
+ payload: m.payload,
223
+ from: m.from_id,
224
+ to: m.to_id,
225
+ };
226
+ return p2pReturn;
227
+ }),
228
+ broadcastMessages: nextRoundMessages
229
+ .filter((m) => m.to_id === undefined)
230
+ .map((m) => {
231
+ const broadcastReturn = {
232
+ payload: m.payload,
233
+ from: m.from_id,
234
+ };
235
+ return broadcastReturn;
236
+ }),
237
+ };
238
+ }
239
+ catch (e) {
240
+ if (e.message.startsWith('Abort the protocol and ban')) {
241
+ throw Error('Signing aborted. Please stop all transaction signing from this wallet and contact support@bitgo.com.');
242
+ }
243
+ throw Error(`Error while creating messages from party ${this.partyIdx}, round ${this.dsgState}: ${e}`);
244
+ }
245
+ finally {
246
+ nextRoundMessages.forEach((m) => m.free());
247
+ // Session is freed when combine is called.
248
+ if (this.dsgState !== types_1.DsgState.Complete) {
249
+ this.dsgSessionBytes = this.dsgSession.toBytes();
250
+ this.dsgSession = undefined;
251
+ }
252
+ }
253
+ return nextRoundDeserializedMessages;
254
+ }
255
+ }
256
+ exports.Dsg = Dsg;
257
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHNnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3Rzcy9lY2RzYS1ka2xzL2RzZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUNBLG1DQUFrSDtBQUNsSCxtQ0FBZ0M7QUFRaEMsTUFBYSxHQUFHO0lBV2QsWUFDRSxRQUFnQixFQUNoQixRQUFnQixFQUNoQixjQUFzQixFQUN0QixXQUFtQixFQUNuQixRQUF3QjtRQVJoQixhQUFRLEdBQWEsZ0JBQVEsQ0FBQyxhQUFhLENBQUM7UUFVcEQsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7UUFDekIsSUFBSSxDQUFDLGFBQWEsR0FBRyxRQUFRLENBQUM7UUFDOUIsSUFBSSxDQUFDLGNBQWMsR0FBRyxjQUFjLENBQUM7UUFDckMsSUFBSSxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUM7UUFDL0IsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLGFBQVIsUUFBUSxjQUFSLFFBQVEsR0FBSSxJQUFJLENBQUM7SUFDbkMsQ0FBQztJQUVPLGVBQWU7UUFDckIsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDcEIsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7U0FDbEY7SUFDSCxDQUFDO0lBRU8saUJBQWlCO1FBQ3ZCLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQ3BCLE1BQU0sS0FBSyxDQUFDLHdCQUF3QixDQUFDLENBQUM7U0FDdkM7UUFDRCxNQUFNLEtBQUssR0FBRyxJQUFBLGVBQU0sRUFBQyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDO1FBQ3RELFFBQVEsS0FBSyxFQUFFO1lBQ2IsS0FBSyxVQUFVO2dCQUNiLElBQUksQ0FBQyxRQUFR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QUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ1YsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyw0QkFBNEIsQ0FBQyxFQUFFO2dCQUN0RCxNQUFNLEtBQUssQ0FDVCxzR0FBc0csQ0FDdkcsQ0FBQzthQUNIO1lBQ0QsTUFBTSxLQUFLLENBQUMsNENBQTRDLElBQUksQ0FBQyxRQUFRLFdBQVcsSUFBSSxDQUFDLFFBQVEsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1NBQ3hHO2dCQUFTO1lBQ1IsaUJBQWlCLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUMzQywyQ0FBMkM7WUFDM0MsSUFBSSxJQUFJLENBQUMsUUFBUSxLQUFLLGdCQUFRLENBQUMsUUFBUSxFQUFFO2dCQUN2QyxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQ2pELElBQUksQ0FBQyxVQUFVLEdBQUcsU0FBUyxDQUFDO2FBQzdCO1NBQ0Y7UUFDRCxPQUFPLDZCQUE2QixDQUFDO0lBQ3ZDLENBQUM7Q0FDRjtBQTlQRCxrQkE4UEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBNZXNzYWdlLCBTaWduU2Vzc2lvbiB9IGZyb20gJ0BzaWxlbmNlbGFib3JhdG9yaWVzL2RrbHMtd2FzbS1sbC1ub2RlJztcbmltcG9ydCB7IERlc2VyaWFsaXplZEJyb2FkY2FzdE1lc3NhZ2UsIERlc2VyaWFsaXplZERrbHNTaWduYXR1cmUsIERlc2VyaWFsaXplZE1lc3NhZ2VzLCBEc2dTdGF0ZSB9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgZGVjb2RlIH0gZnJvbSAnY2Jvci14JztcblxudHlwZSBOb2RlV2FzbWVyID0gdHlwZW9mIGltcG9ydCgnQHNpbGVuY2VsYWJvcmF0b3JpZXMvZGtscy13YXNtLWxsLW5vZGUnKTtcbnR5cGUgV2ViV2FzbWVyID0gdHlwZW9mIGltcG9ydCgnQHNpbGVuY2VsYWJvcmF0b3JpZXMvZGtscy13YXNtLWxsLXdlYicpO1xudHlwZSBCdW5kbGVyV2FzbWVyID0gdHlwZW9mIGltcG9ydCgnQHNpbGVuY2VsYWJvcmF0b3JpZXMvZGtscy13YXNtLWxsLWJ1bmRsZXInKTtcblxudHlwZSBEa2xzV2FzbSA9IE5vZGVXYXNtZXIgfCBXZWJXYXNtZXIgfCBCdW5kbGVyV2FzbWVyO1xuXG5leHBvcnQgY2xhc3MgRHNnIHtcbiAgcHJvdGVjdGVkIGRzZ1Nlc3Npb246IFNpZ25TZXNzaW9uIHwgdW5kZWZpbmVkO1xuICBwcm90ZWN0ZWQgZHNnU2Vzc2lvbkJ5dGVzOiBVaW50OEFycmF5O1xuICBwcml2YXRlIF9zaWduYXR1cmU6IERlc2VyaWFsaXplZERrbHNTaWduYXR1cmUgfCB1bmRlZmluZWQ7XG4gIHByb3RlY3RlZCBrZXlTaGFyZUJ5dGVzOiBCdWZmZXI7XG4gIHByb3RlY3RlZCBtZXNzYWdlSGFzaDogQnVmZmVyO1xuICBwcm90ZWN0ZWQgZGVyaXZhdGlvblBhdGg6IHN0cmluZztcbiAgcHJvdGVjdGVkIHBhcnR5SWR4OiBudW1iZXI7XG4gIHByb3RlY3RlZCBkc2dTdGF0ZTogRHNnU3RhdGUgPSBEc2dTdGF0ZS5VbmluaXRpYWxpemVkO1xuICBwcm90ZWN0ZWQgZGtsc1dhc206IERrbHNXYXNtIHwgbnVsbDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBrZXlTaGFyZTogQnVmZmVyLFxuICAgIHBhcnR5SWR4OiBudW1iZXIsXG4gICAgZGVyaXZhdGlvblBhdGg6IHN0cmluZyxcbiAgICBtZXNzYWdlSGFzaDogQnVmZmVyLFxuICAgIGRrbHNXYXNtPzogQnVuZGxlcldhc21lclxuICApIHtcbiAgICB0aGlzLnBhcnR5SWR4ID0gcGFydHlJZHg7XG4gICAgdGhpcy5rZXlTaGFyZUJ5dGVzID0ga2V5U2hhcmU7XG4gICAgdGhpcy5kZXJpdmF0aW9uUGF0aCA9IGRlcml2YXRpb25QYXRoO1xuICAgIHRoaXMubWVzc2FnZUhhc2ggPSBtZXNzYWdlSGFzaDtcbiAgICB0aGlzLmRrbHNXYXNtID0gZGtsc1dhc20gPz8gbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgX3Jlc3RvcmVTZXNzaW9uKCkge1xuICAgIGlmICghdGhpcy5kc2dTZXNzaW9uKSB7XG4gICAgICB0aGlzLmRzZ1Nlc3Npb24gPSB0aGlzLmdldERrbHNXYXNtKCkuU2lnblNlc3Npb24uZnJvbUJ5dGVzKHRoaXMuZHNnU2Vzc2lvbkJ5dGVzKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9kZXNlcmlhbGl6ZVN0YXRlKCkge1xuICAgIGlmICghdGhpcy5kc2dTZXNzaW9uKSB7XG4gICAgICB0aHJvdyBFcnJvcignU2Vzc2lvbiBub3QgaW50aWFsaXplZCcpO1xuICAgIH1cbiAgICBjb25zdCByb3VuZCA9IGRlY29kZSh0aGlzLmRzZ1Nlc3Npb24udG9CeXRlcygpKS5yb3VuZDtcbiAgICBzd2l0Y2ggKHJvdW5kKSB7XG4gICAgICBjYXNlICdXYWl0TXNnMSc6XG4gICAgICAgIHRoaXMuZHNnU3RhdGUgPSBEc2dTdGF0ZS5Sb3VuZDE7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnV2FpdE1zZzInOlxuICAgICAgICB0aGlzLmRzZ1N0YXRlID0gRHNnU3RhdGUuUm91bmQyO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ1dhaXRNc2czJzpcbiAgICAgICAgdGhpcy5kc2dTdGF0ZSA9IERzZ1N0YXRlLlJvdW5kMztcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdFbmRlZCc6XG4gICAgICAgIHRoaXMuZHNnU3RhdGUgPSBEc2dTdGF0ZS5Db21wbGV0ZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aGlzLmRzZ1N0YXRlID0gRHNnU3RhdGUuSW52YWxpZFN0YXRlO1xuICAgICAgICB0aHJvdyBFcnJvcihgSW52YWxpZCBTdGF0ZTogJHtyb3VuZH1gKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGxvYWREa2xzV2FzbSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIXRoaXMuZGtsc1dhc20pIHtcbiAgICAgIHRoaXMuZGtsc1dhc20gPSBhd2FpdCBpbXBvcnQoJ0BzaWxlbmNlbGFib3JhdG9yaWVzL2RrbHMtd2FzbS1sbC1ub2RlJyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXREa2xzV2FzbSgpIHtcbiAgICBpZiAoIXRoaXMuZGtsc1dhc20pIHtcbiAgICAgIHRocm93IEVycm9yKCdES0xTIHdhc20gbm90IGxvYWRlZCcpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmRrbHNXYXNtO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGN1cnJlbnQgRFNHIHNlc3Npb24gYXMgYSBiYXNlNjQgc3RyaW5nLlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSAtIGJhc2U2NCBzdHJpbmcgb2YgdGhlIGN1cnJlbnQgRFNHIHNlc3Npb25cbiAgICovXG4gIGdldFNlc3Npb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gQnVmZmVyLmZyb20odGhpcy5kc2dTZXNzaW9uQnl0ZXMpLnRvU3RyaW5nKCdiYXNlNjQnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBEU0cgc2Vzc2lvbiBmcm9tIGEgYmFzZTY0IHN0cmluZy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHNlc3Npb24gLSBiYXNlNjQgc3RyaW5nIG9mIHRoZSBEU0cgc2Vzc2lvblxuICAgKi9cbiAgYXN5bmMgc2V0U2Vzc2lvbihzZXNzaW9uOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLmRzZ1Nlc3Npb24gPSB1bmRlZmluZWQ7XG4gICAgaWYgKCF0aGlzLmRrbHNXYXNtKSB7XG4gICAgICBhd2FpdCB0aGlzLmxvYWREa2xzV2FzbSgpO1xuICAgIH1cbiAgICBjb25zdCBzZXNzaW9uQnl0ZXMgPSBuZXcgVWludDhBcnJheShCdWZmZXIuZnJvbShzZXNzaW9uLCAnYmFzZTY0JykpO1xuICAgIGNvbnN0IHJvdW5kID0gZGVjb2RlKHNlc3Npb25CeXRlcykucm91bmQ7XG4gICAgc3dpdGNoICh0cnVlKSB7XG4gICAgICBjYXNlIHJvdW5kID09PSAnV2FpdE1zZzEnOlxuICAgICAgICB0aGlzLmRzZ1N0YXRlID0gRHNnU3RhdGUuUm91bmQxO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2Ugcm91bmQgPT09ICdXYWl0TXNnMic6XG4gICAgICAgIHRoaXMuZHNnU3RhdGUgPSBEc2dTdGF0ZS5Sb3VuZDI7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSByb3VuZCA9PT0gJ1dhaXRNc2czJzpcbiAgICAgICAgdGhpcy5kc2dTdGF0ZSA9IERzZ1N0YXRlLlJvdW5kMztcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdXYWl0TXNnNCcgaW4gcm91bmQ6XG4gICAgICAgIHRoaXMuZHNnU3RhdGUgPSBEc2dTdGF0ZS5Sb3VuZDQ7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgRXJyb3IoYEludmFsaWQgU3RhdGU6ICR7cm91bmR9YCk7XG4gICAgfVxuICAgIHRoaXMuZHNnU2Vzc2lvbkJ5dGVzID0gc2Vzc2lvbkJ5dGVzO1xuICB9XG5cbiAgYXN5bmMgaW5pdCgpOiBQcm9taXNlPERlc2VyaWFsaXplZEJyb2FkY2FzdE1lc3NhZ2U+IHtcbiAgICBpZiAodGhpcy5kc2dTdGF0ZSAhPT0gRHNnU3RhdGUuVW5pbml0aWFsaXplZCkge1xuICAgICAgdGhyb3cgRXJyb3IoJ0RTRyBzZXNzaW9uIGFscmVhZHkgaW5pdGlhbGl6ZWQnKTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLmRrbHNXYXNtKSB7XG4gICAgICBhd2FpdCB0aGlzLmxvYWREa2xzV2FzbSgpO1xuICAgIH1cbiAgICBpZiAoXG4gICAgICB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJlxuICAgICAgLyogY2hlY2tzIGZvciBlbGVjdHJvbiBwcm9jZXNzZXMgKi9cbiAgICAgICF3aW5kb3cucHJvY2VzcyAmJlxuICAgICAgIXdpbmRvdy5wcm9jZXNzPy5bJ3R5cGUnXVxuICAgICkge1xuICAgICAgLyogVGhpcyBpcyBvbmx5IG5lZWRlZCBmb3IgYnJvd3NlcnMvd2ViIGJlY2F1c2UgaXQgdXNlcyBmZXRjaCB0byByZXNvbHZlIHRoZSB3YXNtIGFzc2V0IGZvciB0aGUgd2ViICovXG4gICAgICBjb25zdCBpbml0RGtscyA9IGF3YWl0IGltcG9ydCgnQHNpbGVuY2VsYWJvcmF0b3JpZXMvZGtscy13YXNtLWxsLXdlYicpO1xuICAgICAgYXdhaXQgaW5pdERrbHMuZGVmYXVsdCgpO1xuICAgIH1cbiAgICBjb25zdCB7IEtleXNoYXJlLCBTaWduU2Vzc2lvbiB9ID0gdGhpcy5nZXREa2xzV2FzbSgpO1xuICAgIGNvbnN0IGtleVNoYXJlID0gS2V5c2hhcmUuZnJvbUJ5dGVzKHRoaXMua2V5U2hhcmVCeXRlcyk7XG4gICAgaWYgKGtleVNoYXJlLnBhcnR5SWQgIT09IHRoaXMucGFydHlJZHgpIHtcbiAgICAgIHRocm93IEVycm9yKGBQYXJ0eSBpbmRleDogJHt0aGlzLnBhcnR5SWR4fSBkb2VzIG5vdCBtYXRjaCBrZXkgc2hhcmUgcGFydHlJZDogJHtrZXlTaGFyZS5wYXJ0eUlkfSBgKTtcbiAgICB9XG4gICAgdGhpcy5kc2dTZXNzaW9uID0gbmV3IFNpZ25TZXNzaW9uKGtleVNoYXJlLCB0aGlzLmRlcml2YXRpb25QYXRoKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcGF5bG9hZCA9IHRoaXMuZHNnU2Vzc2lvbi5jcmVhdGVGaXJzdE1lc3NhZ2UoKS5wYXlsb2FkO1xuICAgICAgdGhpcy5fZGVzZXJpYWxpemVTdGF0ZSgpO1xuICAgICAgdGhpcy5kc2dTZXNzaW9uQnl0ZXMgPSB0aGlzLmRzZ1Nlc3Npb24udG9CeXRlcygpO1xuICAgICAgdGhpcy5kc2dTZXNzaW9uID0gdW5kZWZpbmVkO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcGF5bG9hZDogcGF5bG9hZCxcbiAgICAgICAgZnJvbTogdGhpcy5wYXJ0eUlkeCxcbiAgICAgIH07XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhyb3cgRXJyb3IoYEVycm9yIHdoaWxlIGNyZWF0aW5nIHRoZSBmaXJzdCBtZXNzYWdlIGZyb20gcGFydHkgJHt0aGlzLnBhcnR5SWR4fTogJHtlfWApO1xuICAgIH1cbiAgfVxuXG4gIGdldCBzaWduYXR1cmUoKTogRGVzZXJpYWxpemVkRGtsc1NpZ25hdHVyZSB7XG4gICAgaWYgKCF0aGlzLl9zaWduYXR1cmUpIHtcbiAgICAgIHRocm93IEVycm9yKCdDYW4gbm90IHJlcXVlc3Qgc2lnbmF0dXJlLiBTaWduYXR1cmUgbm90IHByb2R1Y2VkIHlldC4nKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX3NpZ25hdHVyZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFbmRzIHRoZSBEU0cgc2Vzc2lvbiBieSBmcmVlaW5nIGFueSBoZWFwIGFsbG9jYXRpb25zIGZyb20gd2FzbS4gTm90ZSB0aGF0IHRoZSBzZXNzaW9uIGlzIGZyZWVkIGlmIGEgc2lnbmF0dXJlIGlzIHByb2R1Y2VkLlxuICAgKi9cbiAgZW5kU2Vzc2lvbigpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fc2lnbmF0dXJlKSB7XG4gICAgICBuZXcgRXJyb3IoJ1Nlc3Npb24gYWxyZWFkeSBlbmRlZCBiZWNhdXNlIGNvbWJpbmVkIHNpZ25hdHVyZSB3YXMgcHJvZHVjZWQuJyk7XG4gICAgfVxuICAgIGlmICh0aGlzLmRzZ1Nlc3Npb24pIHtcbiAgICAgIHRoaXMuZHNnU2Vzc2lvbi5mcmVlKCk7XG4gICAgfVxuICAgIHRoaXMuZHNnU3RhdGUgPSBEc2dTdGF0ZS5VbmluaXRpYWxpemVkO1xuICB9XG5cbiAgLyoqXG4gICAqIFByb2NjZXNzZXMgaW5jb21pbmcgbWVzc2FnZXMgdG8gdGhpcyBwYXJ0eSBpbiB0aGUgREtMcyBEU0cgcHJvdG9jb2wgYW5kXG4gICAqIHByb2R1Y2VzIG1lc3NhZ2VzIGZyb20gdGhpcyBwYXJ0eSB0byBvdGhlciBwYXJ0aWVzIGZvciB0aGUgbmV4dCByb3VuZC5cbiAgICogQHBhcmFtIG1lc3NhZ2VzRm9ySXRoUm91bmQgLSBtZXNzYWdlcyB0byBwcm9jZXNzIHRoZSBjdXJyZW50IHJvdW5kXG4gICAqIEByZXR1cm5zIHtEZXNlcmlhbGl6ZWRNZXNzYWdlc30gLSBtZXNzYWdlcyB0byBzZW5kIHRvIG90aGVyIHBhcnRpZXMgZm9yIHRoZSBuZXh0IHJvdW5kXG4gICAqL1xuICBoYW5kbGVJbmNvbWluZ01lc3NhZ2VzKG1lc3NhZ2VzRm9ySXRoUm91bmQ6IERlc2VyaWFsaXplZE1lc3NhZ2VzKTogRGVzZXJpYWxpemVkTWVzc2FnZXMge1xuICAgIGxldCBuZXh0Um91bmRNZXNzYWdlczogTWVzc2FnZVtdID0gW107XG4gICAgbGV0IG5leHRSb3VuZERlc2VyaWFsaXplZE1lc3NhZ2VzOiBEZXNlcmlhbGl6ZWRNZXNzYWdlcyA9IHsgYnJvYWRjYXN0TWVzc2FnZXM6IFtdLCBwMnBNZXNzYWdlczogW10gfTtcbiAgICB0aGlzLl9yZXN0b3JlU2Vzc2lvbigpO1xuICAgIGlmICghdGhpcy5kc2dTZXNzaW9uKSB7XG4gICAgICB0aHJvdyBFcnJvcignU2Vzc2lvbiBub3QgaW5pdGlhbGl6ZWQnKTtcbiAgICB9XG4gICAgY29uc3QgeyBNZXNzYWdlIH0gPSB0aGlzLmdldERrbHNXYXNtKCk7XG4gICAgdHJ5IHtcbiAgICAgIGlmICh0aGlzLmRzZ1N0YXRlID09PSBEc2dTdGF0ZS5Sb3VuZDQpIHtcbiAgICAgICAgdGhpcy5kc2dTdGF0ZSA9IERzZ1N0YXRlLkNvbXBsZXRlO1xuICAgICAgICBjb25zdCBjb21iaW5lUmVzdWx0ID0gdGhpcy5kc2dTZXNzaW9uLmNvbWJpbmUoXG4gICAgICAgICAgbWVzc2FnZXNGb3JJdGhSb3VuZC5icm9hZGNhc3RNZXNzYWdlcy5tYXAoKG0pID0+IG5ldyBNZXNzYWdlKG0ucGF5bG9hZCwgbS5mcm9tLCB1bmRlZmluZWQpKVxuICAgICAgICApO1xuICAgICAgICB0aGlzLl9zaWduYXR1cmUgPSB7XG4gICAgICAgICAgUjogY29tYmluZVJlc3VsdFswXSxcbiAgICAgICAgICBTOiBjb21iaW5lUmVzdWx0WzFdLFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4geyBicm9hZGNhc3RNZXNzYWdlczogW10sIHAycE1lc3NhZ2VzOiBbXSB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbmV4dFJvdW5kTWVzc2FnZXMgPSB0aGlzLmRzZ1Nlc3Npb24uaGFuZGxlTWVzc2FnZXMoXG4gICAgICAgICAgbWVzc2FnZXNGb3JJdGhSb3VuZC5icm9hZGNhc3RNZXNzYWdlc1xuICAgICAgICAgICAgLm1hcCgobSkgPT4gbmV3IE1lc3NhZ2UobS5wYXlsb2FkLCBtLmZyb20sIHVuZGVmaW5lZCkpXG4gICAgICAgICAgICAuY29uY2F0KG1lc3NhZ2VzRm9ySXRoUm91bmQucDJwTWVzc2FnZXMubWFwKChtKSA9PiBuZXcgTWVzc2FnZShtLnBheWxvYWQsIG0uZnJvbSwgbS50bykpKVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuZHNnU3RhdGUgPT09IERzZ1N0YXRlLlJvdW5kMykge1xuICAgICAgICBuZXh0Um91bmRNZXNzYWdlcyA9IFt0aGlzLmRzZ1Nlc3Npb24ubGFzdE1lc3NhZ2UodGhpcy5tZXNzYWdlSGFzaCldO1xuICAgICAgICB0aGlzLmRzZ1N0YXRlID0gRHNnU3RhdGUuUm91bmQ0O1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGJyb2FkY2FzdE1lc3NhZ2VzOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHBheWxvYWQ6IG5leHRSb3VuZE1lc3NhZ2VzWzBdLnBheWxvYWQsXG4gICAgICAgICAgICAgIGZyb206IG5leHRSb3VuZE1lc3NhZ2VzWzBdLmZyb21faWQsXG4gICAgICAgICAgICAgIHNpZ25hdHVyZVI6IGRlY29kZSh0aGlzLmRzZ1Nlc3Npb24udG9CeXRlcygpKS5yb3VuZC5XYWl0TXNnNC5yLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICAgIHAycE1lc3NhZ2VzOiBbXSxcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFVwZGF0ZSByb3VuZCBkYXRhLlxuICAgICAgICB0aGlzLl9kZXNlcmlhbGl6ZVN0YXRlKCk7XG4gICAgICB9XG4gICAgICBuZXh0Um91bmREZXNlcmlhbGl6ZWRNZXNzYWdlcyA9IHtcbiAgICAgICAgcDJwTWVzc2FnZXM6IG5leHRSb3VuZE1lc3NhZ2VzXG4gICAgICAgICAgLmZpbHRlcigobSkgPT4gbS50b19pZCAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgIC5tYXAoKG0pID0+IHtcbiAgICAgICAgICAgIGlmIChtLnRvX2lkID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoJ0ludmFsaWQgUDJQIG1lc3NhZ2UsIG1pc3NpbmcgdG9faWQuJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBwMnBSZXR1cm4gPSB7XG4gICAgICAgICAgICAgIHBheWxvYWQ6IG0ucGF5bG9hZCxcbiAgICAgICAgICAgICAgZnJvbTogbS5mcm9tX2lkLFxuICAgICAgICAgICAgICB0bzogbS50b19pZCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICByZXR1cm4gcDJwUmV0dXJuO1xuICAgICAgICAgIH0pLFxuICAgICAgICBicm9hZGNhc3RNZXNzYWdlczogbmV4dFJvdW5kTWVzc2FnZXNcbiAgICAgICAgICAuZmlsdGVyKChtKSA9PiBtLnRvX2lkID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgLm1hcCgobSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgYnJvYWRjYXN0UmV0dXJuID0ge1xuICAgICAgICAgICAgICBwYXlsb2FkOiBtLnBheWxvYWQsXG4gICAgICAgICAgICAgIGZyb206IG0uZnJvbV9pZCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICByZXR1cm4gYnJvYWRjYXN0UmV0dXJuO1xuICAgICAgICAgIH0pLFxuICAgICAgfTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBpZiAoZS5tZXNzYWdlLnN0YXJ0c1dpdGgoJ0Fib3J0IHRoZSBwcm90b2NvbCBhbmQgYmFuJykpIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgJ1NpZ25pbmcgYWJvcnRlZC4gUGxlYXNlIHN0b3AgYWxsIHRyYW5zYWN0aW9uIHNpZ25pbmcgZnJvbSB0aGlzIHdhbGxldCBhbmQgY29udGFjdCBzdXBwb3J0QGJpdGdvLmNvbS4nXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICB0aHJvdyBFcnJvcihgRXJyb3Igd2hpbGUgY3JlYXRpbmcgbWVzc2FnZXMgZnJvbSBwYXJ0eSAke3RoaXMucGFydHlJZHh9LCByb3VuZCAke3RoaXMuZHNnU3RhdGV9OiAke2V9YCk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIG5leHRSb3VuZE1lc3NhZ2VzLmZvckVhY2goKG0pID0+IG0uZnJlZSgpKTtcbiAgICAgIC8vIFNlc3Npb24gaXMgZnJlZWQgd2hlbiBjb21iaW5lIGlzIGNhbGxlZC5cbiAgICAgIGlmICh0aGlzLmRzZ1N0YXRlICE9PSBEc2dTdGF0ZS5Db21wbGV0ZSkge1xuICAgICAgICB0aGlzLmRzZ1Nlc3Npb25CeXRlcyA9IHRoaXMuZHNnU2Vzc2lvbi50b0J5dGVzKCk7XG4gICAgICAgIHRoaXMuZHNnU2Vzc2lvbiA9IHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG5leHRSb3VuZERlc2VyaWFsaXplZE1lc3NhZ2VzO1xuICB9XG59XG4iXX0=
@@ -0,0 +1,6 @@
1
+ export * as DklsDkg from './dkg';
2
+ export * as DklsDsg from './dsg';
3
+ export * as DklsTypes from './types';
4
+ export * as DklsComms from './commsLayer';
5
+ export * as DklsUtils from './util';
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/tss/ecdsa-dkls/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,OAAO,CAAC;AACjC,OAAO,KAAK,OAAO,MAAM,OAAO,CAAC;AACjC,OAAO,KAAK,SAAS,MAAM,SAAS,CAAC;AACrC,OAAO,KAAK,SAAS,MAAM,cAAc,CAAC;AAC1C,OAAO,KAAK,SAAS,MAAM,QAAQ,CAAC"}
@@ -0,0 +1,32 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ exports.DklsUtils = exports.DklsComms = exports.DklsTypes = exports.DklsDsg = exports.DklsDkg = void 0;
27
+ exports.DklsDkg = __importStar(require("./dkg"));
28
+ exports.DklsDsg = __importStar(require("./dsg"));
29
+ exports.DklsTypes = __importStar(require("./types"));
30
+ exports.DklsComms = __importStar(require("./commsLayer"));
31
+ exports.DklsUtils = __importStar(require("./util"));
32
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvdHNzL2VjZHNhLWRrbHMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxpREFBaUM7QUFDakMsaURBQWlDO0FBQ2pDLHFEQUFxQztBQUNyQywwREFBMEM7QUFDMUMsb0RBQW9DIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogYXMgRGtsc0RrZyBmcm9tICcuL2RrZyc7XG5leHBvcnQgKiBhcyBEa2xzRHNnIGZyb20gJy4vZHNnJztcbmV4cG9ydCAqIGFzIERrbHNUeXBlcyBmcm9tICcuL3R5cGVzJztcbmV4cG9ydCAqIGFzIERrbHNDb21tcyBmcm9tICcuL2NvbW1zTGF5ZXInO1xuZXhwb3J0ICogYXMgRGtsc1V0aWxzIGZyb20gJy4vdXRpbCc7XG4iXX0=
@@ -0,0 +1,119 @@
1
+ /// <reference types="node" />
2
+ import * as t from 'io-ts';
3
+ import { XShare } from '../ecdsa/types';
4
+ interface BroadcastMessage<T> {
5
+ payload: T;
6
+ from: number;
7
+ signatureR?: T;
8
+ }
9
+ interface P2PMessage<T, G> {
10
+ payload: T;
11
+ from: number;
12
+ commitment?: G;
13
+ to: number;
14
+ }
15
+ export declare enum DkgState {
16
+ Uninitialized = 0,
17
+ Round1 = 1,
18
+ Round2 = 2,
19
+ Round3 = 3,
20
+ Round4 = 4,
21
+ Complete = 5,
22
+ InvalidState = 6
23
+ }
24
+ export declare enum DsgState {
25
+ Uninitialized = 0,
26
+ Round1 = 1,
27
+ Round2 = 2,
28
+ Round3 = 3,
29
+ Round4 = 4,
30
+ Complete = 5,
31
+ InvalidState = 6
32
+ }
33
+ export declare type AuthEncMessage = {
34
+ encryptedMessage: string;
35
+ signature: string;
36
+ };
37
+ export declare type AuthMessage = {
38
+ message: string;
39
+ signature: string;
40
+ };
41
+ export declare type PartyGpgKey = {
42
+ partyId: number;
43
+ gpgKey: string;
44
+ };
45
+ export declare type DklsSignature<T> = {
46
+ R: T;
47
+ S: T;
48
+ };
49
+ export declare type RetrofitData = {
50
+ xShare: Partial<XShare>;
51
+ xiList?: number[][];
52
+ };
53
+ export declare const ReducedKeyShareType: t.TypeC<{
54
+ bigSList: t.ArrayC<t.ArrayC<t.NumberC>>;
55
+ xList: t.ArrayC<t.ArrayC<t.NumberC>>;
56
+ rootChainCode: t.ArrayC<t.NumberC>;
57
+ prv: t.ArrayC<t.NumberC>;
58
+ pub: t.ArrayC<t.NumberC>;
59
+ }>;
60
+ export declare type ReducedKeyShare = t.TypeOf<typeof ReducedKeyShareType>;
61
+ export declare type SerializedBroadcastMessage = BroadcastMessage<string>;
62
+ export declare type DeserializedBroadcastMessage = BroadcastMessage<Uint8Array>;
63
+ export declare type SerializedP2PMessage = P2PMessage<string, string>;
64
+ export declare type DeserializedP2PMessage = P2PMessage<Uint8Array, Uint8Array>;
65
+ export declare type SerializedDklsSignature = DklsSignature<string>;
66
+ export declare type DeserializedDklsSignature = DklsSignature<Uint8Array>;
67
+ export declare type AuthEncP2PMessage = P2PMessage<AuthEncMessage, string>;
68
+ export declare type AuthBroadcastMessage = BroadcastMessage<AuthMessage>;
69
+ export declare type SerializedMessages = {
70
+ p2pMessages: SerializedP2PMessage[];
71
+ broadcastMessages: SerializedBroadcastMessage[];
72
+ };
73
+ export declare type AuthEncMessages = {
74
+ p2pMessages: AuthEncP2PMessage[];
75
+ broadcastMessages: AuthBroadcastMessage[];
76
+ };
77
+ export declare type DeserializedMessages = {
78
+ p2pMessages: DeserializedP2PMessage[];
79
+ broadcastMessages: DeserializedBroadcastMessage[];
80
+ };
81
+ /**
82
+ * Serializes messages payloads to base64 strings.
83
+ * @param messages
84
+ */
85
+ export declare function serializeMessages(messages: DeserializedMessages): SerializedMessages;
86
+ /**
87
+ * Deserialize messages payloads to Uint8Array.
88
+ * @param messages
89
+ */
90
+ export declare function deserializeMessages(messages: SerializedMessages): DeserializedMessages;
91
+ /**
92
+ * Deserializes a P2P message.
93
+ * @param message
94
+ */
95
+ export declare function deserializeP2PMessage(message: SerializedP2PMessage): DeserializedP2PMessage;
96
+ /**
97
+ * Deserializes a Broadcast message.
98
+ * @param message
99
+ */
100
+ export declare function deserializeBroadcastMessage(message: SerializedBroadcastMessage): DeserializedBroadcastMessage;
101
+ /**
102
+ * Serializes a P2P message.
103
+ * @param message
104
+ */
105
+ export declare function serializeP2PMessage(message: DeserializedP2PMessage): SerializedP2PMessage;
106
+ /**
107
+ * Serializes a Broadcast message.
108
+ * @param message
109
+ */
110
+ export declare function serializeBroadcastMessage(message: DeserializedBroadcastMessage): SerializedBroadcastMessage;
111
+ /**
112
+ * Gets commonkeyChain from DKLS keyShare
113
+ * @param {Buffer} keyShare - DKLS keyShare
114
+ * @returns {string} commonKeychain in hex format
115
+ */
116
+ export declare function getCommonKeychain(keyShare: Buffer): string;
117
+ export declare function getDecodedReducedKeyShare(reducedKeyShare: Buffer | Uint8Array): ReducedKeyShare;
118
+ export {};
119
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/tss/ecdsa-dkls/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,155 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __importDefault = (this && this.__importDefault) || function (mod) {
26
+ return (mod && mod.__esModule) ? mod : { "default": mod };
27
+ };
28
+ Object.defineProperty(exports, "__esModule", { value: true });
29
+ exports.getDecodedReducedKeyShare = exports.getCommonKeychain = exports.serializeBroadcastMessage = exports.serializeP2PMessage = exports.deserializeBroadcastMessage = exports.deserializeP2PMessage = exports.deserializeMessages = exports.serializeMessages = exports.ReducedKeyShareType = exports.DsgState = exports.DkgState = void 0;
30
+ const assert_1 = __importDefault(require("assert"));
31
+ const cbor_x_1 = require("cbor-x");
32
+ const t = __importStar(require("io-ts"));
33
+ const Either_1 = require("fp-ts/Either");
34
+ var DkgState;
35
+ (function (DkgState) {
36
+ DkgState[DkgState["Uninitialized"] = 0] = "Uninitialized";
37
+ DkgState[DkgState["Round1"] = 1] = "Round1";
38
+ DkgState[DkgState["Round2"] = 2] = "Round2";
39
+ DkgState[DkgState["Round3"] = 3] = "Round3";
40
+ DkgState[DkgState["Round4"] = 4] = "Round4";
41
+ DkgState[DkgState["Complete"] = 5] = "Complete";
42
+ DkgState[DkgState["InvalidState"] = 6] = "InvalidState";
43
+ })(DkgState = exports.DkgState || (exports.DkgState = {}));
44
+ var DsgState;
45
+ (function (DsgState) {
46
+ DsgState[DsgState["Uninitialized"] = 0] = "Uninitialized";
47
+ DsgState[DsgState["Round1"] = 1] = "Round1";
48
+ DsgState[DsgState["Round2"] = 2] = "Round2";
49
+ DsgState[DsgState["Round3"] = 3] = "Round3";
50
+ DsgState[DsgState["Round4"] = 4] = "Round4";
51
+ DsgState[DsgState["Complete"] = 5] = "Complete";
52
+ DsgState[DsgState["InvalidState"] = 6] = "InvalidState";
53
+ })(DsgState = exports.DsgState || (exports.DsgState = {}));
54
+ exports.ReducedKeyShareType = t.type({
55
+ bigSList: t.array(t.array(t.number)),
56
+ xList: t.array(t.array(t.number)),
57
+ rootChainCode: t.array(t.number),
58
+ prv: t.array(t.number),
59
+ pub: t.array(t.number),
60
+ });
61
+ /**
62
+ * Serializes messages payloads to base64 strings.
63
+ * @param messages
64
+ */
65
+ function serializeMessages(messages) {
66
+ return {
67
+ p2pMessages: messages.p2pMessages.map(serializeP2PMessage),
68
+ broadcastMessages: messages.broadcastMessages.map(serializeBroadcastMessage),
69
+ };
70
+ }
71
+ exports.serializeMessages = serializeMessages;
72
+ /**
73
+ * Deserialize messages payloads to Uint8Array.
74
+ * @param messages
75
+ */
76
+ function deserializeMessages(messages) {
77
+ return {
78
+ p2pMessages: messages.p2pMessages.map(deserializeP2PMessage),
79
+ broadcastMessages: messages.broadcastMessages.map(deserializeBroadcastMessage),
80
+ };
81
+ }
82
+ exports.deserializeMessages = deserializeMessages;
83
+ /**
84
+ * Deserializes a P2P message.
85
+ * @param message
86
+ */
87
+ function deserializeP2PMessage(message) {
88
+ return {
89
+ to: message.to,
90
+ from: message.from,
91
+ payload: new Uint8Array(Buffer.from(message.payload, 'base64')),
92
+ commitment: message.commitment ? new Uint8Array(Buffer.from(message.commitment, 'hex')) : undefined,
93
+ };
94
+ }
95
+ exports.deserializeP2PMessage = deserializeP2PMessage;
96
+ /**
97
+ * Deserializes a Broadcast message.
98
+ * @param message
99
+ */
100
+ function deserializeBroadcastMessage(message) {
101
+ return {
102
+ from: message.from,
103
+ payload: new Uint8Array(Buffer.from(message.payload, 'base64')),
104
+ signatureR: message.signatureR ? new Uint8Array(Buffer.from(message.signatureR, 'base64')) : undefined,
105
+ };
106
+ }
107
+ exports.deserializeBroadcastMessage = deserializeBroadcastMessage;
108
+ /**
109
+ * Serializes a P2P message.
110
+ * @param message
111
+ */
112
+ function serializeP2PMessage(message) {
113
+ return {
114
+ to: message.to,
115
+ from: message.from,
116
+ payload: Buffer.from(message.payload).toString('base64'),
117
+ commitment: message.commitment ? Buffer.from(message.commitment).toString('hex') : undefined,
118
+ };
119
+ }
120
+ exports.serializeP2PMessage = serializeP2PMessage;
121
+ /**
122
+ * Serializes a Broadcast message.
123
+ * @param message
124
+ */
125
+ function serializeBroadcastMessage(message) {
126
+ return {
127
+ from: message.from,
128
+ payload: Buffer.from(message.payload).toString('base64'),
129
+ signatureR: message.signatureR ? Buffer.from(message.signatureR).toString('base64') : undefined,
130
+ };
131
+ }
132
+ exports.serializeBroadcastMessage = serializeBroadcastMessage;
133
+ /**
134
+ * Gets commonkeyChain from DKLS keyShare
135
+ * @param {Buffer} keyShare - DKLS keyShare
136
+ * @returns {string} commonKeychain in hex format
137
+ */
138
+ function getCommonKeychain(keyShare) {
139
+ const parsedKeyShare = (0, cbor_x_1.decode)(keyShare);
140
+ (0, assert_1.default)(parsedKeyShare.public_key, 'public_key not found in keyShare');
141
+ (0, assert_1.default)(parsedKeyShare.root_chain_code, 'root_chain_code not found in public_key');
142
+ const publicKey = Buffer.from(parsedKeyShare.public_key).toString('hex');
143
+ const rootChainCode = Buffer.from(parsedKeyShare.root_chain_code).toString('hex');
144
+ return publicKey + rootChainCode;
145
+ }
146
+ exports.getCommonKeychain = getCommonKeychain;
147
+ function getDecodedReducedKeyShare(reducedKeyShare) {
148
+ const decoded = exports.ReducedKeyShareType.decode((0, cbor_x_1.decode)(reducedKeyShare));
149
+ if ((0, Either_1.isLeft)(decoded)) {
150
+ throw new Error(`Unable to parse reducedKeyShare: ${decoded.left}`);
151
+ }
152
+ return decoded.right;
153
+ }
154
+ exports.getDecodedReducedKeyShare = getDecodedReducedKeyShare;
155
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvdHNzL2VjZHNhLWRrbHMvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxvREFBNEI7QUFDNUIsbUNBQWdDO0FBQ2hDLHlDQUEyQjtBQUUzQix5Q0FBc0M7QUFpQnRDLElBQVksUUFRWDtBQVJELFdBQVksUUFBUTtJQUNsQix5REFBaUIsQ0FBQTtJQUNqQiwyQ0FBTSxDQUFBO0lBQ04sMkNBQU0sQ0FBQTtJQUNOLDJDQUFNLENBQUE7SUFDTiwyQ0FBTSxDQUFBO0lBQ04sK0NBQVEsQ0FBQTtJQUNSLHVEQUFZLENBQUE7QUFDZCxDQUFDLEVBUlcsUUFBUSxHQUFSLGdCQUFRLEtBQVIsZ0JBQVEsUUFRbkI7QUFFRCxJQUFZLFFBUVg7QUFSRCxXQUFZLFFBQVE7SUFDbEIseURBQWEsQ0FBQTtJQUNiLDJDQUFNLENBQUE7SUFDTiwyQ0FBTSxDQUFBO0lBQ04sMkNBQU0sQ0FBQTtJQUNOLDJDQUFNLENBQUE7SUFDTiwrQ0FBUSxDQUFBO0lBQ1IsdURBQVksQ0FBQTtBQUNkLENBQUMsRUFSVyxRQUFRLEdBQVIsZ0JBQVEsS0FBUixnQkFBUSxRQVFuQjtBQXVCWSxRQUFBLG1CQUFtQixHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDeEMsUUFBUSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDcEMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDakMsYUFBYSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztJQUNoQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFB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QVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUztLQUNoRyxDQUFDO0FBQ0osQ0FBQztBQU5ELDhEQU1DO0FBRUQ7Ozs7R0FJRztBQUNILFNBQWdCLGlCQUFpQixDQUFDLFFBQWdCO0lBQ2hELE1BQU0sY0FBYyxHQUFHLElBQUEsZUFBTSxFQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3hDLElBQUEsZ0JBQU0sRUFBQyxjQUFjLENBQUMsVUFBVSxFQUFFLGtDQUFrQyxDQUFDLENBQUM7SUFDdEUsSUFBQSxnQkFBTSxFQUFDLGNBQWMsQ0FBQyxlQUFlLEVBQUUseUNBQXlDLENBQUMsQ0FBQztJQUNsRixNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDekUsTUFBTSxhQUFhLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsZUFBZSxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2xGLE9BQU8sU0FBUyxHQUFHLGFBQWEsQ0FBQztBQUNuQyxDQUFDO0FBUEQsOENBT0M7QUFFRCxTQUFnQix5QkFBeUIsQ0FBQyxlQUFvQztJQUM1RSxNQUFNLE9BQU8sR0FBRywyQkFBbUIsQ0FBQyxNQUFNLENBQUMsSUFBQSxlQUFNLEVBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQztJQUNwRSxJQUFJLElBQUEsZUFBTSxFQUFDLE9BQU8sQ0FBQyxFQUFFO1FBQ25CLE1BQU0sSUFBSSxLQUFLLENBQUMsb0NBQW9DLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0tBQ3JFO0lBQ0QsT0FBTyxPQUFPLENBQUMsS0FBSyxDQUFDO0FBQ3ZCLENBQUM7QUFORCw4REFNQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcbmltcG9ydCB7IGRlY29kZSB9IGZyb20gJ2Nib3IteCc7XG5pbXBvcnQgKiBhcyB0IGZyb20gJ2lvLXRzJztcbmltcG9ydCB7IFhTaGFyZSB9IGZyb20gJy4uL2VjZHNhL3R5cGVzJztcbmltcG9ydCB7IGlzTGVmdCB9IGZyb20gJ2ZwLXRzL0VpdGhlcic7XG5cbi8vIEJyb2FkY2FzdCBtZXNzYWdlIG1lYW50IHRvIGJlIHNlbnQgdG8gbXVsdGlwbGUgcGFydGllc1xuaW50ZXJmYWNlIEJyb2FkY2FzdE1lc3NhZ2U8VD4ge1xuICBwYXlsb2FkOiBUO1xuICBmcm9tOiBudW1iZXI7XG4gIHNpZ25hdHVyZVI/OiBUO1xufVxuXG4vLyBQMlAgbWVzc2FnZSBtZWFudCB0byBiZSBzZW50IHRvIGEgc3BlY2lmaWMgcGFydHlcbmludGVyZmFjZSBQMlBNZXNzYWdlPFQsIEc+IHtcbiAgcGF5bG9hZDogVDtcbiAgZnJvbTogbnVtYmVyO1xuICBjb21taXRtZW50PzogRztcbiAgdG86IG51bWJlcjtcbn1cblxuZXhwb3J0IGVudW0gRGtnU3RhdGUge1xuICBVbmluaXRpYWxpemVkID0gMCxcbiAgUm91bmQxLFxuICBSb3VuZDIsXG4gIFJvdW5kMyxcbiAgUm91bmQ0LFxuICBDb21wbGV0ZSxcbiAgSW52YWxpZFN0YXRlLFxufVxuXG5leHBvcnQgZW51bSBEc2dTdGF0ZSB7XG4gIFVuaW5pdGlhbGl6ZWQsXG4gIFJvdW5kMSxcbiAgUm91bmQyLFxuICBSb3VuZDMsXG4gIFJvdW5kNCxcbiAgQ29tcGxldGUsXG4gIEludmFsaWRTdGF0ZSxcbn1cblxuZXhwb3J0IHR5cGUgQXV0aEVuY01lc3NhZ2UgPSB7XG4gIGVuY3J5cHRlZE1lc3NhZ2U6IHN0cmluZztcbiAgc2lnbmF0dXJlOiBzdHJpbmc7XG59O1xuZXhwb3J0IHR5cGUgQXV0aE1lc3NhZ2UgPSB7XG4gIG1lc3NhZ2U6IHN0cmluZztcbiAgc2lnbmF0dXJlOiBzdHJpbmc7XG59O1xuZXhwb3J0IHR5cGUgUGFydHlHcGdLZXkgPSB7XG4gIHBhcnR5SWQ6IG51bWJlcjtcbiAgZ3BnS2V5OiBzdHJpbmc7XG59O1xuZXhwb3J0IHR5cGUgRGtsc1NpZ25hdHVyZTxUPiA9IHtcbiAgUjogVDtcbiAgUzogVDtcbn07XG5leHBvcnQgdHlwZSBSZXRyb2ZpdERhdGEgPSB7XG4gIHhTaGFyZTogUGFydGlhbDxYU2hhcmU+O1xuICB4aUxpc3Q/OiBudW1iZXJbXVtdO1xufTtcblxuZXhwb3J0IGNvbnN0IFJlZHVjZWRLZXlTaGFyZVR5cGUgPSB0LnR5cGUoe1xuICBiaWdTTGlzdDogdC5hcnJheSh0LmFycmF5KHQubnVtYmVyKSksXG4gIHhMaXN0OiB0LmFycmF5KHQuYXJyYXkodC5udW1iZXIpKSxcbiAgcm9vdENoYWluQ29kZTogdC5hcnJheSh0Lm51bWJlciksXG4gIHBydjogdC5hcnJheSh0Lm51bWJlciksXG4gIHB1YjogdC5hcnJheSh0Lm51bWJlciksXG59KTtcblxuZXhwb3J0IHR5cGUgUmVkdWNlZEtleVNoYXJlID0gdC5UeXBlT2Y8dHlwZW9mIFJlZHVjZWRLZXlTaGFyZVR5cGU+O1xuXG5leHBvcnQgdHlwZSBTZXJpYWxpemVkQnJvYWRjYXN0TWVzc2FnZSA9IEJyb2FkY2FzdE1lc3NhZ2U8c3RyaW5nPjtcbmV4cG9ydCB0eXBlIERlc2VyaWFsaXplZEJyb2FkY2FzdE1lc3NhZ2UgPSBCcm9hZGNhc3RNZXNzYWdlPFVpbnQ4QXJyYXk+O1xuZXhwb3J0IHR5cGUgU2VyaWFsaXplZFAyUE1lc3NhZ2UgPSBQMlBNZXNzYWdlPHN0cmluZywgc3RyaW5nPjtcbmV4cG9ydCB0eXBlIERlc2VyaWFsaXplZFAyUE1lc3NhZ2UgPSBQMlBNZXNzYWdlPFVpbnQ4QXJyYXksIFVpbnQ4QXJyYXk+O1xuZXhwb3J0IHR5cGUgU2VyaWFsaXplZERrbHNTaWduYXR1cmUgPSBEa2xzU2lnbmF0dXJlPHN0cmluZz47XG5leHBvcnQgdHlwZSBEZXNlcmlhbGl6ZWREa2xzU2lnbmF0dXJlID0gRGtsc1NpZ25hdHVyZTxVaW50OEFycmF5PjtcbmV4cG9ydCB0eXBlIEF1dGhFbmNQMlBNZXNzYWdlID0gUDJQTWVzc2FnZTxBdXRoRW5jTWVzc2FnZSwgc3RyaW5nPjtcbmV4cG9ydCB0eXBlIEF1dGhCcm9hZGNhc3RNZXNzYWdlID0gQnJvYWRjYXN0TWVzc2FnZTxBdXRoTWVzc2FnZT47XG5leHBvcnQgdHlwZSBTZXJpYWxpemVkTWVzc2FnZXMgPSB7XG4gIHAycE1lc3NhZ2VzOiBTZXJpYWxpemVkUDJQTWVzc2FnZVtdO1xuICBicm9hZGNhc3RNZXNzYWdlczogU2VyaWFsaXplZEJyb2FkY2FzdE1lc3NhZ2VbXTtcbn07XG5leHBvcnQgdHlwZSBBdXRoRW5jTWVzc2FnZXMgPSB7XG4gIHAycE1lc3NhZ2VzOiBBdXRoRW5jUDJQTWVzc2FnZVtdO1xuICBicm9hZGNhc3RNZXNzYWdlczogQXV0aEJyb2FkY2FzdE1lc3NhZ2VbXTtcbn07XG5leHBvcnQgdHlwZSBEZXNlcmlhbGl6ZWRNZXNzYWdlcyA9IHtcbiAgcDJwTWVzc2FnZXM6IERlc2VyaWFsaXplZFAyUE1lc3NhZ2VbXTtcbiAgYnJvYWRjYXN0TWVzc2FnZXM6IERlc2VyaWFsaXplZEJyb2FkY2FzdE1lc3NhZ2VbXTtcbn07XG5cbi8qKlxuICogU2VyaWFsaXplcyBtZXNzYWdlcyBwYXlsb2FkcyB0byBiYXNlNjQgc3RyaW5ncy5cbiAqIEBwYXJhbSBtZXNzYWdlc1xuICovXG5leHBvcnQgZnVuY3Rpb24gc2VyaWFsaXplTWVzc2FnZXMobWVzc2FnZXM6IERlc2VyaWFsaXplZE1lc3NhZ2VzKTogU2VyaWFsaXplZE1lc3NhZ2VzIHtcbiAgcmV0dXJuIHtcbiAgICBwMnBNZXNzYWdlczogbWVzc2FnZXMucDJwTWVzc2FnZXMubWFwKHNlcmlhbGl6ZVAyUE1lc3NhZ2UpLFxuICAgIGJyb2FkY2FzdE1lc3NhZ2VzOiBtZXNzYWdlcy5icm9hZGNhc3RNZXNzYWdlcy5tYXAoc2VyaWFsaXplQnJvYWRjYXN0TWVzc2FnZSksXG4gIH07XG59XG5cbi8qKlxuICogRGVzZXJpYWxpemUgbWVzc2FnZXMgcGF5bG9hZHMgdG8gVWludDhBcnJheS5cbiAqIEBwYXJhbSBtZXNzYWdlc1xuICovXG5leHBvcnQgZnVuY3Rpb24gZGVzZXJpYWxpemVNZXNzYWdlcyhtZXNzYWdlczogU2VyaWFsaXplZE1lc3NhZ2VzKTogRGVzZXJpYWxpemVkTWVzc2FnZXMge1xuICByZXR1cm4ge1xuICAgIHAycE1lc3NhZ2VzOiBtZXNzYWdlcy5wMnBNZXNzYWdlcy5tYXAoZGVzZXJpYWxpemVQMlBNZXNzYWdlKSxcbiAgICBicm9hZGNhc3RNZXNzYWdlczogbWVzc2FnZXMuYnJvYWRjYXN0TWVzc2FnZXMubWFwKGRlc2VyaWFsaXplQnJvYWRjYXN0TWVzc2FnZSksXG4gIH07XG59XG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGEgUDJQIG1lc3NhZ2UuXG4gKiBAcGFyYW0gbWVzc2FnZVxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVzZXJpYWxpemVQMlBNZXNzYWdlKG1lc3NhZ2U6IFNlcmlhbGl6ZWRQMlBNZXNzYWdlKTogRGVzZXJpYWxpemVkUDJQTWVzc2FnZSB7XG4gIHJldHVybiB7XG4gICAgdG86IG1lc3NhZ2UudG8sXG4gICAgZnJvbTogbWVzc2FnZS5mcm9tLFxuICAgIHBheWxvYWQ6IG5ldyBVaW50OEFycmF5KEJ1ZmZlci5mcm9tKG1lc3NhZ2UucGF5bG9hZCwgJ2Jhc2U2NCcpKSxcbiAgICBjb21taXRtZW50OiBtZXNzYWdlLmNvbW1pdG1lbnQgPyBuZXcgVWludDhBcnJheShCdWZmZXIuZnJvbShtZXNzYWdlLmNvbW1pdG1lbnQsICdoZXgnKSkgOiB1bmRlZmluZWQsXG4gIH07XG59XG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGEgQnJvYWRjYXN0IG1lc3NhZ2UuXG4gKiBAcGFyYW0gbWVzc2FnZVxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVzZXJpYWxpemVCcm9hZGNhc3RNZXNzYWdlKG1lc3NhZ2U6IFNlcmlhbGl6ZWRCcm9hZGNhc3RNZXNzYWdlKTogRGVzZXJpYWxpemVkQnJvYWRjYXN0TWVzc2FnZSB7XG4gIHJldHVybiB7XG4gICAgZnJvbTogbWVzc2FnZS5mcm9tLFxuICAgIHBheWxvYWQ6IG5ldyBVaW50OEFycmF5KEJ1ZmZlci5mcm9tKG1lc3NhZ2UucGF5bG9hZCwgJ2Jhc2U2NCcpKSxcbiAgICBzaWduYXR1cmVSOiBtZXNzYWdlLnNpZ25hdHVyZVIgPyBuZXcgVWludDhBcnJheShCdWZmZXIuZnJvbShtZXNzYWdlLnNpZ25hdHVyZVIsICdiYXNlNjQnKSkgOiB1bmRlZmluZWQsXG4gIH07XG59XG5cbi8qKlxuICogU2VyaWFsaXplcyBhIFAyUCBtZXNzYWdlLlxuICogQHBhcmFtIG1lc3NhZ2VcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNlcmlhbGl6ZVAyUE1lc3NhZ2UobWVzc2FnZTogRGVzZXJpYWxpemVkUDJQTWVzc2FnZSk6IFNlcmlhbGl6ZWRQMlBNZXNzYWdlIHtcbiAgcmV0dXJuIHtcbiAgICB0bzogbWVzc2FnZS50byxcbiAgICBmcm9tOiBtZXNzYWdlLmZyb20sXG4gICAgcGF5bG9hZDogQnVmZmVyLmZyb20obWVzc2FnZS5wYXlsb2FkKS50b1N0cmluZygnYmFzZTY0JyksXG4gICAgY29tbWl0bWVudDogbWVzc2FnZS5jb21taXRtZW50ID8gQnVmZmVyLmZyb20obWVzc2FnZS5jb21taXRtZW50KS50b1N0cmluZygnaGV4JykgOiB1bmRlZmluZWQsXG4gIH07XG59XG5cbi8qKlxuICogU2VyaWFsaXplcyBhIEJyb2FkY2FzdCBtZXNzYWdlLlxuICogQHBhcmFtIG1lc3NhZ2VcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNlcmlhbGl6ZUJyb2FkY2FzdE1lc3NhZ2UobWVzc2FnZTogRGVzZXJpYWxpemVkQnJvYWRjYXN0TWVzc2FnZSk6IFNlcmlhbGl6ZWRCcm9hZGNhc3RNZXNzYWdlIHtcbiAgcmV0dXJuIHtcbiAgICBmcm9tOiBtZXNzYWdlLmZyb20sXG4gICAgcGF5bG9hZDogQnVmZmVyLmZyb20obWVzc2FnZS5wYXlsb2FkKS50b1N0cmluZygnYmFzZTY0JyksXG4gICAgc2lnbmF0dXJlUjogbWVzc2FnZS5zaWduYXR1cmVSID8gQnVmZmVyLmZyb20obWVzc2FnZS5zaWduYXR1cmVSKS50b1N0cmluZygnYmFzZTY0JykgOiB1bmRlZmluZWQsXG4gIH07XG59XG5cbi8qKlxuICogR2V0cyBjb21tb25rZXlDaGFpbiBmcm9tIERLTFMga2V5U2hhcmVcbiAqIEBwYXJhbSB7QnVmZmVyfSBrZXlTaGFyZSAtIERLTFMga2V5U2hhcmVcbiAqIEByZXR1cm5zIHtzdHJpbmd9IGNvbW1vbktleWNoYWluIGluIGhleCBmb3JtYXRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldENvbW1vbktleWNoYWluKGtleVNoYXJlOiBCdWZmZXIpOiBzdHJpbmcge1xuICBjb25zdCBwYXJzZWRLZXlTaGFyZSA9IGRlY29kZShrZXlTaGFyZSk7XG4gIGFzc2VydChwYXJzZWRLZXlTaGFyZS5wdWJsaWNfa2V5LCAncHVibGljX2tleSBub3QgZm91bmQgaW4ga2V5U2hhcmUnKTtcbiAgYXNzZXJ0KHBhcnNlZEtleVNoYXJlLnJvb3RfY2hhaW5fY29kZSwgJ3Jvb3RfY2hhaW5fY29kZSBub3QgZm91bmQgaW4gcHVibGljX2tleScpO1xuICBjb25zdCBwdWJsaWNLZXkgPSBCdWZmZXIuZnJvbShwYXJzZWRLZXlTaGFyZS5wdWJsaWNfa2V5KS50b1N0cmluZygnaGV4Jyk7XG4gIGNvbnN0IHJvb3RDaGFpbkNvZGUgPSBCdWZmZXIuZnJvbShwYXJzZWRLZXlTaGFyZS5yb290X2NoYWluX2NvZGUpLnRvU3RyaW5nKCdoZXgnKTtcbiAgcmV0dXJuIHB1YmxpY0tleSArIHJvb3RDaGFpbkNvZGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXREZWNvZGVkUmVkdWNlZEtleVNoYXJlKHJlZHVjZWRLZXlTaGFyZTogQnVmZmVyIHwgVWludDhBcnJheSk6IFJlZHVjZWRLZXlTaGFyZSB7XG4gIGNvbnN0IGRlY29kZWQgPSBSZWR1Y2VkS2V5U2hhcmVUeXBlLmRlY29kZShkZWNvZGUocmVkdWNlZEtleVNoYXJlKSk7XG4gIGlmIChpc0xlZnQoZGVjb2RlZCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFVuYWJsZSB0byBwYXJzZSByZWR1Y2VkS2V5U2hhcmU6ICR7ZGVjb2RlZC5sZWZ0fWApO1xuICB9XG4gIHJldHVybiBkZWNvZGVkLnJpZ2h0O1xufVxuIl19