tedious 16.2.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 +290 -531
- 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 +8 -35
- 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
package/lib/metadata-parser.js
CHANGED
|
@@ -5,20 +5,15 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.default = void 0;
|
|
7
7
|
exports.readCollation = readCollation;
|
|
8
|
-
|
|
9
8
|
var _collation = require("./collation");
|
|
10
|
-
|
|
11
9
|
var _dataType = require("./data-type");
|
|
12
|
-
|
|
13
10
|
var _sprintfJs = require("sprintf-js");
|
|
14
|
-
|
|
15
11
|
function readCollation(parser, callback) {
|
|
16
12
|
// s2.2.5.1.2
|
|
17
13
|
parser.readBuffer(5, collationData => {
|
|
18
14
|
callback(_collation.Collation.fromBuffer(collationData));
|
|
19
15
|
});
|
|
20
16
|
}
|
|
21
|
-
|
|
22
17
|
function readSchema(parser, callback) {
|
|
23
18
|
// s2.2.5.5.3
|
|
24
19
|
parser.readUInt8(schemaPresent => {
|
|
@@ -39,7 +34,6 @@ function readSchema(parser, callback) {
|
|
|
39
34
|
}
|
|
40
35
|
});
|
|
41
36
|
}
|
|
42
|
-
|
|
43
37
|
function readUDTInfo(parser, callback) {
|
|
44
38
|
parser.readUInt16LE(maxByteSize => {
|
|
45
39
|
parser.readBVarChar(dbname => {
|
|
@@ -59,17 +53,14 @@ function readUDTInfo(parser, callback) {
|
|
|
59
53
|
});
|
|
60
54
|
});
|
|
61
55
|
}
|
|
62
|
-
|
|
63
56
|
function metadataParse(parser, options, callback) {
|
|
64
57
|
(options.tdsVersion < '7_2' ? parser.readUInt16LE : parser.readUInt32LE).call(parser, userType => {
|
|
65
58
|
parser.readUInt16LE(flags => {
|
|
66
59
|
parser.readUInt8(typeNumber => {
|
|
67
60
|
const type = _dataType.TYPE[typeNumber];
|
|
68
|
-
|
|
69
61
|
if (!type) {
|
|
70
62
|
throw new Error((0, _sprintfJs.sprintf)('Unrecognised data type 0x%02X', typeNumber));
|
|
71
63
|
}
|
|
72
|
-
|
|
73
64
|
switch (type.name) {
|
|
74
65
|
case 'Null':
|
|
75
66
|
case 'TinyInt':
|
|
@@ -95,7 +86,6 @@ function metadataParse(parser, options, callback) {
|
|
|
95
86
|
schema: undefined,
|
|
96
87
|
udtInfo: undefined
|
|
97
88
|
});
|
|
98
|
-
|
|
99
89
|
case 'IntN':
|
|
100
90
|
case 'FloatN':
|
|
101
91
|
case 'MoneyN':
|
|
@@ -115,7 +105,6 @@ function metadataParse(parser, options, callback) {
|
|
|
115
105
|
udtInfo: undefined
|
|
116
106
|
});
|
|
117
107
|
});
|
|
118
|
-
|
|
119
108
|
case 'Variant':
|
|
120
109
|
return parser.readUInt32LE(dataLength => {
|
|
121
110
|
callback({
|
|
@@ -130,7 +119,6 @@ function metadataParse(parser, options, callback) {
|
|
|
130
119
|
udtInfo: undefined
|
|
131
120
|
});
|
|
132
121
|
});
|
|
133
|
-
|
|
134
122
|
case 'VarChar':
|
|
135
123
|
case 'Char':
|
|
136
124
|
case 'NVarChar':
|
|
@@ -150,7 +138,6 @@ function metadataParse(parser, options, callback) {
|
|
|
150
138
|
});
|
|
151
139
|
});
|
|
152
140
|
});
|
|
153
|
-
|
|
154
141
|
case 'Text':
|
|
155
142
|
case 'NText':
|
|
156
143
|
return parser.readUInt32LE(dataLength => {
|
|
@@ -168,7 +155,6 @@ function metadataParse(parser, options, callback) {
|
|
|
168
155
|
});
|
|
169
156
|
});
|
|
170
157
|
});
|
|
171
|
-
|
|
172
158
|
case 'VarBinary':
|
|
173
159
|
case 'Binary':
|
|
174
160
|
return parser.readUInt16LE(dataLength => {
|
|
@@ -184,7 +170,6 @@ function metadataParse(parser, options, callback) {
|
|
|
184
170
|
udtInfo: undefined
|
|
185
171
|
});
|
|
186
172
|
});
|
|
187
|
-
|
|
188
173
|
case 'Image':
|
|
189
174
|
return parser.readUInt32LE(dataLength => {
|
|
190
175
|
callback({
|
|
@@ -199,7 +184,6 @@ function metadataParse(parser, options, callback) {
|
|
|
199
184
|
udtInfo: undefined
|
|
200
185
|
});
|
|
201
186
|
});
|
|
202
|
-
|
|
203
187
|
case 'Xml':
|
|
204
188
|
return readSchema(parser, schema => {
|
|
205
189
|
callback({
|
|
@@ -214,7 +198,6 @@ function metadataParse(parser, options, callback) {
|
|
|
214
198
|
udtInfo: undefined
|
|
215
199
|
});
|
|
216
200
|
});
|
|
217
|
-
|
|
218
201
|
case 'Time':
|
|
219
202
|
case 'DateTime2':
|
|
220
203
|
case 'DateTimeOffset':
|
|
@@ -231,7 +214,6 @@ function metadataParse(parser, options, callback) {
|
|
|
231
214
|
udtInfo: undefined
|
|
232
215
|
});
|
|
233
216
|
});
|
|
234
|
-
|
|
235
217
|
case 'NumericN':
|
|
236
218
|
case 'DecimalN':
|
|
237
219
|
return parser.readUInt8(dataLength => {
|
|
@@ -251,7 +233,6 @@ function metadataParse(parser, options, callback) {
|
|
|
251
233
|
});
|
|
252
234
|
});
|
|
253
235
|
});
|
|
254
|
-
|
|
255
236
|
case 'UDT':
|
|
256
237
|
return readUDTInfo(parser, udtInfo => {
|
|
257
238
|
callback({
|
|
@@ -266,7 +247,6 @@ function metadataParse(parser, options, callback) {
|
|
|
266
247
|
udtInfo: udtInfo
|
|
267
248
|
});
|
|
268
249
|
});
|
|
269
|
-
|
|
270
250
|
default:
|
|
271
251
|
throw new Error((0, _sprintfJs.sprintf)('Unrecognised type %s', type.name));
|
|
272
252
|
}
|
|
@@ -274,9 +254,8 @@ function metadataParse(parser, options, callback) {
|
|
|
274
254
|
});
|
|
275
255
|
});
|
|
276
256
|
}
|
|
277
|
-
|
|
278
257
|
var _default = metadataParse;
|
|
279
258
|
exports.default = _default;
|
|
280
259
|
module.exports = metadataParse;
|
|
281
260
|
module.exports.readCollation = readCollation;
|
|
282
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJyZWFkQ29sbGF0aW9uIiwicGFyc2VyIiwiY2FsbGJhY2siLCJyZWFkQnVmZmVyIiwiY29sbGF0aW9uRGF0YSIsIkNvbGxhdGlvbiIsImZyb21CdWZmZXIiLCJyZWFkU2NoZW1hIiwicmVhZFVJbnQ4Iiwic2NoZW1hUHJlc2VudCIsInJlYWRCVmFyQ2hhciIsImRibmFtZSIsIm93bmluZ1NjaGVtYSIsInJlYWRVc1ZhckNoYXIiLCJ4bWxTY2hlbWFDb2xsZWN0aW9uIiwidW5kZWZpbmVkIiwicmVhZFVEVEluZm8iLCJyZWFkVUludDE2TEUiLCJtYXhCeXRlU2l6ZSIsInR5cGVOYW1lIiwiYXNzZW1ibHlOYW1lIiwibWV0YWRhdGFQYXJzZSIsIm9wdGlvbnMiLCJ0ZHNWZXJzaW9uIiwicmVhZFVJbnQzMkxFIiwiY2FsbCIsInVzZXJUeXBlIiwiZmxhZ3MiLCJ0eXBlTnVtYmVyIiwidHlwZSIsIlRZUEUiLCJFcnJvciIsIm5hbWUiLCJjb2xsYXRpb24iLCJwcmVjaXNpb24iLCJzY2FsZSIsImRhdGFMZW5ndGgiLCJzY2hlbWEiLCJ1ZHRJbmZvIiwibW9kdWxlIiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uL3NyYy9tZXRhZGF0YS1wYXJzZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29sbGF0aW9uIH0gZnJvbSAnLi9jb2xsYXRpb24nO1xuaW1wb3J0IFBhcnNlciwgeyBQYXJzZXJPcHRpb25zIH0gZnJvbSAnLi90b2tlbi9zdHJlYW0tcGFyc2VyJztcbmltcG9ydCB7IFRZUEUsIERhdGFUeXBlIH0gZnJvbSAnLi9kYXRhLXR5cGUnO1xuaW1wb3J0IHsgQ3J5cHRvTWV0YWRhdGEgfSBmcm9tICcuL2Fsd2F5cy1lbmNyeXB0ZWQvdHlwZXMnO1xuXG5pbXBvcnQgeyBzcHJpbnRmIH0gZnJvbSAnc3ByaW50Zi1qcyc7XG5cbmludGVyZmFjZSBYbWxTY2hlbWEge1xuICBkYm5hbWU6IHN0cmluZztcbiAgb3duaW5nU2NoZW1hOiBzdHJpbmc7XG4gIHhtbFNjaGVtYUNvbGxlY3Rpb246IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIFVkdEluZm8ge1xuICBtYXhCeXRlU2l6ZTogbnVtYmVyO1xuICBkYm5hbWU6IHN0cmluZztcbiAgb3duaW5nU2NoZW1hOiBzdHJpbmc7XG4gIHR5cGVOYW1lOiBzdHJpbmc7XG4gIGFzc2VtYmx5TmFtZTogc3RyaW5nO1xufVxuXG5leHBvcnQgdHlwZSBCYXNlTWV0YWRhdGEgPSB7XG4gIHVzZXJUeXBlOiBudW1iZXI7XG5cbiAgZmxhZ3M6IG51bWJlcjtcbiAgLyoqXG4gICAqIFRoZSBjb2x1bW4ncyB0eXBlLCBzdWNoIGFzIFZhckNoYXIsIEludCBvciBCaW5hcnkuXG4gICAqL1xuICB0eXBlOiBEYXRhVHlwZTtcblxuICBjb2xsYXRpb246IENvbGxhdGlvbiB8IHVuZGVmaW5lZDtcbiAgLyoqXG4gICAqIFRoZSBwcmVjaXNpb24uIE9ubHkgYXBwbGljYWJsZSB0byBudW1lcmljIGFuZCBkZWNpbWFsLlxuICAgKi9cbiAgcHJlY2lzaW9uOiBudW1iZXIgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIFRoZSBzY2FsZS4gT25seSBhcHBsaWNhYmxlIHRvIG51bWVyaWMsIGRlY2ltYWwsIHRpbWUsIGRhdGV0aW1lMiBhbmQgZGF0ZXRpbWVvZmZzZXQuXG4gICAqL1xuICBzY2FsZTogbnVtYmVyIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBUaGUgbGVuZ3RoLCBmb3IgY2hhciwgdmFyY2hhciwgbnZhcmNoYXIgYW5kIHZhcmJpbmFyeS5cbiAgICovXG4gIGRhdGFMZW5ndGg6IG51bWJlciB8IHVuZGVmaW5lZDtcblxuICBzY2hlbWE6IFhtbFNjaGVtYSB8IHVuZGVmaW5lZDtcblxuICB1ZHRJbmZvOiBVZHRJbmZvIHwgdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgdHlwZSBNZXRhZGF0YSA9IHtcbiAgY3J5cHRvTWV0YWRhdGE/OiBDcnlwdG9NZXRhZGF0YTtcbn0gJiBCYXNlTWV0YWRhdGE7XG5cblxuZnVuY3Rpb24gcmVhZENvbGxhdGlvbihwYXJzZXI6IFBhcnNlciwgY2FsbGJhY2s6IChjb2xsYXRpb246IENvbGxhdGlvbikgPT4gdm9pZCkge1xuICAvLyBzMi4yLjUuMS4yXG4gIHBhcnNlci5yZWFkQnVmZmVyKDUsIChjb2xsYXRpb25EYXRhKSA9PiB7XG4gICAgY2FsbGJhY2soQ29sbGF0aW9uLmZyb21CdWZmZXIoY29sbGF0aW9uRGF0YSkpO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gcmVhZFNjaGVtYShwYXJzZXI6IFBhcnNlciwgY2FsbGJhY2s6IChzY2hlbWE6IFhtbFNjaGVtYSB8IHVuZGVmaW5lZCkgPT4gdm9pZCkge1xuICAvLyBzMi4yLjUuNS4zXG4gIHBhcnNlci5yZWFkVUludDgoKHNjaGVtYVByZXNlbnQpID0+IHtcbiAgICBpZiAoc2NoZW1hUHJlc2VudCA9PT0gMHgwMSkge1xuICAgICAgcGFyc2VyLnJlYWRCVmFyQ2hhcigoZGJuYW1lKSA9PiB7XG4gICAgICAgIHBhcnNlci5yZWFkQlZhckNoYXIoKG93bmluZ1NjaGVtYSkgPT4ge1xuICAgICAgICAgIHBhcnNlci5yZWFkVXNWYXJDaGFyKCh4bWxTY2hlbWFDb2xsZWN0aW9uKSA9PiB7XG4gICAgICAgICAgICBjYWxsYmFjayh7XG4gICAgICAgICAgICAgIGRibmFtZTogZGJuYW1lLFxuICAgICAgICAgICAgICBvd25pbmdTY2hlbWE6IG93bmluZ1NjaGVtYSxcbiAgICAgICAgICAgICAgeG1sU2NoZW1hQ29sbGVjdGlvbjogeG1sU2NoZW1hQ29sbGVjdGlvblxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNhbGxiYWNrKHVuZGVmaW5lZCk7XG4gICAgfVxuICB9KTtcbn1cblxuZnVuY3Rpb24gcmVhZFVEVEluZm8ocGFyc2VyOiBQYXJzZXIsIGNhbGxiYWNrOiAodWR0SW5mbzogVWR0SW5mbyB8IHVuZGVmaW5lZCkgPT4gdm9pZCkge1xuICBwYXJzZXIucmVhZFVJbnQxNkxFKChtYXhCeXRlU2l6ZSkgPT4ge1xuICAgIHBhcnNlci5yZWFkQlZhckNoYXIoKGRibmFtZSkgPT4ge1xuICAgICAgcGFyc2VyLnJlYWRCVmFyQ2hhcigob3duaW5nU2NoZW1hKSA9PiB7XG4gICAgICAgIHBhcnNlci5yZWFkQlZhckNoYXIoKHR5cGVOYW1lKSA9PiB7XG4gICAgICAgICAgcGFyc2VyLnJlYWRVc1ZhckNoYXIoKGFzc2VtYmx5TmFtZSkgPT4ge1xuICAgICAgICAgICAgY2FsbGJhY2soe1xuICAgICAgICAgICAgICBtYXhCeXRlU2l6ZTogbWF4Qnl0ZVNpemUsXG4gICAgICAgICAgICAgIGRibmFtZTogZGJuYW1lLFxuICAgICAgICAgICAgICBvd25pbmdTY2hlbWE6IG93bmluZ1NjaGVtYSxcbiAgICAgICAgICAgICAgdHlwZU5hbWU6IHR5cGVOYW1lLFxuICAgICAgICAgICAgICBhc3NlbWJseU5hbWU6IGFzc2VtYmx5TmFtZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBtZXRhZGF0YVBhcnNlKHBhcnNlcjogUGFyc2VyLCBvcHRpb25zOiBQYXJzZXJPcHRpb25zLCBjYWxsYmFjazogKG1ldGFkYXRhOiBNZXRhZGF0YSkgPT4gdm9pZCkge1xuICAob3B0aW9ucy50ZHNWZXJzaW9uIDwgJzdfMicgPyBwYXJzZXIucmVhZFVJbnQxNkxFIDogcGFyc2VyLnJlYWRVSW50MzJMRSkuY2FsbChwYXJzZXIsICh1c2VyVHlwZSkgPT4ge1xuICAgIHBhcnNlci5yZWFkVUludDE2TEUoKGZsYWdzKSA9PiB7XG4gICAgICBwYXJzZXIucmVhZFVJbnQ4KCh0eXBlTnVtYmVyKSA9PiB7XG4gICAgICAgIGNvbnN0IHR5cGU6IERhdGFUeXBlID0gVFlQRVt0eXBlTnVtYmVyXTtcblxuICAgICAgICBpZiAoIXR5cGUpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3Ioc3ByaW50ZignVW5yZWNvZ25pc2VkIGRhdGEgdHlwZSAweCUwMlgnLCB0eXBlTnVtYmVyKSk7XG4gICAgICAgIH1cblxuICAgICAgICBzd2l0Y2ggKHR5cGUubmFtZSkge1xuICAgICAgICAgIGNhc2UgJ051bGwnOlxuICAgICAgICAgIGNhc2UgJ1RpbnlJbnQnOlxuICAgICAgICAgIGNhc2UgJ1NtYWxsSW50JzpcbiAgICAgICAgICBjYXNlICdJbnQnOlxuICAgICAgICAgIGNhc2UgJ0JpZ0ludCc6XG4gICAgICAgICAgY2FzZSAnUmVhbCc6XG4gICAgICAgICAgY2FzZSAnRmxvYXQnOlxuICAgICAgICAgIGNhc2UgJ1NtYWxsTW9uZXknOlxuICAgICAgICAgIGNhc2UgJ01vbmV5JzpcbiAgICAgICAgICBjYXNlICdCaXQnOlxuICAgICAgICAgIGNhc2UgJ1NtYWxsRGF0ZVRpbWUnOlxuICAgICAgICAgIGNhc2UgJ0RhdGVUaW1lJzpcbiAgICAgICAgICBjYXNlICdEYXRlJzpcbiAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayh7XG4gICAgICAgICAgICAgIHVzZXJUeXBlOiB1c2VyVHlwZSxcbiAgICAgICAgICAgICAgZmxhZ3M6IGZsYWdzLFxuICAgICAgICAgICAgICB0eXBlOiB0eXBlLFxuICAgICAgICAgICAgICBjb2xsYXRpb246IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgcHJlY2lzaW9uOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgIHNjYWxlOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgIGRhdGFMZW5ndGg6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgc2NoZW1hOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgIHVkdEluZm86IHVuZGVmaW5lZFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICBjYXNlICdJbnROJzpcbiAgICAgICAgICBjYXNlICdGbG9hdE4nOlxuICAgICAgICAgIGNhc2UgJ01vbmV5Tic6XG4gICAgICAgICAgY2FzZSAnQml0Tic6XG4gICAgICAgICAgY2FzZSAnVW5pcXVlSWRlbnRpZmllcic6XG4gICAgICAgICAgY2FzZSAnRGF0ZVRpbWVOJzpcbiAgICAgICAgICAgIHJldHVybiBwYXJzZXIucmVhZFVJbnQ4KChkYXRhTGVuZ3RoKSA9PiB7XG4gICAgICAgICAgICAgIGNhbGxiYWNrKHtcbiAgICAgICAgICAgICAgICB1c2VyVHlwZTogdXNlclR5cGUsXG4gICAgICAgICAgICAgICAgZmxhZ3M6IGZsYWdzLFxuICAgICAgICAgICAgICAgIHR5cGU6IHR5cGUsXG4gICAgICAgICAgICAgICAgY29sbGF0aW9uOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgcHJlY2lzaW9uOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgc2NhbGU6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICBkYXRhTGVuZ3RoOiBkYXRhTGVuZ3RoLFxuICAgICAgICAgICAgICAgIHNjaGVtYTogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIHVkdEluZm86IHVuZGVmaW5lZFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgY2FzZSAnVmFyaWFudCc6XG4gICAgICAgICAgICByZXR1cm4gcGFyc2VyLnJlYWRVSW50MzJMRSgoZGF0YUxlbmd0aCkgPT4ge1xuICAgICAgICAgICAgICBjYWxsYmFjayh7XG4gICAgICAgICAgICAgICAgdXNlclR5cGU6IHVzZXJUeXBlLFxuICAgICAgICAgICAgICAgIGZsYWdzOiBmbGFncyxcbiAgICAgICAgICAgICAgICB0eXBlOiB0eXBlLFxuICAgICAgICAgICAgICAgIGNvbGxhdGlvbjogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIHByZWNpc2lvbjogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIHNjYWxlOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgZGF0YUxlbmd0aDogZGF0YUxlbmd0aCxcbiAgICAgICAgICAgICAgICBzY2hlbWE6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICB1ZHRJbmZvOiB1bmRlZmluZWRcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgIGNhc2UgJ1ZhckNoYXInOlxuICAgICAgICAgIGNhc2UgJ0NoYXInOlxuICAgICAgICAgIGNhc2UgJ05WYXJDaGFyJzpcbiAgICAgICAgICBjYXNlICdOQ2hhcic6XG4gICAgICAgICAgICByZXR1cm4gcGFyc2VyLnJlYWRVSW50MTZMRSgoZGF0YUxlbmd0aCkgPT4ge1xuICAgICAgICAgICAgICByZWFkQ29sbGF0aW9uKHBhcnNlciwgKGNvbGxhdGlvbikgPT4ge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKHtcbiAgICAgICAgICAgICAgICAgIHVzZXJUeXBlOiB1c2VyVHlwZSxcbiAgICAgICAgICAgICAgICAgIGZsYWdzOiBmbGFncyxcbiAgICAgICAgICAgICAgICAgIHR5cGU6IHR5cGUsXG4gICAgICAgICAgICAgICAgICBjb2xsYXRpb246IGNvbGxhdGlvbixcbiAgICAgICAgICAgICAgICAgIHByZWNpc2lvbjogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgc2NhbGU6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgIGRhdGFMZW5ndGg6IGRhdGFMZW5ndGgsXG4gICAgICAgICAgICAgICAgICBzY2hlbWE6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgIHVkdEluZm86IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgY2FzZSAnVGV4dCc6XG4gICAgICAgICAgY2FzZSAnTlRleHQnOlxuICAgICAgICAgICAgcmV0dXJuIHBhcnNlci5yZWFkVUludDMyTEUoKGRhdGFMZW5ndGgpID0+IHtcbiAgICAgICAgICAgICAgcmVhZENvbGxhdGlvbihwYXJzZXIsIChjb2xsYXRpb24pID0+IHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayh7XG4gICAgICAgICAgICAgICAgICB1c2VyVHlwZTogdXNlclR5cGUsXG4gICAgICAgICAgICAgICAgICBmbGFnczogZmxhZ3MsXG4gICAgICAgICAgICAgICAgICB0eXBlOiB0eXBlLFxuICAgICAgICAgICAgICAgICAgY29sbGF0aW9uOiBjb2xsYXRpb24sXG4gICAgICAgICAgICAgICAgICBwcmVjaXNpb246IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgIHNjYWxlOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICBkYXRhTGVuZ3RoOiBkYXRhTGVuZ3RoLFxuICAgICAgICAgICAgICAgICAgc2NoZW1hOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICB1ZHRJbmZvOiB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgIGNhc2UgJ1ZhckJpbmFyeSc6XG4gICAgICAgICAgY2FzZSAnQmluYXJ5JzpcbiAgICAgICAgICAgIHJldHVybiBwYXJzZXIucmVhZFVJbnQxNkxFKChkYXRhTGVuZ3RoKSA9PiB7XG4gICAgICAgICAgICAgIGNhbGxiYWNrKHtcbiAgICAgICAgICAgICAgICB1c2VyVHlwZTogdXNlclR5cGUsXG4gICAgICAgICAgICAgICAgZmxhZ3M6IGZsYWdzLFxuICAgICAgICAgICAgICAgIHR5cGU6IHR5cGUsXG4gICAgICAgICAgICAgICAgY29sbGF0aW9uOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgcHJlY2lzaW9uOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgc2NhbGU6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICBkYXRhTGVuZ3RoOiBkYXRhTGVuZ3RoLFxuICAgICAgICAgICAgICAgIHNjaGVtYTogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIHVkdEluZm86IHVuZGVmaW5lZFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgY2FzZSAnSW1hZ2UnOlxuICAgICAgICAgICAgcmV0dXJuIHBhcnNlci5yZWFkVUludDMyTEUoKGRhdGFMZW5ndGgpID0+IHtcbiAgICAgICAgICAgICAgY2FsbGJhY2soe1xuICAgICAgICAgICAgICAgIHVzZXJUeXBlOiB1c2VyVHlwZSxcbiAgICAgICAgICAgICAgICBmbGFnczogZmxhZ3MsXG4gICAgICAgICAgICAgICAgdHlwZTogdHlwZSxcbiAgICAgICAgICAgICAgICBjb2xsYXRpb246IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICBwcmVjaXNpb246IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICBzY2FsZTogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIGRhdGFMZW5ndGg6IGRhdGFMZW5ndGgsXG4gICAgICAgICAgICAgICAgc2NoZW1hOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgdWR0SW5mbzogdW5kZWZpbmVkXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICBjYXNlICdYbWwnOlxuICAgICAgICAgICAgcmV0dXJuIHJlYWRTY2hlbWEocGFyc2VyLCAoc2NoZW1hKSA9PiB7XG4gICAgICAgICAgICAgIGNhbGxiYWNrKHtcbiAgICAgICAgICAgICAgICB1c2VyVHlwZTogdXNlclR5cGUsXG4gICAgICAgICAgICAgICAgZmxhZ3M6IGZsYWdzLFxuICAgICAgICAgICAgICAgIHR5cGU6IHR5cGUsXG4gICAgICAgICAgICAgICAgY29sbGF0aW9uOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgcHJlY2lzaW9uOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgc2NhbGU6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICBkYXRhTGVuZ3RoOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgc2NoZW1hOiBzY2hlbWEsXG4gICAgICAgICAgICAgICAgdWR0SW5mbzogdW5kZWZpbmVkXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICBjYXNlICdUaW1lJzpcbiAgICAgICAgICBjYXNlICdEYXRlVGltZTInOlxuICAgICAgICAgIGNhc2UgJ0RhdGVUaW1lT2Zmc2V0JzpcbiAgICAgICAgICAgIHJldHVybiBwYXJzZXIucmVhZFVJbnQ4KChzY2FsZSkgPT4ge1xuICAgICAgICAgICAgICBjYWxsYmFjayh7XG4gICAgICAgICAgICAgICAgdXNlclR5cGU6IHVzZXJUeXBlLFxuICAgICAgICAgICAgICAgIGZsYWdzOiBmbGFncyxcbiAgICAgICAgICAgICAgICB0eXBlOiB0eXBlLFxuICAgICAgICAgICAgICAgIGNvbGxhdGlvbjogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIHByZWNpc2lvbjogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIHNjYWxlOiBzY2FsZSxcbiAgICAgICAgICAgICAgICBkYXRhTGVuZ3RoOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgc2NoZW1hOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgdWR0SW5mbzogdW5kZWZpbmVkXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICBjYXNlICdOdW1lcmljTic6XG4gICAgICAgICAgY2FzZSAnRGVjaW1hbE4nOlxuICAgICAgICAgICAgcmV0dXJuIHBhcnNlci5yZWFkVUludDgoKGRhdGFMZW5ndGgpID0+IHtcbiAgICAgICAgICAgICAgcGFyc2VyLnJlYWRVSW50OCgocHJlY2lzaW9uKSA9PiB7XG4gICAgICAgICAgICAgICAgcGFyc2VyLnJlYWRVSW50OCgoc2NhbGUpID0+IHtcbiAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKHtcbiAgICAgICAgICAgICAgICAgICAgdXNlclR5cGU6IHVzZXJUeXBlLFxuICAgICAgICAgICAgICAgICAgICBmbGFnczogZmxhZ3MsXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IHR5cGUsXG4gICAgICAgICAgICAgICAgICAgIGNvbGxhdGlvbjogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICBwcmVjaXNpb246IHByZWNpc2lvbixcbiAgICAgICAgICAgICAgICAgICAgc2NhbGU6IHNjYWxlLFxuICAgICAgICAgICAgICAgICAgICBkYXRhTGVuZ3RoOiBkYXRhTGVuZ3RoLFxuICAgICAgICAgICAgICAgICAgICBzY2hlbWE6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgdWR0SW5mbzogdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgIGNhc2UgJ1VEVCc6XG4gICAgICAgICAgICByZXR1cm4gcmVhZFVEVEluZm8ocGFyc2VyLCAodWR0SW5mbykgPT4ge1xuICAgICAgICAgICAgICBjYWxsYmFjayh7XG4gICAgICAgICAgICAgICAgdXNlclR5cGU6IHVzZXJUeXBlLFxuICAgICAgICAgICAgICAgIGZsYWdzOiBmbGFncyxcbiAgICAgICAgICAgICAgICB0eXBlOiB0eXBlLFxuICAgICAgICAgICAgICAgIGNvbGxhdGlvbjogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIHByZWNpc2lvbjogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIHNjYWxlOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgZGF0YUxlbmd0aDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIHNjaGVtYTogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIHVkdEluZm86IHVkdEluZm9cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3Ioc3ByaW50ZignVW5yZWNvZ25pc2VkIHR5cGUgJXMnLCB0eXBlLm5hbWUpKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xufVxuXG5leHBvcnQgZGVmYXVsdCBtZXRhZGF0YVBhcnNlO1xuZXhwb3J0IHsgcmVhZENvbGxhdGlvbiB9O1xuXG5tb2R1bGUuZXhwb3J0cyA9IG1ldGFkYXRhUGFyc2U7XG5tb2R1bGUuZXhwb3J0cy5yZWFkQ29sbGF0aW9uID0gcmVhZENvbGxhdGlvbjtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBQTs7QUFFQTs7QUFHQTs7QUFtREEsU0FBU0EsYUFBVCxDQUF1QkMsTUFBdkIsRUFBdUNDLFFBQXZDLEVBQWlGO0VBQy9FO0VBQ0FELE1BQU0sQ0FBQ0UsVUFBUCxDQUFrQixDQUFsQixFQUFzQkMsYUFBRCxJQUFtQjtJQUN0Q0YsUUFBUSxDQUFDRyxxQkFBVUMsVUFBVixDQUFxQkYsYUFBckIsQ0FBRCxDQUFSO0VBQ0QsQ0FGRDtBQUdEOztBQUVELFNBQVNHLFVBQVQsQ0FBb0JOLE1BQXBCLEVBQW9DQyxRQUFwQyxFQUF1RjtFQUNyRjtFQUNBRCxNQUFNLENBQUNPLFNBQVAsQ0FBa0JDLGFBQUQsSUFBbUI7SUFDbEMsSUFBSUEsYUFBYSxLQUFLLElBQXRCLEVBQTRCO01BQzFCUixNQUFNLENBQUNTLFlBQVAsQ0FBcUJDLE1BQUQsSUFBWTtRQUM5QlYsTUFBTSxDQUFDUyxZQUFQLENBQXFCRSxZQUFELElBQWtCO1VBQ3BDWCxNQUFNLENBQUNZLGFBQVAsQ0FBc0JDLG1CQUFELElBQXlCO1lBQzVDWixRQUFRLENBQUM7Y0FDUFMsTUFBTSxFQUFFQSxNQUREO2NBRVBDLFlBQVksRUFBRUEsWUFGUDtjQUdQRSxtQkFBbUIsRUFBRUE7WUFIZCxDQUFELENBQVI7VUFLRCxDQU5EO1FBT0QsQ0FSRDtNQVNELENBVkQ7SUFXRCxDQVpELE1BWU87TUFDTFosUUFBUSxDQUFDYSxTQUFELENBQVI7SUFDRDtFQUNGLENBaEJEO0FBaUJEOztBQUVELFNBQVNDLFdBQVQsQ0FBcUJmLE1BQXJCLEVBQXFDQyxRQUFyQyxFQUF1RjtFQUNyRkQsTUFBTSxDQUFDZ0IsWUFB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
|
|
261
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfY29sbGF0aW9uIiwicmVxdWlyZSIsIl9kYXRhVHlwZSIsIl9zcHJpbnRmSnMiLCJyZWFkQ29sbGF0aW9uIiwicGFyc2VyIiwiY2FsbGJhY2siLCJyZWFkQnVmZmVyIiwiY29sbGF0aW9uRGF0YSIsIkNvbGxhdGlvbiIsImZyb21CdWZmZXIiLCJyZWFkU2NoZW1hIiwicmVhZFVJbnQ4Iiwic2NoZW1hUHJlc2VudCIsInJlYWRCVmFyQ2hhciIsImRibmFtZSIsIm93bmluZ1NjaGVtYSIsInJlYWRVc1ZhckNoYXIiLCJ4bWxTY2hlbWFDb2xsZWN0aW9uIiwidW5kZWZpbmVkIiwicmVhZFVEVEluZm8iLCJyZWFkVUludDE2TEUiLCJtYXhCeXRlU2l6ZSIsInR5cGVOYW1lIiwiYXNzZW1ibHlOYW1lIiwibWV0YWRhdGFQYXJzZSIsIm9wdGlvbnMiLCJ0ZHNWZXJzaW9uIiwicmVhZFVJbnQzMkxFIiwiY2FsbCIsInVzZXJUeXBlIiwiZmxhZ3MiLCJ0eXBlTnVtYmVyIiwidHlwZSIsIlRZUEUiLCJFcnJvciIsInNwcmludGYiLCJuYW1lIiwiY29sbGF0aW9uIiwicHJlY2lzaW9uIiwic2NhbGUiLCJkYXRhTGVuZ3RoIiwic2NoZW1hIiwidWR0SW5mbyIsIl9kZWZhdWx0IiwiZXhwb3J0cyIsImRlZmF1bHQiLCJtb2R1bGUiXSwic291cmNlcyI6WyIuLi9zcmMvbWV0YWRhdGEtcGFyc2VyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbGxhdGlvbiB9IGZyb20gJy4vY29sbGF0aW9uJztcbmltcG9ydCBQYXJzZXIsIHsgUGFyc2VyT3B0aW9ucyB9IGZyb20gJy4vdG9rZW4vc3RyZWFtLXBhcnNlcic7XG5pbXBvcnQgeyBUWVBFLCBEYXRhVHlwZSB9IGZyb20gJy4vZGF0YS10eXBlJztcbmltcG9ydCB7IENyeXB0b01ldGFkYXRhIH0gZnJvbSAnLi9hbHdheXMtZW5jcnlwdGVkL3R5cGVzJztcblxuaW1wb3J0IHsgc3ByaW50ZiB9IGZyb20gJ3NwcmludGYtanMnO1xuXG5pbnRlcmZhY2UgWG1sU2NoZW1hIHtcbiAgZGJuYW1lOiBzdHJpbmc7XG4gIG93bmluZ1NjaGVtYTogc3RyaW5nO1xuICB4bWxTY2hlbWFDb2xsZWN0aW9uOiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBVZHRJbmZvIHtcbiAgbWF4Qnl0ZVNpemU6IG51bWJlcjtcbiAgZGJuYW1lOiBzdHJpbmc7XG4gIG93bmluZ1NjaGVtYTogc3RyaW5nO1xuICB0eXBlTmFtZTogc3RyaW5nO1xuICBhc3NlbWJseU5hbWU6IHN0cmluZztcbn1cblxuZXhwb3J0IHR5cGUgQmFzZU1ldGFkYXRhID0ge1xuICB1c2VyVHlwZTogbnVtYmVyO1xuXG4gIGZsYWdzOiBudW1iZXI7XG4gIC8qKlxuICAgKiBUaGUgY29sdW1uJ3MgdHlwZSwgc3VjaCBhcyBWYXJDaGFyLCBJbnQgb3IgQmluYXJ5LlxuICAgKi9cbiAgdHlwZTogRGF0YVR5cGU7XG5cbiAgY29sbGF0aW9uOiBDb2xsYXRpb24gfCB1bmRlZmluZWQ7XG4gIC8qKlxuICAgKiBUaGUgcHJlY2lzaW9uLiBPbmx5IGFwcGxpY2FibGUgdG8gbnVtZXJpYyBhbmQgZGVjaW1hbC5cbiAgICovXG4gIHByZWNpc2lvbjogbnVtYmVyIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBUaGUgc2NhbGUuIE9ubHkgYXBwbGljYWJsZSB0byBudW1lcmljLCBkZWNpbWFsLCB0aW1lLCBkYXRldGltZTIgYW5kIGRhdGV0aW1lb2Zmc2V0LlxuICAgKi9cbiAgc2NhbGU6IG51bWJlciB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogVGhlIGxlbmd0aCwgZm9yIGNoYXIsIHZhcmNoYXIsIG52YXJjaGFyIGFuZCB2YXJiaW5hcnkuXG4gICAqL1xuICBkYXRhTGVuZ3RoOiBudW1iZXIgfCB1bmRlZmluZWQ7XG5cbiAgc2NoZW1hOiBYbWxTY2hlbWEgfCB1bmRlZmluZWQ7XG5cbiAgdWR0SW5mbzogVWR0SW5mbyB8IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IHR5cGUgTWV0YWRhdGEgPSB7XG4gIGNyeXB0b01ldGFkYXRhPzogQ3J5cHRvTWV0YWRhdGE7XG59ICYgQmFzZU1ldGFkYXRhO1xuXG5cbmZ1bmN0aW9uIHJlYWRDb2xsYXRpb24ocGFyc2VyOiBQYXJzZXIsIGNhbGxiYWNrOiAoY29sbGF0aW9uOiBDb2xsYXRpb24pID0+IHZvaWQpIHtcbiAgLy8gczIuMi41LjEuMlxuICBwYXJzZXIucmVhZEJ1ZmZlcig1LCAoY29sbGF0aW9uRGF0YSkgPT4ge1xuICAgIGNhbGxiYWNrKENvbGxhdGlvbi5mcm9tQnVmZmVyKGNvbGxhdGlvbkRhdGEpKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHJlYWRTY2hlbWEocGFyc2VyOiBQYXJzZXIsIGNhbGxiYWNrOiAoc2NoZW1hOiBYbWxTY2hlbWEgfCB1bmRlZmluZWQpID0+IHZvaWQpIHtcbiAgLy8gczIuMi41LjUuM1xuICBwYXJzZXIucmVhZFVJbnQ4KChzY2hlbWFQcmVzZW50KSA9PiB7XG4gICAgaWYgKHNjaGVtYVByZXNlbnQgPT09IDB4MDEpIHtcbiAgICAgIHBhcnNlci5yZWFkQlZhckNoYXIoKGRibmFtZSkgPT4ge1xuICAgICAgICBwYXJzZXIucmVhZEJWYXJDaGFyKChvd25pbmdTY2hlbWEpID0+IHtcbiAgICAgICAgICBwYXJzZXIucmVhZFVzVmFyQ2hhcigoeG1sU2NoZW1hQ29sbGVjdGlvbikgPT4ge1xuICAgICAgICAgICAgY2FsbGJhY2soe1xuICAgICAgICAgICAgICBkYm5hbWU6IGRibmFtZSxcbiAgICAgICAgICAgICAgb3duaW5nU2NoZW1hOiBvd25pbmdTY2hlbWEsXG4gICAgICAgICAgICAgIHhtbFNjaGVtYUNvbGxlY3Rpb246IHhtbFNjaGVtYUNvbGxlY3Rpb25cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBjYWxsYmFjayh1bmRlZmluZWQpO1xuICAgIH1cbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHJlYWRVRFRJbmZvKHBhcnNlcjogUGFyc2VyLCBjYWxsYmFjazogKHVkdEluZm86IFVkdEluZm8gfCB1bmRlZmluZWQpID0+IHZvaWQpIHtcbiAgcGFyc2VyLnJlYWRVSW50MTZMRSgobWF4Qnl0ZVNpemUpID0+IHtcbiAgICBwYXJzZXIucmVhZEJWYXJDaGFyKChkYm5hbWUpID0+IHtcbiAgICAgIHBhcnNlci5yZWFkQlZhckNoYXIoKG93bmluZ1NjaGVtYSkgPT4ge1xuICAgICAgICBwYXJzZXIucmVhZEJWYXJDaGFyKCh0eXBlTmFtZSkgPT4ge1xuICAgICAgICAgIHBhcnNlci5yZWFkVXNWYXJDaGFyKChhc3NlbWJseU5hbWUpID0+IHtcbiAgICAgICAgICAgIGNhbGxiYWNrKHtcbiAgICAgICAgICAgICAgbWF4Qnl0ZVNpemU6IG1heEJ5dGVTaXplLFxuICAgICAgICAgICAgICBkYm5hbWU6IGRibmFtZSxcbiAgICAgICAgICAgICAgb3duaW5nU2NoZW1hOiBvd25pbmdTY2hlbWEsXG4gICAgICAgICAgICAgIHR5cGVOYW1lOiB0eXBlTmFtZSxcbiAgICAgICAgICAgICAgYXNzZW1ibHlOYW1lOiBhc3NlbWJseU5hbWVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gbWV0YWRhdGFQYXJzZShwYXJzZXI6IFBhcnNlciwgb3B0aW9uczogUGFyc2VyT3B0aW9ucywgY2FsbGJhY2s6IChtZXRhZGF0YTogTWV0YWRhdGEpID0+IHZvaWQpIHtcbiAgKG9wdGlvbnMudGRzVmVyc2lvbiA8ICc3XzInID8gcGFyc2VyLnJlYWRVSW50MTZMRSA6IHBhcnNlci5yZWFkVUludDMyTEUpLmNhbGwocGFyc2VyLCAodXNlclR5cGUpID0+IHtcbiAgICBwYXJzZXIucmVhZFVJbnQxNkxFKChmbGFncykgPT4ge1xuICAgICAgcGFyc2VyLnJlYWRVSW50OCgodHlwZU51bWJlcikgPT4ge1xuICAgICAgICBjb25zdCB0eXBlOiBEYXRhVHlwZSA9IFRZUEVbdHlwZU51bWJlcl07XG5cbiAgICAgICAgaWYgKCF0eXBlKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKHNwcmludGYoJ1VucmVjb2duaXNlZCBkYXRhIHR5cGUgMHglMDJYJywgdHlwZU51bWJlcikpO1xuICAgICAgICB9XG5cbiAgICAgICAgc3dpdGNoICh0eXBlLm5hbWUpIHtcbiAgICAgICAgICBjYXNlICdOdWxsJzpcbiAgICAgICAgICBjYXNlICdUaW55SW50JzpcbiAgICAgICAgICBjYXNlICdTbWFsbEludCc6XG4gICAgICAgICAgY2FzZSAnSW50JzpcbiAgICAgICAgICBjYXNlICdCaWdJbnQnOlxuICAgICAgICAgIGNhc2UgJ1JlYWwnOlxuICAgICAgICAgIGNhc2UgJ0Zsb2F0JzpcbiAgICAgICAgICBjYXNlICdTbWFsbE1vbmV5JzpcbiAgICAgICAgICBjYXNlICdNb25leSc6XG4gICAgICAgICAgY2FzZSAnQml0JzpcbiAgICAgICAgICBjYXNlICdTbWFsbERhdGVUaW1lJzpcbiAgICAgICAgICBjYXNlICdEYXRlVGltZSc6XG4gICAgICAgICAgY2FzZSAnRGF0ZSc6XG4gICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soe1xuICAgICAgICAgICAgICB1c2VyVHlwZTogdXNlclR5cGUsXG4gICAgICAgICAgICAgIGZsYWdzOiBmbGFncyxcbiAgICAgICAgICAgICAgdHlwZTogdHlwZSxcbiAgICAgICAgICAgICAgY29sbGF0aW9uOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgIHByZWNpc2lvbjogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICBzY2FsZTogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICBkYXRhTGVuZ3RoOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgIHNjaGVtYTogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICB1ZHRJbmZvOiB1bmRlZmluZWRcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgY2FzZSAnSW50Tic6XG4gICAgICAgICAgY2FzZSAnRmxvYXROJzpcbiAgICAgICAgICBjYXNlICdNb25leU4nOlxuICAgICAgICAgIGNhc2UgJ0JpdE4nOlxuICAgICAgICAgIGNhc2UgJ1VuaXF1ZUlkZW50aWZpZXInOlxuICAgICAgICAgIGNhc2UgJ0RhdGVUaW1lTic6XG4gICAgICAgICAgICByZXR1cm4gcGFyc2VyLnJlYWRVSW50OCgoZGF0YUxlbmd0aCkgPT4ge1xuICAgICAgICAgICAgICBjYWxsYmFjayh7XG4gICAgICAgICAgICAgICAgdXNlclR5cGU6IHVzZXJUeXBlLFxuICAgICAgICAgICAgICAgIGZsYWdzOiBmbGFncyxcbiAgICAgICAgICAgICAgICB0eXBlOiB0eXBlLFxuICAgICAgICAgICAgICAgIGNvbGxhdGlvbjogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIHByZWNpc2lvbjogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIHNjYWxlOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgZGF0YUxlbmd0aDogZGF0YUxlbmd0aCxcbiAgICAgICAgICAgICAgICBzY2hlbWE6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICB1ZHRJbmZvOiB1bmRlZmluZWRcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgIGNhc2UgJ1ZhcmlhbnQnOlxuICAgICAgICAgICAgcmV0dXJuIHBhcnNlci5yZWFkVUludDMyTEUoKGRhdGFMZW5ndGgpID0+IHtcbiAgICAgICAgICAgICAgY2FsbGJhY2soe1xuICAgICAgICAgICAgICAgIHVzZXJUeXBlOiB1c2VyVHlwZSxcbiAgICAgICAgICAgICAgICBmbGFnczogZmxhZ3MsXG4gICAgICAgICAgICAgICAgdHlwZTogdHlwZSxcbiAgICAgICAgICAgICAgICBjb2xsYXRpb246IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICBwcmVjaXNpb246IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICBzY2FsZTogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIGRhdGFMZW5ndGg6IGRhdGFMZW5ndGgsXG4gICAgICAgICAgICAgICAgc2NoZW1hOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgdWR0SW5mbzogdW5kZWZpbmVkXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICBjYXNlICdWYXJDaGFyJzpcbiAgICAgICAgICBjYXNlICdDaGFyJzpcbiAgICAgICAgICBjYXNlICdOVmFyQ2hhcic6XG4gICAgICAgICAgY2FzZSAnTkNoYXInOlxuICAgICAgICAgICAgcmV0dXJuIHBhcnNlci5yZWFkVUludDE2TEUoKGRhdGFMZW5ndGgpID0+IHtcbiAgICAgICAgICAgICAgcmVhZENvbGxhdGlvbihwYXJzZXIsIChjb2xsYXRpb24pID0+IHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayh7XG4gICAgICAgICAgICAgICAgICB1c2VyVHlwZTogdXNlclR5cGUsXG4gICAgICAgICAgICAgICAgICBmbGFnczogZmxhZ3MsXG4gICAgICAgICAgICAgICAgICB0eXBlOiB0eXBlLFxuICAgICAgICAgICAgICAgICAgY29sbGF0aW9uOiBjb2xsYXRpb24sXG4gICAgICAgICAgICAgICAgICBwcmVjaXNpb246IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgIHNjYWxlOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICBkYXRhTGVuZ3RoOiBkYXRhTGVuZ3RoLFxuICAgICAgICAgICAgICAgICAgc2NoZW1hOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICB1ZHRJbmZvOiB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgIGNhc2UgJ1RleHQnOlxuICAgICAgICAgIGNhc2UgJ05UZXh0JzpcbiAgICAgICAgICAgIHJldHVybiBwYXJzZXIucmVhZFVJbnQzMkxFKChkYXRhTGVuZ3RoKSA9PiB7XG4gICAgICAgICAgICAgIHJlYWRDb2xsYXRpb24ocGFyc2VyLCAoY29sbGF0aW9uKSA9PiB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soe1xuICAgICAgICAgICAgICAgICAgdXNlclR5cGU6IHVzZXJUeXBlLFxuICAgICAgICAgICAgICAgICAgZmxhZ3M6IGZsYWdzLFxuICAgICAgICAgICAgICAgICAgdHlwZTogdHlwZSxcbiAgICAgICAgICAgICAgICAgIGNvbGxhdGlvbjogY29sbGF0aW9uLFxuICAgICAgICAgICAgICAgICAgcHJlY2lzaW9uOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICBzY2FsZTogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgZGF0YUxlbmd0aDogZGF0YUxlbmd0aCxcbiAgICAgICAgICAgICAgICAgIHNjaGVtYTogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgdWR0SW5mbzogdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICBjYXNlICdWYXJCaW5hcnknOlxuICAgICAgICAgIGNhc2UgJ0JpbmFyeSc6XG4gICAgICAgICAgICByZXR1cm4gcGFyc2VyLnJlYWRVSW50MTZMRSgoZGF0YUxlbmd0aCkgPT4ge1xuICAgICAgICAgICAgICBjYWxsYmFjayh7XG4gICAgICAgICAgICAgICAgdXNlclR5cGU6IHVzZXJUeXBlLFxuICAgICAgICAgICAgICAgIGZsYWdzOiBmbGFncyxcbiAgICAgICAgICAgICAgICB0eXBlOiB0eXBlLFxuICAgICAgICAgICAgICAgIGNvbGxhdGlvbjogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIHByZWNpc2lvbjogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIHNjYWxlOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgZGF0YUxlbmd0aDogZGF0YUxlbmd0aCxcbiAgICAgICAgICAgICAgICBzY2hlbWE6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICB1ZHRJbmZvOiB1bmRlZmluZWRcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgIGNhc2UgJ0ltYWdlJzpcbiAgICAgICAgICAgIHJldHVybiBwYXJzZXIucmVhZFVJbnQzMkxFKChkYXRhTGVuZ3RoKSA9PiB7XG4gICAgICAgICAgICAgIGNhbGxiYWNrKHtcbiAgICAgICAgICAgICAgICB1c2VyVHlwZTogdXNlclR5cGUsXG4gICAgICAgICAgICAgICAgZmxhZ3M6IGZsYWdzLFxuICAgICAgICAgICAgICAgIHR5cGU6IHR5cGUsXG4gICAgICAgICAgICAgICAgY29sbGF0aW9uOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgcHJlY2lzaW9uOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgc2NhbGU6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICBkYXRhTGVuZ3RoOiBkYXRhTGVuZ3RoLFxuICAgICAgICAgICAgICAgIHNjaGVtYTogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIHVkdEluZm86IHVuZGVmaW5lZFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgY2FzZSAnWG1sJzpcbiAgICAgICAgICAgIHJldHVybiByZWFkU2NoZW1hKHBhcnNlciwgKHNjaGVtYSkgPT4ge1xuICAgICAgICAgICAgICBjYWxsYmFjayh7XG4gICAgICAgICAgICAgICAgdXNlclR5cGU6IHVzZXJUeXBlLFxuICAgICAgICAgICAgICAgIGZsYWdzOiBmbGFncyxcbiAgICAgICAgICAgICAgICB0eXBlOiB0eXBlLFxuICAgICAgICAgICAgICAgIGNvbGxhdGlvbjogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIHByZWNpc2lvbjogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIHNjYWxlOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgZGF0YUxlbmd0aDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIHNjaGVtYTogc2NoZW1hLFxuICAgICAgICAgICAgICAgIHVkdEluZm86IHVuZGVmaW5lZFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgY2FzZSAnVGltZSc6XG4gICAgICAgICAgY2FzZSAnRGF0ZVRpbWUyJzpcbiAgICAgICAgICBjYXNlICdEYXRlVGltZU9mZnNldCc6XG4gICAgICAgICAgICByZXR1cm4gcGFyc2VyLnJlYWRVSW50OCgoc2NhbGUpID0+IHtcbiAgICAgICAgICAgICAgY2FsbGJhY2soe1xuICAgICAgICAgICAgICAgIHVzZXJUeXBlOiB1c2VyVHlwZSxcbiAgICAgICAgICAgICAgICBmbGFnczogZmxhZ3MsXG4gICAgICAgICAgICAgICAgdHlwZTogdHlwZSxcbiAgICAgICAgICAgICAgICBjb2xsYXRpb246IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICBwcmVjaXNpb246IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICBzY2FsZTogc2NhbGUsXG4gICAgICAgICAgICAgICAgZGF0YUxlbmd0aDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIHNjaGVtYTogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIHVkdEluZm86IHVuZGVmaW5lZFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgY2FzZSAnTnVtZXJpY04nOlxuICAgICAgICAgIGNhc2UgJ0RlY2ltYWxOJzpcbiAgICAgICAgICAgIHJldHVybiBwYXJzZXIucmVhZFVJbnQ4KChkYXRhTGVuZ3RoKSA9PiB7XG4gICAgICAgICAgICAgIHBhcnNlci5yZWFkVUludDgoKHByZWNpc2lvbikgPT4ge1xuICAgICAgICAgICAgICAgIHBhcnNlci5yZWFkVUludDgoKHNjYWxlKSA9PiB7XG4gICAgICAgICAgICAgICAgICBjYWxsYmFjayh7XG4gICAgICAgICAgICAgICAgICAgIHVzZXJUeXBlOiB1c2VyVHlwZSxcbiAgICAgICAgICAgICAgICAgICAgZmxhZ3M6IGZsYWdzLFxuICAgICAgICAgICAgICAgICAgICB0eXBlOiB0eXBlLFxuICAgICAgICAgICAgICAgICAgICBjb2xsYXRpb246IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgcHJlY2lzaW9uOiBwcmVjaXNpb24sXG4gICAgICAgICAgICAgICAgICAgIHNjYWxlOiBzY2FsZSxcbiAgICAgICAgICAgICAgICAgICAgZGF0YUxlbmd0aDogZGF0YUxlbmd0aCxcbiAgICAgICAgICAgICAgICAgICAgc2NoZW1hOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgIHVkdEluZm86IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICBjYXNlICdVRFQnOlxuICAgICAgICAgICAgcmV0dXJuIHJlYWRVRFRJbmZvKHBhcnNlciwgKHVkdEluZm8pID0+IHtcbiAgICAgICAgICAgICAgY2FsbGJhY2soe1xuICAgICAgICAgICAgICAgIHVzZXJUeXBlOiB1c2VyVHlwZSxcbiAgICAgICAgICAgICAgICBmbGFnczogZmxhZ3MsXG4gICAgICAgICAgICAgICAgdHlwZTogdHlwZSxcbiAgICAgICAgICAgICAgICBjb2xsYXRpb246IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICBwcmVjaXNpb246IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICBzY2FsZTogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIGRhdGFMZW5ndGg6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICBzY2hlbWE6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICB1ZHRJbmZvOiB1ZHRJbmZvXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKHNwcmludGYoJ1VucmVjb2duaXNlZCB0eXBlICVzJywgdHlwZS5uYW1lKSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgbWV0YWRhdGFQYXJzZTtcbmV4cG9ydCB7IHJlYWRDb2xsYXRpb24gfTtcblxubW9kdWxlLmV4cG9ydHMgPSBtZXRhZGF0YVBhcnNlO1xubW9kdWxlLmV4cG9ydHMucmVhZENvbGxhdGlvbiA9IHJlYWRDb2xsYXRpb247XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQSxJQUFBQSxVQUFBLEdBQUFDLE9BQUE7QUFFQSxJQUFBQyxTQUFBLEdBQUFELE9BQUE7QUFHQSxJQUFBRSxVQUFBLEdBQUFGLE9BQUE7QUFtREEsU0FBU0csYUFBYUEsQ0FBQ0MsTUFBYyxFQUFFQyxRQUF3QyxFQUFFO0VBQy9FO0VBQ0FELE1BQU0sQ0FBQ0UsVUFBVSxDQUFDLENBQUMsRUFBR0MsYUFBYSxJQUFLO0lBQ3RDRixRQUFRLENBQUNHLG9CQUFTLENBQUNDLFVBQVUsQ0FBQ0YsYUFBYSxDQUFDLENBQUM7RUFDL0MsQ0FBQyxDQUFDO0FBQ0o7QUFFQSxTQUFTRyxVQUFVQSxDQUFDTixNQUFjLEVBQUVDLFFBQWlELEVBQUU7RUFDckY7RUFDQUQsTUFBTSxDQUFDTyxTQUFTLENBQUVDLGFBQWEsSUFBSztJQUNsQyxJQUFJQSxhQUFhLEtBQUssSUFBSSxFQUFFO01BQzFCUixNQUFNLENBQUNTLFlBQVksQ0FBRUMsTUFBTSxJQUFLO1FBQzlCVixNQUFNLENBQUNTLFlBQVksQ0FBRUUsWUFBWSxJQUFLO1VBQ3BDWCxNQUFNLENBQUNZLGFBQWEsQ0FBRUMsbUJBQW1CLElBQUs7WUFDNUNaLFFBQVEsQ0FBQztjQUNQUyxNQUFNLEVBQUVBLE1BQU07Y0FDZEMsWUFBWSxFQUFFQSxZQUFZO2NBQzFCRSxtQkFBbUIsRUFBRUE7WUFDdkIsQ0FBQyxDQUFDO1VBQ0osQ0FBQyxDQUFDO1FBQ0osQ0FBQyxDQUFDO01B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
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metadata-parser.js","names":["_collation","require","_dataType","_sprintfJs","readCollation","parser","callback","readBuffer","collationData","Collation","fromBuffer","readSchema","readUInt8","schemaPresent","readBVarChar","dbname","owningSchema","readUsVarChar","xmlSchemaCollection","undefined","readUDTInfo","readUInt16LE","maxByteSize","typeName","assemblyName","metadataParse","options","tdsVersion","readUInt32LE","call","userType","flags","typeNumber","type","TYPE","Error","sprintf","name","collation","precision","scale","dataLength","schema","udtInfo","_default","exports","default","module"],"sources":["../src/metadata-parser.ts"],"sourcesContent":["import { Collation } from './collation';\nimport Parser, { ParserOptions } from './token/stream-parser';\nimport { TYPE, DataType } from './data-type';\nimport { CryptoMetadata } from './always-encrypted/types';\n\nimport { sprintf } from 'sprintf-js';\n\ninterface XmlSchema {\n dbname: string;\n owningSchema: string;\n xmlSchemaCollection: string;\n}\n\ninterface UdtInfo {\n maxByteSize: number;\n dbname: string;\n owningSchema: string;\n typeName: string;\n assemblyName: string;\n}\n\nexport type BaseMetadata = {\n userType: number;\n\n flags: number;\n /**\n * The column's type, such as VarChar, Int or Binary.\n */\n type: DataType;\n\n collation: Collation | undefined;\n /**\n * The precision. Only applicable to numeric and decimal.\n */\n precision: number | undefined;\n\n /**\n * The scale. Only applicable to numeric, decimal, time, datetime2 and datetimeoffset.\n */\n scale: number | undefined;\n\n /**\n * The length, for char, varchar, nvarchar and varbinary.\n */\n dataLength: number | undefined;\n\n schema: XmlSchema | undefined;\n\n udtInfo: UdtInfo | undefined;\n}\n\nexport type Metadata = {\n cryptoMetadata?: CryptoMetadata;\n} & BaseMetadata;\n\n\nfunction readCollation(parser: Parser, callback: (collation: Collation) => void) {\n // s2.2.5.1.2\n parser.readBuffer(5, (collationData) => {\n callback(Collation.fromBuffer(collationData));\n });\n}\n\nfunction readSchema(parser: Parser, callback: (schema: XmlSchema | undefined) => void) {\n // s2.2.5.5.3\n parser.readUInt8((schemaPresent) => {\n if (schemaPresent === 0x01) {\n parser.readBVarChar((dbname) => {\n parser.readBVarChar((owningSchema) => {\n parser.readUsVarChar((xmlSchemaCollection) => {\n callback({\n dbname: dbname,\n owningSchema: owningSchema,\n xmlSchemaCollection: xmlSchemaCollection\n });\n });\n });\n });\n } else {\n callback(undefined);\n }\n });\n}\n\nfunction readUDTInfo(parser: Parser, callback: (udtInfo: UdtInfo | undefined) => void) {\n parser.readUInt16LE((maxByteSize) => {\n parser.readBVarChar((dbname) => {\n parser.readBVarChar((owningSchema) => {\n parser.readBVarChar((typeName) => {\n parser.readUsVarChar((assemblyName) => {\n callback({\n maxByteSize: maxByteSize,\n dbname: dbname,\n owningSchema: owningSchema,\n typeName: typeName,\n assemblyName: assemblyName\n });\n });\n });\n });\n });\n });\n}\n\nfunction metadataParse(parser: Parser, options: ParserOptions, callback: (metadata: Metadata) => void) {\n (options.tdsVersion < '7_2' ? parser.readUInt16LE : parser.readUInt32LE).call(parser, (userType) => {\n parser.readUInt16LE((flags) => {\n parser.readUInt8((typeNumber) => {\n const type: DataType = TYPE[typeNumber];\n\n if (!type) {\n throw new Error(sprintf('Unrecognised data type 0x%02X', typeNumber));\n }\n\n switch (type.name) {\n case 'Null':\n case 'TinyInt':\n case 'SmallInt':\n case 'Int':\n case 'BigInt':\n case 'Real':\n case 'Float':\n case 'SmallMoney':\n case 'Money':\n case 'Bit':\n case 'SmallDateTime':\n case 'DateTime':\n case 'Date':\n return callback({\n userType: userType,\n flags: flags,\n type: type,\n collation: undefined,\n precision: undefined,\n scale: undefined,\n dataLength: undefined,\n schema: undefined,\n udtInfo: undefined\n });\n\n case 'IntN':\n case 'FloatN':\n case 'MoneyN':\n case 'BitN':\n case 'UniqueIdentifier':\n case 'DateTimeN':\n return parser.readUInt8((dataLength) => {\n callback({\n userType: userType,\n flags: flags,\n type: type,\n collation: undefined,\n precision: undefined,\n scale: undefined,\n dataLength: dataLength,\n schema: undefined,\n udtInfo: undefined\n });\n });\n\n case 'Variant':\n return parser.readUInt32LE((dataLength) => {\n callback({\n userType: userType,\n flags: flags,\n type: type,\n collation: undefined,\n precision: undefined,\n scale: undefined,\n dataLength: dataLength,\n schema: undefined,\n udtInfo: undefined\n });\n });\n\n case 'VarChar':\n case 'Char':\n case 'NVarChar':\n case 'NChar':\n return parser.readUInt16LE((dataLength) => {\n readCollation(parser, (collation) => {\n callback({\n userType: userType,\n flags: flags,\n type: type,\n collation: collation,\n precision: undefined,\n scale: undefined,\n dataLength: dataLength,\n schema: undefined,\n udtInfo: undefined\n });\n });\n });\n\n case 'Text':\n case 'NText':\n return parser.readUInt32LE((dataLength) => {\n readCollation(parser, (collation) => {\n callback({\n userType: userType,\n flags: flags,\n type: type,\n collation: collation,\n precision: undefined,\n scale: undefined,\n dataLength: dataLength,\n schema: undefined,\n udtInfo: undefined\n });\n });\n });\n\n case 'VarBinary':\n case 'Binary':\n return parser.readUInt16LE((dataLength) => {\n callback({\n userType: userType,\n flags: flags,\n type: type,\n collation: undefined,\n precision: undefined,\n scale: undefined,\n dataLength: dataLength,\n schema: undefined,\n udtInfo: undefined\n });\n });\n\n case 'Image':\n return parser.readUInt32LE((dataLength) => {\n callback({\n userType: userType,\n flags: flags,\n type: type,\n collation: undefined,\n precision: undefined,\n scale: undefined,\n dataLength: dataLength,\n schema: undefined,\n udtInfo: undefined\n });\n });\n\n case 'Xml':\n return readSchema(parser, (schema) => {\n callback({\n userType: userType,\n flags: flags,\n type: type,\n collation: undefined,\n precision: undefined,\n scale: undefined,\n dataLength: undefined,\n schema: schema,\n udtInfo: undefined\n });\n });\n\n case 'Time':\n case 'DateTime2':\n case 'DateTimeOffset':\n return parser.readUInt8((scale) => {\n callback({\n userType: userType,\n flags: flags,\n type: type,\n collation: undefined,\n precision: undefined,\n scale: scale,\n dataLength: undefined,\n schema: undefined,\n udtInfo: undefined\n });\n });\n\n case 'NumericN':\n case 'DecimalN':\n return parser.readUInt8((dataLength) => {\n parser.readUInt8((precision) => {\n parser.readUInt8((scale) => {\n callback({\n userType: userType,\n flags: flags,\n type: type,\n collation: undefined,\n precision: precision,\n scale: scale,\n dataLength: dataLength,\n schema: undefined,\n udtInfo: undefined\n });\n });\n });\n });\n\n case 'UDT':\n return readUDTInfo(parser, (udtInfo) => {\n callback({\n userType: userType,\n flags: flags,\n type: type,\n collation: undefined,\n precision: undefined,\n scale: undefined,\n dataLength: undefined,\n schema: undefined,\n udtInfo: udtInfo\n });\n });\n\n default:\n throw new Error(sprintf('Unrecognised type %s', type.name));\n }\n });\n });\n });\n}\n\nexport default metadataParse;\nexport { readCollation };\n\nmodule.exports = metadataParse;\nmodule.exports.readCollation = readCollation;\n"],"mappings":"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"}
|
package/lib/ntlm-payload.js
CHANGED
|
@@ -4,29 +4,20 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.default = void 0;
|
|
7
|
-
|
|
8
7
|
var _writableTrackingBuffer = _interopRequireDefault(require("./tracking-buffer/writable-tracking-buffer"));
|
|
9
|
-
|
|
10
8
|
var crypto = _interopRequireWildcard(require("crypto"));
|
|
11
|
-
|
|
12
9
|
var _jsMd = _interopRequireDefault(require("js-md4"));
|
|
13
|
-
|
|
14
10
|
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
15
|
-
|
|
16
11
|
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
17
|
-
|
|
18
12
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
19
|
-
|
|
20
13
|
class NTLMResponsePayload {
|
|
14
|
+
data;
|
|
21
15
|
constructor(loginData) {
|
|
22
|
-
this.data = void 0;
|
|
23
16
|
this.data = this.createResponse(loginData);
|
|
24
17
|
}
|
|
25
|
-
|
|
26
18
|
toString(indent = '') {
|
|
27
19
|
return indent + 'NTLM Auth';
|
|
28
20
|
}
|
|
29
|
-
|
|
30
21
|
createResponse(challenge) {
|
|
31
22
|
const client_nonce = this.createClientNonce();
|
|
32
23
|
const lmv2len = 24;
|
|
@@ -84,19 +75,15 @@ class NTLMResponsePayload {
|
|
|
84
75
|
data.writeUInt32LE(0x0000);
|
|
85
76
|
return data.data;
|
|
86
77
|
}
|
|
87
|
-
|
|
88
78
|
createClientNonce() {
|
|
89
79
|
const client_nonce = Buffer.alloc(8, 0);
|
|
90
80
|
let nidx = 0;
|
|
91
|
-
|
|
92
81
|
while (nidx < 8) {
|
|
93
82
|
client_nonce.writeUInt8(Math.ceil(Math.random() * 255), nidx);
|
|
94
83
|
nidx++;
|
|
95
84
|
}
|
|
96
|
-
|
|
97
85
|
return client_nonce;
|
|
98
86
|
}
|
|
99
|
-
|
|
100
87
|
ntlmv2Response(domain, user, password, serverNonce, targetInfo, clientNonce, mytime) {
|
|
101
88
|
const timestamp = this.createTimestamp(mytime);
|
|
102
89
|
const hash = this.ntv2Hash(domain, user, password);
|
|
@@ -112,7 +99,6 @@ class NTLMResponsePayload {
|
|
|
112
99
|
data.writeUInt32LE(0x0, 36 + targetInfo.length);
|
|
113
100
|
return this.hmacMD5(data, hash);
|
|
114
101
|
}
|
|
115
|
-
|
|
116
102
|
createTimestamp(time) {
|
|
117
103
|
const tenthsOfAMicrosecond = (BigInt(time) + BigInt(11644473600)) * BigInt(10000000);
|
|
118
104
|
const lo = Number(tenthsOfAMicrosecond & BigInt(0xffffffff));
|
|
@@ -122,7 +108,6 @@ class NTLMResponsePayload {
|
|
|
122
108
|
result.writeUInt32LE(hi, 4);
|
|
123
109
|
return result;
|
|
124
110
|
}
|
|
125
|
-
|
|
126
111
|
lmv2Response(domain, user, password, serverNonce, clientNonce) {
|
|
127
112
|
const hash = this.ntv2Hash(domain, user, password);
|
|
128
113
|
const data = Buffer.alloc(serverNonce.length + clientNonce.length, 0);
|
|
@@ -134,25 +119,20 @@ class NTLMResponsePayload {
|
|
|
134
119
|
clientNonce.copy(response, newhash.length, 0, clientNonce.length);
|
|
135
120
|
return response;
|
|
136
121
|
}
|
|
137
|
-
|
|
138
122
|
ntv2Hash(domain, user, password) {
|
|
139
123
|
const hash = this.ntHash(password);
|
|
140
124
|
const identity = Buffer.from(user.toUpperCase() + domain.toUpperCase(), 'ucs2');
|
|
141
125
|
return this.hmacMD5(identity, hash);
|
|
142
126
|
}
|
|
143
|
-
|
|
144
127
|
ntHash(text) {
|
|
145
128
|
const unicodeString = Buffer.from(text, 'ucs2');
|
|
146
129
|
return Buffer.from(_jsMd.default.arrayBuffer(unicodeString));
|
|
147
130
|
}
|
|
148
|
-
|
|
149
131
|
hmacMD5(data, key) {
|
|
150
132
|
return crypto.createHmac('MD5', key).update(data).digest();
|
|
151
133
|
}
|
|
152
|
-
|
|
153
134
|
}
|
|
154
|
-
|
|
155
135
|
var _default = NTLMResponsePayload;
|
|
156
136
|
exports.default = _default;
|
|
157
137
|
module.exports = NTLMResponsePayload;
|
|
158
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJOVExNUmVzcG9uc2VQYXlsb2FkIiwiY29uc3RydWN0b3IiLCJsb2dpbkRhdGEiLCJkYXRhIiwiY3JlYXRlUmVzcG9uc2UiLCJ0b1N0cmluZyIsImluZGVudCIsImNoYWxsZW5nZSIsImNsaWVudF9ub25jZSIsImNyZWF0ZUNsaWVudE5vbmNlIiwibG12MmxlbiIsIm50bG12MmxlbiIsImRvbWFpbiIsInVzZXJuYW1lIiwidXNlck5hbWUiLCJwYXNzd29yZCIsIm50bG1EYXRhIiwibnRsbXBhY2tldCIsInNlcnZlcl9kYXRhIiwidGFyZ2V0Iiwic2VydmVyX25vbmNlIiwibm9uY2UiLCJidWZmZXJMZW5ndGgiLCJsZW5ndGgiLCJXcml0YWJsZVRyYWNraW5nQnVmZmVyIiwicG9zaXRpb24iLCJ3cml0ZVN0cmluZyIsIndyaXRlVUludDMyTEUiLCJiYXNlSWR4IiwiZG5JZHgiLCJ1bklkeCIsImwySWR4IiwibnRJZHgiLCJ3cml0ZVVJbnQxNkxFIiwibG12MkRhdGEiLCJsbXYyUmVzcG9uc2UiLCJjb3B5RnJvbSIsImdlblRpbWUiLCJEYXRlIiwiZ2V0VGltZSIsIm50bG1EYXRhQnVmZmVyIiwibnRsbXYyUmVzcG9uc2UiLCJ0aW1lc3RhbXAiLCJjcmVhdGVUaW1lc3RhbXAiLCJCdWZmZXIiLCJhbGxvYyIsIm5pZHgiLCJ3cml0ZVVJbnQ4IiwiTWF0aCIsImNlaWwiLCJyYW5kb20iLCJ1c2VyIiwic2VydmVyTm9uY2UiLCJ0YXJnZXRJbmZvIiwiY2xpZW50Tm9uY2UiLCJteXRpbWUiLCJoYXNoIiwibnR2Mkhhc2giLCJkYXRhTGVuZ3RoIiwiY29weSIsImhtYWNNRDUiLCJ0aW1lIiwidGVudGhzT2ZBTWljcm9zZWNvbmQiLCJCaWdJbnQiLCJsbyIsIk51bWJlciIsImhpIiwicmVzdWx0IiwibmV3aGFzaCIsInJlc3BvbnNlIiwibnRIYXNoIiwiaWRlbnRpdHkiLCJmcm9tIiwidG9VcHBlckNhc2UiLCJ0ZXh0IiwidW5pY29kZVN0cmluZyIsIm1kNCIsImFycmF5QnVmZmVyIiwia2V5IiwiY3J5cHRvIiwiY3JlYXRlSG1hYyIsInVwZGF0ZSIsImRpZ2VzdCIsIm1vZHVsZSIsImV4cG9ydHMiXSwic291cmNlcyI6WyIuLi9zcmMvbnRsbS1wYXlsb2FkLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBXcml0YWJsZVRyYWNraW5nQnVmZmVyIGZyb20gJy4vdHJhY2tpbmctYnVmZmVyL3dyaXRhYmxlLXRyYWNraW5nLWJ1ZmZlcic7XG5pbXBvcnQgKiBhcyBjcnlwdG8gZnJvbSAnY3J5cHRvJztcbmltcG9ydCBtZDQgZnJvbSAnanMtbWQ0JztcblxuaW50ZXJmYWNlIE9wdGlvbnMge1xuICBkb21haW46IHN0cmluZztcbiAgdXNlck5hbWU6IHN0cmluZztcbiAgcGFzc3dvcmQ6IHN0cmluZztcbiAgbnRsbXBhY2tldDoge1xuICAgIHRhcmdldDogQnVmZmVyO1xuICAgIG5vbmNlOiBCdWZmZXI7XG4gIH07XG59XG5cbmNsYXNzIE5UTE1SZXNwb25zZVBheWxvYWQge1xuICBkYXRhOiBCdWZmZXI7XG5cbiAgY29uc3RydWN0b3IobG9naW5EYXRhOiBPcHRpb25zKSB7XG4gICAgdGhpcy5kYXRhID0gdGhpcy5jcmVhdGVSZXNwb25zZShsb2dpbkRhdGEpO1xuICB9XG5cbiAgdG9TdHJpbmcoaW5kZW50ID0gJycpIHtcbiAgICByZXR1cm4gaW5kZW50ICsgJ05UTE0gQXV0aCc7XG4gIH1cblxuICBjcmVhdGVSZXNwb25zZShjaGFsbGVuZ2U6IE9wdGlvbnMpIHtcbiAgICBjb25zdCBjbGllbnRfbm9uY2UgPSB0aGlzLmNyZWF0ZUNsaWVudE5vbmNlKCk7XG4gICAgY29uc3QgbG12MmxlbiA9IDI0O1xuICAgIGNvbnN0IG50bG12MmxlbiA9IDE2O1xuICAgIGNvbnN0IGRvbWFpbiA9IGNoYWxsZW5nZS5kb21haW47XG4gICAgY29uc3QgdXNlcm5hbWUgPSBjaGFsbGVuZ2UudXNlck5hbWU7XG4gICAgY29uc3QgcGFzc3dvcmQgPSBjaGFsbGVuZ2UucGFzc3dvcmQ7XG4gICAgY29uc3QgbnRsbURhdGEgPSBjaGFsbGVuZ2UubnRsbXBhY2tldDtcbiAgICBjb25zdCBzZXJ2ZXJfZGF0YSA9IG50bG1EYXRhLnRhcmdldDtcbiAgICBjb25zdCBzZXJ2ZXJfbm9uY2UgPSBudGxtRGF0YS5ub25jZTtcbiAgICBjb25zdCBidWZmZXJMZW5ndGggPSA2NCArIChkb21haW4ubGVuZ3RoICogMikgKyAodXNlcm5hbWUubGVuZ3RoICogMikgKyBsbXYybGVuICsgbnRsbXYybGVuICsgOCArIDggKyA4ICsgNCArIHNlcnZlcl9kYXRhLmxlbmd0aCArIDQ7XG4gICAgY29uc3QgZGF0YSA9IG5ldyBXcml0YWJsZVRyYWNraW5nQnVmZmVyKGJ1ZmZlckxlbmd0aCk7XG4gICAgZGF0YS5wb3NpdGlvbiA9IDA7XG4gICAgZGF0YS53cml0ZVN0cmluZygnTlRMTVNTUFxcdTAwMDAnLCAndXRmOCcpO1xuICAgIGRhdGEud3JpdGVVSW50MzJMRSgweDAzKTtcbiAgICBjb25zdCBiYXNlSWR4ID0gNjQ7XG4gICAgY29uc3QgZG5JZHggPSBiYXNlSWR4O1xuICAgIGNvbnN0IHVuSWR4ID0gZG5JZHggKyBkb21haW4ubGVuZ3RoICogMjtcbiAgICBjb25zdCBsMklkeCA9IHVuSWR4ICsgdXNlcm5hbWUubGVuZ3RoICogMjtcbiAgICBjb25zdCBudElkeCA9IGwySWR4ICsgbG12MmxlbjtcbiAgICBkYXRhLndyaXRlVUludDE2TEUobG12Mmxlbik7XG4gICAgZGF0YS53cml0ZVVJbnQxNkxFKGxtdjJsZW4pO1xuICAgIGRhdGEud3JpdGVVSW50MzJMRShsMklkeCk7XG4gICAgZGF0YS53cml0ZVVJbnQxNkxFKG50bG12Mmxlbik7XG4gICAgZGF0YS53cml0ZVVJbnQxNkxFKG50bG12Mmxlbik7XG4gICAgZGF0YS53cml0ZVVJbnQzMkxFKG50SWR4KTtcbiAgICBkYXRhLndyaXRlVUludDE2TEUoZG9tYWluLmxlbmd0aCAqIDIpO1xuICAgIGRhdGEud3JpdGVVSW50MTZMRShkb21haW4ubGVuZ3RoICogMik7XG4gICAgZGF0YS53cml0ZVVJbnQzMkxFKGRuSWR4KTtcbiAgICBkYXRhLndyaXRlVUludDE2TEUodXNlcm5hbWUubGVuZ3RoICogMik7XG4gICAgZGF0YS53cml0ZVVJbnQxNkxFKHVzZXJuYW1lLmxlbmd0aCAqIDIpO1xuICAgIGRhdGEud3JpdGVVSW50MzJMRSh1bklkeCk7XG4gICAgZGF0YS53cml0ZVVJbnQxNkxFKDApO1xuICAgIGRhdGEud3JpdGVVSW50MTZMRSgwKTtcbiAgICBkYXRhLndyaXRlVUludDMyTEUoYmFzZUlkeCk7XG4gICAgZGF0YS53cml0ZVVJbnQxNkxFKDApO1xuICAgIGRhdGEud3JpdGVVSW50MTZMRSgwKTtcbiAgICBkYXRhLndyaXRlVUludDMyTEUoYmFzZUlkeCk7XG4gICAgZGF0YS53cml0ZVVJbnQxNkxFKDB4ODIwMSk7XG4gICAgZGF0YS53cml0ZVVJbnQxNkxFKDB4MDgpO1xuICAgIGRhdGEud3JpdGVTdHJpbmcoZG9tYWluLCAndWNzMicpO1xuICAgIGRhdGEud3JpdGVTdHJpbmcodXNlcm5hbWUsICd1Y3MyJyk7XG4gICAgY29uc3QgbG12MkRhdGEgPSB0aGlzLmxtdjJSZXNwb25zZShkb21haW4sIHVzZXJuYW1lLCBwYXNzd29yZCwgc2VydmVyX25vbmNlLCBjbGllbnRfbm9uY2UpO1xuICAgIGRhdGEuY29weUZyb20obG12MkRhdGEpO1xuICAgIGNvbnN0IGdlblRpbWUgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgICBjb25zdCBudGxtRGF0YUJ1ZmZlciA9IHRoaXMubnRsbXYyUmVzcG9uc2UoZG9tYWluLCB1c2VybmFtZSwgcGFzc3dvcmQsIHNlcnZlcl9ub25jZSwgc2VydmVyX2RhdGEsIGNsaWVudF9ub25jZSwgZ2VuVGltZSk7XG4gICAgZGF0YS5jb3B5RnJvbShudGxtRGF0YUJ1ZmZlcik7XG4gICAgZGF0YS53cml0ZVVJbnQzMkxFKDB4MDEwMSk7XG4gICAgZGF0YS53cml0ZVVJbnQzMkxFKDB4MDAwMCk7XG4gICAgY29uc3QgdGltZXN0YW1wID0gdGhpcy5jcmVhdGVUaW1lc3RhbXAoZ2VuVGltZSk7XG4gICAgZGF0YS5jb3B5RnJvbSh0aW1lc3RhbXApO1xuICAgIGRhdGEuY29weUZyb20oY2xpZW50X25vbmNlKTtcbiAgICBkYXRhLndyaXRlVUludDMyTEUoMHgwMDAwKTtcbiAgICBkYXRhLmNvcHlGcm9tKHNlcnZlcl9kYXRhKTtcbiAgICBkYXRhLndyaXRlVUludDMyTEUoMHgwMDAwKTtcbiAgICByZXR1cm4gZGF0YS5kYXRhO1xuICB9XG5cbiAgY3JlYXRlQ2xpZW50Tm9uY2UoKSB7XG4gICAgY29uc3QgY2xpZW50X25vbmNlID0gQnVmZmVyLmFsbG9jKDgsIDApO1xuICAgIGxldCBuaWR4ID0gMDtcbiAgICB3aGlsZSAobmlkeCA8IDgpIHtcbiAgICAgIGNsaWVudF9ub25jZS53cml0ZVVJbnQ4KE1hdGguY2VpbChNYXRoLnJhbmRvbSgpICogMjU1KSwgbmlkeCk7XG4gICAgICBuaWR4Kys7XG4gICAgfVxuICAgIHJldHVybiBjbGllbnRfbm9uY2U7XG4gIH1cblxuICBudGxtdjJSZXNwb25zZShkb21haW46IHN0cmluZywgdXNlcjogc3RyaW5nLCBwYXNzd29yZDogc3RyaW5nLCBzZXJ2ZXJOb25jZTogQnVmZmVyLCB0YXJnZXRJbmZvOiBCdWZmZXIsIGNsaWVudE5vbmNlOiBCdWZmZXIsIG15dGltZTogbnVtYmVyKSB7XG4gICAgY29uc3QgdGltZXN0YW1wID0gdGhpcy5jcmVhdGVUaW1lc3RhbXAobXl0aW1lKTtcbiAgICBjb25zdCBoYXNoID0gdGhpcy5udHYySGFzaChkb21haW4sIHVzZXIsIHBhc3N3b3JkKTtcbiAgICBjb25zdCBkYXRhTGVuZ3RoID0gNDAgKyB0YXJnZXRJbmZvLmxlbmd0aDtcbiAgICBjb25zdCBkYXRhID0gQnVmZmVyLmFsbG9jKGRhdGFMZW5ndGgsIDApO1xuICAgIHNlcnZlck5vbmNlLmNvcHkoZGF0YSwgMCwgMCwgOCk7XG4gICAgZGF0YS53cml0ZVVJbnQzMkxFKDB4MTAxLCA4KTtcbiAgICBkYXRhLndyaXRlVUludDMyTEUoMHgwLCAxMik7XG4gICAgdGltZXN0YW1wLmNvcHkoZGF0YSwgMTYsIDAsIDgpO1xuICAgIGNsaWVudE5vbmNlLmNvcHkoZGF0YSwgMjQsIDAsIDgpO1xuICAgIGRhdGEud3JpdGVVSW50MzJMRSgweDAsIDMyKTtcbiAgICB0YXJnZXRJbmZvLmNvcHkoZGF0YSwgMzYsIDAsIHRhcmdldEluZm8ubGVuZ3RoKTtcbiAgICBkYXRhLndyaXRlVUludDMyTEUoMHgwLCAzNiArIHRhcmdldEluZm8ubGVuZ3RoKTtcbiAgICByZXR1cm4gdGhpcy5obWFjTUQ1KGRhdGEsIGhhc2gpO1xuICB9XG5cbiAgY3JlYXRlVGltZXN0YW1wKHRpbWU6IG51bWJlcikge1xuICAgIGNvbnN0IHRlbnRoc09mQU1pY3Jvc2Vjb25kID0gKEJpZ0ludCh0aW1lKSArIEJpZ0ludCgxMTY0NDQ3MzYwMCkpICogQmlnSW50KDEwMDAwMDAwKTtcblxuICAgIGNvbnN0IGxvID0gTnVtYmVyKHRlbnRoc09mQU1pY3Jvc2Vjb25kICYgQmlnSW50KDB4ZmZmZmZmZmYpKTtcbiAgICBjb25zdCBoaSA9IE51bWJlcigodGVudGhzT2ZBTWljcm9zZWNvbmQgPj4gQmlnSW50KDMyKSkgJiBCaWdJbnQoMHhmZmZmZmZmZikpO1xuXG4gICAgY29uc3QgcmVzdWx0ID0gQnVmZmVyLmFsbG9jKDgpO1xuICAgIHJlc3VsdC53cml0ZVVJbnQzMkxFKGxvLCAwKTtcbiAgICByZXN1bHQud3JpdGVVSW50MzJMRShoaSwgNCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIGxtdjJSZXNwb25zZShkb21haW46IHN0cmluZywgdXNlcjogc3RyaW5nLCBwYXNzd29yZDogc3RyaW5nLCBzZXJ2ZXJOb25jZTogQnVmZmVyLCBjbGllbnROb25jZTogQnVmZmVyKSB7XG4gICAgY29uc3QgaGFzaCA9IHRoaXMubnR2Mkhhc2goZG9tYWluLCB1c2VyLCBwYXNzd29yZCk7XG4gICAgY29uc3QgZGF0YSA9IEJ1ZmZlci5hbGxvYyhzZXJ2ZXJOb25jZS5sZW5ndGggKyBjbGllbnROb25jZS5sZW5ndGgsIDApO1xuXG4gICAgc2VydmVyTm9uY2UuY29weShkYXRhKTtcbiAgICBjbGllbnROb25jZS5jb3B5KGRhdGEsIHNlcnZlck5vbmNlLmxlbmd0aCwgMCwgY2xpZW50Tm9uY2UubGVuZ3RoKTtcblxuICAgIGNvbnN0IG5ld2hhc2ggPSB0aGlzLmhtYWNNRDUoZGF0YSwgaGFzaCk7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBCdWZmZXIuYWxsb2MobmV3aGFzaC5sZW5ndGggKyBjbGllbnROb25jZS5sZW5ndGgsIDApO1xuXG4gICAgbmV3aGFzaC5jb3B5KHJlc3BvbnNlKTtcbiAgICBjbGllbnROb25jZS5jb3B5KHJlc3BvbnNlLCBuZXdoYXNoLmxlbmd0aCwgMCwgY2xpZW50Tm9uY2UubGVuZ3RoKTtcblxuICAgIHJldHVybiByZXNwb25zZTtcbiAgfVxuXG4gIG50djJIYXNoKGRvbWFpbjogc3RyaW5nLCB1c2VyOiBzdHJpbmcsIHBhc3N3b3JkOiBzdHJpbmcpIHtcbiAgICBjb25zdCBoYXNoID0gdGhpcy5udEhhc2gocGFzc3dvcmQpO1xuICAgIGNvbnN0IGlkZW50aXR5ID0gQnVmZmVyLmZyb20odXNlci50b1VwcGVyQ2FzZSgpICsgZG9tYWluLnRvVXBwZXJDYXNlKCksICd1Y3MyJyk7XG4gICAgcmV0dXJuIHRoaXMuaG1hY01ENShpZGVudGl0eSwgaGFzaCk7XG4gIH1cblxuICBudEhhc2godGV4dDogc3RyaW5nKSB7XG4gICAgY29uc3QgdW5pY29kZVN0cmluZyA9IEJ1ZmZlci5mcm9tKHRleHQsICd1Y3MyJyk7XG4gICAgcmV0dXJuIEJ1ZmZlci5mcm9tKG1kNC5hcnJheUJ1ZmZlcih1bmljb2RlU3RyaW5nKSk7XG4gIH1cblxuICBobWFjTUQ1KGRhdGE6IEJ1ZmZlciwga2V5OiBCdWZmZXIpIHtcbiAgICByZXR1cm4gY3J5cHRvLmNyZWF0ZUhtYWMoJ01ENScsIGtleSkudXBkYXRlKGRhdGEpLmRpZ2VzdCgpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IE5UTE1SZXNwb25zZVBheWxvYWQ7XG5tb2R1bGUuZXhwb3J0cyA9IE5UTE1SZXNwb25zZVBheWxvYWQ7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7Ozs7Ozs7QUFZQSxNQUFNQSxtQkFBTixDQUEwQjtFQUd4QkMsV0FBVyxDQUFDQyxTQUFELEVBQXFCO0lBQUEsS0FGaENDLElBRWdDO0lBQzlCLEtBQUtBLElBQUwsR0FBWSxLQUFLQyxjQUFMLENBQW9CRixTQUFwQixDQUFaO0VBQ0Q7O0VBRURHLFFBQVEsQ0FBQ0MsTUFBTSxHQUFHLEVBQVYsRUFBYztJQUNwQixPQUFPQSxNQUFNLEdBQUcsV0FBaEI7RUFDRDs7RUFFREYsY0FBYyxDQUFDRyxTQUFELEVBQXFCO0lBQ2pDLE1BQU1DLFlBQVksR0FBRyxLQUFLQyxpQkFBTCxFQUFyQjtJQUNBLE1BQU1DLE9BQU8sR0FBRyxFQUFoQjtJQUNBLE1BQU1DLFNBQVMsR0FBRyxFQUFsQjtJQUNBLE1BQU1DLE1BQU0sR0FBR0wsU0FBUyxDQUFDSyxNQUF6QjtJQUNBLE1BQU1DLFFBQVEsR0FBR04sU0FBUyxDQUFDTyxRQUEzQjtJQUNBLE1BQU1DLFFBQVEsR0FBR1IsU0FBUyxDQUFDUSxRQUEzQjtJQUNBLE1BQU1DLFFBQVEsR0FBR1QsU0FBUyxDQUFDVSxVQUEzQjtJQUNBLE1BQU1DLFdBQVcsR0FBR0YsUUFBUSxDQUFDRyxNQUE3QjtJQUNBLE1BQU1DLFlBQVksR0FBR0osUUFBUSxDQUFDSyxLQUE5QjtJQUNBLE1BQU1DLFlBQVksR0FBRyxLQUFNVixNQUFNLENBQUNXLE1BQVAsR0FBZ0IsQ0FBdEIsR0FBNEJWLFFBQVEsQ0FBQ1UsTUFBVCxHQUFrQixDQUE5QyxHQUFtRGIsT0FBbkQsR0FBNkRDLFNBQTdELEdBQXlFLENBQXpFLEdBQTZFLENBQTdFLEdBQWlGLENBQWpGLEdBQXFGLENBQXJGLEdBQXlGTyxXQUFXLENBQUNLLE1BQXJHLEdBQThHLENBQW5JO0lBQ0EsTUFBTXBCLElBQUks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
|
|
138
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfd3JpdGFibGVUcmFja2luZ0J1ZmZlciIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiY3J5cHRvIiwiX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQiLCJfanNNZCIsIl9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSIsIm5vZGVJbnRlcm9wIiwiV2Vha01hcCIsImNhY2hlQmFiZWxJbnRlcm9wIiwiY2FjaGVOb2RlSW50ZXJvcCIsIm9iaiIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0IiwiY2FjaGUiLCJoYXMiLCJnZXQiLCJuZXdPYmoiLCJoYXNQcm9wZXJ0eURlc2NyaXB0b3IiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsImtleSIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsImRlc2MiLCJzZXQiLCJOVExNUmVzcG9uc2VQYXlsb2FkIiwiZGF0YSIsImNvbnN0cnVjdG9yIiwibG9naW5EYXRhIiwiY3JlYXRlUmVzcG9uc2UiLCJ0b1N0cmluZyIsImluZGVudCIsImNoYWxsZW5nZSIsImNsaWVudF9ub25jZSIsImNyZWF0ZUNsaWVudE5vbmNlIiwibG12MmxlbiIsIm50bG12MmxlbiIsImRvbWFpbiIsInVzZXJuYW1lIiwidXNlck5hbWUiLCJwYXNzd29yZCIsIm50bG1EYXRhIiwibnRsbXBhY2tldCIsInNlcnZlcl9kYXRhIiwidGFyZ2V0Iiwic2VydmVyX25vbmNlIiwibm9uY2UiLCJidWZmZXJMZW5ndGgiLCJsZW5ndGgiLCJXcml0YWJsZVRyYWNraW5nQnVmZmVyIiwicG9zaXRpb24iLCJ3cml0ZVN0cmluZyIsIndyaXRlVUludDMyTEUiLCJiYXNlSWR4IiwiZG5JZHgiLCJ1bklkeCIsImwySWR4IiwibnRJZHgiLCJ3cml0ZVVJbnQxNkxFIiwibG12MkRhdGEiLCJsbXYyUmVzcG9uc2UiLCJjb3B5RnJvbSIsImdlblRpbWUiLCJEYXRlIiwiZ2V0VGltZSIsIm50bG1EYXRhQnVmZmVyIiwibnRsbXYyUmVzcG9uc2UiLCJ0aW1lc3RhbXAiLCJjcmVhdGVUaW1lc3RhbXAiLCJCdWZmZXIiLCJhbGxvYyIsIm5pZHgiLCJ3cml0ZVVJbnQ4IiwiTWF0aCIsImNlaWwiLCJyYW5kb20iLCJ1c2VyIiwic2VydmVyTm9uY2UiLCJ0YXJnZXRJbmZvIiwiY2xpZW50Tm9uY2UiLCJteXRpbWUiLCJoYXNoIiwibnR2Mkhhc2giLCJkYXRhTGVuZ3RoIiwiY29weSIsImhtYWNNRDUiLCJ0aW1lIiwidGVudGhzT2ZBTWljcm9zZWNvbmQiLCJCaWdJbnQiLCJsbyIsIk51bWJlciIsImhpIiwicmVzdWx0IiwibmV3aGFzaCIsInJlc3BvbnNlIiwibnRIYXNoIiwiaWRlbnRpdHkiLCJmcm9tIiwidG9VcHBlckNhc2UiLCJ0ZXh0IiwidW5pY29kZVN0cmluZyIsIm1kNCIsImFycmF5QnVmZmVyIiwiY3JlYXRlSG1hYyIsInVwZGF0ZSIsImRpZ2VzdCIsIl9kZWZhdWx0IiwiZXhwb3J0cyIsIm1vZHVsZSJdLCJzb3VyY2VzIjpbIi4uL3NyYy9udGxtLXBheWxvYWQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFdyaXRhYmxlVHJhY2tpbmdCdWZmZXIgZnJvbSAnLi90cmFja2luZy1idWZmZXIvd3JpdGFibGUtdHJhY2tpbmctYnVmZmVyJztcbmltcG9ydCAqIGFzIGNyeXB0byBmcm9tICdjcnlwdG8nO1xuaW1wb3J0IG1kNCBmcm9tICdqcy1tZDQnO1xuXG5pbnRlcmZhY2UgT3B0aW9ucyB7XG4gIGRvbWFpbjogc3RyaW5nO1xuICB1c2VyTmFtZTogc3RyaW5nO1xuICBwYXNzd29yZDogc3RyaW5nO1xuICBudGxtcGFja2V0OiB7XG4gICAgdGFyZ2V0OiBCdWZmZXI7XG4gICAgbm9uY2U6IEJ1ZmZlcjtcbiAgfTtcbn1cblxuY2xhc3MgTlRMTVJlc3BvbnNlUGF5bG9hZCB7XG4gIGRhdGE6IEJ1ZmZlcjtcblxuICBjb25zdHJ1Y3Rvcihsb2dpbkRhdGE6IE9wdGlvbnMpIHtcbiAgICB0aGlzLmRhdGEgPSB0aGlzLmNyZWF0ZVJlc3BvbnNlKGxvZ2luRGF0YSk7XG4gIH1cblxuICB0b1N0cmluZyhpbmRlbnQgPSAnJykge1xuICAgIHJldHVybiBpbmRlbnQgKyAnTlRMTSBBdXRoJztcbiAgfVxuXG4gIGNyZWF0ZVJlc3BvbnNlKGNoYWxsZW5nZTogT3B0aW9ucykge1xuICAgIGNvbnN0IGNsaWVudF9ub25jZSA9IHRoaXMuY3JlYXRlQ2xpZW50Tm9uY2UoKTtcbiAgICBjb25zdCBsbXYybGVuID0gMjQ7XG4gICAgY29uc3QgbnRsbXYybGVuID0gMTY7XG4gICAgY29uc3QgZG9tYWluID0gY2hhbGxlbmdlLmRvbWFpbjtcbiAgICBjb25zdCB1c2VybmFtZSA9IGNoYWxsZW5nZS51c2VyTmFtZTtcbiAgICBjb25zdCBwYXNzd29yZCA9IGNoYWxsZW5nZS5wYXNzd29yZDtcbiAgICBjb25zdCBudGxtRGF0YSA9IGNoYWxsZW5nZS5udGxtcGFja2V0O1xuICAgIGNvbnN0IHNlcnZlcl9kYXRhID0gbnRsbURhdGEudGFyZ2V0O1xuICAgIGNvbnN0IHNlcnZlcl9ub25jZSA9IG50bG1EYXRhLm5vbmNlO1xuICAgIGNvbnN0IGJ1ZmZlckxlbmd0aCA9IDY0ICsgKGRvbWFpbi5sZW5ndGggKiAyKSArICh1c2VybmFtZS5sZW5ndGggKiAyKSArIGxtdjJsZW4gKyBudGxtdjJsZW4gKyA4ICsgOCArIDggKyA0ICsgc2VydmVyX2RhdGEubGVuZ3RoICsgNDtcbiAgICBjb25zdCBkYXRhID0gbmV3IFdyaXRhYmxlVHJhY2tpbmdCdWZmZXIoYnVmZmVyTGVuZ3RoKTtcbiAgICBkYXRhLnBvc2l0aW9uID0gMDtcbiAgICBkYXRhLndyaXRlU3RyaW5nKCdOVExNU1NQXFx1MDAwMCcsICd1dGY4Jyk7XG4gICAgZGF0YS53cml0ZVVJbnQzMkxFKDB4MDMpO1xuICAgIGNvbnN0IGJhc2VJZHggPSA2NDtcbiAgICBjb25zdCBkbklkeCA9IGJhc2VJZHg7XG4gICAgY29uc3QgdW5JZHggPSBkbklkeCArIGRvbWFpbi5sZW5ndGggKiAyO1xuICAgIGNvbnN0IGwySWR4ID0gdW5JZHggKyB1c2VybmFtZS5sZW5ndGggKiAyO1xuICAgIGNvbnN0IG50SWR4ID0gbDJJZHggKyBsbXYybGVuO1xuICAgIGRhdGEud3JpdGVVSW50MTZMRShsbXYybGVuKTtcbiAgICBkYXRhLndyaXRlVUludDE2TEUobG12Mmxlbik7XG4gICAgZGF0YS53cml0ZVVJbnQzMkxFKGwySWR4KTtcbiAgICBkYXRhLndyaXRlVUludDE2TEUobnRsbXYybGVuKTtcbiAgICBkYXRhLndyaXRlVUludDE2TEUobnRsbXYybGVuKTtcbiAgICBkYXRhLndyaXRlVUludDMyTEUobnRJZHgpO1xuICAgIGRhdGEud3JpdGVVSW50MTZMRShkb21haW4ubGVuZ3RoICogMik7XG4gICAgZGF0YS53cml0ZVVJbnQxNkxFKGRvbWFpbi5sZW5ndGggKiAyKTtcbiAgICBkYXRhLndyaXRlVUludDMyTEUoZG5JZHgpO1xuICAgIGRhdGEud3JpdGVVSW50MTZMRSh1c2VybmFtZS5sZW5ndGggKiAyKTtcbiAgICBkYXRhLndyaXRlVUludDE2TEUodXNlcm5hbWUubGVuZ3RoICogMik7XG4gICAgZGF0YS53cml0ZVVJbnQzMkxFKHVuSWR4KTtcbiAgICBkYXRhLndyaXRlVUludDE2TEUoMCk7XG4gICAgZGF0YS53cml0ZVVJbnQxNkxFKDApO1xuICAgIGRhdGEud3JpdGVVSW50MzJMRShiYXNlSWR4KTtcbiAgICBkYXRhLndyaXRlVUludDE2TEUoMCk7XG4gICAgZGF0YS53cml0ZVVJbnQxNkxFKDApO1xuICAgIGRhdGEud3JpdGVVSW50MzJMRShiYXNlSWR4KTtcbiAgICBkYXRhLndyaXRlVUludDE2TEUoMHg4MjAxKTtcbiAgICBkYXRhLndyaXRlVUludDE2TEUoMHgwOCk7XG4gICAgZGF0YS53cml0ZVN0cmluZyhkb21haW4sICd1Y3MyJyk7XG4gICAgZGF0YS53cml0ZVN0cmluZyh1c2VybmFtZSwgJ3VjczInKTtcbiAgICBjb25zdCBsbXYyRGF0YSA9IHRoaXMubG12MlJlc3BvbnNlKGRvbWFpbiwgdXNlcm5hbWUsIHBhc3N3b3JkLCBzZXJ2ZXJfbm9uY2UsIGNsaWVudF9ub25jZSk7XG4gICAgZGF0YS5jb3B5RnJvbShsbXYyRGF0YSk7XG4gICAgY29uc3QgZ2VuVGltZSA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuICAgIGNvbnN0IG50bG1EYXRhQnVmZmVyID0gdGhpcy5udGxtdjJSZXNwb25zZShkb21haW4sIHVzZXJuYW1lLCBwYXNzd29yZCwgc2VydmVyX25vbmNlLCBzZXJ2ZXJfZGF0YSwgY2xpZW50X25vbmNlLCBnZW5UaW1lKTtcbiAgICBkYXRhLmNvcHlGcm9tKG50bG1EYXRhQnVmZmVyKTtcbiAgICBkYXRhLndyaXRlVUludDMyTEUoMHgwMTAxKTtcbiAgICBkYXRhLndyaXRlVUludDMyTEUoMHgwMDAwKTtcbiAgICBjb25zdCB0aW1lc3RhbXAgPSB0aGlzLmNyZWF0ZVRpbWVzdGFtcChnZW5UaW1lKTtcbiAgICBkYXRhLmNvcHlGcm9tKHRpbWVzdGFtcCk7XG4gICAgZGF0YS5jb3B5RnJvbShjbGllbnRfbm9uY2UpO1xuICAgIGRhdGEud3JpdGVVSW50MzJMRSgweDAwMDApO1xuICAgIGRhdGEuY29weUZyb20oc2VydmVyX2RhdGEpO1xuICAgIGRhdGEud3JpdGVVSW50MzJMRSgweDAwMDApO1xuICAgIHJldHVybiBkYXRhLmRhdGE7XG4gIH1cblxuICBjcmVhdGVDbGllbnROb25jZSgpIHtcbiAgICBjb25zdCBjbGllbnRfbm9uY2UgPSBCdWZmZXIuYWxsb2MoOCwgMCk7XG4gICAgbGV0IG5pZHggPSAwO1xuICAgIHdoaWxlIChuaWR4IDwgOCkge1xuICAgICAgY2xpZW50X25vbmNlLndyaXRlVUludDgoTWF0aC5jZWlsKE1hdGgucmFuZG9tKCkgKiAyNTUpLCBuaWR4KTtcbiAgICAgIG5pZHgrKztcbiAgICB9XG4gICAgcmV0dXJuIGNsaWVudF9ub25jZTtcbiAgfVxuXG4gIG50bG12MlJlc3BvbnNlKGRvbWFpbjogc3RyaW5nLCB1c2VyOiBzdHJpbmcsIHBhc3N3b3JkOiBzdHJpbmcsIHNlcnZlck5vbmNlOiBCdWZmZXIsIHRhcmdldEluZm86IEJ1ZmZlciwgY2xpZW50Tm9uY2U6IEJ1ZmZlciwgbXl0aW1lOiBudW1iZXIpIHtcbiAgICBjb25zdCB0aW1lc3RhbXAgPSB0aGlzLmNyZWF0ZVRpbWVzdGFtcChteXRpbWUpO1xuICAgIGNvbnN0IGhhc2ggPSB0aGlzLm50djJIYXNoKGRvbWFpbiwgdXNlciwgcGFzc3dvcmQpO1xuICAgIGNvbnN0IGRhdGFMZW5ndGggPSA0MCArIHRhcmdldEluZm8ubGVuZ3RoO1xuICAgIGNvbnN0IGRhdGEgPSBCdWZmZXIuYWxsb2MoZGF0YUxlbmd0aCwgMCk7XG4gICAgc2VydmVyTm9uY2UuY29weShkYXRhLCAwLCAwLCA4KTtcbiAgICBkYXRhLndyaXRlVUludDMyTEUoMHgxMDEsIDgpO1xuICAgIGRhdGEud3JpdGVVSW50MzJMRSgweDAsIDEyKTtcbiAgICB0aW1lc3RhbXAuY29weShkYXRhLCAxNiwgMCwgOCk7XG4gICAgY2xpZW50Tm9uY2UuY29weShkYXRhLCAyNCwgMCwgOCk7XG4gICAgZGF0YS53cml0ZVVJbnQzMkxFKDB4MCwgMzIpO1xuICAgIHRhcmdldEluZm8uY29weShkYXRhLCAzNiwgMCwgdGFyZ2V0SW5mby5sZW5ndGgpO1xuICAgIGRhdGEud3JpdGVVSW50MzJMRSgweDAsIDM2ICsgdGFyZ2V0SW5mby5sZW5ndGgpO1xuICAgIHJldHVybiB0aGlzLmhtYWNNRDUoZGF0YSwgaGFzaCk7XG4gIH1cblxuICBjcmVhdGVUaW1lc3RhbXAodGltZTogbnVtYmVyKSB7XG4gICAgY29uc3QgdGVudGhzT2ZBTWljcm9zZWNvbmQgPSAoQmlnSW50KHRpbWUpICsgQmlnSW50KDExNjQ0NDczNjAwKSkgKiBCaWdJbnQoMTAwMDAwMDApO1xuXG4gICAgY29uc3QgbG8gPSBOdW1iZXIodGVudGhzT2ZBTWljcm9zZWNvbmQgJiBCaWdJbnQoMHhmZmZmZmZmZikpO1xuICAgIGNvbnN0IGhpID0gTnVtYmVyKCh0ZW50aHNPZkFNaWNyb3NlY29uZCA+PiBCaWdJbnQoMzIpKSAmIEJpZ0ludCgweGZmZmZmZmZmKSk7XG5cbiAgICBjb25zdCByZXN1bHQgPSBCdWZmZXIuYWxsb2MoOCk7XG4gICAgcmVzdWx0LndyaXRlVUludDMyTEUobG8sIDApO1xuICAgIHJlc3VsdC53cml0ZVVJbnQzMkxFKGhpLCA0KTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgbG12MlJlc3BvbnNlKGRvbWFpbjogc3RyaW5nLCB1c2VyOiBzdHJpbmcsIHBhc3N3b3JkOiBzdHJpbmcsIHNlcnZlck5vbmNlOiBCdWZmZXIsIGNsaWVudE5vbmNlOiBCdWZmZXIpIHtcbiAgICBjb25zdCBoYXNoID0gdGhpcy5udHYySGFzaChkb21haW4sIHVzZXIsIHBhc3N3b3JkKTtcbiAgICBjb25zdCBkYXRhID0gQnVmZmVyLmFsbG9jKHNlcnZlck5vbmNlLmxlbmd0aCArIGNsaWVudE5vbmNlLmxlbmd0aCwgMCk7XG5cbiAgICBzZXJ2ZXJOb25jZS5jb3B5KGRhdGEpO1xuICAgIGNsaWVudE5vbmNlLmNvcHkoZGF0YSwgc2VydmVyTm9uY2UubGVuZ3RoLCAwLCBjbGllbnROb25jZS5sZW5ndGgpO1xuXG4gICAgY29uc3QgbmV3aGFzaCA9IHRoaXMuaG1hY01ENShkYXRhLCBoYXNoKTtcbiAgICBjb25zdCByZXNwb25zZSA9IEJ1ZmZlci5hbGxvYyhuZXdoYXNoLmxlbmd0aCArIGNsaWVudE5vbmNlLmxlbmd0aCwgMCk7XG5cbiAgICBuZXdoYXNoLmNvcHkocmVzcG9uc2UpO1xuICAgIGNsaWVudE5vbmNlLmNvcHkocmVzcG9uc2UsIG5ld2hhc2gubGVuZ3RoLCAwLCBjbGllbnROb25jZS5sZW5ndGgpO1xuXG4gICAgcmV0dXJuIHJlc3BvbnNlO1xuICB9XG5cbiAgbnR2Mkhhc2goZG9tYWluOiBzdHJpbmcsIHVzZXI6IHN0cmluZywgcGFzc3dvcmQ6IHN0cmluZykge1xuICAgIGNvbnN0IGhhc2ggPSB0aGlzLm50SGFzaChwYXNzd29yZCk7XG4gICAgY29uc3QgaWRlbnRpdHkgPSBCdWZmZXIuZnJvbSh1c2VyLnRvVXBwZXJDYXNlKCkgKyBkb21haW4udG9VcHBlckNhc2UoKSwgJ3VjczInKTtcbiAgICByZXR1cm4gdGhpcy5obWFjTUQ1KGlkZW50aXR5LCBoYXNoKTtcbiAgfVxuXG4gIG50SGFzaCh0ZXh0OiBzdHJpbmcpIHtcbiAgICBjb25zdCB1bmljb2RlU3RyaW5nID0gQnVmZmVyLmZyb20odGV4dCwgJ3VjczInKTtcbiAgICByZXR1cm4gQnVmZmVyLmZyb20obWQ0LmFycmF5QnVmZmVyKHVuaWNvZGVTdHJpbmcpKTtcbiAgfVxuXG4gIGhtYWNNRDUoZGF0YTogQnVmZmVyLCBrZXk6IEJ1ZmZlcikge1xuICAgIHJldHVybiBjcnlwdG8uY3JlYXRlSG1hYygnTUQ1Jywga2V5KS51cGRhdGUoZGF0YSkuZGlnZXN0KCk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgTlRMTVJlc3BvbnNlUGF5bG9hZDtcbm1vZHVsZS5leHBvcnRzID0gTlRMTVJlc3BvbnNlUGF5bG9hZDtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsSUFBQUEsdUJBQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLE1BQUEsR0FBQUMsdUJBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFHLEtBQUEsR0FBQUosc0JBQUEsQ0FBQUMsT0FBQTtBQUF5QixTQUFBSSx5QkFBQUMsV0FBQSxlQUFBQyxPQUFBLGtDQUFBQyxpQkFBQSxPQUFBRCxPQUFBLFFBQUFFLGdCQUFBLE9BQUFGLE9BQUEsWUFBQUYsd0JBQUEsWUFBQUEsQ0FBQUMsV0FBQSxXQUFBQSxXQUFBLEdBQUFHLGdCQUFBLEdBQUFELGlCQUFBLEtBQUFGLFdBQUE7QUFBQSxTQUFBSCx3QkFBQU8sR0FBQSxFQUFBSixXQUFBLFNBQUFBLFdBQUEsSUFBQUksR0FBQSxJQUFBQSxHQUFBLENBQUFDLFVBQUEsV0FBQUQsR0FBQSxRQUFBQSxHQUFBLG9CQUFBQSxHQUFBLHdCQUFBQSxHQUFBLDRCQUFBRSxPQUFBLEVBQUFG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
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ntlm-payload.js","names":["_writableTrackingBuffer","_interopRequireDefault","require","crypto","_interopRequireWildcard","_jsMd","_getRequireWildcardCache","nodeInterop","WeakMap","cacheBabelInterop","cacheNodeInterop","obj","__esModule","default","cache","has","get","newObj","hasPropertyDescriptor","Object","defineProperty","getOwnPropertyDescriptor","key","prototype","hasOwnProperty","call","desc","set","NTLMResponsePayload","data","constructor","loginData","createResponse","toString","indent","challenge","client_nonce","createClientNonce","lmv2len","ntlmv2len","domain","username","userName","password","ntlmData","ntlmpacket","server_data","target","server_nonce","nonce","bufferLength","length","WritableTrackingBuffer","position","writeString","writeUInt32LE","baseIdx","dnIdx","unIdx","l2Idx","ntIdx","writeUInt16LE","lmv2Data","lmv2Response","copyFrom","genTime","Date","getTime","ntlmDataBuffer","ntlmv2Response","timestamp","createTimestamp","Buffer","alloc","nidx","writeUInt8","Math","ceil","random","user","serverNonce","targetInfo","clientNonce","mytime","hash","ntv2Hash","dataLength","copy","hmacMD5","time","tenthsOfAMicrosecond","BigInt","lo","Number","hi","result","newhash","response","ntHash","identity","from","toUpperCase","text","unicodeString","md4","arrayBuffer","createHmac","update","digest","_default","exports","module"],"sources":["../src/ntlm-payload.ts"],"sourcesContent":["import WritableTrackingBuffer from './tracking-buffer/writable-tracking-buffer';\nimport * as crypto from 'crypto';\nimport md4 from 'js-md4';\n\ninterface Options {\n domain: string;\n userName: string;\n password: string;\n ntlmpacket: {\n target: Buffer;\n nonce: Buffer;\n };\n}\n\nclass NTLMResponsePayload {\n data: Buffer;\n\n constructor(loginData: Options) {\n this.data = this.createResponse(loginData);\n }\n\n toString(indent = '') {\n return indent + 'NTLM Auth';\n }\n\n createResponse(challenge: Options) {\n const client_nonce = this.createClientNonce();\n const lmv2len = 24;\n const ntlmv2len = 16;\n const domain = challenge.domain;\n const username = challenge.userName;\n const password = challenge.password;\n const ntlmData = challenge.ntlmpacket;\n const server_data = ntlmData.target;\n const server_nonce = ntlmData.nonce;\n const bufferLength = 64 + (domain.length * 2) + (username.length * 2) + lmv2len + ntlmv2len + 8 + 8 + 8 + 4 + server_data.length + 4;\n const data = new WritableTrackingBuffer(bufferLength);\n data.position = 0;\n data.writeString('NTLMSSP\\u0000', 'utf8');\n data.writeUInt32LE(0x03);\n const baseIdx = 64;\n const dnIdx = baseIdx;\n const unIdx = dnIdx + domain.length * 2;\n const l2Idx = unIdx + username.length * 2;\n const ntIdx = l2Idx + lmv2len;\n data.writeUInt16LE(lmv2len);\n data.writeUInt16LE(lmv2len);\n data.writeUInt32LE(l2Idx);\n data.writeUInt16LE(ntlmv2len);\n data.writeUInt16LE(ntlmv2len);\n data.writeUInt32LE(ntIdx);\n data.writeUInt16LE(domain.length * 2);\n data.writeUInt16LE(domain.length * 2);\n data.writeUInt32LE(dnIdx);\n data.writeUInt16LE(username.length * 2);\n data.writeUInt16LE(username.length * 2);\n data.writeUInt32LE(unIdx);\n data.writeUInt16LE(0);\n data.writeUInt16LE(0);\n data.writeUInt32LE(baseIdx);\n data.writeUInt16LE(0);\n data.writeUInt16LE(0);\n data.writeUInt32LE(baseIdx);\n data.writeUInt16LE(0x8201);\n data.writeUInt16LE(0x08);\n data.writeString(domain, 'ucs2');\n data.writeString(username, 'ucs2');\n const lmv2Data = this.lmv2Response(domain, username, password, server_nonce, client_nonce);\n data.copyFrom(lmv2Data);\n const genTime = new Date().getTime();\n const ntlmDataBuffer = this.ntlmv2Response(domain, username, password, server_nonce, server_data, client_nonce, genTime);\n data.copyFrom(ntlmDataBuffer);\n data.writeUInt32LE(0x0101);\n data.writeUInt32LE(0x0000);\n const timestamp = this.createTimestamp(genTime);\n data.copyFrom(timestamp);\n data.copyFrom(client_nonce);\n data.writeUInt32LE(0x0000);\n data.copyFrom(server_data);\n data.writeUInt32LE(0x0000);\n return data.data;\n }\n\n createClientNonce() {\n const client_nonce = Buffer.alloc(8, 0);\n let nidx = 0;\n while (nidx < 8) {\n client_nonce.writeUInt8(Math.ceil(Math.random() * 255), nidx);\n nidx++;\n }\n return client_nonce;\n }\n\n ntlmv2Response(domain: string, user: string, password: string, serverNonce: Buffer, targetInfo: Buffer, clientNonce: Buffer, mytime: number) {\n const timestamp = this.createTimestamp(mytime);\n const hash = this.ntv2Hash(domain, user, password);\n const dataLength = 40 + targetInfo.length;\n const data = Buffer.alloc(dataLength, 0);\n serverNonce.copy(data, 0, 0, 8);\n data.writeUInt32LE(0x101, 8);\n data.writeUInt32LE(0x0, 12);\n timestamp.copy(data, 16, 0, 8);\n clientNonce.copy(data, 24, 0, 8);\n data.writeUInt32LE(0x0, 32);\n targetInfo.copy(data, 36, 0, targetInfo.length);\n data.writeUInt32LE(0x0, 36 + targetInfo.length);\n return this.hmacMD5(data, hash);\n }\n\n createTimestamp(time: number) {\n const tenthsOfAMicrosecond = (BigInt(time) + BigInt(11644473600)) * BigInt(10000000);\n\n const lo = Number(tenthsOfAMicrosecond & BigInt(0xffffffff));\n const hi = Number((tenthsOfAMicrosecond >> BigInt(32)) & BigInt(0xffffffff));\n\n const result = Buffer.alloc(8);\n result.writeUInt32LE(lo, 0);\n result.writeUInt32LE(hi, 4);\n return result;\n }\n\n lmv2Response(domain: string, user: string, password: string, serverNonce: Buffer, clientNonce: Buffer) {\n const hash = this.ntv2Hash(domain, user, password);\n const data = Buffer.alloc(serverNonce.length + clientNonce.length, 0);\n\n serverNonce.copy(data);\n clientNonce.copy(data, serverNonce.length, 0, clientNonce.length);\n\n const newhash = this.hmacMD5(data, hash);\n const response = Buffer.alloc(newhash.length + clientNonce.length, 0);\n\n newhash.copy(response);\n clientNonce.copy(response, newhash.length, 0, clientNonce.length);\n\n return response;\n }\n\n ntv2Hash(domain: string, user: string, password: string) {\n const hash = this.ntHash(password);\n const identity = Buffer.from(user.toUpperCase() + domain.toUpperCase(), 'ucs2');\n return this.hmacMD5(identity, hash);\n }\n\n ntHash(text: string) {\n const unicodeString = Buffer.from(text, 'ucs2');\n return Buffer.from(md4.arrayBuffer(unicodeString));\n }\n\n hmacMD5(data: Buffer, key: Buffer) {\n return crypto.createHmac('MD5', key).update(data).digest();\n }\n}\n\nexport default NTLMResponsePayload;\nmodule.exports = NTLMResponsePayload;\n"],"mappings":"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"}
|
package/lib/ntlm.js
CHANGED
|
@@ -38,16 +38,13 @@ const NTLMFlags = {
|
|
|
38
38
|
NTLM_NegotiateKeyExchange: 0x40000000,
|
|
39
39
|
NTLM_Negotiate56: 0x80000000
|
|
40
40
|
};
|
|
41
|
-
|
|
42
41
|
function createNTLMRequest(options) {
|
|
43
42
|
const domain = escape(options.domain.toUpperCase());
|
|
44
43
|
const workstation = options.workstation ? escape(options.workstation.toUpperCase()) : '';
|
|
45
44
|
let type1flags = NTLMFlags.NTLM_NegotiateUnicode + NTLMFlags.NTLM_NegotiateOEM + NTLMFlags.NTLM_RequestTarget + NTLMFlags.NTLM_NegotiateNTLM + NTLMFlags.NTLM_NegotiateOemDomainSupplied + NTLMFlags.NTLM_NegotiateOemWorkstationSupplied + NTLMFlags.NTLM_NegotiateAlwaysSign + NTLMFlags.NTLM_NegotiateVersion + NTLMFlags.NTLM_NegotiateExtendedSecurity + NTLMFlags.NTLM_Negotiate128 + NTLMFlags.NTLM_Negotiate56;
|
|
46
|
-
|
|
47
45
|
if (workstation === '') {
|
|
48
46
|
type1flags -= NTLMFlags.NTLM_NegotiateOemWorkstationSupplied;
|
|
49
47
|
}
|
|
50
|
-
|
|
51
48
|
const fixedData = Buffer.alloc(40);
|
|
52
49
|
const buffers = [fixedData];
|
|
53
50
|
let offset = 0;
|
|
@@ -72,4 +69,4 @@ function createNTLMRequest(options) {
|
|
|
72
69
|
buffers.push(Buffer.from(domain, 'ascii'));
|
|
73
70
|
return Buffer.concat(buffers);
|
|
74
71
|
}
|
|
75
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
72
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJOVExNRmxhZ3MiLCJOVExNX05lZ290aWF0ZVVuaWNvZGUiLCJOVExNX05lZ290aWF0ZU9FTSIsIk5UTE1fUmVxdWVzdFRhcmdldCIsIk5UTE1fVW5rbm93bjkiLCJOVExNX05lZ290aWF0ZVNpZ24iLCJOVExNX05lZ290aWF0ZVNlYWwiLCJOVExNX05lZ290aWF0ZURhdGFncmFtIiwiTlRMTV9OZWdvdGlhdGVMYW5NYW5hZ2VyS2V5IiwiTlRMTV9Vbmtub3duOCIsIk5UTE1fTmVnb3RpYXRlTlRMTSIsIk5UTE1fTmVnb3RpYXRlTlRPbmx5IiwiTlRMTV9Bbm9ueW1vdXMiLCJOVExNX05lZ290aWF0ZU9lbURvbWFpblN1cHBsaWVkIiwiTlRMTV9OZWdvdGlhdGVPZW1Xb3Jrc3RhdGlvblN1cHBsaWVkIiwiTlRMTV9Vbmtub3duNiIsIk5UTE1fTmVnb3RpYXRlQWx3YXlzU2lnbiIsIk5UTE1fVGFyZ2V0VHlwZURvbWFpbiIsIk5UTE1fVGFyZ2V0VHlwZVNlcnZlciIsIk5UTE1fVGFyZ2V0VHlwZVNoYXJlIiwiTlRMTV9OZWdvdGlhdGVFeHRlbmRlZFNlY3VyaXR5IiwiTlRMTV9OZWdvdGlhdGVJZGVudGlmeSIsIk5UTE1fVW5rbm93bjUiLCJOVExNX1JlcXVlc3ROb25OVFNlc3Npb25LZXkiLCJOVExNX05lZ290aWF0ZVRhcmdldEluZm8iLCJOVExNX1Vua25vd240IiwiTlRMTV9OZWdvdGlhdGVWZXJzaW9uIiwiTlRMTV9Vbmtub3duMyIsIk5UTE1fVW5rbm93bjIiLCJOVExNX1Vua25vd24xIiwiTlRMTV9OZWdvdGlhdGUxMjgiLCJOVExNX05lZ290aWF0ZUtleUV4Y2hhbmdlIiwiTlRMTV9OZWdvdGlhdGU1NiIsImNyZWF0ZU5UTE1SZXF1ZXN0Iiwib3B0aW9ucyIsImRvbWFpbiIsImVzY2FwZSIsInRvVXBwZXJDYXNlIiwid29ya3N0YXRpb24iLCJ0eXBlMWZsYWdzIiwiZml4ZWREYXRhIiwiQnVmZmVyIiwiYWxsb2MiLCJidWZmZXJzIiwib2Zmc2V0Iiwid3JpdGUiLCJ3cml0ZVVJbnQ4Iiwid3JpdGVVSW50MzJMRSIsIndyaXRlVUludDE2TEUiLCJsZW5ndGgiLCJwdXNoIiwiZnJvbSIsImNvbmNhdCJdLCJzb3VyY2VzIjpbIi4uL3NyYy9udGxtLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImNvbnN0IE5UTE1GbGFncyA9IHtcbiAgTlRMTV9OZWdvdGlhdGVVbmljb2RlOiAweDAwMDAwMDAxLFxuICBOVExNX05lZ290aWF0ZU9FTTogMHgwMDAwMDAwMixcbiAgTlRMTV9SZXF1ZXN0VGFyZ2V0OiAweDAwMDAwMDA0LFxuICBOVExNX1Vua25vd245OiAweDAwMDAwMDA4LFxuICBOVExNX05lZ290aWF0ZVNpZ246IDB4MDAwMDAwMTAsXG4gIE5UTE1fTmVnb3RpYXRlU2VhbDogMHgwMDAwMDAyMCxcbiAgTlRMTV9OZWdvdGlhdGVEYXRhZ3JhbTogMHgwMDAwMDA0MCxcbiAgTlRMTV9OZWdvdGlhdGVMYW5NYW5hZ2VyS2V5OiAweDAwMDAwMDgwLFxuICBOVExNX1Vua25vd244OiAweDAwMDAwMTAwLFxuICBOVExNX05lZ290aWF0ZU5UTE06IDB4MDAwMDAyMDAsXG4gIE5UTE1fTmVnb3RpYXRlTlRPbmx5OiAweDAwMDAwNDAwLFxuICBOVExNX0Fub255bW91czogMHgwMDAwMDgwMCxcbiAgTlRMTV9OZWdvdGlhdGVPZW1Eb21haW5TdXBwbGllZDogMHgwMDAwMTAwMCxcbiAgTlRMTV9OZWdvdGlhdGVPZW1Xb3Jrc3RhdGlvblN1cHBsaWVkOiAweDAwMDAyMDAwLFxuICBOVExNX1Vua25vd242OiAweDAwMDA0MDAwLFxuICBOVExNX05lZ290aWF0ZUFsd2F5c1NpZ246IDB4MDAwMDgwMDAsXG4gIE5UTE1fVGFyZ2V0VHlwZURvbWFpbjogMHgwMDAxMDAwMCxcbiAgTlRMTV9UYXJnZXRUeXBlU2VydmVyOiAweDAwMDIwMDAwLFxuICBOVExNX1RhcmdldFR5cGVTaGFyZTogMHgwMDA0MDAwMCxcbiAgTlRMTV9OZWdvdGlhdGVFeHRlbmRlZFNlY3VyaXR5OiAweDAwMDgwMDAwLFxuICBOVExNX05lZ290aWF0ZUlkZW50aWZ5OiAweDAwMTAwMDAwLFxuICBOVExNX1Vua25vd241OiAweDAwMjAwMDAwLFxuICBOVExNX1JlcXVlc3ROb25OVFNlc3Npb25LZXk6IDB4MDA0MDAwMDAsXG4gIE5UTE1fTmVnb3RpYXRlVGFyZ2V0SW5mbzogMHgwMDgwMDAwMCxcbiAgTlRMTV9Vbmtub3duNDogMHgwMTAwMDAwMCxcbiAgTlRMTV9OZWdvdGlhdGVWZXJzaW9uOiAweDAyMDAwMDAwLFxuICBOVExNX1Vua25vd24zOiAweDA0MDAwMDAwLFxuICBOVExNX1Vua25vd24yOiAweDA4MDAwMDAwLFxuICBOVExNX1Vua25vd24xOiAweDEwMDAwMDAwLFxuICBOVExNX05lZ290aWF0ZTEyODogMHgyMDAwMDAwMCxcbiAgTlRMTV9OZWdvdGlhdGVLZXlFeGNoYW5nZTogMHg0MDAwMDAwMCxcbiAgTlRMTV9OZWdvdGlhdGU1NjogMHg4MDAwMDAwMFxufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZU5UTE1SZXF1ZXN0KG9wdGlvbnM6IHsgZG9tYWluOiBzdHJpbmcsIHdvcmtzdGF0aW9uPzogc3RyaW5nIH0pIHtcbiAgY29uc3QgZG9tYWluID0gZXNjYXBlKG9wdGlvbnMuZG9tYWluLnRvVXBwZXJDYXNlKCkpO1xuICBjb25zdCB3b3Jrc3RhdGlvbiA9IG9wdGlvbnMud29ya3N0YXRpb24gPyBlc2NhcGUob3B0aW9ucy53b3Jrc3RhdGlvbi50b1VwcGVyQ2FzZSgpKSA6ICcnO1xuXG4gIGxldCB0eXBlMWZsYWdzID0gTlRMTUZsYWdzLk5UTE1fTmVnb3RpYXRlVW5pY29kZSArIE5UTE1GbGFncy5OVExNX05lZ290aWF0ZU9FTSArIE5UTE1GbGFncy5OVExNX1JlcXVlc3RUYXJnZXQgKyBOVExNRmxhZ3MuTlRMTV9OZWdvdGlhdGVOVExNICsgTlRMTUZsYWdzLk5UTE1fTmVnb3RpYXRlT2VtRG9tYWluU3VwcGxpZWQgKyBOVExNRmxhZ3MuTlRMTV9OZWdvdGlhdGVPZW1Xb3Jrc3RhdGlvblN1cHBsaWVkICsgTlRMTUZsYWdzLk5UTE1fTmVnb3RpYXRlQWx3YXlzU2lnbiArIE5UTE1GbGFncy5OVExNX05lZ290aWF0ZVZlcnNpb24gKyBOVExNRmxhZ3MuTlRMTV9OZWdvdGlhdGVFeHRlbmRlZFNlY3VyaXR5ICsgTlRMTUZsYWdzLk5UTE1fTmVnb3RpYXRlMTI4ICsgTlRMTUZsYWdzLk5UTE1fTmVnb3RpYXRlNTY7XG4gIGlmICh3b3Jrc3RhdGlvbiA9PT0gJycpIHtcbiAgICB0eXBlMWZsYWdzIC09IE5UTE1GbGFncy5OVExNX05lZ290aWF0ZU9lbVdvcmtzdGF0aW9uU3VwcGxpZWQ7XG4gIH1cblxuICBjb25zdCBmaXhlZERhdGEgPSBCdWZmZXIuYWxsb2MoNDApO1xuICBjb25zdCBidWZmZXJzID0gW2ZpeGVkRGF0YV07XG4gIGxldCBvZmZzZXQgPSAwO1xuXG4gIG9mZnNldCArPSBmaXhlZERhdGEud3JpdGUoJ05UTE1TU1AnLCBvZmZzZXQsIDcsICdhc2NpaScpO1xuICBvZmZzZXQgPSBmaXhlZERhdGEud3JpdGVVSW50OCgwLCBvZmZzZXQpO1xuICBvZmZzZXQgPSBmaXhlZERhdGEud3JpdGVVSW50MzJMRSgxLCBvZmZzZXQpO1xuICBvZmZzZXQgPSBmaXhlZERhdGEud3JpdGVVSW50MzJMRSh0eXBlMWZsYWdzLCBvZmZzZXQpO1xuICBvZmZzZXQgPSBmaXhlZERhdGEud3JpdGVVSW50MTZMRShkb21haW4ubGVuZ3RoLCBvZmZzZXQpO1xuICBvZmZzZXQgPSBmaXhlZERhdGEud3JpdGVVSW50MTZMRShkb21haW4ubGVuZ3RoLCBvZmZzZXQpO1xuICBvZmZzZXQgPSBmaXhlZERhdGEud3JpdGVVSW50MzJMRShmaXhlZERhdGEubGVuZ3RoICsgd29ya3N0YXRpb24ubGVuZ3RoLCBvZmZzZXQpO1xuICBvZmZzZXQgPSBmaXhlZERhdGEud3JpdGVVSW50MTZMRSh3b3Jrc3RhdGlvbi5sZW5ndGgsIG9mZnNldCk7XG4gIG9mZnNldCA9IGZpeGVkRGF0YS53cml0ZVVJbnQxNkxFKHdvcmtzdGF0aW9uLmxlbmd0aCwgb2Zmc2V0KTtcbiAgb2Zmc2V0ID0gZml4ZWREYXRhLndyaXRlVUludDMyTEUoZml4ZWREYXRhLmxlbmd0aCwgb2Zmc2V0KTtcbiAgb2Zmc2V0ID0gZml4ZWREYXRhLndyaXRlVUludDgoNSwgb2Zmc2V0KTtcbiAgb2Zmc2V0ID0gZml4ZWREYXRhLndyaXRlVUludDgoMCwgb2Zmc2V0KTtcbiAgb2Zmc2V0ID0gZml4ZWREYXRhLndyaXRlVUludDE2TEUoMjE5NSwgb2Zmc2V0KTtcbiAgb2Zmc2V0ID0gZml4ZWREYXRhLndyaXRlVUludDgoMCwgb2Zmc2V0KTtcbiAgb2Zmc2V0ID0gZml4ZWREYXRhLndyaXRlVUludDgoMCwgb2Zmc2V0KTtcbiAgb2Zmc2V0ID0gZml4ZWREYXRhLndyaXRlVUludDgoMCwgb2Zmc2V0KTtcbiAgZml4ZWREYXRhLndyaXRlVUludDgoMTUsIG9mZnNldCk7XG5cbiAgYnVmZmVycy5wdXNoKEJ1ZmZlci5mcm9tKHdvcmtzdGF0aW9uLCAnYXNjaWknKSk7XG4gIGJ1ZmZlcnMucHVzaChCdWZmZXIuZnJvbShkb21haW4sICdhc2NpaScpKTtcblxuICByZXR1cm4gQnVmZmVyLmNvbmNhdChidWZmZXJzKTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsTUFBTUEsU0FBUyxHQUFHO0VBQ2hCQyxxQkFBcUIsRUFBRSxVQUFVO0VBQ2pDQyxpQkFBaUIsRUFBRSxVQUFVO0VBQzdCQyxrQkFBa0IsRUFBRSxVQUFVO0VBQzlCQyxhQUFhLEVBQUUsVUFBVTtFQUN6QkMsa0JBQWtCLEVBQUUsVUFBVTtFQUM5QkMsa0JBQWtCLEVBQUUsVUFBVTtFQUM5QkMsc0JBQXNCLEVBQUUsVUFBVTtFQUNsQ0MsMkJBQTJCLEVBQUUsVUFBVTtFQUN2Q0MsYUFBYSxFQUFFLFVBQVU7RUFDekJDLGtCQUFrQixFQUFFLFVBQVU7RUFDOUJDLG9CQUFvQixFQUFFLFVBQVU7RUFDaENDLGNBQWMsRUFBRSxVQUFVO0VBQzFCQywrQkFBK0IsRUFBRSxVQUFVO0VBQzNDQyxvQ0FB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
|
package/lib/ntlm.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ntlm.js","names":["NTLMFlags","NTLM_NegotiateUnicode","NTLM_NegotiateOEM","NTLM_RequestTarget","NTLM_Unknown9","NTLM_NegotiateSign","NTLM_NegotiateSeal","NTLM_NegotiateDatagram","NTLM_NegotiateLanManagerKey","NTLM_Unknown8","NTLM_NegotiateNTLM","NTLM_NegotiateNTOnly","NTLM_Anonymous","NTLM_NegotiateOemDomainSupplied","NTLM_NegotiateOemWorkstationSupplied","NTLM_Unknown6","NTLM_NegotiateAlwaysSign","NTLM_TargetTypeDomain","NTLM_TargetTypeServer","NTLM_TargetTypeShare","NTLM_NegotiateExtendedSecurity","NTLM_NegotiateIdentify","NTLM_Unknown5","NTLM_RequestNonNTSessionKey","NTLM_NegotiateTargetInfo","NTLM_Unknown4","NTLM_NegotiateVersion","NTLM_Unknown3","NTLM_Unknown2","NTLM_Unknown1","NTLM_Negotiate128","NTLM_NegotiateKeyExchange","NTLM_Negotiate56","createNTLMRequest","options","domain","escape","toUpperCase","workstation","type1flags","fixedData","Buffer","alloc","buffers","offset","write","writeUInt8","writeUInt32LE","writeUInt16LE","length","push","from","concat"],"sources":["../src/ntlm.ts"],"sourcesContent":["const NTLMFlags = {\n NTLM_NegotiateUnicode: 0x00000001,\n NTLM_NegotiateOEM: 0x00000002,\n NTLM_RequestTarget: 0x00000004,\n NTLM_Unknown9: 0x00000008,\n NTLM_NegotiateSign: 0x00000010,\n NTLM_NegotiateSeal: 0x00000020,\n NTLM_NegotiateDatagram: 0x00000040,\n NTLM_NegotiateLanManagerKey: 0x00000080,\n NTLM_Unknown8: 0x00000100,\n NTLM_NegotiateNTLM: 0x00000200,\n NTLM_NegotiateNTOnly: 0x00000400,\n NTLM_Anonymous: 0x00000800,\n NTLM_NegotiateOemDomainSupplied: 0x00001000,\n NTLM_NegotiateOemWorkstationSupplied: 0x00002000,\n NTLM_Unknown6: 0x00004000,\n NTLM_NegotiateAlwaysSign: 0x00008000,\n NTLM_TargetTypeDomain: 0x00010000,\n NTLM_TargetTypeServer: 0x00020000,\n NTLM_TargetTypeShare: 0x00040000,\n NTLM_NegotiateExtendedSecurity: 0x00080000,\n NTLM_NegotiateIdentify: 0x00100000,\n NTLM_Unknown5: 0x00200000,\n NTLM_RequestNonNTSessionKey: 0x00400000,\n NTLM_NegotiateTargetInfo: 0x00800000,\n NTLM_Unknown4: 0x01000000,\n NTLM_NegotiateVersion: 0x02000000,\n NTLM_Unknown3: 0x04000000,\n NTLM_Unknown2: 0x08000000,\n NTLM_Unknown1: 0x10000000,\n NTLM_Negotiate128: 0x20000000,\n NTLM_NegotiateKeyExchange: 0x40000000,\n NTLM_Negotiate56: 0x80000000\n};\n\nexport function createNTLMRequest(options: { domain: string, workstation?: string }) {\n const domain = escape(options.domain.toUpperCase());\n const workstation = options.workstation ? escape(options.workstation.toUpperCase()) : '';\n\n let type1flags = NTLMFlags.NTLM_NegotiateUnicode + NTLMFlags.NTLM_NegotiateOEM + NTLMFlags.NTLM_RequestTarget + NTLMFlags.NTLM_NegotiateNTLM + NTLMFlags.NTLM_NegotiateOemDomainSupplied + NTLMFlags.NTLM_NegotiateOemWorkstationSupplied + NTLMFlags.NTLM_NegotiateAlwaysSign + NTLMFlags.NTLM_NegotiateVersion + NTLMFlags.NTLM_NegotiateExtendedSecurity + NTLMFlags.NTLM_Negotiate128 + NTLMFlags.NTLM_Negotiate56;\n if (workstation === '') {\n type1flags -= NTLMFlags.NTLM_NegotiateOemWorkstationSupplied;\n }\n\n const fixedData = Buffer.alloc(40);\n const buffers = [fixedData];\n let offset = 0;\n\n offset += fixedData.write('NTLMSSP', offset, 7, 'ascii');\n offset = fixedData.writeUInt8(0, offset);\n offset = fixedData.writeUInt32LE(1, offset);\n offset = fixedData.writeUInt32LE(type1flags, offset);\n offset = fixedData.writeUInt16LE(domain.length, offset);\n offset = fixedData.writeUInt16LE(domain.length, offset);\n offset = fixedData.writeUInt32LE(fixedData.length + workstation.length, offset);\n offset = fixedData.writeUInt16LE(workstation.length, offset);\n offset = fixedData.writeUInt16LE(workstation.length, offset);\n offset = fixedData.writeUInt32LE(fixedData.length, offset);\n offset = fixedData.writeUInt8(5, offset);\n offset = fixedData.writeUInt8(0, offset);\n offset = fixedData.writeUInt16LE(2195, offset);\n offset = fixedData.writeUInt8(0, offset);\n offset = fixedData.writeUInt8(0, offset);\n offset = fixedData.writeUInt8(0, offset);\n fixedData.writeUInt8(15, offset);\n\n buffers.push(Buffer.from(workstation, 'ascii'));\n buffers.push(Buffer.from(domain, 'ascii'));\n\n return Buffer.concat(buffers);\n}\n"],"mappings":"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"}
|