tedious 16.2.0 → 16.4.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 +307 -534
- 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/value-parser.js
CHANGED
|
@@ -4,19 +4,12 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.default = void 0;
|
|
7
|
-
|
|
8
7
|
var _metadataParser = require("./metadata-parser");
|
|
9
|
-
|
|
10
8
|
var _dataType = require("./data-type");
|
|
11
|
-
|
|
12
9
|
var _iconvLite = _interopRequireDefault(require("iconv-lite"));
|
|
13
|
-
|
|
14
10
|
var _sprintfJs = require("sprintf-js");
|
|
15
|
-
|
|
16
11
|
var _guidParser = require("./guid-parser");
|
|
17
|
-
|
|
18
12
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
19
|
-
|
|
20
13
|
const NULL = (1 << 16) - 1;
|
|
21
14
|
const MAX = (1 << 16) - 1;
|
|
22
15
|
const THREE_AND_A_THIRD = 3 + 1 / 3;
|
|
@@ -24,39 +17,31 @@ const MONEY_DIVISOR = 10000;
|
|
|
24
17
|
const PLP_NULL = Buffer.from([0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF]);
|
|
25
18
|
const UNKNOWN_PLP_LEN = Buffer.from([0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF]);
|
|
26
19
|
const DEFAULT_ENCODING = 'utf8';
|
|
27
|
-
|
|
28
20
|
function readTinyInt(parser, callback) {
|
|
29
21
|
parser.readUInt8(callback);
|
|
30
22
|
}
|
|
31
|
-
|
|
32
23
|
function readSmallInt(parser, callback) {
|
|
33
24
|
parser.readInt16LE(callback);
|
|
34
25
|
}
|
|
35
|
-
|
|
36
26
|
function readInt(parser, callback) {
|
|
37
27
|
parser.readInt32LE(callback);
|
|
38
28
|
}
|
|
39
|
-
|
|
40
29
|
function readBigInt(parser, callback) {
|
|
41
30
|
parser.readBigInt64LE(value => {
|
|
42
31
|
callback(value.toString());
|
|
43
32
|
});
|
|
44
33
|
}
|
|
45
|
-
|
|
46
34
|
function readReal(parser, callback) {
|
|
47
35
|
parser.readFloatLE(callback);
|
|
48
36
|
}
|
|
49
|
-
|
|
50
37
|
function readFloat(parser, callback) {
|
|
51
38
|
parser.readDoubleLE(callback);
|
|
52
39
|
}
|
|
53
|
-
|
|
54
40
|
function readSmallMoney(parser, callback) {
|
|
55
41
|
parser.readInt32LE(value => {
|
|
56
42
|
callback(value / MONEY_DIVISOR);
|
|
57
43
|
});
|
|
58
44
|
}
|
|
59
|
-
|
|
60
45
|
function readMoney(parser, callback) {
|
|
61
46
|
parser.readInt32LE(high => {
|
|
62
47
|
parser.readUInt32LE(low => {
|
|
@@ -64,122 +49,91 @@ function readMoney(parser, callback) {
|
|
|
64
49
|
});
|
|
65
50
|
});
|
|
66
51
|
}
|
|
67
|
-
|
|
68
52
|
function readBit(parser, callback) {
|
|
69
53
|
parser.readUInt8(value => {
|
|
70
54
|
callback(!!value);
|
|
71
55
|
});
|
|
72
56
|
}
|
|
73
|
-
|
|
74
57
|
function valueParse(parser, metadata, options, callback) {
|
|
75
58
|
const type = metadata.type;
|
|
76
|
-
|
|
77
59
|
switch (type.name) {
|
|
78
60
|
case 'Null':
|
|
79
61
|
return callback(null);
|
|
80
|
-
|
|
81
62
|
case 'TinyInt':
|
|
82
63
|
return readTinyInt(parser, callback);
|
|
83
|
-
|
|
84
64
|
case 'SmallInt':
|
|
85
65
|
return readSmallInt(parser, callback);
|
|
86
|
-
|
|
87
66
|
case 'Int':
|
|
88
67
|
return readInt(parser, callback);
|
|
89
|
-
|
|
90
68
|
case 'BigInt':
|
|
91
69
|
return readBigInt(parser, callback);
|
|
92
|
-
|
|
93
70
|
case 'IntN':
|
|
94
71
|
return parser.readUInt8(dataLength => {
|
|
95
72
|
switch (dataLength) {
|
|
96
73
|
case 0:
|
|
97
74
|
return callback(null);
|
|
98
|
-
|
|
99
75
|
case 1:
|
|
100
76
|
return readTinyInt(parser, callback);
|
|
101
|
-
|
|
102
77
|
case 2:
|
|
103
78
|
return readSmallInt(parser, callback);
|
|
104
|
-
|
|
105
79
|
case 4:
|
|
106
80
|
return readInt(parser, callback);
|
|
107
|
-
|
|
108
81
|
case 8:
|
|
109
82
|
return readBigInt(parser, callback);
|
|
110
|
-
|
|
111
83
|
default:
|
|
112
84
|
throw new Error('Unsupported dataLength ' + dataLength + ' for IntN');
|
|
113
85
|
}
|
|
114
86
|
});
|
|
115
|
-
|
|
116
87
|
case 'Real':
|
|
117
88
|
return readReal(parser, callback);
|
|
118
|
-
|
|
119
89
|
case 'Float':
|
|
120
90
|
return readFloat(parser, callback);
|
|
121
|
-
|
|
122
91
|
case 'FloatN':
|
|
123
92
|
return parser.readUInt8(dataLength => {
|
|
124
93
|
switch (dataLength) {
|
|
125
94
|
case 0:
|
|
126
95
|
return callback(null);
|
|
127
|
-
|
|
128
96
|
case 4:
|
|
129
97
|
return readReal(parser, callback);
|
|
130
|
-
|
|
131
98
|
case 8:
|
|
132
99
|
return readFloat(parser, callback);
|
|
133
|
-
|
|
134
100
|
default:
|
|
135
101
|
throw new Error('Unsupported dataLength ' + dataLength + ' for FloatN');
|
|
136
102
|
}
|
|
137
103
|
});
|
|
138
|
-
|
|
139
104
|
case 'SmallMoney':
|
|
140
105
|
return readSmallMoney(parser, callback);
|
|
141
|
-
|
|
142
106
|
case 'Money':
|
|
143
107
|
return readMoney(parser, callback);
|
|
144
|
-
|
|
145
108
|
case 'MoneyN':
|
|
146
109
|
return parser.readUInt8(dataLength => {
|
|
147
110
|
switch (dataLength) {
|
|
148
111
|
case 0:
|
|
149
112
|
return callback(null);
|
|
150
|
-
|
|
151
113
|
case 4:
|
|
152
114
|
return readSmallMoney(parser, callback);
|
|
153
|
-
|
|
154
115
|
case 8:
|
|
155
116
|
return readMoney(parser, callback);
|
|
156
|
-
|
|
157
117
|
default:
|
|
158
118
|
throw new Error('Unsupported dataLength ' + dataLength + ' for MoneyN');
|
|
159
119
|
}
|
|
160
120
|
});
|
|
161
|
-
|
|
162
121
|
case 'Bit':
|
|
163
122
|
return readBit(parser, callback);
|
|
164
|
-
|
|
165
123
|
case 'BitN':
|
|
166
124
|
return parser.readUInt8(dataLength => {
|
|
167
125
|
switch (dataLength) {
|
|
168
126
|
case 0:
|
|
169
127
|
return callback(null);
|
|
170
|
-
|
|
171
128
|
case 1:
|
|
172
129
|
return readBit(parser, callback);
|
|
173
|
-
|
|
174
130
|
default:
|
|
175
131
|
throw new Error('Unsupported dataLength ' + dataLength + ' for BitN');
|
|
176
132
|
}
|
|
177
133
|
});
|
|
178
|
-
|
|
179
134
|
case 'VarChar':
|
|
180
135
|
case 'Char':
|
|
181
136
|
const codepage = metadata.collation.codepage;
|
|
182
|
-
|
|
183
137
|
if (metadata.dataLength === MAX) {
|
|
184
138
|
return readMaxChars(parser, codepage, callback);
|
|
185
139
|
} else {
|
|
@@ -187,11 +141,9 @@ function valueParse(parser, metadata, options, callback) {
|
|
|
187
141
|
if (dataLength === NULL) {
|
|
188
142
|
return callback(null);
|
|
189
143
|
}
|
|
190
|
-
|
|
191
144
|
readChars(parser, dataLength, codepage, callback);
|
|
192
145
|
});
|
|
193
146
|
}
|
|
194
|
-
|
|
195
147
|
case 'NVarChar':
|
|
196
148
|
case 'NChar':
|
|
197
149
|
if (metadata.dataLength === MAX) {
|
|
@@ -201,11 +153,9 @@ function valueParse(parser, metadata, options, callback) {
|
|
|
201
153
|
if (dataLength === NULL) {
|
|
202
154
|
return callback(null);
|
|
203
155
|
}
|
|
204
|
-
|
|
205
156
|
readNChars(parser, dataLength, callback);
|
|
206
157
|
});
|
|
207
158
|
}
|
|
208
|
-
|
|
209
159
|
case 'VarBinary':
|
|
210
160
|
case 'Binary':
|
|
211
161
|
if (metadata.dataLength === MAX) {
|
|
@@ -215,17 +165,14 @@ function valueParse(parser, metadata, options, callback) {
|
|
|
215
165
|
if (dataLength === NULL) {
|
|
216
166
|
return callback(null);
|
|
217
167
|
}
|
|
218
|
-
|
|
219
168
|
readBinary(parser, dataLength, callback);
|
|
220
169
|
});
|
|
221
170
|
}
|
|
222
|
-
|
|
223
171
|
case 'Text':
|
|
224
172
|
return parser.readUInt8(textPointerLength => {
|
|
225
173
|
if (textPointerLength === 0) {
|
|
226
174
|
return callback(null);
|
|
227
175
|
}
|
|
228
|
-
|
|
229
176
|
parser.readBuffer(textPointerLength, _textPointer => {
|
|
230
177
|
parser.readBuffer(8, _timestamp => {
|
|
231
178
|
parser.readUInt32LE(dataLength => {
|
|
@@ -234,13 +181,11 @@ function valueParse(parser, metadata, options, callback) {
|
|
|
234
181
|
});
|
|
235
182
|
});
|
|
236
183
|
});
|
|
237
|
-
|
|
238
184
|
case 'NText':
|
|
239
185
|
return parser.readUInt8(textPointerLength => {
|
|
240
186
|
if (textPointerLength === 0) {
|
|
241
187
|
return callback(null);
|
|
242
188
|
}
|
|
243
|
-
|
|
244
189
|
parser.readBuffer(textPointerLength, _textPointer => {
|
|
245
190
|
parser.readBuffer(8, _timestamp => {
|
|
246
191
|
parser.readUInt32LE(dataLength => {
|
|
@@ -249,13 +194,11 @@ function valueParse(parser, metadata, options, callback) {
|
|
|
249
194
|
});
|
|
250
195
|
});
|
|
251
196
|
});
|
|
252
|
-
|
|
253
197
|
case 'Image':
|
|
254
198
|
return parser.readUInt8(textPointerLength => {
|
|
255
199
|
if (textPointerLength === 0) {
|
|
256
200
|
return callback(null);
|
|
257
201
|
}
|
|
258
|
-
|
|
259
202
|
parser.readBuffer(textPointerLength, _textPointer => {
|
|
260
203
|
parser.readBuffer(8, _timestamp => {
|
|
261
204
|
parser.readUInt32LE(dataLength => {
|
|
@@ -264,33 +207,25 @@ function valueParse(parser, metadata, options, callback) {
|
|
|
264
207
|
});
|
|
265
208
|
});
|
|
266
209
|
});
|
|
267
|
-
|
|
268
210
|
case 'Xml':
|
|
269
211
|
return readMaxNChars(parser, callback);
|
|
270
|
-
|
|
271
212
|
case 'SmallDateTime':
|
|
272
213
|
return readSmallDateTime(parser, options.useUTC, callback);
|
|
273
|
-
|
|
274
214
|
case 'DateTime':
|
|
275
215
|
return readDateTime(parser, options.useUTC, callback);
|
|
276
|
-
|
|
277
216
|
case 'DateTimeN':
|
|
278
217
|
return parser.readUInt8(dataLength => {
|
|
279
218
|
switch (dataLength) {
|
|
280
219
|
case 0:
|
|
281
220
|
return callback(null);
|
|
282
|
-
|
|
283
221
|
case 4:
|
|
284
222
|
return readSmallDateTime(parser, options.useUTC, callback);
|
|
285
|
-
|
|
286
223
|
case 8:
|
|
287
224
|
return readDateTime(parser, options.useUTC, callback);
|
|
288
|
-
|
|
289
225
|
default:
|
|
290
226
|
throw new Error('Unsupported dataLength ' + dataLength + ' for DateTimeN');
|
|
291
227
|
}
|
|
292
228
|
});
|
|
293
|
-
|
|
294
229
|
case 'Time':
|
|
295
230
|
return parser.readUInt8(dataLength => {
|
|
296
231
|
if (dataLength === 0) {
|
|
@@ -299,7 +234,6 @@ function valueParse(parser, metadata, options, callback) {
|
|
|
299
234
|
return readTime(parser, dataLength, metadata.scale, options.useUTC, callback);
|
|
300
235
|
}
|
|
301
236
|
});
|
|
302
|
-
|
|
303
237
|
case 'Date':
|
|
304
238
|
return parser.readUInt8(dataLength => {
|
|
305
239
|
if (dataLength === 0) {
|
|
@@ -308,7 +242,6 @@ function valueParse(parser, metadata, options, callback) {
|
|
|
308
242
|
return readDate(parser, options.useUTC, callback);
|
|
309
243
|
}
|
|
310
244
|
});
|
|
311
|
-
|
|
312
245
|
case 'DateTime2':
|
|
313
246
|
return parser.readUInt8(dataLength => {
|
|
314
247
|
if (dataLength === 0) {
|
|
@@ -317,7 +250,6 @@ function valueParse(parser, metadata, options, callback) {
|
|
|
317
250
|
return readDateTime2(parser, dataLength, metadata.scale, options.useUTC, callback);
|
|
318
251
|
}
|
|
319
252
|
});
|
|
320
|
-
|
|
321
253
|
case 'DateTimeOffset':
|
|
322
254
|
return parser.readUInt8(dataLength => {
|
|
323
255
|
if (dataLength === 0) {
|
|
@@ -326,7 +258,6 @@ function valueParse(parser, metadata, options, callback) {
|
|
|
326
258
|
return readDateTimeOffset(parser, dataLength, metadata.scale, callback);
|
|
327
259
|
}
|
|
328
260
|
});
|
|
329
|
-
|
|
330
261
|
case 'NumericN':
|
|
331
262
|
case 'DecimalN':
|
|
332
263
|
return parser.readUInt8(dataLength => {
|
|
@@ -336,49 +267,39 @@ function valueParse(parser, metadata, options, callback) {
|
|
|
336
267
|
return readNumeric(parser, dataLength, metadata.precision, metadata.scale, callback);
|
|
337
268
|
}
|
|
338
269
|
});
|
|
339
|
-
|
|
340
270
|
case 'UniqueIdentifier':
|
|
341
271
|
return parser.readUInt8(dataLength => {
|
|
342
272
|
switch (dataLength) {
|
|
343
273
|
case 0:
|
|
344
274
|
return callback(null);
|
|
345
|
-
|
|
346
275
|
case 0x10:
|
|
347
276
|
return readUniqueIdentifier(parser, options, callback);
|
|
348
|
-
|
|
349
277
|
default:
|
|
350
278
|
throw new Error((0, _sprintfJs.sprintf)('Unsupported guid size %d', dataLength - 1));
|
|
351
279
|
}
|
|
352
280
|
});
|
|
353
|
-
|
|
354
281
|
case 'UDT':
|
|
355
282
|
return readMaxBinary(parser, callback);
|
|
356
|
-
|
|
357
283
|
case 'Variant':
|
|
358
284
|
return parser.readUInt32LE(dataLength => {
|
|
359
285
|
if (dataLength === 0) {
|
|
360
286
|
return callback(null);
|
|
361
287
|
}
|
|
362
|
-
|
|
363
288
|
readVariant(parser, options, dataLength, callback);
|
|
364
289
|
});
|
|
365
|
-
|
|
366
290
|
default:
|
|
367
291
|
throw new Error((0, _sprintfJs.sprintf)('Unrecognised type %s', type.name));
|
|
368
292
|
}
|
|
369
293
|
}
|
|
370
|
-
|
|
371
294
|
function readUniqueIdentifier(parser, options, callback) {
|
|
372
295
|
parser.readBuffer(0x10, data => {
|
|
373
296
|
callback(options.lowerCaseGuids ? (0, _guidParser.bufferToLowerCaseGuid)(data) : (0, _guidParser.bufferToUpperCaseGuid)(data));
|
|
374
297
|
});
|
|
375
298
|
}
|
|
376
|
-
|
|
377
299
|
function readNumeric(parser, dataLength, _precision, scale, callback) {
|
|
378
300
|
parser.readUInt8(sign => {
|
|
379
301
|
sign = sign === 1 ? 1 : -1;
|
|
380
302
|
let readValue;
|
|
381
|
-
|
|
382
303
|
if (dataLength === 5) {
|
|
383
304
|
readValue = parser.readUInt32LE;
|
|
384
305
|
} else if (dataLength === 9) {
|
|
@@ -390,80 +311,60 @@ function readNumeric(parser, dataLength, _precision, scale, callback) {
|
|
|
390
311
|
} else {
|
|
391
312
|
throw new Error((0, _sprintfJs.sprintf)('Unsupported numeric dataLength %d', dataLength));
|
|
392
313
|
}
|
|
393
|
-
|
|
394
314
|
readValue.call(parser, value => {
|
|
395
315
|
callback(value * sign / Math.pow(10, scale));
|
|
396
316
|
});
|
|
397
317
|
});
|
|
398
318
|
}
|
|
399
|
-
|
|
400
319
|
function readVariant(parser, options, dataLength, callback) {
|
|
401
320
|
return parser.readUInt8(baseType => {
|
|
402
321
|
const type = _dataType.TYPE[baseType];
|
|
403
322
|
return parser.readUInt8(propBytes => {
|
|
404
323
|
dataLength = dataLength - propBytes - 2;
|
|
405
|
-
|
|
406
324
|
switch (type.name) {
|
|
407
325
|
case 'UniqueIdentifier':
|
|
408
326
|
return readUniqueIdentifier(parser, options, callback);
|
|
409
|
-
|
|
410
327
|
case 'Bit':
|
|
411
328
|
return readBit(parser, callback);
|
|
412
|
-
|
|
413
329
|
case 'TinyInt':
|
|
414
330
|
return readTinyInt(parser, callback);
|
|
415
|
-
|
|
416
331
|
case 'SmallInt':
|
|
417
332
|
return readSmallInt(parser, callback);
|
|
418
|
-
|
|
419
333
|
case 'Int':
|
|
420
334
|
return readInt(parser, callback);
|
|
421
|
-
|
|
422
335
|
case 'BigInt':
|
|
423
336
|
return readBigInt(parser, callback);
|
|
424
|
-
|
|
425
337
|
case 'SmallDateTime':
|
|
426
338
|
return readSmallDateTime(parser, options.useUTC, callback);
|
|
427
|
-
|
|
428
339
|
case 'DateTime':
|
|
429
340
|
return readDateTime(parser, options.useUTC, callback);
|
|
430
|
-
|
|
431
341
|
case 'Real':
|
|
432
342
|
return readReal(parser, callback);
|
|
433
|
-
|
|
434
343
|
case 'Float':
|
|
435
344
|
return readFloat(parser, callback);
|
|
436
|
-
|
|
437
345
|
case 'SmallMoney':
|
|
438
346
|
return readSmallMoney(parser, callback);
|
|
439
|
-
|
|
440
347
|
case 'Money':
|
|
441
348
|
return readMoney(parser, callback);
|
|
442
|
-
|
|
443
349
|
case 'Date':
|
|
444
350
|
return readDate(parser, options.useUTC, callback);
|
|
445
|
-
|
|
446
351
|
case 'Time':
|
|
447
352
|
return parser.readUInt8(scale => {
|
|
448
353
|
return readTime(parser, dataLength, scale, options.useUTC, callback);
|
|
449
354
|
});
|
|
450
|
-
|
|
451
355
|
case 'DateTime2':
|
|
452
356
|
return parser.readUInt8(scale => {
|
|
453
357
|
return readDateTime2(parser, dataLength, scale, options.useUTC, callback);
|
|
454
358
|
});
|
|
455
|
-
|
|
456
359
|
case 'DateTimeOffset':
|
|
457
360
|
return parser.readUInt8(scale => {
|
|
458
361
|
return readDateTimeOffset(parser, dataLength, scale, callback);
|
|
459
362
|
});
|
|
460
|
-
|
|
461
363
|
case 'VarBinary':
|
|
462
364
|
case 'Binary':
|
|
463
365
|
return parser.readUInt16LE(_maxLength => {
|
|
464
366
|
readBinary(parser, dataLength, callback);
|
|
465
367
|
});
|
|
466
|
-
|
|
467
368
|
case 'NumericN':
|
|
468
369
|
case 'DecimalN':
|
|
469
370
|
return parser.readUInt8(precision => {
|
|
@@ -471,7 +372,6 @@ function readVariant(parser, options, dataLength, callback) {
|
|
|
471
372
|
readNumeric(parser, dataLength, precision, scale, callback);
|
|
472
373
|
});
|
|
473
374
|
});
|
|
474
|
-
|
|
475
375
|
case 'VarChar':
|
|
476
376
|
case 'Char':
|
|
477
377
|
return parser.readUInt16LE(_maxLength => {
|
|
@@ -479,7 +379,6 @@ function readVariant(parser, options, dataLength, callback) {
|
|
|
479
379
|
readChars(parser, dataLength, collation.codepage, callback);
|
|
480
380
|
});
|
|
481
381
|
});
|
|
482
|
-
|
|
483
382
|
case 'NVarChar':
|
|
484
383
|
case 'NChar':
|
|
485
384
|
return parser.readUInt16LE(_maxLength => {
|
|
@@ -487,43 +386,35 @@ function readVariant(parser, options, dataLength, callback) {
|
|
|
487
386
|
readNChars(parser, dataLength, callback);
|
|
488
387
|
});
|
|
489
388
|
});
|
|
490
|
-
|
|
491
389
|
default:
|
|
492
390
|
throw new Error('Invalid type!');
|
|
493
391
|
}
|
|
494
392
|
});
|
|
495
393
|
});
|
|
496
394
|
}
|
|
497
|
-
|
|
498
395
|
function readBinary(parser, dataLength, callback) {
|
|
499
396
|
return parser.readBuffer(dataLength, callback);
|
|
500
397
|
}
|
|
501
|
-
|
|
502
398
|
function readChars(parser, dataLength, codepage, callback) {
|
|
503
399
|
if (codepage == null) {
|
|
504
400
|
codepage = DEFAULT_ENCODING;
|
|
505
401
|
}
|
|
506
|
-
|
|
507
402
|
return parser.readBuffer(dataLength, data => {
|
|
508
403
|
callback(_iconvLite.default.decode(data, codepage));
|
|
509
404
|
});
|
|
510
405
|
}
|
|
511
|
-
|
|
512
406
|
function readNChars(parser, dataLength, callback) {
|
|
513
407
|
parser.readBuffer(dataLength, data => {
|
|
514
408
|
callback(data.toString('ucs2'));
|
|
515
409
|
});
|
|
516
410
|
}
|
|
517
|
-
|
|
518
411
|
function readMaxBinary(parser, callback) {
|
|
519
412
|
return readMax(parser, callback);
|
|
520
413
|
}
|
|
521
|
-
|
|
522
414
|
function readMaxChars(parser, codepage, callback) {
|
|
523
415
|
if (codepage == null) {
|
|
524
416
|
codepage = DEFAULT_ENCODING;
|
|
525
417
|
}
|
|
526
|
-
|
|
527
418
|
readMax(parser, data => {
|
|
528
419
|
if (data) {
|
|
529
420
|
callback(_iconvLite.default.decode(data, codepage));
|
|
@@ -532,7 +423,6 @@ function readMaxChars(parser, codepage, callback) {
|
|
|
532
423
|
}
|
|
533
424
|
});
|
|
534
425
|
}
|
|
535
|
-
|
|
536
426
|
function readMaxNChars(parser, callback) {
|
|
537
427
|
readMax(parser, data => {
|
|
538
428
|
if (data) {
|
|
@@ -542,7 +432,6 @@ function readMaxNChars(parser, callback) {
|
|
|
542
432
|
}
|
|
543
433
|
});
|
|
544
434
|
}
|
|
545
|
-
|
|
546
435
|
function readMax(parser, callback) {
|
|
547
436
|
parser.readBuffer(8, type => {
|
|
548
437
|
if (type.equals(PLP_NULL)) {
|
|
@@ -552,27 +441,22 @@ function readMax(parser, callback) {
|
|
|
552
441
|
} else {
|
|
553
442
|
const low = type.readUInt32LE(0);
|
|
554
443
|
const high = type.readUInt32LE(4);
|
|
555
|
-
|
|
556
444
|
if (high >= 2 << 53 - 32) {
|
|
557
445
|
console.warn('Read UInt64LE > 53 bits : high=' + high + ', low=' + low);
|
|
558
446
|
}
|
|
559
|
-
|
|
560
447
|
const expectedLength = low + 0x100000000 * high;
|
|
561
448
|
return readMaxKnownLength(parser, expectedLength, callback);
|
|
562
449
|
}
|
|
563
450
|
});
|
|
564
451
|
}
|
|
565
|
-
|
|
566
452
|
function readMaxKnownLength(parser, totalLength, callback) {
|
|
567
453
|
const data = Buffer.alloc(totalLength, 0);
|
|
568
454
|
let offset = 0;
|
|
569
|
-
|
|
570
455
|
function next(done) {
|
|
571
456
|
parser.readUInt32LE(chunkLength => {
|
|
572
457
|
if (!chunkLength) {
|
|
573
458
|
return done();
|
|
574
459
|
}
|
|
575
|
-
|
|
576
460
|
parser.readBuffer(chunkLength, chunk => {
|
|
577
461
|
chunk.copy(data, offset);
|
|
578
462
|
offset += chunkLength;
|
|
@@ -580,26 +464,21 @@ function readMaxKnownLength(parser, totalLength, callback) {
|
|
|
580
464
|
});
|
|
581
465
|
});
|
|
582
466
|
}
|
|
583
|
-
|
|
584
467
|
next(() => {
|
|
585
468
|
if (offset !== totalLength) {
|
|
586
469
|
throw new Error('Partially Length-prefixed Bytes unmatched lengths : expected ' + totalLength + ', but got ' + offset + ' bytes');
|
|
587
470
|
}
|
|
588
|
-
|
|
589
471
|
callback(data);
|
|
590
472
|
});
|
|
591
473
|
}
|
|
592
|
-
|
|
593
474
|
function readMaxUnknownLength(parser, callback) {
|
|
594
475
|
const chunks = [];
|
|
595
476
|
let length = 0;
|
|
596
|
-
|
|
597
477
|
function next(done) {
|
|
598
478
|
parser.readUInt32LE(chunkLength => {
|
|
599
479
|
if (!chunkLength) {
|
|
600
480
|
return done();
|
|
601
481
|
}
|
|
602
|
-
|
|
603
482
|
parser.readBuffer(chunkLength, chunk => {
|
|
604
483
|
chunks.push(chunk);
|
|
605
484
|
length += chunkLength;
|
|
@@ -607,76 +486,61 @@ function readMaxUnknownLength(parser, callback) {
|
|
|
607
486
|
});
|
|
608
487
|
});
|
|
609
488
|
}
|
|
610
|
-
|
|
611
489
|
next(() => {
|
|
612
490
|
callback(Buffer.concat(chunks, length));
|
|
613
491
|
});
|
|
614
492
|
}
|
|
615
|
-
|
|
616
493
|
function readSmallDateTime(parser, useUTC, callback) {
|
|
617
494
|
parser.readUInt16LE(days => {
|
|
618
495
|
parser.readUInt16LE(minutes => {
|
|
619
496
|
let value;
|
|
620
|
-
|
|
621
497
|
if (useUTC) {
|
|
622
498
|
value = new Date(Date.UTC(1900, 0, 1 + days, 0, minutes));
|
|
623
499
|
} else {
|
|
624
500
|
value = new Date(1900, 0, 1 + days, 0, minutes);
|
|
625
501
|
}
|
|
626
|
-
|
|
627
502
|
callback(value);
|
|
628
503
|
});
|
|
629
504
|
});
|
|
630
505
|
}
|
|
631
|
-
|
|
632
506
|
function readDateTime(parser, useUTC, callback) {
|
|
633
507
|
parser.readInt32LE(days => {
|
|
634
508
|
parser.readUInt32LE(threeHundredthsOfSecond => {
|
|
635
509
|
const milliseconds = Math.round(threeHundredthsOfSecond * THREE_AND_A_THIRD);
|
|
636
510
|
let value;
|
|
637
|
-
|
|
638
511
|
if (useUTC) {
|
|
639
512
|
value = new Date(Date.UTC(1900, 0, 1 + days, 0, 0, 0, milliseconds));
|
|
640
513
|
} else {
|
|
641
514
|
value = new Date(1900, 0, 1 + days, 0, 0, 0, milliseconds);
|
|
642
515
|
}
|
|
643
|
-
|
|
644
516
|
callback(value);
|
|
645
517
|
});
|
|
646
518
|
});
|
|
647
519
|
}
|
|
648
|
-
|
|
649
520
|
function readTime(parser, dataLength, scale, useUTC, callback) {
|
|
650
521
|
let readValue;
|
|
651
|
-
|
|
652
522
|
switch (dataLength) {
|
|
653
523
|
case 3:
|
|
654
524
|
readValue = parser.readUInt24LE;
|
|
655
525
|
break;
|
|
656
|
-
|
|
657
526
|
case 4:
|
|
658
527
|
readValue = parser.readUInt32LE;
|
|
659
528
|
break;
|
|
660
|
-
|
|
661
529
|
case 5:
|
|
662
530
|
readValue = parser.readUInt40LE;
|
|
663
531
|
}
|
|
664
|
-
|
|
665
532
|
readValue.call(parser, value => {
|
|
666
533
|
if (scale < 7) {
|
|
667
534
|
for (let i = scale; i < 7; i++) {
|
|
668
535
|
value *= 10;
|
|
669
536
|
}
|
|
670
537
|
}
|
|
671
|
-
|
|
672
538
|
let date;
|
|
673
|
-
|
|
674
539
|
if (useUTC) {
|
|
675
540
|
date = new Date(Date.UTC(1970, 0, 1, 0, 0, 0, value / 10000));
|
|
676
541
|
} else {
|
|
677
542
|
date = new Date(1970, 0, 1, 0, 0, 0, value / 10000);
|
|
678
543
|
}
|
|
679
|
-
|
|
680
544
|
Object.defineProperty(date, 'nanosecondsDelta', {
|
|
681
545
|
enumerable: false,
|
|
682
546
|
value: value % 10000 / Math.pow(10, 7)
|
|
@@ -684,7 +548,6 @@ function readTime(parser, dataLength, scale, useUTC, callback) {
|
|
|
684
548
|
callback(date);
|
|
685
549
|
});
|
|
686
550
|
}
|
|
687
|
-
|
|
688
551
|
function readDate(parser, useUTC, callback) {
|
|
689
552
|
parser.readUInt24LE(days => {
|
|
690
553
|
if (useUTC) {
|
|
@@ -694,19 +557,16 @@ function readDate(parser, useUTC, callback) {
|
|
|
694
557
|
}
|
|
695
558
|
});
|
|
696
559
|
}
|
|
697
|
-
|
|
698
560
|
function readDateTime2(parser, dataLength, scale, useUTC, callback) {
|
|
699
561
|
readTime(parser, dataLength - 3, scale, useUTC, time => {
|
|
700
562
|
// TODO: 'input' is 'time', but TypeScript cannot find "time.nanosecondsDelta";
|
|
701
563
|
parser.readUInt24LE(days => {
|
|
702
564
|
let date;
|
|
703
|
-
|
|
704
565
|
if (useUTC) {
|
|
705
566
|
date = new Date(Date.UTC(2000, 0, days - 730118, 0, 0, 0, +time));
|
|
706
567
|
} else {
|
|
707
568
|
date = new Date(2000, 0, days - 730118, time.getHours(), time.getMinutes(), time.getSeconds(), time.getMilliseconds());
|
|
708
569
|
}
|
|
709
|
-
|
|
710
570
|
Object.defineProperty(date, 'nanosecondsDelta', {
|
|
711
571
|
enumerable: false,
|
|
712
572
|
value: time.nanosecondsDelta
|
|
@@ -715,7 +575,6 @@ function readDateTime2(parser, dataLength, scale, useUTC, callback) {
|
|
|
715
575
|
});
|
|
716
576
|
});
|
|
717
577
|
}
|
|
718
|
-
|
|
719
578
|
function readDateTimeOffset(parser, dataLength, scale, callback) {
|
|
720
579
|
readTime(parser, dataLength - 5, scale, true, time => {
|
|
721
580
|
parser.readUInt24LE(days => {
|
|
@@ -731,8 +590,7 @@ function readDateTimeOffset(parser, dataLength, scale, callback) {
|
|
|
731
590
|
});
|
|
732
591
|
});
|
|
733
592
|
}
|
|
734
|
-
|
|
735
593
|
var _default = valueParse;
|
|
736
594
|
exports.default = _default;
|
|
737
595
|
module.exports = valueParse;
|
|
738
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJOVUxMIiwiTUFYIiwiVEhSRUVfQU5EX0FfVEhJUkQiLCJNT05FWV9ESVZJU09SIiwiUExQX05VTEwiLCJCdWZmZXIiLCJmcm9tIiwiVU5LTk9XTl9QTFBfTEVOIiwiREVGQVVMVF9FTkNPRElORyIsInJlYWRUaW55SW50IiwicGFyc2VyIiwiY2FsbGJhY2siLCJyZWFkVUludDgiLCJyZWFkU21hbGxJbnQiLCJyZWFkSW50MTZMRSIsInJlYWRJbnQiLCJyZWFkSW50MzJMRSIsInJlYWRCaWdJbnQiLCJyZWFkQmlnSW50NjRMRSIsInZhbHVlIiwidG9TdHJpbmciLCJyZWFkUmVhbCIsInJlYWRGbG9hdExFIiwicmVhZEZsb2F0IiwicmVhZERvdWJsZUxFIiwicmVhZFNtYWxsTW9uZXkiLCJyZWFkTW9uZXkiLCJoaWdoIiwicmVhZFVJbnQzMkxFIiwibG93IiwicmVhZEJpdCIsInZhbHVlUGFyc2UiLCJtZXRhZGF0YSIsIm9wdGlvbnMiLCJ0eXBlIiwibmFtZSIsImRhdGFMZW5ndGgiLCJFcnJvciIsImNvZGVwYWdlIiwiY29sbGF0aW9uIiwicmVhZE1heENoYXJzIiwicmVhZFVJbnQxNkxFIiwicmVhZENoYXJzIiwicmVhZE1heE5DaGFycyIsInJlYWROQ2hhcnMiLCJyZWFkTWF4QmluYXJ5IiwicmVhZEJpbmFyeSIsInRleHRQb2ludGVyTGVuZ3RoIiwicmVhZEJ1ZmZlciIsIl90ZXh0UG9pbnRlciIsIl90aW1lc3RhbXAiLCJyZWFkU21hbGxEYXRlVGltZSIsInVzZVVUQyIsInJlYWREYXRlVGltZSIsInJlYWRUaW1lIiwic2NhbGUiLCJyZWFkRGF0ZSIsInJlYWREYXRlVGltZTIiLCJyZWFkRGF0ZVRpbWVPZmZzZXQiLCJyZWFkTnVtZXJpYyIsInByZWNpc2lvbiIsInJlYWRVbmlxdWVJZGVudGlmaWVyIiwicmVhZFZhcmlhbnQiLCJkYXRhIiwibG93ZXJDYXNlR3VpZHMiLCJfcHJlY2lzaW9uIiwic2lnbiIsInJlYWRWYWx1ZSIsInJlYWRVTnVtZXJpYzY0TEUiLCJyZWFkVU51bWVyaWM5NkxFIiwicmVhZFVOdW1lcmljMTI4TEUiLCJjYWxsIiwiTWF0aCIsInBvdyIsImJhc2VUeXBlIiwiVFlQRSIsInByb3BCeXRlcyIsIl9tYXhMZW5ndGgiLCJfY29sbGF0aW9uIiwiaWNvbnYiLCJkZWNvZGUiLCJyZWFkTWF4IiwiZXF1YWxzIiwicmVhZE1heFVua25vd25MZW5ndGgiLCJjb25zb2xlIiwid2FybiIsImV4cGVjdGVkTGVuZ3RoIiwicmVhZE1heEtub3duTGVuZ3RoIiwidG90YWxMZW5ndGgiLCJhbGxvYyIsIm9mZnNldCIsIm5leHQiLCJkb25lIiwiY2h1bmtMZW5ndGgiLCJjaHVuayIsImNvcHkiLCJjaHVua3MiLCJsZW5ndGgiLCJwdXNoIiwiY29uY2F0IiwiZGF5cyIsIm1pbnV0ZXMiLCJEYXRlIiwiVVRDIiwidGhyZWVIdW5kcmVkdGhzT2ZTZWNvbmQiLCJtaWxsaXNlY29uZHMiLCJyb3VuZCIsInJlYWRVSW50MjRMRSIsInJlYWRVSW50NDBMRSIsImkiLCJkYXRlIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJlbnVtZXJhYmxlIiwidGltZSIsImdldEhvdXJzIiwiZ2V0TWludXRlcyIsImdldFNlY29uZHMiLCJnZXRNaWxsaXNlY29uZHMiLCJuYW5vc2Vjb25kc0RlbHRhIiwibW9kdWxlIiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uL3NyYy92YWx1ZS1wYXJzZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFBhcnNlciwgeyBQYXJzZXJPcHRpb25zIH0gZnJvbSAnLi90b2tlbi9zdHJlYW0tcGFyc2VyJztcbmltcG9ydCB7IE1ldGFkYXRhLCByZWFkQ29sbGF0aW9uIH0gZnJvbSAnLi9tZXRhZGF0YS1wYXJzZXInO1xuaW1wb3J0IHsgVFlQRSB9IGZyb20gJy4vZGF0YS10eXBlJztcblxuaW1wb3J0IGljb252IGZyb20gJ2ljb252LWxpdGUnO1xuaW1wb3J0IHsgc3ByaW50ZiB9IGZyb20gJ3NwcmludGYtanMnO1xuaW1wb3J0IHsgYnVmZmVyVG9Mb3dlckNhc2VHdWlkLCBidWZmZXJUb1VwcGVyQ2FzZUd1aWQgfSBmcm9tICcuL2d1aWQtcGFyc2VyJztcblxuY29uc3QgTlVMTCA9ICgxIDw8IDE2KSAtIDE7XG5jb25zdCBNQVggPSAoMSA8PCAxNikgLSAxO1xuY29uc3QgVEhSRUVfQU5EX0FfVEhJUkQgPSAzICsgKDEgLyAzKTtcbmNvbnN0IE1PTkVZX0RJVklTT1IgPSAxMDAwMDtcbmNvbnN0IFBMUF9OVUxMID0gQnVmZmVyLmZyb20oWzB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkZdKTtcbmNvbnN0IFVOS05PV05fUExQX0xFTiA9IEJ1ZmZlci5mcm9tKFsweEZFLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGXSk7XG5jb25zdCBERUZBVUxUX0VOQ09ESU5HID0gJ3V0ZjgnO1xuXG5mdW5jdGlvbiByZWFkVGlueUludChwYXJzZXI6IFBhcnNlciwgY2FsbGJhY2s6ICh2YWx1ZTogdW5rbm93bikgPT4gdm9pZCkge1xuICBwYXJzZXIucmVhZFVJbnQ4KGNhbGxiYWNrKTtcbn1cblxuZnVuY3Rpb24gcmVhZFNtYWxsSW50KHBhcnNlcjogUGFyc2VyLCBjYWxsYmFjazogKHZhbHVlOiB1bmtub3duKSA9PiB2b2lkKSB7XG4gIHBhcnNlci5yZWFkSW50MTZMRShjYWxsYmFjayk7XG59XG5cbmZ1bmN0aW9uIHJlYWRJbnQocGFyc2VyOiBQYXJzZXIsIGNhbGxiYWNrOiAodmFsdWU6IHVua25vd24pID0+IHZvaWQpIHtcbiAgcGFyc2VyLnJlYWRJbnQzMkxFKGNhbGxiYWNrKTtcbn1cblxuZnVuY3Rpb24gcmVhZEJpZ0ludChwYXJzZXI6IFBhcnNlciwgY2FsbGJhY2s6ICh2YWx1ZTogdW5rbm93bikgPT4gdm9pZCkge1xuICBwYXJzZXIucmVhZEJpZ0ludDY0TEUoKHZhbHVlKSA9PiB7XG4gICAgY2FsbGJhY2sodmFsdWUudG9TdHJpbmcoKSk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiByZWFkUmVhbChwYXJzZXI6IFBhcnNlciwgY2FsbGJhY2s6ICh2YWx1ZTogdW5rbm93bikgPT4gdm9pZCkge1xuICBwYXJzZXIucmVhZEZsb2F0TEUoY2FsbGJhY2spO1xufVxuXG5mdW5jdGlvbiByZWFkRmxvYXQocGFyc2VyOiBQYXJzZXIsIGNhbGxiYWNrOiAodmFsdWU6IHVua25vd24pID0+IHZvaWQpIHtcbiAgcGFyc2VyLnJlYWREb3VibGVMRShjYWxsYmFjayk7XG59XG5cbmZ1bmN0aW9uIHJlYWRTbWFsbE1vbmV5KHBhcnNlcjogUGFyc2VyLCBjYWxsYmFjazogKHZhbHVlOiB1bmtub3duKSA9PiB2b2lkKSB7XG4gIHBhcnNlci5yZWFkSW50MzJMRSgodmFsdWUpID0+IHtcbiAgICBjYWxsYmFjayh2YWx1ZSAvIE1PTkVZX0RJVklTT1IpO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gcmVhZE1vbmV5KHBhcnNlcjogUGFyc2VyLCBjYWxsYmFjazogKHZhbHVlOiB1bmtub3duKSA9PiB2b2lkKSB7XG4gIHBhcnNlci5yZWFkSW50MzJMRSgoaGlnaCkgPT4ge1xuICAgIHBhcnNlci5yZWFkVUludDMyTEUoKGxvdykgPT4ge1xuICAgICAgY2FsbGJhY2soKGxvdyArICgweDEwMDAwMDAwMCAqIGhpZ2gpKSAvIE1PTkVZX0RJVklTT1IpO1xuICAgIH0pO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gcmVhZEJpdChwYXJzZXI6IFBhcnNlciwgY2FsbGJhY2s6ICh2YWx1ZTogdW5rbm93bikgPT4gdm9pZCkge1xuICBwYXJzZXIucmVhZFVJbnQ4KCh2YWx1ZSkgPT4ge1xuICAgIGNhbGxiYWNrKCEhdmFsdWUpO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gdmFsdWVQYXJzZShwYXJzZXI6IFBhcnNlciwgbWV0YWRhdGE6IE1ldGFkYXRhLCBvcHRpb25zOiBQYXJzZXJPcHRpb25zLCBjYWxsYmFjazogKHZhbHVlOiB1bmtub3duKSA9PiB2b2lkKTogdm9pZCB7XG4gIGNvbnN0IHR5cGUgPSBtZXRhZGF0YS50eXBlO1xuXG4gIHN3aXRjaCAodHlwZS5uYW1lKSB7XG4gICAgY2FzZSAnTnVsbCc6XG4gICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCk7XG5cbiAgICBjYXNlICdUaW55SW50JzpcbiAgICAgIHJldHVybiByZWFkVGlueUludChwYXJzZXIsIGNhbGxiYWNrKTtcblxuICAgIGNhc2UgJ1NtYWxsSW50JzpcbiAgICAgIHJldHVybiByZWFkU21hbGxJbnQocGFyc2VyLCBjYWxsYmFjayk7XG5cbiAgICBjYXNlICdJbnQnOlxuICAgICAgcmV0dXJuIHJlYWRJbnQocGFyc2VyLCBjYWxsYmFjayk7XG5cbiAgICBjYXNlICdCaWdJbnQnOlxuICAgICAgcmV0dXJuIHJlYWRCaWdJbnQocGFyc2VyLCBjYWxsYmFjayk7XG5cbiAgICBjYXNlICdJbnROJzpcbiAgICAgIHJldHVybiBwYXJzZXIucmVhZFVJbnQ4KChkYXRhTGVuZ3RoKSA9PiB7XG4gICAgICAgIHN3aXRjaCAoZGF0YUxlbmd0aCkge1xuICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhudWxsKTtcblxuICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgIHJldHVybiByZWFkVGlueUludChwYXJzZXIsIGNhbGxiYWNrKTtcbiAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICByZXR1cm4gcmVhZFNtYWxsSW50KHBhcnNlciwgY2FsbGJhY2spO1xuICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgIHJldHVybiByZWFkSW50KHBhcnNlciwgY2FsbGJhY2spO1xuICAgICAgICAgIGNhc2UgODpcbiAgICAgICAgICAgIHJldHVybiByZWFkQmlnSW50KHBhcnNlciwgY2FsbGJhY2spO1xuXG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVW5zdXBwb3J0ZWQgZGF0YUxlbmd0aCAnICsgZGF0YUxlbmd0aCArICcgZm9yIEludE4nKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICBjYXNlICdSZWFsJzpcbiAgICAgIHJldHVybiByZWFkUmVhbChwYXJzZXIsIGNhbGxiYWNrKTtcblxuICAgIGNhc2UgJ0Zsb2F0JzpcbiAgICAgIHJldHVybiByZWFkRmxvYXQocGFyc2VyLCBjYWxsYmFjayk7XG5cbiAgICBjYXNlICdGbG9hdE4nOlxuICAgICAgcmV0dXJuIHBhcnNlci5yZWFkVUludDgoKGRhdGFMZW5ndGgpID0+IHtcbiAgICAgICAgc3dpdGNoIChkYXRhTGVuZ3RoKSB7XG4gICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwpO1xuXG4gICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgcmV0dXJuIHJlYWRSZWFsKHBhcnNlciwgY2FsbGJhY2spO1xuICAgICAgICAgIGNhc2UgODpcbiAgICAgICAgICAgIHJldHVybiByZWFkRmxvYXQocGFyc2VyLCBjYWxsYmFjayk7XG5cbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbnN1cHBvcnRlZCBkYXRhTGVuZ3RoICcgKyBkYXRhTGVuZ3RoICsgJyBmb3IgRmxvYXROJyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgY2FzZSAnU21hbGxNb25leSc6XG4gICAgICByZXR1cm4gcmVhZFNtYWxsTW9uZXkocGFyc2VyLCBjYWxsYmFjayk7XG5cbiAgICBjYXNlICdNb25leSc6XG4gICAgICByZXR1cm4gcmVhZE1vbmV5KHBhcnNlciwgY2FsbGJhY2spO1xuXG4gICAgY2FzZSAnTW9uZXlOJzpcbiAgICAgIHJldHVybiBwYXJzZXIucmVhZFVJbnQ4KChkYXRhTGVuZ3RoKSA9PiB7XG4gICAgICAgIHN3aXRjaCAoZGF0YUxlbmd0aCkge1xuICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhudWxsKTtcblxuICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgIHJldHVybiByZWFkU21hbGxNb25leShwYXJzZXIsIGNhbGxiYWNrKTtcbiAgICAgICAgICBjYXNlIDg6XG4gICAgICAgICAgICByZXR1cm4gcmVhZE1vbmV5KHBhcnNlciwgY2FsbGJhY2spO1xuXG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVW5zdXBwb3J0ZWQgZGF0YUxlbmd0aCAnICsgZGF0YUxlbmd0aCArICcgZm9yIE1vbmV5TicpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgIGNhc2UgJ0JpdCc6XG4gICAgICByZXR1cm4gcmVhZEJpdChwYXJzZXIsIGNhbGxiYWNrKTtcblxuICAgIGNhc2UgJ0JpdE4nOlxuICAgICAgcmV0dXJuIHBhcnNlci5yZWFkVUludDgoKGRhdGFMZW5ndGgpID0+IHtcbiAgICAgICAgc3dpdGNoIChkYXRhTGVuZ3RoKSB7XG4gICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwpO1xuXG4gICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgcmV0dXJuIHJlYWRCaXQocGFyc2VyLCBjYWxsYmFjayk7XG5cbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbnN1cHBvcnRlZCBkYXRhTGVuZ3RoICcgKyBkYXRhTGVuZ3RoICsgJyBmb3IgQml0TicpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgIGNhc2UgJ1ZhckNoYXInOlxuICAgIGNhc2UgJ0NoYXInOlxuICAgICAgY29uc3QgY29kZXBhZ2UgPSBtZXRhZGF0YS5jb2xsYXRpb24hLmNvZGVwYWdlITtcbiAgICAgIGlmIChtZXRhZGF0YS5kYXRhTGVuZ3RoID09PSBNQVgpIHtcbiAgICAgICAgcmV0dXJuIHJlYWRNYXhDaGFycyhwYXJzZXIsIGNvZGVwYWdlLCBjYWxsYmFjayk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gcGFyc2VyLnJlYWRVSW50MTZMRSgoZGF0YUxlbmd0aCkgPT4ge1xuICAgICAgICAgIGlmIChkYXRhTGVuZ3RoID09PSBOVUxMKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmVhZENoYXJzKHBhcnNlciwgZGF0YUxlbmd0aCEsIGNvZGVwYWdlLCBjYWxsYmFjayk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgY2FzZSAnTlZhckNoYXInOlxuICAgIGNhc2UgJ05DaGFyJzpcbiAgICAgIGlmIChtZXRhZGF0YS5kYXRhTGVuZ3RoID09PSBNQVgpIHtcbiAgICAgICAgcmV0dXJuIHJlYWRNYXhOQ2hhcnMocGFyc2VyLCBjYWxsYmFjayk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gcGFyc2VyLnJlYWRVSW50MTZMRSgoZGF0YUxlbmd0aCkgPT4ge1xuICAgICAgICAgIGlmIChkYXRhTGVuZ3RoID09PSBOVUxMKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmVhZE5DaGFycyhwYXJzZXIsIGRhdGFMZW5ndGghLCBjYWxsYmFjayk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgY2FzZSAnVmFyQmluYXJ5JzpcbiAgICBjYXNlICdCaW5hcnknOlxuICAgICAgaWYgKG1ldGFkYXRhLmRhdGFMZW5ndGggPT09IE1BWCkge1xuICAgICAgICByZXR1cm4gcmVhZE1heEJpbmFyeShwYXJzZXIsIGNhbGxiYWNrKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBwYXJzZXIucmVhZFVJbnQxNkxFKChkYXRhTGVuZ3RoKSA9PiB7XG4gICAgICAgICAgaWYgKGRhdGFMZW5ndGggPT09IE5VTEwpIHtcbiAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZWFkQmluYXJ5KHBhcnNlciwgZGF0YUxlbmd0aCEsIGNhbGxiYWNrKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICBjYXNlICdUZXh0JzpcbiAgICAgIHJldHVybiBwYXJzZXIucmVhZFVJbnQ4KCh0ZXh0UG9pbnRlckxlbmd0aCkgPT4ge1xuICAgICAgICBpZiAodGV4dFBvaW50ZXJMZW5ndGggPT09IDApIHtcbiAgICAgICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCk7XG4gICAgICAgIH1cblxuICAgICAgICBwYXJzZXIucmVhZEJ1ZmZlcih0ZXh0UG9pbnRlckxlbmd0aCwgKF90ZXh0UG9pbnRlcikgPT4ge1xuICAgICAgICAgIHBhcnNlci5yZWFkQnVmZmVyKDgsIChfdGltZXN0YW1wKSA9PiB7XG4gICAgICAgICAgICBwYXJzZXIucmVhZFVJbnQzMkxFKChkYXRhTGVuZ3RoKSA9PiB7XG4gICAgICAgICAgICAgIHJlYWRDaGFycyhwYXJzZXIsIGRhdGFMZW5ndGghLCBtZXRhZGF0YS5jb2xsYXRpb24hLmNvZGVwYWdlISwgY2FsbGJhY2spO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICBjYXNlICdOVGV4dCc6XG4gICAgICByZXR1cm4gcGFyc2VyLnJlYWRVSW50OCgodGV4dFBvaW50ZXJMZW5ndGgpID0+IHtcbiAgICAgICAgaWYgKHRleHRQb2ludGVyTGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICB9XG5cbiAgICAgICAgcGFyc2VyLnJlYWRCdWZmZXIodGV4dFBvaW50ZXJMZW5ndGgsIChfdGV4dFBvaW50ZXIpID0+IHtcbiAgICAgICAgICBwYXJzZXIucmVhZEJ1ZmZlcig4LCAoX3RpbWVzdGFtcCkgPT4ge1xuICAgICAgICAgICAgcGFyc2VyLnJlYWRVSW50MzJMRSgoZGF0YUxlbmd0aCkgPT4ge1xuICAgICAgICAgICAgICByZWFkTkNoYXJzKHBhcnNlciwgZGF0YUxlbmd0aCEsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgY2FzZSAnSW1hZ2UnOlxuICAgICAgcmV0dXJuIHBhcnNlci5yZWFkVUludDgoKHRleHRQb2ludGVyTGVuZ3RoKSA9PiB7XG4gICAgICAgIGlmICh0ZXh0UG9pbnRlckxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHJldHVybiBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHBhcnNlci5yZWFkQnVmZmVyKHRleHRQb2ludGVyTGVuZ3RoLCAoX3RleHRQb2ludGVyKSA9PiB7XG4gICAgICAgICAgcGFyc2VyLnJlYWRCdWZmZXIoOCwgKF90aW1lc3RhbXApID0+IHtcbiAgICAgICAgICAgIHBhcnNlci5yZWFkVUludDMyTEUoKGRhdGFMZW5ndGgpID0+IHtcbiAgICAgICAgICAgICAgcmVhZEJpbmFyeShwYXJzZXIsIGRhdGFMZW5ndGghLCBjYWxsYmFjayk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgIGNhc2UgJ1htbCc6XG4gICAgICByZXR1cm4gcmVhZE1heE5DaGFycyhwYXJzZXIsIGNhbGxiYWNrKTtcblxuICAgIGNhc2UgJ1NtYWxsRGF0ZVRpbWUnOlxuICAgICAgcmV0dXJuIHJlYWRTbWFsbERhdGVUaW1lKHBhcnNlciwgb3B0aW9ucy51c2VVVEMsIGNhbGxiYWNrKTtcblxuICAgIGNhc2UgJ0RhdGVUaW1lJzpcbiAgICAgIHJldHVybiByZWFkRGF0ZVRpbWUocGFyc2VyLCBvcHRpb25zLnVzZVVUQywgY2FsbGJhY2spO1xuXG4gICAgY2FzZSAnRGF0ZVRpbWVOJzpcbiAgICAgIHJldHVybiBwYXJzZXIucmVhZFVJbnQ4KChkYXRhTGVuZ3RoKSA9PiB7XG4gICAgICAgIHN3aXRjaCAoZGF0YUxlbmd0aCkge1xuICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhudWxsKTtcblxuICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgIHJldHVybiByZWFkU21hbGxEYXRlVGltZShwYXJzZXIsIG9wdGlvbnMudXNlVVRDLCBjYWxsYmFjayk7XG4gICAgICAgICAgY2FzZSA4OlxuICAgICAgICAgICAgcmV0dXJuIHJlYWREYXRlVGltZShwYXJzZXIsIG9wdGlvbnMudXNlVVRDLCBjYWxsYmFjayk7XG5cbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbnN1cHBvcnRlZCBkYXRhTGVuZ3RoICcgKyBkYXRhTGVuZ3RoICsgJyBmb3IgRGF0ZVRpbWVOJyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgY2FzZSAnVGltZSc6XG4gICAgICByZXR1cm4gcGFyc2VyLnJlYWRVSW50OCgoZGF0YUxlbmd0aCkgPT4ge1xuICAgICAgICBpZiAoZGF0YUxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHJldHVybiBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gcmVhZFRpbWUocGFyc2VyLCBkYXRhTGVuZ3RoISwgbWV0YWRhdGEuc2NhbGUhLCBvcHRpb25zLnVzZVVUQywgY2FsbGJhY2spO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgIGNhc2UgJ0RhdGUnOlxuICAgICAgcmV0dXJuIHBhcnNlci5yZWFkVUludDgoKGRhdGFMZW5ndGgpID0+IHtcbiAgICAgICAgaWYgKGRhdGFMZW5ndGggPT09IDApIHtcbiAgICAgICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHJlYWREYXRlKHBhcnNlciwgb3B0aW9ucy51c2VVVEMsIGNhbGxiYWNrKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICBjYXNlICdEYXRlVGltZTInOlxuICAgICAgcmV0dXJuIHBhcnNlci5yZWFkVUludDgoKGRhdGFMZW5ndGgpID0+IHtcbiAgICAgICAgaWYgKGRhdGFMZW5ndGggPT09IDApIHtcbiAgICAgICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHJlYWREYXRlVGltZTIocGFyc2VyLCBkYXRhTGVuZ3RoISwgbWV0YWRhdGEuc2NhbGUhLCBvcHRpb25zLnVzZVVUQywgY2FsbGJhY2spO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgIGNhc2UgJ0RhdGVUaW1lT2Zmc2V0JzpcbiAgICAgIHJldHVybiBwYXJzZXIucmVhZFVJbnQ4KChkYXRhTGVuZ3RoKSA9PiB7XG4gICAgICAgIGlmIChkYXRhTGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiByZWFkRGF0ZVRpbWVPZmZzZXQocGFyc2VyLCBkYXRhTGVuZ3RoISwgbWV0YWRhdGEuc2NhbGUhLCBjYWxsYmFjayk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgY2FzZSAnTnVtZXJpY04nOlxuICAgIGNhc2UgJ0RlY2ltYWxOJzpcbiAgICAgIHJldHVybiBwYXJzZXIucmVhZFVJbnQ4KChkYXRhTGVuZ3RoKSA9PiB7XG4gICAgICAgIGlmIChkYXRhTGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiByZWFkTnVtZXJpYyhwYXJzZXIsIGRhdGFMZW5ndGghLCBtZXRhZGF0YS5wcmVjaXNpb24hLCBtZXRhZGF0YS5zY2FsZSEsIGNhbGxiYWNrKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICBjYXNlICdVbmlxdWVJZGVudGlmaWVyJzpcbiAgICAgIHJldHVybiBwYXJzZXIucmVhZFVJbnQ4KChkYXRhTGVuZ3RoKSA9PiB7XG4gICAgICAgIHN3aXRjaCAoZGF0YUxlbmd0aCkge1xuICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhudWxsKTtcblxuICAgICAgICAgIGNhc2UgMHgxMDpcbiAgICAgICAgICAgIHJldHVybiByZWFkVW5pcXVlSWRlbnRpZmllcihwYXJzZXIsIG9wdGlvbnMsIGNhbGxiYWNrKTtcblxuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3Ioc3ByaW50ZignVW5zdXBwb3J0ZWQgZ3VpZCBzaXplICVkJywgZGF0YUxlbmd0aCEgLSAxKSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgY2FzZSAnVURUJzpcbiAgICAgIHJldHVybiByZWFkTWF4QmluYXJ5KHBhcnNlciwgY2FsbGJhY2spO1xuXG4gICAgY2FzZSAnVmFyaWFudCc6XG4gICAgICByZXR1cm4gcGFyc2VyLnJlYWRVSW50MzJMRSgoZGF0YUxlbmd0aCkgPT4ge1xuICAgICAgICBpZiAoZGF0YUxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHJldHVybiBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlYWRWYXJpYW50KHBhcnNlciwgb3B0aW9ucywgZGF0YUxlbmd0aCEsIGNhbGxiYWNrKTtcbiAgICAgIH0pO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyBFcnJvcihzcHJpbnRmKCdVbnJlY29nbmlzZWQgdHlwZSAlcycsIHR5cGUubmFtZSkpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlYWRVbmlxdWVJZGVudGlmaWVyKHBhcnNlcjogUGFyc2VyLCBvcHRpb25zOiBQYXJzZXJPcHRpb25zLCBjYWxsYmFjazogKHZhbHVlOiB1bmtub3duKSA9PiB2b2lkKSB7XG4gIHBhcnNlci5yZWFkQnVmZmVyKDB4MTAsIChkYXRhKSA9PiB7XG4gICAgY2FsbGJhY2sob3B0aW9ucy5sb3dlckNhc2VHdWlkcyA/IGJ1ZmZlclRvTG93ZXJDYXNlR3VpZChkYXRhKSA6IGJ1ZmZlclRvVXBwZXJDYXNlR3VpZChkYXRhKSk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiByZWFkTnVtZXJpYyhwYXJzZXI6IFBhcnNlciwgZGF0YUxlbmd0aDogbnVtYmVyLCBfcHJlY2lzaW9uOiBudW1iZXIsIHNjYWxlOiBudW1iZXIsIGNhbGxiYWNrOiAodmFsdWU6IHVua25vd24pID0+IHZvaWQpIHtcbiAgcGFyc2VyLnJlYWRVSW50OCgoc2lnbikgPT4ge1xuICAgIHNpZ24gPSBzaWduID09PSAxID8gMSA6IC0xO1xuXG4gICAgbGV0IHJlYWRWYWx1ZTtcbiAgICBpZiAoZGF0YUxlbmd0aCA9PT0gNSkge1xuICAgICAgcmVhZFZhbHVlID0gcGFyc2VyLnJlYWRVSW50MzJMRTtcbiAgICB9IGVsc2UgaWYgKGRhdGFMZW5ndGggPT09IDkpIHtcbiAgICAgIHJlYWRWYWx1ZSA9IHBhcnNlci5yZWFkVU51bWVyaWM2NExFO1xuICAgIH0gZWxzZSBpZiAoZGF0YUxlbmd0aCA9PT0gMTMpIHtcbiAgICAgIHJlYWRWYWx1ZSA9IHBhcnNlci5yZWFkVU51bWVyaWM5NkxFO1xuICAgIH0gZWxzZSBpZiAoZGF0YUxlbmd0aCA9PT0gMTcpIHtcbiAgICAgIHJlYWRWYWx1ZSA9IHBhcnNlci5yZWFkVU51bWVyaWMxMjhMRTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKHNwcmludGYoJ1Vuc3VwcG9ydGVkIG51bWVyaWMgZGF0YUxlbmd0aCAlZCcsIGRhdGFMZW5ndGgpKTtcbiAgICB9XG5cbiAgICByZWFkVmFsdWUuY2FsbChwYXJzZXIsICh2YWx1ZSkgPT4ge1xuICAgICAgY2FsbGJhY2soKHZhbHVlICogc2lnbikgLyBNYXRoLnBvdygxMCwgc2NhbGUpKTtcbiAgICB9KTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHJlYWRWYXJpYW50KHBhcnNlcjogUGFyc2VyLCBvcHRpb25zOiBQYXJzZXJPcHRpb25zLCBkYXRhTGVuZ3RoOiBudW1iZXIsIGNhbGxiYWNrOiAodmFsdWU6IHVua25vd24pID0+IHZvaWQpIHtcbiAgcmV0dXJuIHBhcnNlci5yZWFkVUludDgoKGJhc2VUeXBlKSA9PiB7XG4gICAgY29uc3QgdHlwZSA9IFRZUEVbYmFzZVR5cGVdO1xuXG4gICAgcmV0dXJuIHBhcnNlci5yZWFkVUludDgoKHByb3BCeXRlcykgPT4ge1xuICAgICAgZGF0YUxlbmd0aCA9IGRhdGFMZW5ndGggLSBwcm9wQnl0ZXMgLSAyO1xuXG4gICAgICBzd2l0Y2ggKHR5cGUubmFtZSkge1xuICAgICAgICBjYXNlICdVbmlxdWVJZGVudGlmaWVyJzpcbiAgICAgICAgICByZXR1cm4gcmVhZFVuaXF1ZUlkZW50aWZpZXIocGFyc2VyLCBvcHRpb25zLCBjYWxsYmFjayk7XG5cbiAgICAgICAgY2FzZSAnQml0JzpcbiAgICAgICAgICByZXR1cm4gcmVhZEJpdChwYXJzZXIsIGNhbGxiYWNrKTtcblxuICAgICAgICBjYXNlICdUaW55SW50JzpcbiAgICAgICAgICByZXR1cm4gcmVhZFRpbnlJbnQocGFyc2VyLCBjYWxsYmFjayk7XG5cbiAgICAgICAgY2FzZSAnU21hbGxJbnQnOlxuICAgICAgICAgIHJldHVybiByZWFkU21hbGxJbnQocGFyc2VyLCBjYWxsYmFjayk7XG5cbiAgICAgICAgY2FzZSAnSW50JzpcbiAgICAgICAgICByZXR1cm4gcmVhZEludChwYXJzZXIsIGNhbGxiYWNrKTtcblxuICAgICAgICBjYXNlICdCaWdJbnQnOlxuICAgICAgICAgIHJldHVybiByZWFkQmlnSW50KHBhcnNlciwgY2FsbGJhY2spO1xuXG4gICAgICAgIGNhc2UgJ1NtYWxsRGF0ZVRpbWUnOlxuICAgICAgICAgIHJldHVybiByZWFkU21hbGxEYXRlVGltZShwYXJzZXIsIG9wdGlvbnMudXNlVVRDLCBjYWxsYmFjayk7XG5cbiAgICAgICAgY2FzZSAnRGF0ZVRpbWUnOlxuICAgICAgICAgIHJldHVybiByZWFkRGF0ZVRpbWUocGFyc2VyLCBvcHRpb25zLnVzZVVUQywgY2FsbGJhY2spO1xuXG4gICAgICAgIGNhc2UgJ1JlYWwnOlxuICAgICAgICAgIHJldHVybiByZWFkUmVhbChwYXJzZXIsIGNhbGxiYWNrKTtcblxuICAgICAgICBjYXNlICdGbG9hdCc6XG4gICAgICAgICAgcmV0dXJuIHJlYWRGbG9hdChwYXJzZXIsIGNhbGxiYWNrKTtcblxuICAgICAgICBjYXNlICdTbWFsbE1vbmV5JzpcbiAgICAgICAgICByZXR1cm4gcmVhZFNtYWxsTW9uZXkocGFyc2VyLCBjYWxsYmFjayk7XG5cbiAgICAgICAgY2FzZSAnTW9uZXknOlxuICAgICAgICAgIHJldHVybiByZWFkTW9uZXkocGFyc2VyLCBjYWxsYmFjayk7XG5cbiAgICAgICAgY2FzZSAnRGF0ZSc6XG4gICAgICAgICAgcmV0dXJuIHJlYWREYXRlKHBhcnNlciwgb3B0aW9ucy51c2VVVEMsIGNhbGxiYWNrKTtcblxuICAgICAgICBjYXNlICdUaW1lJzpcbiAgICAgICAgICByZXR1cm4gcGFyc2VyLnJlYWRVSW50OCgoc2NhbGUpID0+IHtcbiAgICAgICAgICAgIHJldHVybiByZWFkVGltZShwYXJzZXIsIGRhdGFMZW5ndGgsIHNjYWxlLCBvcHRpb25zLnVzZVVUQywgY2FsbGJhY2spO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgIGNhc2UgJ0RhdGVUaW1lMic6XG4gICAgICAgICAgcmV0dXJuIHBhcnNlci5yZWFkVUludDgoKHNjYWxlKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gcmVhZERhdGVUaW1lMihwYXJzZXIsIGRhdGFMZW5ndGgsIHNjYWxlLCBvcHRpb25zLnVzZVVUQywgY2FsbGJhY2spO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgIGNhc2UgJ0RhdGVUaW1lT2Zmc2V0JzpcbiAgICAgICAgICByZXR1cm4gcGFyc2VyLnJlYWRVSW50OCgoc2NhbGUpID0+IHtcbiAgICAgICAgICAgIHJldHVybiByZWFkRGF0ZVRpbWVPZmZzZXQocGFyc2VyLCBkYXRhTGVuZ3RoLCBzY2FsZSwgY2FsbGJhY2spO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgIGNhc2UgJ1ZhckJpbmFyeSc6XG4gICAgICAgIGNhc2UgJ0JpbmFyeSc6XG4gICAgICAgICAgcmV0dXJuIHBhcnNlci5yZWFkVUludDE2TEUoKF9tYXhMZW5ndGgpID0+IHtcbiAgICAgICAgICAgIHJlYWRCaW5hcnkocGFyc2VyLCBkYXRhTGVuZ3RoLCBjYWxsYmFjayk7XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgY2FzZSAnTnVtZXJpY04nOlxuICAgICAgICBjYXNlICdEZWNpbWFsTic6XG4gICAgICAgICAgcmV0dXJuIHBhcnNlci5yZWFkVUludDgoKHByZWNpc2lvbikgPT4ge1xuICAgICAgICAgICAgcGFyc2VyLnJlYWRVSW50OCgoc2NhbGUpID0+IHtcbiAgICAgICAgICAgICAgcmVhZE51bWVyaWMocGFyc2VyLCBkYXRhTGVuZ3RoLCBwcmVjaXNpb24sIHNjYWxlLCBjYWxsYmFjayk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KTtcblxuICAgICAgICBjYXNlICdWYXJDaGFyJzpcbiAgICAgICAgY2FzZSAnQ2hhcic6XG4gICAgICAgICAgcmV0dXJuIHBhcnNlci5yZWFkVUludDE2TEUoKF9tYXhMZW5ndGgpID0+IHtcbiAgICAgICAgICAgIHJlYWRDb2xsYXRpb24ocGFyc2VyLCAoY29sbGF0aW9uKSA9PiB7XG4gICAgICAgICAgICAgIHJlYWRDaGFycyhwYXJzZXIsIGRhdGFMZW5ndGgsIGNvbGxhdGlvbi5jb2RlcGFnZSEsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgIGNhc2UgJ05WYXJDaGFyJzpcbiAgICAgICAgY2FzZSAnTkNoYXInOlxuICAgICAgICAgIHJldHVybiBwYXJzZXIucmVhZFVJbnQxNkxFKChfbWF4TGVuZ3RoKSA9PiB7XG4gICAgICAgICAgICByZWFkQ29sbGF0aW9uKHBhcnNlciwgKF9jb2xsYXRpb24pID0+IHtcbiAgICAgICAgICAgICAgcmVhZE5DaGFycyhwYXJzZXIsIGRhdGFMZW5ndGgsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHR5cGUhJyk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiByZWFkQmluYXJ5KHBhcnNlcjogUGFyc2VyLCBkYXRhTGVuZ3RoOiBudW1iZXIsIGNhbGxiYWNrOiAodmFsdWU6IHVua25vd24pID0+IHZvaWQpIHtcbiAgcmV0dXJuIHBhcnNlci5yZWFkQnVmZmVyKGRhdGFMZW5ndGgsIGNhbGxiYWNrKTtcbn1cblxuZnVuY3Rpb24gcmVhZENoYXJzKHBhcnNlcjogUGFyc2VyLCBkYXRhTGVuZ3RoOiBudW1iZXIsIGNvZGVwYWdlOiBzdHJpbmcsIGNhbGxiYWNrOiAodmFsdWU6IHVua25vd24pID0+IHZvaWQpIHtcbiAgaWYgKGNvZGVwYWdlID09IG51bGwpIHtcbiAgICBjb2RlcGFnZSA9IERFRkFVTFRfRU5DT0RJTkc7XG4gIH1cblxuICByZXR1cm4gcGFyc2VyLnJlYWRCdWZmZXIoZGF0YUxlbmd0aCwgKGRhdGEpID0+IHtcbiAgICBjYWxsYmFjayhpY29udi5kZWNvZGUoZGF0YSwgY29kZXBhZ2UpKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHJlYWROQ2hhcnMocGFyc2VyOiBQYXJzZXIsIGRhdGFMZW5ndGg6IG51bWJlciwgY2FsbGJhY2s6ICh2YWx1ZTogdW5rbm93bikgPT4gdm9pZCkge1xuICBwYXJzZXIucmVhZEJ1ZmZlcihkYXRhTGVuZ3RoLCAoZGF0YSkgPT4ge1xuICAgIGNhbGxiYWNrKGRhdGEudG9TdHJpbmcoJ3VjczInKSk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiByZWFkTWF4QmluYXJ5KHBhcnNlcjogUGFyc2VyLCBjYWxsYmFjazogKHZhbHVlOiB1bmtub3duKSA9PiB2b2lkKSB7XG4gIHJldHVybiByZWFkTWF4KHBhcnNlciwgY2FsbGJhY2spO1xufVxuXG5mdW5jdGlvbiByZWFkTWF4Q2hhcnMocGFyc2VyOiBQYXJzZXIsIGNvZGVwYWdlOiBzdHJpbmcsIGNhbGxiYWNrOiAodmFsdWU6IHVua25vd24pID0+IHZvaWQpIHtcbiAgaWYgKGNvZGVwYWdlID09IG51bGwpIHtcbiAgICBjb2RlcGFnZSA9IERFRkFVTFRfRU5DT0RJTkc7XG4gIH1cblxuICByZWFkTWF4KHBhcnNlciwgKGRhdGEpID0+IHtcbiAgICBpZiAoZGF0YSkge1xuICAgICAgY2FsbGJhY2soaWNvbnYuZGVjb2RlKGRhdGEsIGNvZGVwYWdlKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNhbGxiYWNrKG51bGwpO1xuICAgIH1cbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHJlYWRNYXhOQ2hhcnMocGFyc2VyOiBQYXJzZXIsIGNhbGxiYWNrOiAodmFsdWU6IHN0cmluZyB8IG51bGwpID0+IHZvaWQpIHtcbiAgcmVhZE1heChwYXJzZXIsIChkYXRhKSA9PiB7XG4gICAgaWYgKGRhdGEpIHtcbiAgICAgIGNhbGxiYWNrKGRhdGEudG9TdHJpbmcoJ3VjczInKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNhbGxiYWNrKG51bGwpO1xuICAgIH1cbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHJlYWRNYXgocGFyc2VyOiBQYXJzZXIsIGNhbGxiYWNrOiAodmFsdWU6IG51bGwgfCBCdWZmZXIpID0+IHZvaWQpIHtcbiAgcGFyc2VyLnJlYWRCdWZmZXIoOCwgKHR5cGUpID0+IHtcbiAgICBpZiAodHlwZS5lcXVhbHMoUExQX05VTEwpKSB7XG4gICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCk7XG4gICAgfSBlbHNlIGlmICh0eXBlLmVxdWFscyhVTktOT1dOX1BMUF9MRU4pKSB7XG4gICAgICByZXR1cm4gcmVhZE1heFVua25vd25MZW5ndGgocGFyc2VyLCBjYWxsYmFjayk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGxvdyA9IHR5cGUucmVhZFVJbnQzMkxFKDApO1xuICAgICAgY29uc3QgaGlnaCA9IHR5cGUucmVhZFVJbnQzMkxFKDQpO1xuXG4gICAgICBpZiAoaGlnaCA+PSAoMiA8PCAoNTMgLSAzMikpKSB7XG4gICAgICAgIGNvbnNvbGUud2FybignUmVhZCBVSW50NjRMRSA+IDUzIGJpdHMgOiBoaWdoPScgKyBoaWdoICsgJywgbG93PScgKyBsb3cpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBleHBlY3RlZExlbmd0aCA9IGxvdyArICgweDEwMDAwMDAwMCAqIGhpZ2gpO1xuICAgICAgcmV0dXJuIHJlYWRNYXhLbm93bkxlbmd0aChwYXJzZXIsIGV4cGVjdGVkTGVuZ3RoLCBjYWxsYmFjayk7XG4gICAgfVxuICB9KTtcbn1cblxuZnVuY3Rpb24gcmVhZE1heEtub3duTGVuZ3RoKHBhcnNlcjogUGFyc2VyLCB0b3RhbExlbmd0aDogbnVtYmVyLCBjYWxsYmFjazogKHZhbHVlOiBudWxsIHwgQnVmZmVyKSA9PiB2b2lkKSB7XG4gIGNvbnN0IGRhdGEgPSBCdWZmZXIuYWxsb2ModG90YWxMZW5ndGgsIDApO1xuXG4gIGxldCBvZmZzZXQgPSAwO1xuICBmdW5jdGlvbiBuZXh0KGRvbmU6IGFueSkge1xuICAgIHBhcnNlci5yZWFkVUludDMyTEUoKGNodW5rTGVuZ3RoKSA9PiB7XG4gICAgICBpZiAoIWNodW5rTGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBkb25lKCk7XG4gICAgICB9XG5cbiAgICAgIHBhcnNlci5yZWFkQnVmZmVyKGNodW5rTGVuZ3RoLCAoY2h1bmspID0+IHtcbiAgICAgICAgY2h1bmsuY29weShkYXRhLCBvZmZzZXQpO1xuICAgICAgICBvZmZzZXQgKz0gY2h1bmtMZW5ndGg7XG5cbiAgICAgICAgbmV4dChkb25lKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgbmV4dCgoKSA9PiB7XG4gICAgaWYgKG9mZnNldCAhPT0gdG90YWxMZW5ndGgpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignUGFydGlhbGx5IExlbmd0aC1wcmVmaXhlZCBCeXRlcyB1bm1hdGNoZWQgbGVuZ3RocyA6IGV4cGVjdGVkICcgKyB0b3RhbExlbmd0aCArICcsIGJ1dCBnb3QgJyArIG9mZnNldCArICcgYnl0ZXMnKTtcbiAgICB9XG5cbiAgICBjYWxsYmFjayhkYXRhKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHJlYWRNYXhVbmtub3duTGVuZ3RoKHBhcnNlcjogUGFyc2VyLCBjYWxsYmFjazogKHZhbHVlOiBudWxsIHwgQnVmZmVyKSA9PiB2b2lkKSB7XG4gIGNvbnN0IGNodW5rczogQnVmZmVyW10gPSBbXTtcblxuICBsZXQgbGVuZ3RoID0gMDtcbiAgZnVuY3Rpb24gbmV4dChkb25lOiBhbnkpIHtcbiAgICBwYXJzZXIucmVhZFVJbnQzMkxFKChjaHVua0xlbmd0aCkgPT4ge1xuICAgICAgaWYgKCFjaHVua0xlbmd0aCkge1xuICAgICAgICByZXR1cm4gZG9uZSgpO1xuICAgICAgfVxuXG4gICAgICBwYXJzZXIucmVhZEJ1ZmZlcihjaHVua0xlbmd0aCwgKGNodW5rKSA9PiB7XG4gICAgICAgIGNodW5rcy5wdXNoKGNodW5rKTtcbiAgICAgICAgbGVuZ3RoICs9IGNodW5rTGVuZ3RoO1xuXG4gICAgICAgIG5leHQoZG9uZSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIG5leHQoKCkgPT4ge1xuICAgIGNhbGxiYWNrKEJ1ZmZlci5jb25jYXQoY2h1bmtzLCBsZW5ndGgpKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHJlYWRTbWFsbERhdGVUaW1lKHBhcnNlcjogUGFyc2VyLCB1c2VVVEM6IGJvb2xlYW4sIGNhbGxiYWNrOiAodmFsdWU6IERhdGUpID0+IHZvaWQpIHtcbiAgcGFyc2VyLnJlYWRVSW50MTZMRSgoZGF5cykgPT4ge1xuICAgIHBhcnNlci5yZWFkVUludDE2TEUoKG1pbnV0ZXMpID0+IHtcbiAgICAgIGxldCB2YWx1ZTtcbiAgICAgIGlmICh1c2VVVEMpIHtcbiAgICAgICAgdmFsdWUgPSBuZXcgRGF0ZShEYXRlLlVUQygxOTAwLCAwLCAxICsgZGF5cywgMCwgbWludXRlcykpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFsdWUgPSBuZXcgRGF0ZSgxOTAwLCAwLCAxICsgZGF5cywgMCwgbWludXRlcyk7XG4gICAgICB9XG4gICAgICBjYWxsYmFjayh2YWx1ZSk7XG4gICAgfSk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiByZWFkRGF0ZVRpbWUocGFyc2VyOiBQYXJzZXIsIHVzZVVUQzogYm9vbGVhbiwgY2FsbGJhY2s6ICh2YWx1ZTogRGF0ZSkgPT4gdm9pZCkge1xuICBwYXJzZXIucmVhZEludDMyTEUoKGRheXMpID0+IHtcbiAgICBwYXJzZXIucmVhZFVJbnQzMkxFKCh0aHJlZUh1bmRyZWR0aHNPZlNlY29uZCkgPT4ge1xuICAgICAgY29uc3QgbWlsbGlzZWNvbmRzID0gTWF0aC5yb3VuZCh0aHJlZUh1bmRyZWR0aHNPZlNlY29uZCAqIFRIUkVFX0FORF9BX1RISVJEKTtcblxuICAgICAgbGV0IHZhbHVlO1xuICAgICAgaWYgKHVzZVVUQykge1xuICAgICAgICB2YWx1ZSA9IG5ldyBEYXRlKERhdGUuVVRDKDE5MDAsIDAsIDEgKyBkYXlzLCAwLCAwLCAwLCBtaWxsaXNlY29uZHMpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhbHVlID0gbmV3IERhdGUoMTkwMCwgMCwgMSArIGRheXMsIDAsIDAsIDAsIG1pbGxpc2Vjb25kcyk7XG4gICAgICB9XG5cbiAgICAgIGNhbGxiYWNrKHZhbHVlKTtcbiAgICB9KTtcbiAgfSk7XG59XG5cbmludGVyZmFjZSBEYXRlV2l0aE5hbm9zZWNvbmRzRGVsdGEgZXh0ZW5kcyBEYXRlIHtcbiAgbmFub3NlY29uZHNEZWx0YTogbnVtYmVyO1xufVxuXG5mdW5jdGlvbiByZWFkVGltZShwYXJzZXI6IFBhcnNlciwgZGF0YUxlbmd0aDogbnVtYmVyLCBzY2FsZTogbnVtYmVyLCB1c2VVVEM6IGJvb2xlYW4sIGNhbGxiYWNrOiAodmFsdWU6IERhdGVXaXRoTmFub3NlY29uZHNEZWx0YSkgPT4gdm9pZCkge1xuICBsZXQgcmVhZFZhbHVlOiBhbnk7XG4gIHN3aXRjaCAoZGF0YUxlbmd0aCkge1xuICAgIGNhc2UgMzpcbiAgICAgIHJlYWRWYWx1ZSA9IHBhcnNlci5yZWFkVUludDI0TEU7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDQ6XG4gICAgICByZWFkVmFsdWUgPSBwYXJzZXIucmVhZFVJbnQzMkxFO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSA1OlxuICAgICAgcmVhZFZhbHVlID0gcGFyc2VyLnJlYWRVSW50NDBMRTtcbiAgfVxuXG4gIHJlYWRWYWx1ZSEuY2FsbChwYXJzZXIsICh2YWx1ZTogbnVtYmVyKSA9PiB7XG4gICAgaWYgKHNjYWxlIDwgNykge1xuICAgICAgZm9yIChsZXQgaSA9IHNjYWxlOyBpIDwgNzsgaSsrKSB7XG4gICAgICAgIHZhbHVlICo9IDEwO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxldCBkYXRlO1xuICAgIGlmICh1c2VVVEMpIHtcbiAgICAgIGRhdGUgPSBuZXcgRGF0ZShEYXRlLlVUQygxOTcwLCAwLCAxLCAwLCAwLCAwLCB2YWx1ZSAvIDEwMDAwKSkgYXMgRGF0ZVdpdGhOYW5vc2Vjb25kc0RlbHRhO1xuICAgIH0gZWxzZSB7XG4gICAgICBkYXRlID0gbmV3IERhdGUoMTk3MCwgMCwgMSwgMCwgMCwgMCwgdmFsdWUgLyAxMDAwMCkgYXMgRGF0ZVdpdGhOYW5vc2Vjb25kc0RlbHRhO1xuICAgIH1cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZGF0ZSwgJ25hbm9zZWNvbmRzRGVsdGEnLCB7XG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIHZhbHVlOiAodmFsdWUgJSAxMDAwMCkgLyBNYXRoLnBvdygxMCwgNylcbiAgICB9KTtcbiAgICBjYWxsYmFjayhkYXRlKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHJlYWREYXRlKHBhcnNlcjogUGFyc2VyLCB1c2VVVEM6IGJvb2xlYW4sIGNhbGxiYWNrOiAodmFsdWU6IERhdGUpID0+IHZvaWQpIHtcbiAgcGFyc2VyLnJlYWRVSW50MjRMRSgoZGF5cykgPT4ge1xuICAgIGlmICh1c2VVVEMpIHtcbiAgICAgIGNhbGxiYWNrKG5ldyBEYXRlKERhdGUuVVRDKDIwMDAsIDAsIGRheXMgLSA3MzAxMTgpKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNhbGxiYWNrKG5ldyBEYXRlKDIwMDAsIDAsIGRheXMgLSA3MzAxMTgpKTtcbiAgICB9XG4gIH0pO1xufVxuXG5mdW5jdGlvbiByZWFkRGF0ZVRpbWUyKHBhcnNlcjogUGFyc2VyLCBkYXRhTGVuZ3RoOiBudW1iZXIsIHNjYWxlOiBudW1iZXIsIHVzZVVUQzogYm9vbGVhbiwgY2FsbGJhY2s6ICh2YWx1ZTogRGF0ZVdpdGhOYW5vc2Vjb25kc0RlbHRhKSA9PiB2b2lkKSB7XG4gIHJlYWRUaW1lKHBhcnNlciwgZGF0YUxlbmd0aCAtIDMsIHNjYWxlLCB1c2VVVEMsICh0aW1lKSA9PiB7IC8vIFRPRE86ICdpbnB1dCcgaXMgJ3RpbWUnLCBidXQgVHlwZVNjcmlwdCBjYW5ub3QgZmluZCBcInRpbWUubmFub3NlY29uZHNEZWx0YVwiO1xuICAgIHBhcnNlci5yZWFkVUludDI0TEUoKGRheXMpID0+IHtcbiAgICAgIGxldCBkYXRlO1xuICAgICAgaWYgKHVzZVVUQykge1xuICAgICAgICBkYXRlID0gbmV3IERhdGUoRGF0ZS5VVEMoMjAwMCwgMCwgZGF5cyAtIDczMDExOCwgMCwgMCwgMCwgK3RpbWUpKSBhcyBEYXRlV2l0aE5hbm9zZWNvbmRzRGVsdGE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkYXRlID0gbmV3IERhdGUoMjAwMCwgMCwgZGF5cyAtIDczMDExOCwgdGltZS5nZXRIb3VycygpLCB0aW1lLmdldE1pbnV0ZXMoKSwgdGltZS5nZXRTZWNvbmRzKCksIHRpbWUuZ2V0TWlsbGlzZWNvbmRzKCkpIGFzIERhdGVXaXRoTmFub3NlY29uZHNEZWx0YTtcbiAgICAgIH1cbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShkYXRlLCAnbmFub3NlY29uZHNEZWx0YScsIHtcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIHZhbHVlOiB0aW1lLm5hbm9zZWNvbmRzRGVsdGFcbiAgICAgIH0pO1xuICAgICAgY2FsbGJhY2soZGF0ZSk7XG4gICAgfSk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiByZWFkRGF0ZVRpbWVPZmZzZXQocGFyc2VyOiBQYXJzZXIsIGRhdGFMZW5ndGg6IG51bWJlciwgc2NhbGU6IG51bWJlciwgY2FsbGJhY2s6ICh2YWx1ZTogRGF0ZVdpdGhOYW5vc2Vjb25kc0RlbHRhKSA9PiB2b2lkKSB7XG4gIHJlYWRUaW1lKHBhcnNlciwgZGF0YUxlbmd0aCAtIDUsIHNjYWxlLCB0cnVlLCAodGltZSkgPT4ge1xuICAgIHBhcnNlci5yZWFkVUludDI0TEUoKGRheXMpID0+IHtcbiAgICAgIC8vIG9mZnNldFxuICAgICAgcGFyc2VyLnJlYWRJbnQxNkxFKCgpID0+IHtcbiAgICAgICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKERhdGUuVVRDKDIwMDAsIDAsIGRheXMgLSA3MzAxMTgsIDAsIDAsIDAsICt0aW1lKSkgYXMgRGF0ZVdpdGhOYW5vc2Vjb25kc0RlbHRhO1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZGF0ZSwgJ25hbm9zZWNvbmRzRGVsdGEnLCB7XG4gICAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgICAgdmFsdWU6IHRpbWUubmFub3NlY29uZHNEZWx0YVxuICAgICAgICB9KTtcbiAgICAgICAgY2FsbGJhY2soZGF0ZSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHZhbHVlUGFyc2U7XG5tb2R1bGUuZXhwb3J0cyA9IHZhbHVlUGFyc2U7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFDQTs7QUFDQTs7QUFFQTs7QUFDQTs7QUFDQTs7OztBQUVBLE1BQU1BLElBQUksR0FBRyxDQUFDLEtBQUssRUFBTixJQUFZLENBQXpCO0FBQ0EsTUFBTUMsR0FBRyxHQUFHLENBQUMsS0FBSyxFQUFOLElBQVksQ0FBeEI7QUFDQSxNQUFNQyxpQkFBaUIsR0FBRyxJQUFLLElBQUksQ0FBbkM7QUFDQSxNQUFNQyxh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
|
|
596
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbWV0YWRhdGFQYXJzZXIiLCJyZXF1aXJlIiwiX2RhdGFUeXBlIiwiX2ljb252TGl0ZSIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfc3ByaW50ZkpzIiwiX2d1aWRQYXJzZXIiLCJvYmoiLCJfX2VzTW9kdWxlIiwiZGVmYXVsdCIsIk5VTEwiLCJNQVgiLCJUSFJFRV9BTkRfQV9USElSRCIsIk1PTkVZX0RJVklTT1IiLCJQTFBfTlVMTCIsIkJ1ZmZlciIsImZyb20iLCJVTktOT1dOX1BMUF9MRU4iLCJERUZBVUxUX0VOQ09ESU5HIiwicmVhZFRpbnlJbnQiLCJwYXJzZXIiLCJjYWxsYmFjayIsInJlYWRVSW50OCIsInJlYWRTbWFsbEludCIsInJlYWRJbnQxNkxFIiwicmVhZEludCIsInJlYWRJbnQzMkxFIiwicmVhZEJpZ0ludCIsInJlYWRCaWdJbnQ2NExFIiwidmFsdWUiLCJ0b1N0cmluZyIsInJlYWRSZWFsIiwicmVhZEZsb2F0TEUiLCJyZWFkRmxvYXQiLCJyZWFkRG91YmxlTEUiLCJyZWFkU21hbGxNb25leSIsInJlYWRNb25leSIsImhpZ2giLCJyZWFkVUludDMyTEUiLCJsb3ciLCJyZWFkQml0IiwidmFsdWVQYXJzZSIsIm1ldGFkYXRhIiwib3B0aW9ucyIsInR5cGUiLCJuYW1lIiwiZGF0YUxlbmd0aCIsIkVycm9yIiwiY29kZXBhZ2UiLCJjb2xsYXRpb24iLCJyZWFkTWF4Q2hhcnMiLCJyZWFkVUludDE2TEUiLCJyZWFkQ2hhcnMiLCJyZWFkTWF4TkNoYXJzIiwicmVhZE5DaGFycyIsInJlYWRNYXhCaW5hcnkiLCJyZWFkQmluYXJ5IiwidGV4dFBvaW50ZXJMZW5ndGgiLCJyZWFkQnVmZmVyIiwiX3RleHRQb2ludGVyIiwiX3RpbWVzdGFtcCIsInJlYWRTbWFsbERhdGVUaW1lIiwidXNlVVRDIiwicmVhZERhdGVUaW1lIiwicmVhZFRpbWUiLCJzY2FsZSIsInJlYWREYXRlIiwicmVhZERhdGVUaW1lMiIsInJlYWREYXRlVGltZU9mZnNldCIsInJlYWROdW1lcmljIiwicHJlY2lzaW9uIiwicmVhZFVuaXF1ZUlkZW50aWZpZXIiLCJzcHJpbnRmIiwicmVhZFZhcmlhbnQiLCJkYXRhIiwibG93ZXJDYXNlR3VpZHMiLCJidWZmZXJUb0xvd2VyQ2FzZUd1aWQiLCJidWZmZXJUb1VwcGVyQ2FzZUd1aWQiLCJfcHJlY2lzaW9uIiwic2lnbiIsInJlYWRWYWx1ZSIsInJlYWRVTnVtZXJpYzY0TEUiLCJyZWFkVU51bWVyaWM5NkxFIiwicmVhZFVOdW1lcmljMTI4TEUiLCJjYWxsIiwiTWF0aCIsInBvdyIsImJhc2VUeXBlIiwiVFlQRSIsInByb3BCeXRlcyIsIl9tYXhMZW5ndGgiLCJyZWFkQ29sbGF0aW9uIiwiX2NvbGxhdGlvbiIsImljb252IiwiZGVjb2RlIiwicmVhZE1heCIsImVxdWFscyIsInJlYWRNYXhVbmtub3duTGVuZ3RoIiwiY29uc29sZSIsIndhcm4iLCJleHBlY3RlZExlbmd0aCIsInJlYWRNYXhLbm93bkxlbmd0aCIsInRvdGFsTGVuZ3RoIiwiYWxsb2MiLCJvZmZzZXQiLCJuZXh0IiwiZG9uZSIsImNodW5rTGVuZ3RoIiwiY2h1bmsiLCJjb3B5IiwiY2h1bmtzIiwibGVuZ3RoIiwicHVzaCIsImNvbmNhdCIsImRheXMiLCJtaW51dGVzIiwiRGF0ZSIsIlVUQyIsInRocmVlSHVuZHJlZHRoc09mU2Vjb25kIiwibWlsbGlzZWNvbmRzIiwicm91bmQiLCJyZWFkVUludDI0TEUiLCJyZWFkVUludDQwTEUiLCJpIiwiZGF0ZSIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZW51bWVyYWJsZSIsInRpbWUiLCJnZXRIb3VycyIsImdldE1pbnV0ZXMiLCJnZXRTZWNvbmRzIiwiZ2V0TWlsbGlzZWNvbmRzIiwibmFub3NlY29uZHNEZWx0YSIsIl9kZWZhdWx0IiwiZXhwb3J0cyIsIm1vZHVsZSJdLCJzb3VyY2VzIjpbIi4uL3NyYy92YWx1ZS1wYXJzZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFBhcnNlciwgeyBQYXJzZXJPcHRpb25zIH0gZnJvbSAnLi90b2tlbi9zdHJlYW0tcGFyc2VyJztcbmltcG9ydCB7IE1ldGFkYXRhLCByZWFkQ29sbGF0aW9uIH0gZnJvbSAnLi9tZXRhZGF0YS1wYXJzZXInO1xuaW1wb3J0IHsgVFlQRSB9IGZyb20gJy4vZGF0YS10eXBlJztcblxuaW1wb3J0IGljb252IGZyb20gJ2ljb252LWxpdGUnO1xuaW1wb3J0IHsgc3ByaW50ZiB9IGZyb20gJ3NwcmludGYtanMnO1xuaW1wb3J0IHsgYnVmZmVyVG9Mb3dlckNhc2VHdWlkLCBidWZmZXJUb1VwcGVyQ2FzZUd1aWQgfSBmcm9tICcuL2d1aWQtcGFyc2VyJztcblxuY29uc3QgTlVMTCA9ICgxIDw8IDE2KSAtIDE7XG5jb25zdCBNQVggPSAoMSA8PCAxNikgLSAxO1xuY29uc3QgVEhSRUVfQU5EX0FfVEhJUkQgPSAzICsgKDEgLyAzKTtcbmNvbnN0IE1PTkVZX0RJVklTT1IgPSAxMDAwMDtcbmNvbnN0IFBMUF9OVUxMID0gQnVmZmVyLmZyb20oWzB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkZdKTtcbmNvbnN0IFVOS05PV05fUExQX0xFTiA9IEJ1ZmZlci5mcm9tKFsweEZFLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGXSk7XG5jb25zdCBERUZBVUxUX0VOQ09ESU5HID0gJ3V0ZjgnO1xuXG5mdW5jdGlvbiByZWFkVGlueUludChwYXJzZXI6IFBhcnNlciwgY2FsbGJhY2s6ICh2YWx1ZTogdW5rbm93bikgPT4gdm9pZCkge1xuICBwYXJzZXIucmVhZFVJbnQ4KGNhbGxiYWNrKTtcbn1cblxuZnVuY3Rpb24gcmVhZFNtYWxsSW50KHBhcnNlcjogUGFyc2VyLCBjYWxsYmFjazogKHZhbHVlOiB1bmtub3duKSA9PiB2b2lkKSB7XG4gIHBhcnNlci5yZWFkSW50MTZMRShjYWxsYmFjayk7XG59XG5cbmZ1bmN0aW9uIHJlYWRJbnQocGFyc2VyOiBQYXJzZXIsIGNhbGxiYWNrOiAodmFsdWU6IHVua25vd24pID0+IHZvaWQpIHtcbiAgcGFyc2VyLnJlYWRJbnQzMkxFKGNhbGxiYWNrKTtcbn1cblxuZnVuY3Rpb24gcmVhZEJpZ0ludChwYXJzZXI6IFBhcnNlciwgY2FsbGJhY2s6ICh2YWx1ZTogdW5rbm93bikgPT4gdm9pZCkge1xuICBwYXJzZXIucmVhZEJpZ0ludDY0TEUoKHZhbHVlKSA9PiB7XG4gICAgY2FsbGJhY2sodmFsdWUudG9TdHJpbmcoKSk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiByZWFkUmVhbChwYXJzZXI6IFBhcnNlciwgY2FsbGJhY2s6ICh2YWx1ZTogdW5rbm93bikgPT4gdm9pZCkge1xuICBwYXJzZXIucmVhZEZsb2F0TEUoY2FsbGJhY2spO1xufVxuXG5mdW5jdGlvbiByZWFkRmxvYXQocGFyc2VyOiBQYXJzZXIsIGNhbGxiYWNrOiAodmFsdWU6IHVua25vd24pID0+IHZvaWQpIHtcbiAgcGFyc2VyLnJlYWREb3VibGVMRShjYWxsYmFjayk7XG59XG5cbmZ1bmN0aW9uIHJlYWRTbWFsbE1vbmV5KHBhcnNlcjogUGFyc2VyLCBjYWxsYmFjazogKHZhbHVlOiB1bmtub3duKSA9PiB2b2lkKSB7XG4gIHBhcnNlci5yZWFkSW50MzJMRSgodmFsdWUpID0+IHtcbiAgICBjYWxsYmFjayh2YWx1ZSAvIE1PTkVZX0RJVklTT1IpO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gcmVhZE1vbmV5KHBhcnNlcjogUGFyc2VyLCBjYWxsYmFjazogKHZhbHVlOiB1bmtub3duKSA9PiB2b2lkKSB7XG4gIHBhcnNlci5yZWFkSW50MzJMRSgoaGlnaCkgPT4ge1xuICAgIHBhcnNlci5yZWFkVUludDMyTEUoKGxvdykgPT4ge1xuICAgICAgY2FsbGJhY2soKGxvdyArICgweDEwMDAwMDAwMCAqIGhpZ2gpKSAvIE1PTkVZX0RJVklTT1IpO1xuICAgIH0pO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gcmVhZEJpdChwYXJzZXI6IFBhcnNlciwgY2FsbGJhY2s6ICh2YWx1ZTogdW5rbm93bikgPT4gdm9pZCkge1xuICBwYXJzZXIucmVhZFVJbnQ4KCh2YWx1ZSkgPT4ge1xuICAgIGNhbGxiYWNrKCEhdmFsdWUpO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gdmFsdWVQYXJzZShwYXJzZXI6IFBhcnNlciwgbWV0YWRhdGE6IE1ldGFkYXRhLCBvcHRpb25zOiBQYXJzZXJPcHRpb25zLCBjYWxsYmFjazogKHZhbHVlOiB1bmtub3duKSA9PiB2b2lkKTogdm9pZCB7XG4gIGNvbnN0IHR5cGUgPSBtZXRhZGF0YS50eXBlO1xuXG4gIHN3aXRjaCAodHlwZS5uYW1lKSB7XG4gICAgY2FzZSAnTnVsbCc6XG4gICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCk7XG5cbiAgICBjYXNlICdUaW55SW50JzpcbiAgICAgIHJldHVybiByZWFkVGlueUludChwYXJzZXIsIGNhbGxiYWNrKTtcblxuICAgIGNhc2UgJ1NtYWxsSW50JzpcbiAgICAgIHJldHVybiByZWFkU21hbGxJbnQocGFyc2VyLCBjYWxsYmFjayk7XG5cbiAgICBjYXNlICdJbnQnOlxuICAgICAgcmV0dXJuIHJlYWRJbnQocGFyc2VyLCBjYWxsYmFjayk7XG5cbiAgICBjYXNlICdCaWdJbnQnOlxuICAgICAgcmV0dXJuIHJlYWRCaWdJbnQocGFyc2VyLCBjYWxsYmFjayk7XG5cbiAgICBjYXNlICdJbnROJzpcbiAgICAgIHJldHVybiBwYXJzZXIucmVhZFVJbnQ4KChkYXRhTGVuZ3RoKSA9PiB7XG4gICAgICAgIHN3aXRjaCAoZGF0YUxlbmd0aCkge1xuICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhudWxsKTtcblxuICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgIHJldHVybiByZWFkVGlueUludChwYXJzZXIsIGNhbGxiYWNrKTtcbiAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICByZXR1cm4gcmVhZFNtYWxsSW50KHBhcnNlciwgY2FsbGJhY2spO1xuICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgIHJldHVybiByZWFkSW50KHBhcnNlciwgY2FsbGJhY2spO1xuICAgICAgICAgIGNhc2UgODpcbiAgICAgICAgICAgIHJldHVybiByZWFkQmlnSW50KHBhcnNlciwgY2FsbGJhY2spO1xuXG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVW5zdXBwb3J0ZWQgZGF0YUxlbmd0aCAnICsgZGF0YUxlbmd0aCArICcgZm9yIEludE4nKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICBjYXNlICdSZWFsJzpcbiAgICAgIHJldHVybiByZWFkUmVhbChwYXJzZXIsIGNhbGxiYWNrKTtcblxuICAgIGNhc2UgJ0Zsb2F0JzpcbiAgICAgIHJldHVybiByZWFkRmxvYXQocGFyc2VyLCBjYWxsYmFjayk7XG5cbiAgICBjYXNlICdGbG9hdE4nOlxuICAgICAgcmV0dXJuIHBhcnNlci5yZWFkVUludDgoKGRhdGFMZW5ndGgpID0+IHtcbiAgICAgICAgc3dpdGNoIChkYXRhTGVuZ3RoKSB7XG4gICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwpO1xuXG4gICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgcmV0dXJuIHJlYWRSZWFsKHBhcnNlciwgY2FsbGJhY2spO1xuICAgICAgICAgIGNhc2UgODpcbiAgICAgICAgICAgIHJldHVybiByZWFkRmxvYXQocGFyc2VyLCBjYWxsYmFjayk7XG5cbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbnN1cHBvcnRlZCBkYXRhTGVuZ3RoICcgKyBkYXRhTGVuZ3RoICsgJyBmb3IgRmxvYXROJyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgY2FzZSAnU21hbGxNb25leSc6XG4gICAgICByZXR1cm4gcmVhZFNtYWxsTW9uZXkocGFyc2VyLCBjYWxsYmFjayk7XG5cbiAgICBjYXNlICdNb25leSc6XG4gICAgICByZXR1cm4gcmVhZE1vbmV5KHBhcnNlciwgY2FsbGJhY2spO1xuXG4gICAgY2FzZSAnTW9uZXlOJzpcbiAgICAgIHJldHVybiBwYXJzZXIucmVhZFVJbnQ4KChkYXRhTGVuZ3RoKSA9PiB7XG4gICAgICAgIHN3aXRjaCAoZGF0YUxlbmd0aCkge1xuICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhudWxsKTtcblxuICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgIHJldHVybiByZWFkU21hbGxNb25leShwYXJzZXIsIGNhbGxiYWNrKTtcbiAgICAgICAgICBjYXNlIDg6XG4gICAgICAgICAgICByZXR1cm4gcmVhZE1vbmV5KHBhcnNlciwgY2FsbGJhY2spO1xuXG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVW5zdXBwb3J0ZWQgZGF0YUxlbmd0aCAnICsgZGF0YUxlbmd0aCArICcgZm9yIE1vbmV5TicpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgIGNhc2UgJ0JpdCc6XG4gICAgICByZXR1cm4gcmVhZEJpdChwYXJzZXIsIGNhbGxiYWNrKTtcblxuICAgIGNhc2UgJ0JpdE4nOlxuICAgICAgcmV0dXJuIHBhcnNlci5yZWFkVUludDgoKGRhdGFMZW5ndGgpID0+IHtcbiAgICAgICAgc3dpdGNoIChkYXRhTGVuZ3RoKSB7XG4gICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwpO1xuXG4gICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgcmV0dXJuIHJlYWRCaXQocGFyc2VyLCBjYWxsYmFjayk7XG5cbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbnN1cHBvcnRlZCBkYXRhTGVuZ3RoICcgKyBkYXRhTGVuZ3RoICsgJyBmb3IgQml0TicpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgIGNhc2UgJ1ZhckNoYXInOlxuICAgIGNhc2UgJ0NoYXInOlxuICAgICAgY29uc3QgY29kZXBhZ2UgPSBtZXRhZGF0YS5jb2xsYXRpb24hLmNvZGVwYWdlITtcbiAgICAgIGlmIChtZXRhZGF0YS5kYXRhTGVuZ3RoID09PSBNQVgpIHtcbiAgICAgICAgcmV0dXJuIHJlYWRNYXhDaGFycyhwYXJzZXIsIGNvZGVwYWdlLCBjYWxsYmFjayk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gcGFyc2VyLnJlYWRVSW50MTZMRSgoZGF0YUxlbmd0aCkgPT4ge1xuICAgICAgICAgIGlmIChkYXRhTGVuZ3RoID09PSBOVUxMKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmVhZENoYXJzKHBhcnNlciwgZGF0YUxlbmd0aCEsIGNvZGVwYWdlLCBjYWxsYmFjayk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgY2FzZSAnTlZhckNoYXInOlxuICAgIGNhc2UgJ05DaGFyJzpcbiAgICAgIGlmIChtZXRhZGF0YS5kYXRhTGVuZ3RoID09PSBNQVgpIHtcbiAgICAgICAgcmV0dXJuIHJlYWRNYXhOQ2hhcnMocGFyc2VyLCBjYWxsYmFjayk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gcGFyc2VyLnJlYWRVSW50MTZMRSgoZGF0YUxlbmd0aCkgPT4ge1xuICAgICAgICAgIGlmIChkYXRhTGVuZ3RoID09PSBOVUxMKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmVhZE5DaGFycyhwYXJzZXIsIGRhdGFMZW5ndGghLCBjYWxsYmFjayk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgY2FzZSAnVmFyQmluYXJ5JzpcbiAgICBjYXNlICdCaW5hcnknOlxuICAgICAgaWYgKG1ldGFkYXRhLmRhdGFMZW5ndGggPT09IE1BWCkge1xuICAgICAgICByZXR1cm4gcmVhZE1heEJpbmFyeShwYXJzZXIsIGNhbGxiYWNrKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBwYXJzZXIucmVhZFVJbnQxNkxFKChkYXRhTGVuZ3RoKSA9PiB7XG4gICAgICAgICAgaWYgKGRhdGFMZW5ndGggPT09IE5VTEwpIHtcbiAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZWFkQmluYXJ5KHBhcnNlciwgZGF0YUxlbmd0aCEsIGNhbGxiYWNrKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICBjYXNlICdUZXh0JzpcbiAgICAgIHJldHVybiBwYXJzZXIucmVhZFVJbnQ4KCh0ZXh0UG9pbnRlckxlbmd0aCkgPT4ge1xuICAgICAgICBpZiAodGV4dFBvaW50ZXJMZW5ndGggPT09IDApIHtcbiAgICAgICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCk7XG4gICAgICAgIH1cblxuICAgICAgICBwYXJzZXIucmVhZEJ1ZmZlcih0ZXh0UG9pbnRlckxlbmd0aCwgKF90ZXh0UG9pbnRlcikgPT4ge1xuICAgICAgICAgIHBhcnNlci5yZWFkQnVmZmVyKDgsIChfdGltZXN0YW1wKSA9PiB7XG4gICAgICAgICAgICBwYXJzZXIucmVhZFVJbnQzMkxFKChkYXRhTGVuZ3RoKSA9PiB7XG4gICAgICAgICAgICAgIHJlYWRDaGFycyhwYXJzZXIsIGRhdGFMZW5ndGghLCBtZXRhZGF0YS5jb2xsYXRpb24hLmNvZGVwYWdlISwgY2FsbGJhY2spO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICBjYXNlICdOVGV4dCc6XG4gICAgICByZXR1cm4gcGFyc2VyLnJlYWRVSW50OCgodGV4dFBvaW50ZXJMZW5ndGgpID0+IHtcbiAgICAgICAgaWYgKHRleHRQb2ludGVyTGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICB9XG5cbiAgICAgICAgcGFyc2VyLnJlYWRCdWZmZXIodGV4dFBvaW50ZXJMZW5ndGgsIChfdGV4dFBvaW50ZXIpID0+IHtcbiAgICAgICAgICBwYXJzZXIucmVhZEJ1ZmZlcig4LCAoX3RpbWVzdGFtcCkgPT4ge1xuICAgICAgICAgICAgcGFyc2VyLnJlYWRVSW50MzJMRSgoZGF0YUxlbmd0aCkgPT4ge1xuICAgICAgICAgICAgICByZWFkTkNoYXJzKHBhcnNlciwgZGF0YUxlbmd0aCEsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgY2FzZSAnSW1hZ2UnOlxuICAgICAgcmV0dXJuIHBhcnNlci5yZWFkVUludDgoKHRleHRQb2ludGVyTGVuZ3RoKSA9PiB7XG4gICAgICAgIGlmICh0ZXh0UG9pbnRlckxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHJldHVybiBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHBhcnNlci5yZWFkQnVmZmVyKHRleHRQb2ludGVyTGVuZ3RoLCAoX3RleHRQb2ludGVyKSA9PiB7XG4gICAgICAgICAgcGFyc2VyLnJlYWRCdWZmZXIoOCwgKF90aW1lc3RhbXApID0+IHtcbiAgICAgICAgICAgIHBhcnNlci5yZWFkVUludDMyTEUoKGRhdGFMZW5ndGgpID0+IHtcbiAgICAgICAgICAgICAgcmVhZEJpbmFyeShwYXJzZXIsIGRhdGFMZW5ndGghLCBjYWxsYmFjayk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgIGNhc2UgJ1htbCc6XG4gICAgICByZXR1cm4gcmVhZE1heE5DaGFycyhwYXJzZXIsIGNhbGxiYWNrKTtcblxuICAgIGNhc2UgJ1NtYWxsRGF0ZVRpbWUnOlxuICAgICAgcmV0dXJuIHJlYWRTbWFsbERhdGVUaW1lKHBhcnNlciwgb3B0aW9ucy51c2VVVEMsIGNhbGxiYWNrKTtcblxuICAgIGNhc2UgJ0RhdGVUaW1lJzpcbiAgICAgIHJldHVybiByZWFkRGF0ZVRpbWUocGFyc2VyLCBvcHRpb25zLnVzZVVUQywgY2FsbGJhY2spO1xuXG4gICAgY2FzZSAnRGF0ZVRpbWVOJzpcbiAgICAgIHJldHVybiBwYXJzZXIucmVhZFVJbnQ4KChkYXRhTGVuZ3RoKSA9PiB7XG4gICAgICAgIHN3aXRjaCAoZGF0YUxlbmd0aCkge1xuICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhudWxsKTtcblxuICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgIHJldHVybiByZWFkU21hbGxEYXRlVGltZShwYXJzZXIsIG9wdGlvbnMudXNlVVRDLCBjYWxsYmFjayk7XG4gICAgICAgICAgY2FzZSA4OlxuICAgICAgICAgICAgcmV0dXJuIHJlYWREYXRlVGltZShwYXJzZXIsIG9wdGlvbnMudXNlVVRDLCBjYWxsYmFjayk7XG5cbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbnN1cHBvcnRlZCBkYXRhTGVuZ3RoICcgKyBkYXRhTGVuZ3RoICsgJyBmb3IgRGF0ZVRpbWVOJyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgY2FzZSAnVGltZSc6XG4gICAgICByZXR1cm4gcGFyc2VyLnJlYWRVSW50OCgoZGF0YUxlbmd0aCkgPT4ge1xuICAgICAgICBpZiAoZGF0YUxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHJldHVybiBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gcmVhZFRpbWUocGFyc2VyLCBkYXRhTGVuZ3RoISwgbWV0YWRhdGEuc2NhbGUhLCBvcHRpb25zLnVzZVVUQywgY2FsbGJhY2spO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgIGNhc2UgJ0RhdGUnOlxuICAgICAgcmV0dXJuIHBhcnNlci5yZWFkVUludDgoKGRhdGFMZW5ndGgpID0+IHtcbiAgICAgICAgaWYgKGRhdGFMZW5ndGggPT09IDApIHtcbiAgICAgICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHJlYWREYXRlKHBhcnNlciwgb3B0aW9ucy51c2VVVEMsIGNhbGxiYWNrKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICBjYXNlICdEYXRlVGltZTInOlxuICAgICAgcmV0dXJuIHBhcnNlci5yZWFkVUludDgoKGRhdGFMZW5ndGgpID0+IHtcbiAgICAgICAgaWYgKGRhdGFMZW5ndGggPT09IDApIHtcbiAgICAgICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHJlYWREYXRlVGltZTIocGFyc2VyLCBkYXRhTGVuZ3RoISwgbWV0YWRhdGEuc2NhbGUhLCBvcHRpb25zLnVzZVVUQywgY2FsbGJhY2spO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgIGNhc2UgJ0RhdGVUaW1lT2Zmc2V0JzpcbiAgICAgIHJldHVybiBwYXJzZXIucmVhZFVJbnQ4KChkYXRhTGVuZ3RoKSA9PiB7XG4gICAgICAgIGlmIChkYXRhTGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiByZWFkRGF0ZVRpbWVPZmZzZXQocGFyc2VyLCBkYXRhTGVuZ3RoISwgbWV0YWRhdGEuc2NhbGUhLCBjYWxsYmFjayk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgY2FzZSAnTnVtZXJpY04nOlxuICAgIGNhc2UgJ0RlY2ltYWxOJzpcbiAgICAgIHJldHVybiBwYXJzZXIucmVhZFVJbnQ4KChkYXRhTGVuZ3RoKSA9PiB7XG4gICAgICAgIGlmIChkYXRhTGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiByZWFkTnVtZXJpYyhwYXJzZXIsIGRhdGFMZW5ndGghLCBtZXRhZGF0YS5wcmVjaXNpb24hLCBtZXRhZGF0YS5zY2FsZSEsIGNhbGxiYWNrKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICBjYXNlICdVbmlxdWVJZGVudGlmaWVyJzpcbiAgICAgIHJldHVybiBwYXJzZXIucmVhZFVJbnQ4KChkYXRhTGVuZ3RoKSA9PiB7XG4gICAgICAgIHN3aXRjaCAoZGF0YUxlbmd0aCkge1xuICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhudWxsKTtcblxuICAgICAgICAgIGNhc2UgMHgxMDpcbiAgICAgICAgICAgIHJldHVybiByZWFkVW5pcXVlSWRlbnRpZmllcihwYXJzZXIsIG9wdGlvbnMsIGNhbGxiYWNrKTtcblxuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3Ioc3ByaW50ZignVW5zdXBwb3J0ZWQgZ3VpZCBzaXplICVkJywgZGF0YUxlbmd0aCEgLSAxKSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgY2FzZSAnVURUJzpcbiAgICAgIHJldHVybiByZWFkTWF4QmluYXJ5KHBhcnNlciwgY2FsbGJhY2spO1xuXG4gICAgY2FzZSAnVmFyaWFudCc6XG4gICAgICByZXR1cm4gcGFyc2VyLnJlYWRVSW50MzJMRSgoZGF0YUxlbmd0aCkgPT4ge1xuICAgICAgICBpZiAoZGF0YUxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHJldHVybiBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlYWRWYXJpYW50KHBhcnNlciwgb3B0aW9ucywgZGF0YUxlbmd0aCEsIGNhbGxiYWNrKTtcbiAgICAgIH0pO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyBFcnJvcihzcHJpbnRmKCdVbnJlY29nbmlzZWQgdHlwZSAlcycsIHR5cGUubmFtZSkpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlYWRVbmlxdWVJZGVudGlmaWVyKHBhcnNlcjogUGFyc2VyLCBvcHRpb25zOiBQYXJzZXJPcHRpb25zLCBjYWxsYmFjazogKHZhbHVlOiB1bmtub3duKSA9PiB2b2lkKSB7XG4gIHBhcnNlci5yZWFkQnVmZmVyKDB4MTAsIChkYXRhKSA9PiB7XG4gICAgY2FsbGJhY2sob3B0aW9ucy5sb3dlckNhc2VHdWlkcyA/IGJ1ZmZlclRvTG93ZXJDYXNlR3VpZChkYXRhKSA6IGJ1ZmZlclRvVXBwZXJDYXNlR3VpZChkYXRhKSk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiByZWFkTnVtZXJpYyhwYXJzZXI6IFBhcnNlciwgZGF0YUxlbmd0aDogbnVtYmVyLCBfcHJlY2lzaW9uOiBudW1iZXIsIHNjYWxlOiBudW1iZXIsIGNhbGxiYWNrOiAodmFsdWU6IHVua25vd24pID0+IHZvaWQpIHtcbiAgcGFyc2VyLnJlYWRVSW50OCgoc2lnbikgPT4ge1xuICAgIHNpZ24gPSBzaWduID09PSAxID8gMSA6IC0xO1xuXG4gICAgbGV0IHJlYWRWYWx1ZTtcbiAgICBpZiAoZGF0YUxlbmd0aCA9PT0gNSkge1xuICAgICAgcmVhZFZhbHVlID0gcGFyc2VyLnJlYWRVSW50MzJMRTtcbiAgICB9IGVsc2UgaWYgKGRhdGFMZW5ndGggPT09IDkpIHtcbiAgICAgIHJlYWRWYWx1ZSA9IHBhcnNlci5yZWFkVU51bWVyaWM2NExFO1xuICAgIH0gZWxzZSBpZiAoZGF0YUxlbmd0aCA9PT0gMTMpIHtcbiAgICAgIHJlYWRWYWx1ZSA9IHBhcnNlci5yZWFkVU51bWVyaWM5NkxFO1xuICAgIH0gZWxzZSBpZiAoZGF0YUxlbmd0aCA9PT0gMTcpIHtcbiAgICAgIHJlYWRWYWx1ZSA9IHBhcnNlci5yZWFkVU51bWVyaWMxMjhMRTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKHNwcmludGYoJ1Vuc3VwcG9ydGVkIG51bWVyaWMgZGF0YUxlbmd0aCAlZCcsIGRhdGFMZW5ndGgpKTtcbiAgICB9XG5cbiAgICByZWFkVmFsdWUuY2FsbChwYXJzZXIsICh2YWx1ZSkgPT4ge1xuICAgICAgY2FsbGJhY2soKHZhbHVlICogc2lnbikgLyBNYXRoLnBvdygxMCwgc2NhbGUpKTtcbiAgICB9KTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHJlYWRWYXJpYW50KHBhcnNlcjogUGFyc2VyLCBvcHRpb25zOiBQYXJzZXJPcHRpb25zLCBkYXRhTGVuZ3RoOiBudW1iZXIsIGNhbGxiYWNrOiAodmFsdWU6IHVua25vd24pID0+IHZvaWQpIHtcbiAgcmV0dXJuIHBhcnNlci5yZWFkVUludDgoKGJhc2VUeXBlKSA9PiB7XG4gICAgY29uc3QgdHlwZSA9IFRZUEVbYmFzZVR5cGVdO1xuXG4gICAgcmV0dXJuIHBhcnNlci5yZWFkVUludDgoKHByb3BCeXRlcykgPT4ge1xuICAgICAgZGF0YUxlbmd0aCA9IGRhdGFMZW5ndGggLSBwcm9wQnl0ZXMgLSAyO1xuXG4gICAgICBzd2l0Y2ggKHR5cGUubmFtZSkge1xuICAgICAgICBjYXNlICdVbmlxdWVJZGVudGlmaWVyJzpcbiAgICAgICAgICByZXR1cm4gcmVhZFVuaXF1ZUlkZW50aWZpZXIocGFyc2VyLCBvcHRpb25zLCBjYWxsYmFjayk7XG5cbiAgICAgICAgY2FzZSAnQml0JzpcbiAgICAgICAgICByZXR1cm4gcmVhZEJpdChwYXJzZXIsIGNhbGxiYWNrKTtcblxuICAgICAgICBjYXNlICdUaW55SW50JzpcbiAgICAgICAgICByZXR1cm4gcmVhZFRpbnlJbnQocGFyc2VyLCBjYWxsYmFjayk7XG5cbiAgICAgICAgY2FzZSAnU21hbGxJbnQnOlxuICAgICAgICAgIHJldHVybiByZWFkU21hbGxJbnQocGFyc2VyLCBjYWxsYmFjayk7XG5cbiAgICAgICAgY2FzZSAnSW50JzpcbiAgICAgICAgICByZXR1cm4gcmVhZEludChwYXJzZXIsIGNhbGxiYWNrKTtcblxuICAgICAgICBjYXNlICdCaWdJbnQnOlxuICAgICAgICAgIHJldHVybiByZWFkQmlnSW50KHBhcnNlciwgY2FsbGJhY2spO1xuXG4gICAgICAgIGNhc2UgJ1NtYWxsRGF0ZVRpbWUnOlxuICAgICAgICAgIHJldHVybiByZWFkU21hbGxEYXRlVGltZShwYXJzZXIsIG9wdGlvbnMudXNlVVRDLCBjYWxsYmFjayk7XG5cbiAgICAgICAgY2FzZSAnRGF0ZVRpbWUnOlxuICAgICAgICAgIHJldHVybiByZWFkRGF0ZVRpbWUocGFyc2VyLCBvcHRpb25zLnVzZVVUQywgY2FsbGJhY2spO1xuXG4gICAgICAgIGNhc2UgJ1JlYWwnOlxuICAgICAgICAgIHJldHVybiByZWFkUmVhbChwYXJzZXIsIGNhbGxiYWNrKTtcblxuICAgICAgICBjYXNlICdGbG9hdCc6XG4gICAgICAgICAgcmV0dXJuIHJlYWRGbG9hdChwYXJzZXIsIGNhbGxiYWNrKTtcblxuICAgICAgICBjYXNlICdTbWFsbE1vbmV5JzpcbiAgICAgICAgICByZXR1cm4gcmVhZFNtYWxsTW9uZXkocGFyc2VyLCBjYWxsYmFjayk7XG5cbiAgICAgICAgY2FzZSAnTW9uZXknOlxuICAgICAgICAgIHJldHVybiByZWFkTW9uZXkocGFyc2VyLCBjYWxsYmFjayk7XG5cbiAgICAgICAgY2FzZSAnRGF0ZSc6XG4gICAgICAgICAgcmV0dXJuIHJlYWREYXRlKHBhcnNlciwgb3B0aW9ucy51c2VVVEMsIGNhbGxiYWNrKTtcblxuICAgICAgICBjYXNlICdUaW1lJzpcbiAgICAgICAgICByZXR1cm4gcGFyc2VyLnJlYWRVSW50OCgoc2NhbGUpID0+IHtcbiAgICAgICAgICAgIHJldHVybiByZWFkVGltZShwYXJzZXIsIGRhdGFMZW5ndGgsIHNjYWxlLCBvcHRpb25zLnVzZVVUQywgY2FsbGJhY2spO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgIGNhc2UgJ0RhdGVUaW1lMic6XG4gICAgICAgICAgcmV0dXJuIHBhcnNlci5yZWFkVUludDgoKHNjYWxlKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gcmVhZERhdGVUaW1lMihwYXJzZXIsIGRhdGFMZW5ndGgsIHNjYWxlLCBvcHRpb25zLnVzZVVUQywgY2FsbGJhY2spO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgIGNhc2UgJ0RhdGVUaW1lT2Zmc2V0JzpcbiAgICAgICAgICByZXR1cm4gcGFyc2VyLnJlYWRVSW50OCgoc2NhbGUpID0+IHtcbiAgICAgICAgICAgIHJldHVybiByZWFkRGF0ZVRpbWVPZmZzZXQocGFyc2VyLCBkYXRhTGVuZ3RoLCBzY2FsZSwgY2FsbGJhY2spO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgIGNhc2UgJ1ZhckJpbmFyeSc6XG4gICAgICAgIGNhc2UgJ0JpbmFyeSc6XG4gICAgICAgICAgcmV0dXJuIHBhcnNlci5yZWFkVUludDE2TEUoKF9tYXhMZW5ndGgpID0+IHtcbiAgICAgICAgICAgIHJlYWRCaW5hcnkocGFyc2VyLCBkYXRhTGVuZ3RoLCBjYWxsYmFjayk7XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgY2FzZSAnTnVtZXJpY04nOlxuICAgICAgICBjYXNlICdEZWNpbWFsTic6XG4gICAgICAgICAgcmV0dXJuIHBhcnNlci5yZWFkVUludDgoKHByZWNpc2lvbikgPT4ge1xuICAgICAgICAgICAgcGFyc2VyLnJlYWRVSW50OCgoc2NhbGUpID0+IHtcbiAgICAgICAgICAgICAgcmVhZE51bWVyaWMocGFyc2VyLCBkYXRhTGVuZ3RoLCBwcmVjaXNpb24sIHNjYWxlLCBjYWxsYmFjayk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KTtcblxuICAgICAgICBjYXNlICdWYXJDaGFyJzpcbiAgICAgICAgY2FzZSAnQ2hhcic6XG4gICAgICAgICAgcmV0dXJuIHBhcnNlci5yZWFkVUludDE2TEUoKF9tYXhMZW5ndGgpID0+IHtcbiAgICAgICAgICAgIHJlYWRDb2xsYXRpb24ocGFyc2VyLCAoY29sbGF0aW9uKSA9PiB7XG4gICAgICAgICAgICAgIHJlYWRDaGFycyhwYXJzZXIsIGRhdGFMZW5ndGgsIGNvbGxhdGlvbi5jb2RlcGFnZSEsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgIGNhc2UgJ05WYXJDaGFyJzpcbiAgICAgICAgY2FzZSAnTkNoYXInOlxuICAgICAgICAgIHJldHVybiBwYXJzZXIucmVhZFVJbnQxNkxFKChfbWF4TGVuZ3RoKSA9PiB7XG4gICAgICAgICAgICByZWFkQ29sbGF0aW9uKHBhcnNlciwgKF9jb2xsYXRpb24pID0+IHtcbiAgICAgICAgICAgICAgcmVhZE5DaGFycyhwYXJzZXIsIGRhdGFMZW5ndGgsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHR5cGUhJyk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiByZWFkQmluYXJ5KHBhcnNlcjogUGFyc2VyLCBkYXRhTGVuZ3RoOiBudW1iZXIsIGNhbGxiYWNrOiAodmFsdWU6IHVua25vd24pID0+IHZvaWQpIHtcbiAgcmV0dXJuIHBhcnNlci5yZWFkQnVmZmVyKGRhdGFMZW5ndGgsIGNhbGxiYWNrKTtcbn1cblxuZnVuY3Rpb24gcmVhZENoYXJzKHBhcnNlcjogUGFyc2VyLCBkYXRhTGVuZ3RoOiBudW1iZXIsIGNvZGVwYWdlOiBzdHJpbmcsIGNhbGxiYWNrOiAodmFsdWU6IHVua25vd24pID0+IHZvaWQpIHtcbiAgaWYgKGNvZGVwYWdlID09IG51bGwpIHtcbiAgICBjb2RlcGFnZSA9IERFRkFVTFRfRU5DT0RJTkc7XG4gIH1cblxuICByZXR1cm4gcGFyc2VyLnJlYWRCdWZmZXIoZGF0YUxlbmd0aCwgKGRhdGEpID0+IHtcbiAgICBjYWxsYmFjayhpY29udi5kZWNvZGUoZGF0YSwgY29kZXBhZ2UpKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHJlYWROQ2hhcnMocGFyc2VyOiBQYXJzZXIsIGRhdGFMZW5ndGg6IG51bWJlciwgY2FsbGJhY2s6ICh2YWx1ZTogdW5rbm93bikgPT4gdm9pZCkge1xuICBwYXJzZXIucmVhZEJ1ZmZlcihkYXRhTGVuZ3RoLCAoZGF0YSkgPT4ge1xuICAgIGNhbGxiYWNrKGRhdGEudG9TdHJpbmcoJ3VjczInKSk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiByZWFkTWF4QmluYXJ5KHBhcnNlcjogUGFyc2VyLCBjYWxsYmFjazogKHZhbHVlOiB1bmtub3duKSA9PiB2b2lkKSB7XG4gIHJldHVybiByZWFkTWF4KHBhcnNlciwgY2FsbGJhY2spO1xufVxuXG5mdW5jdGlvbiByZWFkTWF4Q2hhcnMocGFyc2VyOiBQYXJzZXIsIGNvZGVwYWdlOiBzdHJpbmcsIGNhbGxiYWNrOiAodmFsdWU6IHVua25vd24pID0+IHZvaWQpIHtcbiAgaWYgKGNvZGVwYWdlID09IG51bGwpIHtcbiAgICBjb2RlcGFnZSA9IERFRkFVTFRfRU5DT0RJTkc7XG4gIH1cblxuICByZWFkTWF4KHBhcnNlciwgKGRhdGEpID0+IHtcbiAgICBpZiAoZGF0YSkge1xuICAgICAgY2FsbGJhY2soaWNvbnYuZGVjb2RlKGRhdGEsIGNvZGVwYWdlKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNhbGxiYWNrKG51bGwpO1xuICAgIH1cbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHJlYWRNYXhOQ2hhcnMocGFyc2VyOiBQYXJzZXIsIGNhbGxiYWNrOiAodmFsdWU6IHN0cmluZyB8IG51bGwpID0+IHZvaWQpIHtcbiAgcmVhZE1heChwYXJzZXIsIChkYXRhKSA9PiB7XG4gICAgaWYgKGRhdGEpIHtcbiAgICAgIGNhbGxiYWNrKGRhdGEudG9TdHJpbmcoJ3VjczInKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNhbGxiYWNrKG51bGwpO1xuICAgIH1cbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHJlYWRNYXgocGFyc2VyOiBQYXJzZXIsIGNhbGxiYWNrOiAodmFsdWU6IG51bGwgfCBCdWZmZXIpID0+IHZvaWQpIHtcbiAgcGFyc2VyLnJlYWRCdWZmZXIoOCwgKHR5cGUpID0+IHtcbiAgICBpZiAodHlwZS5lcXVhbHMoUExQX05VTEwpKSB7XG4gICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCk7XG4gICAgfSBlbHNlIGlmICh0eXBlLmVxdWFscyhVTktOT1dOX1BMUF9MRU4pKSB7XG4gICAgICByZXR1cm4gcmVhZE1heFVua25vd25MZW5ndGgocGFyc2VyLCBjYWxsYmFjayk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGxvdyA9IHR5cGUucmVhZFVJbnQzMkxFKDApO1xuICAgICAgY29uc3QgaGlnaCA9IHR5cGUucmVhZFVJbnQzMkxFKDQpO1xuXG4gICAgICBpZiAoaGlnaCA+PSAoMiA8PCAoNTMgLSAzMikpKSB7XG4gICAgICAgIGNvbnNvbGUud2FybignUmVhZCBVSW50NjRMRSA+IDUzIGJpdHMgOiBoaWdoPScgKyBoaWdoICsgJywgbG93PScgKyBsb3cpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBleHBlY3RlZExlbmd0aCA9IGxvdyArICgweDEwMDAwMDAwMCAqIGhpZ2gpO1xuICAgICAgcmV0dXJuIHJlYWRNYXhLbm93bkxlbmd0aChwYXJzZXIsIGV4cGVjdGVkTGVuZ3RoLCBjYWxsYmFjayk7XG4gICAgfVxuICB9KTtcbn1cblxuZnVuY3Rpb24gcmVhZE1heEtub3duTGVuZ3RoKHBhcnNlcjogUGFyc2VyLCB0b3RhbExlbmd0aDogbnVtYmVyLCBjYWxsYmFjazogKHZhbHVlOiBudWxsIHwgQnVmZmVyKSA9PiB2b2lkKSB7XG4gIGNvbnN0IGRhdGEgPSBCdWZmZXIuYWxsb2ModG90YWxMZW5ndGgsIDApO1xuXG4gIGxldCBvZmZzZXQgPSAwO1xuICBmdW5jdGlvbiBuZXh0KGRvbmU6IGFueSkge1xuICAgIHBhcnNlci5yZWFkVUludDMyTEUoKGNodW5rTGVuZ3RoKSA9PiB7XG4gICAgICBpZiAoIWNodW5rTGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBkb25lKCk7XG4gICAgICB9XG5cbiAgICAgIHBhcnNlci5yZWFkQnVmZmVyKGNodW5rTGVuZ3RoLCAoY2h1bmspID0+IHtcbiAgICAgICAgY2h1bmsuY29weShkYXRhLCBvZmZzZXQpO1xuICAgICAgICBvZmZzZXQgKz0gY2h1bmtMZW5ndGg7XG5cbiAgICAgICAgbmV4dChkb25lKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgbmV4dCgoKSA9PiB7XG4gICAgaWYgKG9mZnNldCAhPT0gdG90YWxMZW5ndGgpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignUGFydGlhbGx5IExlbmd0aC1wcmVmaXhlZCBCeXRlcyB1bm1hdGNoZWQgbGVuZ3RocyA6IGV4cGVjdGVkICcgKyB0b3RhbExlbmd0aCArICcsIGJ1dCBnb3QgJyArIG9mZnNldCArICcgYnl0ZXMnKTtcbiAgICB9XG5cbiAgICBjYWxsYmFjayhkYXRhKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHJlYWRNYXhVbmtub3duTGVuZ3RoKHBhcnNlcjogUGFyc2VyLCBjYWxsYmFjazogKHZhbHVlOiBudWxsIHwgQnVmZmVyKSA9PiB2b2lkKSB7XG4gIGNvbnN0IGNodW5rczogQnVmZmVyW10gPSBbXTtcblxuICBsZXQgbGVuZ3RoID0gMDtcbiAgZnVuY3Rpb24gbmV4dChkb25lOiBhbnkpIHtcbiAgICBwYXJzZXIucmVhZFVJbnQzMkxFKChjaHVua0xlbmd0aCkgPT4ge1xuICAgICAgaWYgKCFjaHVua0xlbmd0aCkge1xuICAgICAgICByZXR1cm4gZG9uZSgpO1xuICAgICAgfVxuXG4gICAgICBwYXJzZXIucmVhZEJ1ZmZlcihjaHVua0xlbmd0aCwgKGNodW5rKSA9PiB7XG4gICAgICAgIGNodW5rcy5wdXNoKGNodW5rKTtcbiAgICAgICAgbGVuZ3RoICs9IGNodW5rTGVuZ3RoO1xuXG4gICAgICAgIG5leHQoZG9uZSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIG5leHQoKCkgPT4ge1xuICAgIGNhbGxiYWNrKEJ1ZmZlci5jb25jYXQoY2h1bmtzLCBsZW5ndGgpKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHJlYWRTbWFsbERhdGVUaW1lKHBhcnNlcjogUGFyc2VyLCB1c2VVVEM6IGJvb2xlYW4sIGNhbGxiYWNrOiAodmFsdWU6IERhdGUpID0+IHZvaWQpIHtcbiAgcGFyc2VyLnJlYWRVSW50MTZMRSgoZGF5cykgPT4ge1xuICAgIHBhcnNlci5yZWFkVUludDE2TEUoKG1pbnV0ZXMpID0+IHtcbiAgICAgIGxldCB2YWx1ZTtcbiAgICAgIGlmICh1c2VVVEMpIHtcbiAgICAgICAgdmFsdWUgPSBuZXcgRGF0ZShEYXRlLlVUQygxOTAwLCAwLCAxICsgZGF5cywgMCwgbWludXRlcykpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFsdWUgPSBuZXcgRGF0ZSgxOTAwLCAwLCAxICsgZGF5cywgMCwgbWludXRlcyk7XG4gICAgICB9XG4gICAgICBjYWxsYmFjayh2YWx1ZSk7XG4gICAgfSk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiByZWFkRGF0ZVRpbWUocGFyc2VyOiBQYXJzZXIsIHVzZVVUQzogYm9vbGVhbiwgY2FsbGJhY2s6ICh2YWx1ZTogRGF0ZSkgPT4gdm9pZCkge1xuICBwYXJzZXIucmVhZEludDMyTEUoKGRheXMpID0+IHtcbiAgICBwYXJzZXIucmVhZFVJbnQzMkxFKCh0aHJlZUh1bmRyZWR0aHNPZlNlY29uZCkgPT4ge1xuICAgICAgY29uc3QgbWlsbGlzZWNvbmRzID0gTWF0aC5yb3VuZCh0aHJlZUh1bmRyZWR0aHNPZlNlY29uZCAqIFRIUkVFX0FORF9BX1RISVJEKTtcblxuICAgICAgbGV0IHZhbHVlO1xuICAgICAgaWYgKHVzZVVUQykge1xuICAgICAgICB2YWx1ZSA9IG5ldyBEYXRlKERhdGUuVVRDKDE5MDAsIDAsIDEgKyBkYXlzLCAwLCAwLCAwLCBtaWxsaXNlY29uZHMpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhbHVlID0gbmV3IERhdGUoMTkwMCwgMCwgMSArIGRheXMsIDAsIDAsIDAsIG1pbGxpc2Vjb25kcyk7XG4gICAgICB9XG5cbiAgICAgIGNhbGxiYWNrKHZhbHVlKTtcbiAgICB9KTtcbiAgfSk7XG59XG5cbmludGVyZmFjZSBEYXRlV2l0aE5hbm9zZWNvbmRzRGVsdGEgZXh0ZW5kcyBEYXRlIHtcbiAgbmFub3NlY29uZHNEZWx0YTogbnVtYmVyO1xufVxuXG5mdW5jdGlvbiByZWFkVGltZShwYXJzZXI6IFBhcnNlciwgZGF0YUxlbmd0aDogbnVtYmVyLCBzY2FsZTogbnVtYmVyLCB1c2VVVEM6IGJvb2xlYW4sIGNhbGxiYWNrOiAodmFsdWU6IERhdGVXaXRoTmFub3NlY29uZHNEZWx0YSkgPT4gdm9pZCkge1xuICBsZXQgcmVhZFZhbHVlOiBhbnk7XG4gIHN3aXRjaCAoZGF0YUxlbmd0aCkge1xuICAgIGNhc2UgMzpcbiAgICAgIHJlYWRWYWx1ZSA9IHBhcnNlci5yZWFkVUludDI0TEU7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDQ6XG4gICAgICByZWFkVmFsdWUgPSBwYXJzZXIucmVhZFVJbnQzMkxFO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSA1OlxuICAgICAgcmVhZFZhbHVlID0gcGFyc2VyLnJlYWRVSW50NDBMRTtcbiAgfVxuXG4gIHJlYWRWYWx1ZSEuY2FsbChwYXJzZXIsICh2YWx1ZTogbnVtYmVyKSA9PiB7XG4gICAgaWYgKHNjYWxlIDwgNykge1xuICAgICAgZm9yIChsZXQgaSA9IHNjYWxlOyBpIDwgNzsgaSsrKSB7XG4gICAgICAgIHZhbHVlICo9IDEwO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxldCBkYXRlO1xuICAgIGlmICh1c2VVVEMpIHtcbiAgICAgIGRhdGUgPSBuZXcgRGF0ZShEYXRlLlVUQygxOTcwLCAwLCAxLCAwLCAwLCAwLCB2YWx1ZSAvIDEwMDAwKSkgYXMgRGF0ZVdpdGhOYW5vc2Vjb25kc0RlbHRhO1xuICAgIH0gZWxzZSB7XG4gICAgICBkYXRlID0gbmV3IERhdGUoMTk3MCwgMCwgMSwgMCwgMCwgMCwgdmFsdWUgLyAxMDAwMCkgYXMgRGF0ZVdpdGhOYW5vc2Vjb25kc0RlbHRhO1xuICAgIH1cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZGF0ZSwgJ25hbm9zZWNvbmRzRGVsdGEnLCB7XG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIHZhbHVlOiAodmFsdWUgJSAxMDAwMCkgLyBNYXRoLnBvdygxMCwgNylcbiAgICB9KTtcbiAgICBjYWxsYmFjayhkYXRlKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHJlYWREYXRlKHBhcnNlcjogUGFyc2VyLCB1c2VVVEM6IGJvb2xlYW4sIGNhbGxiYWNrOiAodmFsdWU6IERhdGUpID0+IHZvaWQpIHtcbiAgcGFyc2VyLnJlYWRVSW50MjRMRSgoZGF5cykgPT4ge1xuICAgIGlmICh1c2VVVEMpIHtcbiAgICAgIGNhbGxiYWNrKG5ldyBEYXRlKERhdGUuVVRDKDIwMDAsIDAsIGRheXMgLSA3MzAxMTgpKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNhbGxiYWNrKG5ldyBEYXRlKDIwMDAsIDAsIGRheXMgLSA3MzAxMTgpKTtcbiAgICB9XG4gIH0pO1xufVxuXG5mdW5jdGlvbiByZWFkRGF0ZVRpbWUyKHBhcnNlcjogUGFyc2VyLCBkYXRhTGVuZ3RoOiBudW1iZXIsIHNjYWxlOiBudW1iZXIsIHVzZVVUQzogYm9vbGVhbiwgY2FsbGJhY2s6ICh2YWx1ZTogRGF0ZVdpdGhOYW5vc2Vjb25kc0RlbHRhKSA9PiB2b2lkKSB7XG4gIHJlYWRUaW1lKHBhcnNlciwgZGF0YUxlbmd0aCAtIDMsIHNjYWxlLCB1c2VVVEMsICh0aW1lKSA9PiB7IC8vIFRPRE86ICdpbnB1dCcgaXMgJ3RpbWUnLCBidXQgVHlwZVNjcmlwdCBjYW5ub3QgZmluZCBcInRpbWUubmFub3NlY29uZHNEZWx0YVwiO1xuICAgIHBhcnNlci5yZWFkVUludDI0TEUoKGRheXMpID0+IHtcbiAgICAgIGxldCBkYXRlO1xuICAgICAgaWYgKHVzZVVUQykge1xuICAgICAgICBkYXRlID0gbmV3IERhdGUoRGF0ZS5VVEMoMjAwMCwgMCwgZGF5cyAtIDczMDExOCwgMCwgMCwgMCwgK3RpbWUpKSBhcyBEYXRlV2l0aE5hbm9zZWNvbmRzRGVsdGE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkYXRlID0gbmV3IERhdGUoMjAwMCwgMCwgZGF5cyAtIDczMDExOCwgdGltZS5nZXRIb3VycygpLCB0aW1lLmdldE1pbnV0ZXMoKSwgdGltZS5nZXRTZWNvbmRzKCksIHRpbWUuZ2V0TWlsbGlzZWNvbmRzKCkpIGFzIERhdGVXaXRoTmFub3NlY29uZHNEZWx0YTtcbiAgICAgIH1cbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShkYXRlLCAnbmFub3NlY29uZHNEZWx0YScsIHtcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIHZhbHVlOiB0aW1lLm5hbm9zZWNvbmRzRGVsdGFcbiAgICAgIH0pO1xuICAgICAgY2FsbGJhY2soZGF0ZSk7XG4gICAgfSk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiByZWFkRGF0ZVRpbWVPZmZzZXQocGFyc2VyOiBQYXJzZXIsIGRhdGFMZW5ndGg6IG51bWJlciwgc2NhbGU6IG51bWJlciwgY2FsbGJhY2s6ICh2YWx1ZTogRGF0ZVdpdGhOYW5vc2Vjb25kc0RlbHRhKSA9PiB2b2lkKSB7XG4gIHJlYWRUaW1lKHBhcnNlciwgZGF0YUxlbmd0aCAtIDUsIHNjYWxlLCB0cnVlLCAodGltZSkgPT4ge1xuICAgIHBhcnNlci5yZWFkVUludDI0TEUoKGRheXMpID0+IHtcbiAgICAgIC8vIG9mZnNldFxuICAgICAgcGFyc2VyLnJlYWRJbnQxNkxFKCgpID0+IHtcbiAgICAgICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKERhdGUuVVRDKDIwMDAsIDAsIGRheXMgLSA3MzAxMTgsIDAsIDAsIDAsICt0aW1lKSkgYXMgRGF0ZVdpdGhOYW5vc2Vjb25kc0RlbHRhO1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZGF0ZSwgJ25hbm9zZWNvbmRzRGVsdGEnLCB7XG4gICAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgICAgdmFsdWU6IHRpbWUubmFub3NlY29uZHNEZWx0YVxuICAgICAgICB9KTtcbiAgICAgICAgY2FsbGJhY2soZGF0ZSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHZhbHVlUGFyc2U7XG5tb2R1bGUuZXhw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
|