tedious 16.1.0 → 16.3.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.
- package/lib/all-headers.js +1 -2
- package/lib/all-headers.js.map +1 -0
- package/lib/always-encrypted/aead-aes-256-cbc-hmac-algorithm.js +9 -31
- package/lib/always-encrypted/aead-aes-256-cbc-hmac-algorithm.js.map +1 -0
- package/lib/always-encrypted/aead-aes-256-cbc-hmac-encryption-key.js +9 -24
- package/lib/always-encrypted/aead-aes-256-cbc-hmac-encryption-key.js.map +1 -0
- package/lib/always-encrypted/cek-entry.js +8 -12
- package/lib/always-encrypted/cek-entry.js.map +1 -0
- package/lib/always-encrypted/get-parameter-encryption-metadata.js +2 -24
- package/lib/always-encrypted/get-parameter-encryption-metadata.js.map +1 -0
- package/lib/always-encrypted/key-crypto.js +5 -30
- package/lib/always-encrypted/key-crypto.js.map +1 -0
- package/lib/always-encrypted/keystore-provider-azure-key-vault.js +11 -72
- package/lib/always-encrypted/keystore-provider-azure-key-vault.js.map +1 -0
- package/lib/always-encrypted/symmetric-key-cache.js +2 -13
- package/lib/always-encrypted/symmetric-key-cache.js.map +1 -0
- package/lib/always-encrypted/symmetric-key.js +3 -8
- package/lib/always-encrypted/symmetric-key.js.map +1 -0
- package/lib/always-encrypted/types.js +19 -27
- package/lib/always-encrypted/types.js.map +1 -0
- package/lib/always-encrypted/utils.js +2 -6
- package/lib/always-encrypted/utils.js.map +1 -0
- package/lib/bulk-load-payload.js +7 -15
- package/lib/bulk-load-payload.js.map +1 -0
- package/lib/bulk-load.js +58 -131
- package/lib/bulk-load.js.map +1 -0
- package/lib/collation.js +7 -15
- package/lib/collation.js.map +1 -0
- package/lib/connection.js +297 -536
- package/lib/connection.js.map +1 -0
- package/lib/connector.js +6 -37
- package/lib/connector.js.map +1 -0
- package/lib/data-type.js +2 -43
- package/lib/data-type.js.map +1 -0
- package/lib/data-types/bigint.js +1 -15
- package/lib/data-types/bigint.js.map +1 -0
- package/lib/data-types/binary.js +1 -12
- package/lib/data-types/binary.js.map +1 -0
- package/lib/data-types/bit.js +1 -11
- package/lib/data-types/bit.js.map +1 -0
- package/lib/data-types/bitn.js +1 -7
- package/lib/data-types/bitn.js.map +1 -0
- package/lib/data-types/char.js +1 -20
- package/lib/data-types/char.js.map +1 -0
- package/lib/data-types/date.js +1 -15
- package/lib/data-types/date.js.map +1 -0
- package/lib/data-types/datetime.js +3 -20
- package/lib/data-types/datetime.js.map +1 -0
- package/lib/data-types/datetime2.js +1 -26
- package/lib/data-types/datetime2.js.map +1 -0
- package/lib/data-types/datetimen.js +1 -7
- package/lib/data-types/datetimen.js.map +1 -0
- package/lib/data-types/datetimeoffset.js +1 -23
- package/lib/data-types/datetimeoffset.js.map +1 -0
- package/lib/data-types/decimal.js +1 -18
- package/lib/data-types/decimal.js.map +1 -0
- package/lib/data-types/decimaln.js +1 -7
- package/lib/data-types/decimaln.js.map +1 -0
- package/lib/data-types/float.js +1 -13
- package/lib/data-types/float.js.map +1 -0
- package/lib/data-types/floatn.js +1 -7
- package/lib/data-types/floatn.js.map +1 -0
- package/lib/data-types/image.js +1 -10
- package/lib/data-types/image.js.map +1 -0
- package/lib/data-types/int.js +1 -14
- package/lib/data-types/int.js.map +1 -0
- package/lib/data-types/intn.js +1 -7
- package/lib/data-types/intn.js.map +1 -0
- package/lib/data-types/money.js +1 -12
- package/lib/data-types/money.js.map +1 -0
- package/lib/data-types/moneyn.js +1 -7
- package/lib/data-types/moneyn.js.map +1 -0
- package/lib/data-types/nchar.js +1 -14
- package/lib/data-types/nchar.js.map +1 -0
- package/lib/data-types/ntext.js +1 -10
- package/lib/data-types/ntext.js.map +1 -0
- package/lib/data-types/null.js +1 -7
- package/lib/data-types/null.js.map +1 -0
- package/lib/data-types/numeric.js +1 -18
- package/lib/data-types/numeric.js.map +1 -0
- package/lib/data-types/numericn.js +1 -7
- package/lib/data-types/numericn.js.map +1 -0
- package/lib/data-types/nvarchar.js +1 -22
- package/lib/data-types/nvarchar.js.map +1 -0
- package/lib/data-types/real.js +1 -13
- package/lib/data-types/real.js.map +1 -0
- package/lib/data-types/smalldatetime.js +1 -14
- package/lib/data-types/smalldatetime.js.map +1 -0
- package/lib/data-types/smallint.js +1 -14
- package/lib/data-types/smallint.js.map +1 -0
- package/lib/data-types/smallmoney.js +1 -13
- package/lib/data-types/smallmoney.js.map +1 -0
- package/lib/data-types/sql-variant.js +1 -6
- package/lib/data-types/sql-variant.js.map +1 -0
- package/lib/data-types/text.js +1 -18
- package/lib/data-types/text.js.map +1 -0
- package/lib/data-types/time.js +1 -22
- package/lib/data-types/time.js.map +1 -0
- package/lib/data-types/tinyint.js +1 -14
- package/lib/data-types/tinyint.js.map +1 -0
- package/lib/data-types/tvp.js +11 -27
- package/lib/data-types/tvp.js.map +1 -0
- package/lib/data-types/udt.js +1 -7
- package/lib/data-types/udt.js.map +1 -0
- package/lib/data-types/uniqueidentifier.js +1 -11
- package/lib/data-types/uniqueidentifier.js.map +1 -0
- package/lib/data-types/varbinary.js +1 -22
- package/lib/data-types/varbinary.js.map +1 -0
- package/lib/data-types/varchar.js +1 -23
- package/lib/data-types/varchar.js.map +1 -0
- package/lib/data-types/xml.js +1 -7
- package/lib/data-types/xml.js.map +1 -0
- package/lib/debug.js +4 -16
- package/lib/debug.js.map +1 -0
- package/lib/errors/abort-error.js +2 -5
- package/lib/errors/abort-error.js.map +1 -0
- package/lib/errors/timeout-error.js +2 -5
- package/lib/errors/timeout-error.js.map +1 -0
- package/lib/errors.js +10 -16
- package/lib/errors.js.map +1 -0
- package/lib/guid-parser.js +1 -7
- package/lib/guid-parser.js.map +1 -0
- package/lib/incoming-message-stream.js +9 -29
- package/lib/incoming-message-stream.js.map +1 -0
- package/lib/instance-lookup.js +3 -34
- package/lib/instance-lookup.js.map +1 -0
- package/lib/library.js +1 -1
- package/lib/library.js.map +1 -0
- package/lib/login7-payload.js +99 -100
- package/lib/login7-payload.js.map +1 -0
- package/lib/message-io.js +17 -45
- package/lib/message-io.js.map +1 -0
- package/lib/message.js +4 -8
- package/lib/message.js.map +1 -0
- package/lib/metadata-parser.js +1 -22
- package/lib/metadata-parser.js.map +1 -0
- package/lib/ntlm-payload.js +2 -22
- package/lib/ntlm-payload.js.map +1 -0
- package/lib/ntlm.js +1 -4
- package/lib/ntlm.js.map +1 -0
- package/lib/outgoing-message-stream.js +12 -21
- package/lib/outgoing-message-stream.js.map +1 -0
- package/lib/packet.js +2 -47
- package/lib/packet.js.map +1 -0
- package/lib/prelogin-payload.js +11 -54
- package/lib/prelogin-payload.js.map +1 -0
- package/lib/request.js +88 -66
- package/lib/request.js.map +1 -0
- package/lib/rpcrequest-payload.js +13 -34
- package/lib/rpcrequest-payload.js.map +1 -0
- package/lib/sender.js +1 -24
- package/lib/sender.js.map +1 -0
- package/lib/special-stored-procedure.js +1 -1
- package/lib/special-stored-procedure.js.map +1 -0
- package/lib/sqlbatch-payload.js +5 -18
- package/lib/sqlbatch-payload.js.map +1 -0
- package/lib/tds-versions.js +3 -3
- package/lib/tds-versions.js.map +1 -0
- package/lib/tedious.js +1 -12
- package/lib/tedious.js.map +1 -0
- package/lib/token/colmetadata-token-parser.js +1 -17
- package/lib/token/colmetadata-token-parser.js.map +1 -0
- package/lib/token/done-token-parser.js +2 -8
- package/lib/token/done-token-parser.js.map +1 -0
- package/lib/token/env-change-token-parser.js +7 -28
- package/lib/token/env-change-token-parser.js.map +1 -0
- package/lib/token/feature-ext-ack-parser.js +1 -10
- package/lib/token/feature-ext-ack-parser.js.map +1 -0
- package/lib/token/fedauth-info-parser.js +2 -10
- package/lib/token/fedauth-info-parser.js.map +1 -0
- package/lib/token/handler.js +39 -149
- package/lib/token/handler.js.map +1 -0
- package/lib/token/infoerror-token-parser.js +1 -5
- package/lib/token/infoerror-token-parser.js.map +1 -0
- package/lib/token/loginack-token-parser.js +1 -6
- package/lib/token/loginack-token-parser.js.map +1 -0
- package/lib/token/nbcrow-token-parser.js +2 -15
- package/lib/token/nbcrow-token-parser.js.map +1 -0
- package/lib/token/order-token-parser.js +2 -7
- package/lib/token/order-token-parser.js.map +1 -0
- package/lib/token/returnstatus-token-parser.js +2 -4
- package/lib/token/returnstatus-token-parser.js.map +1 -0
- package/lib/token/returnvalue-token-parser.js +4 -9
- package/lib/token/returnvalue-token-parser.js.map +1 -0
- package/lib/token/row-token-parser.js +2 -11
- package/lib/token/row-token-parser.js.map +1 -0
- package/lib/token/sspi-token-parser.js +1 -5
- package/lib/token/sspi-token-parser.js.map +1 -0
- package/lib/token/stream-parser.js +24 -86
- package/lib/token/stream-parser.js.map +1 -0
- package/lib/token/token-stream-parser.js +4 -13
- package/lib/token/token-stream-parser.js.map +1 -0
- package/lib/token/token.js +88 -168
- package/lib/token/token.js.map +1 -0
- package/lib/tracking-buffer/writable-tracking-buffer.js +20 -60
- package/lib/tracking-buffer/writable-tracking-buffer.js.map +1 -0
- package/lib/transaction.js +9 -33
- package/lib/transaction.js.map +1 -0
- package/lib/transient-error-lookup.js +1 -4
- package/lib/transient-error-lookup.js.map +1 -0
- package/lib/utils/with-timeout.js +1 -9
- package/lib/utils/with-timeout.js.map +1 -0
- package/lib/value-parser.js +1 -143
- package/lib/value-parser.js.map +1 -0
- package/package.json +27 -71
|
@@ -4,37 +4,21 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.default = void 0;
|
|
7
|
-
|
|
8
7
|
var _token = require("./token");
|
|
9
|
-
|
|
10
8
|
var _colmetadataTokenParser = _interopRequireDefault(require("./colmetadata-token-parser"));
|
|
11
|
-
|
|
12
9
|
var _doneTokenParser = require("./done-token-parser");
|
|
13
|
-
|
|
14
10
|
var _envChangeTokenParser = _interopRequireDefault(require("./env-change-token-parser"));
|
|
15
|
-
|
|
16
11
|
var _infoerrorTokenParser = require("./infoerror-token-parser");
|
|
17
|
-
|
|
18
12
|
var _fedauthInfoParser = _interopRequireDefault(require("./fedauth-info-parser"));
|
|
19
|
-
|
|
20
13
|
var _featureExtAckParser = _interopRequireDefault(require("./feature-ext-ack-parser"));
|
|
21
|
-
|
|
22
14
|
var _loginackTokenParser = _interopRequireDefault(require("./loginack-token-parser"));
|
|
23
|
-
|
|
24
15
|
var _orderTokenParser = _interopRequireDefault(require("./order-token-parser"));
|
|
25
|
-
|
|
26
16
|
var _returnstatusTokenParser = _interopRequireDefault(require("./returnstatus-token-parser"));
|
|
27
|
-
|
|
28
17
|
var _returnvalueTokenParser = _interopRequireDefault(require("./returnvalue-token-parser"));
|
|
29
|
-
|
|
30
18
|
var _rowTokenParser = _interopRequireDefault(require("./row-token-parser"));
|
|
31
|
-
|
|
32
19
|
var _nbcrowTokenParser = _interopRequireDefault(require("./nbcrow-token-parser"));
|
|
33
|
-
|
|
34
20
|
var _sspiTokenParser = _interopRequireDefault(require("./sspi-token-parser"));
|
|
35
|
-
|
|
36
21
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
37
|
-
|
|
38
22
|
const tokenParsers = {
|
|
39
23
|
[_token.TYPE.DONE]: _doneTokenParser.doneParser,
|
|
40
24
|
[_token.TYPE.DONEINPROC]: _doneTokenParser.doneInProcParser,
|
|
@@ -50,47 +34,43 @@ const tokenParsers = {
|
|
|
50
34
|
[_token.TYPE.RETURNVALUE]: _returnvalueTokenParser.default,
|
|
51
35
|
[_token.TYPE.SSPI]: _sspiTokenParser.default
|
|
52
36
|
};
|
|
53
|
-
|
|
54
37
|
class StreamBuffer {
|
|
38
|
+
iterator;
|
|
39
|
+
buffer;
|
|
40
|
+
position;
|
|
55
41
|
constructor(iterable) {
|
|
56
|
-
this.iterator = void 0;
|
|
57
|
-
this.buffer = void 0;
|
|
58
|
-
this.position = void 0;
|
|
59
42
|
this.iterator = (iterable[Symbol.asyncIterator] || iterable[Symbol.iterator]).call(iterable);
|
|
60
43
|
this.buffer = Buffer.alloc(0);
|
|
61
44
|
this.position = 0;
|
|
62
45
|
}
|
|
63
|
-
|
|
64
46
|
async waitForChunk() {
|
|
65
47
|
const result = await this.iterator.next();
|
|
66
|
-
|
|
67
48
|
if (result.done) {
|
|
68
49
|
throw new Error('unexpected end of data');
|
|
69
50
|
}
|
|
70
|
-
|
|
71
51
|
if (this.position === this.buffer.length) {
|
|
72
52
|
this.buffer = result.value;
|
|
73
53
|
} else {
|
|
74
54
|
this.buffer = Buffer.concat([this.buffer.slice(this.position), result.value]);
|
|
75
55
|
}
|
|
76
|
-
|
|
77
56
|
this.position = 0;
|
|
78
57
|
}
|
|
79
|
-
|
|
80
58
|
}
|
|
81
|
-
|
|
82
59
|
class Parser {
|
|
60
|
+
debug;
|
|
61
|
+
colMetadata;
|
|
62
|
+
options;
|
|
63
|
+
suspended;
|
|
64
|
+
next;
|
|
65
|
+
streamBuffer;
|
|
83
66
|
static async *parseTokens(iterable, debug, options, colMetadata = []) {
|
|
84
67
|
let token;
|
|
85
|
-
|
|
86
68
|
const onDoneParsing = t => {
|
|
87
69
|
token = t;
|
|
88
70
|
};
|
|
89
|
-
|
|
90
71
|
const streamBuffer = new StreamBuffer(iterable);
|
|
91
72
|
const parser = new Parser(streamBuffer, debug, options);
|
|
92
73
|
parser.colMetadata = colMetadata;
|
|
93
|
-
|
|
94
74
|
while (true) {
|
|
95
75
|
try {
|
|
96
76
|
await streamBuffer.waitForChunk();
|
|
@@ -98,29 +78,25 @@ class Parser {
|
|
|
98
78
|
if (streamBuffer.position === streamBuffer.buffer.length) {
|
|
99
79
|
return;
|
|
100
80
|
}
|
|
101
|
-
|
|
102
81
|
throw err;
|
|
103
82
|
}
|
|
104
|
-
|
|
105
83
|
if (parser.suspended) {
|
|
106
84
|
// Unsuspend and continue from where ever we left off.
|
|
107
85
|
parser.suspended = false;
|
|
108
86
|
const next = parser.next;
|
|
109
|
-
next();
|
|
87
|
+
next();
|
|
110
88
|
|
|
89
|
+
// Check if a new token was parsed after unsuspension.
|
|
111
90
|
if (!parser.suspended && token) {
|
|
112
91
|
if (token instanceof _token.ColMetadataToken) {
|
|
113
92
|
parser.colMetadata = token.columns;
|
|
114
93
|
}
|
|
115
|
-
|
|
116
94
|
yield token;
|
|
117
95
|
}
|
|
118
96
|
}
|
|
119
|
-
|
|
120
97
|
while (!parser.suspended && parser.position + 1 <= parser.buffer.length) {
|
|
121
98
|
const type = parser.buffer.readUInt8(parser.position);
|
|
122
99
|
parser.position += 1;
|
|
123
|
-
|
|
124
100
|
if (type === _token.TYPE.COLMETADATA) {
|
|
125
101
|
const token = await (0, _colmetadataTokenParser.default)(parser);
|
|
126
102
|
parser.colMetadata = token.columns;
|
|
@@ -130,13 +106,13 @@ class Parser {
|
|
|
130
106
|
} else if (type === _token.TYPE.NBCROW) {
|
|
131
107
|
yield (0, _nbcrowTokenParser.default)(parser);
|
|
132
108
|
} else if (tokenParsers[type]) {
|
|
133
|
-
tokenParsers[type](parser, parser.options, onDoneParsing);
|
|
109
|
+
tokenParsers[type](parser, parser.options, onDoneParsing);
|
|
134
110
|
|
|
111
|
+
// Check if a new token was parsed after unsuspension.
|
|
135
112
|
if (!parser.suspended && token) {
|
|
136
113
|
if (token instanceof _token.ColMetadataToken) {
|
|
137
114
|
parser.colMetadata = token.columns;
|
|
138
115
|
}
|
|
139
|
-
|
|
140
116
|
yield token;
|
|
141
117
|
}
|
|
142
118
|
} else {
|
|
@@ -145,14 +121,7 @@ class Parser {
|
|
|
145
121
|
}
|
|
146
122
|
}
|
|
147
123
|
}
|
|
148
|
-
|
|
149
124
|
constructor(streamBuffer, debug, options) {
|
|
150
|
-
this.debug = void 0;
|
|
151
|
-
this.colMetadata = void 0;
|
|
152
|
-
this.options = void 0;
|
|
153
|
-
this.suspended = void 0;
|
|
154
|
-
this.next = void 0;
|
|
155
|
-
this.streamBuffer = void 0;
|
|
156
125
|
this.debug = debug;
|
|
157
126
|
this.colMetadata = [];
|
|
158
127
|
this.options = options;
|
|
@@ -160,24 +129,19 @@ class Parser {
|
|
|
160
129
|
this.suspended = false;
|
|
161
130
|
this.next = undefined;
|
|
162
131
|
}
|
|
163
|
-
|
|
164
132
|
get buffer() {
|
|
165
133
|
return this.streamBuffer.buffer;
|
|
166
134
|
}
|
|
167
|
-
|
|
168
135
|
get position() {
|
|
169
136
|
return this.streamBuffer.position;
|
|
170
137
|
}
|
|
171
|
-
|
|
172
138
|
set position(value) {
|
|
173
139
|
this.streamBuffer.position = value;
|
|
174
140
|
}
|
|
175
|
-
|
|
176
141
|
suspend(next) {
|
|
177
142
|
this.suspended = true;
|
|
178
143
|
this.next = next;
|
|
179
144
|
}
|
|
180
|
-
|
|
181
145
|
awaitData(length, callback) {
|
|
182
146
|
if (this.position + length <= this.buffer.length) {
|
|
183
147
|
callback();
|
|
@@ -187,7 +151,6 @@ class Parser {
|
|
|
187
151
|
});
|
|
188
152
|
}
|
|
189
153
|
}
|
|
190
|
-
|
|
191
154
|
readInt8(callback) {
|
|
192
155
|
this.awaitData(1, () => {
|
|
193
156
|
const data = this.buffer.readInt8(this.position);
|
|
@@ -195,7 +158,6 @@ class Parser {
|
|
|
195
158
|
callback(data);
|
|
196
159
|
});
|
|
197
160
|
}
|
|
198
|
-
|
|
199
161
|
readUInt8(callback) {
|
|
200
162
|
this.awaitData(1, () => {
|
|
201
163
|
const data = this.buffer.readUInt8(this.position);
|
|
@@ -203,7 +165,6 @@ class Parser {
|
|
|
203
165
|
callback(data);
|
|
204
166
|
});
|
|
205
167
|
}
|
|
206
|
-
|
|
207
168
|
readInt16LE(callback) {
|
|
208
169
|
this.awaitData(2, () => {
|
|
209
170
|
const data = this.buffer.readInt16LE(this.position);
|
|
@@ -211,7 +172,6 @@ class Parser {
|
|
|
211
172
|
callback(data);
|
|
212
173
|
});
|
|
213
174
|
}
|
|
214
|
-
|
|
215
175
|
readInt16BE(callback) {
|
|
216
176
|
this.awaitData(2, () => {
|
|
217
177
|
const data = this.buffer.readInt16BE(this.position);
|
|
@@ -219,7 +179,6 @@ class Parser {
|
|
|
219
179
|
callback(data);
|
|
220
180
|
});
|
|
221
181
|
}
|
|
222
|
-
|
|
223
182
|
readUInt16LE(callback) {
|
|
224
183
|
this.awaitData(2, () => {
|
|
225
184
|
const data = this.buffer.readUInt16LE(this.position);
|
|
@@ -227,7 +186,6 @@ class Parser {
|
|
|
227
186
|
callback(data);
|
|
228
187
|
});
|
|
229
188
|
}
|
|
230
|
-
|
|
231
189
|
readUInt16BE(callback) {
|
|
232
190
|
this.awaitData(2, () => {
|
|
233
191
|
const data = this.buffer.readUInt16BE(this.position);
|
|
@@ -235,7 +193,6 @@ class Parser {
|
|
|
235
193
|
callback(data);
|
|
236
194
|
});
|
|
237
195
|
}
|
|
238
|
-
|
|
239
196
|
readInt32LE(callback) {
|
|
240
197
|
this.awaitData(4, () => {
|
|
241
198
|
const data = this.buffer.readInt32LE(this.position);
|
|
@@ -243,7 +200,6 @@ class Parser {
|
|
|
243
200
|
callback(data);
|
|
244
201
|
});
|
|
245
202
|
}
|
|
246
|
-
|
|
247
203
|
readInt32BE(callback) {
|
|
248
204
|
this.awaitData(4, () => {
|
|
249
205
|
const data = this.buffer.readInt32BE(this.position);
|
|
@@ -251,7 +207,6 @@ class Parser {
|
|
|
251
207
|
callback(data);
|
|
252
208
|
});
|
|
253
209
|
}
|
|
254
|
-
|
|
255
210
|
readUInt32LE(callback) {
|
|
256
211
|
this.awaitData(4, () => {
|
|
257
212
|
const data = this.buffer.readUInt32LE(this.position);
|
|
@@ -259,7 +214,6 @@ class Parser {
|
|
|
259
214
|
callback(data);
|
|
260
215
|
});
|
|
261
216
|
}
|
|
262
|
-
|
|
263
217
|
readUInt32BE(callback) {
|
|
264
218
|
this.awaitData(4, () => {
|
|
265
219
|
const data = this.buffer.readUInt32BE(this.position);
|
|
@@ -267,7 +221,6 @@ class Parser {
|
|
|
267
221
|
callback(data);
|
|
268
222
|
});
|
|
269
223
|
}
|
|
270
|
-
|
|
271
224
|
readBigInt64LE(callback) {
|
|
272
225
|
this.awaitData(8, () => {
|
|
273
226
|
const data = this.buffer.readBigInt64LE(this.position);
|
|
@@ -275,7 +228,6 @@ class Parser {
|
|
|
275
228
|
callback(data);
|
|
276
229
|
});
|
|
277
230
|
}
|
|
278
|
-
|
|
279
231
|
readInt64LE(callback) {
|
|
280
232
|
this.awaitData(8, () => {
|
|
281
233
|
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);
|
|
@@ -283,7 +235,6 @@ class Parser {
|
|
|
283
235
|
callback(data);
|
|
284
236
|
});
|
|
285
237
|
}
|
|
286
|
-
|
|
287
238
|
readInt64BE(callback) {
|
|
288
239
|
this.awaitData(8, () => {
|
|
289
240
|
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);
|
|
@@ -291,7 +242,6 @@ class Parser {
|
|
|
291
242
|
callback(data);
|
|
292
243
|
});
|
|
293
244
|
}
|
|
294
|
-
|
|
295
245
|
readBigUInt64LE(callback) {
|
|
296
246
|
this.awaitData(8, () => {
|
|
297
247
|
const data = this.buffer.readBigUInt64LE(this.position);
|
|
@@ -299,7 +249,6 @@ class Parser {
|
|
|
299
249
|
callback(data);
|
|
300
250
|
});
|
|
301
251
|
}
|
|
302
|
-
|
|
303
252
|
readUInt64LE(callback) {
|
|
304
253
|
this.awaitData(8, () => {
|
|
305
254
|
const data = Math.pow(2, 32) * this.buffer.readUInt32LE(this.position + 4) + this.buffer.readUInt32LE(this.position);
|
|
@@ -307,7 +256,6 @@ class Parser {
|
|
|
307
256
|
callback(data);
|
|
308
257
|
});
|
|
309
258
|
}
|
|
310
|
-
|
|
311
259
|
readUInt64BE(callback) {
|
|
312
260
|
this.awaitData(8, () => {
|
|
313
261
|
const data = Math.pow(2, 32) * this.buffer.readUInt32BE(this.position) + this.buffer.readUInt32BE(this.position + 4);
|
|
@@ -315,7 +263,6 @@ class Parser {
|
|
|
315
263
|
callback(data);
|
|
316
264
|
});
|
|
317
265
|
}
|
|
318
|
-
|
|
319
266
|
readFloatLE(callback) {
|
|
320
267
|
this.awaitData(4, () => {
|
|
321
268
|
const data = this.buffer.readFloatLE(this.position);
|
|
@@ -323,7 +270,6 @@ class Parser {
|
|
|
323
270
|
callback(data);
|
|
324
271
|
});
|
|
325
272
|
}
|
|
326
|
-
|
|
327
273
|
readFloatBE(callback) {
|
|
328
274
|
this.awaitData(4, () => {
|
|
329
275
|
const data = this.buffer.readFloatBE(this.position);
|
|
@@ -331,7 +277,6 @@ class Parser {
|
|
|
331
277
|
callback(data);
|
|
332
278
|
});
|
|
333
279
|
}
|
|
334
|
-
|
|
335
280
|
readDoubleLE(callback) {
|
|
336
281
|
this.awaitData(8, () => {
|
|
337
282
|
const data = this.buffer.readDoubleLE(this.position);
|
|
@@ -339,7 +284,6 @@ class Parser {
|
|
|
339
284
|
callback(data);
|
|
340
285
|
});
|
|
341
286
|
}
|
|
342
|
-
|
|
343
287
|
readDoubleBE(callback) {
|
|
344
288
|
this.awaitData(8, () => {
|
|
345
289
|
const data = this.buffer.readDoubleBE(this.position);
|
|
@@ -347,7 +291,6 @@ class Parser {
|
|
|
347
291
|
callback(data);
|
|
348
292
|
});
|
|
349
293
|
}
|
|
350
|
-
|
|
351
294
|
readUInt24LE(callback) {
|
|
352
295
|
this.awaitData(3, () => {
|
|
353
296
|
const low = this.buffer.readUInt16LE(this.position);
|
|
@@ -356,7 +299,6 @@ class Parser {
|
|
|
356
299
|
callback(low | high << 16);
|
|
357
300
|
});
|
|
358
301
|
}
|
|
359
|
-
|
|
360
302
|
readUInt40LE(callback) {
|
|
361
303
|
this.awaitData(5, () => {
|
|
362
304
|
const low = this.buffer.readUInt32LE(this.position);
|
|
@@ -365,7 +307,6 @@ class Parser {
|
|
|
365
307
|
callback(0x100000000 * high + low);
|
|
366
308
|
});
|
|
367
309
|
}
|
|
368
|
-
|
|
369
310
|
readUNumeric64LE(callback) {
|
|
370
311
|
this.awaitData(8, () => {
|
|
371
312
|
const low = this.buffer.readUInt32LE(this.position);
|
|
@@ -374,7 +315,6 @@ class Parser {
|
|
|
374
315
|
callback(0x100000000 * high + low);
|
|
375
316
|
});
|
|
376
317
|
}
|
|
377
|
-
|
|
378
318
|
readUNumeric96LE(callback) {
|
|
379
319
|
this.awaitData(12, () => {
|
|
380
320
|
const dword1 = this.buffer.readUInt32LE(this.position);
|
|
@@ -384,7 +324,6 @@ class Parser {
|
|
|
384
324
|
callback(dword1 + 0x100000000 * dword2 + 0x100000000 * 0x100000000 * dword3);
|
|
385
325
|
});
|
|
386
326
|
}
|
|
387
|
-
|
|
388
327
|
readUNumeric128LE(callback) {
|
|
389
328
|
this.awaitData(16, () => {
|
|
390
329
|
const dword1 = this.buffer.readUInt32LE(this.position);
|
|
@@ -394,8 +333,9 @@ class Parser {
|
|
|
394
333
|
this.position += 16;
|
|
395
334
|
callback(dword1 + 0x100000000 * dword2 + 0x100000000 * 0x100000000 * dword3 + 0x100000000 * 0x100000000 * 0x100000000 * dword4);
|
|
396
335
|
});
|
|
397
|
-
}
|
|
336
|
+
}
|
|
398
337
|
|
|
338
|
+
// Variable length data
|
|
399
339
|
|
|
400
340
|
readBuffer(length, callback) {
|
|
401
341
|
this.awaitData(length, () => {
|
|
@@ -403,43 +343,41 @@ class Parser {
|
|
|
403
343
|
this.position += length;
|
|
404
344
|
callback(data);
|
|
405
345
|
});
|
|
406
|
-
}
|
|
407
|
-
|
|
346
|
+
}
|
|
408
347
|
|
|
348
|
+
// Read a Unicode String (BVARCHAR)
|
|
409
349
|
readBVarChar(callback) {
|
|
410
350
|
this.readUInt8(length => {
|
|
411
351
|
this.readBuffer(length * 2, data => {
|
|
412
352
|
callback(data.toString('ucs2'));
|
|
413
353
|
});
|
|
414
354
|
});
|
|
415
|
-
}
|
|
416
|
-
|
|
355
|
+
}
|
|
417
356
|
|
|
357
|
+
// Read a Unicode String (USVARCHAR)
|
|
418
358
|
readUsVarChar(callback) {
|
|
419
359
|
this.readUInt16LE(length => {
|
|
420
360
|
this.readBuffer(length * 2, data => {
|
|
421
361
|
callback(data.toString('ucs2'));
|
|
422
362
|
});
|
|
423
363
|
});
|
|
424
|
-
}
|
|
425
|
-
|
|
364
|
+
}
|
|
426
365
|
|
|
366
|
+
// Read binary data (BVARBYTE)
|
|
427
367
|
readBVarByte(callback) {
|
|
428
368
|
this.readUInt8(length => {
|
|
429
369
|
this.readBuffer(length, callback);
|
|
430
370
|
});
|
|
431
|
-
}
|
|
432
|
-
|
|
371
|
+
}
|
|
433
372
|
|
|
373
|
+
// Read binary data (USVARBYTE)
|
|
434
374
|
readUsVarByte(callback) {
|
|
435
375
|
this.readUInt16LE(length => {
|
|
436
376
|
this.readBuffer(length, callback);
|
|
437
377
|
});
|
|
438
378
|
}
|
|
439
|
-
|
|
440
379
|
}
|
|
441
|
-
|
|
442
380
|
var _default = Parser;
|
|
443
381
|
exports.default = _default;
|
|
444
382
|
module.exports = Parser;
|
|
445
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ0b2tlblBhcnNlcnMiLCJUWVBFIiwiRE9ORSIsImRvbmVQYXJzZXIiLCJET05FSU5QUk9DIiwiZG9uZUluUHJvY1BhcnNlciIsIkRPTkVQUk9DIiwiZG9uZVByb2NQYXJzZXIiLCJFTlZDSEFOR0UiLCJlbnZDaGFuZ2VQYXJzZXIiLCJFUlJPUiIsImVycm9yUGFyc2VyIiwiRkVEQVVUSElORk8iLCJmZWRBdXRoSW5mb1BhcnNlciIsIkZFQVRVUkVFWFRBQ0siLCJmZWF0dXJlRXh0QWNrUGFyc2VyIiwiSU5GTyIsImluZm9QYXJzZXIiLCJMT0dJTkFDSyIsImxvZ2luQWNrUGFyc2VyIiwiT1JERVIiLCJvcmRlclBhcnNlciIsIlJFVFVSTlNUQVRVUyIsInJldHVyblN0YXR1c1BhcnNlciIsIlJFVFVSTlZBTFVFIiwicmV0dXJuVmFsdWVQYXJzZXIiLCJTU1BJIiwic3NwaVBhcnNlciIsIlN0cmVhbUJ1ZmZlciIsImNvbnN0cnVjdG9yIiwiaXRlcmFibGUiLCJpdGVyYXRvciIsImJ1ZmZlciIsInBvc2l0aW9uIiwiU3ltYm9sIiwiYXN5bmNJdGVyYXRvciIsImNhbGwiLCJCdWZmZXIiLCJhbGxvYyIsIndhaXRGb3JDaHVuayIsInJlc3VsdCIsIm5leHQiLCJkb25lIiwiRXJyb3IiLCJsZW5ndGgiLCJ2YWx1ZSIsImNvbmNhdCIsInNsaWNlIiwiUGFyc2VyIiwicGFyc2VUb2tlbnMiLCJkZWJ1ZyIsIm9wdGlvbnMiLCJjb2xNZXRhZGF0YSIsInRva2VuIiwib25Eb25lUGFyc2luZyIsInQiLCJzdHJlYW1CdWZmZXIiLCJwYXJzZXIiLCJlcnIiLCJzdXNwZW5kZWQiLCJDb2xNZXRhZGF0YVRva2VuIiwiY29sdW1ucyIsInR5cGUiLCJyZWFkVUludDgiLCJDT0xNRVRBREFUQSIsIlJPVyIsIk5CQ1JPVyIsInVuZGVmaW5lZCIsInN1c3BlbmQiLCJhd2FpdERhdGEiLCJjYWxsYmFjayIsInJlYWRJbnQ4IiwiZGF0YSIsInJlYWRJbnQxNkxFIiwicmVhZEludDE2QkUiLCJyZWFkVUludDE2TEUiLCJyZWFkVUludDE2QkUiLCJyZWFkSW50MzJMRSIsInJlYWRJbnQzMkJFIiwicmVhZFVJbnQzMkxFIiwicmVhZFVJbnQzMkJFIiwicmVhZEJpZ0ludDY0TEUiLCJyZWFkSW50NjRMRSIsIk1hdGgiLCJwb3ciLCJyZWFkSW50NjRCRSIsInJlYWRCaWdVSW50NjRMRSIsInJlYWRVSW50NjRMRSIsInJlYWRVSW50NjRCRSIsInJlYWRGbG9hdExFIiwicmVhZEZsb2F0QkUiLCJyZWFkRG91YmxlTEUiLCJyZWFkRG91YmxlQkUiLCJyZWFkVUludDI0TEUiLCJsb3ciLCJoaWdoIiwicmVhZFVJbnQ0MExFIiwicmVhZFVOdW1lcmljNjRMRSIsInJlYWRVTnVtZXJpYzk2TEUiLCJkd29yZDEiLCJkd29yZDIiLCJkd29yZDMiLCJyZWFkVU51bWVyaWMxMjhMRSIsImR3b3JkNCIsInJlYWRCdWZmZXIiLCJyZWFkQlZhckNoYXIiLCJ0b1N0cmluZyIsInJlYWRVc1ZhckNoYXIiLCJyZWFkQlZhckJ5dGUiLCJyZWFkVXNWYXJCeXRlIiwibW9kdWxlIiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90b2tlbi9zdHJlYW0tcGFyc2VyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBEZWJ1ZyBmcm9tICcuLi9kZWJ1Zyc7XG5pbXBvcnQgeyBJbnRlcm5hbENvbm5lY3Rpb25PcHRpb25zIH0gZnJvbSAnLi4vY29ubmVjdGlvbic7XG5cbmltcG9ydCB7IFRZUEUsIFRva2VuLCBDb2xNZXRhZGF0YVRva2VuIH0gZnJvbSAnLi90b2tlbic7XG5cbmltcG9ydCBjb2xNZXRhZGF0YVBhcnNlciwgeyBDb2x1bW5NZXRhZGF0YSB9IGZyb20gJy4vY29sbWV0YWRhdGEtdG9rZW4tcGFyc2VyJztcbmltcG9ydCB7IGRvbmVQYXJzZXIsIGRvbmVJblByb2NQYXJzZXIsIGRvbmVQcm9jUGFyc2VyIH0gZnJvbSAnLi9kb25lLXRva2VuLXBhcnNlcic7XG5pbXBvcnQgZW52Q2hhbmdlUGFyc2VyIGZyb20gJy4vZW52LWNoYW5nZS10b2tlbi1wYXJzZXInO1xuaW1wb3J0IHsgZXJyb3JQYXJzZXIsIGluZm9QYXJzZXIgfSBmcm9tICcuL2luZm9lcnJvci10b2tlbi1wYXJzZXInO1xuaW1wb3J0IGZlZEF1dGhJbmZvUGFyc2VyIGZyb20gJy4vZmVkYXV0aC1pbmZvLXBhcnNlcic7XG5pbXBvcnQgZmVhdHVyZUV4dEFja1BhcnNlciBmcm9tICcuL2ZlYXR1cmUtZXh0LWFjay1wYXJzZXInO1xuaW1wb3J0IGxvZ2luQWNrUGFyc2VyIGZyb20gJy4vbG9naW5hY2stdG9rZW4tcGFyc2VyJztcbmltcG9ydCBvcmRlclBhcnNlciBmcm9tICcuL29yZGVyLXRva2VuLXBhcnNlcic7XG5pbXBvcnQgcmV0dXJuU3RhdHVzUGFyc2VyIGZyb20gJy4vcmV0dXJuc3RhdHVzLXRva2VuLXBhcnNlcic7XG5pbXBvcnQgcmV0dXJuVmFsdWVQYXJzZXIgZnJvbSAnLi9yZXR1cm52YWx1ZS10b2tlbi1wYXJzZXInO1xuaW1wb3J0IHJvd1BhcnNlciBmcm9tICcuL3Jvdy10b2tlbi1wYXJzZXInO1xuaW1wb3J0IG5iY1Jvd1BhcnNlciBmcm9tICcuL25iY3Jvdy10b2tlbi1wYXJzZXInO1xuaW1wb3J0IHNzcGlQYXJzZXIgZnJvbSAnLi9zc3BpLXRva2VuLXBhcnNlcic7XG5cbmNvbnN0IHRva2VuUGFyc2VycyA9IHtcbiAgW1RZUEUuRE9ORV06IGRvbmVQYXJzZXIsXG4gIFtUWVBFLkRPTkVJTlBST0NdOiBkb25lSW5Qcm9jUGFyc2VyLFxuICBbVFlQRS5ET05FUFJPQ106IGRvbmVQcm9jUGFyc2VyLFxuICBbVFlQRS5FTlZDSEFOR0VdOiBlbnZDaGFuZ2VQYXJzZXIsXG4gIFtUWVBFLkVSUk9SXTogZXJyb3JQYXJzZXIsXG4gIFtUWVBFLkZFREFVVEhJTkZPXTogZmVkQXV0aEluZm9QYXJzZXIsXG4gIFtUWVBFLkZFQVRVUkVFWFRBQ0tdOiBmZWF0dXJlRXh0QWNrUGFyc2VyLFxuICBbVFlQRS5JTkZPXTogaW5mb1BhcnNlcixcbiAgW1RZUEUuTE9HSU5BQ0tdOiBsb2dpbkFja1BhcnNlcixcbiAgW1RZUEUuT1JERVJdOiBvcmRlclBhcnNlcixcbiAgW1RZUEUuUkVUVVJOU1RBVFVTXTogcmV0dXJuU3RhdHVzUGFyc2VyLFxuICBbVFlQRS5SRVRVUk5WQUxVRV06IHJldHVyblZhbHVlUGFyc2VyLFxuICBbVFlQRS5TU1BJXTogc3NwaVBhcnNlclxufTtcblxuZXhwb3J0IHR5cGUgUGFyc2VyT3B0aW9ucyA9IFBpY2s8SW50ZXJuYWxDb25uZWN0aW9uT3B0aW9ucywgJ3VzZVVUQycgfCAnbG93ZXJDYXNlR3VpZHMnIHwgJ3Rkc1ZlcnNpb24nIHwgJ3VzZUNvbHVtbk5hbWVzJyB8ICdjb2x1bW5OYW1lUmVwbGFjZXInIHwgJ2NhbWVsQ2FzZUNvbHVtbnMnPjtcblxuY2xhc3MgU3RyZWFtQnVmZmVyIHtcbiAgaXRlcmF0b3I6IEFzeW5jSXRlcmF0b3I8QnVmZmVyLCBhbnksIHVuZGVmaW5lZD4gfCBJdGVyYXRvcjxCdWZmZXIsIGFueSwgdW5kZWZpbmVkPjtcbiAgYnVmZmVyOiBCdWZmZXI7XG4gIHBvc2l0aW9uOiBudW1iZXI7XG5cbiAgY29uc3RydWN0b3IoaXRlcmFibGU6IEFzeW5jSXRlcmFibGU8QnVmZmVyPiB8IEl0ZXJhYmxlPEJ1ZmZlcj4pIHtcbiAgICB0aGlzLml0ZXJhdG9yID0gKChpdGVyYWJsZSBhcyBBc3luY0l0ZXJhYmxlPEJ1ZmZlcj4pW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSB8fCAoaXRlcmFibGUgYXMgSXRlcmFibGU8QnVmZmVyPilbU3ltYm9sLml0ZXJhdG9yXSkuY2FsbChpdGVyYWJsZSk7XG5cbiAgICB0aGlzLmJ1ZmZlciA9IEJ1ZmZlci5hbGxvYygwKTtcbiAgICB0aGlzLnBvc2l0aW9uID0gMDtcbiAgfVxuXG4gIGFzeW5jIHdhaXRGb3JDaHVuaygpIHtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLml0ZXJhdG9yLm5leHQoKTtcbiAgICBpZiAocmVzdWx0LmRvbmUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcigndW5leHBlY3RlZCBlbmQgb2YgZGF0YScpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnBvc2l0aW9uID09PSB0aGlzLmJ1ZmZlci5sZW5ndGgpIHtcbiAgICAgIHRoaXMuYnVmZmVyID0gcmVzdWx0LnZhbHVlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmJ1ZmZlciA9IEJ1ZmZlci5jb25jYXQoW3RoaXMuYnVmZmVyLnNsaWNlKHRoaXMucG9zaXRpb24pLCByZXN1bHQudmFsdWVdKTtcbiAgICB9XG4gICAgdGhpcy5wb3NpdGlvbiA9IDA7XG4gIH1cbn1cblxuY2xhc3MgUGFyc2VyIHtcbiAgZGVidWc6IERlYnVnO1xuICBjb2xNZXRhZGF0YTogQ29sdW1uTWV0YWRhdGFbXTtcbiAgb3B0aW9uczogUGFyc2VyT3B0aW9ucztcblxuICBzdXNwZW5kZWQ6IGJvb2xlYW47XG4gIG5leHQ6ICgoKSA9PiB2b2lkKSB8IHVuZGVmaW5lZDtcbiAgc3RyZWFtQnVmZmVyOiBTdHJlYW1CdWZmZXI7XG5cbiAgc3RhdGljIGFzeW5jICpwYXJzZVRva2VucyhpdGVyYWJsZTogQXN5bmNJdGVyYWJsZTxCdWZmZXI+IHwgSXRlcmFibGU8QnVmZmVyPiwgZGVidWc6IERlYnVnLCBvcHRpb25zOiBQYXJzZXJPcHRpb25zLCBjb2xNZXRhZGF0YTogQ29sdW1uTWV0YWRhdGFbXSA9IFtdKSB7XG4gICAgbGV0IHRva2VuOiBUb2tlbiB8IHVuZGVmaW5lZDtcbiAgICBjb25zdCBvbkRvbmVQYXJzaW5nID0gKHQ6IFRva2VuIHwgdW5kZWZpbmVkKSA9PiB7IHRva2VuID0gdDsgfTtcblxuICAgIGNvbnN0IHN0cmVhbUJ1ZmZlciA9IG5ldyBTdHJlYW1CdWZmZXIoaXRlcmFibGUpO1xuXG4gICAgY29uc3QgcGFyc2VyID0gbmV3IFBhcnNlcihzdHJlYW1CdWZmZXIsIGRlYnVnLCBvcHRpb25zKTtcbiAgICBwYXJzZXIuY29sTWV0YWRhdGEgPSBjb2xNZXRhZGF0YTtcblxuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBzdHJlYW1CdWZmZXIud2FpdEZvckNodW5rKCk7XG4gICAgICB9IGNhdGNoIChlcnI6IHVua25vd24pIHtcbiAgICAgICAgaWYgKHN0cmVhbUJ1ZmZlci5wb3NpdGlvbiA9PT0gc3RyZWFtQnVmZmVyLmJ1ZmZlci5sZW5ndGgpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aHJvdyBlcnI7XG4gICAgICB9XG5cbiAgICAgIGlmIChwYXJzZXIuc3VzcGVuZGVkKSB7XG4gICAgICAgIC8vIFVuc3VzcGVuZCBhbmQgY29udGludWUgZnJvbSB3aGVyZSBldmVyIHdlIGxlZnQgb2ZmLlxuICAgICAgICBwYXJzZXIuc3VzcGVuZGVkID0gZmFsc2U7XG4gICAgICAgIGNvbnN0IG5leHQgPSBwYXJzZXIubmV4dCE7XG5cbiAgICAgICAgbmV4dCgpO1xuXG4gICAgICAgIC8vIENoZWNrIGlmIGEgbmV3IHRva2VuIHdhcyBwYXJzZWQgYWZ0ZXIgdW5zdXNwZW5zaW9uLlxuICAgICAgICBpZiAoIXBhcnNlci5zdXNwZW5kZWQgJiYgdG9rZW4pIHtcbiAgICAgICAgICBpZiAodG9rZW4gaW5zdGFuY2VvZiBDb2xNZXRhZGF0YVRva2VuKSB7XG4gICAgICAgICAgICBwYXJzZXIuY29sTWV0YWRhdGEgPSB0b2tlbi5jb2x1bW5zO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHlpZWxkIHRva2VuO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHdoaWxlICghcGFyc2VyLnN1c3BlbmRlZCAmJiBwYXJzZXIucG9zaXRpb24gKyAxIDw9IHBhcnNlci5idWZmZXIubGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IHR5cGUgPSBwYXJzZXIuYnVmZmVyLnJlYWRVSW50OChwYXJzZXIucG9zaXRpb24pO1xuXG4gICAgICAgIHBhcnNlci5wb3NpdGlvbiArPSAxO1xuXG4gICAgICAgIGlmICh0eXBlID09PSBUWVBFLkNPTE1FVEFEQVRBKSB7XG4gICAgICAgICAgY29uc3QgdG9rZW4gPSBhd2FpdCBjb2xNZXRhZGF0YVBhcnNlcihwYXJzZXIpO1xuICAgICAgICAgIHBhcnNlci5jb2xNZXRhZGF0YSA9IHRva2VuLmNvbHVtbnM7XG4gICAgICAgICAgeWllbGQgdG9rZW47XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gVFlQRS5ST1cpIHtcbiAgICAgICAgICB5aWVsZCByb3dQYXJzZXIocGFyc2VyKTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSBUWVBFLk5CQ1JPVykge1xuICAgICAgICAgIHlpZWxkIG5iY1Jvd1BhcnNlcihwYXJzZXIpO1xuICAgICAgICB9IGVsc2UgaWYgKHRva2VuUGFyc2Vyc1t0eXBlXSkge1xuICAgICAgICAgIHRva2VuUGFyc2Vyc1t0eXBlXShwYXJzZXIsIHBhcnNlci5vcHRpb25zLCBvbkRvbmVQYXJzaW5nKTtcblxuICAgICAgICAgIC8vIENoZWNrIGlmIGEgbmV3IHRva2VuIHdhcyBwYXJzZWQgYWZ0ZXIgdW5zdXNwZW5zaW9uLlxuICAgICAgICAgIGlmICghcGFyc2VyLnN1c3BlbmRlZCAmJiB0b2tlbikge1xuICAgICAgICAgICAgaWYgKHRva2VuIGluc3RhbmNlb2YgQ29sTWV0YWRhdGFUb2tlbikge1xuICAgICAgICAgICAgICBwYXJzZXIuY29sTWV0YWRhdGEgPSB0b2tlbi5jb2x1bW5zO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgeWllbGQgdG9rZW47XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVW5rbm93biB0eXBlOiAnICsgdHlwZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjb25zdHJ1Y3RvcihzdHJlYW1CdWZmZXI6IFN0cmVhbUJ1ZmZlciwgZGVidWc6IERlYnVnLCBvcHRpb25zOiBQYXJzZXJPcHRpb25zKSB7XG4gICAgdGhpcy5kZWJ1ZyA9IGRlYnVnO1xuICAgIHRoaXMuY29sTWV0YWRhdGEgPSBbXTtcbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuXG4gICAgdGhpcy5zdHJlYW1CdWZmZXIgPSBzdHJlYW1CdWZmZXI7XG4gICAgdGhpcy5zdXNwZW5kZWQgPSBmYWxzZTtcbiAgICB0aGlzLm5leHQgPSB1bmRlZmluZWQ7XG4gIH1cblxuICBnZXQgYnVmZmVyKCkge1xuICAgIHJldHVybiB0aGlzLnN0cmVhbUJ1ZmZlci5idWZmZXI7XG4gIH1cblxuICBnZXQgcG9zaXRpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuc3RyZWFtQnVmZmVyLnBvc2l0aW9uO1xuICB9XG5cbiAgc2V0IHBvc2l0aW9uKHZhbHVlKSB7XG4gICAgdGhpcy5zdHJlYW1CdWZmZXIucG9zaXRpb24gPSB2YWx1ZTtcbiAgfVxuXG4gIHN1c3BlbmQobmV4dDogKCkgPT4gdm9pZCkge1xuICAgIHRoaXMuc3VzcGVuZGVkID0gdHJ1ZTtcbiAgICB0aGlzLm5leHQgPSBuZXh0O1xuICB9XG5cbiAgYXdhaXREYXRhKGxlbmd0aDogbnVtYmVyLCBjYWxsYmFjazogKCkgPT4gdm9pZCkge1xuICAgIGlmICh0aGlzLnBvc2l0aW9uICsgbGVuZ3RoIDw9IHRoaXMuYnVmZmVyLmxlbmd0aCkge1xuICAgICAgY2FsbGJhY2soKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zdXNwZW5kKCgpID0+IHtcbiAgICAgICAgdGhpcy5hd2FpdERhdGEobGVuZ3RoLCBjYWxsYmFjayk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICByZWFkSW50OChjYWxsYmFjazogKGRhdGE6IG51bWJlcikgPT4gdm9pZCkge1xuICAgIHRoaXMuYXdhaXREYXRhKDEsICgpID0+IHtcbiAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLmJ1ZmZlci5yZWFkSW50OCh0aGlzLnBvc2l0aW9uKTtcbiAgICAgIHRoaXMucG9zaXRpb24gKz0gMTtcbiAgICAgIGNhbGxiYWNrKGRhdGEpO1xuICAgIH0pO1xuICB9XG5cbiAgcmVhZFVJbnQ4KGNhbGxiYWNrOiAoZGF0YTogbnVtYmVyKSA9PiB2b2lkKSB7XG4gICAgdGhpcy5hd2FpdERhdGEoMSwgKCkgPT4ge1xuICAgICAgY29uc3QgZGF0YSA9IHRoaXMuYnVmZmVyLnJlYWRVSW50OCh0aGlzLnBvc2l0aW9uKTtcbiAgICAgIHRoaXMucG9zaXRpb24gKz0gMTtcbiAgICAgIGNhbGxiYWNrKGRhdGEpO1xuICAgIH0pO1xuICB9XG5cbiAgcmVhZEludDE2TEUoY2FsbGJhY2s6IChkYXRhOiBudW1iZXIpID0+IHZvaWQpIHtcbiAgICB0aGlzLmF3YWl0RGF0YSgyLCAoKSA9PiB7XG4gICAgICBjb25zdCBkYXRhID0gdGhpcy5idWZmZXIucmVhZEludDE2TEUodGhpcy5wb3NpdGlvbik7XG4gICAgICB0aGlzLnBvc2l0aW9uICs9IDI7XG4gICAgICBjYWxsYmFjayhkYXRhKTtcbiAgICB9KTtcbiAgfVxuXG4gIHJlYWRJbnQxNkJFKGNhbGxiYWNrOiAoZGF0YTogbnVtYmVyKSA9PiB2b2lkKSB7XG4gICAgdGhpcy5hd2FpdERhdGEoMiwgKCkgPT4ge1xuICAgICAgY29uc3QgZGF0YSA9IHRoaXMuYnVmZmVyLnJlYWRJbnQxNkJFKHRoaXMucG9zaXRpb24pO1xuICAgICAgdGhpcy5wb3NpdGlvbiArPSAyO1xuICAgICAgY2FsbGJhY2soZGF0YSk7XG4gICAgfSk7XG4gIH1cblxuICByZWFkVUludDE2TEUoY2FsbGJhY2s6IChkYXRhOiBudW1iZXIpID0+IHZvaWQpIHtcbiAgICB0aGlzLmF3YWl0RGF0YSgyLCAoKSA9PiB7XG4gICAgICBjb25zdCBkYXRhID0gdGhpcy5idWZmZXIucmVhZFVJbnQxNkxFKHRoaXMucG9zaXRpb24pO1xuICAgICAgdGhpcy5wb3NpdGlvbiArPSAyO1xuICAgICAgY2FsbGJhY2soZGF0YSk7XG4gICAgfSk7XG4gIH1cblxuICByZWFkVUludDE2QkUoY2FsbGJhY2s6IChkYXRhOiBudW1iZXIpID0+IHZvaWQpIHtcbiAgICB0aGlzLmF3YWl0RGF0YSgyLCAoKSA9PiB7XG4gICAgICBjb25zdCBkYXRhID0gdGhpcy5idWZmZXIucmVhZFVJbnQxNkJFKHRoaXMucG9zaXRpb24pO1xuICAgICAgdGhpcy5wb3NpdGlvbiArPSAyO1xuICAgICAgY2FsbGJhY2soZGF0YSk7XG4gICAgfSk7XG4gIH1cblxuICByZWFkSW50MzJMRShjYWxsYmFjazogKGRhdGE6IG51bWJlcikgPT4gdm9pZCkge1xuICAgIHRoaXMuYXdhaXREYXRhKDQsICgpID0+IHtcbiAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLmJ1ZmZlci5yZWFkSW50MzJMRSh0aGlzLnBvc2l0aW9uKTtcbiAgICAgIHRoaXMucG9zaXRpb24gKz0gNDtcbiAgICAgIGNhbGxiYWNrKGRhdGEpO1xuICAgIH0pO1xuICB9XG5cbiAgcmVhZEludDMyQkUoY2FsbGJhY2s6IChkYXRhOiBudW1iZXIpID0+IHZvaWQpIHtcbiAgICB0aGlzLmF3YWl0RGF0YSg0LCAoKSA9PiB7XG4gICAgICBjb25zdCBkYXRhID0gdGhpcy5idWZmZXIucmVhZEludDMyQkUodGhpcy5wb3NpdGlvbik7XG4gICAgICB0aGlzLnBvc2l0aW9uICs9IDQ7XG4gICAgICBjYWxsYmFjayhkYXRhKTtcbiAgICB9KTtcbiAgfVxuXG4gIHJlYWRVSW50MzJMRShjYWxsYmFjazogKGRhdGE6IG51bWJlcikgPT4gdm9pZCkge1xuICAgIHRoaXMuYXdhaXREYXRhKDQsICgpID0+IHtcbiAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLmJ1ZmZlci5yZWFkVUludDMyTEUodGhpcy5wb3NpdGlvbik7XG4gICAgICB0aGlzLnBvc2l0aW9uICs9IDQ7XG4gICAgICBjYWxsYmFjayhkYXRhKTtcbiAgICB9KTtcbiAgfVxuXG4gIHJlYWRVSW50MzJCRShjYWxsYmFjazogKGRhdGE6IG51bWJlcikgPT4gdm9pZCkge1xuICAgIHRoaXMuYXdhaXREYXRhKDQsICgpID0+IHtcbiAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLmJ1ZmZlci5yZWFkVUludDMyQkUodGhpcy5wb3NpdGlvbik7XG4gICAgICB0aGlzLnBvc2l0aW9uICs9IDQ7XG4gICAgICBjYWxsYmFjayhkYXRhKTtcbiAgICB9KTtcbiAgfVxuXG4gIHJlYWRCaWdJbnQ2NExFKGNhbGxiYWNrOiAoZGF0YTogYmlnaW50KSA9PiB2b2lkKSB7XG4gICAgdGhpcy5hd2FpdERhdGEoOCwgKCkgPT4ge1xuICAgICAgY29uc3QgZGF0YSA9IHRoaXMuYnVmZmVyLnJlYWRCaWdJbnQ2NExFKHRoaXMucG9zaXRpb24pO1xuICAgICAgdGhpcy5wb3NpdGlvbiArPSA4O1xuICAgICAgY2FsbGJhY2soZGF0YSk7XG4gICAgfSk7XG4gIH1cblxuICByZWFkSW50NjRMRShjYWxsYmFjazogKGRhdGE6IG51bWJlcikgPT4gdm9pZCkge1xuICAgIHRoaXMuYXdhaXREYXRhKDgsICgpID0+IHtcbiAgICAgIGNvbnN0IGRhdGEgPSBNYXRoLnBvdygyLCAzMikgKiB0aGlzLmJ1ZmZlci5yZWFkSW50MzJMRSh0aGlzLnBvc2l0aW9uICsgNCkgKyAoKHRoaXMuYnVmZmVyW3RoaXMucG9zaXRpb24gKyA0XSAmIDB4ODApID09PSAweDgwID8gMSA6IC0xKSAqIHRoaXMuYnVmZmVyLnJlYWRVSW50MzJMRSh0aGlzLnBvc2l0aW9uKTtcbiAgICAgIHRoaXMucG9zaXRpb24gKz0gODtcbiAgICAgIGNhbGxiYWNrKGRhdGEpO1xuICAgIH0pO1xuICB9XG5cbiAgcmVhZEludDY0QkUoY2FsbGJhY2s6IChkYXRhOiBudW1iZXIpID0+IHZvaWQpIHtcbiAgICB0aGlzLmF3YWl0RGF0YSg4LCAoKSA9PiB7XG4gICAgICBjb25zdCBkYXRhID0gTWF0aC5wb3coMiwgMzIpICogdGhpcy5idWZmZXIucmVhZEludDMyQkUodGhpcy5wb3NpdGlvbikgKyAoKHRoaXMuYnVmZmVyW3RoaXMucG9zaXRpb25dICYgMHg4MCkgPT09IDB4ODAgPyAxIDogLTEpICogdGhpcy5idWZmZXIucmVhZFVJbnQzMkJFKHRoaXMucG9zaXRpb24gKyA0KTtcbiAgICAgIHRoaXMucG9zaXRpb24gKz0gODtcbiAgICAgIGNhbGxiYWNrKGRhdGEpO1xuICAgIH0pO1xuICB9XG5cbiAgcmVhZEJpZ1VJbnQ2NExFKGNhbGxiYWNrOiAoZGF0YTogYmlnaW50KSA9PiB2b2lkKSB7XG4gICAgdGhpcy5hd2FpdERhdGEoOCwgKCkgPT4ge1xuICAgICAgY29uc3QgZGF0YSA9IHRoaXMuYnVmZmVyLnJlYWRCaWdVSW50NjRMRSh0aGlzLnBvc2l0aW9uKTtcbiAgICAgIHRoaXMucG9zaXRpb24gKz0gODtcbiAgICAgIGNhbGxiYWNrKGRhdGEpO1xuICAgIH0pO1xuICB9XG5cbiAgcmVhZFVJbnQ2NExFKGNhbGxiYWNrOiAoZGF0YTogbnVtYmVyKSA9PiB2b2lkKSB7XG4gICAgdGhpcy5hd2FpdERhdGEoOCwgKCkgPT4ge1xuICAgICAgY29uc3QgZGF0YSA9IE1hdGgucG93KDIsIDMyKSAqIHRoaXMuYnVmZmVyLnJlYWRVSW50MzJMRSh0aGlzLnBvc2l0aW9uICsgNCkgKyB0aGlzLmJ1ZmZlci5yZWFkVUludDMyTEUodGhpcy5wb3NpdGlvbik7XG4gICAgICB0aGlzLnBvc2l0aW9uICs9IDg7XG4gICAgICBjYWxsYmFjayhkYXRhKTtcbiAgICB9KTtcbiAgfVxuXG4gIHJlYWRVSW50NjRCRShjYWxsYmFjazogKGRhdGE6IG51bWJlcikgPT4gdm9pZCkge1xuICAgIHRoaXMuYXdhaXREYXRhKDgsICgpID0+IHtcbiAgICAgIGNvbnN0IGRhdGEgPSBNYXRoLnBvdygyLCAzMikgKiB0aGlzLmJ1ZmZlci5yZWFkVUludDMyQkUodGhpcy5wb3NpdGlvbikgKyB0aGlzLmJ1ZmZlci5yZWFkVUludDMyQkUodGhpcy5wb3NpdGlvbiArIDQpO1xuICAgICAgdGhpcy5wb3NpdGlvbiArPSA4O1xuICAgICAgY2FsbGJhY2soZGF0YSk7XG4gICAgfSk7XG4gIH1cblxuICByZWFkRmxvYXRMRShjYWxsYmFjazogKGRhdGE6IG51bWJlcikgPT4gdm9pZCkge1xuICAgIHRoaXMuYXdhaXREYXRhKDQsICgpID0+IHtcbiAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLmJ1ZmZlci5yZWFkRmxvYXRMRSh0aGlzLnBvc2l0aW9uKTtcbiAgICAgIHRoaXMucG9zaXRpb24gKz0gNDtcbiAgICAgIGNhbGxiYWNrKGRhdGEpO1xuICAgIH0pO1xuICB9XG5cbiAgcmVhZEZsb2F0QkUoY2FsbGJhY2s6IChkYXRhOiBudW1iZXIpID0+IHZvaWQpIHtcbiAgICB0aGlzLmF3YWl0RGF0YSg0LCAoKSA9PiB7XG4gICAgICBjb25zdCBkYXRhID0gdGhpcy5idWZmZXIucmVhZEZsb2F0QkUodGhpcy5wb3NpdGlvbik7XG4gICAgICB0aGlzLnBvc2l0aW9uICs9IDQ7XG4gICAgICBjYWxsYmFjayhkYXRhKTtcbiAgICB9KTtcbiAgfVxuXG4gIHJlYWREb3VibGVMRShjYWxsYmFjazogKGRhdGE6IG51bWJlcikgPT4gdm9pZCkge1xuICAgIHRoaXMuYXdhaXREYXRhKDgsICgpID0+IHtcbiAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLmJ1ZmZlci5yZWFkRG91YmxlTEUodGhpcy5wb3NpdGlvbik7XG4gICAgICB0aGlzLnBvc2l0aW9uICs9IDg7XG4gICAgICBjYWxsYmFjayhkYXRhKTtcbiAgICB9KTtcbiAgfVxuXG4gIHJlYWREb3VibGVCRShjYWxsYmFjazogKGRhdGE6IG51bWJlcikgPT4gdm9pZCkge1xuICAgIHRoaXMuYXdhaXREYXRhKDgsICgpID0+IHtcbiAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLmJ1ZmZlci5yZWFkRG91YmxlQkUodGhpcy5wb3NpdGlvbik7XG4gICAgICB0aGlzLnBvc2l0aW9uICs9IDg7XG4gICAgICBjYWxsYmFjayhkYXRhKTtcbiAgICB9KTtcbiAgfVxuXG4gIHJlYWRVSW50MjRMRShjYWxsYmFjazogKGRhdGE6IG51bWJlcikgPT4gdm9pZCkge1xuICAgIHRoaXMuYXdhaXREYXRhKDMsICgpID0+IHtcbiAgICAgIGNvbnN0IGxvdyA9IHRoaXMuYnVmZmVyLnJlYWRVSW50MTZMRSh0aGlzLnBvc2l0aW9uKTtcbiAgICAgIGNvbnN0IGhpZ2ggPSB0aGlzLmJ1ZmZlci5yZWFkVUludDgodGhpcy5wb3NpdGlvbiArIDIpO1xuXG4gICAgICB0aGlzLnBvc2l0aW9uICs9IDM7XG5cbiAgICAgIGNhbGxiYWNrKGxvdyB8IChoaWdoIDw8IDE2KSk7XG4gICAgfSk7XG4gIH1cblxuICByZWFkVUludDQwTEUoY2FsbGJhY2s6IChkYXRhOiBudW1iZXIpID0+IHZvaWQpIHtcbiAgICB0aGlzLmF3YWl0RGF0YSg1LCAoKSA9PiB7XG4gICAgICBjb25zdCBsb3cgPSB0aGlzLmJ1ZmZlci5yZWFkVUludDMyTEUodGhpcy5wb3NpdGlvbik7XG4gICAgICBjb25zdCBoaWdoID0gdGhpcy5idWZmZXIucmVhZFVJbnQ4KHRoaXMucG9zaXRpb24gKyA0KTtcblxuICAgICAgdGhpcy5wb3NpdGlvbiArPSA1O1xuXG4gICAgICBjYWxsYmFjaygoMHgxMDAwMDAwMDAgKiBoaWdoKSArIGxvdyk7XG4gICAgfSk7XG4gIH1cblxuICByZWFkVU51bWVyaWM2NExFKGNhbGxiYWNrOiAoZGF0YTogbnVtYmVyKSA9PiB2b2lkKSB7XG4gICAgdGhpcy5hd2FpdERhdGEoOCwgKCkgPT4ge1xuICAgICAgY29uc3QgbG93ID0gdGhpcy5idWZmZXIucmVhZFVJbnQzMkxFKHRoaXMucG9zaXRpb24pO1xuICAgICAgY29uc3QgaGlnaCA9IHRoaXMuYnVmZmVyLnJlYWRVSW50MzJMRSh0aGlzLnBvc2l0aW9uICsgNCk7XG5cbiAgICAgIHRoaXMucG9zaXRpb24gKz0gODtcblxuICAgICAgY2FsbGJhY2soKDB4MTAwMDAwMDAwICogaGlnaCkgKyBsb3cpO1xuICAgIH0pO1xuICB9XG5cbiAgcmVhZFVOdW1lcmljOTZMRShjYWxsYmFjazogKGRhdGE6IG51bWJlcikgPT4gdm9pZCkge1xuICAgIHRoaXMuYXdhaXREYXRhKDEyLCAoKSA9PiB7XG4gICAgICBjb25zdCBkd29yZDEgPSB0aGlzLmJ1ZmZlci5yZWFkVUludDMyTEUodGhpcy5wb3NpdGlvbik7XG4gICAgICBjb25zdCBkd29yZDIgPSB0aGlzLmJ1ZmZlci5yZWFkVUludDMyTEUodGhpcy5wb3NpdGlvbiArIDQpO1xuICAgICAgY29uc3QgZHdvcmQzID0gdGhpcy5idWZmZXIucmVhZFVJbnQzMkxFKHRoaXMucG9zaXRpb24gKyA4KTtcblxuICAgICAgdGhpcy5wb3NpdGlvbiArPSAxMjtcblxuICAgICAgY2FsbGJhY2soZHdvcmQxICsgKDB4MTAwMDAwMDAwICogZHdvcmQyKSArICgweDEwMDAwMDAwMCAqIDB4MTAwMDAwMDAwICogZHdvcmQzKSk7XG4gICAgfSk7XG4gIH1cblxuICByZWFkVU51bWVyaWMxMjhMRShjYWxsYmFjazogKGRhdGE6IG51bWJlcikgPT4gdm9pZCkge1xuICAgIHRoaXMuYXdhaXREYXRhKDE2LCAoKSA9PiB7XG4gICAgICBjb25zdCBkd29yZDEgPSB0aGlzLmJ1ZmZlci5yZWFkVUludDMyTEUodGhpcy5wb3NpdGlvbik7XG4gICAgICBjb25zdCBkd29yZDIgPSB0aGlzLmJ1ZmZlci5yZWFkVUludDMyTEUodGhpcy5wb3NpdGlvbiArIDQpO1xuICAgICAgY29uc3QgZHdvcmQzID0gdGhpcy5idWZmZXIucmVhZFVJbnQzMkxFKHRoaXMucG9zaXRpb24gKyA4KTtcbiAgICAgIGNvbnN0IGR3b3JkNCA9IHRoaXMuYnVmZmVyLnJlYWRVSW50MzJMRSh0aGlzLnBvc2l0aW9uICsgMTIpO1xuXG4gICAgICB0aGlzLnBvc2l0aW9uICs9IDE2O1xuXG4gICAgICBjYWxsYmFjayhkd29yZDEgKyAoMHgxMDAwMDAwMDAgKiBkd29yZDIpICsgKDB4MTAwMDAwMDAwICogMHgxMDAwMDAwMDAgKiBkd29yZDMpICsgKDB4MTAwMDAwMDAwICogMHgxMDAwMDAwMDAgKiAweDEwMDAwMDAwMCAqIGR3b3JkNCkpO1xuICAgIH0pO1xuICB9XG5cbiAgLy8gVmFyaWFibGUgbGVuZ3RoIGRhdGFcblxuICByZWFkQnVmZmVyKGxlbmd0aDogbnVtYmVyLCBjYWxsYmFjazogKGRhdGE6IEJ1ZmZlcikgPT4gdm9pZCkge1xuICAgIHRoaXMuYXdhaXREYXRhKGxlbmd0aCwgKCkgPT4ge1xuICAgICAgY29uc3QgZGF0YSA9IHRoaXMuYnVmZmVyLnNsaWNlKHRoaXMucG9zaXRpb24sIHRoaXMucG9zaXRpb24gKyBsZW5ndGgpO1xuICAgICAgdGhpcy5wb3NpdGlvbiArPSBsZW5ndGg7XG4gICAgICBjYWxsYmFjayhkYXRhKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8vIFJlYWQgYSBVbmljb2RlIFN0cmluZyAoQlZBUkNIQVIpXG4gIHJlYWRCVmFyQ2hhcihjYWxsYmFjazogKGRhdGE6IHN0cmluZykgPT4gdm9pZCkge1xuICAgIHRoaXMucmVhZFVJbnQ4KChsZW5ndGgpID0+IHtcbiAgICAgIHRoaXMucmVhZEJ1ZmZlcihsZW5ndGggKiAyLCAoZGF0YSkgPT4ge1xuICAgICAgICBjYWxsYmFjayhkYXRhLnRvU3RyaW5nKCd1Y3MyJykpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICAvLyBSZWFkIGEgVW5pY29kZSBTdHJpbmcgKFVTVkFSQ0hBUilcbiAgcmVhZFVzVmFyQ2hhcihjYWxsYmFjazogKGRhdGE6IHN0cmluZykgPT4gdm9pZCkge1xuICAgIHRoaXMucmVhZFVJbnQxNkxFKChsZW5ndGgpID0+IHtcbiAgICAgIHRoaXMucmVhZEJ1ZmZlcihsZW5ndGggKiAyLCAoZGF0YSkgPT4ge1xuICAgICAgICBjYWxsYmFjayhkYXRhLnRvU3RyaW5nKCd1Y3MyJykpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICAvLyBSZWFkIGJpbmFyeSBkYXRhIChCVkFSQllURSlcbiAgcmVhZEJWYXJCeXRlKGNhbGxiYWNrOiAoZGF0YTogQnVmZmVyKSA9PiB2b2lkKSB7XG4gICAgdGhpcy5yZWFkVUludDgoKGxlbmd0aCkgPT4ge1xuICAgICAgdGhpcy5yZWFkQnVmZmVyKGxlbmd0aCwgY2FsbGJhY2spO1xuICAgIH0pO1xuICB9XG5cbiAgLy8gUmVhZCBiaW5hcnkgZGF0YSAoVVNWQVJCWVRFKVxuICByZWFkVXNWYXJCeXRlKGNhbGxiYWNrOiAoZGF0YTogQnVmZmVyKSA9PiB2b2lkKSB7XG4gICAgdGhpcy5yZWFkVUludDE2TEUoKGxlbmd0aCkgPT4ge1xuICAgICAgdGhpcy5yZWFkQnVmZmVyKGxlbmd0aCwgY2FsbGJhY2spO1xuICAgIH0pO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFBhcnNlcjtcbm1vZHVsZS5leHBvcnRzID0gUGFyc2VyO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBR0E7O0FBRUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7Ozs7QUFFQSxNQUFNQSxZQUFZLEdBQUc7RUFDbkIsQ0FBQ0MsWUFBS0MsSUFBTixHQUFhQywyQkFETTtFQUVuQixDQUFDRixZQUFLRyxVQUFOLEdBQW1CQyxpQ0FGQTtFQUduQixDQUFDSixZQUFLSyxRQUFOLEdBQWlCQywrQkFIRTtFQUluQixDQUFDTixZQUFLTyxTQUFOLEdBQWtCQyw2QkFKQztFQUtuQixDQUFDUixZQUFLUyxLQUFOLEdBQWNDLGlDQUxLO0VBTW5CLENBQUNWLFlBQUtXLFdBQU4sR0FBb0JDLDBCQU5EO0VBT25CLENBQUNaLFlBQUthLGFBQU4sR0FBc0JDLDRCQVBIO0VBUW5CLENBQUNkLFlBQUtlLElBQU4sR0FBYUMsZ0NBUk07RUFTbkIsQ0FBQ2hCLFlBQUtpQixRQUFOLEdBQWlCQyw0QkFURTtFQVVuQixDQUFDbEIsWUFBS21CLEtBQU4sR0FBY0MseUJBVks7RUFXbkIsQ0FBQ3BCLFlBQUtxQixZQUFOLEdBQXFCQyxnQ0FYRjtFQVluQixDQUFDdEIsWUFBS3VCLFdBQU4sR0FBb0JDLCtCQVpEO0VBYW5CLENBQUN4QixZQUFLeUIsSUFBTixHQUFhQztBQWJNLENBQXJCOztBQWtCQSxNQUFNQyxZQUFOLENBQW1CO0VBS2pCQyxXQUFXLENBQUNDLFFBQUQsRUFBcUQ7SUFBQSxLQUpoRUMsUUFJZ0U7SUFBQSxLQUhoRUMsTUFHZ0U7SUFBQSxLQUZoRUMsUUFFZ0U7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
|
|
383
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfdG9rZW4iLCJyZXF1aXJlIiwiX2NvbG1ldGFkYXRhVG9rZW5QYXJzZXIiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwiX2RvbmVUb2tlblBhcnNlciIsIl9lbnZDaGFuZ2VUb2tlblBhcnNlciIsIl9pbmZvZXJyb3JUb2tlblBhcnNlciIsIl9mZWRhdXRoSW5mb1BhcnNlciIsIl9mZWF0dXJlRXh0QWNrUGFyc2VyIiwiX2xvZ2luYWNrVG9rZW5QYXJzZXIiLCJfb3JkZXJUb2tlblBhcnNlciIsIl9yZXR1cm5zdGF0dXNUb2tlblBhcnNlciIsIl9yZXR1cm52YWx1ZVRva2VuUGFyc2VyIiwiX3Jvd1Rva2VuUGFyc2VyIiwiX25iY3Jvd1Rva2VuUGFyc2VyIiwiX3NzcGlUb2tlblBhcnNlciIsIm9iaiIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0IiwidG9rZW5QYXJzZXJzIiwiVFlQRSIsIkRPTkUiLCJkb25lUGFyc2VyIiwiRE9ORUlOUFJPQyIsImRvbmVJblByb2NQYXJzZXIiLCJET05FUFJPQyIsImRvbmVQcm9jUGFyc2VyIiwiRU5WQ0hBTkdFIiwiZW52Q2hhbmdlUGFyc2VyIiwiRVJST1IiLCJlcnJvclBhcnNlciIsIkZFREFVVEhJTkZPIiwiZmVkQXV0aEluZm9QYXJzZXIiLCJGRUFUVVJFRVhUQUNLIiwiZmVhdHVyZUV4dEFja1BhcnNlciIsIklORk8iLCJpbmZvUGFyc2VyIiwiTE9HSU5BQ0siLCJsb2dpbkFja1BhcnNlciIsIk9SREVSIiwib3JkZXJQYXJzZXIiLCJSRVRVUk5TVEFUVVMiLCJyZXR1cm5TdGF0dXNQYXJzZXIiLCJSRVRVUk5WQUxVRSIsInJldHVyblZhbHVlUGFyc2VyIiwiU1NQSSIsInNzcGlQYXJzZXIiLCJTdHJlYW1CdWZmZXIiLCJpdGVyYXRvciIsImJ1ZmZlciIsInBvc2l0aW9uIiwiY29uc3RydWN0b3IiLCJpdGVyYWJsZSIsIlN5bWJvbCIsImFzeW5jSXRlcmF0b3IiLCJjYWxsIiwiQnVmZmVyIiwiYWxsb2MiLCJ3YWl0Rm9yQ2h1bmsiLCJyZXN1bHQiLCJuZXh0IiwiZG9uZSIsIkVycm9yIiwibGVuZ3RoIiwidmFsdWUiLCJjb25jYXQiLCJzbGljZSIsIlBhcnNlciIsImRlYnVnIiwiY29sTWV0YWRhdGEiLCJvcHRpb25zIiwic3VzcGVuZGVkIiwic3RyZWFtQnVmZmVyIiwicGFyc2VUb2tlbnMiLCJ0b2tlbiIsIm9uRG9uZVBhcnNpbmciLCJ0IiwicGFyc2VyIiwiZXJyIiwiQ29sTWV0YWRhdGFUb2tlbiIsImNvbHVtbnMiLCJ0eXBlIiwicmVhZFVJbnQ4IiwiQ09MTUVUQURBVEEiLCJjb2xNZXRhZGF0YVBhcnNlciIsIlJPVyIsInJvd1BhcnNlciIsIk5CQ1JPVyIsIm5iY1Jvd1BhcnNlciIsInVuZGVmaW5lZCIsInN1c3BlbmQiLCJhd2FpdERhdGEiLCJjYWxsYmFjayIsInJlYWRJbnQ4IiwiZGF0YSIsInJlYWRJbnQxNkxFIiwicmVhZEludDE2QkUiLCJyZWFkVUludDE2TEUiLCJyZWFkVUludDE2QkUiLCJyZWFkSW50MzJMRSIsInJlYWRJbnQzMkJFIiwicmVhZFVJbnQzMkxFIiwicmVhZFVJbnQzMkJFIiwicmVhZEJpZ0ludDY0TEUiLCJyZWFkSW50NjRMRSIsIk1hdGgiLCJwb3ciLCJyZWFkSW50NjRCRSIsInJlYWRCaWdVSW50NjRMRSIsInJlYWRVSW50NjRMRSIsInJlYWRVSW50NjRCRSIsInJlYWRGbG9hdExFIiwicmVhZEZsb2F0QkUiLCJyZWFkRG91YmxlTEUiLCJyZWFkRG91YmxlQkUiLCJyZWFkVUludDI0TEUiLCJsb3ciLCJoaWdoIiwicmVhZFVJbnQ0MExFIiwicmVhZFVOdW1lcmljNjRMRSIsInJlYWRVTnVtZXJpYzk2TEUiLCJkd29yZDEiLCJkd29yZDIiLCJkd29yZDMiLCJyZWFkVU51bWVyaWMxMjhMRSIsImR3b3JkNCIsInJlYWRCdWZmZXIiLCJyZWFkQlZhckNoYXIiLCJ0b1N0cmluZyIsInJlYWRVc1ZhckNoYXIiLCJyZWFkQlZhckJ5dGUiLCJyZWFkVXNWYXJCeXRlIiwiX2RlZmF1bHQiLCJleHBvcnRzIiwibW9kdWxlIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Rva2VuL3N0cmVhbS1wYXJzZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IERlYnVnIGZyb20gJy4uL2RlYnVnJztcbmltcG9ydCB7IEludGVybmFsQ29ubmVjdGlvbk9wdGlvbnMgfSBmcm9tICcuLi9jb25uZWN0aW9uJztcblxuaW1wb3J0IHsgVFlQRSwgVG9rZW4sIENvbE1ldGFkYXRhVG9rZW4gfSBmcm9tICcuL3Rva2VuJztcblxuaW1wb3J0IGNvbE1ldGFkYXRhUGFyc2VyLCB7IENvbHVtbk1ldGFkYXRhIH0gZnJvbSAnLi9jb2xtZXRhZGF0YS10b2tlbi1wYXJzZXInO1xuaW1wb3J0IHsgZG9uZVBhcnNlciwgZG9uZUluUHJvY1BhcnNlciwgZG9uZVByb2NQYXJzZXIgfSBmcm9tICcuL2RvbmUtdG9rZW4tcGFyc2VyJztcbmltcG9ydCBlbnZDaGFuZ2VQYXJzZXIgZnJvbSAnLi9lbnYtY2hhbmdlLXRva2VuLXBhcnNlcic7XG5pbXBvcnQgeyBlcnJvclBhcnNlciwgaW5mb1BhcnNlciB9IGZyb20gJy4vaW5mb2Vycm9yLXRva2VuLXBhcnNlcic7XG5pbXBvcnQgZmVkQXV0aEluZm9QYXJzZXIgZnJvbSAnLi9mZWRhdXRoLWluZm8tcGFyc2VyJztcbmltcG9ydCBmZWF0dXJlRXh0QWNrUGFyc2VyIGZyb20gJy4vZmVhdHVyZS1leHQtYWNrLXBhcnNlcic7XG5pbXBvcnQgbG9naW5BY2tQYXJzZXIgZnJvbSAnLi9sb2dpbmFjay10b2tlbi1wYXJzZXInO1xuaW1wb3J0IG9yZGVyUGFyc2VyIGZyb20gJy4vb3JkZXItdG9rZW4tcGFyc2VyJztcbmltcG9ydCByZXR1cm5TdGF0dXNQYXJzZXIgZnJvbSAnLi9yZXR1cm5zdGF0dXMtdG9rZW4tcGFyc2VyJztcbmltcG9ydCByZXR1cm5WYWx1ZVBhcnNlciBmcm9tICcuL3JldHVybnZhbHVlLXRva2VuLXBhcnNlcic7XG5pbXBvcnQgcm93UGFyc2VyIGZyb20gJy4vcm93LXRva2VuLXBhcnNlcic7XG5pbXBvcnQgbmJjUm93UGFyc2VyIGZyb20gJy4vbmJjcm93LXRva2VuLXBhcnNlcic7XG5pbXBvcnQgc3NwaVBhcnNlciBmcm9tICcuL3NzcGktdG9rZW4tcGFyc2VyJztcblxuY29uc3QgdG9rZW5QYXJzZXJzID0ge1xuICBbVFlQRS5ET05FXTogZG9uZVBhcnNlcixcbiAgW1RZUEUuRE9ORUlOUFJPQ106IGRvbmVJblByb2NQYXJzZXIsXG4gIFtUWVBFLkRPTkVQUk9DXTogZG9uZVByb2NQYXJzZXIsXG4gIFtUWVBFLkVOVkNIQU5HRV06IGVudkNoYW5nZVBhcnNlcixcbiAgW1RZUEUuRVJST1JdOiBlcnJvclBhcnNlcixcbiAgW1RZUEUuRkVEQVVUSElORk9dOiBmZWRBdXRoSW5mb1BhcnNlcixcbiAgW1RZUEUuRkVBVFVSRUVYVEFDS106IGZlYXR1cmVFeHRBY2tQYXJzZXIsXG4gIFtUWVBFLklORk9dOiBpbmZvUGFyc2VyLFxuICBbVFlQRS5MT0dJTkFDS106IGxvZ2luQWNrUGFyc2VyLFxuICBbVFlQRS5PUkRFUl06IG9yZGVyUGFyc2VyLFxuICBbVFlQRS5SRVRVUk5TVEFUVVNdOiByZXR1cm5TdGF0dXNQYXJzZXIsXG4gIFtUWVBFLlJFVFVSTlZBTFVFXTogcmV0dXJuVmFsdWVQYXJzZXIsXG4gIFtUWVBFLlNTUEldOiBzc3BpUGFyc2VyXG59O1xuXG5leHBvcnQgdHlwZSBQYXJzZXJPcHRpb25zID0gUGljazxJbnRlcm5hbENvbm5lY3Rpb25PcHRpb25zLCAndXNlVVRDJyB8ICdsb3dlckNhc2VHdWlkcycgfCAndGRzVmVyc2lvbicgfCAndXNlQ29sdW1uTmFtZXMnIHwgJ2NvbHVtbk5hbWVSZXBsYWNlcicgfCAnY2FtZWxDYXNlQ29sdW1ucyc+O1xuXG5jbGFzcyBTdHJlYW1CdWZmZXIge1xuICBpdGVyYXRvcjogQXN5bmNJdGVyYXRvcjxCdWZmZXIsIGFueSwgdW5kZWZpbmVkPiB8IEl0ZXJhdG9yPEJ1ZmZlciwgYW55LCB1bmRlZmluZWQ+O1xuICBidWZmZXI6IEJ1ZmZlcjtcbiAgcG9zaXRpb246IG51bWJlcjtcblxuICBjb25zdHJ1Y3RvcihpdGVyYWJsZTogQXN5bmNJdGVyYWJsZTxCdWZmZXI+IHwgSXRlcmFibGU8QnVmZmVyPikge1xuICAgIHRoaXMuaXRlcmF0b3IgPSAoKGl0ZXJhYmxlIGFzIEFzeW5jSXRlcmFibGU8QnVmZmVyPilbU3ltYm9sLmFzeW5jSXRlcmF0b3JdIHx8IChpdGVyYWJsZSBhcyBJdGVyYWJsZTxCdWZmZXI+KVtTeW1ib2wuaXRlcmF0b3JdKS5jYWxsKGl0ZXJhYmxlKTtcblxuICAgIHRoaXMuYnVmZmVyID0gQnVmZmVyLmFsbG9jKDApO1xuICAgIHRoaXMucG9zaXRpb24gPSAwO1xuICB9XG5cbiAgYXN5bmMgd2FpdEZvckNodW5rKCkge1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuaXRlcmF0b3IubmV4dCgpO1xuICAgIGlmIChyZXN1bHQuZG9uZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCd1bmV4cGVjdGVkIGVuZCBvZiBkYXRhJyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucG9zaXRpb24gPT09IHRoaXMuYnVmZmVyLmxlbmd0aCkge1xuICAgICAgdGhpcy5idWZmZXIgPSByZXN1bHQudmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYnVmZmVyID0gQnVmZmVyLmNvbmNhdChbdGhpcy5idWZmZXIuc2xpY2UodGhpcy5wb3NpdGlvbiksIHJlc3VsdC52YWx1ZV0pO1xuICAgIH1cbiAgICB0aGlzLnBvc2l0aW9uID0gMDtcbiAgfVxufVxuXG5jbGFzcyBQYXJzZXIge1xuICBkZWJ1ZzogRGVidWc7XG4gIGNvbE1ldGFkYXRhOiBDb2x1bW5NZXRhZGF0YVtdO1xuICBvcHRpb25zOiBQYXJzZXJPcHRpb25zO1xuXG4gIHN1c3BlbmRlZDogYm9vbGVhbjtcbiAgbmV4dDogKCgpID0+IHZvaWQpIHwgdW5kZWZpbmVkO1xuICBzdHJlYW1CdWZmZXI6IFN0cmVhbUJ1ZmZlcjtcblxuICBzdGF0aWMgYXN5bmMgKnBhcnNlVG9rZW5zKGl0ZXJhYmxlOiBBc3luY0l0ZXJhYmxlPEJ1ZmZlcj4gfCBJdGVyYWJsZTxCdWZmZXI+LCBkZWJ1ZzogRGVidWcsIG9wdGlvbnM6IFBhcnNlck9wdGlvbnMsIGNvbE1ldGFkYXRhOiBDb2x1bW5NZXRhZGF0YVtdID0gW10pIHtcbiAgICBsZXQgdG9rZW46IFRva2VuIHwgdW5kZWZpbmVkO1xuICAgIGNvbnN0IG9uRG9uZVBhcnNpbmcgPSAodDogVG9rZW4gfCB1bmRlZmluZWQpID0+IHsgdG9rZW4gPSB0OyB9O1xuXG4gICAgY29uc3Qgc3RyZWFtQnVmZmVyID0gbmV3IFN0cmVhbUJ1ZmZlcihpdGVyYWJsZSk7XG5cbiAgICBjb25zdCBwYXJzZXIgPSBuZXcgUGFyc2VyKHN0cmVhbUJ1ZmZlciwgZGVidWcsIG9wdGlvbnMpO1xuICAgIHBhcnNlci5jb2xNZXRhZGF0YSA9IGNvbE1ldGFkYXRhO1xuXG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHN0cmVhbUJ1ZmZlci53YWl0Rm9yQ2h1bmsoKTtcbiAgICAgIH0gY2F0Y2ggKGVycjogdW5rbm93bikge1xuICAgICAgICBpZiAoc3RyZWFtQnVmZmVyLnBvc2l0aW9uID09PSBzdHJlYW1CdWZmZXIuYnVmZmVyLmxlbmd0aCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRocm93IGVycjtcbiAgICAgIH1cblxuICAgICAgaWYgKHBhcnNlci5zdXNwZW5kZWQpIHtcbiAgICAgICAgLy8gVW5zdXNwZW5kIGFuZCBjb250aW51ZSBmcm9tIHdoZXJlIGV2ZXIgd2UgbGVmdCBvZmYuXG4gICAgICAgIHBhcnNlci5zdXNwZW5kZWQgPSBmYWxzZTtcbiAgICAgICAgY29uc3QgbmV4dCA9IHBhcnNlci5uZXh0ITtcblxuICAgICAgICBuZXh0KCk7XG5cbiAgICAgICAgLy8gQ2hlY2sgaWYgYSBuZXcgdG9rZW4gd2FzIHBhcnNlZCBhZnRlciB1bnN1c3BlbnNpb24uXG4gICAgICAgIGlmICghcGFyc2VyLnN1c3BlbmRlZCAmJiB0b2tlbikge1xuICAgICAgICAgIGlmICh0b2tlbiBpbnN0YW5jZW9mIENvbE1ldGFkYXRhVG9rZW4pIHtcbiAgICAgICAgICAgIHBhcnNlci5jb2xNZXRhZGF0YSA9IHRva2VuLmNvbHVtbnM7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgeWllbGQgdG9rZW47XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgd2hpbGUgKCFwYXJzZXIuc3VzcGVuZGVkICYmIHBhcnNlci5wb3NpdGlvbiArIDEgPD0gcGFyc2VyLmJ1ZmZlci5sZW5ndGgpIHtcbiAgICAgICAgY29uc3QgdHlwZSA9IHBhcnNlci5idWZmZXIucmVhZFVJbnQ4KHBhcnNlci5wb3NpdGlvbik7XG5cbiAgICAgICAgcGFyc2VyLnBvc2l0aW9uICs9IDE7XG5cbiAgICAgICAgaWYgKHR5cGUgPT09IFRZUEUuQ09MTUVUQURBVEEpIHtcbiAgICAgICAgICBjb25zdCB0b2tlbiA9IGF3YWl0IGNvbE1ldGFkYXRhUGFyc2VyKHBhcnNlcik7XG4gICAgICAgICAgcGFyc2VyLmNvbE1ldGFkYXRhID0gdG9rZW4uY29sdW1ucztcbiAgICAgICAgICB5aWVsZCB0b2tlbjtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSBUWVBFLlJPVykge1xuICAgICAgICAgIHlpZWxkIHJvd1BhcnNlcihwYXJzZXIpO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09IFRZUEUuTkJDUk9XKSB7XG4gICAgICAgICAgeWllbGQgbmJjUm93UGFyc2VyKHBhcnNlcik7XG4gICAgICAgIH0gZWxzZSBpZiAodG9rZW5QYXJzZXJzW3R5cGVdKSB7XG4gICAgICAgICAgdG9rZW5QYXJzZXJzW3R5cGVdKHBhcnNlciwgcGFyc2VyLm9wdGlvbnMsIG9uRG9uZVBhcnNpbmcpO1xuXG4gICAgICAgICAgLy8gQ2hlY2sgaWYgYSBuZXcgdG9rZW4gd2FzIHBhcnNlZCBhZnRlciB1bnN1c3BlbnNpb24uXG4gICAgICAgICAgaWYgKCFwYXJzZXIuc3VzcGVuZGVkICYmIHRva2VuKSB7XG4gICAgICAgICAgICBpZiAodG9rZW4gaW5zdGFuY2VvZiBDb2xNZXRhZGF0YVRva2VuKSB7XG4gICAgICAgICAgICAgIHBhcnNlci5jb2xNZXRhZGF0YSA9IHRva2VuLmNvbHVtbnM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB5aWVsZCB0b2tlbjtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmtub3duIHR5cGU6ICcgKyB0eXBlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHN0cmVhbUJ1ZmZlcjogU3RyZWFtQnVmZmVyLCBkZWJ1ZzogRGVidWcsIG9wdGlvbnM6IFBhcnNlck9wdGlvbnMpIHtcbiAgICB0aGlzLmRlYnVnID0gZGVidWc7XG4gICAgdGhpcy5jb2xNZXRhZGF0YSA9IFtdO1xuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG5cbiAgICB0aGlzLnN0cmVhbUJ1ZmZlciA9IHN0cmVhbUJ1ZmZlcjtcbiAgICB0aGlzLnN1c3BlbmRlZCA9IGZhbHNlO1xuICAgIHRoaXMubmV4dCA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGdldCBidWZmZXIoKSB7XG4gICAgcmV0dXJuIHRoaXMuc3RyZWFtQnVmZmVyLmJ1ZmZlcjtcbiAgfVxuXG4gIGdldCBwb3NpdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5zdHJlYW1CdWZmZXIucG9zaXRpb247XG4gIH1cblxuICBzZXQgcG9zaXRpb24odmFsdWUpIHtcbiAgICB0aGlzLnN0cmVhbUJ1ZmZlci5wb3NpdGlvbiA9IHZhbHVlO1xuICB9XG5cbiAgc3VzcGVuZChuZXh0OiAoKSA9PiB2b2lkKSB7XG4gICAgdGhpcy5zdXNwZW5kZWQgPSB0cnVlO1xuICAgIHRoaXMubmV4dCA9IG5leHQ7XG4gIH1cblxuICBhd2FpdERhdGEobGVuZ3RoOiBudW1iZXIsIGNhbGxiYWNrOiAoKSA9PiB2b2lkKSB7XG4gICAgaWYgKHRoaXMucG9zaXRpb24gKyBsZW5ndGggPD0gdGhpcy5idWZmZXIubGVuZ3RoKSB7XG4gICAgICBjYWxsYmFjaygpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnN1c3BlbmQoKCkgPT4ge1xuICAgICAgICB0aGlzLmF3YWl0RGF0YShsZW5ndGgsIGNhbGxiYWNrKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHJlYWRJbnQ4KGNhbGxiYWNrOiAoZGF0YTogbnVtYmVyKSA9PiB2b2lkKSB7XG4gICAgdGhpcy5hd2FpdERhdGEoMSwgKCkgPT4ge1xuICAgICAgY29uc3QgZGF0YSA9IHRoaXMuYnVmZmVyLnJlYWRJbnQ4KHRoaXMucG9zaXRpb24pO1xuICAgICAgdGhpcy5wb3NpdGlvbiArPSAxO1xuICAgICAgY2FsbGJhY2soZGF0YSk7XG4gICAgfSk7XG4gIH1cblxuICByZWFkVUludDgoY2FsbGJhY2s6IChkYXRhOiBudW1iZXIpID0+IHZvaWQpIHtcbiAgICB0aGlzLmF3YWl0RGF0YSgxLCAoKSA9PiB7XG4gICAgICBjb25zdCBkYXRhID0gdGhpcy5idWZmZXIucmVhZFVJbnQ4KHRoaXMucG9zaXRpb24pO1xuICAgICAgdGhpcy5wb3NpdGlvbiArPSAxO1xuICAgICAgY2FsbGJhY2soZGF0YSk7XG4gICAgfSk7XG4gIH1cblxuICByZWFkSW50MTZMRShjYWxsYmFjazogKGRhdGE6IG51bWJlcikgPT4gdm9pZCkge1xuICAgIHRoaXMuYXdhaXREYXRhKDIsICgpID0+IHtcbiAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLmJ1ZmZlci5yZWFkSW50MTZMRSh0aGlzLnBvc2l0aW9uKTtcbiAgICAgIHRoaXMucG9zaXRpb24gKz0gMjtcbiAgICAgIGNhbGxiYWNrKGRhdGEpO1xuICAgIH0pO1xuICB9XG5cbiAgcmVhZEludDE2QkUoY2FsbGJhY2s6IChkYXRhOiBudW1iZXIpID0+IHZvaWQpIHtcbiAgICB0aGlzLmF3YWl0RGF0YSgyLCAoKSA9PiB7XG4gICAgICBjb25zdCBkYXRhID0gdGhpcy5idWZmZXIucmVhZEludDE2QkUodGhpcy5wb3NpdGlvbik7XG4gICAgICB0aGlzLnBvc2l0aW9uICs9IDI7XG4gICAgICBjYWxsYmFjayhkYXRhKTtcbiAgICB9KTtcbiAgfVxuXG4gIHJlYWRVSW50MTZMRShjYWxsYmFjazogKGRhdGE6IG51bWJlcikgPT4gdm9pZCkge1xuICAgIHRoaXMuYXdhaXREYXRhKDIsICgpID0+IHtcbiAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLmJ1ZmZlci5yZWFkVUludDE2TEUodGhpcy5wb3NpdGlvbik7XG4gICAgICB0aGlzLnBvc2l0aW9uICs9IDI7XG4gICAgICBjYWxsYmFjayhkYXRhKTtcbiAgICB9KTtcbiAgfVxuXG4gIHJlYWRVSW50MTZCRShjYWxsYmFjazogKGRhdGE6IG51bWJlcikgPT4gdm9pZCkge1xuICAgIHRoaXMuYXdhaXREYXRhKDIsICgpID0+IHtcbiAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLmJ1ZmZlci5yZWFkVUludDE2QkUodGhpcy5wb3NpdGlvbik7XG4gICAgICB0aGlzLnBvc2l0aW9uICs9IDI7XG4gICAgICBjYWxsYmFjayhkYXRhKTtcbiAgICB9KTtcbiAgfVxuXG4gIHJlYWRJbnQzMkxFKGNhbGxiYWNrOiAoZGF0YTogbnVtYmVyKSA9PiB2b2lkKSB7XG4gICAgdGhpcy5hd2FpdERhdGEoNCwgKCkgPT4ge1xuICAgICAgY29uc3QgZGF0YSA9IHRoaXMuYnVmZmVyLnJlYWRJbnQzMkxFKHRoaXMucG9zaXRpb24pO1xuICAgICAgdGhpcy5wb3NpdGlvbiArPSA0O1xuICAgICAgY2FsbGJhY2soZGF0YSk7XG4gICAgfSk7XG4gIH1cblxuICByZWFkSW50MzJCRShjYWxsYmFjazogKGRhdGE6IG51bWJlcikgPT4gdm9pZCkge1xuICAgIHRoaXMuYXdhaXREYXRhKDQsICgpID0+IHtcbiAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLmJ1ZmZlci5yZWFkSW50MzJCRSh0aGlzLnBvc2l0aW9uKTtcbiAgICAgIHRoaXMucG9zaXRpb24gKz0gNDtcbiAgICAgIGNhbGxiYWNrKGRhdGEpO1xuICAgIH0pO1xuICB9XG5cbiAgcmVhZFVJbnQzMkxFKGNhbGxiYWNrOiAoZGF0YTogbnVtYmVyKSA9PiB2b2lkKSB7XG4gICAgdGhpcy5hd2FpdERhdGEoNCwgKCkgPT4ge1xuICAgICAgY29uc3QgZGF0YSA9IHRoaXMuYnVmZmVyLnJlYWRVSW50MzJMRSh0aGlzLnBvc2l0aW9uKTtcbiAgICAgIHRoaXMucG9zaXRpb24gKz0gNDtcbiAgICAgIGNhbGxiYWNrKGRhdGEpO1xuICAgIH0pO1xuICB9XG5cbiAgcmVhZFVJbnQzMkJFKGNhbGxiYWNrOiAoZGF0YTogbnVtYmVyKSA9PiB2b2lkKSB7XG4gICAgdGhpcy5hd2FpdERhdGEoNCwgKCkgPT4ge1xuICAgICAgY29uc3QgZGF0YSA9IHRoaXMuYnVmZmVyLnJlYWRVSW50MzJCRSh0aGlzLnBvc2l0aW9uKTtcbiAgICAgIHRoaXMucG9zaXRpb24gKz0gNDtcbiAgICAgIGNhbGxiYWNrKGRhdGEpO1xuICAgIH0pO1xuICB9XG5cbiAgcmVhZEJpZ0ludDY0TEUoY2FsbGJhY2s6IChkYXRhOiBiaWdpbnQpID0+IHZvaWQpIHtcbiAgICB0aGlzLmF3YWl0RGF0YSg4LCAoKSA9PiB7XG4gICAgICBjb25zdCBkYXRhID0gdGhpcy5idWZmZXIucmVhZEJpZ0ludDY0TEUodGhpcy5wb3NpdGlvbik7XG4gICAgICB0aGlzLnBvc2l0aW9uICs9IDg7XG4gICAgICBjYWxsYmFjayhkYXRhKTtcbiAgICB9KTtcbiAgfVxuXG4gIHJlYWRJbnQ2NExFKGNhbGxiYWNrOiAoZGF0YTogbnVtYmVyKSA9PiB2b2lkKSB7XG4gICAgdGhpcy5hd2FpdERhdGEoOCwgKCkgPT4ge1xuICAgICAgY29uc3QgZGF0YSA9IE1hdGgucG93KDIsIDMyKSAqIHRoaXMuYnVmZmVyLnJlYWRJbnQzMkxFKHRoaXMucG9zaXRpb24gKyA0KSArICgodGhpcy5idWZmZXJbdGhpcy5wb3NpdGlvbiArIDRdICYgMHg4MCkgPT09IDB4ODAgPyAxIDogLTEpICogdGhpcy5idWZmZXIucmVhZFVJbnQzMkxFKHRoaXMucG9zaXRpb24pO1xuICAgICAgdGhpcy5wb3NpdGlvbiArPSA4O1xuICAgICAgY2FsbGJhY2soZGF0YSk7XG4gICAgfSk7XG4gIH1cblxuICByZWFkSW50NjRCRShjYWxsYmFjazogKGRhdGE6IG51bWJlcikgPT4gdm9pZCkge1xuICAgIHRoaXMuYXdhaXREYXRhKDgsICgpID0+IHtcbiAgICAgIGNvbnN0IGRhdGEgPSBNYXRoLnBvdygyLCAzMikgKiB0aGlzLmJ1ZmZlci5yZWFkSW50MzJCRSh0aGlzLnBvc2l0aW9uKSArICgodGhpcy5idWZmZXJbdGhpcy5wb3NpdGlvbl0gJiAweDgwKSA9PT0gMHg4MCA/IDEgOiAtMSkgKiB0aGlzLmJ1ZmZlci5yZWFkVUludDMyQkUodGhpcy5wb3NpdGlvbiArIDQpO1xuICAgICAgdGhpcy5wb3NpdGlvbiArPSA4O1xuICAgICAgY2FsbGJhY2soZGF0YSk7XG4gICAgfSk7XG4gIH1cblxuICByZWFkQmlnVUludDY0TEUoY2FsbGJhY2s6IChkYXRhOiBiaWdpbnQpID0+IHZvaWQpIHtcbiAgICB0aGlzLmF3YWl0RGF0YSg4LCAoKSA9PiB7XG4gICAgICBjb25zdCBkYXRhID0gdGhpcy5idWZmZXIucmVhZEJpZ1VJbnQ2NExFKHRoaXMucG9zaXRpb24pO1xuICAgICAgdGhpcy5wb3NpdGlvbiArPSA4O1xuICAgICAgY2FsbGJhY2soZGF0YSk7XG4gICAgfSk7XG4gIH1cblxuICByZWFkVUludDY0TEUoY2FsbGJhY2s6IChkYXRhOiBudW1iZXIpID0+IHZvaWQpIHtcbiAgICB0aGlzLmF3YWl0RGF0YSg4LCAoKSA9PiB7XG4gICAgICBjb25zdCBkYXRhID0gTWF0aC5wb3coMiwgMzIpICogdGhpcy5idWZmZXIucmVhZFVJbnQzMkxFKHRoaXMucG9zaXRpb24gKyA0KSArIHRoaXMuYnVmZmVyLnJlYWRVSW50MzJMRSh0aGlzLnBvc2l0aW9uKTtcbiAgICAgIHRoaXMucG9zaXRpb24gKz0gODtcbiAgICAgIGNhbGxiYWNrKGRhdGEpO1xuICAgIH0pO1xuICB9XG5cbiAgcmVhZFVJbnQ2NEJFKGNhbGxiYWNrOiAoZGF0YTogbnVtYmVyKSA9PiB2b2lkKSB7XG4gICAgdGhpcy5hd2FpdERhdGEoOCwgKCkgPT4ge1xuICAgICAgY29uc3QgZGF0YSA9IE1hdGgucG93KDIsIDMyKSAqIHRoaXMuYnVmZmVyLnJlYWRVSW50MzJCRSh0aGlzLnBvc2l0aW9uKSArIHRoaXMuYnVmZmVyLnJlYWRVSW50MzJCRSh0aGlzLnBvc2l0aW9uICsgNCk7XG4gICAgICB0aGlzLnBvc2l0aW9uICs9IDg7XG4gICAgICBjYWxsYmFjayhkYXRhKTtcbiAgICB9KTtcbiAgfVxuXG4gIHJlYWRGbG9hdExFKGNhbGxiYWNrOiAoZGF0YTogbnVtYmVyKSA9PiB2b2lkKSB7XG4gICAgdGhpcy5hd2FpdERhdGEoNCwgKCkgPT4ge1xuICAgICAgY29uc3QgZGF0YSA9IHRoaXMuYnVmZmVyLnJlYWRGbG9hdExFKHRoaXMucG9zaXRpb24pO1xuICAgICAgdGhpcy5wb3NpdGlvbiArPSA0O1xuICAgICAgY2FsbGJhY2soZGF0YSk7XG4gICAgfSk7XG4gIH1cblxuICByZWFkRmxvYXRCRShjYWxsYmFjazogKGRhdGE6IG51bWJlcikgPT4gdm9pZCkge1xuICAgIHRoaXMuYXdhaXREYXRhKDQsICgpID0+IHtcbiAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLmJ1ZmZlci5yZWFkRmxvYXRCRSh0aGlzLnBvc2l0aW9uKTtcbiAgICAgIHRoaXMucG9zaXRpb24gKz0gNDtcbiAgICAgIGNhbGxiYWNrKGRhdGEpO1xuICAgIH0pO1xuICB9XG5cbiAgcmVhZERvdWJsZUxFKGNhbGxiYWNrOiAoZGF0YTogbnVtYmVyKSA9PiB2b2lkKSB7XG4gICAgdGhpcy5hd2FpdERhdGEoOCwgKCkgPT4ge1xuICAgICAgY29uc3QgZGF0YSA9IHRoaXMuYnVmZmVyLnJlYWREb3VibGVMRSh0aGlzLnBvc2l0aW9uKTtcbiAgICAgIHRoaXMucG9zaXRpb24gKz0gODtcbiAgICAgIGNhbGxiYWNrKGRhdGEpO1xuICAgIH0pO1xuICB9XG5cbiAgcmVhZERvdWJsZUJFKGNhbGxiYWNrOiAoZGF0YTogbnVtYmVyKSA9PiB2b2lkKSB7XG4gICAgdGhpcy5hd2FpdERhdGEoOCwgKCkgPT4ge1xuICAgICAgY29uc3QgZGF0YSA9IHRoaXMuYnVmZmVyLnJlYWREb3VibGVCRSh0aGlzLnBvc2l0aW9uKTtcbiAgICAgIHRoaXMucG9zaXRpb24gKz0gODtcbiAgICAgIGNhbGxiYWNrKGRhdGEpO1xuICAgIH0pO1xuICB9XG5cbiAgcmVhZFVJbnQyNExFKGNhbGxiYWNrOiAoZGF0YTogbnVtYmVyKSA9PiB2b2lkKSB7XG4gICAgdGhpcy5hd2FpdERhdGEoMywgKCkgPT4ge1xuICAgICAgY29uc3QgbG93ID0gdGhpcy5idWZmZXIucmVhZFVJbnQxNkxFKHRoaXMucG9zaXRpb24pO1xuICAgICAgY29uc3QgaGlnaCA9IHRoaXMuYnVmZmVyLnJlYWRVSW50OCh0aGlzLnBvc2l0aW9uICsgMik7XG5cbiAgICAgIHRoaXMucG9zaXRpb24gKz0gMztcblxuICAgICAgY2FsbGJhY2sobG93IHwgKGhpZ2ggPDwgMTYpKTtcbiAgICB9KTtcbiAgfVxuXG4gIHJlYWRVSW50NDBMRShjYWxsYmFjazogKGRhdGE6IG51bWJlcikgPT4gdm9pZCkge1xuICAgIHRoaXMuYXdhaXREYXRhKDUsICgpID0+IHtcbiAgICAgIGNvbnN0IGxvdyA9IHRoaXMuYnVmZmVyLnJlYWRVSW50MzJMRSh0aGlzLnBvc2l0aW9uKTtcbiAgICAgIGNvbnN0IGhpZ2ggPSB0aGlzLmJ1ZmZlci5yZWFkVUludDgodGhpcy5wb3NpdGlvbiArIDQpO1xuXG4gICAgICB0aGlzLnBvc2l0aW9uICs9IDU7XG5cbiAgICAgIGNhbGxiYWNrKCgweDEwMDAwMDAwMCAqIGhpZ2gpICsgbG93KTtcbiAgICB9KTtcbiAgfVxuXG4gIHJlYWRVTnVtZXJpYzY0TEUoY2FsbGJhY2s6IChkYXRhOiBudW1iZXIpID0+IHZvaWQpIHtcbiAgICB0aGlzLmF3YWl0RGF0YSg4LCAoKSA9PiB7XG4gICAgICBjb25zdCBsb3cgPSB0aGlzLmJ1ZmZlci5yZWFkVUludDMyTEUodGhpcy5wb3NpdGlvbik7XG4gICAgICBjb25zdCBoaWdoID0gdGhpcy5idWZmZXIucmVhZFVJbnQzMkxFKHRoaXMucG9zaXRpb24gKyA0KTtcblxuICAgICAgdGhpcy5wb3NpdGlvbiArPSA4O1xuXG4gICAgICBjYWxsYmFjaygoMHgxMDAwMDAwMDAgKiBoaWdoKSArIGxvdyk7XG4gICAgfSk7XG4gIH1cblxuICByZWFkVU51bWVyaWM5NkxFKGNhbGxiYWNrOiAoZGF0YTogbnVtYmVyKSA9PiB2b2lkKSB7XG4gICAgdGhpcy5hd2FpdERhdGEoMTIsICgpID0+IHtcbiAgICAgIGNvbnN0IGR3b3JkMSA9IHRoaXMuYnVmZmVyLnJlYWRVSW50MzJMRSh0aGlzLnBvc2l0aW9uKTtcbiAgICAgIGNvbnN0IGR3b3JkMiA9IHRoaXMuYnVmZmVyLnJlYWRVSW50MzJMRSh0aGlzLnBvc2l0aW9uICsgNCk7XG4gICAgICBjb25zdCBkd29yZDMgPSB0aGlzLmJ1ZmZlci5yZWFkVUludDMyTEUodGhpcy5wb3NpdGlvbiArIDgpO1xuXG4gICAgICB0aGlzLnBvc2l0aW9uICs9IDEyO1xuXG4gICAgICBjYWxsYmFjayhkd29yZDEgKyAoMHgxMDAwMDAwMDAgKiBkd29yZDIpICsgKDB4MTAwMDAwMDAwICogMHgxMDAwMDAwMDAgKiBkd29yZDMpKTtcbiAgICB9KTtcbiAgfVxuXG4gIHJlYWRVTnVtZXJpYzEyOExFKGNhbGxiYWNrOiAoZGF0YTogbnVtYmVyKSA9PiB2b2lkKSB7XG4gICAgdGhpcy5hd2FpdERhdGEoMTYsICgpID0+IHtcbiAgICAgIGNvbnN0IGR3b3JkMSA9IHRoaXMuYnVmZmVyLnJlYWRVSW50MzJMRSh0aGlzLnBvc2l0aW9uKTtcbiAgICAgIGNvbnN0IGR3b3JkMiA9IHRoaXMuYnVmZmVyLnJlYWRVSW50MzJMRSh0aGlzLnBvc2l0aW9uICsgNCk7XG4gICAgICBjb25zdCBkd29yZDMgPSB0aGlzLmJ1ZmZlci5yZWFkVUludDMyTEUodGhpcy5wb3NpdGlvbiArIDgpO1xuICAgICAgY29uc3QgZHdvcmQ0ID0gdGhpcy5idWZmZXIucmVhZFVJbnQzMkxFKHRoaXMucG9zaXRpb24gKyAxMik7XG5cbiAgICAgIHRoaXMucG9zaXRpb24gKz0gMTY7XG5cbiAgICAgIGNhbGxiYWNrKGR3b3JkMSArICgweDEwMDAwMDAwMCAqIGR3b3JkMikgKyAoMHgxMDAwMDAwMDAgKiAweDEwMDAwMDAwMCAqIGR3b3JkMykgKyAoMHgxMDAwMDAwMDAgKiAweDEwMDAwMDAwMCAqIDB4MTAwMDAwMDAwICogZHdvcmQ0KSk7XG4gICAgfSk7XG4gIH1cblxuICAvLyBWYXJpYWJsZSBsZW5ndGggZGF0YVxuXG4gIHJlYWRCdWZmZXIobGVuZ3RoOiBudW1iZXIsIGNhbGxiYWNrOiAoZGF0YTogQnVmZmVyKSA9PiB2b2lkKSB7XG4gICAgdGhpcy5hd2FpdERhdGEobGVuZ3RoLCAoKSA9PiB7XG4gICAgICBjb25zdCBkYXRhID0gdGhpcy5idWZmZXIuc2xpY2UodGhpcy5wb3NpdGlvbiwgdGhpcy5wb3NpdGlvbiArIGxlbmd0aCk7XG4gICAgICB0aGlzLnBvc2l0aW9uICs9IGxlbmd0aDtcbiAgICAgIGNhbGxiYWNrKGRhdGEpO1xuICAgIH0pO1xuICB9XG5cbiAgLy8gUmVhZCBhIFVuaWNvZGUgU3RyaW5nIChCVkFSQ0hBUilcbiAgcmVhZEJWYXJDaGFyKGNhbGxiYWNrOiAoZGF0YTogc3RyaW5nKSA9PiB2b2lkKSB7XG4gICAgdGhpcy5yZWFkVUludDgoKGxlbmd0aCkgPT4ge1xuICAgICAgdGhpcy5yZWFkQnVmZmVyKGxlbmd0aCAqIDIsIChkYXRhKSA9PiB7XG4gICAgICAgIGNhbGxiYWNrKGRhdGEudG9TdHJpbmcoJ3VjczInKSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8vIFJlYWQgYSBVbmljb2RlIFN0cmluZyAoVVNWQVJDSEFSKVxuICByZWFkVXNWYXJDaGFyKGNhbGxiYWNrOiAoZGF0YTogc3RyaW5nKSA9PiB2b2lkKSB7XG4gICAgdGhpcy5yZWFkVUludDE2TEUoKGxlbmd0aCkgPT4ge1xuICAgICAgdGhpcy5yZWFkQnVmZmVyKGxlbmd0aCAqIDIsIChkYXRhKSA9PiB7XG4gICAgICAgIGNhbGxiYWNrKGRhdGEudG9TdHJpbmcoJ3VjczInKSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8vIFJlYWQgYmluYXJ5IGRhdGEgKEJWQVJCWVRFKVxuICByZWFkQlZhckJ5dGUoY2FsbGJhY2s6IChkYXRhOiBCdWZmZXIpID0+IHZvaWQpIHtcbiAgICB0aGlzLnJlYWRVSW50OCgobGVuZ3RoKSA9PiB7XG4gICAgICB0aGlzLnJlYWRCdWZmZXIobGVuZ3RoLCBjYWxsYmFjayk7XG4gICAgfSk7XG4gIH1cblxuICAvLyBSZWFkIGJpbmFyeSBkYXRhIChVU1ZBUkJZVEUpXG4gIHJlYWRVc1ZhckJ5dGUoY2FsbGJhY2s6IChkYXRhOiBCdWZmZXIpID0+IHZvaWQpIHtcbiAgICB0aGlzLnJlYWRVSW50MTZMRSgobGVuZ3RoKSA9PiB7XG4gICAgICB0aGlzLnJlYWRCdWZmZXIobGVuZ3RoLCBjYWxsYmFjayk7XG4gICAgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgUGFyc2VyO1xubW9kdWxlLmV4cG9ydHMgPSBQYXJzZXI7XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUdBLElBQUFBLE1BQUEsR0FBQUMsT0FBQTtBQUVBLElBQUFDLHVCQUFBLEdBQUFDLHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBRyxnQkFBQSxHQUFBSCxPQUFBO0FBQ0EsSUFBQUkscUJBQUEsR0FBQUYsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFLLHFCQUFBLEdBQUFMLE9BQUE7QUFDQSxJQUFBTSxrQkFBQSxHQUFBSixzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQU8sb0JBQUEsR0FBQUwsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFRLG9CQUFBLEdBQUFOLHNCQUFB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
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stream-parser.js","names":["_token","require","_colmetadataTokenParser","_interopRequireDefault","_doneTokenParser","_envChangeTokenParser","_infoerrorTokenParser","_fedauthInfoParser","_featureExtAckParser","_loginackTokenParser","_orderTokenParser","_returnstatusTokenParser","_returnvalueTokenParser","_rowTokenParser","_nbcrowTokenParser","_sspiTokenParser","obj","__esModule","default","tokenParsers","TYPE","DONE","doneParser","DONEINPROC","doneInProcParser","DONEPROC","doneProcParser","ENVCHANGE","envChangeParser","ERROR","errorParser","FEDAUTHINFO","fedAuthInfoParser","FEATUREEXTACK","featureExtAckParser","INFO","infoParser","LOGINACK","loginAckParser","ORDER","orderParser","RETURNSTATUS","returnStatusParser","RETURNVALUE","returnValueParser","SSPI","sspiParser","StreamBuffer","iterator","buffer","position","constructor","iterable","Symbol","asyncIterator","call","Buffer","alloc","waitForChunk","result","next","done","Error","length","value","concat","slice","Parser","debug","colMetadata","options","suspended","streamBuffer","parseTokens","token","onDoneParsing","t","parser","err","ColMetadataToken","columns","type","readUInt8","COLMETADATA","colMetadataParser","ROW","rowParser","NBCROW","nbcRowParser","undefined","suspend","awaitData","callback","readInt8","data","readInt16LE","readInt16BE","readUInt16LE","readUInt16BE","readInt32LE","readInt32BE","readUInt32LE","readUInt32BE","readBigInt64LE","readInt64LE","Math","pow","readInt64BE","readBigUInt64LE","readUInt64LE","readUInt64BE","readFloatLE","readFloatBE","readDoubleLE","readDoubleBE","readUInt24LE","low","high","readUInt40LE","readUNumeric64LE","readUNumeric96LE","dword1","dword2","dword3","readUNumeric128LE","dword4","readBuffer","readBVarChar","toString","readUsVarChar","readBVarByte","readUsVarByte","_default","exports","module"],"sources":["../../src/token/stream-parser.ts"],"sourcesContent":["import Debug from '../debug';\nimport { InternalConnectionOptions } from '../connection';\n\nimport { TYPE, Token, ColMetadataToken } from './token';\n\nimport colMetadataParser, { ColumnMetadata } from './colmetadata-token-parser';\nimport { doneParser, doneInProcParser, doneProcParser } from './done-token-parser';\nimport envChangeParser from './env-change-token-parser';\nimport { errorParser, infoParser } from './infoerror-token-parser';\nimport fedAuthInfoParser from './fedauth-info-parser';\nimport featureExtAckParser from './feature-ext-ack-parser';\nimport loginAckParser from './loginack-token-parser';\nimport orderParser from './order-token-parser';\nimport returnStatusParser from './returnstatus-token-parser';\nimport returnValueParser from './returnvalue-token-parser';\nimport rowParser from './row-token-parser';\nimport nbcRowParser from './nbcrow-token-parser';\nimport sspiParser from './sspi-token-parser';\n\nconst tokenParsers = {\n [TYPE.DONE]: doneParser,\n [TYPE.DONEINPROC]: doneInProcParser,\n [TYPE.DONEPROC]: doneProcParser,\n [TYPE.ENVCHANGE]: envChangeParser,\n [TYPE.ERROR]: errorParser,\n [TYPE.FEDAUTHINFO]: fedAuthInfoParser,\n [TYPE.FEATUREEXTACK]: featureExtAckParser,\n [TYPE.INFO]: infoParser,\n [TYPE.LOGINACK]: loginAckParser,\n [TYPE.ORDER]: orderParser,\n [TYPE.RETURNSTATUS]: returnStatusParser,\n [TYPE.RETURNVALUE]: returnValueParser,\n [TYPE.SSPI]: sspiParser\n};\n\nexport type ParserOptions = Pick<InternalConnectionOptions, 'useUTC' | 'lowerCaseGuids' | 'tdsVersion' | 'useColumnNames' | 'columnNameReplacer' | 'camelCaseColumns'>;\n\nclass StreamBuffer {\n iterator: AsyncIterator<Buffer, any, undefined> | Iterator<Buffer, any, undefined>;\n buffer: Buffer;\n position: number;\n\n constructor(iterable: AsyncIterable<Buffer> | Iterable<Buffer>) {\n this.iterator = ((iterable as AsyncIterable<Buffer>)[Symbol.asyncIterator] || (iterable as Iterable<Buffer>)[Symbol.iterator]).call(iterable);\n\n this.buffer = Buffer.alloc(0);\n this.position = 0;\n }\n\n async waitForChunk() {\n const result = await this.iterator.next();\n if (result.done) {\n throw new Error('unexpected end of data');\n }\n\n if (this.position === this.buffer.length) {\n this.buffer = result.value;\n } else {\n this.buffer = Buffer.concat([this.buffer.slice(this.position), result.value]);\n }\n this.position = 0;\n }\n}\n\nclass Parser {\n debug: Debug;\n colMetadata: ColumnMetadata[];\n options: ParserOptions;\n\n suspended: boolean;\n next: (() => void) | undefined;\n streamBuffer: StreamBuffer;\n\n static async *parseTokens(iterable: AsyncIterable<Buffer> | Iterable<Buffer>, debug: Debug, options: ParserOptions, colMetadata: ColumnMetadata[] = []) {\n let token: Token | undefined;\n const onDoneParsing = (t: Token | undefined) => { token = t; };\n\n const streamBuffer = new StreamBuffer(iterable);\n\n const parser = new Parser(streamBuffer, debug, options);\n parser.colMetadata = colMetadata;\n\n while (true) {\n try {\n await streamBuffer.waitForChunk();\n } catch (err: unknown) {\n if (streamBuffer.position === streamBuffer.buffer.length) {\n return;\n }\n\n throw err;\n }\n\n if (parser.suspended) {\n // Unsuspend and continue from where ever we left off.\n parser.suspended = false;\n const next = parser.next!;\n\n next();\n\n // Check if a new token was parsed after unsuspension.\n if (!parser.suspended && token) {\n if (token instanceof ColMetadataToken) {\n parser.colMetadata = token.columns;\n }\n\n yield token;\n }\n }\n\n while (!parser.suspended && parser.position + 1 <= parser.buffer.length) {\n const type = parser.buffer.readUInt8(parser.position);\n\n parser.position += 1;\n\n if (type === TYPE.COLMETADATA) {\n const token = await colMetadataParser(parser);\n parser.colMetadata = token.columns;\n yield token;\n } else if (type === TYPE.ROW) {\n yield rowParser(parser);\n } else if (type === TYPE.NBCROW) {\n yield nbcRowParser(parser);\n } else if (tokenParsers[type]) {\n tokenParsers[type](parser, parser.options, onDoneParsing);\n\n // Check if a new token was parsed after unsuspension.\n if (!parser.suspended && token) {\n if (token instanceof ColMetadataToken) {\n parser.colMetadata = token.columns;\n }\n yield token;\n }\n } else {\n throw new Error('Unknown type: ' + type);\n }\n }\n }\n }\n\n constructor(streamBuffer: StreamBuffer, debug: Debug, options: ParserOptions) {\n this.debug = debug;\n this.colMetadata = [];\n this.options = options;\n\n this.streamBuffer = streamBuffer;\n this.suspended = false;\n this.next = undefined;\n }\n\n get buffer() {\n return this.streamBuffer.buffer;\n }\n\n get position() {\n return this.streamBuffer.position;\n }\n\n set position(value) {\n this.streamBuffer.position = value;\n }\n\n suspend(next: () => void) {\n this.suspended = true;\n this.next = next;\n }\n\n awaitData(length: number, callback: () => void) {\n if (this.position + length <= this.buffer.length) {\n callback();\n } else {\n this.suspend(() => {\n this.awaitData(length, callback);\n });\n }\n }\n\n readInt8(callback: (data: number) => void) {\n this.awaitData(1, () => {\n const data = this.buffer.readInt8(this.position);\n this.position += 1;\n callback(data);\n });\n }\n\n readUInt8(callback: (data: number) => void) {\n this.awaitData(1, () => {\n const data = this.buffer.readUInt8(this.position);\n this.position += 1;\n callback(data);\n });\n }\n\n readInt16LE(callback: (data: number) => void) {\n this.awaitData(2, () => {\n const data = this.buffer.readInt16LE(this.position);\n this.position += 2;\n callback(data);\n });\n }\n\n readInt16BE(callback: (data: number) => void) {\n this.awaitData(2, () => {\n const data = this.buffer.readInt16BE(this.position);\n this.position += 2;\n callback(data);\n });\n }\n\n readUInt16LE(callback: (data: number) => void) {\n this.awaitData(2, () => {\n const data = this.buffer.readUInt16LE(this.position);\n this.position += 2;\n callback(data);\n });\n }\n\n readUInt16BE(callback: (data: number) => void) {\n this.awaitData(2, () => {\n const data = this.buffer.readUInt16BE(this.position);\n this.position += 2;\n callback(data);\n });\n }\n\n readInt32LE(callback: (data: number) => void) {\n this.awaitData(4, () => {\n const data = this.buffer.readInt32LE(this.position);\n this.position += 4;\n callback(data);\n });\n }\n\n readInt32BE(callback: (data: number) => void) {\n this.awaitData(4, () => {\n const data = this.buffer.readInt32BE(this.position);\n this.position += 4;\n callback(data);\n });\n }\n\n readUInt32LE(callback: (data: number) => void) {\n this.awaitData(4, () => {\n const data = this.buffer.readUInt32LE(this.position);\n this.position += 4;\n callback(data);\n });\n }\n\n readUInt32BE(callback: (data: number) => void) {\n this.awaitData(4, () => {\n const data = this.buffer.readUInt32BE(this.position);\n this.position += 4;\n callback(data);\n });\n }\n\n readBigInt64LE(callback: (data: bigint) => void) {\n this.awaitData(8, () => {\n const data = this.buffer.readBigInt64LE(this.position);\n this.position += 8;\n callback(data);\n });\n }\n\n readInt64LE(callback: (data: number) => void) {\n this.awaitData(8, () => {\n 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);\n this.position += 8;\n callback(data);\n });\n }\n\n readInt64BE(callback: (data: number) => void) {\n this.awaitData(8, () => {\n 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);\n this.position += 8;\n callback(data);\n });\n }\n\n readBigUInt64LE(callback: (data: bigint) => void) {\n this.awaitData(8, () => {\n const data = this.buffer.readBigUInt64LE(this.position);\n this.position += 8;\n callback(data);\n });\n }\n\n readUInt64LE(callback: (data: number) => void) {\n this.awaitData(8, () => {\n const data = Math.pow(2, 32) * this.buffer.readUInt32LE(this.position + 4) + this.buffer.readUInt32LE(this.position);\n this.position += 8;\n callback(data);\n });\n }\n\n readUInt64BE(callback: (data: number) => void) {\n this.awaitData(8, () => {\n const data = Math.pow(2, 32) * this.buffer.readUInt32BE(this.position) + this.buffer.readUInt32BE(this.position + 4);\n this.position += 8;\n callback(data);\n });\n }\n\n readFloatLE(callback: (data: number) => void) {\n this.awaitData(4, () => {\n const data = this.buffer.readFloatLE(this.position);\n this.position += 4;\n callback(data);\n });\n }\n\n readFloatBE(callback: (data: number) => void) {\n this.awaitData(4, () => {\n const data = this.buffer.readFloatBE(this.position);\n this.position += 4;\n callback(data);\n });\n }\n\n readDoubleLE(callback: (data: number) => void) {\n this.awaitData(8, () => {\n const data = this.buffer.readDoubleLE(this.position);\n this.position += 8;\n callback(data);\n });\n }\n\n readDoubleBE(callback: (data: number) => void) {\n this.awaitData(8, () => {\n const data = this.buffer.readDoubleBE(this.position);\n this.position += 8;\n callback(data);\n });\n }\n\n readUInt24LE(callback: (data: number) => void) {\n this.awaitData(3, () => {\n const low = this.buffer.readUInt16LE(this.position);\n const high = this.buffer.readUInt8(this.position + 2);\n\n this.position += 3;\n\n callback(low | (high << 16));\n });\n }\n\n readUInt40LE(callback: (data: number) => void) {\n this.awaitData(5, () => {\n const low = this.buffer.readUInt32LE(this.position);\n const high = this.buffer.readUInt8(this.position + 4);\n\n this.position += 5;\n\n callback((0x100000000 * high) + low);\n });\n }\n\n readUNumeric64LE(callback: (data: number) => void) {\n this.awaitData(8, () => {\n const low = this.buffer.readUInt32LE(this.position);\n const high = this.buffer.readUInt32LE(this.position + 4);\n\n this.position += 8;\n\n callback((0x100000000 * high) + low);\n });\n }\n\n readUNumeric96LE(callback: (data: number) => void) {\n this.awaitData(12, () => {\n const dword1 = this.buffer.readUInt32LE(this.position);\n const dword2 = this.buffer.readUInt32LE(this.position + 4);\n const dword3 = this.buffer.readUInt32LE(this.position + 8);\n\n this.position += 12;\n\n callback(dword1 + (0x100000000 * dword2) + (0x100000000 * 0x100000000 * dword3));\n });\n }\n\n readUNumeric128LE(callback: (data: number) => void) {\n this.awaitData(16, () => {\n const dword1 = this.buffer.readUInt32LE(this.position);\n const dword2 = this.buffer.readUInt32LE(this.position + 4);\n const dword3 = this.buffer.readUInt32LE(this.position + 8);\n const dword4 = this.buffer.readUInt32LE(this.position + 12);\n\n this.position += 16;\n\n callback(dword1 + (0x100000000 * dword2) + (0x100000000 * 0x100000000 * dword3) + (0x100000000 * 0x100000000 * 0x100000000 * dword4));\n });\n }\n\n // Variable length data\n\n readBuffer(length: number, callback: (data: Buffer) => void) {\n this.awaitData(length, () => {\n const data = this.buffer.slice(this.position, this.position + length);\n this.position += length;\n callback(data);\n });\n }\n\n // Read a Unicode String (BVARCHAR)\n readBVarChar(callback: (data: string) => void) {\n this.readUInt8((length) => {\n this.readBuffer(length * 2, (data) => {\n callback(data.toString('ucs2'));\n });\n });\n }\n\n // Read a Unicode String (USVARCHAR)\n readUsVarChar(callback: (data: string) => void) {\n this.readUInt16LE((length) => {\n this.readBuffer(length * 2, (data) => {\n callback(data.toString('ucs2'));\n });\n });\n }\n\n // Read binary data (BVARBYTE)\n readBVarByte(callback: (data: Buffer) => void) {\n this.readUInt8((length) => {\n this.readBuffer(length, callback);\n });\n }\n\n // Read binary data (USVARBYTE)\n readUsVarByte(callback: (data: Buffer) => void) {\n this.readUInt16LE((length) => {\n this.readBuffer(length, callback);\n });\n }\n}\n\nexport default Parser;\nmodule.exports = Parser;\n"],"mappings":"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"}
|