tedious 16.5.0 → 16.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. package/lib/metadata-parser.js +361 -241
  2. package/lib/metadata-parser.js.map +1 -1
  3. package/lib/token/colmetadata-token-parser.js +103 -74
  4. package/lib/token/colmetadata-token-parser.js.map +1 -1
  5. package/lib/token/done-token-parser.js +52 -40
  6. package/lib/token/done-token-parser.js.map +1 -1
  7. package/lib/token/env-change-token-parser.js +110 -81
  8. package/lib/token/env-change-token-parser.js.map +1 -1
  9. package/lib/token/feature-ext-ack-parser.js +30 -22
  10. package/lib/token/feature-ext-ack-parser.js.map +1 -1
  11. package/lib/token/fedauth-info-parser.js +47 -30
  12. package/lib/token/fedauth-info-parser.js.map +1 -1
  13. package/lib/token/helpers.js +205 -0
  14. package/lib/token/helpers.js.map +1 -0
  15. package/lib/token/infoerror-token-parser.js +69 -36
  16. package/lib/token/infoerror-token-parser.js.map +1 -1
  17. package/lib/token/loginack-token-parser.js +59 -31
  18. package/lib/token/loginack-token-parser.js.map +1 -1
  19. package/lib/token/nbcrow-token-parser.js +60 -23
  20. package/lib/token/nbcrow-token-parser.js.map +1 -1
  21. package/lib/token/order-token-parser.js +22 -20
  22. package/lib/token/order-token-parser.js.map +1 -1
  23. package/lib/token/returnstatus-token-parser.js +9 -5
  24. package/lib/token/returnstatus-token-parser.js.map +1 -1
  25. package/lib/token/returnvalue-token-parser.js +79 -22
  26. package/lib/token/returnvalue-token-parser.js.map +1 -1
  27. package/lib/token/row-token-parser.js +50 -20
  28. package/lib/token/row-token-parser.js.map +1 -1
  29. package/lib/token/sspi-token-parser.js +14 -5
  30. package/lib/token/sspi-token-parser.js.map +1 -1
  31. package/lib/token/stream-parser.js +292 -324
  32. package/lib/token/stream-parser.js.map +1 -1
  33. package/lib/token/token.js +1 -1
  34. package/lib/token/token.js.map +1 -1
  35. package/lib/value-parser.js +655 -438
  36. package/lib/value-parser.js.map +1 -1
  37. package/package.json +1 -1
