tedious 16.4.0 → 16.5.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/benchmarks/bulk-load/iterable.js +1 -1
- package/benchmarks/common.js +2 -4
- package/benchmarks/package-lock.json +21173 -0
- package/benchmarks/package.json +11 -0
- package/benchmarks/query/call-tvp.js +1 -1
- package/benchmarks/query/insert-varbinary.js +1 -1
- package/benchmarks/query/select-many-rows.js +1 -1
- package/benchmarks/query/select-nvarchar.js +1 -1
- package/benchmarks/query/select-varbinary.js +1 -1
- package/benchmarks/request/rpcrequest-payload-tvp.js +2 -2
- package/benchmarks/request/rpcrequest-payload-varbinary.js +2 -2
- package/benchmarks/token-parser/colmetadata-token.js +4 -2
- package/benchmarks/token-parser/done-token.js +5 -2
- package/benchmarks/token-parser/simple-tokens.js +8 -2
- package/lib/always-encrypted/aead-aes-256-cbc-hmac-algorithm.js +1 -8
- package/lib/always-encrypted/aead-aes-256-cbc-hmac-algorithm.js.map +1 -1
- package/lib/always-encrypted/aead-aes-256-cbc-hmac-encryption-key.js +1 -8
- package/lib/always-encrypted/aead-aes-256-cbc-hmac-encryption-key.js.map +1 -1
- package/lib/always-encrypted/cek-entry.js +1 -7
- package/lib/always-encrypted/cek-entry.js.map +1 -1
- package/lib/always-encrypted/get-parameter-encryption-metadata.js +1 -1
- package/lib/always-encrypted/get-parameter-encryption-metadata.js.map +1 -1
- package/lib/always-encrypted/key-crypto.js +1 -1
- package/lib/always-encrypted/key-crypto.js.map +1 -1
- package/lib/always-encrypted/keystore-provider-azure-key-vault.js +1 -8
- package/lib/always-encrypted/keystore-provider-azure-key-vault.js.map +1 -1
- package/lib/always-encrypted/symmetric-key-cache.js +1 -1
- package/lib/always-encrypted/symmetric-key-cache.js.map +1 -1
- package/lib/always-encrypted/symmetric-key.js +1 -2
- package/lib/always-encrypted/symmetric-key.js.map +1 -1
- package/lib/always-encrypted/types.js +1 -1
- package/lib/always-encrypted/types.js.map +1 -1
- package/lib/bulk-load-payload.js +1 -3
- package/lib/bulk-load-payload.js.map +1 -1
- package/lib/bulk-load.js +15 -23
- package/lib/bulk-load.js.map +1 -1
- package/lib/collation.js +1 -7
- package/lib/collation.js.map +1 -1
- package/lib/connection.js +50 -35
- package/lib/connection.js.map +1 -1
- package/lib/connector.js +1 -1
- package/lib/connector.js.map +1 -1
- package/lib/data-type.js +1 -1
- package/lib/data-type.js.map +1 -1
- package/lib/data-types/bigint.js +1 -1
- package/lib/data-types/bigint.js.map +1 -1
- package/lib/data-types/binary.js +1 -1
- package/lib/data-types/binary.js.map +1 -1
- package/lib/data-types/bit.js +1 -1
- package/lib/data-types/bit.js.map +1 -1
- package/lib/data-types/bitn.js +1 -1
- package/lib/data-types/bitn.js.map +1 -1
- package/lib/data-types/char.js +1 -1
- package/lib/data-types/char.js.map +1 -1
- package/lib/data-types/date.js +1 -1
- package/lib/data-types/date.js.map +1 -1
- package/lib/data-types/datetime.js +1 -1
- package/lib/data-types/datetime.js.map +1 -1
- package/lib/data-types/datetime2.js +1 -1
- package/lib/data-types/datetime2.js.map +1 -1
- package/lib/data-types/datetimen.js +1 -1
- package/lib/data-types/datetimen.js.map +1 -1
- package/lib/data-types/datetimeoffset.js +1 -1
- package/lib/data-types/datetimeoffset.js.map +1 -1
- package/lib/data-types/decimal.js +1 -1
- package/lib/data-types/decimal.js.map +1 -1
- package/lib/data-types/decimaln.js +1 -1
- package/lib/data-types/decimaln.js.map +1 -1
- package/lib/data-types/float.js +1 -1
- package/lib/data-types/float.js.map +1 -1
- package/lib/data-types/floatn.js +1 -1
- package/lib/data-types/floatn.js.map +1 -1
- package/lib/data-types/image.js +1 -1
- package/lib/data-types/image.js.map +1 -1
- package/lib/data-types/int.js +1 -1
- package/lib/data-types/int.js.map +1 -1
- package/lib/data-types/intn.js +1 -1
- package/lib/data-types/intn.js.map +1 -1
- package/lib/data-types/money.js +1 -1
- package/lib/data-types/money.js.map +1 -1
- package/lib/data-types/moneyn.js +1 -1
- package/lib/data-types/moneyn.js.map +1 -1
- package/lib/data-types/nchar.js +1 -1
- package/lib/data-types/nchar.js.map +1 -1
- package/lib/data-types/ntext.js +1 -1
- package/lib/data-types/ntext.js.map +1 -1
- package/lib/data-types/null.js +1 -1
- package/lib/data-types/null.js.map +1 -1
- package/lib/data-types/numeric.js +1 -1
- package/lib/data-types/numeric.js.map +1 -1
- package/lib/data-types/numericn.js +1 -1
- package/lib/data-types/numericn.js.map +1 -1
- package/lib/data-types/nvarchar.js +1 -1
- package/lib/data-types/nvarchar.js.map +1 -1
- package/lib/data-types/real.js +1 -1
- package/lib/data-types/real.js.map +1 -1
- package/lib/data-types/smalldatetime.js +1 -1
- package/lib/data-types/smalldatetime.js.map +1 -1
- package/lib/data-types/smallint.js +1 -1
- package/lib/data-types/smallint.js.map +1 -1
- package/lib/data-types/smallmoney.js +1 -1
- package/lib/data-types/smallmoney.js.map +1 -1
- package/lib/data-types/sql-variant.js +1 -1
- package/lib/data-types/sql-variant.js.map +1 -1
- package/lib/data-types/text.js +1 -1
- package/lib/data-types/text.js.map +1 -1
- package/lib/data-types/time.js +1 -1
- package/lib/data-types/time.js.map +1 -1
- package/lib/data-types/tinyint.js +1 -1
- package/lib/data-types/tinyint.js.map +1 -1
- package/lib/data-types/tvp.js +1 -1
- package/lib/data-types/tvp.js.map +1 -1
- package/lib/data-types/udt.js +1 -1
- package/lib/data-types/udt.js.map +1 -1
- package/lib/data-types/uniqueidentifier.js +1 -1
- package/lib/data-types/uniqueidentifier.js.map +1 -1
- package/lib/data-types/varbinary.js +1 -1
- package/lib/data-types/varbinary.js.map +1 -1
- package/lib/data-types/varchar.js +1 -1
- package/lib/data-types/varchar.js.map +1 -1
- package/lib/data-types/xml.js +1 -1
- package/lib/data-types/xml.js.map +1 -1
- package/lib/debug.js +1 -4
- package/lib/debug.js.map +1 -1
- package/lib/errors/abort-error.js +1 -2
- package/lib/errors/abort-error.js.map +1 -1
- package/lib/errors/timeout-error.js +1 -2
- package/lib/errors/timeout-error.js.map +1 -1
- package/lib/errors.js +1 -10
- package/lib/errors.js.map +1 -1
- package/lib/incoming-message-stream.js +1 -4
- package/lib/incoming-message-stream.js.map +1 -1
- package/lib/login7-payload.js +1 -23
- package/lib/login7-payload.js.map +1 -1
- package/lib/message-io.js +1 -8
- package/lib/message-io.js.map +1 -1
- package/lib/message.js +1 -4
- package/lib/message.js.map +1 -1
- package/lib/metadata-parser.js +1 -1
- package/lib/metadata-parser.js.map +1 -1
- package/lib/ntlm-payload.js +1 -2
- package/lib/ntlm-payload.js.map +1 -1
- package/lib/outgoing-message-stream.js +1 -5
- package/lib/outgoing-message-stream.js.map +1 -1
- package/lib/packet.js +1 -2
- package/lib/packet.js.map +1 -1
- package/lib/prelogin-payload.js +1 -11
- package/lib/prelogin-payload.js.map +1 -1
- package/lib/request.js +13 -19
- package/lib/request.js.map +1 -1
- package/lib/rpcrequest-payload.js +1 -6
- package/lib/rpcrequest-payload.js.map +1 -1
- package/lib/sqlbatch-payload.js +1 -4
- package/lib/sqlbatch-payload.js.map +1 -1
- package/lib/tedious.js +1 -1
- package/lib/tedious.js.map +1 -1
- package/lib/token/colmetadata-token-parser.js +1 -1
- package/lib/token/colmetadata-token-parser.js.map +1 -1
- package/lib/token/done-token-parser.js +1 -1
- package/lib/token/done-token-parser.js.map +1 -1
- package/lib/token/env-change-token-parser.js +1 -1
- package/lib/token/env-change-token-parser.js.map +1 -1
- package/lib/token/feature-ext-ack-parser.js +1 -1
- package/lib/token/feature-ext-ack-parser.js.map +1 -1
- package/lib/token/fedauth-info-parser.js +1 -1
- package/lib/token/fedauth-info-parser.js.map +1 -1
- package/lib/token/handler.js +3 -13
- package/lib/token/handler.js.map +1 -1
- package/lib/token/infoerror-token-parser.js +1 -1
- package/lib/token/infoerror-token-parser.js.map +1 -1
- package/lib/token/loginack-token-parser.js +1 -1
- package/lib/token/loginack-token-parser.js.map +1 -1
- package/lib/token/nbcrow-token-parser.js +1 -1
- package/lib/token/nbcrow-token-parser.js.map +1 -1
- package/lib/token/order-token-parser.js +1 -1
- package/lib/token/order-token-parser.js.map +1 -1
- package/lib/token/returnstatus-token-parser.js +1 -1
- package/lib/token/returnstatus-token-parser.js.map +1 -1
- package/lib/token/returnvalue-token-parser.js +1 -1
- package/lib/token/returnvalue-token-parser.js.map +1 -1
- package/lib/token/row-token-parser.js +1 -1
- package/lib/token/row-token-parser.js.map +1 -1
- package/lib/token/sspi-token-parser.js +1 -1
- package/lib/token/sspi-token-parser.js.map +1 -1
- package/lib/token/stream-parser.js +1 -10
- package/lib/token/stream-parser.js.map +1 -1
- package/lib/token/token-stream-parser.js +1 -4
- package/lib/token/token-stream-parser.js.map +1 -1
- package/lib/token/token.js +2 -88
- package/lib/token/token.js.map +1 -1
- package/lib/tracking-buffer/writable-tracking-buffer.js +1 -7
- package/lib/tracking-buffer/writable-tracking-buffer.js.map +1 -1
- package/lib/transaction.js +1 -4
- package/lib/transaction.js.map +1 -1
- package/lib/value-parser.js +1 -1
- package/lib/value-parser.js.map +1 -1
- package/package.json +1 -1
- package/tsconfig.json +2 -2
- package/benchmarks/bulk-load/stream.js +0 -62
- package/benchmarks/bulk-load/sync.js +0 -59
package/lib/bulk-load.js
CHANGED
|
@@ -63,19 +63,18 @@ class RowTransform extends _stream.Transform {
|
|
|
63
63
|
/**
|
|
64
64
|
* @private
|
|
65
65
|
*/
|
|
66
|
-
|
|
66
|
+
|
|
67
67
|
/**
|
|
68
68
|
* @private
|
|
69
69
|
*/
|
|
70
|
-
|
|
70
|
+
|
|
71
71
|
/**
|
|
72
72
|
* @private
|
|
73
73
|
*/
|
|
74
|
-
|
|
74
|
+
|
|
75
75
|
/**
|
|
76
76
|
* @private
|
|
77
77
|
*/
|
|
78
|
-
columns;
|
|
79
78
|
|
|
80
79
|
/**
|
|
81
80
|
* @private
|
|
@@ -170,77 +169,70 @@ class BulkLoad extends _events.EventEmitter {
|
|
|
170
169
|
/**
|
|
171
170
|
* @private
|
|
172
171
|
*/
|
|
173
|
-
|
|
172
|
+
|
|
174
173
|
/**
|
|
175
174
|
* @private
|
|
176
175
|
*/
|
|
177
|
-
|
|
176
|
+
|
|
178
177
|
/**
|
|
179
178
|
* @private
|
|
180
179
|
*/
|
|
181
|
-
|
|
180
|
+
|
|
182
181
|
/**
|
|
183
182
|
* @private
|
|
184
183
|
*/
|
|
185
|
-
|
|
184
|
+
|
|
186
185
|
/**
|
|
187
186
|
* @private
|
|
188
187
|
*/
|
|
189
|
-
|
|
188
|
+
|
|
190
189
|
/**
|
|
191
190
|
* @private
|
|
192
191
|
*/
|
|
193
|
-
timeout;
|
|
194
192
|
|
|
195
193
|
/**
|
|
196
194
|
* @private
|
|
197
195
|
*/
|
|
198
|
-
|
|
196
|
+
|
|
199
197
|
/**
|
|
200
198
|
* @private
|
|
201
199
|
*/
|
|
202
|
-
callback;
|
|
203
200
|
|
|
204
201
|
/**
|
|
205
202
|
* @private
|
|
206
203
|
*/
|
|
207
|
-
|
|
204
|
+
|
|
208
205
|
/**
|
|
209
206
|
* @private
|
|
210
207
|
*/
|
|
211
|
-
columnsByName;
|
|
212
208
|
|
|
213
209
|
/**
|
|
214
210
|
* @private
|
|
215
211
|
*/
|
|
216
|
-
|
|
212
|
+
|
|
217
213
|
/**
|
|
218
214
|
* @private
|
|
219
215
|
*/
|
|
220
|
-
rowToPacketTransform;
|
|
221
216
|
|
|
222
217
|
/**
|
|
223
218
|
* @private
|
|
224
219
|
*/
|
|
225
|
-
bulkOptions;
|
|
226
220
|
|
|
227
221
|
/**
|
|
228
222
|
* @private
|
|
229
223
|
*/
|
|
230
|
-
|
|
224
|
+
|
|
231
225
|
/**
|
|
232
226
|
* @private
|
|
233
227
|
*/
|
|
234
|
-
|
|
228
|
+
|
|
235
229
|
/**
|
|
236
230
|
* @private
|
|
237
231
|
*/
|
|
238
|
-
|
|
232
|
+
|
|
239
233
|
/**
|
|
240
234
|
* @private
|
|
241
235
|
*/
|
|
242
|
-
rowCount;
|
|
243
|
-
collation;
|
|
244
236
|
|
|
245
237
|
/**
|
|
246
238
|
* @private
|
|
@@ -519,4 +511,4 @@ class BulkLoad extends _events.EventEmitter {
|
|
|
519
511
|
var _default = BulkLoad;
|
|
520
512
|
exports.default = _default;
|
|
521
513
|
module.exports = BulkLoad;
|
|
522
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZXZlbnRzIiwicmVxdWlyZSIsIl93cml0YWJsZVRyYWNraW5nQnVmZmVyIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsIl9zdHJlYW0iLCJfdG9rZW4iLCJvYmoiLCJfX2VzTW9kdWxlIiwiZGVmYXVsdCIsIkZMQUdTIiwibnVsbGFibGUiLCJjYXNlU2VuIiwidXBkYXRlYWJsZVJlYWRXcml0ZSIsInVwZGF0ZWFibGVVbmtub3duIiwiaWRlbnRpdHkiLCJjb21wdXRlZCIsImZpeGVkTGVuQ0xSVHlwZSIsInNwYXJzZUNvbHVtblNldCIsImhpZGRlbiIsImtleSIsIm51bGxhYmxlVW5rbm93biIsIkRPTkVfU1RBVFVTIiwiRklOQUwiLCJNT1JFIiwiRVJST1IiLCJJTlhBQ1QiLCJDT1VOVCIsIkFUVE4iLCJTUlZFUlJPUiIsInJvd1Rva2VuQnVmZmVyIiwiQnVmZmVyIiwiZnJvbSIsIlRPS0VOX1RZUEUiLCJST1ciLCJ0ZXh0UG9pbnRlckFuZFRpbWVzdGFtcEJ1ZmZlciIsInRleHRQb2ludGVyTnVsbEJ1ZmZlciIsIlJvd1RyYW5zZm9ybSIsIlRyYW5zZm9ybSIsImNvbHVtbk1ldGFkYXRhV3JpdHRlbiIsImJ1bGtMb2FkIiwibWFpbk9wdGlvbnMiLCJjb2x1bW5zIiwiY29uc3RydWN0b3IiLCJ3cml0YWJsZU9iamVjdE1vZGUiLCJvcHRpb25zIiwiX3RyYW5zZm9ybSIsInJvdyIsIl9lbmNvZGluZyIsImNhbGxiYWNrIiwicHVzaCIsImdldENvbE1ldGFEYXRhIiwiaSIsImxlbmd0aCIsImMiLCJ2YWx1ZSIsIkFycmF5IiwiaXNBcnJheSIsIm9iak5hbWUiLCJmaXJzdFJvd1dyaXR0ZW4iLCJ0eXBlIiwidmFsaWRhdGUiLCJjb2xsYXRpb24iLCJlcnJvciIsInBhcmFtZXRlciIsInNjYWxlIiwicHJlY2lzaW9uIiwibmFtZSIsImdlbmVyYXRlUGFyYW1ldGVyTGVuZ3RoIiwiY2h1bmsiLCJnZW5lcmF0ZVBhcmFtZXRlckRhdGEiLCJwcm9jZXNzIiwibmV4dFRpY2siLCJfZmx1c2giLCJjcmVhdGVEb25lVG9rZW4iLCJCdWxrTG9hZCIsIkV2ZW50RW1pdHRlciIsImNhbmNlbGVkIiwiZXhlY3V0aW9uU3RhcnRlZCIsInN0cmVhbWluZ01vZGUiLCJ0YWJsZSIsInRpbWVvdXQiLCJjb2x1bW5zQnlOYW1lIiwicm93VG9QYWNrZXRUcmFuc2Zvcm0iLCJidWxrT3B0aW9ucyIsImNvbm5lY3Rpb24iLCJyb3dzIiwicnN0Iiwicm93Q291bnQiLCJjb25uZWN0aW9uT3B0aW9ucyIsImNoZWNrQ29uc3RyYWludHMiLCJmaXJlVHJpZ2dlcnMiLCJrZWVwTnVsbHMiLCJsb2NrVGFibGUiLCJvcmRlciIsIlR5cGVFcnJvciIsImNvbHVtbiIsImRpcmVjdGlvbiIsIk9iamVjdCIsImVudHJpZXMiLCJ1bmRlZmluZWQiLCJhZGRDb2x1bW4iLCJvdXRwdXQiLCJFcnJvciIsImlkIiwicmVzb2x2ZUxlbmd0aCIsInJlc29sdmVQcmVjaXNpb24iLCJyZXNvbHZlU2NhbGUiLCJnZXRPcHRpb25zU3FsIiwiYWRkT3B0aW9ucyIsIm9yZGVyQ29sdW1ucyIsImpvaW4iLCJnZXRCdWxrSW5zZXJ0U3FsIiwic3FsIiwibGVuIiwiZGVjbGFyYXRpb24iLCJnZXRUYWJsZUNyZWF0aW9uU3FsIiwidEJ1ZiIsIldyaXRhYmxlVHJhY2tpbmdCdWZmZXIiLCJ3cml0ZVVJbnQ4IiwiQ09MTUVUQURBVEEiLCJ3cml0ZVVJbnQxNkxFIiwiaiIsInRkc1ZlcnNpb24iLCJ3cml0ZVVJbnQzMkxFIiwiZmxhZ3MiLCJ3cml0ZUJ1ZmZlciIsImdlbmVyYXRlVHlwZUluZm8iLCJoYXNUYWJsZU5hbWUiLCJ3cml0ZVVzVmFyY2hhciIsIndyaXRlQlZhcmNoYXIiLCJkYXRhIiwic2V0VGltZW91dCIsIkRPTkUiLCJzdGF0dXMiLCJjYW5jZWwiLCJlbWl0IiwiX2RlZmF1bHQiLCJleHBvcnRzIiwibW9kdWxlIl0sInNvdXJjZXMiOlsiLi4vc3JjL2J1bGstbG9hZC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFdmVudEVtaXR0ZXIgfSBmcm9tICdldmVudHMnO1xuaW1wb3J0IFdyaXRhYmxlVHJhY2tpbmdCdWZmZXIgZnJvbSAnLi90cmFja2luZy1idWZmZXIvd3JpdGFibGUtdHJhY2tpbmctYnVmZmVyJztcbmltcG9ydCBDb25uZWN0aW9uLCB7IEludGVybmFsQ29ubmVjdGlvbk9wdGlvbnMgfSBmcm9tICcuL2Nvbm5lY3Rpb24nO1xuXG5pbXBvcnQgeyBUcmFuc2Zvcm0gfSBmcm9tICdzdHJlYW0nO1xuaW1wb3J0IHsgVFlQRSBhcyBUT0tFTl9UWVBFIH0gZnJvbSAnLi90b2tlbi90b2tlbic7XG5cbmltcG9ydCB7IERhdGFUeXBlLCBQYXJhbWV0ZXIgfSBmcm9tICcuL2RhdGEtdHlwZSc7XG5pbXBvcnQgeyBDb2xsYXRpb24gfSBmcm9tICcuL2NvbGxhdGlvbic7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuY29uc3QgRkxBR1MgPSB7XG4gIG51bGxhYmxlOiAxIDw8IDAsXG4gIGNhc2VTZW46IDEgPDwgMSxcbiAgdXBkYXRlYWJsZVJlYWRXcml0ZTogMSA8PCAyLFxuICB1cGRhdGVhYmxlVW5rbm93bjogMSA8PCAzLFxuICBpZGVudGl0eTogMSA8PCA0LFxuICBjb21wdXRlZDogMSA8PCA1LCAvLyBpbnRyb2R1Y2VkIGluIFREUyA3LjJcbiAgZml4ZWRMZW5DTFJUeXBlOiAxIDw8IDgsIC8vIGludHJvZHVjZWQgaW4gVERTIDcuMlxuICBzcGFyc2VDb2x1bW5TZXQ6IDEgPDwgMTAsIC8vIGludHJvZHVjZWQgaW4gVERTIDcuMy5CXG4gIGhpZGRlbjogMSA8PCAxMywgLy8gaW50cm9kdWNlZCBpbiBURFMgNy4yXG4gIGtleTogMSA8PCAxNCwgLy8gaW50cm9kdWNlZCBpbiBURFMgNy4yXG4gIG51bGxhYmxlVW5rbm93bjogMSA8PCAxNSAvLyBpbnRyb2R1Y2VkIGluIFREUyA3LjJcbn07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuY29uc3QgRE9ORV9TVEFUVVMgPSB7XG4gIEZJTkFMOiAweDAwLFxuICBNT1JFOiAweDEsXG4gIEVSUk9SOiAweDIsXG4gIElOWEFDVDogMHg0LFxuICBDT1VOVDogMHgxMCxcbiAgQVRUTjogMHgyMCxcbiAgU1JWRVJST1I6IDB4MTAwXG59O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmludGVyZmFjZSBJbnRlcm5hbE9wdGlvbnMge1xuICBjaGVja0NvbnN0cmFpbnRzOiBib29sZWFuO1xuICBmaXJlVHJpZ2dlcnM6IGJvb2xlYW47XG4gIGtlZXBOdWxsczogYm9vbGVhbjtcbiAgbG9ja1RhYmxlOiBib29sZWFuO1xuICBvcmRlcjogeyBbY29sdW1uTmFtZTogc3RyaW5nXTogJ0FTQycgfCAnREVTQycgfTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBPcHRpb25zIHtcbiAgLyoqXG4gICAqIEhvbm9ycyBjb25zdHJhaW50cyBkdXJpbmcgYnVsayBsb2FkLCB1c2luZyBULVNRTFxuICAgKiBbQ0hFQ0tfQ09OU1RSQUlOVFNdKGh0dHBzOi8vdGVjaG5ldC5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvbXMxODYyNDcodj1zcWwuMTA1KS5hc3B4KS5cbiAgICogKGRlZmF1bHQ6IGBmYWxzZWApXG4gICAqL1xuICBjaGVja0NvbnN0cmFpbnRzPzogSW50ZXJuYWxPcHRpb25zWydjaGVja0NvbnN0cmFpbnRzJ10gfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIEhvbm9ycyBpbnNlcnQgdHJpZ2dlcnMgZHVyaW5nIGJ1bGsgbG9hZCwgdXNpbmcgdGhlIFQtU1FMIFtGSVJFX1RSSUdHRVJTXShodHRwczovL3RlY2huZXQubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L21zMTg3NjQwKHY9c3FsLjEwNSkuYXNweCkuIChkZWZhdWx0OiBgZmFsc2VgKVxuICAgKi9cbiAgZmlyZVRyaWdnZXJzPzogSW50ZXJuYWxPcHRpb25zWydmaXJlVHJpZ2dlcnMnXSB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogSG9ub3JzIG51bGwgdmFsdWUgcGFzc2VkLCBpZ25vcmVzIHRoZSBkZWZhdWx0IHZhbHVlcyBzZXQgb24gdGFibGUsIHVzaW5nIFQtU1FMIFtLRUVQX05VTExTXShodHRwczovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L21zMTg3ODg3KHY9c3FsLjEyMCkuYXNweCkuIChkZWZhdWx0OiBgZmFsc2VgKVxuICAgKi9cbiAga2VlcE51bGxzPzogSW50ZXJuYWxPcHRpb25zWydrZWVwTnVsbHMnXSB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogUGxhY2VzIGEgYnVsayB1cGRhdGUoQlUpIGxvY2sgb24gdGFibGUgd2hpbGUgcGVyZm9ybWluZyBidWxrIGxvYWQsIHVzaW5nIFQtU1FMIFtUQUJMT0NLXShodHRwczovL3RlY2huZXQubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L21zMTgwODc2KHY9c3FsLjEwNSkuYXNweCkuIChkZWZhdWx0OiBgZmFsc2VgKVxuICAgKi9cbiAgbG9ja1RhYmxlPzogSW50ZXJuYWxPcHRpb25zWydsb2NrVGFibGUnXSB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogU3BlY2lmaWVzIHRoZSBvcmRlcmluZyBvZiB0aGUgZGF0YSB0byBwb3NzaWJseSBpbmNyZWFzZSBidWxrIGluc2VydCBwZXJmb3JtYW5jZSwgdXNpbmcgVC1TUUwgW09SREVSXShodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9wcmV2aW91cy12ZXJzaW9ucy9zcWwvc3FsLXNlcnZlci0yMDA4LXIyL21zMTc3NDY4KHY9c3FsLjEwNSkpLiAoZGVmYXVsdDogYHt9YClcbiAgICovXG4gIG9yZGVyPzogSW50ZXJuYWxPcHRpb25zWydvcmRlciddIHwgdW5kZWZpbmVkO1xufVxuXG5cbmV4cG9ydCB0eXBlIENhbGxiYWNrID1cbiAgLyoqXG4gICAqIEEgZnVuY3Rpb24gd2hpY2ggd2lsbCBiZSBjYWxsZWQgYWZ0ZXIgdGhlIFtbQnVsa0xvYWRdXSBmaW5pc2hlcyBleGVjdXRpbmcuXG4gICAqXG4gICAqIEBwYXJhbSByb3dDb3VudCB0aGUgbnVtYmVyIG9mIHJvd3MgaW5zZXJ0ZWRcbiAgICovXG4gIChlcnI6IEVycm9yIHwgdW5kZWZpbmVkIHwgbnVsbCwgcm93Q291bnQ/OiBudW1iZXIpID0+IHZvaWQ7XG5cbmludGVyZmFjZSBDb2x1bW4gZXh0ZW5kcyBQYXJhbWV0ZXIge1xuICBvYmpOYW1lOiBzdHJpbmc7XG4gIGNvbGxhdGlvbjogQ29sbGF0aW9uIHwgdW5kZWZpbmVkO1xufVxuXG5pbnRlcmZhY2UgQ29sdW1uT3B0aW9ucyB7XG4gIG91dHB1dD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEZvciBWYXJDaGFyLCBOVmFyQ2hhciwgVmFyQmluYXJ5LiBVc2UgbGVuZ3RoIGFzIGBJbmZpbml0eWAgZm9yIFZhckNoYXIobWF4KSwgTlZhckNoYXIobWF4KSBhbmQgVmFyQmluYXJ5KG1heCkuXG4gICAqL1xuICBsZW5ndGg/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIEZvciBOdW1lcmljLCBEZWNpbWFsLlxuICAgKi9cbiAgcHJlY2lzaW9uPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBGb3IgTnVtZXJpYywgRGVjaW1hbCwgVGltZSwgRGF0ZVRpbWUyLCBEYXRlVGltZU9mZnNldC5cbiAgICovXG4gIHNjYWxlPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBJZiB0aGUgbmFtZSBvZiB0aGUgY29sdW1uIGlzIGRpZmZlcmVudCBmcm9tIHRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eSBmb3VuZCBvbiBgcm93T2JqYCBhcmd1bWVudHMgcGFzc2VkIHRvIFtbYWRkUm93XV0sIHRoZW4geW91IGNhbiB1c2UgdGhpcyBvcHRpb24gdG8gc3BlY2lmeSB0aGUgcHJvcGVydHkgbmFtZS5cbiAgICovXG4gIG9iak5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBjb2x1bW4gYWNjZXB0cyBOVUxMIHZhbHVlcy5cbiAgICovXG4gIG51bGxhYmxlPzogYm9vbGVhbjtcbn1cblxuY29uc3Qgcm93VG9rZW5CdWZmZXIgPSBCdWZmZXIuZnJvbShbIFRPS0VOX1RZUEUuUk9XIF0pO1xuY29uc3QgdGV4dFBvaW50ZXJBbmRUaW1lc3RhbXBCdWZmZXIgPSBCdWZmZXIuZnJvbShbXG4gIC8vIFRleHRQb2ludGVyIGxlbmd0aFxuICAweDEwLFxuXG4gIC8vIFRleHRQb2ludGVyXG4gIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsXG5cbiAgLy8gVGltZXN0YW1wXG4gIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDBcbl0pO1xuY29uc3QgdGV4dFBvaW50ZXJOdWxsQnVmZmVyID0gQnVmZmVyLmZyb20oWzB4MDBdKTtcblxuLy8gQSB0cmFuc2Zvcm0gdGhhdCBjb252ZXJ0cyByb3dzIHRvIHBhY2tldHMuXG5jbGFzcyBSb3dUcmFuc2Zvcm0gZXh0ZW5kcyBUcmFuc2Zvcm0ge1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGNvbHVtbk1ldGFkYXRhV3JpdHRlbjogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBidWxrTG9hZDogQnVsa0xvYWQ7XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgbWFpbk9wdGlvbnM6IEJ1bGtMb2FkWydvcHRpb25zJ107XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgY29sdW1uczogQnVsa0xvYWRbJ2NvbHVtbnMnXTtcblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGNvbnN0cnVjdG9yKGJ1bGtMb2FkOiBCdWxrTG9hZCkge1xuICAgIHN1cGVyKHsgd3JpdGFibGVPYmplY3RNb2RlOiB0cnVlIH0pO1xuXG4gICAgdGhpcy5idWxrTG9hZCA9IGJ1bGtMb2FkO1xuICAgIHRoaXMubWFpbk9wdGlvbnMgPSBidWxrTG9hZC5vcHRpb25zO1xuICAgIHRoaXMuY29sdW1ucyA9IGJ1bGtMb2FkLmNvbHVtbnM7XG5cbiAgICB0aGlzLmNvbHVtbk1ldGFkYXRhV3JpdHRlbiA9IGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfdHJhbnNmb3JtKHJvdzogQXJyYXk8dW5rbm93bj4gfCB7IFtjb2xOYW1lOiBzdHJpbmddOiB1bmtub3duIH0sIF9lbmNvZGluZzogc3RyaW5nLCBjYWxsYmFjazogKGVycm9yPzogRXJyb3IpID0+IHZvaWQpIHtcbiAgICBpZiAoIXRoaXMuY29sdW1uTWV0YWRhdGFXcml0dGVuKSB7XG4gICAgICB0aGlzLnB1c2godGhpcy5idWxrTG9hZC5nZXRDb2xNZXRhRGF0YSgpKTtcbiAgICAgIHRoaXMuY29sdW1uTWV0YWRhdGFXcml0dGVuID0gdHJ1ZTtcbiAgICB9XG5cbiAgICB0aGlzLnB1c2gocm93VG9rZW5CdWZmZXIpO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmNvbHVtbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGMgPSB0aGlzLmNvbHVtbnNbaV07XG4gICAgICBsZXQgdmFsdWUgPSBBcnJheS5pc0FycmF5KHJvdykgPyByb3dbaV0gOiByb3dbYy5vYmpOYW1lXTtcblxuICAgICAgaWYgKCF0aGlzLmJ1bGtMb2FkLmZpcnN0Um93V3JpdHRlbikge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHZhbHVlID0gYy50eXBlLnZhbGlkYXRlKHZhbHVlLCBjLmNvbGxhdGlvbik7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyb3IpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHBhcmFtZXRlciA9IHtcbiAgICAgICAgbGVuZ3RoOiBjLmxlbmd0aCxcbiAgICAgICAgc2NhbGU6IGMuc2NhbGUsXG4gICAgICAgIHByZWNpc2lvbjogYy5wcmVjaXNpb24sXG4gICAgICAgIHZhbHVlOiB2YWx1ZVxuICAgICAgfTtcblxuICAgICAgaWYgKGMudHlwZS5uYW1lID09PSAnVGV4dCcgfHwgYy50eXBlLm5hbWUgPT09ICdJbWFnZScgfHwgYy50eXBlLm5hbWUgPT09ICdOVGV4dCcpIHtcbiAgICAgICAgaWYgKHZhbHVlID09IG51bGwpIHtcbiAgICAgICAgICB0aGlzLnB1c2godGV4dFBvaW50ZXJOdWxsQnVmZmVyKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucHVzaCh0ZXh0UG9pbnRlckFuZFRpbWVzdGFtcEJ1ZmZlcik7XG4gICAgICB9XG5cbiAgICAgIHRoaXMucHVzaChjLnR5cGUuZ2VuZXJhdGVQYXJhbWV0ZXJMZW5ndGgocGFyYW1ldGVyLCB0aGlzLm1haW5PcHRpb25zKSk7XG4gICAgICBmb3IgKGNvbnN0IGNodW5rIG9mIGMudHlwZS5nZW5lcmF0ZVBhcmFtZXRlckRhdGEocGFyYW1ldGVyLCB0aGlzLm1haW5PcHRpb25zKSkge1xuICAgICAgICB0aGlzLnB1c2goY2h1bmspO1xuICAgICAgfVxuICAgIH1cblxuICAgIHByb2Nlc3MubmV4dFRpY2soY2FsbGJhY2spO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfZmx1c2goY2FsbGJhY2s6ICgpID0+IHZvaWQpIHtcbiAgICB0aGlzLnB1c2godGhpcy5idWxrTG9hZC5jcmVhdGVEb25lVG9rZW4oKSk7XG5cbiAgICBwcm9jZXNzLm5leHRUaWNrKGNhbGxiYWNrKTtcbiAgfVxufVxuXG4vKipcbiAqIEEgQnVsa0xvYWQgaW5zdGFuY2UgaXMgdXNlZCB0byBwZXJmb3JtIGEgYnVsayBpbnNlcnQuXG4gKlxuICogVXNlIFtbQ29ubmVjdGlvbi5uZXdCdWxrTG9hZF1dIHRvIGNyZWF0ZSBhIG5ldyBpbnN0YW5jZSwgYW5kIFtbQ29ubmVjdGlvbi5leGVjQnVsa0xvYWRdXSB0byBleGVjdXRlIGl0LlxuICpcbiAqIEV4YW1wbGUgb2YgQnVsa0xvYWQgVXNhZ2VzOlxuICpcbiAqIGBgYGpzXG4gKiAvLyBvcHRpb25hbCBCdWxrTG9hZCBvcHRpb25zXG4gKiBjb25zdCBvcHRpb25zID0geyBrZWVwTnVsbHM6IHRydWUgfTtcbiAqXG4gKiAvLyBpbnN0YW50aWF0ZSAtIHByb3ZpZGUgdGhlIHRhYmxlIHdoZXJlIHlvdSdsbCBiZSBpbnNlcnRpbmcgdG8sIG9wdGlvbnMgYW5kIGEgY2FsbGJhY2tcbiAqIGNvbnN0IGJ1bGtMb2FkID0gY29ubmVjdGlvbi5uZXdCdWxrTG9hZCgnTXlUYWJsZScsIG9wdGlvbnMsIChlcnJvciwgcm93Q291bnQpID0+IHtcbiAqICAgY29uc29sZS5sb2coJ2luc2VydGVkICVkIHJvd3MnLCByb3dDb3VudCk7XG4gKiB9KTtcbiAqXG4gKiAvLyBzZXR1cCB5b3VyIGNvbHVtbnMgLSBhbHdheXMgaW5kaWNhdGUgd2hldGhlciB0aGUgY29sdW1uIGlzIG51bGxhYmxlXG4gKiBidWxrTG9hZC5hZGRDb2x1bW4oJ215SW50JywgVFlQRVMuSW50LCB7IG51bGxhYmxlOiBmYWxzZSB9KTtcbiAqIGJ1bGtMb2FkLmFkZENvbHVtbignbXlTdHJpbmcnLCBUWVBFUy5OVmFyQ2hhciwgeyBsZW5ndGg6IDUwLCBudWxsYWJsZTogdHJ1ZSB9KTtcbiAqXG4gKiAvLyBleGVjdXRlXG4gKiBjb25uZWN0aW9uLmV4ZWNCdWxrTG9hZChidWxrTG9hZCwgW1xuICogICB7IG15SW50OiA3LCBteVN0cmluZzogJ2hlbGxvJyB9LFxuICogICB7IG15SW50OiAyMywgbXlTdHJpbmc6ICd3b3JsZCcgfVxuICogXSk7XG4gKiBgYGBcbiAqL1xuY2xhc3MgQnVsa0xvYWQgZXh0ZW5kcyBFdmVudEVtaXR0ZXIge1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGVycm9yOiBFcnJvciB8IHVuZGVmaW5lZDtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBjYW5jZWxlZDogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBleGVjdXRpb25TdGFydGVkOiBib29sZWFuO1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHN0cmVhbWluZ01vZGU6IGJvb2xlYW47XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgdGFibGU6IHN0cmluZztcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICB0aW1lb3V0OiBudW1iZXIgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBvcHRpb25zOiBJbnRlcm5hbENvbm5lY3Rpb25PcHRpb25zO1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGNhbGxiYWNrOiBDYWxsYmFjaztcblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGNvbHVtbnM6IEFycmF5PENvbHVtbj47XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgY29sdW1uc0J5TmFtZTogeyBbbmFtZTogc3RyaW5nXTogQ29sdW1uIH07XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBmaXJzdFJvd1dyaXR0ZW46IGJvb2xlYW47XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgcm93VG9QYWNrZXRUcmFuc2Zvcm06IFJvd1RyYW5zZm9ybTtcblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGJ1bGtPcHRpb25zOiBJbnRlcm5hbE9wdGlvbnM7XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBjb25uZWN0aW9uOiBDb25uZWN0aW9uIHwgdW5kZWZpbmVkO1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHJvd3M6IEFycmF5PGFueT4gfCB1bmRlZmluZWQ7XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgcnN0OiBBcnJheTxhbnk+IHwgdW5kZWZpbmVkO1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHJvd0NvdW50OiBudW1iZXIgfCB1bmRlZmluZWQ7XG5cbiAgY29sbGF0aW9uOiBDb2xsYXRpb24gfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBjb25zdHJ1Y3Rvcih0YWJsZTogc3RyaW5nLCBjb2xsYXRpb246IENvbGxhdGlvbiB8IHVuZGVmaW5lZCwgY29ubmVjdGlvbk9wdGlvbnM6IEludGVybmFsQ29ubmVjdGlvbk9wdGlvbnMsIHtcbiAgICBjaGVja0NvbnN0cmFpbnRzID0gZmFsc2UsXG4gICAgZmlyZVRyaWdnZXJzID0gZmFsc2UsXG4gICAga2VlcE51bGxzID0gZmFsc2UsXG4gICAgbG9ja1RhYmxlID0gZmFsc2UsXG4gICAgb3JkZXIgPSB7fSxcbiAgfTogT3B0aW9ucywgY2FsbGJhY2s6IENhbGxiYWNrKSB7XG4gICAgaWYgKHR5cGVvZiBjaGVja0NvbnN0cmFpbnRzICE9PSAnYm9vbGVhbicpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBcIm9wdGlvbnMuY2hlY2tDb25zdHJhaW50c1wiIHByb3BlcnR5IG11c3QgYmUgb2YgdHlwZSBib29sZWFuLicpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZmlyZVRyaWdnZXJzICE9PSAnYm9vbGVhbicpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBcIm9wdGlvbnMuZmlyZVRyaWdnZXJzXCIgcHJvcGVydHkgbXVzdCBiZSBvZiB0eXBlIGJvb2xlYW4uJyk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBrZWVwTnVsbHMgIT09ICdib29sZWFuJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwib3B0aW9ucy5rZWVwTnVsbHNcIiBwcm9wZXJ0eSBtdXN0IGJlIG9mIHR5cGUgYm9vbGVhbi4nKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGxvY2tUYWJsZSAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJvcHRpb25zLmxvY2tUYWJsZVwiIHByb3BlcnR5IG11c3QgYmUgb2YgdHlwZSBib29sZWFuLicpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2Ygb3JkZXIgIT09ICdvYmplY3QnIHx8IG9yZGVyID09PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJvcHRpb25zLm9yZGVyXCIgcHJvcGVydHkgbXVzdCBiZSBvZiB0eXBlIG9iamVjdC4nKTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IFtjb2x1bW4sIGRpcmVjdGlvbl0gb2YgT2JqZWN0LmVudHJpZXMob3JkZXIpKSB7XG4gICAgICBpZiAoZGlyZWN0aW9uICE9PSAnQVNDJyAmJiBkaXJlY3Rpb24gIT09ICdERVNDJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgdmFsdWUgb2YgdGhlIFwiJyArIGNvbHVtbiArICdcIiBrZXkgaW4gdGhlIFwib3B0aW9ucy5vcmRlclwiIG9iamVjdCBtdXN0IGJlIGVpdGhlciBcIkFTQ1wiIG9yIFwiREVTQ1wiLicpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHN1cGVyKCk7XG5cbiAgICB0aGlzLmVycm9yID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuY2FuY2VsZWQgPSBmYWxzZTtcbiAgICB0aGlzLmV4ZWN1dGlvblN0YXJ0ZWQgPSBmYWxzZTtcblxuICAgIHRoaXMuY29sbGF0aW9uID0gY29sbGF0aW9uO1xuXG4gICAgdGhpcy50YWJsZSA9IHRhYmxlO1xuICAgIHRoaXMub3B0aW9ucyA9IGNvbm5lY3Rpb25PcHRpb25zO1xuICAgIHRoaXMuY2FsbGJhY2sgPSBjYWxsYmFjaztcbiAgICB0aGlzLmNvbHVtbnMgPSBbXTtcbiAgICB0aGlzLmNvbHVtbnNCeU5hbWUgPSB7fTtcbiAgICB0aGlzLmZpcnN0Um93V3JpdHRlbiA9IGZhbHNlO1xuICAgIHRoaXMuc3RyZWFtaW5nTW9kZSA9IGZhbHNlO1xuXG4gICAgdGhpcy5yb3dUb1BhY2tldFRyYW5zZm9ybSA9IG5ldyBSb3dUcmFuc2Zvcm0odGhpcyk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdXNlLWJlZm9yZS1kZWZpbmVcblxuICAgIHRoaXMuYnVsa09wdGlvbnMgPSB7IGNoZWNrQ29uc3RyYWludHMsIGZpcmVUcmlnZ2Vycywga2VlcE51bGxzLCBsb2NrVGFibGUsIG9yZGVyIH07XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhIGNvbHVtbiB0byB0aGUgYnVsayBsb2FkLlxuICAgKlxuICAgKiBUaGUgY29sdW1uIGRlZmluaXRpb25zIHNob3VsZCBtYXRjaCB0aGUgdGFibGUgeW91IGFyZSB0cnlpbmcgdG8gaW5zZXJ0IGludG8uXG4gICAqIEF0dGVtcHRpbmcgdG8gY2FsbCBhZGRDb2x1bW4gYWZ0ZXIgdGhlIGZpcnN0IHJvdyBoYXMgYmVlbiBhZGRlZCB3aWxsIHRocm93IGFuIGV4Y2VwdGlvbi5cbiAgICpcbiAgICogYGBganNcbiAgICogYnVsa0xvYWQuYWRkQ29sdW1uKCdNeUludENvbHVtbicsIFRZUEVTLkludCwgeyBudWxsYWJsZTogZmFsc2UgfSk7XG4gICAqIGBgYFxuICAgKlxuICAgKiBAcGFyYW0gbmFtZSBUaGUgbmFtZSBvZiB0aGUgY29sdW1uLlxuICAgKiBAcGFyYW0gdHlwZSBPbmUgb2YgdGhlIHN1cHBvcnRlZCBgZGF0YSB0eXBlc2AuXG4gICAqIEBwYXJhbSBfX25hbWVkUGFyYW1ldGVycyBBZGRpdGlvbmFsIGNvbHVtbiB0eXBlIGluZm9ybWF0aW9uLiBBdCBhIG1pbmltdW0sIGBudWxsYWJsZWAgbXVzdCBiZSBzZXQgdG8gdHJ1ZSBvciBmYWxzZS5cbiAgICogQHBhcmFtIGxlbmd0aCBGb3IgVmFyQ2hhciwgTlZhckNoYXIsIFZhckJpbmFyeS4gVXNlIGxlbmd0aCBhcyBgSW5maW5pdHlgIGZvciBWYXJDaGFyKG1heCksIE5WYXJDaGFyKG1heCkgYW5kIFZhckJpbmFyeShtYXgpLlxuICAgKiBAcGFyYW0gbnVsbGFibGUgSW5kaWNhdGVzIHdoZXRoZXIgdGhlIGNvbHVtbiBhY2NlcHRzIE5VTEwgdmFsdWVzLlxuICAgKiBAcGFyYW0gb2JqTmFtZSBJZiB0aGUgbmFtZSBvZiB0aGUgY29sdW1uIGlzIGRpZmZlcmVudCBmcm9tIHRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eSBmb3VuZCBvbiBgcm93T2JqYCBhcmd1bWVudHMgcGFzc2VkIHRvIFtbYWRkUm93XV0gb3IgW1tDb25uZWN0aW9uLmV4ZWNCdWxrTG9hZF1dLCB0aGVuIHlvdSBjYW4gdXNlIHRoaXMgb3B0aW9uIHRvIHNwZWNpZnkgdGhlIHByb3BlcnR5IG5hbWUuXG4gICAqIEBwYXJhbSBwcmVjaXNpb24gRm9yIE51bWVyaWMsIERlY2ltYWwuXG4gICAqIEBwYXJhbSBzY2FsZSBGb3IgTnVtZXJpYywgRGVjaW1hbCwgVGltZSwgRGF0ZVRpbWUyLCBEYXRlVGltZU9mZnNldC5cbiAgKi9cbiAgYWRkQ29sdW1uKG5hbWU6IHN0cmluZywgdHlwZTogRGF0YVR5cGUsIHsgb3V0cHV0ID0gZmFsc2UsIGxlbmd0aCwgcHJlY2lzaW9uLCBzY2FsZSwgb2JqTmFtZSA9IG5hbWUsIG51bGxhYmxlID0gdHJ1ZSB9OiBDb2x1bW5PcHRpb25zKSB7XG4gICAgaWYgKHRoaXMuZmlyc3RSb3dXcml0dGVuKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvbHVtbnMgY2Fubm90IGJlIGFkZGVkIHRvIGJ1bGsgaW5zZXJ0IGFmdGVyIHRoZSBmaXJzdCByb3cgaGFzIGJlZW4gd3JpdHRlbi4nKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuZXhlY3V0aW9uU3RhcnRlZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb2x1bW5zIGNhbm5vdCBiZSBhZGRlZCB0byBidWxrIGluc2VydCBhZnRlciBleGVjdXRpb24gaGFzIHN0YXJ0ZWQuJyk7XG4gICAgfVxuXG4gICAgY29uc3QgY29sdW1uOiBDb2x1bW4gPSB7XG4gICAgICB0eXBlOiB0eXBlLFxuICAgICAgbmFtZTogbmFtZSxcbiAgICAgIHZhbHVlOiBudWxsLFxuICAgICAgb3V0cHV0OiBvdXRwdXQsXG4gICAgICBsZW5ndGg6IGxlbmd0aCxcbiAgICAgIHByZWNpc2lvbjogcHJlY2lzaW9uLFxuICAgICAgc2NhbGU6IHNjYWxlLFxuICAgICAgb2JqTmFtZTogb2JqTmFtZSxcbiAgICAgIG51bGxhYmxlOiBudWxsYWJsZSxcbiAgICAgIGNvbGxhdGlvbjogdGhpcy5jb2xsYXRpb25cbiAgICB9O1xuXG4gICAgaWYgKCh0eXBlLmlkICYgMHgzMCkgPT09IDB4MjApIHtcbiAgICAgIGlmIChjb2x1bW4ubGVuZ3RoID09IG51bGwgJiYgdHlwZS5yZXNvbHZlTGVuZ3RoKSB7XG4gICAgICAgIGNvbHVtbi5sZW5ndGggPSB0eXBlLnJlc29sdmVMZW5ndGgoY29sdW1uKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodHlwZS5yZXNvbHZlUHJlY2lzaW9uICYmIGNvbHVtbi5wcmVjaXNpb24gPT0gbnVsbCkge1xuICAgICAgY29sdW1uLnByZWNpc2lvbiA9IHR5cGUucmVzb2x2ZVByZWNpc2lvbihjb2x1bW4pO1xuICAgIH1cblxuICAgIGlmICh0eXBlLnJlc29sdmVTY2FsZSAmJiBjb2x1bW4uc2NhbGUgPT0gbnVsbCkge1xuICAgICAgY29sdW1uLnNjYWxlID0gdHlwZS5yZXNvbHZlU2NhbGUoY29sdW1uKTtcbiAgICB9XG5cbiAgICB0aGlzLmNvbHVtbnMucHVzaChjb2x1bW4pO1xuXG4gICAgdGhpcy5jb2x1bW5zQnlOYW1lW25hbWVdID0gY29sdW1uO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBnZXRPcHRpb25zU3FsKCkge1xuICAgIGNvbnN0IGFkZE9wdGlvbnMgPSBbXTtcblxuICAgIGlmICh0aGlzLmJ1bGtPcHRpb25zLmNoZWNrQ29uc3RyYWludHMpIHtcbiAgICAgIGFkZE9wdGlvbnMucHVzaCgnQ0hFQ0tfQ09OU1RSQUlOVFMnKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5idWxrT3B0aW9ucy5maXJlVHJpZ2dlcnMpIHtcbiAgICAgIGFkZE9wdGlvbnMucHVzaCgnRklSRV9UUklHR0VSUycpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmJ1bGtPcHRpb25zLmtlZXBOdWxscykge1xuICAgICAgYWRkT3B0aW9ucy5wdXNoKCdLRUVQX05VTExTJyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuYnVsa09wdGlvbnMubG9ja1RhYmxlKSB7XG4gICAgICBhZGRPcHRpb25zLnB1c2goJ1RBQkxPQ0snKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5idWxrT3B0aW9ucy5vcmRlcikge1xuICAgICAgY29uc3Qgb3JkZXJDb2x1bW5zID0gW107XG5cbiAgICAgIGZvciAoY29uc3QgW2NvbHVtbiwgZGlyZWN0aW9uXSBvZiBPYmplY3QuZW50cmllcyh0aGlzLmJ1bGtPcHRpb25zLm9yZGVyKSkge1xuICAgICAgICBvcmRlckNvbHVtbnMucHVzaChgJHtjb2x1bW59ICR7ZGlyZWN0aW9ufWApO1xuICAgICAgfVxuXG4gICAgICBpZiAob3JkZXJDb2x1bW5zLmxlbmd0aCkge1xuICAgICAgICBhZGRPcHRpb25zLnB1c2goYE9SREVSICgke29yZGVyQ29sdW1ucy5qb2luKCcsICcpfSlgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoYWRkT3B0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4gYCBXSVRIICgke2FkZE9wdGlvbnMuam9pbignLCcpfSlgO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBnZXRCdWxrSW5zZXJ0U3FsKCkge1xuICAgIGxldCBzcWwgPSAnaW5zZXJ0IGJ1bGsgJyArIHRoaXMudGFibGUgKyAnKCc7XG4gICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IHRoaXMuY29sdW1ucy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgY29uc3QgYyA9IHRoaXMuY29sdW1uc1tpXTtcbiAgICAgIGlmIChpICE9PSAwKSB7XG4gICAgICAgIHNxbCArPSAnLCAnO1xuICAgICAgfVxuICAgICAgc3FsICs9ICdbJyArIGMubmFtZSArICddICcgKyAoYy50eXBlLmRlY2xhcmF0aW9uKGMpKTtcbiAgICB9XG4gICAgc3FsICs9ICcpJztcblxuICAgIHNxbCArPSB0aGlzLmdldE9wdGlvbnNTcWwoKTtcbiAgICByZXR1cm4gc3FsO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgaXMgc2ltcGx5IGEgaGVscGVyIHV0aWxpdHkgZnVuY3Rpb24gd2hpY2ggcmV0dXJucyBhIGBDUkVBVEUgVEFCTEUgU1FMYCBzdGF0ZW1lbnQgYmFzZWQgb24gdGhlIGNvbHVtbnMgYWRkZWQgdG8gdGhlIGJ1bGtMb2FkIG9iamVjdC5cbiAgICogVGhpcyBtYXkgYmUgcGFydGljdWxhcmx5IGhhbmR5IHdoZW4geW91IHdhbnQgdG8gaW5zZXJ0IGludG8gYSB0ZW1wb3JhcnkgdGFibGUgKGEgdGFibGUgd2hpY2ggc3RhcnRzIHdpdGggYCNgKS5cbiAgICpcbiAgICogYGBganNcbiAgICogdmFyIHNxbCA9IGJ1bGtMb2FkLmdldFRhYmxlQ3JlYXRpb25TcWwoKTtcbiAgICogYGBgXG4gICAqXG4gICAqIEEgc2lkZSBub3RlIG9uIGJ1bGsgaW5zZXJ0aW5nIGludG8gdGVtcG9yYXJ5IHRhYmxlczogaWYgeW91IHdhbnQgdG8gYWNjZXNzIGEgbG9jYWwgdGVtcG9yYXJ5IHRhYmxlIGFmdGVyIGV4ZWN1dGluZyB0aGUgYnVsayBsb2FkLFxuICAgKiB5b3UnbGwgbmVlZCB0byB1c2UgdGhlIHNhbWUgY29ubmVjdGlvbiBhbmQgZXhlY3V0ZSB5b3VyIHJlcXVlc3RzIHVzaW5nIFtbQ29ubmVjdGlvbi5leGVjU3FsQmF0Y2hdXSBpbnN0ZWFkIG9mIFtbQ29ubmVjdGlvbi5leGVjU3FsXV1cbiAgICovXG4gIGdldFRhYmxlQ3JlYXRpb25TcWwoKSB7XG4gICAgbGV0IHNxbCA9ICdDUkVBVEUgVEFCTEUgJyArIHRoaXMudGFibGUgKyAnKFxcbic7XG4gICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IHRoaXMuY29sdW1ucy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgY29uc3QgYyA9IHRoaXMuY29sdW1uc1tpXTtcbiAgICAgIGlmIChpICE9PSAwKSB7XG4gICAgICAgIHNxbCArPSAnLFxcbic7XG4gICAgICB9XG4gICAgICBzcWwgKz0gJ1snICsgYy5uYW1lICsgJ10gJyArIChjLnR5cGUuZGVjbGFyYXRpb24oYykpO1xuICAgICAgaWYgKGMubnVsbGFibGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBzcWwgKz0gJyAnICsgKGMubnVsbGFibGUgPyAnTlVMTCcgOiAnTk9UIE5VTEwnKTtcbiAgICAgIH1cbiAgICB9XG4gICAgc3FsICs9ICdcXG4pJztcbiAgICByZXR1cm4gc3FsO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBnZXRDb2xNZXRhRGF0YSgpIHtcbiAgICBjb25zdCB0QnVmID0gbmV3IFdyaXRhYmxlVHJhY2tpbmdCdWZmZXIoMTAwLCBudWxsLCB0cnVlKTtcbiAgICAvLyBUb2tlblR5cGVcbiAgICB0QnVmLndyaXRlVUludDgoVE9LRU5fVFlQRS5DT0xNRVRBREFUQSk7XG4gICAgLy8gQ291bnRcbiAgICB0QnVmLndyaXRlVUludDE2TEUodGhpcy5jb2x1bW5zLmxlbmd0aCk7XG5cbiAgICBmb3IgKGxldCBqID0gMCwgbGVuID0gdGhpcy5jb2x1bW5zLmxlbmd0aDsgaiA8IGxlbjsgaisrKSB7XG4gICAgICBjb25zdCBjID0gdGhpcy5jb2x1bW5zW2pdO1xuICAgICAgLy8gVXNlclR5cGVcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMudGRzVmVyc2lvbiA8ICc3XzInKSB7XG4gICAgICAgIHRCdWYud3JpdGVVSW50MTZMRSgwKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRCdWYud3JpdGVVSW50MzJMRSgwKTtcbiAgICAgIH1cblxuICAgICAgLy8gRmxhZ3NcbiAgICAgIGxldCBmbGFncyA9IEZMQUdTLnVwZGF0ZWFibGVSZWFkV3JpdGU7XG4gICAgICBpZiAoYy5udWxsYWJsZSkge1xuICAgICAgICBmbGFncyB8PSBGTEFHUy5udWxsYWJsZTtcbiAgICAgIH0gZWxzZSBpZiAoYy5udWxsYWJsZSA9PT0gdW5kZWZpbmVkICYmIHRoaXMub3B0aW9ucy50ZHNWZXJzaW9uID49ICc3XzInKSB7XG4gICAgICAgIGZsYWdzIHw9IEZMQUdTLm51bGxhYmxlVW5rbm93bjtcbiAgICAgIH1cbiAgICAgIHRCdWYud3JpdGVVSW50MTZMRShmbGFncyk7XG5cbiAgICAgIC8vIFRZUEVfSU5GT1xuICAgICAgdEJ1Zi53cml0ZUJ1ZmZlcihjLnR5cGUuZ2VuZXJhdGVUeXBlSW5mbyhjLCB0aGlzLm9wdGlvbnMpKTtcblxuICAgICAgLy8gVGFibGVOYW1lXG4gICAgICBpZiAoYy50eXBlLmhhc1RhYmxlTmFtZSkge1xuICAgICAgICB0QnVmLndyaXRlVXNWYXJjaGFyKHRoaXMudGFibGUsICd1Y3MyJyk7XG4gICAgICB9XG5cbiAgICAgIC8vIENvbE5hbWVcbiAgICAgIHRCdWYud3JpdGVCVmFyY2hhcihjLm5hbWUsICd1Y3MyJyk7XG4gICAgfVxuICAgIHJldHVybiB0QnVmLmRhdGE7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyBhIHRpbWVvdXQgZm9yIHRoaXMgYnVsayBsb2FkLlxuICAgKlxuICAgKiBgYGBqc1xuICAgKiBidWxrTG9hZC5zZXRUaW1lb3V0KHRpbWVvdXQpO1xuICAgKiBgYGBcbiAgICpcbiAgICogQHBhcmFtIHRpbWVvdXQgVGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgYmVmb3JlIHRoZSBidWxrIGxvYWQgaXMgY29uc2lkZXJlZCBmYWlsZWQsIG9yIDAgZm9yIG5vIHRpbWVvdXQuXG4gICAqICAgV2hlbiBubyB0aW1lb3V0IGlzIHNldCBmb3IgdGhlIGJ1bGsgbG9hZCwgdGhlIFtbQ29ubmVjdGlvbk9wdGlvbnMucmVxdWVzdFRpbWVvdXRdXSBvZiB0aGUgQ29ubmVjdGlvbiBpcyB1c2VkLlxuICAgKi9cbiAgc2V0VGltZW91dCh0aW1lb3V0PzogbnVtYmVyKSB7XG4gICAgdGhpcy50aW1lb3V0ID0gdGltZW91dDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgY3JlYXRlRG9uZVRva2VuKCkge1xuICAgIC8vIEl0IG1pZ2h0IGJlIG5pY2UgdG8gbWFrZSBEb25lVG9rZW4gYSBjbGFzcyBpZiBhbnl0aGluZyBuZWVkcyB0byBjcmVhdGUgdGhlbSwgYnV0IGZvciBub3csIGp1c3QgZG8gaXQgaGVyZVxuICAgIGNvbnN0IHRCdWYgPSBuZXcgV3JpdGFibGVUcmFja2luZ0J1ZmZlcih0aGlzLm9wdGlvbnMudGRzVmVyc2lvbiA8ICc3XzInID8gOSA6IDEzKTtcbiAgICB0QnVmLndyaXRlVUludDgoVE9LRU5fVFlQRS5ET05FKTtcbiAgICBjb25zdCBzdGF0dXMgPSBET05FX1NUQVRVUy5GSU5BTDtcbiAgICB0QnVmLndyaXRlVUludDE2TEUoc3RhdHVzKTtcbiAgICB0QnVmLndyaXRlVUludDE2TEUoMCk7IC8vIEN1ckNtZCAoVERTIGlnbm9yZXMgdGhpcylcbiAgICB0QnVmLndyaXRlVUludDMyTEUoMCk7IC8vIHJvdyBjb3VudCAtIGRvZXNuJ3QgcmVhbGx5IG1hdHRlclxuICAgIGlmICh0aGlzLm9wdGlvbnMudGRzVmVyc2lvbiA+PSAnN18yJykge1xuICAgICAgdEJ1Zi53cml0ZVVJbnQzMkxFKDApOyAvLyByb3cgY291bnQgaXMgNjQgYml0cyBpbiA+PSBURFMgNy4yXG4gICAgfVxuICAgIHJldHVybiB0QnVmLmRhdGE7XG4gIH1cblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGNhbmNlbCgpIHtcbiAgICBpZiAodGhpcy5jYW5jZWxlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuY2FuY2VsZWQgPSB0cnVlO1xuICAgIHRoaXMuZW1pdCgnY2FuY2VsJyk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQnVsa0xvYWQ7XG5tb2R1bGUuZXhwb3J0cyA9IEJ1bGtMb2FkO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxJQUFBQSxPQUFBLEdBQUFD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
|
|
514
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZXZlbnRzIiwicmVxdWlyZSIsIl93cml0YWJsZVRyYWNraW5nQnVmZmVyIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsIl9zdHJlYW0iLCJfdG9rZW4iLCJvYmoiLCJfX2VzTW9kdWxlIiwiZGVmYXVsdCIsIkZMQUdTIiwibnVsbGFibGUiLCJjYXNlU2VuIiwidXBkYXRlYWJsZVJlYWRXcml0ZSIsInVwZGF0ZWFibGVVbmtub3duIiwiaWRlbnRpdHkiLCJjb21wdXRlZCIsImZpeGVkTGVuQ0xSVHlwZSIsInNwYXJzZUNvbHVtblNldCIsImhpZGRlbiIsImtleSIsIm51bGxhYmxlVW5rbm93biIsIkRPTkVfU1RBVFVTIiwiRklOQUwiLCJNT1JFIiwiRVJST1IiLCJJTlhBQ1QiLCJDT1VOVCIsIkFUVE4iLCJTUlZFUlJPUiIsInJvd1Rva2VuQnVmZmVyIiwiQnVmZmVyIiwiZnJvbSIsIlRPS0VOX1RZUEUiLCJST1ciLCJ0ZXh0UG9pbnRlckFuZFRpbWVzdGFtcEJ1ZmZlciIsInRleHRQb2ludGVyTnVsbEJ1ZmZlciIsIlJvd1RyYW5zZm9ybSIsIlRyYW5zZm9ybSIsImNvbnN0cnVjdG9yIiwiYnVsa0xvYWQiLCJ3cml0YWJsZU9iamVjdE1vZGUiLCJtYWluT3B0aW9ucyIsIm9wdGlvbnMiLCJjb2x1bW5zIiwiY29sdW1uTWV0YWRhdGFXcml0dGVuIiwiX3RyYW5zZm9ybSIsInJvdyIsIl9lbmNvZGluZyIsImNhbGxiYWNrIiwicHVzaCIsImdldENvbE1ldGFEYXRhIiwiaSIsImxlbmd0aCIsImMiLCJ2YWx1ZSIsIkFycmF5IiwiaXNBcnJheSIsIm9iak5hbWUiLCJmaXJzdFJvd1dyaXR0ZW4iLCJ0eXBlIiwidmFsaWRhdGUiLCJjb2xsYXRpb24iLCJlcnJvciIsInBhcmFtZXRlciIsInNjYWxlIiwicHJlY2lzaW9uIiwibmFtZSIsImdlbmVyYXRlUGFyYW1ldGVyTGVuZ3RoIiwiY2h1bmsiLCJnZW5lcmF0ZVBhcmFtZXRlckRhdGEiLCJwcm9jZXNzIiwibmV4dFRpY2siLCJfZmx1c2giLCJjcmVhdGVEb25lVG9rZW4iLCJCdWxrTG9hZCIsIkV2ZW50RW1pdHRlciIsInRhYmxlIiwiY29ubmVjdGlvbk9wdGlvbnMiLCJjaGVja0NvbnN0cmFpbnRzIiwiZmlyZVRyaWdnZXJzIiwia2VlcE51bGxzIiwibG9ja1RhYmxlIiwib3JkZXIiLCJUeXBlRXJyb3IiLCJjb2x1bW4iLCJkaXJlY3Rpb24iLCJPYmplY3QiLCJlbnRyaWVzIiwidW5kZWZpbmVkIiwiY2FuY2VsZWQiLCJleGVjdXRpb25TdGFydGVkIiwiY29sdW1uc0J5TmFtZSIsInN0cmVhbWluZ01vZGUiLCJyb3dUb1BhY2tldFRyYW5zZm9ybSIsImJ1bGtPcHRpb25zIiwiYWRkQ29sdW1uIiwib3V0cHV0IiwiRXJyb3IiLCJpZCIsInJlc29sdmVMZW5ndGgiLCJyZXNvbHZlUHJlY2lzaW9uIiwicmVzb2x2ZVNjYWxlIiwiZ2V0T3B0aW9uc1NxbCIsImFkZE9wdGlvbnMiLCJvcmRlckNvbHVtbnMiLCJqb2luIiwiZ2V0QnVsa0luc2VydFNxbCIsInNxbCIsImxlbiIsImRlY2xhcmF0aW9uIiwiZ2V0VGFibGVDcmVhdGlvblNxbCIsInRCdWYiLCJXcml0YWJsZVRyYWNraW5nQnVmZmVyIiwid3JpdGVVSW50OCIsIkNPTE1FVEFEQVRBIiwid3JpdGVVSW50MTZMRSIsImoiLCJ0ZHNWZXJzaW9uIiwid3JpdGVVSW50MzJMRSIsImZsYWdzIiwid3JpdGVCdWZmZXIiLCJnZW5lcmF0ZVR5cGVJbmZvIiwiaGFzVGFibGVOYW1lIiwid3JpdGVVc1ZhcmNoYXIiLCJ3cml0ZUJWYXJjaGFyIiwiZGF0YSIsInNldFRpbWVvdXQiLCJ0aW1lb3V0IiwiRE9ORSIsInN0YXR1cyIsImNhbmNlbCIsImVtaXQiLCJfZGVmYXVsdCIsImV4cG9ydHMiLCJtb2R1bGUiXSwic291cmNlcyI6WyIuLi9zcmMvYnVsay1sb2FkLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEV2ZW50RW1pdHRlciB9IGZyb20gJ2V2ZW50cyc7XG5pbXBvcnQgV3JpdGFibGVUcmFja2luZ0J1ZmZlciBmcm9tICcuL3RyYWNraW5nLWJ1ZmZlci93cml0YWJsZS10cmFja2luZy1idWZmZXInO1xuaW1wb3J0IENvbm5lY3Rpb24sIHsgdHlwZSBJbnRlcm5hbENvbm5lY3Rpb25PcHRpb25zIH0gZnJvbSAnLi9jb25uZWN0aW9uJztcblxuaW1wb3J0IHsgVHJhbnNmb3JtIH0gZnJvbSAnc3RyZWFtJztcbmltcG9ydCB7IFRZUEUgYXMgVE9LRU5fVFlQRSB9IGZyb20gJy4vdG9rZW4vdG9rZW4nO1xuXG5pbXBvcnQgeyB0eXBlIERhdGFUeXBlLCB0eXBlIFBhcmFtZXRlciB9IGZyb20gJy4vZGF0YS10eXBlJztcbmltcG9ydCB7IENvbGxhdGlvbiB9IGZyb20gJy4vY29sbGF0aW9uJztcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5jb25zdCBGTEFHUyA9IHtcbiAgbnVsbGFibGU6IDEgPDwgMCxcbiAgY2FzZVNlbjogMSA8PCAxLFxuICB1cGRhdGVhYmxlUmVhZFdyaXRlOiAxIDw8IDIsXG4gIHVwZGF0ZWFibGVVbmtub3duOiAxIDw8IDMsXG4gIGlkZW50aXR5OiAxIDw8IDQsXG4gIGNvbXB1dGVkOiAxIDw8IDUsIC8vIGludHJvZHVjZWQgaW4gVERTIDcuMlxuICBmaXhlZExlbkNMUlR5cGU6IDEgPDwgOCwgLy8gaW50cm9kdWNlZCBpbiBURFMgNy4yXG4gIHNwYXJzZUNvbHVtblNldDogMSA8PCAxMCwgLy8gaW50cm9kdWNlZCBpbiBURFMgNy4zLkJcbiAgaGlkZGVuOiAxIDw8IDEzLCAvLyBpbnRyb2R1Y2VkIGluIFREUyA3LjJcbiAga2V5OiAxIDw8IDE0LCAvLyBpbnRyb2R1Y2VkIGluIFREUyA3LjJcbiAgbnVsbGFibGVVbmtub3duOiAxIDw8IDE1IC8vIGludHJvZHVjZWQgaW4gVERTIDcuMlxufTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5jb25zdCBET05FX1NUQVRVUyA9IHtcbiAgRklOQUw6IDB4MDAsXG4gIE1PUkU6IDB4MSxcbiAgRVJST1I6IDB4MixcbiAgSU5YQUNUOiAweDQsXG4gIENPVU5UOiAweDEwLFxuICBBVFROOiAweDIwLFxuICBTUlZFUlJPUjogMHgxMDBcbn07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuaW50ZXJmYWNlIEludGVybmFsT3B0aW9ucyB7XG4gIGNoZWNrQ29uc3RyYWludHM6IGJvb2xlYW47XG4gIGZpcmVUcmlnZ2VyczogYm9vbGVhbjtcbiAga2VlcE51bGxzOiBib29sZWFuO1xuICBsb2NrVGFibGU6IGJvb2xlYW47XG4gIG9yZGVyOiB7IFtjb2x1bW5OYW1lOiBzdHJpbmddOiAnQVNDJyB8ICdERVNDJyB9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE9wdGlvbnMge1xuICAvKipcbiAgICogSG9ub3JzIGNvbnN0cmFpbnRzIGR1cmluZyBidWxrIGxvYWQsIHVzaW5nIFQtU1FMXG4gICAqIFtDSEVDS19DT05TVFJBSU5UU10oaHR0cHM6Ly90ZWNobmV0Lm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS9tczE4NjI0Nyh2PXNxbC4xMDUpLmFzcHgpLlxuICAgKiAoZGVmYXVsdDogYGZhbHNlYClcbiAgICovXG4gIGNoZWNrQ29uc3RyYWludHM/OiBJbnRlcm5hbE9wdGlvbnNbJ2NoZWNrQ29uc3RyYWludHMnXSB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogSG9ub3JzIGluc2VydCB0cmlnZ2VycyBkdXJpbmcgYnVsayBsb2FkLCB1c2luZyB0aGUgVC1TUUwgW0ZJUkVfVFJJR0dFUlNdKGh0dHBzOi8vdGVjaG5ldC5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvbXMxODc2NDAodj1zcWwuMTA1KS5hc3B4KS4gKGRlZmF1bHQ6IGBmYWxzZWApXG4gICAqL1xuICBmaXJlVHJpZ2dlcnM/OiBJbnRlcm5hbE9wdGlvbnNbJ2ZpcmVUcmlnZ2VycyddIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBIb25vcnMgbnVsbCB2YWx1ZSBwYXNzZWQsIGlnbm9yZXMgdGhlIGRlZmF1bHQgdmFsdWVzIHNldCBvbiB0YWJsZSwgdXNpbmcgVC1TUUwgW0tFRVBfTlVMTFNdKGh0dHBzOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvbXMxODc4ODcodj1zcWwuMTIwKS5hc3B4KS4gKGRlZmF1bHQ6IGBmYWxzZWApXG4gICAqL1xuICBrZWVwTnVsbHM/OiBJbnRlcm5hbE9wdGlvbnNbJ2tlZXBOdWxscyddIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBQbGFjZXMgYSBidWxrIHVwZGF0ZShCVSkgbG9jayBvbiB0YWJsZSB3aGlsZSBwZXJmb3JtaW5nIGJ1bGsgbG9hZCwgdXNpbmcgVC1TUUwgW1RBQkxPQ0tdKGh0dHBzOi8vdGVjaG5ldC5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvbXMxODA4NzYodj1zcWwuMTA1KS5hc3B4KS4gKGRlZmF1bHQ6IGBmYWxzZWApXG4gICAqL1xuICBsb2NrVGFibGU/OiBJbnRlcm5hbE9wdGlvbnNbJ2xvY2tUYWJsZSddIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgdGhlIG9yZGVyaW5nIG9mIHRoZSBkYXRhIHRvIHBvc3NpYmx5IGluY3JlYXNlIGJ1bGsgaW5zZXJ0IHBlcmZvcm1hbmNlLCB1c2luZyBULVNRTCBbT1JERVJdKGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL3ByZXZpb3VzLXZlcnNpb25zL3NxbC9zcWwtc2VydmVyLTIwMDgtcjIvbXMxNzc0Njgodj1zcWwuMTA1KSkuIChkZWZhdWx0OiBge31gKVxuICAgKi9cbiAgb3JkZXI/OiBJbnRlcm5hbE9wdGlvbnNbJ29yZGVyJ10gfCB1bmRlZmluZWQ7XG59XG5cblxuZXhwb3J0IHR5cGUgQ2FsbGJhY2sgPVxuICAvKipcbiAgICogQSBmdW5jdGlvbiB3aGljaCB3aWxsIGJlIGNhbGxlZCBhZnRlciB0aGUgW1tCdWxrTG9hZF1dIGZpbmlzaGVzIGV4ZWN1dGluZy5cbiAgICpcbiAgICogQHBhcmFtIHJvd0NvdW50IHRoZSBudW1iZXIgb2Ygcm93cyBpbnNlcnRlZFxuICAgKi9cbiAgKGVycjogRXJyb3IgfCB1bmRlZmluZWQgfCBudWxsLCByb3dDb3VudD86IG51bWJlcikgPT4gdm9pZDtcblxuaW50ZXJmYWNlIENvbHVtbiBleHRlbmRzIFBhcmFtZXRlciB7XG4gIG9iak5hbWU6IHN0cmluZztcbiAgY29sbGF0aW9uOiBDb2xsYXRpb24gfCB1bmRlZmluZWQ7XG59XG5cbmludGVyZmFjZSBDb2x1bW5PcHRpb25zIHtcbiAgb3V0cHV0PzogYm9vbGVhbjtcblxuICAvKipcbiAgICogRm9yIFZhckNoYXIsIE5WYXJDaGFyLCBWYXJCaW5hcnkuIFVzZSBsZW5ndGggYXMgYEluZmluaXR5YCBmb3IgVmFyQ2hhcihtYXgpLCBOVmFyQ2hhcihtYXgpIGFuZCBWYXJCaW5hcnkobWF4KS5cbiAgICovXG4gIGxlbmd0aD86IG51bWJlcjtcblxuICAvKipcbiAgICogRm9yIE51bWVyaWMsIERlY2ltYWwuXG4gICAqL1xuICBwcmVjaXNpb24/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIEZvciBOdW1lcmljLCBEZWNpbWFsLCBUaW1lLCBEYXRlVGltZTIsIERhdGVUaW1lT2Zmc2V0LlxuICAgKi9cbiAgc2NhbGU/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIElmIHRoZSBuYW1lIG9mIHRoZSBjb2x1bW4gaXMgZGlmZmVyZW50IGZyb20gdGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5IGZvdW5kIG9uIGByb3dPYmpgIGFyZ3VtZW50cyBwYXNzZWQgdG8gW1thZGRSb3ddXSwgdGhlbiB5b3UgY2FuIHVzZSB0aGlzIG9wdGlvbiB0byBzcGVjaWZ5IHRoZSBwcm9wZXJ0eSBuYW1lLlxuICAgKi9cbiAgb2JqTmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIGNvbHVtbiBhY2NlcHRzIE5VTEwgdmFsdWVzLlxuICAgKi9cbiAgbnVsbGFibGU/OiBib29sZWFuO1xufVxuXG5jb25zdCByb3dUb2tlbkJ1ZmZlciA9IEJ1ZmZlci5mcm9tKFsgVE9LRU5fVFlQRS5ST1cgXSk7XG5jb25zdCB0ZXh0UG9pbnRlckFuZFRpbWVzdGFtcEJ1ZmZlciA9IEJ1ZmZlci5mcm9tKFtcbiAgLy8gVGV4dFBvaW50ZXIgbGVuZ3RoXG4gIDB4MTAsXG5cbiAgLy8gVGV4dFBvaW50ZXJcbiAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCxcblxuICAvLyBUaW1lc3RhbXBcbiAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMFxuXSk7XG5jb25zdCB0ZXh0UG9pbnRlck51bGxCdWZmZXIgPSBCdWZmZXIuZnJvbShbMHgwMF0pO1xuXG4vLyBBIHRyYW5zZm9ybSB0aGF0IGNvbnZlcnRzIHJvd3MgdG8gcGFja2V0cy5cbmNsYXNzIFJvd1RyYW5zZm9ybSBleHRlbmRzIFRyYW5zZm9ybSB7XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZGVjbGFyZSBjb2x1bW5NZXRhZGF0YVdyaXR0ZW46IGJvb2xlYW47XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZGVjbGFyZSBidWxrTG9hZDogQnVsa0xvYWQ7XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZGVjbGFyZSBtYWluT3B0aW9uczogQnVsa0xvYWRbJ29wdGlvbnMnXTtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBkZWNsYXJlIGNvbHVtbnM6IEJ1bGtMb2FkWydjb2x1bW5zJ107XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBjb25zdHJ1Y3RvcihidWxrTG9hZDogQnVsa0xvYWQpIHtcbiAgICBzdXBlcih7IHdyaXRhYmxlT2JqZWN0TW9kZTogdHJ1ZSB9KTtcblxuICAgIHRoaXMuYnVsa0xvYWQgPSBidWxrTG9hZDtcbiAgICB0aGlzLm1haW5PcHRpb25zID0gYnVsa0xvYWQub3B0aW9ucztcbiAgICB0aGlzLmNvbHVtbnMgPSBidWxrTG9hZC5jb2x1bW5zO1xuXG4gICAgdGhpcy5jb2x1bW5NZXRhZGF0YVdyaXR0ZW4gPSBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3RyYW5zZm9ybShyb3c6IEFycmF5PHVua25vd24+IHwgeyBbY29sTmFtZTogc3RyaW5nXTogdW5rbm93biB9LCBfZW5jb2Rpbmc6IHN0cmluZywgY2FsbGJhY2s6IChlcnJvcj86IEVycm9yKSA9PiB2b2lkKSB7XG4gICAgaWYgKCF0aGlzLmNvbHVtbk1ldGFkYXRhV3JpdHRlbikge1xuICAgICAgdGhpcy5wdXNoKHRoaXMuYnVsa0xvYWQuZ2V0Q29sTWV0YURhdGEoKSk7XG4gICAgICB0aGlzLmNvbHVtbk1ldGFkYXRhV3JpdHRlbiA9IHRydWU7XG4gICAgfVxuXG4gICAgdGhpcy5wdXNoKHJvd1Rva2VuQnVmZmVyKTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5jb2x1bW5zLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBjID0gdGhpcy5jb2x1bW5zW2ldO1xuICAgICAgbGV0IHZhbHVlID0gQXJyYXkuaXNBcnJheShyb3cpID8gcm93W2ldIDogcm93W2Mub2JqTmFtZV07XG5cbiAgICAgIGlmICghdGhpcy5idWxrTG9hZC5maXJzdFJvd1dyaXR0ZW4pIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB2YWx1ZSA9IGMudHlwZS52YWxpZGF0ZSh2YWx1ZSwgYy5jb2xsYXRpb24pO1xuICAgICAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycm9yKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCBwYXJhbWV0ZXIgPSB7XG4gICAgICAgIGxlbmd0aDogYy5sZW5ndGgsXG4gICAgICAgIHNjYWxlOiBjLnNjYWxlLFxuICAgICAgICBwcmVjaXNpb246IGMucHJlY2lzaW9uLFxuICAgICAgICB2YWx1ZTogdmFsdWVcbiAgICAgIH07XG5cbiAgICAgIGlmIChjLnR5cGUubmFtZSA9PT0gJ1RleHQnIHx8IGMudHlwZS5uYW1lID09PSAnSW1hZ2UnIHx8IGMudHlwZS5uYW1lID09PSAnTlRleHQnKSB7XG4gICAgICAgIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4gICAgICAgICAgdGhpcy5wdXNoKHRleHRQb2ludGVyTnVsbEJ1ZmZlcik7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnB1c2godGV4dFBvaW50ZXJBbmRUaW1lc3RhbXBCdWZmZXIpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnB1c2goYy50eXBlLmdlbmVyYXRlUGFyYW1ldGVyTGVuZ3RoKHBhcmFtZXRlciwgdGhpcy5tYWluT3B0aW9ucykpO1xuICAgICAgZm9yIChjb25zdCBjaHVuayBvZiBjLnR5cGUuZ2VuZXJhdGVQYXJhbWV0ZXJEYXRhKHBhcmFtZXRlciwgdGhpcy5tYWluT3B0aW9ucykpIHtcbiAgICAgICAgdGhpcy5wdXNoKGNodW5rKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBwcm9jZXNzLm5leHRUaWNrKGNhbGxiYWNrKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2ZsdXNoKGNhbGxiYWNrOiAoKSA9PiB2b2lkKSB7XG4gICAgdGhpcy5wdXNoKHRoaXMuYnVsa0xvYWQuY3JlYXRlRG9uZVRva2VuKCkpO1xuXG4gICAgcHJvY2Vzcy5uZXh0VGljayhjYWxsYmFjayk7XG4gIH1cbn1cblxuLyoqXG4gKiBBIEJ1bGtMb2FkIGluc3RhbmNlIGlzIHVzZWQgdG8gcGVyZm9ybSBhIGJ1bGsgaW5zZXJ0LlxuICpcbiAqIFVzZSBbW0Nvbm5lY3Rpb24ubmV3QnVsa0xvYWRdXSB0byBjcmVhdGUgYSBuZXcgaW5zdGFuY2UsIGFuZCBbW0Nvbm5lY3Rpb24uZXhlY0J1bGtMb2FkXV0gdG8gZXhlY3V0ZSBpdC5cbiAqXG4gKiBFeGFtcGxlIG9mIEJ1bGtMb2FkIFVzYWdlczpcbiAqXG4gKiBgYGBqc1xuICogLy8gb3B0aW9uYWwgQnVsa0xvYWQgb3B0aW9uc1xuICogY29uc3Qgb3B0aW9ucyA9IHsga2VlcE51bGxzOiB0cnVlIH07XG4gKlxuICogLy8gaW5zdGFudGlhdGUgLSBwcm92aWRlIHRoZSB0YWJsZSB3aGVyZSB5b3UnbGwgYmUgaW5zZXJ0aW5nIHRvLCBvcHRpb25zIGFuZCBhIGNhbGxiYWNrXG4gKiBjb25zdCBidWxrTG9hZCA9IGNvbm5lY3Rpb24ubmV3QnVsa0xvYWQoJ015VGFibGUnLCBvcHRpb25zLCAoZXJyb3IsIHJvd0NvdW50KSA9PiB7XG4gKiAgIGNvbnNvbGUubG9nKCdpbnNlcnRlZCAlZCByb3dzJywgcm93Q291bnQpO1xuICogfSk7XG4gKlxuICogLy8gc2V0dXAgeW91ciBjb2x1bW5zIC0gYWx3YXlzIGluZGljYXRlIHdoZXRoZXIgdGhlIGNvbHVtbiBpcyBudWxsYWJsZVxuICogYnVsa0xvYWQuYWRkQ29sdW1uKCdteUludCcsIFRZUEVTLkludCwgeyBudWxsYWJsZTogZmFsc2UgfSk7XG4gKiBidWxrTG9hZC5hZGRDb2x1bW4oJ215U3RyaW5nJywgVFlQRVMuTlZhckNoYXIsIHsgbGVuZ3RoOiA1MCwgbnVsbGFibGU6IHRydWUgfSk7XG4gKlxuICogLy8gZXhlY3V0ZVxuICogY29ubmVjdGlvbi5leGVjQnVsa0xvYWQoYnVsa0xvYWQsIFtcbiAqICAgeyBteUludDogNywgbXlTdHJpbmc6ICdoZWxsbycgfSxcbiAqICAgeyBteUludDogMjMsIG15U3RyaW5nOiAnd29ybGQnIH1cbiAqIF0pO1xuICogYGBgXG4gKi9cbmNsYXNzIEJ1bGtMb2FkIGV4dGVuZHMgRXZlbnRFbWl0dGVyIHtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBkZWNsYXJlIGVycm9yOiBFcnJvciB8IHVuZGVmaW5lZDtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBkZWNsYXJlIGNhbmNlbGVkOiBib29sZWFuO1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGRlY2xhcmUgZXhlY3V0aW9uU3RhcnRlZDogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBkZWNsYXJlIHN0cmVhbWluZ01vZGU6IGJvb2xlYW47XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZGVjbGFyZSB0YWJsZTogc3RyaW5nO1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGRlY2xhcmUgdGltZW91dDogbnVtYmVyIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZGVjbGFyZSBvcHRpb25zOiBJbnRlcm5hbENvbm5lY3Rpb25PcHRpb25zO1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGRlY2xhcmUgY2FsbGJhY2s6IENhbGxiYWNrO1xuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZGVjbGFyZSBjb2x1bW5zOiBBcnJheTxDb2x1bW4+O1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGRlY2xhcmUgY29sdW1uc0J5TmFtZTogeyBbbmFtZTogc3RyaW5nXTogQ29sdW1uIH07XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBkZWNsYXJlIGZpcnN0Um93V3JpdHRlbjogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBkZWNsYXJlIHJvd1RvUGFja2V0VHJhbnNmb3JtOiBSb3dUcmFuc2Zvcm07XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBkZWNsYXJlIGJ1bGtPcHRpb25zOiBJbnRlcm5hbE9wdGlvbnM7XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBkZWNsYXJlIGNvbm5lY3Rpb246IENvbm5lY3Rpb24gfCB1bmRlZmluZWQ7XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZGVjbGFyZSByb3dzOiBBcnJheTxhbnk+IHwgdW5kZWZpbmVkO1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGRlY2xhcmUgcnN0OiBBcnJheTxhbnk+IHwgdW5kZWZpbmVkO1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGRlY2xhcmUgcm93Q291bnQ6IG51bWJlciB8IHVuZGVmaW5lZDtcblxuICBkZWNsYXJlIGNvbGxhdGlvbjogQ29sbGF0aW9uIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgY29uc3RydWN0b3IodGFibGU6IHN0cmluZywgY29sbGF0aW9uOiBDb2xsYXRpb24gfCB1bmRlZmluZWQsIGNvbm5lY3Rpb25PcHRpb25zOiBJbnRlcm5hbENvbm5lY3Rpb25PcHRpb25zLCB7XG4gICAgY2hlY2tDb25zdHJhaW50cyA9IGZhbHNlLFxuICAgIGZpcmVUcmlnZ2VycyA9IGZhbHNlLFxuICAgIGtlZXBOdWxscyA9IGZhbHNlLFxuICAgIGxvY2tUYWJsZSA9IGZhbHNlLFxuICAgIG9yZGVyID0ge30sXG4gIH06IE9wdGlvbnMsIGNhbGxiYWNrOiBDYWxsYmFjaykge1xuICAgIGlmICh0eXBlb2YgY2hlY2tDb25zdHJhaW50cyAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJvcHRpb25zLmNoZWNrQ29uc3RyYWludHNcIiBwcm9wZXJ0eSBtdXN0IGJlIG9mIHR5cGUgYm9vbGVhbi4nKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGZpcmVUcmlnZ2VycyAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJvcHRpb25zLmZpcmVUcmlnZ2Vyc1wiIHByb3BlcnR5IG11c3QgYmUgb2YgdHlwZSBib29sZWFuLicpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2Yga2VlcE51bGxzICE9PSAnYm9vbGVhbicpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBcIm9wdGlvbnMua2VlcE51bGxzXCIgcHJvcGVydHkgbXVzdCBiZSBvZiB0eXBlIGJvb2xlYW4uJyk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBsb2NrVGFibGUgIT09ICdib29sZWFuJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwib3B0aW9ucy5sb2NrVGFibGVcIiBwcm9wZXJ0eSBtdXN0IGJlIG9mIHR5cGUgYm9vbGVhbi4nKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG9yZGVyICE9PSAnb2JqZWN0JyB8fCBvcmRlciA9PT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwib3B0aW9ucy5vcmRlclwiIHByb3BlcnR5IG11c3QgYmUgb2YgdHlwZSBvYmplY3QuJyk7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBbY29sdW1uLCBkaXJlY3Rpb25dIG9mIE9iamVjdC5lbnRyaWVzKG9yZGVyKSkge1xuICAgICAgaWYgKGRpcmVjdGlvbiAhPT0gJ0FTQycgJiYgZGlyZWN0aW9uICE9PSAnREVTQycpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIHZhbHVlIG9mIHRoZSBcIicgKyBjb2x1bW4gKyAnXCIga2V5IGluIHRoZSBcIm9wdGlvbnMub3JkZXJcIiBvYmplY3QgbXVzdCBiZSBlaXRoZXIgXCJBU0NcIiBvciBcIkRFU0NcIi4nKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBzdXBlcigpO1xuXG4gICAgdGhpcy5lcnJvciA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmNhbmNlbGVkID0gZmFsc2U7XG4gICAgdGhpcy5leGVjdXRpb25TdGFydGVkID0gZmFsc2U7XG5cbiAgICB0aGlzLmNvbGxhdGlvbiA9IGNvbGxhdGlvbjtcblxuICAgIHRoaXMudGFibGUgPSB0YWJsZTtcbiAgICB0aGlzLm9wdGlvbnMgPSBjb25uZWN0aW9uT3B0aW9ucztcbiAgICB0aGlzLmNhbGxiYWNrID0gY2FsbGJhY2s7XG4gICAgdGhpcy5jb2x1bW5zID0gW107XG4gICAgdGhpcy5jb2x1bW5zQnlOYW1lID0ge307XG4gICAgdGhpcy5maXJzdFJvd1dyaXR0ZW4gPSBmYWxzZTtcbiAgICB0aGlzLnN0cmVhbWluZ01vZGUgPSBmYWxzZTtcblxuICAgIHRoaXMucm93VG9QYWNrZXRUcmFuc2Zvcm0gPSBuZXcgUm93VHJhbnNmb3JtKHRoaXMpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVzZS1iZWZvcmUtZGVmaW5lXG5cbiAgICB0aGlzLmJ1bGtPcHRpb25zID0geyBjaGVja0NvbnN0cmFpbnRzLCBmaXJlVHJpZ2dlcnMsIGtlZXBOdWxscywgbG9ja1RhYmxlLCBvcmRlciB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSBjb2x1bW4gdG8gdGhlIGJ1bGsgbG9hZC5cbiAgICpcbiAgICogVGhlIGNvbHVtbiBkZWZpbml0aW9ucyBzaG91bGQgbWF0Y2ggdGhlIHRhYmxlIHlvdSBhcmUgdHJ5aW5nIHRvIGluc2VydCBpbnRvLlxuICAgKiBBdHRlbXB0aW5nIHRvIGNhbGwgYWRkQ29sdW1uIGFmdGVyIHRoZSBmaXJzdCByb3cgaGFzIGJlZW4gYWRkZWQgd2lsbCB0aHJvdyBhbiBleGNlcHRpb24uXG4gICAqXG4gICAqIGBgYGpzXG4gICAqIGJ1bGtMb2FkLmFkZENvbHVtbignTXlJbnRDb2x1bW4nLCBUWVBFUy5JbnQsIHsgbnVsbGFibGU6IGZhbHNlIH0pO1xuICAgKiBgYGBcbiAgICpcbiAgICogQHBhcmFtIG5hbWUgVGhlIG5hbWUgb2YgdGhlIGNvbHVtbi5cbiAgICogQHBhcmFtIHR5cGUgT25lIG9mIHRoZSBzdXBwb3J0ZWQgYGRhdGEgdHlwZXNgLlxuICAgKiBAcGFyYW0gX19uYW1lZFBhcmFtZXRlcnMgQWRkaXRpb25hbCBjb2x1bW4gdHlwZSBpbmZvcm1hdGlvbi4gQXQgYSBtaW5pbXVtLCBgbnVsbGFibGVgIG11c3QgYmUgc2V0IHRvIHRydWUgb3IgZmFsc2UuXG4gICAqIEBwYXJhbSBsZW5ndGggRm9yIFZhckNoYXIsIE5WYXJDaGFyLCBWYXJCaW5hcnkuIFVzZSBsZW5ndGggYXMgYEluZmluaXR5YCBmb3IgVmFyQ2hhcihtYXgpLCBOVmFyQ2hhcihtYXgpIGFuZCBWYXJCaW5hcnkobWF4KS5cbiAgICogQHBhcmFtIG51bGxhYmxlIEluZGljYXRlcyB3aGV0aGVyIHRoZSBjb2x1bW4gYWNjZXB0cyBOVUxMIHZhbHVlcy5cbiAgICogQHBhcmFtIG9iak5hbWUgSWYgdGhlIG5hbWUgb2YgdGhlIGNvbHVtbiBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgbmFtZSBvZiB0aGUgcHJvcGVydHkgZm91bmQgb24gYHJvd09iamAgYXJndW1lbnRzIHBhc3NlZCB0byBbW2FkZFJvd11dIG9yIFtbQ29ubmVjdGlvbi5leGVjQnVsa0xvYWRdXSwgdGhlbiB5b3UgY2FuIHVzZSB0aGlzIG9wdGlvbiB0byBzcGVjaWZ5IHRoZSBwcm9wZXJ0eSBuYW1lLlxuICAgKiBAcGFyYW0gcHJlY2lzaW9uIEZvciBOdW1lcmljLCBEZWNpbWFsLlxuICAgKiBAcGFyYW0gc2NhbGUgRm9yIE51bWVyaWMsIERlY2ltYWwsIFRpbWUsIERhdGVUaW1lMiwgRGF0ZVRpbWVPZmZzZXQuXG4gICovXG4gIGFkZENvbHVtbihuYW1lOiBzdHJpbmcsIHR5cGU6IERhdGFUeXBlLCB7IG91dHB1dCA9IGZhbHNlLCBsZW5ndGgsIHByZWNpc2lvbiwgc2NhbGUsIG9iak5hbWUgPSBuYW1lLCBudWxsYWJsZSA9IHRydWUgfTogQ29sdW1uT3B0aW9ucykge1xuICAgIGlmICh0aGlzLmZpcnN0Um93V3JpdHRlbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb2x1bW5zIGNhbm5vdCBiZSBhZGRlZCB0byBidWxrIGluc2VydCBhZnRlciB0aGUgZmlyc3Qgcm93IGhhcyBiZWVuIHdyaXR0ZW4uJyk7XG4gICAgfVxuICAgIGlmICh0aGlzLmV4ZWN1dGlvblN0YXJ0ZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ29sdW1ucyBjYW5ub3QgYmUgYWRkZWQgdG8gYnVsayBpbnNlcnQgYWZ0ZXIgZXhlY3V0aW9uIGhhcyBzdGFydGVkLicpO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbHVtbjogQ29sdW1uID0ge1xuICAgICAgdHlwZTogdHlwZSxcbiAgICAgIG5hbWU6IG5hbWUsXG4gICAgICB2YWx1ZTogbnVsbCxcbiAgICAgIG91dHB1dDogb3V0cHV0LFxuICAgICAgbGVuZ3RoOiBsZW5ndGgsXG4gICAgICBwcmVjaXNpb246IHByZWNpc2lvbixcbiAgICAgIHNjYWxlOiBzY2FsZSxcbiAgICAgIG9iak5hbWU6IG9iak5hbWUsXG4gICAgICBudWxsYWJsZTogbnVsbGFibGUsXG4gICAgICBjb2xsYXRpb246IHRoaXMuY29sbGF0aW9uXG4gICAgfTtcblxuICAgIGlmICgodHlwZS5pZCAmIDB4MzApID09PSAweDIwKSB7XG4gICAgICBpZiAoY29sdW1uLmxlbmd0aCA9PSBudWxsICYmIHR5cGUucmVzb2x2ZUxlbmd0aCkge1xuICAgICAgICBjb2x1bW4ubGVuZ3RoID0gdHlwZS5yZXNvbHZlTGVuZ3RoKGNvbHVtbik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHR5cGUucmVzb2x2ZVByZWNpc2lvbiAmJiBjb2x1bW4ucHJlY2lzaW9uID09IG51bGwpIHtcbiAgICAgIGNvbHVtbi5wcmVjaXNpb24gPSB0eXBlLnJlc29sdmVQcmVjaXNpb24oY29sdW1uKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZS5yZXNvbHZlU2NhbGUgJiYgY29sdW1uLnNjYWxlID09IG51bGwpIHtcbiAgICAgIGNvbHVtbi5zY2FsZSA9IHR5cGUucmVzb2x2ZVNjYWxlKGNvbHVtbik7XG4gICAgfVxuXG4gICAgdGhpcy5jb2x1bW5zLnB1c2goY29sdW1uKTtcblxuICAgIHRoaXMuY29sdW1uc0J5TmFtZVtuYW1lXSA9IGNvbHVtbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZ2V0T3B0aW9uc1NxbCgpIHtcbiAgICBjb25zdCBhZGRPcHRpb25zID0gW107XG5cbiAgICBpZiAodGhpcy5idWxrT3B0aW9ucy5jaGVja0NvbnN0cmFpbnRzKSB7XG4gICAgICBhZGRPcHRpb25zLnB1c2goJ0NIRUNLX0NPTlNUUkFJTlRTJyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuYnVsa09wdGlvbnMuZmlyZVRyaWdnZXJzKSB7XG4gICAgICBhZGRPcHRpb25zLnB1c2goJ0ZJUkVfVFJJR0dFUlMnKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5idWxrT3B0aW9ucy5rZWVwTnVsbHMpIHtcbiAgICAgIGFkZE9wdGlvbnMucHVzaCgnS0VFUF9OVUxMUycpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmJ1bGtPcHRpb25zLmxvY2tUYWJsZSkge1xuICAgICAgYWRkT3B0aW9ucy5wdXNoKCdUQUJMT0NLJyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuYnVsa09wdGlvbnMub3JkZXIpIHtcbiAgICAgIGNvbnN0IG9yZGVyQ29sdW1ucyA9IFtdO1xuXG4gICAgICBmb3IgKGNvbnN0IFtjb2x1bW4sIGRpcmVjdGlvbl0gb2YgT2JqZWN0LmVudHJpZXModGhpcy5idWxrT3B0aW9ucy5vcmRlcikpIHtcbiAgICAgICAgb3JkZXJDb2x1bW5zLnB1c2goYCR7Y29sdW1ufSAke2RpcmVjdGlvbn1gKTtcbiAgICAgIH1cblxuICAgICAgaWYgKG9yZGVyQ29sdW1ucy5sZW5ndGgpIHtcbiAgICAgICAgYWRkT3B0aW9ucy5wdXNoKGBPUkRFUiAoJHtvcmRlckNvbHVtbnMuam9pbignLCAnKX0pYCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGFkZE9wdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIGAgV0lUSCAoJHthZGRPcHRpb25zLmpvaW4oJywnKX0pYDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZ2V0QnVsa0luc2VydFNxbCgpIHtcbiAgICBsZXQgc3FsID0gJ2luc2VydCBidWxrICcgKyB0aGlzLnRhYmxlICsgJygnO1xuICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSB0aGlzLmNvbHVtbnMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGNvbnN0IGMgPSB0aGlzLmNvbHVtbnNbaV07XG4gICAgICBpZiAoaSAhPT0gMCkge1xuICAgICAgICBzcWwgKz0gJywgJztcbiAgICAgIH1cbiAgICAgIHNxbCArPSAnWycgKyBjLm5hbWUgKyAnXSAnICsgKGMudHlwZS5kZWNsYXJhdGlvbihjKSk7XG4gICAgfVxuICAgIHNxbCArPSAnKSc7XG5cbiAgICBzcWwgKz0gdGhpcy5nZXRPcHRpb25zU3FsKCk7XG4gICAgcmV0dXJuIHNxbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIGlzIHNpbXBseSBhIGhlbHBlciB1dGlsaXR5IGZ1bmN0aW9uIHdoaWNoIHJldHVybnMgYSBgQ1JFQVRFIFRBQkxFIFNRTGAgc3RhdGVtZW50IGJhc2VkIG9uIHRoZSBjb2x1bW5zIGFkZGVkIHRvIHRoZSBidWxrTG9hZCBvYmplY3QuXG4gICAqIFRoaXMgbWF5IGJlIHBhcnRpY3VsYXJseSBoYW5keSB3aGVuIHlvdSB3YW50IHRvIGluc2VydCBpbnRvIGEgdGVtcG9yYXJ5IHRhYmxlIChhIHRhYmxlIHdoaWNoIHN0YXJ0cyB3aXRoIGAjYCkuXG4gICAqXG4gICAqIGBgYGpzXG4gICAqIHZhciBzcWwgPSBidWxrTG9hZC5nZXRUYWJsZUNyZWF0aW9uU3FsKCk7XG4gICAqIGBgYFxuICAgKlxuICAgKiBBIHNpZGUgbm90ZSBvbiBidWxrIGluc2VydGluZyBpbnRvIHRlbXBvcmFyeSB0YWJsZXM6IGlmIHlvdSB3YW50IHRvIGFjY2VzcyBhIGxvY2FsIHRlbXBvcmFyeSB0YWJsZSBhZnRlciBleGVjdXRpbmcgdGhlIGJ1bGsgbG9hZCxcbiAgICogeW91J2xsIG5lZWQgdG8gdXNlIHRoZSBzYW1lIGNvbm5lY3Rpb24gYW5kIGV4ZWN1dGUgeW91ciByZXF1ZXN0cyB1c2luZyBbW0Nvbm5lY3Rpb24uZXhlY1NxbEJhdGNoXV0gaW5zdGVhZCBvZiBbW0Nvbm5lY3Rpb24uZXhlY1NxbF1dXG4gICAqL1xuICBnZXRUYWJsZUNyZWF0aW9uU3FsKCkge1xuICAgIGxldCBzcWwgPSAnQ1JFQVRFIFRBQkxFICcgKyB0aGlzLnRhYmxlICsgJyhcXG4nO1xuICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSB0aGlzLmNvbHVtbnMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGNvbnN0IGMgPSB0aGlzLmNvbHVtbnNbaV07XG4gICAgICBpZiAoaSAhPT0gMCkge1xuICAgICAgICBzcWwgKz0gJyxcXG4nO1xuICAgICAgfVxuICAgICAgc3FsICs9ICdbJyArIGMubmFtZSArICddICcgKyAoYy50eXBlLmRlY2xhcmF0aW9uKGMpKTtcbiAgICAgIGlmIChjLm51bGxhYmxlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgc3FsICs9ICcgJyArIChjLm51bGxhYmxlID8gJ05VTEwnIDogJ05PVCBOVUxMJyk7XG4gICAgICB9XG4gICAgfVxuICAgIHNxbCArPSAnXFxuKSc7XG4gICAgcmV0dXJuIHNxbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZ2V0Q29sTWV0YURhdGEoKSB7XG4gICAgY29uc3QgdEJ1ZiA9IG5ldyBXcml0YWJsZVRyYWNraW5nQnVmZmVyKDEwMCwgbnVsbCwgdHJ1ZSk7XG4gICAgLy8gVG9rZW5UeXBlXG4gICAgdEJ1Zi53cml0ZVVJbnQ4KFRPS0VOX1RZUEUuQ09MTUVUQURBVEEpO1xuICAgIC8vIENvdW50XG4gICAgdEJ1Zi53cml0ZVVJbnQxNkxFKHRoaXMuY29sdW1ucy5sZW5ndGgpO1xuXG4gICAgZm9yIChsZXQgaiA9IDAsIGxlbiA9IHRoaXMuY29sdW1ucy5sZW5ndGg7IGogPCBsZW47IGorKykge1xuICAgICAgY29uc3QgYyA9IHRoaXMuY29sdW1uc1tqXTtcbiAgICAgIC8vIFVzZXJUeXBlXG4gICAgICBpZiAodGhpcy5vcHRpb25zLnRkc1ZlcnNpb24gPCAnN18yJykge1xuICAgICAgICB0QnVmLndyaXRlVUludDE2TEUoMCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0QnVmLndyaXRlVUludDMyTEUoMCk7XG4gICAgICB9XG5cbiAgICAgIC8vIEZsYWdzXG4gICAgICBsZXQgZmxhZ3MgPSBGTEFHUy51cGRhdGVhYmxlUmVhZFdyaXRlO1xuICAgICAgaWYgKGMubnVsbGFibGUpIHtcbiAgICAgICAgZmxhZ3MgfD0gRkxBR1MubnVsbGFibGU7XG4gICAgICB9IGVsc2UgaWYgKGMubnVsbGFibGUgPT09IHVuZGVmaW5lZCAmJiB0aGlzLm9wdGlvbnMudGRzVmVyc2lvbiA+PSAnN18yJykge1xuICAgICAgICBmbGFncyB8PSBGTEFHUy5udWxsYWJsZVVua25vd247XG4gICAgICB9XG4gICAgICB0QnVmLndyaXRlVUludDE2TEUoZmxhZ3MpO1xuXG4gICAgICAvLyBUWVBFX0lORk9cbiAgICAgIHRCdWYud3JpdGVCdWZmZXIoYy50eXBlLmdlbmVyYXRlVHlwZUluZm8oYywgdGhpcy5vcHRpb25zKSk7XG5cbiAgICAgIC8vIFRhYmxlTmFtZVxuICAgICAgaWYgKGMudHlwZS5oYXNUYWJsZU5hbWUpIHtcbiAgICAgICAgdEJ1Zi53cml0ZVVzVmFyY2hhcih0aGlzLnRhYmxlLCAndWNzMicpO1xuICAgICAgfVxuXG4gICAgICAvLyBDb2xOYW1lXG4gICAgICB0QnVmLndyaXRlQlZhcmNoYXIoYy5uYW1lLCAndWNzMicpO1xuICAgIH1cbiAgICByZXR1cm4gdEJ1Zi5kYXRhO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgYSB0aW1lb3V0IGZvciB0aGlzIGJ1bGsgbG9hZC5cbiAgICpcbiAgICogYGBganNcbiAgICogYnVsa0xvYWQuc2V0VGltZW91dCh0aW1lb3V0KTtcbiAgICogYGBgXG4gICAqXG4gICAqIEBwYXJhbSB0aW1lb3V0IFRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIGJlZm9yZSB0aGUgYnVsayBsb2FkIGlzIGNvbnNpZGVyZWQgZmFpbGVkLCBvciAwIGZvciBubyB0aW1lb3V0LlxuICAgKiAgIFdoZW4gbm8gdGltZW91dCBpcyBzZXQgZm9yIHRoZSBidWxrIGxvYWQsIHRoZSBbW0Nvbm5lY3Rpb25PcHRpb25zLnJlcXVlc3RUaW1lb3V0XV0gb2YgdGhlIENvbm5lY3Rpb24gaXMgdXNlZC5cbiAgICovXG4gIHNldFRpbWVvdXQodGltZW91dD86IG51bWJlcikge1xuICAgIHRoaXMudGltZW91dCA9IHRpbWVvdXQ7XG4gIH1cblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGNyZWF0ZURvbmVUb2tlbigpIHtcbiAgICAvLyBJdCBtaWdodCBiZSBuaWNlIHRvIG1ha2UgRG9uZVRva2VuIGEgY2xhc3MgaWYgYW55dGhpbmcgbmVlZHMgdG8gY3JlYXRlIHRoZW0sIGJ1dCBmb3Igbm93LCBqdXN0IGRvIGl0IGhlcmVcbiAgICBjb25zdCB0QnVmID0gbmV3IFdyaXRhYmxlVHJhY2tpbmdCdWZmZXIodGhpcy5vcHRpb25zLnRkc1ZlcnNpb24gPCAnN18yJyA/IDkgOiAxMyk7XG4gICAgdEJ1Zi53cml0ZVVJbnQ4KFRPS0VOX1RZUEUuRE9ORSk7XG4gICAgY29uc3Qgc3RhdHVzID0gRE9ORV9TVEFUVVMuRklOQUw7XG4gICAgdEJ1Zi53cml0ZVVJbnQxNkxFKHN0YXR1cyk7XG4gICAgdEJ1Zi53cml0ZVVJbnQxNkxFKDApOyAvLyBDdXJDbWQgKFREUyBpZ25vcmVzIHRoaXMpXG4gICAgdEJ1Zi53cml0ZVVJbnQzMkxFKDApOyAvLyByb3cgY291bnQgLSBkb2Vzbid0IHJlYWxseSBtYXR0ZXJcbiAgICBpZiAodGhpcy5vcHRpb25zLnRkc1ZlcnNpb24gPj0gJzdfMicpIHtcbiAgICAgIHRCdWYud3JpdGVVSW50MzJMRSgwKTsgLy8gcm93IGNvdW50IGlzIDY0IGJpdHMgaW4gPj0gVERTIDcuMlxuICAgIH1cbiAgICByZXR1cm4gdEJ1Zi5kYXRhO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBjYW5jZWwoKSB7XG4gICAgaWYgKHRoaXMuY2FuY2VsZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmNhbmNlbGVkID0gdHJ1ZTtcbiAgICB0aGlzLmVtaXQoJ2NhbmNlbCcpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEJ1bGtMb2FkO1xubW9kdWxlLmV4cG9ydHMgPSBCdWxrTG9hZDtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsSUFBQUEsT0FBQSxHQUFBQyxPQUFBO0FBQ0EsSUFBQUMsdUJBQUEsR0FBQUMsc0JBQUEsQ0FBQUYsT0FBQTtBQUdBLElBQUFHLE9BQUEsR0FBQUgsT0FBQTtBQUNBLElBQUFJLE1BQUEsR0FBQUosT0FBQTtBQUFtRCxTQUFBRSx1QkFBQUcsR0FBQSxXQUFBQSxHQUFBLElBQUFBLEdBQUEsQ0FBQUMsVUFBQSxHQUFBRCxHQUFBLEtBQUFFLE9BQUEsRUFBQUYsR0FBQTtBQUtuRDtBQUNBO0FBQ0E7QUFDQSxNQUFNRyxLQUFLLEdBQUc7RUFDWkMsUUFBUSxFQUFFLENBQUMsSUFBSSxDQUFDO0VBQ2hCQyxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUM7RUFDZkMsbUJBQW1CLEVBQUUsQ0FBQyxJQUFJLENBQUM7RUFDM0JDLGlCQUFpQixFQUFFLENBQUMsSUFBSSxDQUFDO0VBQ3pCQyxRQUFRLEVBQUUsQ0FBQyxJQUFJLENBQUM7RUFDaEJDLFFBQVEsRUFBRSxDQUFDLElBQUksQ0FBQztFQUFFO0VBQ2xCQyxlQUFlLEVBQUUsQ0FBQyxJQUFJLENBQUM7RUFBRTtFQUN6QkMsZUFBZSxFQUFFLENBQUMsSUFBSSxFQUFFO0VBQUU7RUFDMUJDLE1BQU0sRUFBRSxDQUFDLElBQUksRUFBRTtFQUFFO0VBQ2pCQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLEVBQUU7RUFBRTtFQUNkQyxlQUFlLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUMzQixDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBLE1BQU1DLFdBQVcsR0FBRztFQUNsQkMsS0FBSyxFQUFFLElBQUk7RUFDWEMsSUFBSSxFQUFFLEdBQUc7RUFDVEMsS0FBSyxFQUFFLEdBQUc7RUFDVkMsTUFBTSxFQUFFLEdBQUc7RUFD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
|
package/lib/bulk-load.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bulk-load.js","names":["_events","require","_writableTrackingBuffer","_interopRequireDefault","_stream","_token","obj","__esModule","default","FLAGS","nullable","caseSen","updateableReadWrite","updateableUnknown","identity","computed","fixedLenCLRType","sparseColumnSet","hidden","key","nullableUnknown","DONE_STATUS","FINAL","MORE","ERROR","INXACT","COUNT","ATTN","SRVERROR","rowTokenBuffer","Buffer","from","TOKEN_TYPE","ROW","textPointerAndTimestampBuffer","textPointerNullBuffer","RowTransform","Transform","columnMetadataWritten","bulkLoad","mainOptions","columns","constructor","writableObjectMode","options","_transform","row","_encoding","callback","push","getColMetaData","i","length","c","value","Array","isArray","objName","firstRowWritten","type","validate","collation","error","parameter","scale","precision","name","generateParameterLength","chunk","generateParameterData","process","nextTick","_flush","createDoneToken","BulkLoad","EventEmitter","canceled","executionStarted","streamingMode","table","timeout","columnsByName","rowToPacketTransform","bulkOptions","connection","rows","rst","rowCount","connectionOptions","checkConstraints","fireTriggers","keepNulls","lockTable","order","TypeError","column","direction","Object","entries","undefined","addColumn","output","Error","id","resolveLength","resolvePrecision","resolveScale","getOptionsSql","addOptions","orderColumns","join","getBulkInsertSql","sql","len","declaration","getTableCreationSql","tBuf","WritableTrackingBuffer","writeUInt8","COLMETADATA","writeUInt16LE","j","tdsVersion","writeUInt32LE","flags","writeBuffer","generateTypeInfo","hasTableName","writeUsVarchar","writeBVarchar","data","setTimeout","DONE","status","cancel","emit","_default","exports","module"],"sources":["../src/bulk-load.ts"],"sourcesContent":["import { EventEmitter } from 'events';\nimport WritableTrackingBuffer from './tracking-buffer/writable-tracking-buffer';\nimport Connection, { InternalConnectionOptions } from './connection';\n\nimport { Transform } from 'stream';\nimport { TYPE as TOKEN_TYPE } from './token/token';\n\nimport { DataType, Parameter } from './data-type';\nimport { Collation } from './collation';\n\n/**\n * @private\n */\nconst FLAGS = {\n nullable: 1 << 0,\n caseSen: 1 << 1,\n updateableReadWrite: 1 << 2,\n updateableUnknown: 1 << 3,\n identity: 1 << 4,\n computed: 1 << 5, // introduced in TDS 7.2\n fixedLenCLRType: 1 << 8, // introduced in TDS 7.2\n sparseColumnSet: 1 << 10, // introduced in TDS 7.3.B\n hidden: 1 << 13, // introduced in TDS 7.2\n key: 1 << 14, // introduced in TDS 7.2\n nullableUnknown: 1 << 15 // introduced in TDS 7.2\n};\n\n/**\n * @private\n */\nconst DONE_STATUS = {\n FINAL: 0x00,\n MORE: 0x1,\n ERROR: 0x2,\n INXACT: 0x4,\n COUNT: 0x10,\n ATTN: 0x20,\n SRVERROR: 0x100\n};\n\n/**\n * @private\n */\ninterface InternalOptions {\n checkConstraints: boolean;\n fireTriggers: boolean;\n keepNulls: boolean;\n lockTable: boolean;\n order: { [columnName: string]: 'ASC' | 'DESC' };\n}\n\nexport interface Options {\n /**\n * Honors constraints during bulk load, using T-SQL\n * [CHECK_CONSTRAINTS](https://technet.microsoft.com/en-us/library/ms186247(v=sql.105).aspx).\n * (default: `false`)\n */\n checkConstraints?: InternalOptions['checkConstraints'] | undefined;\n\n /**\n * Honors insert triggers during bulk load, using the T-SQL [FIRE_TRIGGERS](https://technet.microsoft.com/en-us/library/ms187640(v=sql.105).aspx). (default: `false`)\n */\n fireTriggers?: InternalOptions['fireTriggers'] | undefined;\n\n /**\n * Honors null value passed, ignores the default values set on table, using T-SQL [KEEP_NULLS](https://msdn.microsoft.com/en-us/library/ms187887(v=sql.120).aspx). (default: `false`)\n */\n keepNulls?: InternalOptions['keepNulls'] | undefined;\n\n /**\n * Places a bulk update(BU) lock on table while performing bulk load, using T-SQL [TABLOCK](https://technet.microsoft.com/en-us/library/ms180876(v=sql.105).aspx). (default: `false`)\n */\n lockTable?: InternalOptions['lockTable'] | undefined;\n\n /**\n * Specifies the ordering of the data to possibly increase bulk insert performance, using T-SQL [ORDER](https://docs.microsoft.com/en-us/previous-versions/sql/sql-server-2008-r2/ms177468(v=sql.105)). (default: `{}`)\n */\n order?: InternalOptions['order'] | undefined;\n}\n\n\nexport type Callback =\n /**\n * A function which will be called after the [[BulkLoad]] finishes executing.\n *\n * @param rowCount the number of rows inserted\n */\n (err: Error | undefined | null, rowCount?: number) => void;\n\ninterface Column extends Parameter {\n objName: string;\n collation: Collation | undefined;\n}\n\ninterface ColumnOptions {\n output?: boolean;\n\n /**\n * For VarChar, NVarChar, VarBinary. Use length as `Infinity` for VarChar(max), NVarChar(max) and VarBinary(max).\n */\n length?: number;\n\n /**\n * For Numeric, Decimal.\n */\n precision?: number;\n\n /**\n * For Numeric, Decimal, Time, DateTime2, DateTimeOffset.\n */\n scale?: number;\n\n /**\n * If the name of the column is different from the name of the property found on `rowObj` arguments passed to [[addRow]], then you can use this option to specify the property name.\n */\n objName?: string;\n\n /**\n * Indicates whether the column accepts NULL values.\n */\n nullable?: boolean;\n}\n\nconst rowTokenBuffer = Buffer.from([ TOKEN_TYPE.ROW ]);\nconst textPointerAndTimestampBuffer = Buffer.from([\n // TextPointer length\n 0x10,\n\n // TextPointer\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n\n // Timestamp\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00\n]);\nconst textPointerNullBuffer = Buffer.from([0x00]);\n\n// A transform that converts rows to packets.\nclass RowTransform extends Transform {\n /**\n * @private\n */\n columnMetadataWritten: boolean;\n /**\n * @private\n */\n bulkLoad: BulkLoad;\n /**\n * @private\n */\n mainOptions: BulkLoad['options'];\n /**\n * @private\n */\n columns: BulkLoad['columns'];\n\n /**\n * @private\n */\n constructor(bulkLoad: BulkLoad) {\n super({ writableObjectMode: true });\n\n this.bulkLoad = bulkLoad;\n this.mainOptions = bulkLoad.options;\n this.columns = bulkLoad.columns;\n\n this.columnMetadataWritten = false;\n }\n\n /**\n * @private\n */\n _transform(row: Array<unknown> | { [colName: string]: unknown }, _encoding: string, callback: (error?: Error) => void) {\n if (!this.columnMetadataWritten) {\n this.push(this.bulkLoad.getColMetaData());\n this.columnMetadataWritten = true;\n }\n\n this.push(rowTokenBuffer);\n\n for (let i = 0; i < this.columns.length; i++) {\n const c = this.columns[i];\n let value = Array.isArray(row) ? row[i] : row[c.objName];\n\n if (!this.bulkLoad.firstRowWritten) {\n try {\n value = c.type.validate(value, c.collation);\n } catch (error: any) {\n return callback(error);\n }\n }\n\n const parameter = {\n length: c.length,\n scale: c.scale,\n precision: c.precision,\n value: value\n };\n\n if (c.type.name === 'Text' || c.type.name === 'Image' || c.type.name === 'NText') {\n if (value == null) {\n this.push(textPointerNullBuffer);\n continue;\n }\n\n this.push(textPointerAndTimestampBuffer);\n }\n\n this.push(c.type.generateParameterLength(parameter, this.mainOptions));\n for (const chunk of c.type.generateParameterData(parameter, this.mainOptions)) {\n this.push(chunk);\n }\n }\n\n process.nextTick(callback);\n }\n\n /**\n * @private\n */\n _flush(callback: () => void) {\n this.push(this.bulkLoad.createDoneToken());\n\n process.nextTick(callback);\n }\n}\n\n/**\n * A BulkLoad instance is used to perform a bulk insert.\n *\n * Use [[Connection.newBulkLoad]] to create a new instance, and [[Connection.execBulkLoad]] to execute it.\n *\n * Example of BulkLoad Usages:\n *\n * ```js\n * // optional BulkLoad options\n * const options = { keepNulls: true };\n *\n * // instantiate - provide the table where you'll be inserting to, options and a callback\n * const bulkLoad = connection.newBulkLoad('MyTable', options, (error, rowCount) => {\n * console.log('inserted %d rows', rowCount);\n * });\n *\n * // setup your columns - always indicate whether the column is nullable\n * bulkLoad.addColumn('myInt', TYPES.Int, { nullable: false });\n * bulkLoad.addColumn('myString', TYPES.NVarChar, { length: 50, nullable: true });\n *\n * // execute\n * connection.execBulkLoad(bulkLoad, [\n * { myInt: 7, myString: 'hello' },\n * { myInt: 23, myString: 'world' }\n * ]);\n * ```\n */\nclass BulkLoad extends EventEmitter {\n /**\n * @private\n */\n error: Error | undefined;\n /**\n * @private\n */\n canceled: boolean;\n /**\n * @private\n */\n executionStarted: boolean;\n /**\n * @private\n */\n streamingMode: boolean;\n /**\n * @private\n */\n table: string;\n /**\n * @private\n */\n timeout: number | undefined;\n\n /**\n * @private\n */\n options: InternalConnectionOptions;\n /**\n * @private\n */\n callback: Callback;\n\n /**\n * @private\n */\n columns: Array<Column>;\n /**\n * @private\n */\n columnsByName: { [name: string]: Column };\n\n /**\n * @private\n */\n firstRowWritten: boolean;\n /**\n * @private\n */\n rowToPacketTransform: RowTransform;\n\n /**\n * @private\n */\n bulkOptions: InternalOptions;\n\n /**\n * @private\n */\n connection: Connection | undefined;\n /**\n * @private\n */\n rows: Array<any> | undefined;\n /**\n * @private\n */\n rst: Array<any> | undefined;\n /**\n * @private\n */\n rowCount: number | undefined;\n\n collation: Collation | undefined;\n\n /**\n * @private\n */\n constructor(table: string, collation: Collation | undefined, connectionOptions: InternalConnectionOptions, {\n checkConstraints = false,\n fireTriggers = false,\n keepNulls = false,\n lockTable = false,\n order = {},\n }: Options, callback: Callback) {\n if (typeof checkConstraints !== 'boolean') {\n throw new TypeError('The \"options.checkConstraints\" property must be of type boolean.');\n }\n\n if (typeof fireTriggers !== 'boolean') {\n throw new TypeError('The \"options.fireTriggers\" property must be of type boolean.');\n }\n\n if (typeof keepNulls !== 'boolean') {\n throw new TypeError('The \"options.keepNulls\" property must be of type boolean.');\n }\n\n if (typeof lockTable !== 'boolean') {\n throw new TypeError('The \"options.lockTable\" property must be of type boolean.');\n }\n\n if (typeof order !== 'object' || order === null) {\n throw new TypeError('The \"options.order\" property must be of type object.');\n }\n\n for (const [column, direction] of Object.entries(order)) {\n if (direction !== 'ASC' && direction !== 'DESC') {\n throw new TypeError('The value of the \"' + column + '\" key in the \"options.order\" object must be either \"ASC\" or \"DESC\".');\n }\n }\n\n super();\n\n this.error = undefined;\n this.canceled = false;\n this.executionStarted = false;\n\n this.collation = collation;\n\n this.table = table;\n this.options = connectionOptions;\n this.callback = callback;\n this.columns = [];\n this.columnsByName = {};\n this.firstRowWritten = false;\n this.streamingMode = false;\n\n this.rowToPacketTransform = new RowTransform(this); // eslint-disable-line no-use-before-define\n\n this.bulkOptions = { checkConstraints, fireTriggers, keepNulls, lockTable, order };\n }\n\n /**\n * Adds a column to the bulk load.\n *\n * The column definitions should match the table you are trying to insert into.\n * Attempting to call addColumn after the first row has been added will throw an exception.\n *\n * ```js\n * bulkLoad.addColumn('MyIntColumn', TYPES.Int, { nullable: false });\n * ```\n *\n * @param name The name of the column.\n * @param type One of the supported `data types`.\n * @param __namedParameters Additional column type information. At a minimum, `nullable` must be set to true or false.\n * @param length For VarChar, NVarChar, VarBinary. Use length as `Infinity` for VarChar(max), NVarChar(max) and VarBinary(max).\n * @param nullable Indicates whether the column accepts NULL values.\n * @param objName If the name of the column is different from the name of the property found on `rowObj` arguments passed to [[addRow]] or [[Connection.execBulkLoad]], then you can use this option to specify the property name.\n * @param precision For Numeric, Decimal.\n * @param scale For Numeric, Decimal, Time, DateTime2, DateTimeOffset.\n */\n addColumn(name: string, type: DataType, { output = false, length, precision, scale, objName = name, nullable = true }: ColumnOptions) {\n if (this.firstRowWritten) {\n throw new Error('Columns cannot be added to bulk insert after the first row has been written.');\n }\n if (this.executionStarted) {\n throw new Error('Columns cannot be added to bulk insert after execution has started.');\n }\n\n const column: Column = {\n type: type,\n name: name,\n value: null,\n output: output,\n length: length,\n precision: precision,\n scale: scale,\n objName: objName,\n nullable: nullable,\n collation: this.collation\n };\n\n if ((type.id & 0x30) === 0x20) {\n if (column.length == null && type.resolveLength) {\n column.length = type.resolveLength(column);\n }\n }\n\n if (type.resolvePrecision && column.precision == null) {\n column.precision = type.resolvePrecision(column);\n }\n\n if (type.resolveScale && column.scale == null) {\n column.scale = type.resolveScale(column);\n }\n\n this.columns.push(column);\n\n this.columnsByName[name] = column;\n }\n\n /**\n * @private\n */\n getOptionsSql() {\n const addOptions = [];\n\n if (this.bulkOptions.checkConstraints) {\n addOptions.push('CHECK_CONSTRAINTS');\n }\n\n if (this.bulkOptions.fireTriggers) {\n addOptions.push('FIRE_TRIGGERS');\n }\n\n if (this.bulkOptions.keepNulls) {\n addOptions.push('KEEP_NULLS');\n }\n\n if (this.bulkOptions.lockTable) {\n addOptions.push('TABLOCK');\n }\n\n if (this.bulkOptions.order) {\n const orderColumns = [];\n\n for (const [column, direction] of Object.entries(this.bulkOptions.order)) {\n orderColumns.push(`${column} ${direction}`);\n }\n\n if (orderColumns.length) {\n addOptions.push(`ORDER (${orderColumns.join(', ')})`);\n }\n }\n\n if (addOptions.length > 0) {\n return ` WITH (${addOptions.join(',')})`;\n } else {\n return '';\n }\n }\n\n /**\n * @private\n */\n getBulkInsertSql() {\n let sql = 'insert bulk ' + this.table + '(';\n for (let i = 0, len = this.columns.length; i < len; i++) {\n const c = this.columns[i];\n if (i !== 0) {\n sql += ', ';\n }\n sql += '[' + c.name + '] ' + (c.type.declaration(c));\n }\n sql += ')';\n\n sql += this.getOptionsSql();\n return sql;\n }\n\n /**\n * This is simply a helper utility function which returns a `CREATE TABLE SQL` statement based on the columns added to the bulkLoad object.\n * This may be particularly handy when you want to insert into a temporary table (a table which starts with `#`).\n *\n * ```js\n * var sql = bulkLoad.getTableCreationSql();\n * ```\n *\n * A side note on bulk inserting into temporary tables: if you want to access a local temporary table after executing the bulk load,\n * you'll need to use the same connection and execute your requests using [[Connection.execSqlBatch]] instead of [[Connection.execSql]]\n */\n getTableCreationSql() {\n let sql = 'CREATE TABLE ' + this.table + '(\\n';\n for (let i = 0, len = this.columns.length; i < len; i++) {\n const c = this.columns[i];\n if (i !== 0) {\n sql += ',\\n';\n }\n sql += '[' + c.name + '] ' + (c.type.declaration(c));\n if (c.nullable !== undefined) {\n sql += ' ' + (c.nullable ? 'NULL' : 'NOT NULL');\n }\n }\n sql += '\\n)';\n return sql;\n }\n\n /**\n * @private\n */\n getColMetaData() {\n const tBuf = new WritableTrackingBuffer(100, null, true);\n // TokenType\n tBuf.writeUInt8(TOKEN_TYPE.COLMETADATA);\n // Count\n tBuf.writeUInt16LE(this.columns.length);\n\n for (let j = 0, len = this.columns.length; j < len; j++) {\n const c = this.columns[j];\n // UserType\n if (this.options.tdsVersion < '7_2') {\n tBuf.writeUInt16LE(0);\n } else {\n tBuf.writeUInt32LE(0);\n }\n\n // Flags\n let flags = FLAGS.updateableReadWrite;\n if (c.nullable) {\n flags |= FLAGS.nullable;\n } else if (c.nullable === undefined && this.options.tdsVersion >= '7_2') {\n flags |= FLAGS.nullableUnknown;\n }\n tBuf.writeUInt16LE(flags);\n\n // TYPE_INFO\n tBuf.writeBuffer(c.type.generateTypeInfo(c, this.options));\n\n // TableName\n if (c.type.hasTableName) {\n tBuf.writeUsVarchar(this.table, 'ucs2');\n }\n\n // ColName\n tBuf.writeBVarchar(c.name, 'ucs2');\n }\n return tBuf.data;\n }\n\n /**\n * Sets a timeout for this bulk load.\n *\n * ```js\n * bulkLoad.setTimeout(timeout);\n * ```\n *\n * @param timeout The number of milliseconds before the bulk load is considered failed, or 0 for no timeout.\n * When no timeout is set for the bulk load, the [[ConnectionOptions.requestTimeout]] of the Connection is used.\n */\n setTimeout(timeout?: number) {\n this.timeout = timeout;\n }\n\n /**\n * @private\n */\n createDoneToken() {\n // It might be nice to make DoneToken a class if anything needs to create them, but for now, just do it here\n const tBuf = new WritableTrackingBuffer(this.options.tdsVersion < '7_2' ? 9 : 13);\n tBuf.writeUInt8(TOKEN_TYPE.DONE);\n const status = DONE_STATUS.FINAL;\n tBuf.writeUInt16LE(status);\n tBuf.writeUInt16LE(0); // CurCmd (TDS ignores this)\n tBuf.writeUInt32LE(0); // row count - doesn't really matter\n if (this.options.tdsVersion >= '7_2') {\n tBuf.writeUInt32LE(0); // row count is 64 bits in >= TDS 7.2\n }\n return tBuf.data;\n }\n\n /**\n * @private\n */\n cancel() {\n if (this.canceled) {\n return;\n }\n\n this.canceled = true;\n this.emit('cancel');\n }\n}\n\nexport default BulkLoad;\nmodule.exports = BulkLoad;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"bulk-load.js","names":["_events","require","_writableTrackingBuffer","_interopRequireDefault","_stream","_token","obj","__esModule","default","FLAGS","nullable","caseSen","updateableReadWrite","updateableUnknown","identity","computed","fixedLenCLRType","sparseColumnSet","hidden","key","nullableUnknown","DONE_STATUS","FINAL","MORE","ERROR","INXACT","COUNT","ATTN","SRVERROR","rowTokenBuffer","Buffer","from","TOKEN_TYPE","ROW","textPointerAndTimestampBuffer","textPointerNullBuffer","RowTransform","Transform","constructor","bulkLoad","writableObjectMode","mainOptions","options","columns","columnMetadataWritten","_transform","row","_encoding","callback","push","getColMetaData","i","length","c","value","Array","isArray","objName","firstRowWritten","type","validate","collation","error","parameter","scale","precision","name","generateParameterLength","chunk","generateParameterData","process","nextTick","_flush","createDoneToken","BulkLoad","EventEmitter","table","connectionOptions","checkConstraints","fireTriggers","keepNulls","lockTable","order","TypeError","column","direction","Object","entries","undefined","canceled","executionStarted","columnsByName","streamingMode","rowToPacketTransform","bulkOptions","addColumn","output","Error","id","resolveLength","resolvePrecision","resolveScale","getOptionsSql","addOptions","orderColumns","join","getBulkInsertSql","sql","len","declaration","getTableCreationSql","tBuf","WritableTrackingBuffer","writeUInt8","COLMETADATA","writeUInt16LE","j","tdsVersion","writeUInt32LE","flags","writeBuffer","generateTypeInfo","hasTableName","writeUsVarchar","writeBVarchar","data","setTimeout","timeout","DONE","status","cancel","emit","_default","exports","module"],"sources":["../src/bulk-load.ts"],"sourcesContent":["import { EventEmitter } from 'events';\nimport WritableTrackingBuffer from './tracking-buffer/writable-tracking-buffer';\nimport Connection, { type InternalConnectionOptions } from './connection';\n\nimport { Transform } from 'stream';\nimport { TYPE as TOKEN_TYPE } from './token/token';\n\nimport { type DataType, type Parameter } from './data-type';\nimport { Collation } from './collation';\n\n/**\n * @private\n */\nconst FLAGS = {\n nullable: 1 << 0,\n caseSen: 1 << 1,\n updateableReadWrite: 1 << 2,\n updateableUnknown: 1 << 3,\n identity: 1 << 4,\n computed: 1 << 5, // introduced in TDS 7.2\n fixedLenCLRType: 1 << 8, // introduced in TDS 7.2\n sparseColumnSet: 1 << 10, // introduced in TDS 7.3.B\n hidden: 1 << 13, // introduced in TDS 7.2\n key: 1 << 14, // introduced in TDS 7.2\n nullableUnknown: 1 << 15 // introduced in TDS 7.2\n};\n\n/**\n * @private\n */\nconst DONE_STATUS = {\n FINAL: 0x00,\n MORE: 0x1,\n ERROR: 0x2,\n INXACT: 0x4,\n COUNT: 0x10,\n ATTN: 0x20,\n SRVERROR: 0x100\n};\n\n/**\n * @private\n */\ninterface InternalOptions {\n checkConstraints: boolean;\n fireTriggers: boolean;\n keepNulls: boolean;\n lockTable: boolean;\n order: { [columnName: string]: 'ASC' | 'DESC' };\n}\n\nexport interface Options {\n /**\n * Honors constraints during bulk load, using T-SQL\n * [CHECK_CONSTRAINTS](https://technet.microsoft.com/en-us/library/ms186247(v=sql.105).aspx).\n * (default: `false`)\n */\n checkConstraints?: InternalOptions['checkConstraints'] | undefined;\n\n /**\n * Honors insert triggers during bulk load, using the T-SQL [FIRE_TRIGGERS](https://technet.microsoft.com/en-us/library/ms187640(v=sql.105).aspx). (default: `false`)\n */\n fireTriggers?: InternalOptions['fireTriggers'] | undefined;\n\n /**\n * Honors null value passed, ignores the default values set on table, using T-SQL [KEEP_NULLS](https://msdn.microsoft.com/en-us/library/ms187887(v=sql.120).aspx). (default: `false`)\n */\n keepNulls?: InternalOptions['keepNulls'] | undefined;\n\n /**\n * Places a bulk update(BU) lock on table while performing bulk load, using T-SQL [TABLOCK](https://technet.microsoft.com/en-us/library/ms180876(v=sql.105).aspx). (default: `false`)\n */\n lockTable?: InternalOptions['lockTable'] | undefined;\n\n /**\n * Specifies the ordering of the data to possibly increase bulk insert performance, using T-SQL [ORDER](https://docs.microsoft.com/en-us/previous-versions/sql/sql-server-2008-r2/ms177468(v=sql.105)). (default: `{}`)\n */\n order?: InternalOptions['order'] | undefined;\n}\n\n\nexport type Callback =\n /**\n * A function which will be called after the [[BulkLoad]] finishes executing.\n *\n * @param rowCount the number of rows inserted\n */\n (err: Error | undefined | null, rowCount?: number) => void;\n\ninterface Column extends Parameter {\n objName: string;\n collation: Collation | undefined;\n}\n\ninterface ColumnOptions {\n output?: boolean;\n\n /**\n * For VarChar, NVarChar, VarBinary. Use length as `Infinity` for VarChar(max), NVarChar(max) and VarBinary(max).\n */\n length?: number;\n\n /**\n * For Numeric, Decimal.\n */\n precision?: number;\n\n /**\n * For Numeric, Decimal, Time, DateTime2, DateTimeOffset.\n */\n scale?: number;\n\n /**\n * If the name of the column is different from the name of the property found on `rowObj` arguments passed to [[addRow]], then you can use this option to specify the property name.\n */\n objName?: string;\n\n /**\n * Indicates whether the column accepts NULL values.\n */\n nullable?: boolean;\n}\n\nconst rowTokenBuffer = Buffer.from([ TOKEN_TYPE.ROW ]);\nconst textPointerAndTimestampBuffer = Buffer.from([\n // TextPointer length\n 0x10,\n\n // TextPointer\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n\n // Timestamp\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00\n]);\nconst textPointerNullBuffer = Buffer.from([0x00]);\n\n// A transform that converts rows to packets.\nclass RowTransform extends Transform {\n /**\n * @private\n */\n declare columnMetadataWritten: boolean;\n /**\n * @private\n */\n declare bulkLoad: BulkLoad;\n /**\n * @private\n */\n declare mainOptions: BulkLoad['options'];\n /**\n * @private\n */\n declare columns: BulkLoad['columns'];\n\n /**\n * @private\n */\n constructor(bulkLoad: BulkLoad) {\n super({ writableObjectMode: true });\n\n this.bulkLoad = bulkLoad;\n this.mainOptions = bulkLoad.options;\n this.columns = bulkLoad.columns;\n\n this.columnMetadataWritten = false;\n }\n\n /**\n * @private\n */\n _transform(row: Array<unknown> | { [colName: string]: unknown }, _encoding: string, callback: (error?: Error) => void) {\n if (!this.columnMetadataWritten) {\n this.push(this.bulkLoad.getColMetaData());\n this.columnMetadataWritten = true;\n }\n\n this.push(rowTokenBuffer);\n\n for (let i = 0; i < this.columns.length; i++) {\n const c = this.columns[i];\n let value = Array.isArray(row) ? row[i] : row[c.objName];\n\n if (!this.bulkLoad.firstRowWritten) {\n try {\n value = c.type.validate(value, c.collation);\n } catch (error: any) {\n return callback(error);\n }\n }\n\n const parameter = {\n length: c.length,\n scale: c.scale,\n precision: c.precision,\n value: value\n };\n\n if (c.type.name === 'Text' || c.type.name === 'Image' || c.type.name === 'NText') {\n if (value == null) {\n this.push(textPointerNullBuffer);\n continue;\n }\n\n this.push(textPointerAndTimestampBuffer);\n }\n\n this.push(c.type.generateParameterLength(parameter, this.mainOptions));\n for (const chunk of c.type.generateParameterData(parameter, this.mainOptions)) {\n this.push(chunk);\n }\n }\n\n process.nextTick(callback);\n }\n\n /**\n * @private\n */\n _flush(callback: () => void) {\n this.push(this.bulkLoad.createDoneToken());\n\n process.nextTick(callback);\n }\n}\n\n/**\n * A BulkLoad instance is used to perform a bulk insert.\n *\n * Use [[Connection.newBulkLoad]] to create a new instance, and [[Connection.execBulkLoad]] to execute it.\n *\n * Example of BulkLoad Usages:\n *\n * ```js\n * // optional BulkLoad options\n * const options = { keepNulls: true };\n *\n * // instantiate - provide the table where you'll be inserting to, options and a callback\n * const bulkLoad = connection.newBulkLoad('MyTable', options, (error, rowCount) => {\n * console.log('inserted %d rows', rowCount);\n * });\n *\n * // setup your columns - always indicate whether the column is nullable\n * bulkLoad.addColumn('myInt', TYPES.Int, { nullable: false });\n * bulkLoad.addColumn('myString', TYPES.NVarChar, { length: 50, nullable: true });\n *\n * // execute\n * connection.execBulkLoad(bulkLoad, [\n * { myInt: 7, myString: 'hello' },\n * { myInt: 23, myString: 'world' }\n * ]);\n * ```\n */\nclass BulkLoad extends EventEmitter {\n /**\n * @private\n */\n declare error: Error | undefined;\n /**\n * @private\n */\n declare canceled: boolean;\n /**\n * @private\n */\n declare executionStarted: boolean;\n /**\n * @private\n */\n declare streamingMode: boolean;\n /**\n * @private\n */\n declare table: string;\n /**\n * @private\n */\n declare timeout: number | undefined;\n\n /**\n * @private\n */\n declare options: InternalConnectionOptions;\n /**\n * @private\n */\n declare callback: Callback;\n\n /**\n * @private\n */\n declare columns: Array<Column>;\n /**\n * @private\n */\n declare columnsByName: { [name: string]: Column };\n\n /**\n * @private\n */\n declare firstRowWritten: boolean;\n /**\n * @private\n */\n declare rowToPacketTransform: RowTransform;\n\n /**\n * @private\n */\n declare bulkOptions: InternalOptions;\n\n /**\n * @private\n */\n declare connection: Connection | undefined;\n /**\n * @private\n */\n declare rows: Array<any> | undefined;\n /**\n * @private\n */\n declare rst: Array<any> | undefined;\n /**\n * @private\n */\n declare rowCount: number | undefined;\n\n declare collation: Collation | undefined;\n\n /**\n * @private\n */\n constructor(table: string, collation: Collation | undefined, connectionOptions: InternalConnectionOptions, {\n checkConstraints = false,\n fireTriggers = false,\n keepNulls = false,\n lockTable = false,\n order = {},\n }: Options, callback: Callback) {\n if (typeof checkConstraints !== 'boolean') {\n throw new TypeError('The \"options.checkConstraints\" property must be of type boolean.');\n }\n\n if (typeof fireTriggers !== 'boolean') {\n throw new TypeError('The \"options.fireTriggers\" property must be of type boolean.');\n }\n\n if (typeof keepNulls !== 'boolean') {\n throw new TypeError('The \"options.keepNulls\" property must be of type boolean.');\n }\n\n if (typeof lockTable !== 'boolean') {\n throw new TypeError('The \"options.lockTable\" property must be of type boolean.');\n }\n\n if (typeof order !== 'object' || order === null) {\n throw new TypeError('The \"options.order\" property must be of type object.');\n }\n\n for (const [column, direction] of Object.entries(order)) {\n if (direction !== 'ASC' && direction !== 'DESC') {\n throw new TypeError('The value of the \"' + column + '\" key in the \"options.order\" object must be either \"ASC\" or \"DESC\".');\n }\n }\n\n super();\n\n this.error = undefined;\n this.canceled = false;\n this.executionStarted = false;\n\n this.collation = collation;\n\n this.table = table;\n this.options = connectionOptions;\n this.callback = callback;\n this.columns = [];\n this.columnsByName = {};\n this.firstRowWritten = false;\n this.streamingMode = false;\n\n this.rowToPacketTransform = new RowTransform(this); // eslint-disable-line no-use-before-define\n\n this.bulkOptions = { checkConstraints, fireTriggers, keepNulls, lockTable, order };\n }\n\n /**\n * Adds a column to the bulk load.\n *\n * The column definitions should match the table you are trying to insert into.\n * Attempting to call addColumn after the first row has been added will throw an exception.\n *\n * ```js\n * bulkLoad.addColumn('MyIntColumn', TYPES.Int, { nullable: false });\n * ```\n *\n * @param name The name of the column.\n * @param type One of the supported `data types`.\n * @param __namedParameters Additional column type information. At a minimum, `nullable` must be set to true or false.\n * @param length For VarChar, NVarChar, VarBinary. Use length as `Infinity` for VarChar(max), NVarChar(max) and VarBinary(max).\n * @param nullable Indicates whether the column accepts NULL values.\n * @param objName If the name of the column is different from the name of the property found on `rowObj` arguments passed to [[addRow]] or [[Connection.execBulkLoad]], then you can use this option to specify the property name.\n * @param precision For Numeric, Decimal.\n * @param scale For Numeric, Decimal, Time, DateTime2, DateTimeOffset.\n */\n addColumn(name: string, type: DataType, { output = false, length, precision, scale, objName = name, nullable = true }: ColumnOptions) {\n if (this.firstRowWritten) {\n throw new Error('Columns cannot be added to bulk insert after the first row has been written.');\n }\n if (this.executionStarted) {\n throw new Error('Columns cannot be added to bulk insert after execution has started.');\n }\n\n const column: Column = {\n type: type,\n name: name,\n value: null,\n output: output,\n length: length,\n precision: precision,\n scale: scale,\n objName: objName,\n nullable: nullable,\n collation: this.collation\n };\n\n if ((type.id & 0x30) === 0x20) {\n if (column.length == null && type.resolveLength) {\n column.length = type.resolveLength(column);\n }\n }\n\n if (type.resolvePrecision && column.precision == null) {\n column.precision = type.resolvePrecision(column);\n }\n\n if (type.resolveScale && column.scale == null) {\n column.scale = type.resolveScale(column);\n }\n\n this.columns.push(column);\n\n this.columnsByName[name] = column;\n }\n\n /**\n * @private\n */\n getOptionsSql() {\n const addOptions = [];\n\n if (this.bulkOptions.checkConstraints) {\n addOptions.push('CHECK_CONSTRAINTS');\n }\n\n if (this.bulkOptions.fireTriggers) {\n addOptions.push('FIRE_TRIGGERS');\n }\n\n if (this.bulkOptions.keepNulls) {\n addOptions.push('KEEP_NULLS');\n }\n\n if (this.bulkOptions.lockTable) {\n addOptions.push('TABLOCK');\n }\n\n if (this.bulkOptions.order) {\n const orderColumns = [];\n\n for (const [column, direction] of Object.entries(this.bulkOptions.order)) {\n orderColumns.push(`${column} ${direction}`);\n }\n\n if (orderColumns.length) {\n addOptions.push(`ORDER (${orderColumns.join(', ')})`);\n }\n }\n\n if (addOptions.length > 0) {\n return ` WITH (${addOptions.join(',')})`;\n } else {\n return '';\n }\n }\n\n /**\n * @private\n */\n getBulkInsertSql() {\n let sql = 'insert bulk ' + this.table + '(';\n for (let i = 0, len = this.columns.length; i < len; i++) {\n const c = this.columns[i];\n if (i !== 0) {\n sql += ', ';\n }\n sql += '[' + c.name + '] ' + (c.type.declaration(c));\n }\n sql += ')';\n\n sql += this.getOptionsSql();\n return sql;\n }\n\n /**\n * This is simply a helper utility function which returns a `CREATE TABLE SQL` statement based on the columns added to the bulkLoad object.\n * This may be particularly handy when you want to insert into a temporary table (a table which starts with `#`).\n *\n * ```js\n * var sql = bulkLoad.getTableCreationSql();\n * ```\n *\n * A side note on bulk inserting into temporary tables: if you want to access a local temporary table after executing the bulk load,\n * you'll need to use the same connection and execute your requests using [[Connection.execSqlBatch]] instead of [[Connection.execSql]]\n */\n getTableCreationSql() {\n let sql = 'CREATE TABLE ' + this.table + '(\\n';\n for (let i = 0, len = this.columns.length; i < len; i++) {\n const c = this.columns[i];\n if (i !== 0) {\n sql += ',\\n';\n }\n sql += '[' + c.name + '] ' + (c.type.declaration(c));\n if (c.nullable !== undefined) {\n sql += ' ' + (c.nullable ? 'NULL' : 'NOT NULL');\n }\n }\n sql += '\\n)';\n return sql;\n }\n\n /**\n * @private\n */\n getColMetaData() {\n const tBuf = new WritableTrackingBuffer(100, null, true);\n // TokenType\n tBuf.writeUInt8(TOKEN_TYPE.COLMETADATA);\n // Count\n tBuf.writeUInt16LE(this.columns.length);\n\n for (let j = 0, len = this.columns.length; j < len; j++) {\n const c = this.columns[j];\n // UserType\n if (this.options.tdsVersion < '7_2') {\n tBuf.writeUInt16LE(0);\n } else {\n tBuf.writeUInt32LE(0);\n }\n\n // Flags\n let flags = FLAGS.updateableReadWrite;\n if (c.nullable) {\n flags |= FLAGS.nullable;\n } else if (c.nullable === undefined && this.options.tdsVersion >= '7_2') {\n flags |= FLAGS.nullableUnknown;\n }\n tBuf.writeUInt16LE(flags);\n\n // TYPE_INFO\n tBuf.writeBuffer(c.type.generateTypeInfo(c, this.options));\n\n // TableName\n if (c.type.hasTableName) {\n tBuf.writeUsVarchar(this.table, 'ucs2');\n }\n\n // ColName\n tBuf.writeBVarchar(c.name, 'ucs2');\n }\n return tBuf.data;\n }\n\n /**\n * Sets a timeout for this bulk load.\n *\n * ```js\n * bulkLoad.setTimeout(timeout);\n * ```\n *\n * @param timeout The number of milliseconds before the bulk load is considered failed, or 0 for no timeout.\n * When no timeout is set for the bulk load, the [[ConnectionOptions.requestTimeout]] of the Connection is used.\n */\n setTimeout(timeout?: number) {\n this.timeout = timeout;\n }\n\n /**\n * @private\n */\n createDoneToken() {\n // It might be nice to make DoneToken a class if anything needs to create them, but for now, just do it here\n const tBuf = new WritableTrackingBuffer(this.options.tdsVersion < '7_2' ? 9 : 13);\n tBuf.writeUInt8(TOKEN_TYPE.DONE);\n const status = DONE_STATUS.FINAL;\n tBuf.writeUInt16LE(status);\n tBuf.writeUInt16LE(0); // CurCmd (TDS ignores this)\n tBuf.writeUInt32LE(0); // row count - doesn't really matter\n if (this.options.tdsVersion >= '7_2') {\n tBuf.writeUInt32LE(0); // row count is 64 bits in >= TDS 7.2\n }\n return tBuf.data;\n }\n\n /**\n * @private\n */\n cancel() {\n if (this.canceled) {\n return;\n }\n\n this.canceled = true;\n this.emit('cancel');\n }\n}\n\nexport default BulkLoad;\nmodule.exports = BulkLoad;\n"],"mappings":";;;;;;AAAA,IAAAA,OAAA,GAAAC,OAAA;AACA,IAAAC,uBAAA,GAAAC,sBAAA,CAAAF,OAAA;AAGA,IAAAG,OAAA,GAAAH,OAAA;AACA,IAAAI,MAAA,GAAAJ,OAAA;AAAmD,SAAAE,uBAAAG,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;AAKnD;AACA;AACA;AACA,MAAMG,KAAK,GAAG;EACZC,QAAQ,EAAE,CAAC,IAAI,CAAC;EAChBC,OAAO,EAAE,CAAC,IAAI,CAAC;EACfC,mBAAmB,EAAE,CAAC,IAAI,CAAC;EAC3BC,iBAAiB,EAAE,CAAC,IAAI,CAAC;EACzBC,QAAQ,EAAE,CAAC,IAAI,CAAC;EAChBC,QAAQ,EAAE,CAAC,IAAI,CAAC;EAAE;EAClBC,eAAe,EAAE,CAAC,IAAI,CAAC;EAAE;EACzBC,eAAe,EAAE,CAAC,IAAI,EAAE;EAAE;EAC1BC,MAAM,EAAE,CAAC,IAAI,EAAE;EAAE;EACjBC,GAAG,EAAE,CAAC,IAAI,EAAE;EAAE;EACdC,eAAe,EAAE,CAAC,IAAI,EAAE,CAAC;AAC3B,CAAC;;AAED;AACA;AACA;AACA,MAAMC,WAAW,GAAG;EAClBC,KAAK,EAAE,IAAI;EACXC,IAAI,EAAE,GAAG;EACTC,KAAK,EAAE,GAAG;EACVC,MAAM,EAAE,GAAG;EACXC,KAAK,EAAE,IAAI;EACXC,IAAI,EAAE,IAAI;EACVC,QAAQ,EAAE;AACZ,CAAC;;AAED;AACA;AACA;;AAiFA,MAAMC,cAAc,GAAGC,MAAM,CAACC,IAAI,CAAC,CAAEC,WAAU,CAACC,GAAG,CAAE,CAAC;AACtD,MAAMC,6BAA6B,GAAGJ,MAAM,CAACC,IAAI,CAAC;AAChD;AACA,IAAI;AAEJ;AACA,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;AAE9F;AACA,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAC/C,CAAC;AACF,MAAMI,qBAAqB,GAAGL,MAAM,CAACC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC;;AAEjD;AACA,MAAMK,YAAY,SAASC,iBAAS,CAAC;EACnC;AACF;AACA;;EAEE;AACF;AACA;;EAEE;AACF;AACA;;EAEE;AACF;AACA;;EAGE;AACF;AACA;EACEC,WAAWA,CAACC,QAAkB,EAAE;IAC9B,KAAK,CAAC;MAAEC,kBAAkB,EAAE;IAAK,CAAC,CAAC;IAEnC,IAAI,CAACD,QAAQ,GAAGA,QAAQ;IACxB,IAAI,CAACE,WAAW,GAAGF,QAAQ,CAACG,OAAO;IACnC,IAAI,CAACC,OAAO,GAAGJ,QAAQ,CAACI,OAAO;IAE/B,IAAI,CAACC,qBAAqB,GAAG,KAAK;EACpC;;EAEA;AACF;AACA;EACEC,UAAUA,CAACC,GAAoD,EAAEC,SAAiB,EAAEC,QAAiC,EAAE;IACrH,IAAI,CAAC,IAAI,CAACJ,qBAAqB,EAAE;MAC/B,IAAI,CAACK,IAAI,CAAC,IAAI,CAACV,QAAQ,CAACW,cAAc,CAAC,CAAC,CAAC;MACzC,IAAI,CAACN,qBAAqB,GAAG,IAAI;IACnC;IAEA,IAAI,CAACK,IAAI,CAACpB,cAAc,CAAC;IAEzB,KAAK,IAAIsB,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG,IAAI,CAACR,OAAO,CAACS,MAAM,EAAED,CAAC,EAAE,EAAE;MAC5C,MAAME,CAAC,GAAG,IAAI,CAACV,OAAO,CAACQ,CAAC,CAAC;MACzB,IAAIG,KAAK,GAAGC,KAAK,CAACC,OAAO,CAACV,GAAG,CAAC,GAAGA,GAAG,CAACK,CAAC,CAAC,GAAGL,GAAG,CAACO,CAAC,CAACI,OAAO,CAAC;MAExD,IAAI,CAAC,IAAI,CAAClB,QAAQ,CAACmB,eAAe,EAAE;QAClC,IAAI;UACFJ,KAAK,GAAGD,CAAC,CAACM,IAAI,CAACC,QAAQ,CAACN,KAAK,EAAED,CAAC,CAACQ,SAAS,CAAC;QAC7C,CAAC,CAAC,OAAOC,KAAU,EAAE;UACnB,OAAOd,QAAQ,CAACc,KAAK,CAAC;QACxB;MACF;MAEA,MAAMC,SAAS,GAAG;QAChBX,MAAM,EAAEC,CAAC,CAACD,MAAM;QAChBY,KAAK,EAAEX,CAAC,CAACW,KAAK;QACdC,SAAS,EAAEZ,CAAC,CAACY,SAAS;QACtBX,KAAK,EAAEA;MACT,CAAC;MAED,IAAID,CAAC,CAACM,IAAI,CAACO,IAAI,KAAK,MAAM,IAAIb,CAAC,CAACM,IAAI,CAACO,IAAI,KAAK,OAAO,IAAIb,CAAC,CAACM,IAAI,CAACO,IAAI,KAAK,OAAO,EAAE;QAChF,IAAIZ,KAAK,IAAI,IAAI,EAAE;UACjB,IAAI,CAACL,IAAI,CAACd,qBAAqB,CAAC;UAChC;QACF;QAEA,IAAI,CAACc,IAAI,CAACf,6BAA6B,CAAC;MAC1C;MAEA,IAAI,CAACe,IAAI,CAACI,CAAC,CAACM,IAAI,CAACQ,uBAAuB,CAACJ,SAAS,EAAE,IAAI,CAACtB,WAAW,CAAC,CAAC;MACtE,KAAK,MAAM2B,KAAK,IAAIf,CAAC,CAACM,IAAI,CAACU,qBAAqB,CAACN,SAAS,EAAE,IAAI,CAACtB,WAAW,CAAC,EAAE;QAC7E,IAAI,CAACQ,IAAI,CAACmB,KAAK,CAAC;MAClB;IACF;IAEAE,OAAO,CAACC,QAAQ,CAACvB,QAAQ,CAAC;EAC5B;;EAEA;AACF;AACA;EACEwB,MAAMA,CAACxB,QAAoB,EAAE;IAC3B,IAAI,CAACC,IAAI,CAAC,IAAI,CAACV,QAAQ,CAACkC,eAAe,CAAC,CAAC,CAAC;IAE1CH,OAAO,CAACC,QAAQ,CAACvB,QAAQ,CAAC;EAC5B;AACF;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM0B,QAAQ,SAASC,oBAAY,CAAC;EAClC;AACF;AACA;;EAEE;AACF;AACA;;EAEE;AACF;AACA;;EAEE;AACF;AACA;;EAEE;AACF;AACA;;EAEE;AACF;AACA;;EAGE;AACF;AACA;;EAEE;AACF;AACA;;EAGE;AACF;AACA;;EAEE;AACF;AACA;;EAGE;AACF;AACA;;EAEE;AACF;AACA;;EAGE;AACF;AACA;;EAGE;AACF;AACA;;EAEE;AACF;AACA;;EAEE;AACF;AACA;;EAEE;AACF;AACA;;EAKE;AACF;AACA;EACErC,WAAWA,CAACsC,KAAa,EAAEf,SAAgC,EAAEgB,iBAA4C,EAAE;IACzGC,gBAAgB,GAAG,KAAK;IACxBC,YAAY,GAAG,KAAK;IACpBC,SAAS,GAAG,KAAK;IACjBC,SAAS,GAAG,KAAK;IACjBC,KAAK,GAAG,CAAC;EACF,CAAC,EAAElC,QAAkB,EAAE;IAC9B,IAAI,OAAO8B,gBAAgB,KAAK,SAAS,EAAE;MACzC,MAAM,IAAIK,SAAS,CAAC,kEAAkE,CAAC;IACzF;IAEA,IAAI,OAAOJ,YAAY,KAAK,SAAS,EAAE;MACrC,MAAM,IAAII,SAAS,CAAC,8DAA8D,CAAC;IACrF;IAEA,IAAI,OAAOH,SAAS,KAAK,SAAS,EAAE;MAClC,MAAM,IAAIG,SAAS,CAAC,2DAA2D,CAAC;IAClF;IAEA,IAAI,OAAOF,SAAS,KAAK,SAAS,EAAE;MAClC,MAAM,IAAIE,SAAS,CAAC,2DAA2D,CAAC;IAClF;IAEA,IAAI,OAAOD,KAAK,KAAK,QAAQ,IAAIA,KAAK,KAAK,IAAI,EAAE;MAC/C,MAAM,IAAIC,SAAS,CAAC,sDAAsD,CAAC;IAC7E;IAEA,KAAK,MAAM,CAACC,MAAM,EAAEC,SAAS,CAAC,IAAIC,MAAM,CAACC,OAAO,CAACL,KAAK,CAAC,EAAE;MACvD,IAAIG,SAAS,KAAK,KAAK,IAAIA,SAAS,KAAK,MAAM,EAAE;QAC/C,MAAM,IAAIF,SAAS,CAAC,oBAAoB,GAAGC,MAAM,GAAG,qEAAqE,CAAC;MAC5H;IACF;IAEA,KAAK,CAAC,CAAC;IAEP,IAAI,CAACtB,KAAK,GAAG0B,SAAS;IACtB,IAAI,CAACC,QAAQ,GAAG,KAAK;IACrB,IAAI,CAACC,gBAAgB,GAAG,KAAK;IAE7B,IAAI,CAAC7B,SAAS,GAAGA,SAAS;IAE1B,IAAI,CAACe,KAAK,GAAGA,KAAK;IAClB,IAAI,CAAClC,OAAO,GAAGmC,iBAAiB;IAChC,IAAI,CAAC7B,QAAQ,GAAGA,QAAQ;IACxB,IAAI,CAACL,OAAO,GAAG,EAAE;IACjB,IAAI,CAACgD,aAAa,GAAG,CAAC,CAAC;IACvB,IAAI,CAACjC,eAAe,GAAG,KAAK;IAC5B,IAAI,CAACkC,aAAa,GAAG,KAAK;IAE1B,IAAI,CAACC,oBAAoB,GAAG,IAAIzD,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC;;IAEpD,IAAI,CAAC0D,WAAW,GAAG;MAAEhB,gBAAgB;MAAEC,YAAY;MAAEC,SAAS;MAAEC,SAAS;MAAEC;IAAM,CAAC;EACpF;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACEa,SAASA,CAAC7B,IAAY,EAAEP,IAAc,EAAE;IAAEqC,MAAM,GAAG,KAAK;IAAE5C,MAAM;IAAEa,SAAS;IAAED,KAAK;IAAEP,OAAO,GAAGS,IAAI;IAAExD,QAAQ,GAAG;EAAoB,CAAC,EAAE;IACpI,IAAI,IAAI,CAACgD,eAAe,EAAE;MACxB,MAAM,IAAIuC,KAAK,CAAC,8EAA8E,CAAC;IACjG;IACA,IAAI,IAAI,CAACP,gBAAgB,EAAE;MACzB,MAAM,IAAIO,KAAK,CAAC,qEAAqE,CAAC;IACxF;IAEA,MAAMb,MAAc,GAAG;MACrBzB,IAAI,EAAEA,IAAI;MACVO,IAAI,EAAEA,IAAI;MACVZ,KAAK,EAAE,IAAI;MACX0C,MAAM,EAAEA,MAAM;MACd5C,MAAM,EAAEA,MAAM;MACda,SAAS,EAAEA,SAAS;MACpBD,KAAK,EAAEA,KAAK;MACZP,OAAO,EAAEA,OAAO;MAChB/C,QAAQ,EAAEA,QAAQ;MAClBmD,SAAS,EAAE,IAAI,CAACA;IAClB,CAAC;IAED,IAAI,CAACF,IAAI,CAACuC,EAAE,GAAG,IAAI,MAAM,IAAI,EAAE;MAC7B,IAAId,MAAM,CAAChC,MAAM,IAAI,IAAI,IAAIO,IAAI,CAACwC,aAAa,EAAE;QAC/Cf,MAAM,CAAChC,MAAM,GAAGO,IAAI,CAACwC,aAAa,CAACf,MAAM,CAAC;MAC5C;IACF;IAEA,IAAIzB,IAAI,CAACyC,gBAAgB,IAAIhB,MAAM,CAACnB,SAAS,IAAI,IAAI,EAAE;MACrDmB,MAAM,CAACnB,SAAS,GAAGN,IAAI,CAACyC,gBAAgB,CAAChB,MAAM,CAAC;IAClD;IAEA,IAAIzB,IAAI,CAAC0C,YAAY,IAAIjB,MAAM,CAACpB,KAAK,IAAI,IAAI,EAAE;MAC7CoB,MAAM,CAACpB,KAAK,GAAGL,IAAI,CAAC0C,YAAY,CAACjB,MAAM,CAAC;IAC1C;IAEA,IAAI,CAACzC,OAAO,CAACM,IAAI,CAACmC,MAAM,CAAC;IAEzB,IAAI,CAACO,aAAa,CAACzB,IAAI,CAAC,GAAGkB,MAAM;EACnC;;EAEA;AACF;AACA;EACEkB,aAAaA,CAAA,EAAG;IACd,MAAMC,UAAU,GAAG,EAAE;IAErB,IAAI,IAAI,CAACT,WAAW,CAAChB,gBAAgB,EAAE;MACrCyB,UAAU,CAACtD,IAAI,CAAC,mBAAmB,CAAC;IACtC;IAEA,IAAI,IAAI,CAAC6C,WAAW,CAACf,YAAY,EAAE;MACjCwB,UAAU,CAACtD,IAAI,CAAC,eAAe,CAAC;IAClC;IAEA,IAAI,IAAI,CAAC6C,WAAW,CAACd,SAAS,EAAE;MAC9BuB,UAAU,CAACtD,IAAI,CAAC,YAAY,CAAC;IAC/B;IAEA,IAAI,IAAI,CAAC6C,WAAW,CAACb,SAAS,EAAE;MAC9BsB,UAAU,CAACtD,IAAI,CAAC,SAAS,CAAC;IAC5B;IAEA,IAAI,IAAI,CAAC6C,WAAW,CAACZ,KAAK,EAAE;MAC1B,MAAMsB,YAAY,GAAG,EAAE;MAEvB,KAAK,MAAM,CAACpB,MAAM,EAAEC,SAAS,CAAC,IAAIC,MAAM,CAACC,OAAO,CAAC,IAAI,CAACO,WAAW,CAACZ,KAAK,CAAC,EAAE;QACxEsB,YAAY,CAACvD,IAAI,CAAE,GAAEmC,MAAO,IAAGC,SAAU,EAAC,CAAC;MAC7C;MAEA,IAAImB,YAAY,CAACpD,MAAM,EAAE;QACvBmD,UAAU,CAACtD,IAAI,CAAE,UAASuD,YAAY,CAACC,IAAI,CAAC,IAAI,CAAE,GAAE,CAAC;MACvD;IACF;IAEA,IAAIF,UAAU,CAACnD,MAAM,GAAG,CAAC,EAAE;MACzB,OAAQ,UAASmD,UAAU,CAACE,IAAI,CAAC,GAAG,CAAE,GAAE;IAC1C,CAAC,MAAM;MACL,OAAO,EAAE;IACX;EACF;;EAEA;AACF;AACA;EACEC,gBAAgBA,CAAA,EAAG;IACjB,IAAIC,GAAG,GAAG,cAAc,GAAG,IAAI,CAAC/B,KAAK,GAAG,GAAG;IAC3C,KAAK,IAAIzB,CAAC,GAAG,CAAC,EAAEyD,GAAG,GAAG,IAAI,CAACjE,OAAO,CAACS,MAAM,EAAED,CAAC,GAAGyD,GAAG,EAAEzD,CAAC,EAAE,EAAE;MACvD,MAAME,CAAC,GAAG,IAAI,CAACV,OAAO,CAACQ,CAAC,CAAC;MACzB,IAAIA,CAAC,KAAK,CAAC,EAAE;QACXwD,GAAG,IAAI,IAAI;MACb;MACAA,GAAG,IAAI,GAAG,GAAGtD,CAAC,CAACa,IAAI,GAAG,IAAI,GAAIb,CAAC,CAACM,IAAI,CAACkD,WAAW,CAACxD,CAAC,CAAE;IACtD;IACAsD,GAAG,IAAI,GAAG;IAEVA,GAAG,IAAI,IAAI,CAACL,aAAa,CAAC,CAAC;IAC3B,OAAOK,GAAG;EACZ;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACEG,mBAAmBA,CAAA,EAAG;IACpB,IAAIH,GAAG,GAAG,eAAe,GAAG,IAAI,CAAC/B,KAAK,GAAG,KAAK;IAC9C,KAAK,IAAIzB,CAAC,GAAG,CAAC,EAAEyD,GAAG,GAAG,IAAI,CAACjE,OAAO,CAACS,MAAM,EAAED,CAAC,GAAGyD,GAAG,EAAEzD,CAAC,EAAE,EAAE;MACvD,MAAME,CAAC,GAAG,IAAI,CAACV,OAAO,CAACQ,CAAC,CAAC;MACzB,IAAIA,CAAC,KAAK,CAAC,EAAE;QACXwD,GAAG,IAAI,KAAK;MACd;MACAA,GAAG,IAAI,GAAG,GAAGtD,CAAC,CAACa,IAAI,GAAG,IAAI,GAAIb,CAAC,CAACM,IAAI,CAACkD,WAAW,CAACxD,CAAC,CAAE;MACpD,IAAIA,CAAC,CAAC3C,QAAQ,KAAK8E,SAAS,EAAE;QAC5BmB,GAAG,IAAI,GAAG,IAAItD,CAAC,CAAC3C,QAAQ,GAAG,MAAM,GAAG,UAAU,CAAC;MACjD;IACF;IACAiG,GAAG,IAAI,KAAK;IACZ,OAAOA,GAAG;EACZ;;EAEA;AACF;AACA;EACEzD,cAAcA,CAAA,EAAG;IACf,MAAM6D,IAAI,GAAG,IAAIC,+BAAsB,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC;IACxD;IACAD,IAAI,CAACE,UAAU,CAACjF,WAAU,CAACkF,WAAW,CAAC;IACvC;IACAH,IAAI,CAACI,aAAa,CAAC,IAAI,CAACxE,OAAO,CAACS,MAAM,CAAC;IAEvC,KAAK,IAAIgE,CAAC,GAAG,CAAC,EAAER,GAAG,GAAG,IAAI,CAACjE,OAAO,CAACS,MAAM,EAAEgE,CAAC,GAAGR,GAAG,EAAEQ,CAAC,EAAE,EAAE;MACvD,MAAM/D,CAAC,GAAG,IAAI,CAACV,OAAO,CAACyE,CAAC,CAAC;MACzB;MACA,IAAI,IAAI,CAAC1E,OAAO,CAAC2E,UAAU,GAAG,KAAK,EAAE;QACnCN,IAAI,CAACI,aAAa,CAAC,CAAC,CAAC;MACvB,CAAC,MAAM;QACLJ,IAAI,CAACO,aAAa,CAAC,CAAC,CAAC;MACvB;;MAEA;MACA,IAAIC,KAAK,GAAG9G,KAAK,CAACG,mBAAmB;MACrC,IAAIyC,CAAC,CAAC3C,QAAQ,EAAE;QACd6G,KAAK,IAAI9G,KAAK,CAACC,QAAQ;MACzB,CAAC,MAAM,IAAI2C,CAAC,CAAC3C,QAAQ,KAAK8E,SAAS,IAAI,IAAI,CAAC9C,OAAO,CAAC2E,UAAU,IAAI,KAAK,EAAE;QACvEE,KAAK,IAAI9G,KAAK,CAACW,eAAe;MAChC;MACA2F,IAAI,CAACI,aAAa,CAACI,KAAK,CAAC;;MAEzB;MACAR,IAAI,CAACS,WAAW,CAACnE,CAAC,CAACM,IAAI,CAAC8D,gBAAgB,CAACpE,CAAC,EAAE,IAAI,CAACX,OAAO,CAAC,CAAC;;MAE1D;MACA,IAAIW,CAAC,CAACM,IAAI,CAAC+D,YAAY,EAAE;QACvBX,IAAI,CAACY,cAAc,CAAC,IAAI,CAAC/C,KAAK,EAAE,MAAM,CAAC;MACzC;;MAEA;MACAmC,IAAI,CAACa,aAAa,CAACvE,CAAC,CAACa,IAAI,EAAE,MAAM,CAAC;IACpC;IACA,OAAO6C,IAAI,CAACc,IAAI;EAClB;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACEC,UAAUA,CAACC,OAAgB,EAAE;IAC3B,IAAI,CAACA,OAAO,GAAGA,OAAO;EACxB;;EAEA;AACF;AACA;EACEtD,eAAeA,CAAA,EAAG;IAChB;IACA,MAAMsC,IAAI,GAAG,IAAIC,+BAAsB,CAAC,IAAI,CAACtE,OAAO,CAAC2E,UAAU,GAAG,KAAK,GAAG,CAAC,GAAG,EAAE,CAAC;IACjFN,IAAI,CAACE,UAAU,CAACjF,WAAU,CAACgG,IAAI,CAAC;IAChC,MAAMC,MAAM,GAAG5G,WAAW,CAACC,KAAK;IAChCyF,IAAI,CAACI,aAAa,CAACc,MAAM,CAAC;IAC1BlB,IAAI,CAACI,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;IACvBJ,IAAI,CAACO,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;IACvB,IAAI,IAAI,CAAC5E,OAAO,CAAC2E,UAAU,IAAI,KAAK,EAAE;MACpCN,IAAI,CAACO,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;IACzB;;IACA,OAAOP,IAAI,CAACc,IAAI;EAClB;;EAEA;AACF;AACA;EACEK,MAAMA,CAAA,EAAG;IACP,IAAI,IAAI,CAACzC,QAAQ,EAAE;MACjB;IACF;IAEA,IAAI,CAACA,QAAQ,GAAG,IAAI;IACpB,IAAI,CAAC0C,IAAI,CAAC,QAAQ,CAAC;EACrB;AACF;AAAC,IAAAC,QAAA,GAEc1D,QAAQ;AAAA2D,OAAA,CAAA7H,OAAA,GAAA4H,QAAA;AACvBE,MAAM,CAACD,OAAO,GAAG3D,QAAQ"}
|
package/lib/collation.js
CHANGED
|
@@ -307,12 +307,6 @@ const Flags = {
|
|
|
307
307
|
};
|
|
308
308
|
exports.Flags = Flags;
|
|
309
309
|
class Collation {
|
|
310
|
-
lcid;
|
|
311
|
-
flags;
|
|
312
|
-
version;
|
|
313
|
-
sortId;
|
|
314
|
-
codepage;
|
|
315
|
-
buffer;
|
|
316
310
|
static fromBuffer(buffer, offset = 0) {
|
|
317
311
|
let lcid = (buffer[offset + 2] & 0x0F) << 16;
|
|
318
312
|
lcid |= buffer[offset + 1] << 8;
|
|
@@ -354,4 +348,4 @@ class Collation {
|
|
|
354
348
|
}
|
|
355
349
|
}
|
|
356
350
|
exports.Collation = Collation;
|
|
357
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjb2RlcGFnZUJ5TGFuZ3VhZ2VJZCIsImV4cG9ydHMiLCJjb2RlcGFnZUJ5U29ydElkIiwiRmxhZ3MiLCJJR05PUkVfQ0FTRSIsIklHTk9SRV9BQ0NFTlQiLCJJR05PUkVfS0FOQSIsIklHTk9SRV9XSURUSCIsIkJJTkFSWSIsIkJJTkFSWTIiLCJVVEY4IiwiQ29sbGF0aW9uIiwibGNpZCIsImZsYWdzIiwidmVyc2lvbiIsInNvcnRJZCIsImNvZGVwYWdlIiwiYnVmZmVyIiwiZnJvbUJ1ZmZlciIsIm9mZnNldCIsImNvbnN0cnVjdG9yIiwidW5kZWZpbmVkIiwibGFuZ3VhZ2VJZCIsInRvQnVmZmVyIiwiQnVmZmVyIiwiYWxsb2MiXSwic291cmNlcyI6WyIuLi9zcmMvY29sbGF0aW9uLnRzIl0sInNvdXJjZXNDb250ZW50IjpbInR5cGUgRW5jb2RpbmcgPSAndXRmLTgnIHwgJ0NQNDM3JyB8ICdDUDg1MCcgfCAnQ1A4NzQnIHwgJ0NQOTMyJyB8ICdDUDkzNicgfCAnQ1A5NDknIHwgJ0NQOTUwJyB8ICdDUDEyNTAnIHwgJ0NQMTI1MScgfCAnQ1AxMjUyJyB8ICdDUDEyNTMnIHwgJ0NQMTI1NCcgfCAnQ1AxMjU1JyB8ICdDUDEyNTYnIHwgJ0NQMTI1NycgfCAnQ1AxMjU4JztcblxuLy8gaHR0cDovL3RlY2huZXQubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L2FhMTc2NTUzKHY9c3FsLjgwKS5hc3B4XG5leHBvcnQgY29uc3QgY29kZXBhZ2VCeUxhbmd1YWdlSWQ6IHsgW2tleTogbnVtYmVyXTogRW5jb2RpbmcgfSA9IHtcbiAgLy8gQXJhYmljXypcbiAgWzB4MDQwMV06ICdDUDEyNTYnLFxuXG4gIC8vIENoaW5lc2VfVGFpd2FuX1N0cm9rZV8qXG4gIC8vIENoaW5lc2VfVHJhZGl0aW9uYWxfU3Ryb2tlX0NvdW50XypcbiAgLy8gQ2hpbmVzZV9UYWl3YW5fQm9wb21vZm9fKlxuICAvLyBDaGluZXNlX1RyYWRpdGlvbmFsX0JvcG9tb2ZvXypcbiAgWzB4MDQwNF06ICdDUDk1MCcsXG5cbiAgLy8gQ3plY2hfKlxuICBbMHgwNDA1XTogJ0NQMTI1MCcsXG5cbiAgLy8gRGFuaXNoX0dyZWVubGFuZGljXypcbiAgLy8gRGFuaXNoX05vcndlZ2lhbl8qXG4gIFsweDA0MDZdOiAnQ1AxMjUyJyxcblxuICAvLyBHcmVla18qXG4gIFsweDA0MDhdOiAnQ1AxMjUzJyxcblxuICAvLyBMYXRpbjFfR2VuZXJhbF8qXG4gIFsweDA0MDldOiAnQ1AxMjUyJyxcblxuICAvLyBUcmFkaXRpb25hbF9TcGFuaXNoXypcbiAgWzB4MDQwQV06ICdDUDEyNTInLFxuXG4gIC8vIEZpbm5pc2hfU3dlZGlzaF8qXG4gIFsweDA0MEJdOiAnQ1AxMjUyJyxcblxuICAvLyBGcmVuY2hfKlxuICBbMHgwNDBDXTogJ0NQMTI1MicsXG5cbiAgLy8gSGVicmV3XypcbiAgWzB4MDQwRF06ICdDUDEyNTUnLFxuXG4gIC8vIEh1bmdhcmlhbl8qXG4gIC8vIEh1bmdhcmlhbl9UZWNobmljYWxfKlxuICBbMHgwNDBFXTogJ0NQMTI1MCcsXG5cbiAgLy8gSWNlbGFuZGljXypcbiAgWzB4MDQwRl06ICdDUDEyNTInLFxuXG4gIC8vIEphcGFuZXNlXypcbiAgLy8gSmFwYW5lc2VfWEpJU18qXG4gIC8vIEphcGFuZXNlX1VuaWNvZGVfKlxuICAvLyBKYXBhbmVzZV9CdXNodV9LYWt1c3VfKlxuICBbMHgwNDExXTogJ0NQOTMyJyxcblxuICAvLyBLb3JlYW5fKlxuICAvLyBLb3JlYW5fV2Fuc3VuZ18qXG4gIFsweDA0MTJdOiAnQ1A5NDknLFxuXG4gIC8vIE5vcndlZ2lhbl8qXG4gIFsweDA0MTRdOiAnQ1AxMjUyJyxcblxuICAvLyBQb2xpc2hfKlxuICBbMHgwNDE1XTogJ0NQMTI1MCcsXG5cbiAgLy8gUm9tYW5zaF8qXG4gIFsweDA0MTddOiAnQ1AxMjUyJyxcblxuICAvLyBSb21hbmlhbl8qXG4gIFsweDA0MThdOiAnQ1AxMjUwJyxcblxuICAvLyBDeXJpbGxpY18qXG4gIFsweDA0MTldOiAnQ1AxMjUxJyxcblxuICAvLyBDcm9hdGlhbl8qXG4gIFsweDA0MUFdOiAnQ1AxMjUwJyxcblxuICAvLyBTbG92YWtfKlxuICBbMHgwNDFCXTogJ0NQMTI1MCcsXG5cbiAgLy8gQWxiYW5pYW5fKlxuICBbMHgwNDFDXTogJ0NQMTI1MCcsXG5cbiAgLy8gVGhhaV8qXG4gIFsweDA0MUVdOiAnQ1A4NzQnLFxuXG4gIC8vIFR1cmtpc2hfKlxuICBbMHgwNDFGXTogJ0NQMTI1NCcsXG5cbiAgLy8gVXJkdV8qXG4gIFsweDA0MjBdOiAnQ1AxMjU2JyxcblxuICAvLyBVa3JhaW5pYW5fKlxuICBbMHgwNDIyXTogJ0NQMTI1MScsXG5cbiAgLy8gU2xvdmVuaWFuXypcbiAgWzB4MDQyNF06ICdDUDEyNTAnLFxuXG4gIC8vIEVzdG9uaWFuXypcbiAgWzB4MDQyNV06ICdDUDEyNTcnLFxuXG4gIC8vIExhdHZpYW5fKlxuICBbMHgwNDI2XTogJ0NQMTI1NycsXG5cbiAgLy8gTGl0aHVhbmlhbl8qXG4gIFsweDA0MjddOiAnQ1AxMjU3JyxcblxuICAvLyBQZXJzaWFuXypcbiAgWzB4MDQyOV06ICdDUDEyNTYnLFxuXG4gIC8vIFZpZXRuYW1lc2VfKlxuICBbMHgwNDJBXTogJ0NQMTI1OCcsXG5cbiAgLy8gQXplcmlfTGF0aW5fKlxuICBbMHgwNDJDXTogJ0NQMTI1NCcsXG5cbiAgLy8gVXBwZXJfU29yYmlhbl8qXG4gIFsweDA0MkVdOiAnQ1AxMjUyJyxcblxuICAvLyBNYWNlZG9uaWFuX0ZZUk9NXypcbiAgWzB4MDQyRl06ICdDUDEyNTEnLFxuXG4gIC8vIFNhbWlfTm9yd2F5XypcbiAgWzB4MDQzQl06ICdDUDEyNTInLFxuXG4gIC8vIEthemFraF8qXG4gIFsweDA0M0ZdOiAnQ1AxMjUxJyxcblxuICAvLyBUdXJrbWVuXypcbiAgWzB4MDQ0Ml06ICdDUDEyNTAnLFxuXG4gIC8vIFV6YmVrX0xhdGluXypcbiAgWzB4MDQ0M106ICdDUDEyNTQnLFxuXG4gIC8vIFRhdGFyXypcbiAgWzB4MDQ0NF06ICdDUDEyNTEnLFxuXG4gIC8vIFdlbHNoXypcbiAgWzB4MDQ1Ml06ICdDUDEyNTInLFxuXG4gIC8vIEZyaXNpYW5fKlxuICBbMHgwNDYyXTogJ0NQMTI1MicsXG5cbiAgLy8gQmFzaGtpcl8qXG4gIFsweDA0NkRdOiAnQ1AxMjUxJyxcblxuICAvLyBNYXB1ZHVuZ2FuXypcbiAgWzB4MDQ3QV06ICdDUDEyNTInLFxuXG4gIC8vIE1vaGF3a18qXG4gIFsweDA0N0NdOiAnQ1AxMjUyJyxcblxuICAvLyBCcmV0b25fKlxuICBbMHgwNDdFXTogJ0NQMTI1MicsXG5cbiAgLy8gVWlnaHVyXypcbiAgWzB4MDQ4MF06ICdDUDEyNTYnLFxuXG4gIC8vIENvcnNpY2FuXypcbiAgWzB4MDQ4M106ICdDUDEyNTInLFxuXG4gIC8vIFlha3V0XypcbiAgWzB4MDQ4NV06ICdDUDEyNTEnLFxuXG4gIC8vIERhcmlfKlxuICBbMHgwNDhDXTogJ0NQMTI1NicsXG5cbiAgLy8gQ2hpbmVzZV9QUkNfKlxuICAvLyBDaGluZXNlX1NpbXBsaWZpZWRfUGlueWluXypcbiAgLy8gQ2hpbmVzZV9QUkNfU3Ryb2tlXypcbiAgLy8gQ2hpbmVzZV9TaW1wbGlmaWVkX1N0cm9rZV9PcmRlcl8qXG4gIFsweDA4MDRdOiAnQ1A5MzYnLFxuXG4gIC8vIFNlcmJpYW5fTGF0aW5fKlxuICBbMHgwODFBXTogJ0NQMTI1MCcsXG5cbiAgLy8gQXplcmlfQ3lyaWxsaWNfKlxuICBbMHgwODJDXTogJ0NQMTI1MScsXG5cbiAgLy8gU2FtaV9Td2VkZW5fRmlubGFuZF8qXG4gIFsweDA4M0JdOiAnQ1AxMjUyJyxcblxuICAvLyBUYW1hemlnaHRfKlxuICBbMHgwODVGXTogJ0NQMTI1MicsXG5cbiAgLy8gQ2hpbmVzZV9Ib25nX0tvbmdfU3Ryb2tlXypcbiAgWzB4MEMwNF06ICdDUDk1MCcsXG5cbiAgLy8gTW9kZXJuX1NwYW5pc2hfKlxuICBbMHgwQzBBXTogJ0NQMTI1MicsXG5cbiAgLy8gU2VyYmlhbl9DeXJpbGxpY18qXG4gIFsweDBDMUFdOiAnQ1AxMjUxJyxcblxuICAvLyBDaGluZXNlX1RyYWRpdGlvbmFsX1Bpbnlpbl8qXG4gIC8vIENoaW5lc2VfVHJhZGl0aW9uYWxfU3Ryb2tlX09yZGVyXypcbiAgWzB4MTQwNF06ICdDUDk1MCcsXG5cbiAgLy8gQm9zbmlhbl9MYXRpbl8qXG4gIFsweDE0MUFdOiAnQ1AxMjUwJyxcblxuICAvLyBCb3NuaWFuX0N5cmlsbGljXypcbiAgWzB4MjAxQV06ICdDUDEyNTEnLFxuXG4gIC8vIEdlcm1hblxuICAvLyBHZXJtYW5fUGhvbmVCb29rXypcbiAgWzB4MDQwN106ICdDUDEyNTInLFxuXG4gIC8vIEdlb3JnaWFuX01vZGVybl9Tb3J0XypcbiAgWzB4MDQzN106ICdDUDEyNTInXG59O1xuXG5leHBvcnQgY29uc3QgY29kZXBhZ2VCeVNvcnRJZDogeyBba2V5OiBudW1iZXJdOiBFbmNvZGluZyB9ID0ge1xuICBbMzBdOiAnQ1A0MzcnLCAvLyBTUUxfTGF0aW4xX0dlbmVyYWxfQ1A0MzdfQklOXG4gIFszMV06ICdDUDQzNycsIC8vIFNRTF9MYXRpbjFfR2VuZXJhbF9DUDQzN19DU19BU1xuICBbMzJdOiAnQ1A0MzcnLCAvLyBTUUxfTGF0aW4xX0dlbmVyYWxfQ1A0MzdfQ0lfQVNcbiAgWzMzXTogJ0NQNDM3JywgLy8gU1FMX0xhdGluMV9HZW5lcmFsX1ByZWZfQ1A0MzdfQ0lfQVNcbiAgWzM0XTogJ0NQNDM3JywgLy8gU1FMX0xhdGluMV9HZW5lcmFsX0NQNDM3X0NJX0FJXG4gIFs0MF06ICdDUDg1MCcsIC8vIFNRTF9MYXRpbjFfR2VuZXJhbF9DUDg1MF9CSU5cbiAgWzQxXTogJ0NQODUwJywgLy8gU1FMX0xhdGluMV9HZW5lcmFsX0NQODUwX0NTX0FTXG4gIFs0Ml06ICdDUDg1MCcsIC8vIFNRTF9MYXRpbjFfR2VuZXJhbF9DUDg1MF9DSV9BU1xuICBbNDNdOiAnQ1A4NTAnLCAvLyBTUUxfTGF0aW4xX0dlbmVyYWxfUHJlZl9DUDg1MF9DSV9BU1xuICBbNDRdOiAnQ1A4NTAnLCAvLyBTUUxfTGF0aW4xX0dlbmVyYWxfQ1A4NTBfQ0lfQUlcbiAgWzQ5XTogJ0NQODUwJywgLy8gU1FMXzF4Q29tcGF0X0NQODUwX0NJX0FTXG4gIFs1MV06ICdDUDEyNTInLCAvLyBTUUxfTGF0aW4xX0dlbmVyYWxfQ3AxX0NTX0FTX0tJX1dJXG4gIFs1Ml06ICdDUDEyNTInLCAvLyBTUUxfTGF0aW4xX0dlbmVyYWxfQ3AxX0NJX0FTX0tJX1dJXG4gIFs1M106ICdDUDEyNTInLCAvLyBTUUxfTGF0aW4xX0dlbmVyYWxfUHJlZl9DcDFfQ0lfQVNfS0lfV0lcbiAgWzU0XTogJ0NQMTI1MicsIC8vIFNRTF9MYXRpbjFfR2VuZXJhbF9DcDFfQ0lfQUlfS0lfV0lcbiAgWzU1XTogJ0NQODUwJywgLy8gU1FMX0FsdERpY3Rpb25fQ1A4NTBfQ1NfQVNcbiAgWzU2XTogJ0NQODUwJywgLy8gU1FMX0FsdERpY3Rpb25fUHJlZl9DUDg1MF9DSV9BU1xuICBbNTddOiAnQ1A4NTAnLCAvLyBTUUxfQWx0RGljdGlvbl9DUDg1MF9DSV9BSVxuICBbNThdOiAnQ1A4NTAnLCAvLyBTUUxfU2NhbmRpbmF2aWFuX1ByZWZfQ1A4NTBfQ0lfQVNcbiAgWzU5XTogJ0NQODUwJywgLy8gU1FMX1NjYW5kaW5hdmlhbl9DUDg1MF9DU19BU1xuICBbNjBdOiAnQ1A4NTAnLCAvLyBTUUxfU2NhbmRpbmF2aWFuX0NQODUwX0NJX0FTXG4gIFs2MV06ICdDUDg1MCcsIC8vIFNRTF9BbHREaWN0aW9uX0NQODUwX0NJX0FTXG4gIFs4MF06ICdDUDEyNTAnLCAvLyBTUUxfTGF0aW4xX0dlbmVyYWxfMTI1MF9CSU5cbiAgWzgxXTogJ0NQMTI1MCcsIC8vIFNRTF9MYXRpbjFfR2VuZXJhbF9DUDEyNTBfQ1NfQVNcbiAgWzgyXTogJ0NQMTI1MCcsIC8vIFNRTF9MYXRpbjFfR2VuZXJhbF9DcDEyNTBfQ0lfQVNfS0lfV0lcbiAgWzgzXTogJ0NQMTI1MCcsIC8vIFNRTF9DemVjaF9DcDEyNTBfQ1NfQVNfS0lfV0lcbiAgWzg0XTogJ0NQMTI1MCcsIC8vIFNRTF9DemVjaF9DcDEyNTBfQ0lfQVNfS0lfV0lcbiAgWzg1XTogJ0NQMTI1MCcsIC8vIFNRTF9IdW5nYXJpYW5fQ3AxMjUwX0NTX0FTX0tJX1dJXG4gIFs4Nl06ICdDUDEyNTAnLCAvLyBTUUxfSHVuZ2FyaWFuX0NwMTI1MF9DSV9BU19LSV9XSVxuICBbODddOiAnQ1AxMjUwJywgLy8gU1FMX1BvbGlzaF9DcDEyNTBfQ1NfQVNfS0lfV0lcbiAgWzg4XTogJ0NQMTI1MCcsIC8vIFNRTF9Qb2xpc2hfQ3AxMjUwX0NJX0FTX0tJX1dJXG4gIFs4OV06ICdDUDEyNTAnLCAvLyBTUUxfUm9tYW5pYW5fQ3AxMjUwX0NTX0FTX0tJX1dJXG4gIFs5MF06ICdDUDEyNTAnLCAvLyBTUUxfUm9tYW5pYW5fQ3AxMjUwX0NJX0FTX0tJX1dJXG4gIFs5MV06ICdDUDEyNTAnLCAvLyBTUUxfQ3JvYXRpYW5fQ3AxMjUwX0NTX0FTX0tJX1dJXG4gIFs5Ml06ICdDUDEyNTAnLCAvLyBTUUxfQ3JvYXRpYW5fQ3AxMjUwX0NJX0FTX0tJX1dJXG4gIFs5M106ICdDUDEyNTAnLCAvLyBTUUxfU2xvdmFrX0NwMTI1MF9DU19BU19LSV9XSVxuICBbOTRdOiAnQ1AxMjUwJywgLy8gU1FMX1Nsb3Zha19DcDEyNTBfQ0lfQVNfS0lfV0lcbiAgWzk1XTogJ0NQMTI1MCcsIC8vIFNRTF9TbG92ZW5pYW5fQ3AxMjUwX0NTX0FTX0tJX1dJXG4gIFs5Nl06ICdDUDEyNTAnLCAvLyBTUUxfU2xvdmVuaWFuX0NwMTI1MF9DSV9BU19LSV9XSVxuICBbMTA0XTogJ0NQMTI1MScsIC8vIFNRTF9MYXRpbjFfR2VuZXJhbF8xMjUxX0JJTlxuICBbMTA1XTogJ0NQMTI1MScsIC8vIFNRTF9MYXRpbjFfR2VuZXJhbF9DUDEyNTFfQ1NfQVNcbiAgWzEwNl06ICdDUDEyNTEnLCAvLyBTUUxfTGF0aW4xX0dlbmVyYWxfQ1AxMjUxX0NJX0FTXG4gIFsxMDddOiAnQ1AxMjUxJywgLy8gU1FMX1VrcmFpbmlhbl9DcDEyNTFfQ1NfQVNfS0lfV0lcbiAgWzEwOF06ICdDUDEyNTEnLCAvLyBTUUxfVWtyYWluaWFuX0NwMTI1MV9DSV9BU19LSV9XSVxuICBbMTEyXTogJ0NQMTI1MycsIC8vIFNRTF9MYXRpbjFfR2VuZXJhbF8xMjUzX0JJTlxuICBbMTEzXTogJ0NQMTI1MycsIC8vIFNRTF9MYXRpbjFfR2VuZXJhbF9DUDEyNTNfQ1NfQVNcbiAgWzExNF06ICdDUDEyNTMnLCAvLyBTUUxfTGF0aW4xX0dlbmVyYWxfQ1AxMjUzX0NJX0FTXG4gIFsxMjBdOiAnQ1AxMjUzJywgLy8gU1FMX01peERpY3Rpb25fQ1AxMjUzX0NTX0FTXG4gIFsxMjFdOiAnQ1AxMjUzJywgLy8gU1FMX0FsdERpY3Rpb25fQ1AxMjUzX0NTX0FTXG4gIFsxMjJdOiAnQ1AxMjUzJywgLy8gU1FMX0FsdERpY3Rpb24yX0NQMTI1M19DU19BU1xuICBbMTI0XTogJ0NQMTI1MycsIC8vIFNRTF9MYXRpbjFfR2VuZXJhbF9DUDEyNTNfQ0lfQUlcbiAgWzEyOF06ICdDUDEyNTQnLCAvLyBTUUxfTGF0aW4xX0dlbmVyYWxfMTI1NF9CSU5cbiAgWzEyOV06ICdDUDEyNTQnLCAvLyBTUUxfTGF0aW4xX0dlbmVyYWxfQ3AxMjU0X0NTX0FTX0tJX1dJXG4gIFsxMzBdOiAnQ1AxMjU0JywgLy8gU1FMX0xhdGluMV9HZW5lcmFsX0NwMTI1NF9DSV9BU19LSV9XSVxuICBbMTM2XTogJ0NQMTI1NScsIC8vIFNRTF9MYXRpbjFfR2VuZXJhbF8xMjU1X0JJTlxuICBbMTM3XTogJ0NQMTI1NScsIC8vIFNRTF9MYXRpbjFfR2VuZXJhbF9DUDEyNTVfQ1NfQVNcbiAgWzEzOF06ICdDUDEyNTUnLCAvLyBTUUxfTGF0aW4xX0dlbmVyYWxfQ1AxMjU1X0NJX0FTXG4gIFsxNDRdOiAnQ1AxMjU2JywgLy8gU1FMX0xhdGluMV9HZW5lcmFsXzEyNTZfQklOXG4gIFsxNDVdOiAnQ1AxMjU2JywgLy8gU1FMX0xhdGluMV9HZW5lcmFsX0NQMTI1Nl9DU19BU1xuICBbMTQ2XTogJ0NQMTI1NicsIC8vIFNRTF9MYXRpbjFfR2VuZXJhbF9DUDEyNTZfQ0lfQVNcbiAgWzE1Ml06ICdDUDEyNTcnLCAvLyBTUUxfTGF0aW4xX0dlbmVyYWxfMTI1N19CSU5cbiAgWzE1M106ICdDUDEyNTcnLCAvLyBTUUxfTGF0aW4xX0dlbmVyYWxfQ1AxMjU3X0NTX0FTXG4gIFsxNTRdOiAnQ1AxMjU3JywgLy8gU1FMX0xhdGluMV9HZW5lcmFsX0NQMTI1N19DSV9BU1xuICBbMTU1XTogJ0NQMTI1NycsIC8vIFNRTF9Fc3Rvbmlhbl9DcDEyNTdfQ1NfQVNfS0lfV0lcbiAgWzE1Nl06ICdDUDEyNTcnLCAvLyBTUUxfRXN0b25pYW5fQ3AxMjU3X0NJX0FTX0tJX1dJXG4gIFsxNTddOiAnQ1AxMjU3JywgLy8gU1FMX0xhdHZpYW5fQ3AxMjU3X0NTX0FTX0tJX1dJXG4gIFsxNThdOiAnQ1AxMjU3JywgLy8gU1FMX0xhdHZpYW5fQ3AxMjU3X0NJX0FTX0tJX1dJXG4gIFsxNTldOiAnQ1AxMjU3JywgLy8gU1FMX0xpdGh1YW5pYW5fQ3AxMjU3X0NTX0FTX0tJX1dJXG4gIFsxNjBdOiAnQ1AxMjU3JywgLy8gU1FMX0xpdGh1YW5pYW5fQ3AxMjU3X0NJX0FTX0tJX1dJXG4gIFsxODNdOiAnQ1AxMjUyJywgLy8gU1FMX0RhbmlzaF9QcmVmX0NwMV9DSV9BU19LSV9XSVxuICBbMTg0XTogJ0NQMTI1MicsIC8vIFNRTF9Td2VkaXNoUGhvbmVfUHJlZl9DcDFfQ0lfQVNfS0lfV0lcbiAgWzE4NV06ICdDUDEyNTInLCAvLyBTUUxfU3dlZGlzaFN0ZF9QcmVmX0NwMV9DSV9BU19LSV9XSVxuICBbMTg2XTogJ0NQMTI1MicgLy8gU1FMX0ljZWxhbmRpY19QcmVmX0NwMV9DSV9BU19LSV9XSVxufTtcblxuZXhwb3J0IGNvbnN0IEZsYWdzID0ge1xuICBJR05PUkVfQ0FTRTogMSA8PCAwLFxuICBJR05PUkVfQUNDRU5UOiAxIDw8IDEsXG4gIElHTk9SRV9LQU5BOiAxIDw8IDIsXG4gIElHTk9SRV9XSURUSDogMSA8PCAzLFxuICBCSU5BUlk6IDEgPDwgNCxcbiAgQklOQVJZMjogMSA8PCA1LFxuICBVVEY4OiAxIDw8IDYsXG59O1xuXG5leHBvcnQgY2xhc3MgQ29sbGF0aW9uIHtcbiAgcmVhZG9ubHkgbGNpZDogbnVtYmVyO1xuICByZWFkb25seSBmbGFnczogbnVtYmVyO1xuICByZWFkb25seSB2ZXJzaW9uOiBudW1iZXI7XG4gIHJlYWRvbmx5IHNvcnRJZDogbnVtYmVyO1xuICByZWFkb25seSBjb2RlcGFnZTogRW5jb2RpbmcgfCB1bmRlZmluZWQ7XG5cbiAgcHJpdmF0ZSBidWZmZXI6IEJ1ZmZlciB8IHVuZGVmaW5lZDtcblxuICBzdGF0aWMgZnJvbUJ1ZmZlcihidWZmZXI6IEJ1ZmZlciwgb2Zmc2V0ID0gMCkge1xuICAgIGxldCBsY2lkID0gKGJ1ZmZlcltvZmZzZXQgKyAyXSAmIDB4MEYpIDw8IDE2O1xuICAgIGxjaWQgfD0gYnVmZmVyW29mZnNldCArIDFdIDw8IDg7XG4gICAgbGNpZCB8PSBidWZmZXJbb2Zmc2V0ICsgMF07XG5cbiAgICBsZXQgZmxhZ3MgPSAoYnVmZmVyW29mZnNldCArIDNdICYgMHgwRikgPDwgNDtcbiAgICBmbGFncyB8PSAoYnVmZmVyW29mZnNldCArIDJdICYgMHhGMCkgPj4+IDQ7XG5cbiAgICBjb25zdCB2ZXJzaW9uID0gKGJ1ZmZlcltvZmZzZXQgKyAzXSAmIDB4RjApID4+PiA0O1xuXG4gICAgY29uc3Qgc29ydElkID0gYnVmZmVyW29mZnNldCArIDRdO1xuXG4gICAgcmV0dXJuIG5ldyB0aGlzKGxjaWQsIGZsYWdzLCB2ZXJzaW9uLCBzb3J0SWQpO1xuICB9XG5cbiAgY29uc3RydWN0b3IobGNpZDogbnVtYmVyLCBmbGFnczogbnVtYmVyLCB2ZXJzaW9uOiBudW1iZXIsIHNvcnRJZDogbnVtYmVyKSB7XG4gICAgdGhpcy5idWZmZXIgPSB1bmRlZmluZWQ7XG5cbiAgICB0aGlzLmxjaWQgPSBsY2lkO1xuICAgIHRoaXMuZmxhZ3MgPSBmbGFncztcbiAgICB0aGlzLnZlcnNpb24gPSB2ZXJzaW9uO1xuICAgIHRoaXMuc29ydElkID0gc29ydElkO1xuXG4gICAgaWYgKHRoaXMuZmxhZ3MgJiBGbGFncy5VVEY4KSB7XG4gICAgICB0aGlzLmNvZGVwYWdlID0gJ3V0Zi04JztcbiAgICB9IGVsc2UgaWYgKHRoaXMuc29ydElkKSB7XG4gICAgICB0aGlzLmNvZGVwYWdlID0gY29kZXBhZ2VCeVNvcnRJZFt0aGlzLnNvcnRJZF07XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFRoZSBsYXN0IDE2IGJpdHMgb2YgdGhlIExDSUQgYXJlIHRoZSBsYW5ndWFnZSBpZC5cbiAgICAgIC8vIFRoZSBmaXJzdCA0IGJpdHMgZGVmaW5lIGFkZGl0aW9uYWwgc29ydCBvcmRlcnMuXG4gICAgICBjb25zdCBsYW5ndWFnZUlkID0gdGhpcy5sY2lkICYgMHhGRkZGO1xuICAgICAgdGhpcy5jb2RlcGFnZSA9IGNvZGVwYWdlQnlMYW5ndWFnZUlkW2xhbmd1YWdlSWRdO1xuICAgIH1cbiAgfVxuXG4gIHRvQnVmZmVyKCk6IEJ1ZmZlciB7XG4gICAgaWYgKHRoaXMuYnVmZmVyKSB7XG4gICAgICByZXR1cm4gdGhpcy5idWZmZXI7XG4gICAgfVxuXG4gICAgdGhpcy5idWZmZXIgPSBCdWZmZXIuYWxsb2MoNSk7XG5cbiAgICB0aGlzLmJ1ZmZlclswXSA9IHRoaXMubGNpZCAmIDB4RkY7XG4gICAgdGhpcy5idWZmZXJbMV0gPSAodGhpcy5sY2lkID4+PiA4KSAmIDB4RkY7XG4gICAgdGhpcy5idWZmZXJbMl0gPSAoKHRoaXMubGNpZCA+Pj4gMTYpICYgMHgwRikgfCAoKHRoaXMuZmxhZ3MgJiAweDBGKSA8PCA0KTtcbiAgICB0aGlzLmJ1ZmZlclszXSA9ICgodGhpcy5mbGFncyAmIDB4RjApID4+PiA0KSB8ICgodGhpcy52ZXJzaW9uICYgMHgwRikgPDwgNCk7XG4gICAgdGhpcy5idWZmZXJbNF0gPSB0aGlzLnNvcnRJZCAmIDB4RkY7XG5cbiAgICByZXR1cm4gdGhpcy5idWZmZXI7XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBRUE7QUFDTyxNQUFNQSxvQkFBaUQsR0FBRztFQUMvRDtFQUNBLENBQUMsTUFBTSxHQUFHLFFBQVE7RUFFbEI7RUFDQTtFQUNBO0VBQ0E7RUFDQSxDQUFDLE1BQU0sR0FBRyxPQUFPO0VBRWpCO0VBQ0EsQ0FBQyxNQUFNLEdBQUcsUUFBUTtFQUVsQjtFQUNBO0VBQ0EsQ0FBQyxNQUFNLEdBQUcsUUFBUTtFQUVsQjtFQUNBLENBQUMsTUFBTSxHQUFHLFFBQVE7RUFFbEI7RUFDQSxDQUFDLE1BQU0sR0FBRyxRQUFRO0VBRWxCO0VBQ0EsQ0FBQyxNQUFNLEdBQUcsUUFBUTtFQUVsQjtFQUNBLENBQUMsTUFBTSxHQUFHLFFBQVE7RUFFbEI7RUFDQSxDQUFDLE1BQU0sR0FBRyxRQUFRO0VBRWxCO0VBQ0EsQ0FBQyxNQUFNLEdBQUcsUUFBUTtFQUVsQjtFQUNBO0VBQ0EsQ0FBQyxNQUFNLEdBQUcsUUFBUTtFQUVsQjtFQUNBLENBQUMsTUFBTSxHQUFHLFFBQVE7RUFFbEI7RUFDQTtFQUNBO0VBQ0E7RUFDQSxDQUFDLE1BQU0sR0FBRyxPQUFPO0VBRWpCO0VBQ0E7RUFDQSxDQUFDLE1BQU0sR0FBRyxPQUFPO0VBRWpCO0VBQ0EsQ0FBQyxNQUFNLEdBQUcsUUFBUTtFQUVsQjtFQUNBLENBQUMsTUFBTSxHQUFHLFFBQVE7RUFFbEI7RUFDQSxDQUFDLE1BQU0sR0FBRyxRQUFRO0VBRWxCO0VBQ0EsQ0FBQyxNQUFNLEdBQUcsUUFBUTtFQUVsQjtFQUNBLENBQUMsTUFBTSxHQUFHLFFBQVE7RUFFbEI7RUFDQSxDQUFDLE1BQU0sR0FBRyxRQUFRO0VBRWxCO0VBQ0EsQ0FBQyxNQUFNLEdBQUcsUUFBUTtFQUVsQjtFQUNBLENBQUMsTUFBTSxHQUFHLFFBQVE7RUFFbEI7RUFDQSxDQUFDLE1BQU0sR0FBRyxPQUFPO0VBRWpCO0VBQ0EsQ0FBQyxNQUFNLEdBQUcsUUFBUTtFQUVsQjtFQUNBLENBQUMsTUFBTSxHQUFHLFFBQVE7RUFFbEI7RUFDQSxDQUFDLE1BQU0sR0FBRyxRQUFRO0VBRWxCO0VBQ0EsQ0FBQyxNQUFNLEdBQUcsUUFBUTtFQUVsQjtFQUNBLENBQUMsTUFBTSxHQUFHLFFBQVE7RUFFbEI7RUFDQSxDQUFDLE1BQU0sR0FBRyxRQUFRO0VBRWxCO0VBQ0EsQ0FBQyxNQUFNLEdBQUcsUUFBUTtFQUVsQjtFQUNBLENBQUMsTUFBTSxHQUFHLFFBQVE7RUFFbEI7RUFDQSxDQUFDLE1BQU0sR0FBRyxRQUFRO0VBRWxCO0VBQ0EsQ0FBQyxNQUFNLEdBQUcsUUFBUTtFQUVsQjtFQUNBLENBQUMsTUFBTSxHQUFHLFFBQVE7RUFFbEI7RUFDQSxDQUFDLE1BQU0sR0FBRyxRQUFRO0VBRWxCO0VBQ0EsQ0FBQyxNQUFNLEdBQUcsUUFBUTtFQUVsQjtFQUNBLENBQUMsTUFBTSxHQUFHLFFBQVE7RUFFbEI7RUFDQSxDQUFDLE1BQU0sR0FBRyxRQUFRO0VBRWxCO0VBQ0EsQ0FBQyxNQUFNLEdBQUcsUUFBUTtFQUVsQjtFQUNBLENBQUMsTUFBTSxHQUFHLFFBQVE7RUFFbEI7RUFDQSxDQUFDLE1BQU0sR0FBRyxRQUFRO0VBRWxCO0VBQ0EsQ0FBQyxNQUFNLEdBQUcsUUFBUTtFQUVsQjtFQUNBLENBQUMsTUFBTSxHQUFHLFFBQVE7RUFFbEI7RUFDQSxDQUFDLE1BQU0sR0FBRyxRQUFRO0VBRWxCO0VBQ0EsQ0FBQyxNQUFNLEdBQUcsUUFBUTtFQUVsQjtFQUNBLENBQUMsTUFBTSxHQUFHLFFBQVE7RUFFbEI7RUFDQSxDQUFDLE1BQU0sR0FBRyxRQUFRO0VBRWxCO0VBQ0EsQ0FBQyxNQUFNLEdBQUcsUUFBUTtFQUVsQjtFQUNBLENBQUMsTUFBTSxHQUFHLFFBQVE7RUFFbEI7RUFDQSxDQUFDLE1BQU0sR0FBRyxRQUFRO0VBRWxCO0VBQ0E7RUFDQTtFQUNBO0VBQ0EsQ0FBQyxNQUFNLEdBQUcsT0FBTztFQUVqQjtFQUNBLENBQUMsTUFBTSxHQUFHLFFBQVE7RUFFbEI7RUFDQSxDQUFDLE1BQU0sR0FBRyxRQUFRO0VBRWxCO0VBQ0EsQ0FBQyxNQUFNLEdBQUcsUUFBUTtFQUVsQjtFQUNBLENBQUMsTUFBTSxHQUFHLFFBQVE7RUFFbEI7RUFDQSxDQUFDLE1BQU0sR0FBRyxPQUFPO0VBRWpCO0VBQ0EsQ0FBQyxNQUFNLEdBQUcsUUFBUTtFQUVsQjtFQUNBLENBQUMsTUFBTSxHQUFHLFFBQVE7RUFFbEI7RUFDQTtFQUNBLENBQUMsTUFBTSxHQUFHLE9BQU87RUFFakI7RUFDQSxDQUFDLE1BQU0sR0FBRyxRQUFRO0VBRWxCO0VBQ0EsQ0FBQyxNQUFNLEdBQUcsUUFBUTtFQUVsQjtFQUNBO0VBQ0EsQ0FBQyxNQUFNLEdBQUcsUUFBUTtFQUVsQjtFQUNBLENBQUMsTUFBTSxHQUFHO0FBQ1osQ0FBQztBQUFDQyxPQUFBLENBQUFELG9CQUFBLEdBQUFBLG9CQUFBO0FBRUssTUFBTUUsZ0JBQTZDLEdBQUc7RUFDM0QsQ0FBQyxFQUFFLEdBQUcsT0FBTztFQUFFO0VBQ2YsQ0FBQyxFQUFFLEdBQUcsT0FBTztFQUFFO0VBQ2YsQ0FBQyxFQUFFLEdBQUcsT0FBTztFQUFFO0VBQ2YsQ0FBQyxFQUFFLEdBQUcsT0FBTztFQUFFO0VBQ2YsQ0FBQyxFQUFFLEdBQUcsT0FBTztFQUFFO0VBQ2YsQ0FBQyxFQUFFLEdBQUcsT0FBTztFQUFFO0VBQ2YsQ0FBQyxFQUFFLEdBQUcsT0FBTztFQUFFO0VBQ2YsQ0FBQyxFQUFFLEdBQUcsT0FBTztFQUFFO0VBQ2YsQ0FBQyxFQUFFLEdBQUcsT0FBTztFQUFFO0VBQ2YsQ0FBQyxFQUFFLEdBQUcsT0FBTztFQUFFO0VBQ2YsQ0FBQyxFQUFFLEdBQUcsT0FBTztFQUFFO0VBQ2YsQ0FBQyxFQUFFLEdBQUcsUUFBUTtFQUFFO0VBQ2hCLENBQUMsRUFBRSxHQUFHLFFBQVE7RUFBRTtFQUNoQixDQUFDLEVBQUUsR0FBRyxRQUFRO0VBQUU7RUFDaEIsQ0FBQyxFQUFFLEdBQUcsUUFBUTtFQUFFO0VBQ2hCLENBQUMsRUFBRSxHQUFHLE9BQU87RUFBRTtFQUNmLENBQUMsRUFBRSxHQUFHLE9BQU87RUFBRTtFQUNmLENBQUMsRUFBRSxHQUFHLE9BQU87RUFBRTtFQUNmLENBQUMsRUFBRSxHQUFHLE9BQU87RUFBRTtFQUNmLENBQUMsRUFBRSxHQUFHLE9BQU87RUFBRTtFQUNmLENBQUMsRUFBRSxHQUFHLE9BQU87RUFBRTtFQUNmLENBQUMsRUFBRSxHQUFHLE9BQU87RUFBRTtFQUNmLENBQUMsRUFBRSxHQUFHLFFBQVE7RUFBRTtFQUNoQixDQUFDLEVBQUUsR0FBRyxRQUFRO0VBQUU7RUFDaEIsQ0FBQyxFQUFFLEdBQUcsUUFBUTtFQUFFO0VBQ2hCLENBQUMsRUFBRSxHQUFHLFFBQVE7RUFBRTtFQUNoQixDQUFDLEVBQUUsR0FBRyxRQUFRO0VBQUU7RUFDaEIsQ0FBQyxFQUFFLEdBQUcsUUFBUTtFQUFFO0VBQ2hCLENBQUMsRUFBRSxHQUFHLFFBQVE7RUFBRTtFQUNoQixDQUFDLEVBQUUsR0FBRyxRQUFRO0VBQUU7RUFDaEIsQ0FBQyxFQUFFLEdBQUcsUUFBUTtFQUFFO0VBQ2hCLENBQUMsRUFBRSxHQUFHLFFBQVE7RUFBRTtFQUNoQixDQUFDLEVBQUUsR0FBRyxRQUFRO0VBQUU7RUFDaEIsQ0FBQyxFQUFFLEdBQUcsUUFBUTtFQUFFO0VBQ2hCLENBQUMsRUFBRSxHQUFHLFFBQVE7RUFBRTtFQUNoQixDQUFDLEVBQUUsR0FBRyxRQUFRO0VBQUU7RUFDaEIsQ0FBQyxFQUFFLEdBQUcsUUFBUTtFQUFFO0VBQ2hCLENBQUMsRUFBRSxHQUFHLFFBQVE7RUFBRTtFQUNoQixDQUFDLEVBQUUsR0FBRyxRQUFRO0VBQUU7RUFDaEIsQ0FBQyxHQUFHLEdBQUcsUUFBUTtFQUFFO0VBQ2pCLENBQUMsR0FBRyxHQUFHLFFBQVE7RUFBRTtFQUNqQixDQUFDLEdBQUcsR0FBRyxRQUFRO0VBQUU7RUFDakIsQ0FBQyxHQUFHLEdBQUcsUUFBUTtFQUFFO0VBQ2pCLENBQUMsR0FBRyxHQUFHLFFBQVE7RUFBRTtFQUNqQixDQUFDLEdBQUcsR0FBRyxRQUFRO0VBQUU7RUFDakIsQ0FBQyxHQUFHLEdBQUcsUUFBUTtFQUFFO0VBQ2pCLENBQUMsR0FBRyxHQUFHLFFBQVE7RUFBRTtFQUNqQixDQUFDLEdBQUcsR0FBRyxRQUFRO0VBQUU7RUFDakIsQ0FBQyxHQUFHLEdBQUcsUUFBUTtFQUFFO0VBQ2pCLENBQUMsR0FBRyxHQUFHLFFBQVE7RUFBRTtFQUNqQixDQUFDLEdBQUcs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
|
|
351
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjb2RlcGFnZUJ5TGFuZ3VhZ2VJZCIsImV4cG9ydHMiLCJjb2RlcGFnZUJ5U29ydElkIiwiRmxhZ3MiLCJJR05PUkVfQ0FTRSIsIklHTk9SRV9BQ0NFTlQiLCJJR05PUkVfS0FOQSIsIklHTk9SRV9XSURUSCIsIkJJTkFSWSIsIkJJTkFSWTIiLCJVVEY4IiwiQ29sbGF0aW9uIiwiZnJvbUJ1ZmZlciIsImJ1ZmZlciIsIm9mZnNldCIsImxjaWQiLCJmbGFncyIsInZlcnNpb24iLCJzb3J0SWQiLCJjb25zdHJ1Y3RvciIsInVuZGVmaW5lZCIsImNvZGVwYWdlIiwibGFuZ3VhZ2VJZCIsInRvQnVmZmVyIiwiQnVmZmVyIiwiYWxsb2MiXSwic291cmNlcyI6WyIuLi9zcmMvY29sbGF0aW9uLnRzIl0sInNvdXJjZXNDb250ZW50IjpbInR5cGUgRW5jb2RpbmcgPSAndXRmLTgnIHwgJ0NQNDM3JyB8ICdDUDg1MCcgfCAnQ1A4NzQnIHwgJ0NQOTMyJyB8ICdDUDkzNicgfCAnQ1A5NDknIHwgJ0NQOTUwJyB8ICdDUDEyNTAnIHwgJ0NQMTI1MScgfCAnQ1AxMjUyJyB8ICdDUDEyNTMnIHwgJ0NQMTI1NCcgfCAnQ1AxMjU1JyB8ICdDUDEyNTYnIHwgJ0NQMTI1NycgfCAnQ1AxMjU4JztcblxuLy8gaHR0cDovL3RlY2huZXQubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L2FhMTc2NTUzKHY9c3FsLjgwKS5hc3B4XG5leHBvcnQgY29uc3QgY29kZXBhZ2VCeUxhbmd1YWdlSWQ6IHsgW2tleTogbnVtYmVyXTogRW5jb2RpbmcgfSA9IHtcbiAgLy8gQXJhYmljXypcbiAgWzB4MDQwMV06ICdDUDEyNTYnLFxuXG4gIC8vIENoaW5lc2VfVGFpd2FuX1N0cm9rZV8qXG4gIC8vIENoaW5lc2VfVHJhZGl0aW9uYWxfU3Ryb2tlX0NvdW50XypcbiAgLy8gQ2hpbmVzZV9UYWl3YW5fQm9wb21vZm9fKlxuICAvLyBDaGluZXNlX1RyYWRpdGlvbmFsX0JvcG9tb2ZvXypcbiAgWzB4MDQwNF06ICdDUDk1MCcsXG5cbiAgLy8gQ3plY2hfKlxuICBbMHgwNDA1XTogJ0NQMTI1MCcsXG5cbiAgLy8gRGFuaXNoX0dyZWVubGFuZGljXypcbiAgLy8gRGFuaXNoX05vcndlZ2lhbl8qXG4gIFsweDA0MDZdOiAnQ1AxMjUyJyxcblxuICAvLyBHcmVla18qXG4gIFsweDA0MDhdOiAnQ1AxMjUzJyxcblxuICAvLyBMYXRpbjFfR2VuZXJhbF8qXG4gIFsweDA0MDldOiAnQ1AxMjUyJyxcblxuICAvLyBUcmFkaXRpb25hbF9TcGFuaXNoXypcbiAgWzB4MDQwQV06ICdDUDEyNTInLFxuXG4gIC8vIEZpbm5pc2hfU3dlZGlzaF8qXG4gIFsweDA0MEJdOiAnQ1AxMjUyJyxcblxuICAvLyBGcmVuY2hfKlxuICBbMHgwNDBDXTogJ0NQMTI1MicsXG5cbiAgLy8gSGVicmV3XypcbiAgWzB4MDQwRF06ICdDUDEyNTUnLFxuXG4gIC8vIEh1bmdhcmlhbl8qXG4gIC8vIEh1bmdhcmlhbl9UZWNobmljYWxfKlxuICBbMHgwNDBFXTogJ0NQMTI1MCcsXG5cbiAgLy8gSWNlbGFuZGljXypcbiAgWzB4MDQwRl06ICdDUDEyNTInLFxuXG4gIC8vIEphcGFuZXNlXypcbiAgLy8gSmFwYW5lc2VfWEpJU18qXG4gIC8vIEphcGFuZXNlX1VuaWNvZGVfKlxuICAvLyBKYXBhbmVzZV9CdXNodV9LYWt1c3VfKlxuICBbMHgwNDExXTogJ0NQOTMyJyxcblxuICAvLyBLb3JlYW5fKlxuICAvLyBLb3JlYW5fV2Fuc3VuZ18qXG4gIFsweDA0MTJdOiAnQ1A5NDknLFxuXG4gIC8vIE5vcndlZ2lhbl8qXG4gIFsweDA0MTRdOiAnQ1AxMjUyJyxcblxuICAvLyBQb2xpc2hfKlxuICBbMHgwNDE1XTogJ0NQMTI1MCcsXG5cbiAgLy8gUm9tYW5zaF8qXG4gIFsweDA0MTddOiAnQ1AxMjUyJyxcblxuICAvLyBSb21hbmlhbl8qXG4gIFsweDA0MThdOiAnQ1AxMjUwJyxcblxuICAvLyBDeXJpbGxpY18qXG4gIFsweDA0MTldOiAnQ1AxMjUxJyxcblxuICAvLyBDcm9hdGlhbl8qXG4gIFsweDA0MUFdOiAnQ1AxMjUwJyxcblxuICAvLyBTbG92YWtfKlxuICBbMHgwNDFCXTogJ0NQMTI1MCcsXG5cbiAgLy8gQWxiYW5pYW5fKlxuICBbMHgwNDFDXTogJ0NQMTI1MCcsXG5cbiAgLy8gVGhhaV8qXG4gIFsweDA0MUVdOiAnQ1A4NzQnLFxuXG4gIC8vIFR1cmtpc2hfKlxuICBbMHgwNDFGXTogJ0NQMTI1NCcsXG5cbiAgLy8gVXJkdV8qXG4gIFsweDA0MjBdOiAnQ1AxMjU2JyxcblxuICAvLyBVa3JhaW5pYW5fKlxuICBbMHgwNDIyXTogJ0NQMTI1MScsXG5cbiAgLy8gU2xvdmVuaWFuXypcbiAgWzB4MDQyNF06ICdDUDEyNTAnLFxuXG4gIC8vIEVzdG9uaWFuXypcbiAgWzB4MDQyNV06ICdDUDEyNTcnLFxuXG4gIC8vIExhdHZpYW5fKlxuICBbMHgwNDI2XTogJ0NQMTI1NycsXG5cbiAgLy8gTGl0aHVhbmlhbl8qXG4gIFsweDA0MjddOiAnQ1AxMjU3JyxcblxuICAvLyBQZXJzaWFuXypcbiAgWzB4MDQyOV06ICdDUDEyNTYnLFxuXG4gIC8vIFZpZXRuYW1lc2VfKlxuICBbMHgwNDJBXTogJ0NQMTI1OCcsXG5cbiAgLy8gQXplcmlfTGF0aW5fKlxuICBbMHgwNDJDXTogJ0NQMTI1NCcsXG5cbiAgLy8gVXBwZXJfU29yYmlhbl8qXG4gIFsweDA0MkVdOiAnQ1AxMjUyJyxcblxuICAvLyBNYWNlZG9uaWFuX0ZZUk9NXypcbiAgWzB4MDQyRl06ICdDUDEyNTEnLFxuXG4gIC8vIFNhbWlfTm9yd2F5XypcbiAgWzB4MDQzQl06ICdDUDEyNTInLFxuXG4gIC8vIEthemFraF8qXG4gIFsweDA0M0ZdOiAnQ1AxMjUxJyxcblxuICAvLyBUdXJrbWVuXypcbiAgWzB4MDQ0Ml06ICdDUDEyNTAnLFxuXG4gIC8vIFV6YmVrX0xhdGluXypcbiAgWzB4MDQ0M106ICdDUDEyNTQnLFxuXG4gIC8vIFRhdGFyXypcbiAgWzB4MDQ0NF06ICdDUDEyNTEnLFxuXG4gIC8vIFdlbHNoXypcbiAgWzB4MDQ1Ml06ICdDUDEyNTInLFxuXG4gIC8vIEZyaXNpYW5fKlxuICBbMHgwNDYyXTogJ0NQMTI1MicsXG5cbiAgLy8gQmFzaGtpcl8qXG4gIFsweDA0NkRdOiAnQ1AxMjUxJyxcblxuICAvLyBNYXB1ZHVuZ2FuXypcbiAgWzB4MDQ3QV06ICdDUDEyNTInLFxuXG4gIC8vIE1vaGF3a18qXG4gIFsweDA0N0NdOiAnQ1AxMjUyJyxcblxuICAvLyBCcmV0b25fKlxuICBbMHgwNDdFXTogJ0NQMTI1MicsXG5cbiAgLy8gVWlnaHVyXypcbiAgWzB4MDQ4MF06ICdDUDEyNTYnLFxuXG4gIC8vIENvcnNpY2FuXypcbiAgWzB4MDQ4M106ICdDUDEyNTInLFxuXG4gIC8vIFlha3V0XypcbiAgWzB4MDQ4NV06ICdDUDEyNTEnLFxuXG4gIC8vIERhcmlfKlxuICBbMHgwNDhDXTogJ0NQMTI1NicsXG5cbiAgLy8gQ2hpbmVzZV9QUkNfKlxuICAvLyBDaGluZXNlX1NpbXBsaWZpZWRfUGlueWluXypcbiAgLy8gQ2hpbmVzZV9QUkNfU3Ryb2tlXypcbiAgLy8gQ2hpbmVzZV9TaW1wbGlmaWVkX1N0cm9rZV9PcmRlcl8qXG4gIFsweDA4MDRdOiAnQ1A5MzYnLFxuXG4gIC8vIFNlcmJpYW5fTGF0aW5fKlxuICBbMHgwODFBXTogJ0NQMTI1MCcsXG5cbiAgLy8gQXplcmlfQ3lyaWxsaWNfKlxuICBbMHgwODJDXTogJ0NQMTI1MScsXG5cbiAgLy8gU2FtaV9Td2VkZW5fRmlubGFuZF8qXG4gIFsweDA4M0JdOiAnQ1AxMjUyJyxcblxuICAvLyBUYW1hemlnaHRfKlxuICBbMHgwODVGXTogJ0NQMTI1MicsXG5cbiAgLy8gQ2hpbmVzZV9Ib25nX0tvbmdfU3Ryb2tlXypcbiAgWzB4MEMwNF06ICdDUDk1MCcsXG5cbiAgLy8gTW9kZXJuX1NwYW5pc2hfKlxuICBbMHgwQzBBXTogJ0NQMTI1MicsXG5cbiAgLy8gU2VyYmlhbl9DeXJpbGxpY18qXG4gIFsweDBDMUFdOiAnQ1AxMjUxJyxcblxuICAvLyBDaGluZXNlX1RyYWRpdGlvbmFsX1Bpbnlpbl8qXG4gIC8vIENoaW5lc2VfVHJhZGl0aW9uYWxfU3Ryb2tlX09yZGVyXypcbiAgWzB4MTQwNF06ICdDUDk1MCcsXG5cbiAgLy8gQm9zbmlhbl9MYXRpbl8qXG4gIFsweDE0MUFdOiAnQ1AxMjUwJyxcblxuICAvLyBCb3NuaWFuX0N5cmlsbGljXypcbiAgWzB4MjAxQV06ICdDUDEyNTEnLFxuXG4gIC8vIEdlcm1hblxuICAvLyBHZXJtYW5fUGhvbmVCb29rXypcbiAgWzB4MDQwN106ICdDUDEyNTInLFxuXG4gIC8vIEdlb3JnaWFuX01vZGVybl9Tb3J0XypcbiAgWzB4MDQzN106ICdDUDEyNTInXG59O1xuXG5leHBvcnQgY29uc3QgY29kZXBhZ2VCeVNvcnRJZDogeyBba2V5OiBudW1iZXJdOiBFbmNvZGluZyB9ID0ge1xuICBbMzBdOiAnQ1A0MzcnLCAvLyBTUUxfTGF0aW4xX0dlbmVyYWxfQ1A0MzdfQklOXG4gIFszMV06ICdDUDQzNycsIC8vIFNRTF9MYXRpbjFfR2VuZXJhbF9DUDQzN19DU19BU1xuICBbMzJdOiAnQ1A0MzcnLCAvLyBTUUxfTGF0aW4xX0dlbmVyYWxfQ1A0MzdfQ0lfQVNcbiAgWzMzXTogJ0NQNDM3JywgLy8gU1FMX0xhdGluMV9HZW5lcmFsX1ByZWZfQ1A0MzdfQ0lfQVNcbiAgWzM0XTogJ0NQNDM3JywgLy8gU1FMX0xhdGluMV9HZW5lcmFsX0NQNDM3X0NJX0FJXG4gIFs0MF06ICdDUDg1MCcsIC8vIFNRTF9MYXRpbjFfR2VuZXJhbF9DUDg1MF9CSU5cbiAgWzQxXTogJ0NQODUwJywgLy8gU1FMX0xhdGluMV9HZW5lcmFsX0NQODUwX0NTX0FTXG4gIFs0Ml06ICdDUDg1MCcsIC8vIFNRTF9MYXRpbjFfR2VuZXJhbF9DUDg1MF9DSV9BU1xuICBbNDNdOiAnQ1A4NTAnLCAvLyBTUUxfTGF0aW4xX0dlbmVyYWxfUHJlZl9DUDg1MF9DSV9BU1xuICBbNDRdOiAnQ1A4NTAnLCAvLyBTUUxfTGF0aW4xX0dlbmVyYWxfQ1A4NTBfQ0lfQUlcbiAgWzQ5XTogJ0NQODUwJywgLy8gU1FMXzF4Q29tcGF0X0NQODUwX0NJX0FTXG4gIFs1MV06ICdDUDEyNTInLCAvLyBTUUxfTGF0aW4xX0dlbmVyYWxfQ3AxX0NTX0FTX0tJX1dJXG4gIFs1Ml06ICdDUDEyNTInLCAvLyBTUUxfTGF0aW4xX0dlbmVyYWxfQ3AxX0NJX0FTX0tJX1dJXG4gIFs1M106ICdDUDEyNTInLCAvLyBTUUxfTGF0aW4xX0dlbmVyYWxfUHJlZl9DcDFfQ0lfQVNfS0lfV0lcbiAgWzU0XTogJ0NQMTI1MicsIC8vIFNRTF9MYXRpbjFfR2VuZXJhbF9DcDFfQ0lfQUlfS0lfV0lcbiAgWzU1XTogJ0NQODUwJywgLy8gU1FMX0FsdERpY3Rpb25fQ1A4NTBfQ1NfQVNcbiAgWzU2XTogJ0NQODUwJywgLy8gU1FMX0FsdERpY3Rpb25fUHJlZl9DUDg1MF9DSV9BU1xuICBbNTddOiAnQ1A4NTAnLCAvLyBTUUxfQWx0RGljdGlvbl9DUDg1MF9DSV9BSVxuICBbNThdOiAnQ1A4NTAnLCAvLyBTUUxfU2NhbmRpbmF2aWFuX1ByZWZfQ1A4NTBfQ0lfQVNcbiAgWzU5XTogJ0NQODUwJywgLy8gU1FMX1NjYW5kaW5hdmlhbl9DUDg1MF9DU19BU1xuICBbNjBdOiAnQ1A4NTAnLCAvLyBTUUxfU2NhbmRpbmF2aWFuX0NQODUwX0NJX0FTXG4gIFs2MV06ICdDUDg1MCcsIC8vIFNRTF9BbHREaWN0aW9uX0NQODUwX0NJX0FTXG4gIFs4MF06ICdDUDEyNTAnLCAvLyBTUUxfTGF0aW4xX0dlbmVyYWxfMTI1MF9CSU5cbiAgWzgxXTogJ0NQMTI1MCcsIC8vIFNRTF9MYXRpbjFfR2VuZXJhbF9DUDEyNTBfQ1NfQVNcbiAgWzgyXTogJ0NQMTI1MCcsIC8vIFNRTF9MYXRpbjFfR2VuZXJhbF9DcDEyNTBfQ0lfQVNfS0lfV0lcbiAgWzgzXTogJ0NQMTI1MCcsIC8vIFNRTF9DemVjaF9DcDEyNTBfQ1NfQVNfS0lfV0lcbiAgWzg0XTogJ0NQMTI1MCcsIC8vIFNRTF9DemVjaF9DcDEyNTBfQ0lfQVNfS0lfV0lcbiAgWzg1XTogJ0NQMTI1MCcsIC8vIFNRTF9IdW5nYXJpYW5fQ3AxMjUwX0NTX0FTX0tJX1dJXG4gIFs4Nl06ICdDUDEyNTAnLCAvLyBTUUxfSHVuZ2FyaWFuX0NwMTI1MF9DSV9BU19LSV9XSVxuICBbODddOiAnQ1AxMjUwJywgLy8gU1FMX1BvbGlzaF9DcDEyNTBfQ1NfQVNfS0lfV0lcbiAgWzg4XTogJ0NQMTI1MCcsIC8vIFNRTF9Qb2xpc2hfQ3AxMjUwX0NJX0FTX0tJX1dJXG4gIFs4OV06ICdDUDEyNTAnLCAvLyBTUUxfUm9tYW5pYW5fQ3AxMjUwX0NTX0FTX0tJX1dJXG4gIFs5MF06ICdDUDEyNTAnLCAvLyBTUUxfUm9tYW5pYW5fQ3AxMjUwX0NJX0FTX0tJX1dJXG4gIFs5MV06ICdDUDEyNTAnLCAvLyBTUUxfQ3JvYXRpYW5fQ3AxMjUwX0NTX0FTX0tJX1dJXG4gIFs5Ml06ICdDUDEyNTAnLCAvLyBTUUxfQ3JvYXRpYW5fQ3AxMjUwX0NJX0FTX0tJX1dJXG4gIFs5M106ICdDUDEyNTAnLCAvLyBTUUxfU2xvdmFrX0NwMTI1MF9DU19BU19LSV9XSVxuICBbOTRdOiAnQ1AxMjUwJywgLy8gU1FMX1Nsb3Zha19DcDEyNTBfQ0lfQVNfS0lfV0lcbiAgWzk1XTogJ0NQMTI1MCcsIC8vIFNRTF9TbG92ZW5pYW5fQ3AxMjUwX0NTX0FTX0tJX1dJXG4gIFs5Nl06ICdDUDEyNTAnLCAvLyBTUUxfU2xvdmVuaWFuX0NwMTI1MF9DSV9BU19LSV9XSVxuICBbMTA0XTogJ0NQMTI1MScsIC8vIFNRTF9MYXRpbjFfR2VuZXJhbF8xMjUxX0JJTlxuICBbMTA1XTogJ0NQMTI1MScsIC8vIFNRTF9MYXRpbjFfR2VuZXJhbF9DUDEyNTFfQ1NfQVNcbiAgWzEwNl06ICdDUDEyNTEnLCAvLyBTUUxfTGF0aW4xX0dlbmVyYWxfQ1AxMjUxX0NJX0FTXG4gIFsxMDddOiAnQ1AxMjUxJywgLy8gU1FMX1VrcmFpbmlhbl9DcDEyNTFfQ1NfQVNfS0lfV0lcbiAgWzEwOF06ICdDUDEyNTEnLCAvLyBTUUxfVWtyYWluaWFuX0NwMTI1MV9DSV9BU19LSV9XSVxuICBbMTEyXTogJ0NQMTI1MycsIC8vIFNRTF9MYXRpbjFfR2VuZXJhbF8xMjUzX0JJTlxuICBbMTEzXTogJ0NQMTI1MycsIC8vIFNRTF9MYXRpbjFfR2VuZXJhbF9DUDEyNTNfQ1NfQVNcbiAgWzExNF06ICdDUDEyNTMnLCAvLyBTUUxfTGF0aW4xX0dlbmVyYWxfQ1AxMjUzX0NJX0FTXG4gIFsxMjBdOiAnQ1AxMjUzJywgLy8gU1FMX01peERpY3Rpb25fQ1AxMjUzX0NTX0FTXG4gIFsxMjFdOiAnQ1AxMjUzJywgLy8gU1FMX0FsdERpY3Rpb25fQ1AxMjUzX0NTX0FTXG4gIFsxMjJdOiAnQ1AxMjUzJywgLy8gU1FMX0FsdERpY3Rpb24yX0NQMTI1M19DU19BU1xuICBbMTI0XTogJ0NQMTI1MycsIC8vIFNRTF9MYXRpbjFfR2VuZXJhbF9DUDEyNTNfQ0lfQUlcbiAgWzEyOF06ICdDUDEyNTQnLCAvLyBTUUxfTGF0aW4xX0dlbmVyYWxfMTI1NF9CSU5cbiAgWzEyOV06ICdDUDEyNTQnLCAvLyBTUUxfTGF0aW4xX0dlbmVyYWxfQ3AxMjU0X0NTX0FTX0tJX1dJXG4gIFsxMzBdOiAnQ1AxMjU0JywgLy8gU1FMX0xhdGluMV9HZW5lcmFsX0NwMTI1NF9DSV9BU19LSV9XSVxuICBbMTM2XTogJ0NQMTI1NScsIC8vIFNRTF9MYXRpbjFfR2VuZXJhbF8xMjU1X0JJTlxuICBbMTM3XTogJ0NQMTI1NScsIC8vIFNRTF9MYXRpbjFfR2VuZXJhbF9DUDEyNTVfQ1NfQVNcbiAgWzEzOF06ICdDUDEyNTUnLCAvLyBTUUxfTGF0aW4xX0dlbmVyYWxfQ1AxMjU1X0NJX0FTXG4gIFsxNDRdOiAnQ1AxMjU2JywgLy8gU1FMX0xhdGluMV9HZW5lcmFsXzEyNTZfQklOXG4gIFsxNDVdOiAnQ1AxMjU2JywgLy8gU1FMX0xhdGluMV9HZW5lcmFsX0NQMTI1Nl9DU19BU1xuICBbMTQ2XTogJ0NQMTI1NicsIC8vIFNRTF9MYXRpbjFfR2VuZXJhbF9DUDEyNTZfQ0lfQVNcbiAgWzE1Ml06ICdDUDEyNTcnLCAvLyBTUUxfTGF0aW4xX0dlbmVyYWxfMTI1N19CSU5cbiAgWzE1M106ICdDUDEyNTcnLCAvLyBTUUxfTGF0aW4xX0dlbmVyYWxfQ1AxMjU3X0NTX0FTXG4gIFsxNTRdOiAnQ1AxMjU3JywgLy8gU1FMX0xhdGluMV9HZW5lcmFsX0NQMTI1N19DSV9BU1xuICBbMTU1XTogJ0NQMTI1NycsIC8vIFNRTF9Fc3Rvbmlhbl9DcDEyNTdfQ1NfQVNfS0lfV0lcbiAgWzE1Nl06ICdDUDEyNTcnLCAvLyBTUUxfRXN0b25pYW5fQ3AxMjU3X0NJX0FTX0tJX1dJXG4gIFsxNTddOiAnQ1AxMjU3JywgLy8gU1FMX0xhdHZpYW5fQ3AxMjU3X0NTX0FTX0tJX1dJXG4gIFsxNThdOiAnQ1AxMjU3JywgLy8gU1FMX0xhdHZpYW5fQ3AxMjU3X0NJX0FTX0tJX1dJXG4gIFsxNTldOiAnQ1AxMjU3JywgLy8gU1FMX0xpdGh1YW5pYW5fQ3AxMjU3X0NTX0FTX0tJX1dJXG4gIFsxNjBdOiAnQ1AxMjU3JywgLy8gU1FMX0xpdGh1YW5pYW5fQ3AxMjU3X0NJX0FTX0tJX1dJXG4gIFsxODNdOiAnQ1AxMjUyJywgLy8gU1FMX0RhbmlzaF9QcmVmX0NwMV9DSV9BU19LSV9XSVxuICBbMTg0XTogJ0NQMTI1MicsIC8vIFNRTF9Td2VkaXNoUGhvbmVfUHJlZl9DcDFfQ0lfQVNfS0lfV0lcbiAgWzE4NV06ICdDUDEyNTInLCAvLyBTUUxfU3dlZGlzaFN0ZF9QcmVmX0NwMV9DSV9BU19LSV9XSVxuICBbMTg2XTogJ0NQMTI1MicgLy8gU1FMX0ljZWxhbmRpY19QcmVmX0NwMV9DSV9BU19LSV9XSVxufTtcblxuZXhwb3J0IGNvbnN0IEZsYWdzID0ge1xuICBJR05PUkVfQ0FTRTogMSA8PCAwLFxuICBJR05PUkVfQUNDRU5UOiAxIDw8IDEsXG4gIElHTk9SRV9LQU5BOiAxIDw8IDIsXG4gIElHTk9SRV9XSURUSDogMSA8PCAzLFxuICBCSU5BUlk6IDEgPDwgNCxcbiAgQklOQVJZMjogMSA8PCA1LFxuICBVVEY4OiAxIDw8IDYsXG59O1xuXG5leHBvcnQgY2xhc3MgQ29sbGF0aW9uIHtcbiAgZGVjbGFyZSByZWFkb25seSBsY2lkOiBudW1iZXI7XG4gIGRlY2xhcmUgcmVhZG9ubHkgZmxhZ3M6IG51bWJlcjtcbiAgZGVjbGFyZSByZWFkb25seSB2ZXJzaW9uOiBudW1iZXI7XG4gIGRlY2xhcmUgcmVhZG9ubHkgc29ydElkOiBudW1iZXI7XG4gIGRlY2xhcmUgcmVhZG9ubHkgY29kZXBhZ2U6IEVuY29kaW5nIHwgdW5kZWZpbmVkO1xuXG4gIGRlY2xhcmUgcHJpdmF0ZSBidWZmZXI6IEJ1ZmZlciB8IHVuZGVmaW5lZDtcblxuICBzdGF0aWMgZnJvbUJ1ZmZlcihidWZmZXI6IEJ1ZmZlciwgb2Zmc2V0ID0gMCkge1xuICAgIGxldCBsY2lkID0gKGJ1ZmZlcltvZmZzZXQgKyAyXSAmIDB4MEYpIDw8IDE2O1xuICAgIGxjaWQgfD0gYnVmZmVyW29mZnNldCArIDFdIDw8IDg7XG4gICAgbGNpZCB8PSBidWZmZXJbb2Zmc2V0ICsgMF07XG5cbiAgICBsZXQgZmxhZ3MgPSAoYnVmZmVyW29mZnNldCArIDNdICYgMHgwRikgPDwgNDtcbiAgICBmbGFncyB8PSAoYnVmZmVyW29mZnNldCArIDJdICYgMHhGMCkgPj4+IDQ7XG5cbiAgICBjb25zdCB2ZXJzaW9uID0gKGJ1ZmZlcltvZmZzZXQgKyAzXSAmIDB4RjApID4+PiA0O1xuXG4gICAgY29uc3Qgc29ydElkID0gYnVmZmVyW29mZnNldCArIDRdO1xuXG4gICAgcmV0dXJuIG5ldyB0aGlzKGxjaWQsIGZsYWdzLCB2ZXJzaW9uLCBzb3J0SWQpO1xuICB9XG5cbiAgY29uc3RydWN0b3IobGNpZDogbnVtYmVyLCBmbGFnczogbnVtYmVyLCB2ZXJzaW9uOiBudW1iZXIsIHNvcnRJZDogbnVtYmVyKSB7XG4gICAgdGhpcy5idWZmZXIgPSB1bmRlZmluZWQ7XG5cbiAgICB0aGlzLmxjaWQgPSBsY2lkO1xuICAgIHRoaXMuZmxhZ3MgPSBmbGFncztcbiAgICB0aGlzLnZlcnNpb24gPSB2ZXJzaW9uO1xuICAgIHRoaXMuc29ydElkID0gc29ydElkO1xuXG4gICAgaWYgKHRoaXMuZmxhZ3MgJiBGbGFncy5VVEY4KSB7XG4gICAgICB0aGlzLmNvZGVwYWdlID0gJ3V0Zi04JztcbiAgICB9IGVsc2UgaWYgKHRoaXMuc29ydElkKSB7XG4gICAgICB0aGlzLmNvZGVwYWdlID0gY29kZXBhZ2VCeVNvcnRJZFt0aGlzLnNvcnRJZF07XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFRoZSBsYXN0IDE2IGJpdHMgb2YgdGhlIExDSUQgYXJlIHRoZSBsYW5ndWFnZSBpZC5cbiAgICAgIC8vIFRoZSBmaXJzdCA0IGJpdHMgZGVmaW5lIGFkZGl0aW9uYWwgc29ydCBvcmRlcnMuXG4gICAgICBjb25zdCBsYW5ndWFnZUlkID0gdGhpcy5sY2lkICYgMHhGRkZGO1xuICAgICAgdGhpcy5jb2RlcGFnZSA9IGNvZGVwYWdlQnlMYW5ndWFnZUlkW2xhbmd1YWdlSWRdO1xuICAgIH1cbiAgfVxuXG4gIHRvQnVmZmVyKCk6IEJ1ZmZlciB7XG4gICAgaWYgKHRoaXMuYnVmZmVyKSB7XG4gICAgICByZXR1cm4gdGhpcy5idWZmZXI7XG4gICAgfVxuXG4gICAgdGhpcy5idWZmZXIgPSBCdWZmZXIuYWxsb2MoNSk7XG5cbiAgICB0aGlzLmJ1ZmZlclswXSA9IHRoaXMubGNpZCAmIDB4RkY7XG4gICAgdGhpcy5idWZmZXJbMV0gPSAodGhpcy5sY2lkID4+PiA4KSAmIDB4RkY7XG4gICAgdGhpcy5idWZmZXJbMl0gPSAoKHRoaXMubGNpZCA+Pj4gMTYpICYgMHgwRikgfCAoKHRoaXMuZmxhZ3MgJiAweDBGKSA8PCA0KTtcbiAgICB0aGlzLmJ1ZmZlclszXSA9ICgodGhpcy5mbGFncyAmIDB4RjApID4+PiA0KSB8ICgodGhpcy52ZXJzaW9uICYgMHgwRikgPDwgNCk7XG4gICAgdGhpcy5idWZmZXJbNF0gPSB0aGlzLnNvcnRJZCAmIDB4RkY7XG5cbiAgICByZXR1cm4gdGhpcy5idWZmZXI7XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBRUE7QUFDTyxNQUFNQSxvQkFBaUQsR0FBRztFQUMvRDtFQUNBLENBQUMsTUFBTSxHQUFHLFFBQVE7RUFFbEI7RUFDQTtFQUNBO0VBQ0E7RUFDQSxDQUFDLE1BQU0sR0FBRyxPQUFPO0VBRWpCO0VBQ0EsQ0FBQyxNQUFNLEdBQUcsUUFBUTtFQUVsQjtFQUNBO0VBQ0EsQ0FBQyxNQUFNLEdBQUcsUUFBUTtFQUVsQjtFQUNBLENBQUMsTUFBTSxHQUFHLFFBQVE7RUFFbEI7RUFDQSxDQUFDLE1BQU0sR0FBRyxRQUFRO0VBRWxCO0VBQ0EsQ0FBQyxNQUFNLEdBQUcsUUFBUTtFQUVsQjtFQUNBLENBQUMsTUFBTSxHQUFHLFFBQVE7RUFFbEI7RUFDQSxDQUFDLE1BQU0sR0FBRyxRQUFRO0VBRWxCO0VBQ0EsQ0FBQyxNQUFNLEdBQUcsUUFBUTtFQUVsQjtFQUNBO0VBQ0EsQ0FBQyxNQUFNLEdBQUcsUUFBUTtFQUVsQjtFQUNBLENBQUMsTUFBTSxHQUFHLFFBQVE7RUFFbEI7RUFDQTtFQUNBO0VBQ0E7RUFDQSxDQUFDLE1BQU0sR0FBRyxPQUFPO0VBRWpCO0VBQ0E7RUFDQSxDQUFDLE1BQU0sR0FBRyxPQUFPO0VBRWpCO0VBQ0EsQ0FBQyxNQUFNLEdBQUcsUUFBUTtFQUVsQjtFQUNBLENBQUMsTUFBTSxHQUFHLFFBQVE7RUFFbEI7RUFDQSxDQUFDLE1BQU0sR0FBRyxRQUFRO0VBRWxCO0VBQ0EsQ0FBQyxNQUFNLEdBQUcsUUFBUTtFQUVsQjtFQUNBLENBQUMsTUFBTSxHQUFHLFFBQVE7RUFFbEI7RUFDQSxDQUFDLE1BQU0sR0FBRyxRQUFRO0VBRWxCO0VBQ0EsQ0FBQyxNQUFNLEdBQUcsUUFBUTtFQUVsQjtFQUNBLENBQUMsTUFBTSxHQUFHLFFBQVE7RUFFbEI7RUFDQSxDQUFDLE1BQU0sR0FBRyxPQUFPO0VBRWpCO0VBQ0EsQ0FBQyxNQUFNLEdBQUcsUUFBUTtFQUVsQjtFQUNBLENBQUMsTUFBTSxHQUFHLFFBQVE7RUFFbEI7RUFDQSxDQUFDLE1BQU0sR0FBRyxRQUFRO0VBRWxCO0VBQ0EsQ0FBQyxNQUFNLEdBQUcsUUFBUTtFQUVsQjtFQUNBLENBQUMsTUFBTSxHQUFHLFFBQVE7RUFFbEI7RUFDQSxDQUFDLE1BQU0sR0FBRyxRQUFRO0VBRWxCO0VBQ0EsQ0FBQyxNQUFNLEdBQUcsUUFBUTtFQUVsQjtFQUNBLENBQUMsTUFBTSxHQUFHLFFBQVE7RUFFbEI7RUFDQSxDQUFDLE1BQU0sR0FBRyxRQUFRO0VBRWxCO0VBQ0EsQ0FBQyxNQUFNLEdBQUcsUUFBUTtFQUVsQjtFQUNBLENBQUMsTUFBTSxHQUFHLFFBQVE7RUFFbEI7RUFDQSxDQUFDLE1BQU0sR0FBRyxRQUFRO0VBRWxCO0VBQ0EsQ0FBQyxNQUFNLEdBQUcsUUFBUTtFQUVsQjtFQUNBLENBQUMsTUFBTSxHQUFHLFFBQVE7RUFFbEI7RUFDQSxDQUFDLE1BQU0sR0FBRyxRQUFRO0VBRWxCO0VBQ0EsQ0FBQyxNQUFNLEdBQUcsUUFBUTtFQUVsQjtFQUNBLENBQUMsTUFBTSxHQUFHLFFBQVE7RUFFbEI7RUFDQSxDQUFDLE1BQU0sR0FBRyxRQUFRO0VBRWxCO0VBQ0EsQ0FBQyxNQUFNLEdBQUcsUUFBUTtFQUVsQjtFQUNBLENBQUMsTUFBTSxHQUFHLFFBQVE7RUFFbEI7RUFDQSxDQUFDLE1BQU0sR0FBRyxRQUFRO0VBRWxCO0VBQ0EsQ0FBQyxNQUFNLEdBQUcsUUFBUTtFQUVsQjtFQUNBLENBQUMsTUFBTSxHQUFHLFFBQVE7RUFFbEI7RUFDQSxDQUFDLE1BQU0sR0FBRyxRQUFRO0VBRWxCO0VBQ0EsQ0FBQyxNQUFNLEdBQUcsUUFBUTtFQUVsQjtFQUNBLENBQUMsTUFBTSxHQUFHLFFBQVE7RUFFbEI7RUFDQSxDQUFDLE1BQU0sR0FBRyxRQUFRO0VBRWxCO0VBQ0E7RUFDQTtFQUNBO0VBQ0EsQ0FBQyxNQUFNLEdBQUcsT0FBTztFQUVqQjtFQUNBLENBQUMsTUFBTSxHQUFHLFFBQVE7RUFFbEI7RUFDQSxDQUFDLE1BQU0sR0FBRyxRQUFRO0VBRWxCO0VBQ0EsQ0FBQyxNQUFNLEdBQUcsUUFBUTtFQUVsQjtFQUNBLENBQUMsTUFBTSxHQUFHLFFBQVE7RUFFbEI7RUFDQSxDQUFDLE1BQU0sR0FBRyxPQUFPO0VBRWpCO0VBQ0EsQ0FBQyxNQUFNLEdBQUcsUUFBUTtFQUVsQjtFQUNBLENBQUMsTUFBTSxHQUFHLFFBQVE7RUFFbEI7RUFDQTtFQUNBLENBQUMsTUFBTSxHQUFHLE9BQU87RUFFakI7RUFDQSxDQUFDLE1BQU0sR0FBRyxRQUFRO0VBRWxCO0VBQ0EsQ0FBQyxNQUFNLEdBQUcsUUFBUTtFQUVsQjtFQUNBO0VBQ0EsQ0FBQyxNQUFNLEdBQUcsUUFBUTtFQUVsQjtFQUNBLENBQUMsTUFBTSxHQUFHO0FBQ1osQ0FBQztBQUFDQyxPQUFBLENBQUFELG9CQUFBLEdBQUFBLG9CQUFBO0FBRUssTUFBTUUsZ0JBQTZDLEdBQUc7RUFDM0QsQ0FBQyxFQUFFLEdBQUcsT0FBTztFQUFFO0VBQ2YsQ0FBQyxFQUFFLEdBQUcsT0FBTztFQUFFO0VBQ2YsQ0FBQyxFQUFFLEdBQUcsT0FBTztFQUFFO0VBQ2YsQ0FBQyxFQUFFLEdBQUcsT0FBTztFQUFFO0VBQ2YsQ0FBQyxFQUFFLEdBQUcsT0FBTztFQUFFO0VBQ2YsQ0FBQyxFQUFFLEdBQUcsT0FBTztFQUFFO0VBQ2YsQ0FBQyxFQUFFLEdBQUcsT0FBTztFQUFFO0VBQ2YsQ0FBQyxFQUFFLEdBQUcsT0FBTztFQUFFO0VBQ2YsQ0FBQyxFQUFFLEdBQUcsT0FBTztFQUFFO0VBQ2YsQ0FBQyxFQUFFLEdBQUcsT0FBTztFQUFFO0VBQ2YsQ0FBQyxFQUFFLEdBQUcsT0FBTztFQUFFO0VBQ2YsQ0FBQyxFQUFFLEdBQUcsUUFBUTtFQUFFO0VBQ2hCLENBQUMsRUFBRSxHQUFHLFFBQVE7RUFBRTtFQUNoQixDQUFDLEVBQUUsR0FBRyxRQUFRO0VBQUU7RUFDaEIsQ0FBQyxFQUFFLEdBQUcsUUFBUTtFQUFFO0VBQ2hCLENBQUMsRUFBRSxHQUFHLE9BQU87RUFBRTtFQUNmLENBQUMsRUFBRSxHQUFHLE9BQU87RUFBRTtFQUNmLENBQUMsRUFBRSxHQUFHLE9BQU87RUFBRTtFQUNmLENBQUMsRUFBRSxHQUFHLE9BQU87RUFBRTtFQUNmLENBQUMsRUFBRSxHQUFHLE9BQU87RUFBRTtFQUNmLENBQUMsRUFBRSxHQUFHLE9BQU87RUFBRTtFQUNmLENBQUMsRUFBRSxHQUFHLE9BQU87RUFBRTtFQUNmLENBQUMsRUFBRSxHQUFHLFFBQVE7RUFBRTtFQUNoQixDQUFDLEVBQUUsR0FBRyxRQUFRO0VBQUU7RUFDaEIsQ0FBQyxFQUFFLEdBQUcsUUFBUTtFQUFFO0VBQ2hCLENBQUMsRUFBRSxHQUFHLFFBQVE7RUFBRTtFQUNoQixDQUFDLEVBQUUsR0FBRyxRQUFRO0VBQUU7RUFDaEIsQ0FBQyxFQUFFLEdBQUcsUUFBUTtFQUFFO0VBQ2hCLENBQUMsRUFBRSxHQUFHLFFBQVE7RUFBRTtFQUNoQixDQUFDLEVBQUUsR0FBRyxRQUFRO0VBQUU7RUFDaEIsQ0FBQyxFQUFFLEdBQUcsUUFBUTtFQUFFO0VBQ2hCLENBQUMsRUFBRSxHQUFHLFFBQVE7RUFBRTtFQUNoQixDQUFDLEVBQUUsR0FBRyxRQUFRO0VBQUU7RUFDaEIsQ0FBQyxFQUFFLEdBQUcsUUFBUTtFQUFFO0VBQ2hCLENBQUMsRUFBRSxHQUFHLFFBQVE7RUFBRTtFQUNoQixDQUFDLEVBQUUsR0FBRyxRQUFRO0VBQUU7RUFDaEIsQ0FBQyxFQUFFLEdBQUcsUUFBUTtFQUFFO0VBQ2hCLENBQUMsRUFBRSxHQUFHLFFBQVE7RUFBRTtFQUNoQixDQUFDLEVBQUUsR0FBRyxRQUFRO0VBQUU7RUFDaEIsQ0FBQyxHQUFHLEdBQUcsUUFBUTtFQUFFO0VBQ2pCLENBQUMsR0FBRyxHQUFHLFFBQVE7RUFBRTtFQUNqQixDQUFDLEdBQUcsR0FBRyxRQUFRO0VBQUU7RUFDakIsQ0FBQyxHQUFHLEdBQUcsUUFBUTtFQUFFO0VBQ2pCLENBQUMsR0FBRyxHQUFHLFFBQVE7RUFBRTtFQUNqQixDQUFDLEdBQUcsR0FBRyxRQUFRO0VBQUU7RUFDakIsQ0FBQyxHQUFHLEdBQUcsUUFBUTtFQUFFO0VBQ2pCLENBQUMsR0FBRyxHQUFHLFFBQVE7RUFBRTtFQUNqQixDQUFDLEdBQUcsR0FBRyxRQUFRO0VBQUU7RUFDakIsQ0FBQyxHQUFHLEdBQUcsUUFBUTtFQUFFO0VBQ2pCLENBQUMsR0FBRyxHQUFHLFFBQVE7RUFBRTtFQUNqQixDQUFDLEdBQUcsR0FBRyxRQUFRO0VBQUU7RUFDakIsQ0FBQyxHQUFHLEdBQUcsUUFBUTtFQUFFO0VBQ2pCLENBQUMsR0FBRyxHQUFHLFFBQVE7RUFBRTtFQUNqQixDQUFDLEdBQUcsR0FBRyxRQUFRO0VBQUU7RUFDakIsQ0FBQyxHQUFHLEdBQUcsUUFBUTtFQUFFO0VBQ2pCLENBQUMsR0FBRyxHQUFHLFFBQVE7RUFBRTtFQUNqQixDQUFDLEdBQUcsR0FBRyxRQUFRO0VBQUU7RUFDakIsQ0FBQyxHQUFHLEdBQUcsUUFBUTtFQUFFO0VBQ2pCLENBQUMsR0FBRyxHQUFHLFFBQVE7RUFBRTtFQUNqQixDQUFDLEdBQUcsR0FBRyxRQUFRO0VBQUU7RUFDakIsQ0FBQyxHQUFHLEdBQUcsUUFBUTtFQUFFO0VBQ2pCLENBQUMsR0FBRyxHQUFHLFFBQVE7RUFBRTtFQUNqQixDQUFDLEdBQUcsR0FBRyxRQUFRO0VBQUU7RUFDakIsQ0FBQyxHQUFHLEdBQUcsUUFBUTtFQUFFO0VBQ2pCLENBQUMsR0FBRyxHQUFHLFFBQVE7RUFBRTtFQUNqQixDQUFDLEdBQUcsR0FBRyxRQUFRO0VBQUU7RUFDakIsQ0FBQyxHQUFHLEdBQUcsUUFBUTtFQUFFO0VBQ2pCLENBQUMsR0FBRyxHQUFHLFFBQVE7RUFBRTtFQUNqQixDQUFDLEdBQUcsR0FBRyxRQUFRO0VBQUU7RUFDakIsQ0FBQyxHQUFHLEdBQUcsUUFBUTtFQUFFO0VBQ2pCLENBQUMsR0FBRyxHQUFHLFFBQVE7RUFBRTtFQUNqQixDQUFDLEdBQUcsR0FBRyxRQUFRO0VBQUU7RUFDakIsQ0FBQyxHQUFHLEdBQUcsUUFBUSxDQUFDO0FBQ2xCLENBQUM7QUFBQ0QsT0FBQSxDQUFBQyxnQkFBQSxHQUFBQSxnQkFBQTtBQUVLLE1BQU1DLEtBQUssR0FBRztFQUNuQkMsV0FBVyxFQUFFLENBQUMsSUFBSSxDQUFDO0VBQ25CQyxhQUFhLEVBQUUsQ0FBQyxJQUFJLENBQUM7RUFDckJDLFdBQVcsRUFBRSxDQUFDLElB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
|