tedious 16.5.0 → 16.6.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/connection.js +4 -4
- package/lib/connection.js.map +1 -1
- package/lib/data-types/date.js +2 -2
- package/lib/data-types/date.js.map +1 -1
- package/lib/message-io.js +2 -2
- package/lib/message-io.js.map +1 -1
- package/lib/metadata-parser.js +361 -241
- package/lib/metadata-parser.js.map +1 -1
- package/lib/request.js +3 -3
- package/lib/request.js.map +1 -1
- package/lib/token/colmetadata-token-parser.js +103 -74
- package/lib/token/colmetadata-token-parser.js.map +1 -1
- package/lib/token/done-token-parser.js +52 -40
- package/lib/token/done-token-parser.js.map +1 -1
- package/lib/token/env-change-token-parser.js +110 -81
- package/lib/token/env-change-token-parser.js.map +1 -1
- package/lib/token/feature-ext-ack-parser.js +30 -22
- package/lib/token/feature-ext-ack-parser.js.map +1 -1
- package/lib/token/fedauth-info-parser.js +47 -30
- package/lib/token/fedauth-info-parser.js.map +1 -1
- package/lib/token/helpers.js +205 -0
- package/lib/token/helpers.js.map +1 -0
- package/lib/token/infoerror-token-parser.js +69 -36
- package/lib/token/infoerror-token-parser.js.map +1 -1
- package/lib/token/loginack-token-parser.js +59 -31
- package/lib/token/loginack-token-parser.js.map +1 -1
- package/lib/token/nbcrow-token-parser.js +60 -23
- package/lib/token/nbcrow-token-parser.js.map +1 -1
- package/lib/token/order-token-parser.js +22 -20
- package/lib/token/order-token-parser.js.map +1 -1
- package/lib/token/returnstatus-token-parser.js +9 -5
- package/lib/token/returnstatus-token-parser.js.map +1 -1
- package/lib/token/returnvalue-token-parser.js +79 -22
- package/lib/token/returnvalue-token-parser.js.map +1 -1
- package/lib/token/row-token-parser.js +50 -20
- package/lib/token/row-token-parser.js.map +1 -1
- package/lib/token/sspi-token-parser.js +14 -5
- package/lib/token/sspi-token-parser.js.map +1 -1
- package/lib/token/stream-parser.js +292 -324
- package/lib/token/stream-parser.js.map +1 -1
- package/lib/token/token.js +1 -1
- package/lib/token/token.js.map +1 -1
- package/lib/value-parser.js +655 -438
- package/lib/value-parser.js.map +1 -1
- package/package.json +2 -2
|
@@ -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
|
-
|
|
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
|
|
35
|
+
await parser.waitForChunk();
|
|
68
36
|
} catch (err) {
|
|
69
|
-
if (
|
|
37
|
+
if (parser.position === parser.buffer.length) {
|
|
70
38
|
return;
|
|
71
39
|
}
|
|
72
40
|
throw err;
|
|
73
41
|
}
|
|
74
|
-
|
|
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
|
-
|
|
92
|
-
|
|
93
|
-
parser.colMetadata = token.columns;
|
|
45
|
+
const token = parser.readToken(type);
|
|
46
|
+
if (token !== undefined) {
|
|
94
47
|
yield token;
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
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(
|
|
318
|
+
constructor(iterable, debug, options) {
|
|
116
319
|
this.debug = debug;
|
|
117
320
|
this.colMetadata = [];
|
|
118
321
|
this.options = options;
|
|
119
|
-
this.
|
|
120
|
-
this.
|
|
121
|
-
this.
|
|
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
|
-
|
|
137
|
-
|
|
138
|
-
|
|
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.
|
|
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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
|