@@ -18,357 +18,325 @@ var _returnvalueTokenParser = _interopRequireDefault(require("./returnvalue-toke
18
18
  var _rowTokenParser = _interopRequireDefault(require("./row-token-parser"));
19
19
  var _nbcrowTokenParser = _interopRequireDefault(require("./nbcrow-token-parser"));
20
20
  var _sspiTokenParser = _interopRequireDefault(require("./sspi-token-parser"));
21
+ var _helpers = require("./helpers");
21
22
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
22
- const tokenParsers = {
23
- [_token.TYPE.DONE]: _doneTokenParser.doneParser,
24
- [_token.TYPE.DONEINPROC]: _doneTokenParser.doneInProcParser,
25
- [_token.TYPE.DONEPROC]: _doneTokenParser.doneProcParser,
26
- [_token.TYPE.ENVCHANGE]: _envChangeTokenParser.default,
27
- [_token.TYPE.ERROR]: _infoerrorTokenParser.errorParser,
28
- [_token.TYPE.FEDAUTHINFO]: _fedauthInfoParser.default,
29
- [_token.TYPE.FEATUREEXTACK]: _featureExtAckParser.default,
30
- [_token.TYPE.INFO]: _infoerrorTokenParser.infoParser,
31
- [_token.TYPE.LOGINACK]: _loginackTokenParser.default,
32
- [_token.TYPE.ORDER]: _orderTokenParser.default,
33
- [_token.TYPE.RETURNSTATUS]: _returnstatusTokenParser.default,
34
- [_token.TYPE.RETURNVALUE]: _returnvalueTokenParser.default,
35
- [_token.TYPE.SSPI]: _sspiTokenParser.default
36
- };
37
- class StreamBuffer {
38
- constructor(iterable) {
39
- this.iterator = (iterable[Symbol.asyncIterator] || iterable[Symbol.iterator]).call(iterable);
40
- this.buffer = Buffer.alloc(0);
41
- this.position = 0;
42
- }
43
- async waitForChunk() {
44
- const result = await this.iterator.next();
45
- if (result.done) {
46
- throw new Error('unexpected end of data');
47
- }
48
- if (this.position === this.buffer.length) {
49
- this.buffer = result.value;
50
- } else {
51
- this.buffer = Buffer.concat([this.buffer.slice(this.position), result.value]);
52
- }
53
- this.position = 0;
54
- }
55
- }
56
23
  class Parser {
24
+ debug;
25
+ colMetadata;
26
+ options;
27
+ iterator;
28
+ buffer;
29
+ position;
57
30
  static async *parseTokens(iterable, debug, options, colMetadata = []) {
58
- let token;
59
- const onDoneParsing = t => {
60
- token = t;
61
- };
62
- const streamBuffer = new StreamBuffer(iterable);
63
- const parser = new Parser(streamBuffer, debug, options);
31
+ const parser = new Parser(iterable, debug, options);
64
32
  parser.colMetadata = colMetadata;
65
33
  while (true) {
66
34
  try {
67
- await streamBuffer.waitForChunk();
35
+ await parser.waitForChunk();
68
36
  } catch (err) {
69
- if (streamBuffer.position === streamBuffer.buffer.length) {
37
+ if (parser.position === parser.buffer.length) {
70
38
  return;
71
39
  }
72
40
  throw err;
73
41
  }
74
- if (parser.suspended) {
75
- // Unsuspend and continue from where ever we left off.
76
- parser.suspended = false;
77
- const next = parser.next;
78
- next();
79
-
80
- // Check if a new token was parsed after unsuspension.
81
- if (!parser.suspended && token) {
82
- if (token instanceof _token.ColMetadataToken) {
83
- parser.colMetadata = token.columns;
84
- }
85
- yield token;
86
- }
87
- }
88
- while (!parser.suspended && parser.position + 1 <= parser.buffer.length) {
42
+ while (parser.buffer.length >= parser.position + 1) {
89
43
  const type = parser.buffer.readUInt8(parser.position);
90
44
  parser.position += 1;
91
- if (type === _token.TYPE.COLMETADATA) {
92
- const token = await (0, _colmetadataTokenParser.default)(parser);
93
- parser.colMetadata = token.columns;
45
+ const token = parser.readToken(type);
46
+ if (token !== undefined) {
94
47
  yield token;
95
- } else if (type === _token.TYPE.ROW) {
96
- yield (0, _rowTokenParser.default)(parser);
97
- } else if (type === _token.TYPE.NBCROW) {
98
- yield (0, _nbcrowTokenParser.default)(parser);
99
- } else if (tokenParsers[type]) {
100
- tokenParsers[type](parser, parser.options, onDoneParsing);
101
-
102
- // Check if a new token was parsed after unsuspension.
103
- if (!parser.suspended && token) {
104
- if (token instanceof _token.ColMetadataToken) {
105
- parser.colMetadata = token.columns;
106
- }
107
- yield token;
108
- }
109
- } else {
48
+ }
49
+ }
50
+ }
51
+ }
52
+ readToken(type) {
53
+ switch (type) {
54
+ case _token.TYPE.DONE:
55
+ {
56
+ return this.readDoneToken();
57
+ }
58
+ case _token.TYPE.DONEPROC:
59
+ {
60
+ return this.readDoneProcToken();
61
+ }
62
+ case _token.TYPE.DONEINPROC:
63
+ {
64
+ return this.readDoneInProcToken();
65
+ }
66
+ case _token.TYPE.ERROR:
67
+ {
68
+ return this.readErrorToken();
69
+ }
70
+ case _token.TYPE.INFO:
71
+ {
72
+ return this.readInfoToken();
73
+ }
74
+ case _token.TYPE.ENVCHANGE:
75
+ {
76
+ return this.readEnvChangeToken();
77
+ }
78
+ case _token.TYPE.LOGINACK:
79
+ {
80
+ return this.readLoginAckToken();
81
+ }
82
+ case _token.TYPE.RETURNSTATUS:
83
+ {
84
+ return this.readReturnStatusToken();
85
+ }
86
+ case _token.TYPE.ORDER:
87
+ {
88
+ return this.readOrderToken();
89
+ }
90
+ case _token.TYPE.FEDAUTHINFO:
91
+ {
92
+ return this.readFedAuthInfoToken();
93
+ }
94
+ case _token.TYPE.SSPI:
95
+ {
96
+ return this.readSSPIToken();
97
+ }
98
+ case _token.TYPE.COLMETADATA:
99
+ {
100
+ return this.readColMetadataToken();
101
+ }
102
+ case _token.TYPE.RETURNVALUE:
103
+ {
104
+ return this.readReturnValueToken();
105
+ }
106
+ case _token.TYPE.ROW:
107
+ {
108
+ return this.readRowToken();
109
+ }
110
+ case _token.TYPE.NBCROW:
111
+ {
112
+ return this.readNbcRowToken();
113
+ }
114
+ case _token.TYPE.FEATUREEXTACK:
115
+ {
116
+ return this.readFeatureExtAckToken();
117
+ }
118
+ default:
119
+ {
110
120
  throw new Error('Unknown type: ' + type);
111
121
  }
122
+ }
123
+ }
124
+ readFeatureExtAckToken() {
125
+ let result;
126
+ try {
127
+ result = (0, _featureExtAckParser.default)(this.buffer, this.position, this.options);
128
+ } catch (err) {
129
+ if (err instanceof _helpers.NotEnoughDataError) {
130
+ return this.waitForChunk().then(() => {
131
+ return this.readFeatureExtAckToken();
132
+ });
133
+ }
134
+ throw err;
135
+ }
136
+ this.position = result.offset;
137
+ return result.value;
138
+ }
139
+ async readNbcRowToken() {
140
+ return await (0, _nbcrowTokenParser.default)(this);
141
+ }
142
+ async readReturnValueToken() {
143
+ return await (0, _returnvalueTokenParser.default)(this);
144
+ }
145
+ async readColMetadataToken() {
146
+ const token = await (0, _colmetadataTokenParser.default)(this);
147
+ this.colMetadata = token.columns;
148
+ return token;
149
+ }
150
+ readSSPIToken() {
151
+ let result;
152
+ try {
153
+ result = (0, _sspiTokenParser.default)(this.buffer, this.position, this.options);
154
+ } catch (err) {
155
+ if (err instanceof _helpers.NotEnoughDataError) {
156
+ return this.waitForChunk().then(() => {
157
+ return this.readSSPIToken();
158
+ });
159
+ }
160
+ throw err;
161
+ }
162
+ this.position = result.offset;
163
+ return result.value;
164
+ }
165
+ readFedAuthInfoToken() {
166
+ let result;
167
+ try {
168
+ result = (0, _fedauthInfoParser.default)(this.buffer, this.position, this.options);
169
+ } catch (err) {
170
+ if (err instanceof _helpers.NotEnoughDataError) {
171
+ return this.waitForChunk().then(() => {
172
+ return this.readFedAuthInfoToken();
173
+ });
174
+ }
175
+ throw err;
176
+ }
177
+ this.position = result.offset;
178
+ return result.value;
179
+ }
180
+ readOrderToken() {
181
+ let result;
182
+ try {
183
+ result = (0, _orderTokenParser.default)(this.buffer, this.position, this.options);
184
+ } catch (err) {
185
+ if (err instanceof _helpers.NotEnoughDataError) {
186
+ return this.waitForChunk().then(() => {
187
+ return this.readOrderToken();
188
+ });
189
+ }
190
+ throw err;
191
+ }
192
+ this.position = result.offset;
193
+ return result.value;
194
+ }
195
+ readReturnStatusToken() {
196
+ let result;
197
+ try {
198
+ result = (0, _returnstatusTokenParser.default)(this.buffer, this.position, this.options);
199
+ } catch (err) {
200
+ if (err instanceof _helpers.NotEnoughDataError) {
201
+ return this.waitForChunk().then(() => {
202
+ return this.readReturnStatusToken();
203
+ });
204
+ }
205
+ throw err;
206
+ }
207
+ this.position = result.offset;
208
+ return result.value;
209
+ }
210
+ readLoginAckToken() {
211
+ let result;
212
+ try {
213
+ result = (0, _loginackTokenParser.default)(this.buffer, this.position, this.options);
214
+ } catch (err) {
215
+ if (err instanceof _helpers.NotEnoughDataError) {
216
+ return this.waitForChunk().then(() => {
217
+ return this.readLoginAckToken();
218
+ });
219
+ }
220
+ throw err;
221
+ }
222
+ this.position = result.offset;
223
+ return result.value;
224
+ }
225
+ readEnvChangeToken() {
226
+ let result;
227
+ try {
228
+ result = (0, _envChangeTokenParser.default)(this.buffer, this.position, this.options);
229
+ } catch (err) {
230
+ if (err instanceof _helpers.NotEnoughDataError) {
231
+ return this.waitForChunk().then(() => {
232
+ return this.readEnvChangeToken();
233
+ });
234
+ }
235
+ throw err;
236
+ }
237
+ this.position = result.offset;
238
+ return result.value;
239
+ }
240
+ readRowToken() {
241
+ return (0, _rowTokenParser.default)(this);
242
+ }
243
+ readInfoToken() {
244
+ let result;
245
+ try {
246
+ result = (0, _infoerrorTokenParser.infoParser)(this.buffer, this.position, this.options);
247
+ } catch (err) {
248
+ if (err instanceof _helpers.NotEnoughDataError) {
249
+ return this.waitForChunk().then(() => {
250
+ return this.readInfoToken();
251
+ });
252
+ }
253
+ throw err;
254
+ }
255
+ this.position = result.offset;
256
+ return result.value;
257
+ }
258
+ readErrorToken() {
259
+ let result;
260
+ try {
261
+ result = (0, _infoerrorTokenParser.errorParser)(this.buffer, this.position, this.options);
262
+ } catch (err) {
263
+ if (err instanceof _helpers.NotEnoughDataError) {
264
+ return this.waitForChunk().then(() => {
265
+ return this.readErrorToken();
266
+ });
267
+ }
268
+ throw err;
269
+ }
270
+ this.position = result.offset;
271
+ return result.value;
272
+ }
273
+ readDoneInProcToken() {
274
+ let result;
275
+ try {
276
+ result = (0, _doneTokenParser.doneInProcParser)(this.buffer, this.position, this.options);
277
+ } catch (err) {
278
+ if (err instanceof _helpers.NotEnoughDataError) {
279
+ return this.waitForChunk().then(() => {
280
+ return this.readDoneInProcToken();
281
+ });
282
+ }
283
+ throw err;
284
+ }
285
+ this.position = result.offset;
286
+ return result.value;
287
+ }
288
+ readDoneProcToken() {
289
+ let result;
290
+ try {
291
+ result = (0, _doneTokenParser.doneProcParser)(this.buffer, this.position, this.options);
292
+ } catch (err) {
293
+ if (err instanceof _helpers.NotEnoughDataError) {
294
+ return this.waitForChunk().then(() => {
295
+ return this.readDoneProcToken();
296
+ });
297
+ }
298
+ throw err;
299
+ }
300
+ this.position = result.offset;
301
+ return result.value;
302
+ }
303
+ readDoneToken() {
304
+ let result;
305
+ try {
306
+ result = (0, _doneTokenParser.doneParser)(this.buffer, this.position, this.options);
307
+ } catch (err) {
308
+ if (err instanceof _helpers.NotEnoughDataError) {
309
+ return this.waitForChunk().then(() => {
310
+ return this.readDoneToken();
311
+ });
112
312
  }
313
+ throw err;
113
314
  }
315
+ this.position = result.offset;
316
+ return result.value;
114
317
  }
115
- constructor(streamBuffer, debug, options) {
318
+ constructor(iterable, debug, options) {
116
319
  this.debug = debug;
117
320
  this.colMetadata = [];
118
321
  this.options = options;
119
- this.streamBuffer = streamBuffer;
120
- this.suspended = false;
121
- this.next = undefined;
122
- }
123
- get buffer() {
124
- return this.streamBuffer.buffer;
125
- }
126
- get position() {
127
- return this.streamBuffer.position;
128
- }
129
- set position(value) {
130
- this.streamBuffer.position = value;
131
- }
132
- suspend(next) {
133
- this.suspended = true;
134
- this.next = next;
322
+ this.iterator = (iterable[Symbol.asyncIterator] || iterable[Symbol.iterator]).call(iterable);
323
+ this.buffer = Buffer.alloc(0);
324
+ this.position = 0;
135
325
  }
136
- awaitData(length, callback) {
137
- if (this.position + length <= this.buffer.length) {
138
- callback();
326
+ async waitForChunk() {
327
+ const result = await this.iterator.next();
328
+ if (result.done) {
329
+ throw new Error('unexpected end of data');
330
+ }
331
+ if (this.position === this.buffer.length) {
332
+ this.buffer = result.value;
139
333
  } else {
140
- this.suspend(() => {
141
- this.awaitData(length, callback);
142
- });
334
+ this.buffer = Buffer.concat([this.buffer.slice(this.position), result.value]);
143
335
  }
144
- }
145
- readInt8(callback) {
146
- this.awaitData(1, () => {
147
- const data = this.buffer.readInt8(this.position);
148
- this.position += 1;
149
- callback(data);
150
- });
151
- }
152
- readUInt8(callback) {
153
- this.awaitData(1, () => {
154
- const data = this.buffer.readUInt8(this.position);
155
- this.position += 1;
156
- callback(data);
157
- });
158
- }
159
- readInt16LE(callback) {
160
- this.awaitData(2, () => {
161
- const data = this.buffer.readInt16LE(this.position);
162
- this.position += 2;
163
- callback(data);
164
- });
165
- }
166
- readInt16BE(callback) {
167
- this.awaitData(2, () => {
168
- const data = this.buffer.readInt16BE(this.position);
169
- this.position += 2;
170
- callback(data);
171
- });
172
- }
173
- readUInt16LE(callback) {
174
- this.awaitData(2, () => {
175
- const data = this.buffer.readUInt16LE(this.position);
176
- this.position += 2;
177
- callback(data);
178
- });
179
- }
180
- readUInt16BE(callback) {
181
- this.awaitData(2, () => {
182
- const data = this.buffer.readUInt16BE(this.position);
183
- this.position += 2;
184
- callback(data);
185
- });
186
- }
187
- readInt32LE(callback) {
188
- this.awaitData(4, () => {
189
- const data = this.buffer.readInt32LE(this.position);
190
- this.position += 4;
191
- callback(data);
192
- });
193
- }
194
- readInt32BE(callback) {
195
- this.awaitData(4, () => {
196
- const data = this.buffer.readInt32BE(this.position);
197
- this.position += 4;
198
- callback(data);
199
- });
200
- }
201
- readUInt32LE(callback) {
202
- this.awaitData(4, () => {
203
- const data = this.buffer.readUInt32LE(this.position);
204
- this.position += 4;
205
- callback(data);
206
- });
207
- }
208
- readUInt32BE(callback) {
209
- this.awaitData(4, () => {
210
- const data = this.buffer.readUInt32BE(this.position);
211
- this.position += 4;
212
- callback(data);
213
- });
214
- }
215
- readBigInt64LE(callback) {
216
- this.awaitData(8, () => {
217
- const data = this.buffer.readBigInt64LE(this.position);
218
- this.position += 8;
219
- callback(data);
220
- });
221
- }
222
- readInt64LE(callback) {
223
- this.awaitData(8, () => {
224
- const data = Math.pow(2, 32) * this.buffer.readInt32LE(this.position + 4) + ((this.buffer[this.position + 4] & 0x80) === 0x80 ? 1 : -1) * this.buffer.readUInt32LE(this.position);
225
- this.position += 8;
226
- callback(data);
227
- });
228
- }
229
- readInt64BE(callback) {
230
- this.awaitData(8, () => {
231
- const data = Math.pow(2, 32) * this.buffer.readInt32BE(this.position) + ((this.buffer[this.position] & 0x80) === 0x80 ? 1 : -1) * this.buffer.readUInt32BE(this.position + 4);
232
- this.position += 8;
233
- callback(data);
234
- });
235
- }
236
- readBigUInt64LE(callback) {
237
- this.awaitData(8, () => {
238
- const data = this.buffer.readBigUInt64LE(this.position);
239
- this.position += 8;
240
- callback(data);
241
- });
242
- }
243
- readUInt64LE(callback) {
244
- this.awaitData(8, () => {
245
- const data = Math.pow(2, 32) * this.buffer.readUInt32LE(this.position + 4) + this.buffer.readUInt32LE(this.position);
246
- this.position += 8;
247
- callback(data);
248
- });
249
- }
250
- readUInt64BE(callback) {
251
- this.awaitData(8, () => {
252
- const data = Math.pow(2, 32) * this.buffer.readUInt32BE(this.position) + this.buffer.readUInt32BE(this.position + 4);
253
- this.position += 8;
254
- callback(data);
255
- });
256
- }
257
- readFloatLE(callback) {
258
- this.awaitData(4, () => {
259
- const data = this.buffer.readFloatLE(this.position);
260
- this.position += 4;
261
- callback(data);
262
- });
263
- }
264
- readFloatBE(callback) {
265
- this.awaitData(4, () => {
266
- const data = this.buffer.readFloatBE(this.position);
267
- this.position += 4;
268
- callback(data);
269
- });
270
- }
271
- readDoubleLE(callback) {
272
- this.awaitData(8, () => {
273
- const data = this.buffer.readDoubleLE(this.position);
274
- this.position += 8;
275
- callback(data);
276
- });
277
- }
278
- readDoubleBE(callback) {
279
- this.awaitData(8, () => {
280
- const data = this.buffer.readDoubleBE(this.position);
281
- this.position += 8;
282
- callback(data);
283
- });
284
- }
285
- readUInt24LE(callback) {
286
- this.awaitData(3, () => {
287
- const low = this.buffer.readUInt16LE(this.position);
288
- const high = this.buffer.readUInt8(this.position + 2);
289
- this.position += 3;
290
- callback(low | high << 16);
291
- });
292
- }
293
- readUInt40LE(callback) {
294
- this.awaitData(5, () => {
295
- const low = this.buffer.readUInt32LE(this.position);
296
- const high = this.buffer.readUInt8(this.position + 4);
297
- this.position += 5;
298
- callback(0x100000000 * high + low);
299
- });
300
- }
301
- readUNumeric64LE(callback) {
302
- this.awaitData(8, () => {
303
- const low = this.buffer.readUInt32LE(this.position);
304
- const high = this.buffer.readUInt32LE(this.position + 4);
305
- this.position += 8;
306
- callback(0x100000000 * high + low);
307
- });
308
- }
309
- readUNumeric96LE(callback) {
310
- this.awaitData(12, () => {
311
- const dword1 = this.buffer.readUInt32LE(this.position);
312
- const dword2 = this.buffer.readUInt32LE(this.position + 4);
313
- const dword3 = this.buffer.readUInt32LE(this.position + 8);
314
- this.position += 12;
315
- callback(dword1 + 0x100000000 * dword2 + 0x100000000 * 0x100000000 * dword3);
316
- });
317
- }
318
- readUNumeric128LE(callback) {
319
- this.awaitData(16, () => {
320
- const dword1 = this.buffer.readUInt32LE(this.position);
321
- const dword2 = this.buffer.readUInt32LE(this.position + 4);
322
- const dword3 = this.buffer.readUInt32LE(this.position + 8);
323
- const dword4 = this.buffer.readUInt32LE(this.position + 12);
324
- this.position += 16;
325
- callback(dword1 + 0x100000000 * dword2 + 0x100000000 * 0x100000000 * dword3 + 0x100000000 * 0x100000000 * 0x100000000 * dword4);
326
- });
327
- }
328
-
329
- // Variable length data
330
-
331
- readBuffer(length, callback) {
332
- this.awaitData(length, () => {
333
- const data = this.buffer.slice(this.position, this.position + length);
334
- this.position += length;
335
- callback(data);
336
- });
337
- }
338
-
339
- // Read a Unicode String (BVARCHAR)
340
- readBVarChar(callback) {
341
- this.readUInt8(length => {
342
- this.readBuffer(length * 2, data => {
343
- callback(data.toString('ucs2'));
344
- });
345
- });
346
- }
347
-
348
- // Read a Unicode String (USVARCHAR)
349
- readUsVarChar(callback) {
350
- this.readUInt16LE(length => {
351
- this.readBuffer(length * 2, data => {
352
- callback(data.toString('ucs2'));
353
- });
354
- });
355
- }
356
-
357
- // Read binary data (BVARBYTE)
358
- readBVarByte(callback) {
359
- this.readUInt8(length => {
360
- this.readBuffer(length, callback);
361
- });
362
- }
363
-
364
- // Read binary data (USVARBYTE)
365
- readUsVarByte(callback) {
366
- this.readUInt16LE(length => {
367
- this.readBuffer(length, callback);
368
- });
336
+ this.position = 0;
369
337
  }
370
338
  }
371
339
  var _default = Parser;
372
340
  exports.default = _default;
373
341
  module.exports = Parser;
374
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfdG9rZW4iLCJyZXF1aXJlIiwiX2NvbG1ldGFkYXRhVG9rZW5QYXJzZXIiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwiX2RvbmVUb2tlblBhcnNlciIsIl9lbnZDaGFuZ2VUb2tlblBhcnNlciIsIl9pbmZvZXJyb3JUb2tlblBhcnNlciIsIl9mZWRhdXRoSW5mb1BhcnNlciIsIl9mZWF0dXJlRXh0QWNrUGFyc2VyIiwiX2xvZ2luYWNrVG9rZW5QYXJzZXIiLCJfb3JkZXJUb2tlblBhcnNlciIsIl9yZXR1cm5zdGF0dXNUb2tlblBhcnNlciIsIl9yZXR1cm52YWx1ZVRva2VuUGFyc2VyIiwiX3Jvd1Rva2VuUGFyc2VyIiwiX25iY3Jvd1Rva2VuUGFyc2VyIiwiX3NzcGlUb2tlblBhcnNlciIsIm9iaiIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0IiwidG9rZW5QYXJzZXJzIiwiVFlQRSIsIkRPTkUiLCJkb25lUGFyc2VyIiwiRE9ORUlOUFJPQyIsImRvbmVJblByb2NQYXJzZXIiLCJET05FUFJPQyIsImRvbmVQcm9jUGFyc2VyIiwiRU5WQ0hBTkdFIiwiZW52Q2hhbmdlUGFyc2VyIiwiRVJST1IiLCJlcnJvclBhcnNlciIsIkZFREFVVEhJTkZPIiwiZmVkQXV0aEluZm9QYXJzZXIiLCJGRUFUVVJFRVhUQUNLIiwiZmVhdHVyZUV4dEFja1BhcnNlciIsIklORk8iLCJpbmZvUGFyc2VyIiwiTE9HSU5BQ0siLCJsb2dpbkFja1BhcnNlciIsIk9SREVSIiwib3JkZXJQYXJzZXIiLCJSRVRVUk5TVEFUVVMiLCJyZXR1cm5TdGF0dXNQYXJzZXIiLCJSRVRVUk5WQUxVRSIsInJldHVyblZhbHVlUGFyc2VyIiwiU1NQSSIsInNzcGlQYXJzZXIiLCJTdHJlYW1CdWZmZXIiLCJjb25zdHJ1Y3RvciIsIml0ZXJhYmxlIiwiaXRlcmF0b3IiLCJTeW1ib2wiLCJhc3luY0l0ZXJhdG9yIiwiY2FsbCIsImJ1ZmZlciIsIkJ1ZmZlciIsImFsbG9jIiwicG9zaXRpb24iLCJ3YWl0Rm9yQ2h1bmsiLCJyZXN1bHQiLCJuZXh0IiwiZG9uZSIsIkVycm9yIiwibGVuZ3RoIiwidmFsdWUiLCJjb25jYXQiLCJzbGljZSIsIlBhcnNlciIsInBhcnNlVG9rZW5zIiwiZGVidWciLCJvcHRpb25zIiwiY29sTWV0YWRhdGEiLCJ0b2tlbiIsIm9uRG9uZVBhcnNpbmciLCJ0Iiwic3RyZWFtQnVmZmVyIiwicGFyc2VyIiwiZXJyIiwic3VzcGVuZGVkIiwiQ29sTWV0YWRhdGFUb2tlbiIsImNvbHVtbnMiLCJ0eXBlIiwicmVhZFVJbnQ4IiwiQ09MTUVUQURBVEEiLCJjb2xNZXRhZGF0YVBhcnNlciIsIlJPVyIsInJvd1BhcnNlciIsIk5CQ1JPVyIsIm5iY1Jvd1BhcnNlciIsInVuZGVmaW5lZCIsInN1c3BlbmQiLCJhd2FpdERhdGEiLCJjYWxsYmFjayIsInJlYWRJbnQ4IiwiZGF0YSIsInJlYWRJbnQxNkxFIiwicmVhZEludDE2QkUiLCJyZWFkVUludDE2TEUiLCJyZWFkVUludDE2QkUiLCJyZWFkSW50MzJMRSIsInJlYWRJbnQzMkJFIiwicmVhZFVJbnQzMkxFIiwicmVhZFVJbnQzMkJFIiwicmVhZEJpZ0ludDY0TEUiLCJyZWFkSW50NjRMRSIsIk1hdGgiLCJwb3ciLCJyZWFkSW50NjRCRSIsInJlYWRCaWdVSW50NjRMRSIsInJlYWRVSW50NjRMRSIsInJlYWRVSW50NjRCRSIsInJlYWRGbG9hdExFIiwicmVhZEZsb2F0QkUiLCJyZWFkRG91YmxlTEUiLCJyZWFkRG91YmxlQkUiLCJyZWFkVUludDI0TEUiLCJsb3ciLCJoaWdoIiwicmVhZFVJbnQ0MExFIiwicmVhZFVOdW1lcmljNjRMRSIsInJlYWRVTnVtZXJpYzk2TEUiLCJkd29yZDEiLCJkd29yZDIiLCJkd29yZDMiLCJyZWFkVU51bWVyaWMxMjhMRSIsImR3b3JkNCIsInJlYWRCdWZmZXIiLCJyZWFkQlZhckNoYXIiLCJ0b1N0cmluZyIsInJlYWRVc1ZhckNoYXIiLCJyZWFkQlZhckJ5dGUiLCJyZWFkVXNWYXJCeXRlIiwiX2RlZmF1bHQiLCJleHBvcnRzIiwibW9kdWxlIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Rva2VuL3N0cmVhbS1wYXJzZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IERlYnVnIGZyb20gJy4uL2RlYnVnJztcbmltcG9ydCB7IHR5cGUgSW50ZXJuYWxDb25uZWN0aW9uT3B0aW9ucyB9IGZyb20gJy4uL2Nvbm5lY3Rpb24nO1xuXG5pbXBvcnQgeyBUWVBFLCBUb2tlbiwgQ29sTWV0YWRhdGFUb2tlbiB9IGZyb20gJy4vdG9rZW4nO1xuXG5pbXBvcnQgY29sTWV0YWRhdGFQYXJzZXIsIHsgdHlwZSBDb2x1bW5NZXRhZGF0YSB9IGZyb20gJy4vY29sbWV0YWRhdGEtdG9rZW4tcGFyc2VyJztcbmltcG9ydCB7IGRvbmVQYXJzZXIsIGRvbmVJblByb2NQYXJzZXIsIGRvbmVQcm9jUGFyc2VyIH0gZnJvbSAnLi9kb25lLXRva2VuLXBhcnNlcic7XG5pbXBvcnQgZW52Q2hhbmdlUGFyc2VyIGZyb20gJy4vZW52LWNoYW5nZS10b2tlbi1wYXJzZXInO1xuaW1wb3J0IHsgZXJyb3JQYXJzZXIsIGluZm9QYXJzZXIgfSBmcm9tICcuL2luZm9lcnJvci10b2tlbi1wYXJzZXInO1xuaW1wb3J0IGZlZEF1dGhJbmZvUGFyc2VyIGZyb20gJy4vZmVkYXV0aC1pbmZvLXBhcnNlcic7XG5pbXBvcnQgZmVhdHVyZUV4dEFja1BhcnNlciBmcm9tICcuL2ZlYXR1cmUtZXh0LWFjay1wYXJzZXInO1xuaW1wb3J0IGxvZ2luQWNrUGFyc2VyIGZyb20gJy4vbG9naW5hY2stdG9rZW4tcGFyc2VyJztcbmltcG9ydCBvcmRlclBhcnNlciBmcm9tICcuL29yZGVyLXRva2VuLXBhcnNlcic7XG5pbXBvcnQgcmV0dXJuU3RhdHVzUGFyc2VyIGZyb20gJy4vcmV0dXJuc3RhdHVzLXRva2VuLXBhcnNlcic7XG5pbXBvcnQgcmV0dXJuVmFsdWVQYXJzZXIgZnJvbSAnLi9yZXR1cm52YWx1ZS10b2tlbi1wYXJzZXInO1xuaW1wb3J0IHJvd1BhcnNlciBmcm9tICcuL3Jvdy10b2tlbi1wYXJzZXInO1xuaW1wb3J0IG5iY1Jvd1BhcnNlciBmcm9tICcuL25iY3Jvdy10b2tlbi1wYXJzZXInO1xuaW1wb3J0IHNzcGlQYXJzZXIgZnJvbSAnLi9zc3BpLXRva2VuLXBhcnNlcic7XG5cbmNvbnN0IHRva2VuUGFyc2VycyA9IHtcbiAgW1RZUEUuRE9ORV06IGRvbmVQYXJzZXIsXG4gIFtUWVBFLkRPTkVJTlBST0NdOiBkb25lSW5Qcm9jUGFyc2VyLFxuICBbVFlQRS5ET05FUFJPQ106IGRvbmVQcm9jUGFyc2VyLFxuICBbVFlQRS5FTlZDSEFOR0VdOiBlbnZDaGFuZ2VQYXJzZXIsXG4gIFtUWVBFLkVSUk9SXTogZXJyb3JQYXJzZXIsXG4gIFtUWVBFLkZFREFVVEhJTkZPXTogZmVkQXV0aEluZm9QYXJzZXIsXG4gIFtUWVBFLkZFQVRVUkVFWFRBQ0tdOiBmZWF0dXJlRXh0QWNrUGFyc2VyLFxuICBbVFlQRS5JTkZPXTogaW5mb1BhcnNlcixcbiAgW1RZUEUuTE9HSU5BQ0tdOiBsb2dpbkFja1BhcnNlcixcbiAgW1RZUEUuT1JERVJdOiBvcmRlclBhcnNlcixcbiAgW1RZUEUuUkVUVVJOU1RBVFVTXTogcmV0dXJuU3RhdHVzUGFyc2VyLFxuICBbVFlQRS5SRVRVUk5WQUxVRV06IHJldHVyblZhbHVlUGFyc2VyLFxuICBbVFlQRS5TU1BJXTogc3NwaVBhcnNlclxufTtcblxuZXhwb3J0IHR5cGUgUGFyc2VyT3B0aW9ucyA9IFBpY2s8SW50ZXJuYWxDb25uZWN0aW9uT3B0aW9ucywgJ3VzZVVUQycgfCAnbG93ZXJDYXNlR3VpZHMnIHwgJ3Rkc1ZlcnNpb24nIHwgJ3VzZUNvbHVtbk5hbWVzJyB8ICdjb2x1bW5OYW1lUmVwbGFjZXInIHwgJ2NhbWVsQ2FzZUNvbHVtbnMnPjtcblxuY2xhc3MgU3RyZWFtQnVmZmVyIHtcbiAgZGVjbGFyZSBpdGVyYXRvcjogQXN5bmNJdGVyYXRvcjxCdWZmZXIsIGFueSwgdW5kZWZpbmVkPiB8IEl0ZXJhdG9yPEJ1ZmZlciwgYW55LCB1bmRlZmluZWQ+O1xuICBkZWNsYXJlIGJ1ZmZlcjogQnVmZmVyO1xuICBkZWNsYXJlIHBvc2l0aW9uOiBudW1iZXI7XG5cbiAgY29uc3RydWN0b3IoaXRlcmFibGU6IEFzeW5jSXRlcmFibGU8QnVmZmVyPiB8IEl0ZXJhYmxlPEJ1ZmZlcj4pIHtcbiAgICB0aGlzLml0ZXJhdG9yID0gKChpdGVyYWJsZSBhcyBBc3luY0l0ZXJhYmxlPEJ1ZmZlcj4pW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSB8fCAoaXRlcmFibGUgYXMgSXRlcmFibGU8QnVmZmVyPilbU3ltYm9sLml0ZXJhdG9yXSkuY2FsbChpdGVyYWJsZSk7XG5cbiAgICB0aGlzLmJ1ZmZlciA9IEJ1ZmZlci5hbGxvYygwKTtcbiAgICB0aGlzLnBvc2l0aW9uID0gMDtcbiAgfVxuXG4gIGFzeW5jIHdhaXRGb3JDaHVuaygpIHtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLml0ZXJhdG9yLm5leHQoKTtcbiAgICBpZiAocmVzdWx0LmRvbmUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcigndW5leHBlY3RlZCBlbmQgb2YgZGF0YScpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnBvc2l0aW9uID09PSB0aGlzLmJ1ZmZlci5sZW5ndGgpIHtcbiAgICAgIHRoaXMuYnVmZmVyID0gcmVzdWx0LnZhbHVlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmJ1ZmZlciA9IEJ1ZmZlci5jb25jYXQoW3RoaXMuYnVmZmVyLnNsaWNlKHRoaXMucG9zaXRpb24pLCByZXN1bHQudmFsdWVdKTtcbiAgICB9XG4gICAgdGhpcy5wb3NpdGlvbiA9IDA7XG4gIH1cbn1cblxuY2xhc3MgUGFyc2VyIHtcbiAgZGVjbGFyZSBkZWJ1ZzogRGVidWc7XG4gIGRlY2xhcmUgY29sTWV0YWRhdGE6IENvbHVtbk1ldGFkYXRhW107XG4gIGRlY2xhcmUgb3B0aW9uczogUGFyc2VyT3B0aW9ucztcblxuICBkZWNsYXJlIHN1c3BlbmRlZDogYm9vbGVhbjtcbiAgZGVjbGFyZSBuZXh0OiAoKCkgPT4gdm9pZCkgfCB1bmRlZmluZWQ7XG4gIGRlY2xhcmUgc3RyZWFtQnVmZmVyOiBTdHJlYW1CdWZmZXI7XG5cbiAgc3RhdGljIGFzeW5jICpwYXJzZVRva2VucyhpdGVyYWJsZTogQXN5bmNJdGVyYWJsZTxCdWZmZXI+IHwgSXRlcmFibGU8QnVmZmVyPiwgZGVidWc6IERlYnVnLCBvcHRpb25zOiBQYXJzZXJPcHRpb25zLCBjb2xNZXRhZGF0YTogQ29sdW1uTWV0YWRhdGFbXSA9IFtdKSB7XG4gICAgbGV0IHRva2VuOiBUb2tlbiB8IHVuZGVmaW5lZDtcbiAgICBjb25zdCBvbkRvbmVQYXJzaW5nID0gKHQ6IFRva2VuIHwgdW5kZWZpbmVkKSA9PiB7IHRva2VuID0gdDsgfTtcblxuICAgIGNvbnN0IHN0cmVhbUJ1ZmZlciA9IG5ldyBTdHJlYW1CdWZmZXIoaXRlcmFibGUpO1xuXG4gICAgY29uc3QgcGFyc2VyID0gbmV3IFBhcnNlcihzdHJlYW1CdWZmZXIsIGRlYnVnLCBvcHRpb25zKTtcbiAgICBwYXJzZXIuY29sTWV0YWRhdGEgPSBjb2xNZXRhZGF0YTtcblxuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBzdHJlYW1CdWZmZXIud2FpdEZvckNodW5rKCk7XG4gICAgICB9IGNhdGNoIChlcnI6IHVua25vd24pIHtcbiAgICAgICAgaWYgKHN0cmVhbUJ1ZmZlci5wb3NpdGlvbiA9PT0gc3RyZWFtQnVmZmVyLmJ1ZmZlci5sZW5ndGgpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aHJvdyBlcnI7XG4gICAgICB9XG5cbiAgICAgIGlmIChwYXJzZXIuc3VzcGVuZGVkKSB7XG4gICAgICAgIC8vIFVuc3VzcGVuZCBhbmQgY29udGludWUgZnJvbSB3aGVyZSBldmVyIHdlIGxlZnQgb2ZmLlxuICAgICAgICBwYXJzZXIuc3VzcGVuZGVkID0gZmFsc2U7XG4gICAgICAgIGNvbnN0IG5leHQgPSBwYXJzZXIubmV4dCE7XG5cbiAgICAgICAgbmV4dCgpO1xuXG4gICAgICAgIC8vIENoZWNrIGlmIGEgbmV3IHRva2VuIHdhcyBwYXJzZWQgYWZ0ZXIgdW5zdXNwZW5zaW9uLlxuICAgICAgICBpZiAoIXBhcnNlci5zdXNwZW5kZWQgJiYgdG9rZW4pIHtcbiAgICAgICAgICBpZiAodG9rZW4gaW5zdGFuY2VvZiBDb2xNZXRhZGF0YVRva2VuKSB7XG4gICAgICAgICAgICBwYXJzZXIuY29sTWV0YWRhdGEgPSB0b2tlbi5jb2x1bW5zO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHlpZWxkIHRva2VuO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHdoaWxlICghcGFyc2VyLnN1c3BlbmRlZCAmJiBwYXJzZXIucG9zaXRpb24gKyAxIDw9IHBhcnNlci5idWZmZXIubGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IHR5cGUgPSBwYXJzZXIuYnVmZmVyLnJlYWRVSW50OChwYXJzZXIucG9zaXRpb24pO1xuXG4gICAgICAgIHBhcnNlci5wb3NpdGlvbiArPSAxO1xuXG4gICAgICAgIGlmICh0eXBlID09PSBUWVBFLkNPTE1FVEFEQVRBKSB7XG4gICAgICAgICAgY29uc3QgdG9rZW4gPSBhd2FpdCBjb2xNZXRhZGF0YVBhcnNlcihwYXJzZXIpO1xuICAgICAgICAgIHBhcnNlci5jb2xNZXRhZGF0YSA9IHRva2VuLmNvbHVtbnM7XG4gICAgICAgICAgeWllbGQgdG9rZW47XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gVFlQRS5ST1cpIHtcbiAgICAgICAgICB5aWVsZCByb3dQYXJzZXIocGFyc2VyKTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSBUWVBFLk5CQ1JPVykge1xuICAgICAgICAgIHlpZWxkIG5iY1Jvd1BhcnNlcihwYXJzZXIpO1xuICAgICAgICB9IGVsc2UgaWYgKHRva2VuUGFyc2Vyc1t0eXBlXSkge1xuICAgICAgICAgIHRva2VuUGFyc2Vyc1t0eXBlXShwYXJzZXIsIHBhcnNlci5vcHRpb25zLCBvbkRvbmVQYXJzaW5nKTtcblxuICAgICAgICAgIC8vIENoZWNrIGlmIGEgbmV3IHRva2VuIHdhcyBwYXJzZWQgYWZ0ZXIgdW5zdXNwZW5zaW9uLlxuICAgICAgICAgIGlmICghcGFyc2VyLnN1c3BlbmRlZCAmJiB0b2tlbikge1xuICAgICAgICAgICAgaWYgKHRva2VuIGluc3RhbmNlb2YgQ29sTWV0YWRhdGFUb2tlbikge1xuICAgICAgICAgICAgICBwYXJzZXIuY29sTWV0YWRhdGEgPSB0b2tlbi5jb2x1bW5zO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgeWllbGQgdG9rZW47XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVW5rbm93biB0eXBlOiAnICsgdHlwZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjb25zdHJ1Y3RvcihzdHJlYW1CdWZmZXI6IFN0cmVhbUJ1ZmZlciwgZGVidWc6IERlYnVnLCBvcHRpb25zOiBQYXJzZXJPcHRpb25zKSB7XG4gICAgdGhpcy5kZWJ1ZyA9IGRlYnVnO1xuICAgIHRoaXMuY29sTWV0YWRhdGEgPSBbXTtcbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuXG4gICAgdGhpcy5zdHJlYW1CdWZmZXIgPSBzdHJlYW1CdWZmZXI7XG4gICAgdGhpcy5zdXNwZW5kZWQgPSBmYWxzZTtcbiAgICB0aGlzLm5leHQgPSB1bmRlZmluZWQ7XG4gIH1cblxuICBnZXQgYnVmZmVyKCkge1xuICAgIHJldHVybiB0aGlzLnN0cmVhbUJ1ZmZlci5idWZmZXI7XG4gIH1cblxuICBnZXQgcG9zaXRpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuc3RyZWFtQnVmZmVyLnBvc2l0aW9uO1xuICB9XG5cbiAgc2V0IHBvc2l0aW9uKHZhbHVlKSB7XG4gICAgdGhpcy5zdHJlYW1CdWZmZXIucG9zaXRpb24gPSB2YWx1ZTtcbiAgfVxuXG4gIHN1c3BlbmQobmV4dDogKCkgPT4gdm9pZCkge1xuICAgIHRoaXMuc3VzcGVuZGVkID0gdHJ1ZTtcbiAgICB0aGlzLm5leHQgPSBuZXh0O1xuICB9XG5cbiAgYXdhaXREYXRhKGxlbmd0aDogbnVtYmVyLCBjYWxsYmFjazogKCkgPT4gdm9pZCkge1xuICAgIGlmICh0aGlzLnBvc2l0aW9uICsgbGVuZ3RoIDw9IHRoaXMuYnVmZmVyLmxlbmd0aCkge1xuICAgICAgY2FsbGJhY2soKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zdXNwZW5kKCgpID0+IHtcbiAgICAgICAgdGhpcy5hd2FpdERhdGEobGVuZ3RoLCBjYWxsYmFjayk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICByZWFkSW50OChjYWxsYmFjazogKGRhdGE6IG51bWJlcikgPT4gdm9pZCkge1xuICAgIHRoaXMuYXdhaXREYXRhKDEsICgpID0+IHtcbiAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLmJ1ZmZlci5yZWFkSW50OCh0aGlzLnBvc2l0aW9uKTtcbiAgICAgIHRoaXMucG9zaXRpb24gKz0gMTtcbiAgICAgIGNhbGxiYWNrKGRhdGEpO1xuICAgIH0pO1xuICB9XG5cbiAgcmVhZFVJbnQ4KGNhbGxiYWNrOiAoZGF0YTogbnVtYmVyKSA9PiB2b2lkKSB7XG4gICAgdGhpcy5hd2FpdERhdGEoMSwgKCkgPT4ge1xuICAgICAgY29uc3QgZGF0YSA9IHRoaXMuYnVmZmVyLnJlYWRVSW50OCh0aGlzLnBvc2l0aW9uKTtcbiAgICAgIHRoaXMucG9zaXRpb24gKz0gMTtcbiAgICAgIGNhbGxiYWNrKGRhdGEpO1xuICAgIH0pO1xuICB9XG5cbiAgcmVhZEludDE2TEUoY2FsbGJhY2s6IChkYXRhOiBudW1iZXIpID0+IHZvaWQpIHtcbiAgICB0aGlzLmF3YWl0RGF0YSgyLCAoKSA9PiB7XG4gICAgICBjb25zdCBkYXRhID0gdGhpcy5idWZmZXIucmVhZEludDE2TEUodGhpcy5wb3NpdGlvbik7XG4gICAgICB0aGlzLnBvc2l0aW9uICs9IDI7XG4gICAgICBjYWxsYmFjayhkYXRhKTtcbiAgICB9KTtcbiAgfVxuXG4gIHJlYWRJbnQxNkJFKGNhbGxiYWNrOiAoZGF0YTogbnVtYmVyKSA9PiB2b2lkKSB7XG4gICAgdGhpcy5hd2FpdERhdGEoMiwgKCkgPT4ge1xuICAgICAgY29uc3QgZGF0YSA9IHRoaXMuYnVmZmVyLnJlYWRJbnQxNkJFKHRoaXMucG9zaXRpb24pO1xuICAgICAgdGhpcy5wb3NpdGlvbiArPSAyO1xuICAgICAgY2FsbGJhY2soZGF0YSk7XG4gICAgfSk7XG4gIH1cblxuICByZWFkVUludDE2TEUoY2FsbGJhY2s6IChkYXRhOiBudW1iZXIpID0+IHZvaWQpIHtcbiAgICB0aGlzLmF3YWl0RGF0YSgyLCAoKSA9PiB7XG4gICAgICBjb25zdCBkYXRhID0gdGhpcy5idWZmZXIucmVhZFVJbnQxNkxFKHRoaXMucG9zaXRpb24pO1xuICAgICAgdGhpcy5wb3NpdGlvbiArPSAyO1xuICAgICAgY2FsbGJhY2soZGF0YSk7XG4gICAgfSk7XG4gIH1cblxuICByZWFkVUludDE2QkUoY2FsbGJhY2s6IChkYXRhOiBudW1iZXIpID0+IHZvaWQpIHtcbiAgICB0aGlzLmF3YWl0RGF0YSgyLCAoKSA9PiB7XG4gICAgICBjb25zdCBkYXRhID0gdGhpcy5idWZmZXIucmVhZFVJbnQxNkJFKHRoaXMucG9zaXRpb24pO1xuICAgICAgdGhpcy5wb3NpdGlvbiArPSAyO1xuICAgICAgY2FsbGJhY2soZGF0YSk7XG4gICAgfSk7XG4gIH1cblxuICByZWFkSW50MzJMRShjYWxsYmFjazogKGRhdGE6IG51bWJlcikgPT4gdm9pZCkge1xuICAgIHRoaXMuYXdhaXREYXRhKDQsICgpID0+IHtcbiAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLmJ1ZmZlci5yZWFkSW50MzJMRSh0aGlzLnBvc2l0aW9uKTtcbiAgICAgIHRoaXMucG9zaXRpb24gKz0gNDtcbiAgICAgIGNhbGxiYWNrKGRhdGEpO1xuICAgIH0pO1xuICB9XG5cbiAgcmVhZEludDMyQkUoY2FsbGJhY2s6IChkYXRhOiBudW1iZXIpID0+IHZvaWQpIHtcbiAgICB0aGlzLmF3YWl0RGF0YSg0LCAoKSA9PiB7XG4gICAgICBjb25zdCBkYXRhID0gdGhpcy5idWZmZXIucmVhZEludDMyQkUodGhpcy5wb3NpdGlvbik7XG4gICAgICB0aGlzLnBvc2l0aW9uICs9IDQ7XG4gICAgICBjYWxsYmFjayhkYXRhKTtcbiAgICB9KTtcbiAgfVxuXG4gIHJlYWRVSW50MzJMRShjYWxsYmFjazogKGRhdGE6IG51bWJlcikgPT4gdm9pZCkge1xuICAgIHRoaXMuYXdhaXREYXRhKDQsICgpID0+IHtcbiAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLmJ1ZmZlci5yZWFkVUludDMyTEUodGhpcy5wb3NpdGlvbik7XG4gICAgICB0aGlzLnBvc2l0aW9uICs9IDQ7XG4gICAgICBjYWxsYmFjayhkYXRhKTtcbiAgICB9KTtcbiAgfVxuXG4gIHJlYWRVSW50MzJCRShjYWxsYmFjazogKGRhdGE6IG51bWJlcikgPT4gdm9pZCkge1xuICAgIHRoaXMuYXdhaXREYXRhKDQsICgpID0+IHtcbiAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLmJ1ZmZlci5yZWFkVUludDMyQkUodGhpcy5wb3NpdGlvbik7XG4gICAgICB0aGlzLnBvc2l0aW9uICs9IDQ7XG4gICAgICBjYWxsYmFjayhkYXRhKTtcbiAgICB9KTtcbiAgfVxuXG4gIHJlYWRCaWdJbnQ2NExFKGNhbGxiYWNrOiAoZGF0YTogYmlnaW50KSA9PiB2b2lkKSB7XG4gICAgdGhpcy5hd2FpdERhdGEoOCwgKCkgPT4ge1xuICAgICAgY29uc3QgZGF0YSA9IHRoaXMuYnVmZmVyLnJlYWRCaWdJbnQ2NExFKHRoaXMucG9zaXRpb24pO1xuICAgICAgdGhpcy5wb3NpdGlvbiArPSA4O1xuICAgICAgY2FsbGJhY2soZGF0YSk7XG4gICAgfSk7XG4gIH1cblxuICByZWFkSW50NjRMRShjYWxsYmFjazogKGRhdGE6IG51bWJlcikgPT4gdm9pZCkge1xuICAgIHRoaXMuYXdhaXREYXRhKDgsICgpID0+IHtcbiAgICAgIGNvbnN0IGRhdGEgPSBNYXRoLnBvdygyLCAzMikgKiB0aGlzLmJ1ZmZlci5yZWFkSW50MzJMRSh0aGlzLnBvc2l0aW9uICsgNCkgKyAoKHRoaXMuYnVmZmVyW3RoaXMucG9zaXRpb24gKyA0XSAmIDB4ODApID09PSAweDgwID8gMSA6IC0xKSAqIHRoaXMuYnVmZmVyLnJlYWRVSW50MzJMRSh0aGlzLnBvc2l0aW9uKTtcbiAgICAgIHRoaXMucG9zaXRpb24gKz0gODtcbiAgICAgIGNhbGxiYWNrKGRhdGEpO1xuICAgIH0pO1xuICB9XG5cbiAgcmVhZEludDY0QkUoY2FsbGJhY2s6IChkYXRhOiBudW1iZXIpID0+IHZvaWQpIHtcbiAgICB0aGlzLmF3YWl0RGF0YSg4LCAoKSA9PiB7XG4gICAgICBjb25zdCBkYXRhID0gTWF0aC5wb3coMiwgMzIpICogdGhpcy5idWZmZXIucmVhZEludDMyQkUodGhpcy5wb3NpdGlvbikgKyAoKHRoaXMuYnVmZmVyW3RoaXMucG9zaXRpb25dICYgMHg4MCkgPT09IDB4ODAgPyAxIDogLTEpICogdGhpcy5idWZmZXIucmVhZFVJbnQzMkJFKHRoaXMucG9zaXRpb24gKyA0KTtcbiAgICAgIHRoaXMucG9zaXRpb24gKz0gODtcbiAgICAgIGNhbGxiYWNrKGRhdGEpO1xuICAgIH0pO1xuICB9XG5cbiAgcmVhZEJpZ1VJbnQ2NExFKGNhbGxiYWNrOiAoZGF0YTogYmlnaW50KSA9PiB2b2lkKSB7XG4gICAgdGhpcy5hd2FpdERhdGEoOCwgKCkgPT4ge1xuICAgICAgY29uc3QgZGF0YSA9IHRoaXMuYnVmZmVyLnJlYWRCaWdVSW50NjRMRSh0aGlzLnBvc2l0aW9uKTtcbiAgICAgIHRoaXMucG9zaXRpb24gKz0gODtcbiAgICAgIGNhbGxiYWNrKGRhdGEpO1xuICAgIH0pO1xuICB9XG5cbiAgcmVhZFVJbnQ2NExFKGNhbGxiYWNrOiAoZGF0YTogbnVtYmVyKSA9PiB2b2lkKSB7XG4gICAgdGhpcy5hd2FpdERhdGEoOCwgKCkgPT4ge1xuICAgICAgY29uc3QgZGF0YSA9IE1hdGgucG93KDIsIDMyKSAqIHRoaXMuYnVmZmVyLnJlYWRVSW50MzJMRSh0aGlzLnBvc2l0aW9uICsgNCkgKyB0aGlzLmJ1ZmZlci5yZWFkVUludDMyTEUodGhpcy5wb3NpdGlvbik7XG4gICAgICB0aGlzLnBvc2l0aW9uICs9IDg7XG4gICAgICBjYWxsYmFjayhkYXRhKTtcbiAgICB9KTtcbiAgfVxuXG4gIHJlYWRVSW50NjRCRShjYWxsYmFjazogKGRhdGE6IG51bWJlcikgPT4gdm9pZCkge1xuICAgIHRoaXMuYXdhaXREYXRhKDgsICgpID0+IHtcbiAgICAgIGNvbnN0IGRhdGEgPSBNYXRoLnBvdygyLCAzMikgKiB0aGlzLmJ1ZmZlci5yZWFkVUludDMyQkUodGhpcy5wb3NpdGlvbikgKyB0aGlzLmJ1ZmZlci5yZWFkVUludDMyQkUodGhpcy5wb3NpdGlvbiArIDQpO1xuICAgICAgdGhpcy5wb3NpdGlvbiArPSA4O1xuICAgICAgY2FsbGJhY2soZGF0YSk7XG4gICAgfSk7XG4gIH1cblxuICByZWFkRmxvYXRMRShjYWxsYmFjazogKGRhdGE6IG51bWJlcikgPT4gdm9pZCkge1xuICAgIHRoaXMuYXdhaXREYXRhKDQsICgpID0+IHtcbiAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLmJ1ZmZlci5yZWFkRmxvYXRMRSh0aGlzLnBvc2l0aW9uKTtcbiAgICAgIHRoaXMucG9zaXRpb24gKz0gNDtcbiAgICAgIGNhbGxiYWNrKGRhdGEpO1xuICAgIH0pO1xuICB9XG5cbiAgcmVhZEZsb2F0QkUoY2FsbGJhY2s6IChkYXRhOiBudW1iZXIpID0+IHZvaWQpIHtcbiAgICB0aGlzLmF3YWl0RGF0YSg0LCAoKSA9PiB7XG4gICAgICBjb25zdCBkYXRhID0gdGhpcy5idWZmZXIucmVhZEZsb2F0QkUodGhpcy5wb3NpdGlvbik7XG4gICAgICB0aGlzLnBvc2l0aW9uICs9IDQ7XG4gICAgICBjYWxsYmFjayhkYXRhKTtcbiAgICB9KTtcbiAgfVxuXG4gIHJlYWREb3VibGVMRShjYWxsYmFjazogKGRhdGE6IG51bWJlcikgPT4gdm9pZCkge1xuICAgIHRoaXMuYXdhaXREYXRhKDgsICgpID0+IHtcbiAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLmJ1ZmZlci5yZWFkRG91YmxlTEUodGhpcy5wb3NpdGlvbik7XG4gICAgICB0aGlzLnBvc2l0aW9uICs9IDg7XG4gICAgICBjYWxsYmFjayhkYXRhKTtcbiAgICB9KTtcbiAgfVxuXG4gIHJlYWREb3VibGVCRShjYWxsYmFjazogKGRhdGE6IG51bWJlcikgPT4gdm9pZCkge1xuICAgIHRoaXMuYXdhaXREYXRhKDgsICgpID0+IHtcbiAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLmJ1ZmZlci5yZWFkRG91YmxlQkUodGhpcy5wb3NpdGlvbik7XG4gICAgICB0aGlzLnBvc2l0aW9uICs9IDg7XG4gICAgICBjYWxsYmFjayhkYXRhKTtcbiAgICB9KTtcbiAgfVxuXG4gIHJlYWRVSW50MjRMRShjYWxsYmFjazogKGRhdGE6IG51bWJlcikgPT4gdm9pZCkge1xuICAgIHRoaXMuYXdhaXREYXRhKDMsICgpID0+IHtcbiAgICAgIGNvbnN0IGxvdyA9IHRoaXMuYnVmZmVyLnJlYWRVSW50MTZMRSh0aGlzLnBvc2l0aW9uKTtcbiAgICAgIGNvbnN0IGhpZ2ggPSB0aGlzLmJ1ZmZlci5yZWFkVUludDgodGhpcy5wb3NpdGlvbiArIDIpO1xuXG4gICAgICB0aGlzLnBvc2l0aW9uICs9IDM7XG5cbiAgICAgIGNhbGxiYWNrKGxvdyB8IChoaWdoIDw8IDE2KSk7XG4gICAgfSk7XG4gIH1cblxuICByZWFkVUludDQwTEUoY2FsbGJhY2s6IChkYXRhOiBudW1iZXIpID0+IHZvaWQpIHtcbiAgICB0aGlzLmF3YWl0RGF0YSg1LCAoKSA9PiB7XG4gICAgICBjb25zdCBsb3cgPSB0aGlzLmJ1ZmZlci5yZWFkVUludDMyTEUodGhpcy5wb3NpdGlvbik7XG4gICAgICBjb25zdCBoaWdoID0gdGhpcy5idWZmZXIucmVhZFVJbnQ4KHRoaXMucG9zaXRpb24gKyA0KTtcblxuICAgICAgdGhpcy5wb3NpdGlvbiArPSA1O1xuXG4gICAgICBjYWxsYmFjaygoMHgxMDAwMDAwMDAgKiBoaWdoKSArIGxvdyk7XG4gICAgfSk7XG4gIH1cblxuICByZWFkVU51bWVyaWM2NExFKGNhbGxiYWNrOiAoZGF0YTogbnVtYmVyKSA9PiB2b2lkKSB7XG4gICAgdGhpcy5hd2FpdERhdGEoOCwgKCkgPT4ge1xuICAgICAgY29uc3QgbG93ID0gdGhpcy5idWZmZXIucmVhZFVJbnQzMkxFKHRoaXMucG9zaXRpb24pO1xuICAgICAgY29uc3QgaGlnaCA9IHRoaXMuYnVmZmVyLnJlYWRVSW50MzJMRSh0aGlzLnBvc2l0aW9uICsgNCk7XG5cbiAgICAgIHRoaXMucG9zaXRpb24gKz0gODtcblxuICAgICAgY2FsbGJhY2soKDB4MTAwMDAwMDAwICogaGlnaCkgKyBsb3cpO1xuICAgIH0pO1xuICB9XG5cbiAgcmVhZFVOdW1lcmljOTZMRShjYWxsYmFjazogKGRhdGE6IG51bWJlcikgPT4gdm9pZCkge1xuICAgIHRoaXMuYXdhaXREYXRhKDEyLCAoKSA9PiB7XG4gICAgICBjb25zdCBkd29yZDEgPSB0aGlzLmJ1ZmZlci5yZWFkVUludDMyTEUodGhpcy5wb3NpdGlvbik7XG4gICAgICBjb25zdCBkd29yZDIgPSB0aGlzLmJ1ZmZlci5yZWFkVUludDMyTEUodGhpcy5wb3NpdGlvbiArIDQpO1xuICAgICAgY29uc3QgZHdvcmQzID0gdGhpcy5idWZmZXIucmVhZFVJbnQzMkxFKHRoaXMucG9zaXRpb24gKyA4KTtcblxuICAgICAgdGhpcy5wb3NpdGlvbiArPSAxMjtcblxuICAgICAgY2FsbGJhY2soZHdvcmQxICsgKDB4MTAwMDAwMDAwICogZHdvcmQyKSArICgweDEwMDAwMDAwMCAqIDB4MTAwMDAwMDAwICogZHdvcmQzKSk7XG4gICAgfSk7XG4gIH1cblxuICByZWFkVU51bWVyaWMxMjhMRShjYWxsYmFjazogKGRhdGE6IG51bWJlcikgPT4gdm9pZCkge1xuICAgIHRoaXMuYXdhaXREYXRhKDE2LCAoKSA9PiB7XG4gICAgICBjb25zdCBkd29yZDEgPSB0aGlzLmJ1ZmZlci5yZWFkVUludDMyTEUodGhpcy5wb3NpdGlvbik7XG4gICAgICBjb25zdCBkd29yZDIgPSB0aGlzLmJ1ZmZlci5yZWFkVUludDMyTEUodGhpcy5wb3NpdGlvbiArIDQpO1xuICAgICAgY29uc3QgZHdvcmQzID0gdGhpcy5idWZmZXIucmVhZFVJbnQzMkxFKHRoaXMucG9zaXRpb24gKyA4KTtcbiAgICAgIGNvbnN0IGR3b3JkNCA9IHRoaXMuYnVmZmVyLnJlYWRVSW50MzJMRSh0aGlzLnBvc2l0aW9uICsgMTIpO1xuXG4gICAgICB0aGlzLnBvc2l0aW9uICs9IDE2O1xuXG4gICAgICBjYWxsYmFjayhkd29yZDEgKyAoMHgxMDAwMDAwMDAgKiBkd29yZDIpICsgKDB4MTAwMDAwMDAwICogMHgxMDAwMDAwMDAgKiBkd29yZDMpICsgKDB4MTAwMDAwMDAwICogMHgxMDAwMDAwMDAgKiAweDEwMDAwMDAwMCAqIGR3b3JkNCkpO1xuICAgIH0pO1xuICB9XG5cbiAgLy8gVmFyaWFibGUgbGVuZ3RoIGRhdGFcblxuICByZWFkQnVmZmVyKGxlbmd0aDogbnVtYmVyLCBjYWxsYmFjazogKGRhdGE6IEJ1ZmZlcikgPT4gdm9pZCkge1xuICAgIHRoaXMuYXdhaXREYXRhKGxlbmd0aCwgKCkgPT4ge1xuICAgICAgY29uc3QgZGF0YSA9IHRoaXMuYnVmZmVyLnNsaWNlKHRoaXMucG9zaXRpb24sIHRoaXMucG9zaXRpb24gKyBsZW5ndGgpO1xuICAgICAgdGhpcy5wb3NpdGlvbiArPSBsZW5ndGg7XG4gICAgICBjYWxsYmFjayhkYXRhKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8vIFJlYWQgYSBVbmljb2RlIFN0cmluZyAoQlZBUkNIQVIpXG4gIHJlYWRCVmFyQ2hhcihjYWxsYmFjazogKGRhdGE6IHN0cmluZykgPT4gdm9pZCkge1xuICAgIHRoaXMucmVhZFVJbnQ4KChsZW5ndGgpID0+IHtcbiAgICAgIHRoaXMucmVhZEJ1ZmZlcihsZW5ndGggKiAyLCAoZGF0YSkgPT4ge1xuICAgICAgICBjYWxsYmFjayhkYXRhLnRvU3RyaW5nKCd1Y3MyJykpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICAvLyBSZWFkIGEgVW5pY29kZSBTdHJpbmcgKFVTVkFSQ0hBUilcbiAgcmVhZFVzVmFyQ2hhcihjYWxsYmFjazogKGRhdGE6IHN0cmluZykgPT4gdm9pZCkge1xuICAgIHRoaXMucmVhZFVJbnQxNkxFKChsZW5ndGgpID0+IHtcbiAgICAgIHRoaXMucmVhZEJ1ZmZlcihsZW5ndGggKiAyLCAoZGF0YSkgPT4ge1xuICAgICAgICBjYWxsYmFjayhkYXRhLnRvU3RyaW5nKCd1Y3MyJykpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICAvLyBSZWFkIGJpbmFyeSBkYXRhIChCVkFSQllURSlcbiAgcmVhZEJWYXJCeXRlKGNhbGxiYWNrOiAoZGF0YTogQnVmZmVyKSA9PiB2b2lkKSB7XG4gICAgdGhpcy5yZWFkVUludDgoKGxlbmd0aCkgPT4ge1xuICAgICAgdGhpcy5yZWFkQnVmZmVyKGxlbmd0aCwgY2FsbGJhY2spO1xuICAgIH0pO1xuICB9XG5cbiAgLy8gUmVhZCBiaW5hcnkgZGF0YSAoVVNWQVJCWVRFKVxuICByZWFkVXNWYXJCeXRlKGNhbGxiYWNrOiAoZGF0YTogQnVmZmVyKSA9PiB2b2lkKSB7XG4gICAgdGhpcy5yZWFkVUludDE2TEUoKGxlbmd0aCkgPT4ge1xuICAgICAgdGhpcy5yZWFkQnVmZmVyKGxlbmd0aCwgY2FsbGJhY2spO1xuICAgIH0pO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFBhcnNlcjtcbm1vZHVsZS5leHBvcnRzID0gUGFyc2VyO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFHQSxJQUFBQSxNQUFBLEdBQUFDLE9BQUE7QUFFQSxJQUFBQyx1QkFBQSxHQUFBQyxzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQUcsZ0JBQUEsR0FBQUgsT0FBQTtBQUNBLElBQUFJLHFCQUFBLEdBQUFGLHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBSyxxQkFBQSxHQUFBTCxPQUFBO0FBQ0EsSUFBQU0sa0JBQUEsR0FBQUosc0JB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
342
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfdG9rZW4iLCJyZXF1aXJlIiwiX2NvbG1ldGFkYXRhVG9rZW5QYXJzZXIiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwiX2RvbmVUb2tlblBhcnNlciIsIl9lbnZDaGFuZ2VUb2tlblBhcnNlciIsIl9pbmZvZXJyb3JUb2tlblBhcnNlciIsIl9mZWRhdXRoSW5mb1BhcnNlciIsIl9mZWF0dXJlRXh0QWNrUGFyc2VyIiwiX2xvZ2luYWNrVG9rZW5QYXJzZXIiLCJfb3JkZXJUb2tlblBhcnNlciIsIl9yZXR1cm5zdGF0dXNUb2tlblBhcnNlciIsIl9yZXR1cm52YWx1ZVRva2VuUGFyc2VyIiwiX3Jvd1Rva2VuUGFyc2VyIiwiX25iY3Jvd1Rva2VuUGFyc2VyIiwiX3NzcGlUb2tlblBhcnNlciIsIl9oZWxwZXJzIiwib2JqIiwiX19lc01vZHVsZSIsImRlZmF1bHQiLCJQYXJzZXIiLCJkZWJ1ZyIsImNvbE1ldGFkYXRhIiwib3B0aW9ucyIsIml0ZXJhdG9yIiwiYnVmZmVyIiwicG9zaXRpb24iLCJwYXJzZVRva2VucyIsIml0ZXJhYmxlIiwicGFyc2VyIiwid2FpdEZvckNodW5rIiwiZXJyIiwibGVuZ3RoIiwidHlwZSIsInJlYWRVSW50OCIsInRva2VuIiwicmVhZFRva2VuIiwidW5kZWZpbmVkIiwiVFlQRSIsIkRPTkUiLCJyZWFkRG9uZVRva2VuIiwiRE9ORVBST0MiLCJyZWFkRG9uZVByb2NUb2tlbiIsIkRPTkVJTlBST0MiLCJyZWFkRG9uZUluUHJvY1Rva2VuIiwiRVJST1IiLCJyZWFkRXJyb3JUb2tlbiIsIklORk8iLCJyZWFkSW5mb1Rva2VuIiwiRU5WQ0hBTkdFIiwicmVhZEVudkNoYW5nZVRva2VuIiwiTE9HSU5BQ0siLCJyZWFkTG9naW5BY2tUb2tlbiIsIlJFVFVSTlNUQVRVUyIsInJlYWRSZXR1cm5TdGF0dXNUb2tlbiIsIk9SREVSIiwicmVhZE9yZGVyVG9rZW4iLCJGRURBVVRISU5GTyIsInJlYWRGZWRBdXRoSW5mb1Rva2VuIiwiU1NQSSIsInJlYWRTU1BJVG9rZW4iLCJDT0xNRVRBREFUQSIsInJlYWRDb2xNZXRhZGF0YVRva2VuIiwiUkVUVVJOVkFMVUUiLCJyZWFkUmV0dXJuVmFsdWVUb2tlbiIsIlJPVyIsInJlYWRSb3dUb2tlbiIsIk5CQ1JPVyIsInJlYWROYmNSb3dUb2tlbiIsIkZFQVRVUkVFWFRBQ0siLCJyZWFkRmVhdHVyZUV4dEFja1Rva2VuIiwiRXJyb3IiLCJyZXN1bHQiLCJmZWF0dXJlRXh0QWNrUGFyc2VyIiwiTm90RW5vdWdoRGF0YUVycm9yIiwidGhlbiIsIm9mZnNldCIsInZhbHVlIiwibmJjUm93UGFyc2VyIiwicmV0dXJuVmFsdWVQYXJzZXIiLCJjb2xNZXRhZGF0YVBhcnNlciIsImNvbHVtbnMiLCJzc3BpUGFyc2VyIiwiZmVkQXV0aEluZm9QYXJzZXIiLCJvcmRlclBhcnNlciIsInJldHVyblN0YXR1c1BhcnNlciIsImxvZ2luQWNrUGFyc2VyIiwiZW52Q2hhbmdlUGFyc2VyIiwicm93UGFyc2VyIiwiaW5mb1BhcnNlciIsImVycm9yUGFyc2VyIiwiZG9uZUluUHJvY1BhcnNlciIsImRvbmVQcm9jUGFyc2VyIiwiZG9uZVBhcnNlciIsImNvbnN0cnVjdG9yIiwiU3ltYm9sIiwiYXN5bmNJdGVyYXRvciIsImNhbGwiLCJCdWZmZXIiLCJhbGxvYyIsIm5leHQiLCJkb25lIiwiY29uY2F0Iiwic2xpY2UiLCJfZGVmYXVsdCIsImV4cG9ydHMiLCJtb2R1bGUiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvdG9rZW4vc3RyZWFtLXBhcnNlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgRGVidWcgZnJvbSAnLi4vZGVidWcnO1xuaW1wb3J0IHsgdHlwZSBJbnRlcm5hbENvbm5lY3Rpb25PcHRpb25zIH0gZnJvbSAnLi4vY29ubmVjdGlvbic7XG5cbmltcG9ydCB7IFRZUEUsIENvbE1ldGFkYXRhVG9rZW4sIERvbmVQcm9jVG9rZW4sIERvbmVUb2tlbiwgRG9uZUluUHJvY1Rva2VuLCBFcnJvck1lc3NhZ2VUb2tlbiwgSW5mb01lc3NhZ2VUb2tlbiwgUm93VG9rZW4sIHR5cGUgRW52Q2hhbmdlVG9rZW4sIExvZ2luQWNrVG9rZW4sIFJldHVyblN0YXR1c1Rva2VuLCBPcmRlclRva2VuLCBGZWRBdXRoSW5mb1Rva2VuLCBTU1BJVG9rZW4sIFJldHVyblZhbHVlVG9rZW4sIE5CQ1Jvd1Rva2VuLCBGZWF0dXJlRXh0QWNrVG9rZW4sIFRva2VuIH0gZnJvbSAnLi90b2tlbic7XG5cbmltcG9ydCBjb2xNZXRhZGF0YVBhcnNlciwgeyB0eXBlIENvbHVtbk1ldGFkYXRhIH0gZnJvbSAnLi9jb2xtZXRhZGF0YS10b2tlbi1wYXJzZXInO1xuaW1wb3J0IHsgZG9uZVBhcnNlciwgZG9uZUluUHJvY1BhcnNlciwgZG9uZVByb2NQYXJzZXIgfSBmcm9tICcuL2RvbmUtdG9rZW4tcGFyc2VyJztcbmltcG9ydCBlbnZDaGFuZ2VQYXJzZXIgZnJvbSAnLi9lbnYtY2hhbmdlLXRva2VuLXBhcnNlcic7XG5pbXBvcnQgeyBlcnJvclBhcnNlciwgaW5mb1BhcnNlciB9IGZyb20gJy4vaW5mb2Vycm9yLXRva2VuLXBhcnNlcic7XG5pbXBvcnQgZmVkQXV0aEluZm9QYXJzZXIgZnJvbSAnLi9mZWRhdXRoLWluZm8tcGFyc2VyJztcbmltcG9ydCBmZWF0dXJlRXh0QWNrUGFyc2VyIGZyb20gJy4vZmVhdHVyZS1leHQtYWNrLXBhcnNlcic7XG5pbXBvcnQgbG9naW5BY2tQYXJzZXIgZnJvbSAnLi9sb2dpbmFjay10b2tlbi1wYXJzZXInO1xuaW1wb3J0IG9yZGVyUGFyc2VyIGZyb20gJy4vb3JkZXItdG9rZW4tcGFyc2VyJztcbmltcG9ydCByZXR1cm5TdGF0dXNQYXJzZXIgZnJvbSAnLi9yZXR1cm5zdGF0dXMtdG9rZW4tcGFyc2VyJztcbmltcG9ydCByZXR1cm5WYWx1ZVBhcnNlciBmcm9tICcuL3JldHVybnZhbHVlLXRva2VuLXBhcnNlcic7XG5pbXBvcnQgcm93UGFyc2VyIGZyb20gJy4vcm93LXRva2VuLXBhcnNlcic7XG5pbXBvcnQgbmJjUm93UGFyc2VyIGZyb20gJy4vbmJjcm93LXRva2VuLXBhcnNlcic7XG5pbXBvcnQgc3NwaVBhcnNlciBmcm9tICcuL3NzcGktdG9rZW4tcGFyc2VyJztcbmltcG9ydCB7IE5vdEVub3VnaERhdGFFcnJvciB9IGZyb20gJy4vaGVscGVycyc7XG5cbmV4cG9ydCB0eXBlIFBhcnNlck9wdGlvbnMgPSBQaWNrPEludGVybmFsQ29ubmVjdGlvbk9wdGlvbnMsICd1c2VVVEMnIHwgJ2xvd2VyQ2FzZUd1aWRzJyB8ICd0ZHNWZXJzaW9uJyB8ICd1c2VDb2x1bW5OYW1lcycgfCAnY29sdW1uTmFtZVJlcGxhY2VyJyB8ICdjYW1lbENhc2VDb2x1bW5zJz47XG5cbmNsYXNzIFBhcnNlciB7XG4gIGRlYnVnOiBEZWJ1ZztcbiAgY29sTWV0YWRhdGE6IENvbHVtbk1ldGFkYXRhW107XG4gIG9wdGlvbnM6IFBhcnNlck9wdGlvbnM7XG5cbiAgaXRlcmF0b3I6IEFzeW5jSXRlcmF0b3I8QnVmZmVyLCBhbnksIHVuZGVmaW5lZD4gfCBJdGVyYXRvcjxCdWZmZXIsIGFueSwgdW5kZWZpbmVkPjtcbiAgYnVmZmVyOiBCdWZmZXI7XG4gIHBvc2l0aW9uOiBudW1iZXI7XG5cbiAgc3RhdGljIGFzeW5jICpwYXJzZVRva2VucyhpdGVyYWJsZTogQXN5bmNJdGVyYWJsZTxCdWZmZXI+IHwgSXRlcmFibGU8QnVmZmVyPiwgZGVidWc6IERlYnVnLCBvcHRpb25zOiBQYXJzZXJPcHRpb25zLCBjb2xNZXRhZGF0YTogQ29sdW1uTWV0YWRhdGFbXSA9IFtdKSB7XG4gICAgY29uc3QgcGFyc2VyID0gbmV3IFBhcnNlcihpdGVyYWJsZSwgZGVidWcsIG9wdGlvbnMpO1xuICAgIHBhcnNlci5jb2xNZXRhZGF0YSA9IGNvbE1ldGFkYXRhO1xuXG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHBhcnNlci53YWl0Rm9yQ2h1bmsoKTtcbiAgICAgIH0gY2F0Y2ggKGVycjogdW5rbm93bikge1xuICAgICAgICBpZiAocGFyc2VyLnBvc2l0aW9uID09PSBwYXJzZXIuYnVmZmVyLmxlbmd0aCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRocm93IGVycjtcbiAgICAgIH1cblxuICAgICAgd2hpbGUgKHBhcnNlci5idWZmZXIubGVuZ3RoID49IHBhcnNlci5wb3NpdGlvbiArIDEpIHtcbiAgICAgICAgY29uc3QgdHlwZSA9IHBhcnNlci5idWZmZXIucmVhZFVJbnQ4KHBhcnNlci5wb3NpdGlvbik7XG4gICAgICAgIHBhcnNlci5wb3NpdGlvbiArPSAxO1xuXG4gICAgICAgIGNvbnN0IHRva2VuID0gcGFyc2VyLnJlYWRUb2tlbih0eXBlKTtcbiAgICAgICAgaWYgKHRva2VuICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB5aWVsZCB0b2tlbjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJlYWRUb2tlbih0eXBlOiBudW1iZXIpOiBUb2tlbiB8IHVuZGVmaW5lZCB8IFByb21pc2U8VG9rZW4gfCB1bmRlZmluZWQ+IHtcbiAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgIGNhc2UgVFlQRS5ET05FOiB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlYWREb25lVG9rZW4oKTtcbiAgICAgIH1cblxuICAgICAgY2FzZSBUWVBFLkRPTkVQUk9DOiB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlYWREb25lUHJvY1Rva2VuKCk7XG4gICAgICB9XG5cbiAgICAgIGNhc2UgVFlQRS5ET05FSU5QUk9DOiB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlYWREb25lSW5Qcm9jVG9rZW4oKTtcbiAgICAgIH1cblxuICAgICAgY2FzZSBUWVBFLkVSUk9SOiB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlYWRFcnJvclRva2VuKCk7XG4gICAgICB9XG5cbiAgICAgIGNhc2UgVFlQRS5JTkZPOiB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlYWRJbmZvVG9rZW4oKTtcbiAgICAgIH1cblxuICAgICAgY2FzZSBUWVBFLkVOVkNIQU5HRToge1xuICAgICAgICByZXR1cm4gdGhpcy5yZWFkRW52Q2hhbmdlVG9rZW4oKTtcbiAgICAgIH1cblxuICAgICAgY2FzZSBUWVBFLkxPR0lOQUNLOiB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlYWRMb2dpbkFja1Rva2VuKCk7XG4gICAgICB9XG5cbiAgICAgIGNhc2UgVFlQRS5SRVRVUk5TVEFUVVM6IHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVhZFJldHVyblN0YXR1c1Rva2VuKCk7XG4gICAgICB9XG5cbiAgICAgIGNhc2UgVFlQRS5PUkRFUjoge1xuICAgICAgICByZXR1cm4gdGhpcy5yZWFkT3JkZXJUb2tlbigpO1xuICAgICAgfVxuXG4gICAgICBjYXNlIFRZUEUuRkVEQVVUSElORk86IHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVhZEZlZEF1dGhJbmZvVG9rZW4oKTtcbiAgICAgIH1cblxuICAgICAgY2FzZSBUWVBFLlNTUEk6IHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVhZFNTUElUb2tlbigpO1xuICAgICAgfVxuXG4gICAgICBjYXNlIFRZUEUuQ09MTUVUQURBVEE6IHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVhZENvbE1ldGFkYXRhVG9rZW4oKTtcbiAgICAgIH1cblxuICAgICAgY2FzZSBUWVBFLlJFVFVSTlZBTFVFOiB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlYWRSZXR1cm5WYWx1ZVRva2VuKCk7XG4gICAgICB9XG5cbiAgICAgIGNhc2UgVFlQRS5ST1c6IHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVhZFJvd1Rva2VuKCk7XG4gICAgICB9XG5cbiAgICAgIGNhc2UgVFlQRS5OQkNST1c6IHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVhZE5iY1Jvd1Rva2VuKCk7XG4gICAgICB9XG5cbiAgICAgIGNhc2UgVFlQRS5GRUFUVVJFRVhUQUNLOiB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlYWRGZWF0dXJlRXh0QWNrVG9rZW4oKTtcbiAgICAgIH1cblxuICAgICAgZGVmYXVsdDoge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vua25vd24gdHlwZTogJyArIHR5cGUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJlYWRGZWF0dXJlRXh0QWNrVG9rZW4oKTogRmVhdHVyZUV4dEFja1Rva2VuIHwgUHJvbWlzZTxGZWF0dXJlRXh0QWNrVG9rZW4+IHtcbiAgICBsZXQgcmVzdWx0O1xuXG4gICAgdHJ5IHtcbiAgICAgIHJlc3VsdCA9IGZlYXR1cmVFeHRBY2tQYXJzZXIodGhpcy5idWZmZXIsIHRoaXMucG9zaXRpb24sIHRoaXMub3B0aW9ucyk7XG4gICAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcbiAgICAgIGlmIChlcnIgaW5zdGFuY2VvZiBOb3RFbm91Z2hEYXRhRXJyb3IpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMud2FpdEZvckNodW5rKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMucmVhZEZlYXR1cmVFeHRBY2tUb2tlbigpO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgdGhyb3cgZXJyO1xuICAgIH1cblxuICAgIHRoaXMucG9zaXRpb24gPSByZXN1bHQub2Zmc2V0O1xuICAgIHJldHVybiByZXN1bHQudmFsdWU7XG4gIH1cblxuICBhc3luYyByZWFkTmJjUm93VG9rZW4oKTogUHJvbWlzZTxOQkNSb3dUb2tlbj4ge1xuICAgIHJldHVybiBhd2FpdCBuYmNSb3dQYXJzZXIodGhpcyk7XG4gIH1cblxuICBhc3luYyByZWFkUmV0dXJuVmFsdWVUb2tlbigpOiBQcm9taXNlPFJldHVyblZhbHVlVG9rZW4+IHtcbiAgICByZXR1cm4gYXdhaXQgcmV0dXJuVmFsdWVQYXJzZXIodGhpcyk7XG4gIH1cblxuICBhc3luYyByZWFkQ29sTWV0YWRhdGFUb2tlbigpOiBQcm9taXNlPENvbE1ldGFkYXRhVG9rZW4+IHtcbiAgICBjb25zdCB0b2tlbiA9IGF3YWl0IGNvbE1ldGFkYXRhUGFyc2VyKHRoaXMpO1xuICAgIHRoaXMuY29sTWV0YWRhdGEgPSB0b2tlbi5jb2x1bW5zO1xuICAgIHJldHVybiB0b2tlbjtcbiAgfVxuXG4gIHJlYWRTU1BJVG9rZW4oKTogU1NQSVRva2VuIHwgUHJvbWlzZTxTU1BJVG9rZW4+IHtcbiAgICBsZXQgcmVzdWx0O1xuXG4gICAgdHJ5IHtcbiAgICAgIHJlc3VsdCA9IHNzcGlQYXJzZXIodGhpcy5idWZmZXIsIHRoaXMucG9zaXRpb24sIHRoaXMub3B0aW9ucyk7XG4gICAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcbiAgICAgIGlmIChlcnIgaW5zdGFuY2VvZiBOb3RFbm91Z2hEYXRhRXJyb3IpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMud2FpdEZvckNodW5rKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMucmVhZFNTUElUb2tlbigpO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgdGhyb3cgZXJyO1xuICAgIH1cblxuICAgIHRoaXMucG9zaXRpb24gPSByZXN1bHQub2Zmc2V0O1xuICAgIHJldHVybiByZXN1bHQudmFsdWU7XG4gIH1cblxuICByZWFkRmVkQXV0aEluZm9Ub2tlbigpOiBGZWRBdXRoSW5mb1Rva2VuIHwgUHJvbWlzZTxGZWRBdXRoSW5mb1Rva2VuPiB7XG4gICAgbGV0IHJlc3VsdDtcblxuICAgIHRyeSB7XG4gICAgICByZXN1bHQgPSBmZWRBdXRoSW5mb1BhcnNlcih0aGlzLmJ1ZmZlciwgdGhpcy5wb3NpdGlvbiwgdGhpcy5vcHRpb25zKTtcbiAgICB9IGNhdGNoIChlcnI6IGFueSkge1xuICAgICAgaWYgKGVyciBpbnN0YW5jZW9mIE5vdEVub3VnaERhdGFFcnJvcikge1xuICAgICAgICByZXR1cm4gdGhpcy53YWl0Rm9yQ2h1bmsoKS50aGVuKCgpID0+IHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5yZWFkRmVkQXV0aEluZm9Ub2tlbigpO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgdGhyb3cgZXJyO1xuICAgIH1cblxuICAgIHRoaXMucG9zaXRpb24gPSByZXN1bHQub2Zmc2V0O1xuICAgIHJldHVybiByZXN1bHQudmFsdWU7XG4gIH1cblxuICByZWFkT3JkZXJUb2tlbigpOiBPcmRlclRva2VuIHwgUHJvbWlzZTxPcmRlclRva2VuPiB7XG4gICAgbGV0IHJlc3VsdDtcblxuICAgIHRyeSB7XG4gICAgICByZXN1bHQgPSBvcmRlclBhcnNlcih0aGlzLmJ1ZmZlciwgdGhpcy5wb3NpdGlvbiwgdGhpcy5vcHRpb25zKTtcbiAgICB9IGNhdGNoIChlcnI6IGFueSkge1xuICAgICAgaWYgKGVyciBpbnN0YW5jZW9mIE5vdEVub3VnaERhdGFFcnJvcikge1xuICAgICAgICByZXR1cm4gdGhpcy53YWl0Rm9yQ2h1bmsoKS50aGVuKCgpID0+IHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5yZWFkT3JkZXJUb2tlbigpO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgdGhyb3cgZXJyO1xuICAgIH1cblxuICAgIHRoaXMucG9zaXRpb24gPSByZXN1bHQub2Zmc2V0O1xuICAgIHJldHVybiByZXN1bHQudmFsdWU7XG4gIH1cblxuICByZWFkUmV0dXJuU3RhdHVzVG9rZW4oKTogUmV0dXJuU3RhdHVzVG9rZW4gfCBQcm9taXNlPFJldHVyblN0YXR1c1Rva2VuPiB7XG4gICAgbGV0IHJlc3VsdDtcblxuICAgIHRyeSB7XG4gICAgICByZXN1bHQgPSByZXR1cm5TdGF0dXNQYXJzZXIodGhpcy5idWZmZXIsIHRoaXMucG9zaXRpb24sIHRoaXMub3B0aW9ucyk7XG4gICAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcbiAgICAgIGlmIChlcnIgaW5zdGFuY2VvZiBOb3RFbm91Z2hEYXRhRXJyb3IpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMud2FpdEZvckNodW5rKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMucmVhZFJldHVyblN0YXR1c1Rva2VuKCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICB0aHJvdyBlcnI7XG4gICAgfVxuXG4gICAgdGhpcy5wb3NpdGlvbiA9IHJlc3VsdC5vZmZzZXQ7XG4gICAgcmV0dXJuIHJlc3VsdC52YWx1ZTtcbiAgfVxuXG4gIHJlYWRMb2dpbkFja1Rva2VuKCk6IExvZ2luQWNrVG9rZW4gfCBQcm9taXNlPExvZ2luQWNrVG9rZW4+IHtcbiAgICBsZXQgcmVzdWx0O1xuXG4gICAgdHJ5IHtcbiAgICAgIHJlc3VsdCA9IGxvZ2luQWNrUGFyc2VyKHRoaXMuYnVmZmVyLCB0aGlzLnBvc2l0aW9uLCB0aGlzLm9wdGlvbnMpO1xuICAgIH0gY2F0Y2ggKGVycjogYW55KSB7XG4gICAgICBpZiAoZXJyIGluc3RhbmNlb2YgTm90RW5vdWdoRGF0YUVycm9yKSB7XG4gICAgICAgIHJldHVybiB0aGlzLndhaXRGb3JDaHVuaygpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIHJldHVybiB0aGlzLnJlYWRMb2dpbkFja1Rva2VuKCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICB0aHJvdyBlcnI7XG4gICAgfVxuXG4gICAgdGhpcy5wb3NpdGlvbiA9IHJlc3VsdC5vZmZzZXQ7XG4gICAgcmV0dXJuIHJlc3VsdC52YWx1ZTtcbiAgfVxuXG4gIHJlYWRFbnZDaGFuZ2VUb2tlbigpOiBFbnZDaGFuZ2VUb2tlbiB8IHVuZGVmaW5lZCB8IFByb21pc2U8RW52Q2hhbmdlVG9rZW4gfCB1bmRlZmluZWQ+IHtcbiAgICBsZXQgcmVzdWx0O1xuXG4gICAgdHJ5IHtcbiAgICAgIHJlc3VsdCA9IGVudkNoYW5nZVBhcnNlcih0aGlzLmJ1ZmZlciwgdGhpcy5wb3NpdGlvbiwgdGhpcy5vcHRpb25zKTtcbiAgICB9IGNhdGNoIChlcnI6IGFueSkge1xuICAgICAgaWYgKGVyciBpbnN0YW5jZW9mIE5vdEVub3VnaERhdGFFcnJvcikge1xuICAgICAgICByZXR1cm4gdGhpcy53YWl0Rm9yQ2h1bmsoKS50aGVuKCgpID0+IHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5yZWFkRW52Q2hhbmdlVG9rZW4oKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHRocm93IGVycjtcbiAgICB9XG5cbiAgICB0aGlzLnBvc2l0aW9uID0gcmVzdWx0Lm9mZnNldDtcbiAgICByZXR1cm4gcmVzdWx0LnZhbHVlO1xuICB9XG5cbiAgcmVhZFJvd1Rva2VuKCk6IFJvd1Rva2VuIHwgUHJvbWlzZTxSb3dUb2tlbj4ge1xuICAgIHJldHVybiByb3dQYXJzZXIodGhpcyk7XG4gIH1cblxuICByZWFkSW5mb1Rva2VuKCk6IEluZm9NZXNzYWdlVG9rZW4gfCBQcm9taXNlPEluZm9NZXNzYWdlVG9rZW4+IHtcbiAgICBsZXQgcmVzdWx0O1xuXG4gICAgdHJ5IHtcbiAgICAgIHJlc3VsdCA9IGluZm9QYXJzZXIodGhpcy5idWZmZXIsIHRoaXMucG9zaXRpb24sIHRoaXMub3B0aW9ucyk7XG4gICAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcbiAgICAgIGlmIChlcnIgaW5zdGFuY2VvZiBOb3RFbm91Z2hEYXRhRXJyb3IpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMud2FpdEZvckNodW5rKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMucmVhZEluZm9Ub2tlbigpO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgdGhyb3cgZXJyO1xuICAgIH1cblxuICAgIHRoaXMucG9zaXRpb24gPSByZXN1bHQub2Zmc2V0O1xuICAgIHJldHVybiByZXN1bHQudmFsdWU7XG4gIH1cblxuICByZWFkRXJyb3JUb2tlbigpOiBFcnJvck1lc3NhZ2VUb2tlbiB8IFByb21pc2U8RXJyb3JNZXNzYWdlVG9rZW4+IHtcbiAgICBsZXQgcmVzdWx0O1xuXG4gICAgdHJ5IHtcbiAgICAgIHJlc3VsdCA9IGVycm9yUGFyc2VyKHRoaXMuYnVmZmVyLCB0aGlzLnBvc2l0aW9uLCB0aGlzLm9wdGlvbnMpO1xuICAgIH0gY2F0Y2ggKGVycjogYW55KSB7XG4gICAgICBpZiAoZXJyIGluc3RhbmNlb2YgTm90RW5vdWdoRGF0YUVycm9yKSB7XG4gICAgICAgIHJldHVybiB0aGlzLndhaXRGb3JDaHVuaygpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIHJldHVybiB0aGlzLnJlYWRFcnJvclRva2VuKCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICB0aHJvdyBlcnI7XG4gICAgfVxuXG4gICAgdGhpcy5wb3NpdGlvbiA9IHJlc3VsdC5vZmZzZXQ7XG4gICAgcmV0dXJuIHJlc3VsdC52YWx1ZTtcbiAgfVxuXG4gIHJlYWREb25lSW5Qcm9jVG9rZW4oKTogRG9uZUluUHJvY1Rva2VuIHwgUHJvbWlzZTxEb25lSW5Qcm9jVG9rZW4+IHtcbiAgICBsZXQgcmVzdWx0O1xuXG4gICAgdHJ5IHtcbiAgICAgIHJlc3VsdCA9IGRvbmVJblByb2NQYXJzZXIodGhpcy5idWZmZXIsIHRoaXMucG9zaXRpb24sIHRoaXMub3B0aW9ucyk7XG4gICAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcbiAgICAgIGlmIChlcnIgaW5zdGFuY2VvZiBOb3RFbm91Z2hEYXRhRXJyb3IpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMud2FpdEZvckNodW5rKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMucmVhZERvbmVJblByb2NUb2tlbigpO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgdGhyb3cgZXJyO1xuICAgIH1cblxuICAgIHRoaXMucG9zaXRpb24gPSByZXN1bHQub2Zmc2V0O1xuICAgIHJldHVybiByZXN1bHQudmFsdWU7XG4gIH1cblxuICByZWFkRG9uZVByb2NUb2tlbigpOiBEb25lUHJvY1Rva2VuIHwgUHJvbWlzZTxEb25lUHJvY1Rva2VuPiB7XG4gICAgbGV0IHJlc3VsdDtcblxuICAgIHRyeSB7XG4gICAgICByZXN1bHQgPSBkb25lUHJvY1BhcnNlcih0aGlzLmJ1ZmZlciwgdGhpcy5wb3NpdGlvbiwgdGhpcy5vcHRpb25zKTtcbiAgICB9IGNhdGNoIChlcnI6IGFueSkge1xuICAgICAgaWYgKGVyciBpbnN0YW5jZW9mIE5vdEVub3VnaERhdGFFcnJvcikge1xuICAgICAgICByZXR1cm4gdGhpcy53YWl0Rm9yQ2h1bmsoKS50aGVuKCgpID0+IHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5yZWFkRG9uZVByb2NUb2tlbigpO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgdGhyb3cgZXJyO1xuICAgIH1cblxuICAgIHRoaXMucG9zaXRpb24gPSByZXN1bHQub2Zmc2V0O1xuICAgIHJldHVybiByZXN1bHQudmFsdWU7XG4gIH1cblxuICByZWFkRG9uZVRva2VuKCk6IERvbmVUb2tlbiB8IFByb21pc2U8RG9uZVRva2VuPiB7XG4gICAgbGV0IHJlc3VsdDtcblxuICAgIHRyeSB7XG4gICAgICByZXN1bHQgPSBkb25lUGFyc2VyKHRoaXMuYnVmZmVyLCB0aGlzLnBvc2l0aW9uLCB0aGlzLm9wdGlvbnMpO1xuICAgIH0gY2F0Y2ggKGVycjogYW55KSB7XG4gICAgICBpZiAoZXJyIGluc3RhbmNlb2YgTm90RW5vdWdoRGF0YUVycm9yKSB7XG4gICAgICAgIHJldHVybiB0aGlzLndhaXRGb3JDaHVuaygpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIHJldHVybiB0aGlzLnJlYWREb25lVG9rZW4oKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHRocm93IGVycjtcbiAgICB9XG5cbiAgICB0aGlzLnBvc2l0aW9uID0gcmVzdWx0Lm9mZnNldDtcbiAgICByZXR1cm4gcmVzdWx0LnZhbHVlO1xuICB9XG5cbiAgY29uc3RydWN0b3IoaXRlcmFibGU6IEFzeW5jSXRlcmFibGU8QnVmZmVyPiB8IEl0ZXJhYmxlPEJ1ZmZlcj4sIGRlYnVnOiBEZWJ1Zywgb3B0aW9uczogUGFyc2VyT3B0aW9ucykge1xuICAgIHRoaXMuZGVidWcgPSBkZWJ1ZztcbiAgICB0aGlzLmNvbE1ldGFkYXRhID0gW107XG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcblxuICAgIHRoaXMuaXRlcmF0b3IgPSAoKGl0ZXJhYmxlIGFzIEFzeW5jSXRlcmFibGU8QnVmZmVyPilbU3ltYm9sLmFzeW5jSXRlcmF0b3JdIHx8IChpdGVyYWJsZSBhcyBJdGVyYWJsZTxCdWZmZXI+KVtTeW1ib2wuaXRlcmF0b3JdKS5jYWxsKGl0ZXJhYmxlKTtcblxuICAgIHRoaXMuYnVmZmVyID0gQnVmZmVyLmFsbG9jKDApO1xuICAgIHRoaXMucG9zaXRpb24gPSAwO1xuICB9XG5cbiAgYXN5bmMgd2FpdEZvckNodW5rKCkge1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuaXRlcmF0b3IubmV4dCgpO1xuICAgIGlmIChyZXN1bHQuZG9uZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCd1bmV4cGVjdGVkIGVuZCBvZiBkYXRhJyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucG9zaXRpb24gPT09IHRoaXMuYnVmZmVyLmxlbmd0aCkge1xuICAgICAgdGhpcy5idWZmZXIgPSByZXN1bHQudmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYnVmZmVyID0gQnVmZmVyLmNvbmNhdChbdGhpcy5idWZmZXIuc2xpY2UodGhpcy5wb3NpdGlvbiksIHJlc3VsdC52YWx1ZV0pO1xuICAgIH1cblxuICAgIHRoaXMucG9zaXRpb24gPSAwO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFBhcnNlcjtcbm1vZHVsZS5leHBvcnRzID0gUGFyc2VyO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFHQSxJQUFBQSxNQUFBLEdBQUFDLE9BQUE7QUFFQSxJQUFBQyx1QkFBQSxHQUFBQyxzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQUcsZ0JBQUEsR0FBQUgsT0FBQTtBQUNBLElBQUFJLHFCQUFBLEdBQUFGLHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBSyxxQkFBQSxHQUFBTCxPQUFBO0FBQ0EsSUFBQU0sa0JBQUEsR0FBQUosc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFPLG9CQUFBLEdBQUFMLHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJ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