@sochdb/sochdb 0.5.1 → 0.5.3
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/README.md +357 -3164
- package/_bin/aarch64-apple-darwin/libsochdb_storage.dylib +0 -0
- package/_bin/aarch64-apple-darwin/sochdb-bulk +0 -0
- package/_bin/aarch64-apple-darwin/sochdb-grpc-server +0 -0
- package/_bin/aarch64-apple-darwin/sochdb-server +0 -0
- package/_bin/x86_64-pc-windows-msvc/sochdb-bulk.exe +0 -0
- package/_bin/x86_64-pc-windows-msvc/sochdb-grpc-server.exe +0 -0
- package/_bin/x86_64-pc-windows-msvc/sochdb_storage.dll +0 -0
- package/_bin/x86_64-unknown-linux-gnu/libsochdb_storage.so +0 -0
- package/_bin/x86_64-unknown-linux-gnu/sochdb-bulk +0 -0
- package/_bin/x86_64-unknown-linux-gnu/sochdb-grpc-server +0 -0
- package/_bin/x86_64-unknown-linux-gnu/sochdb-server +0 -0
- package/dist/cjs/embedded/database.js +279 -1
- package/dist/cjs/index.js +3 -3
- package/dist/cjs/namespace.js +33 -6
- package/dist/cjs/queue.js +143 -24
- package/dist/esm/embedded/database.js +279 -1
- package/dist/esm/index.js +3 -3
- package/dist/esm/namespace.js +33 -6
- package/dist/esm/queue.js +143 -24
- package/dist/types/embedded/database.d.ts +69 -0
- package/dist/types/embedded/database.d.ts.map +1 -1
- package/dist/types/index.d.ts +2 -2
- package/dist/types/namespace.d.ts.map +1 -1
- package/dist/types/queue.d.ts.map +1 -1
- package/package.json +1 -1
package/dist/esm/queue.js
CHANGED
|
@@ -96,21 +96,73 @@ function encodeQueueKey(key) {
|
|
|
96
96
|
return Buffer.concat(parts);
|
|
97
97
|
}
|
|
98
98
|
/**
|
|
99
|
-
* Decode queue key from bytes
|
|
99
|
+
* Decode queue key from bytes using positional parsing.
|
|
100
|
+
* Key format: "queue/" + queueId + "/" + i64BE(priority) + "/" + u64BE(readyTs) + "/" + u64BE(sequence) + "/" + taskId
|
|
101
|
+
* Binary fields may contain 0x2F ('/'), so split('/') is NOT safe.
|
|
100
102
|
*/
|
|
101
103
|
function decodeQueueKey(data) {
|
|
102
|
-
|
|
103
|
-
const
|
|
104
|
-
if (
|
|
105
|
-
throw new errors_1.SochDBError('Invalid queue key format');
|
|
104
|
+
// Must start with "queue/"
|
|
105
|
+
const prefix = Buffer.from('queue/');
|
|
106
|
+
if (data.length < prefix.length || data.subarray(0, prefix.length).compare(prefix) !== 0) {
|
|
107
|
+
throw new errors_1.SochDBError('Invalid queue key format: missing queue/ prefix');
|
|
106
108
|
}
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
109
|
+
let offset = prefix.length;
|
|
110
|
+
// Find queueId: scan for the '/' before the 8-byte priority field
|
|
111
|
+
// The queueId ends at the first '/' followed by exactly 8 bytes + '/' + 8 bytes + '/' + 8 bytes + '/' + taskId
|
|
112
|
+
// Strategy: walk from the end. Structure after queueId:
|
|
113
|
+
// "/" + 8-byte priority + "/" + 8-byte readyTs + "/" + 8-byte sequence + "/" + taskId
|
|
114
|
+
// Total fixed overhead after queueId: 1 + 8 + 1 + 8 + 1 + 8 + 1 = 28 bytes, then taskId
|
|
115
|
+
// Find queueId by scanning for '/' such that remaining = 28 + taskId.len
|
|
116
|
+
// We know: after queueId, fixed structure is:
|
|
117
|
+
// /[8 bytes]/[8 bytes]/[8 bytes]/[taskId]
|
|
118
|
+
// So scan forward to find the separator. QueueId is a plain string (no binary),
|
|
119
|
+
// so find the first '/' after "queue/" that has at least 28 bytes remaining after it.
|
|
120
|
+
let queueIdEnd = -1;
|
|
121
|
+
for (let i = offset; i < data.length; i++) {
|
|
122
|
+
if (data[i] === 0x2F) { // '/'
|
|
123
|
+
const remaining = data.length - i - 1; // bytes after this '/'
|
|
124
|
+
// Need 8 (priority) + 1 (/) + 8 (readyTs) + 1 (/) + 8 (sequence) + 1 (/) + at least 1 (taskId) = 28
|
|
125
|
+
if (remaining >= 28) {
|
|
126
|
+
queueIdEnd = i;
|
|
127
|
+
break;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
if (queueIdEnd < 0) {
|
|
132
|
+
throw new errors_1.SochDBError('Invalid queue key format: cannot find queueId');
|
|
133
|
+
}
|
|
134
|
+
const queueId = data.subarray(offset, queueIdEnd).toString();
|
|
135
|
+
offset = queueIdEnd + 1; // skip '/'
|
|
136
|
+
// Read priority (8 bytes, i64 big-endian order-preserving)
|
|
137
|
+
if (offset + 8 > data.length)
|
|
138
|
+
throw new errors_1.SochDBError('Invalid queue key: truncated priority');
|
|
139
|
+
const priority = decodeI64BE(data.subarray(offset, offset + 8));
|
|
140
|
+
offset += 8;
|
|
141
|
+
// Skip '/'
|
|
142
|
+
if (data[offset] !== 0x2F)
|
|
143
|
+
throw new errors_1.SochDBError('Invalid queue key: expected / after priority');
|
|
144
|
+
offset += 1;
|
|
145
|
+
// Read readyTs (8 bytes, u64 big-endian)
|
|
146
|
+
if (offset + 8 > data.length)
|
|
147
|
+
throw new errors_1.SochDBError('Invalid queue key: truncated readyTs');
|
|
148
|
+
const readyTs = decodeU64BE(data.subarray(offset, offset + 8));
|
|
149
|
+
offset += 8;
|
|
150
|
+
// Skip '/'
|
|
151
|
+
if (data[offset] !== 0x2F)
|
|
152
|
+
throw new errors_1.SochDBError('Invalid queue key: expected / after readyTs');
|
|
153
|
+
offset += 1;
|
|
154
|
+
// Read sequence (8 bytes, u64 big-endian)
|
|
155
|
+
if (offset + 8 > data.length)
|
|
156
|
+
throw new errors_1.SochDBError('Invalid queue key: truncated sequence');
|
|
157
|
+
const sequence = decodeU64BE(data.subarray(offset, offset + 8));
|
|
158
|
+
offset += 8;
|
|
159
|
+
// Skip '/'
|
|
160
|
+
if (data[offset] !== 0x2F)
|
|
161
|
+
throw new errors_1.SochDBError('Invalid queue key: expected / after sequence');
|
|
162
|
+
offset += 1;
|
|
163
|
+
// Remaining is taskId
|
|
164
|
+
const taskId = data.subarray(offset).toString();
|
|
165
|
+
return { queueId, priority, readyTs, sequence, taskId };
|
|
114
166
|
}
|
|
115
167
|
// ============================================================================
|
|
116
168
|
// Priority Queue
|
|
@@ -183,9 +235,42 @@ class PriorityQueue {
|
|
|
183
235
|
*/
|
|
184
236
|
async dequeue(workerId) {
|
|
185
237
|
const now = Date.now();
|
|
186
|
-
const prefix = `queue/${this.config.name}
|
|
187
|
-
//
|
|
188
|
-
|
|
238
|
+
const prefix = Buffer.from(`queue/${this.config.name}/`);
|
|
239
|
+
// Scan all tasks in priority order (binary sort = priority order due to big-endian encoding)
|
|
240
|
+
try {
|
|
241
|
+
for await (const [keyBuf, valueBuf] of this.db.scanPrefix(prefix)) {
|
|
242
|
+
const task = JSON.parse(valueBuf.toString());
|
|
243
|
+
// Skip non-pending tasks
|
|
244
|
+
if (task.state !== TaskState.PENDING) {
|
|
245
|
+
continue;
|
|
246
|
+
}
|
|
247
|
+
// Decode key to check readyTs
|
|
248
|
+
try {
|
|
249
|
+
const queueKey = decodeQueueKey(keyBuf);
|
|
250
|
+
if (queueKey.readyTs > now) {
|
|
251
|
+
continue; // Not ready yet
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
catch {
|
|
255
|
+
continue; // Skip malformed keys
|
|
256
|
+
}
|
|
257
|
+
// Claim this task atomically
|
|
258
|
+
task.state = TaskState.CLAIMED;
|
|
259
|
+
task.claimedAt = now;
|
|
260
|
+
task.claimedBy = workerId;
|
|
261
|
+
// Re-serialize the payload correctly (it's stored as base64 in JSON)
|
|
262
|
+
const updatedValue = Buffer.from(JSON.stringify(task));
|
|
263
|
+
await this.db.put(keyBuf, updatedValue);
|
|
264
|
+
// Update stats
|
|
265
|
+
await this.decrementStat('pending');
|
|
266
|
+
await this.incrementStat('claimed');
|
|
267
|
+
await this.incrementStat('totalDequeued');
|
|
268
|
+
return task;
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
catch {
|
|
272
|
+
// If scan is not available via scanPrefix, return null
|
|
273
|
+
}
|
|
189
274
|
return null;
|
|
190
275
|
}
|
|
191
276
|
/**
|
|
@@ -193,10 +278,11 @@ class PriorityQueue {
|
|
|
193
278
|
*/
|
|
194
279
|
async ack(taskId) {
|
|
195
280
|
// Find and update task state
|
|
196
|
-
const
|
|
197
|
-
if (!
|
|
281
|
+
const result = await this.getTask(taskId);
|
|
282
|
+
if (!result) {
|
|
198
283
|
throw new errors_1.SochDBError(`Task not found: ${taskId}`);
|
|
199
284
|
}
|
|
285
|
+
const { task } = result;
|
|
200
286
|
if (task.state !== TaskState.CLAIMED) {
|
|
201
287
|
throw new errors_1.SochDBError(`Task not in claimed state: ${taskId}`);
|
|
202
288
|
}
|
|
@@ -212,10 +298,11 @@ class PriorityQueue {
|
|
|
212
298
|
* Negative acknowledge - return task to queue
|
|
213
299
|
*/
|
|
214
300
|
async nack(taskId) {
|
|
215
|
-
const
|
|
216
|
-
if (!
|
|
301
|
+
const result = await this.getTask(taskId);
|
|
302
|
+
if (!result) {
|
|
217
303
|
throw new errors_1.SochDBError(`Task not found: ${taskId}`);
|
|
218
304
|
}
|
|
305
|
+
const { task } = result;
|
|
219
306
|
task.retries++;
|
|
220
307
|
if (task.retries >= (this.config.maxRetries || 3)) {
|
|
221
308
|
// Move to dead letter queue
|
|
@@ -251,19 +338,51 @@ class PriorityQueue {
|
|
|
251
338
|
* Purge completed tasks
|
|
252
339
|
*/
|
|
253
340
|
async purge() {
|
|
254
|
-
|
|
255
|
-
|
|
341
|
+
const prefix = Buffer.from(`queue/${this.config.name}/`);
|
|
342
|
+
let purged = 0;
|
|
343
|
+
try {
|
|
344
|
+
const toDelete = [];
|
|
345
|
+
for await (const [keyBuf, valueBuf] of this.db.scanPrefix(prefix)) {
|
|
346
|
+
const task = JSON.parse(valueBuf.toString());
|
|
347
|
+
if (task.state === TaskState.COMPLETED || task.state === TaskState.DEAD_LETTERED) {
|
|
348
|
+
toDelete.push(keyBuf);
|
|
349
|
+
}
|
|
350
|
+
}
|
|
351
|
+
for (const key of toDelete) {
|
|
352
|
+
await this.db.delete(key);
|
|
353
|
+
purged++;
|
|
354
|
+
}
|
|
355
|
+
}
|
|
356
|
+
catch {
|
|
357
|
+
// Return count so far
|
|
358
|
+
}
|
|
359
|
+
return purged;
|
|
256
360
|
}
|
|
257
361
|
// Helper methods
|
|
258
362
|
generateTaskId() {
|
|
259
363
|
return `${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;
|
|
260
364
|
}
|
|
261
365
|
async getTask(taskId) {
|
|
262
|
-
|
|
366
|
+
const prefix = Buffer.from(`queue/${this.config.name}/`);
|
|
367
|
+
try {
|
|
368
|
+
for await (const [keyBuf, valueBuf] of this.db.scanPrefix(prefix)) {
|
|
369
|
+
const task = JSON.parse(valueBuf.toString());
|
|
370
|
+
if (task.taskId === taskId) {
|
|
371
|
+
return { task, keyBuf };
|
|
372
|
+
}
|
|
373
|
+
}
|
|
374
|
+
}
|
|
375
|
+
catch {
|
|
376
|
+
// Scan not available
|
|
377
|
+
}
|
|
263
378
|
return null;
|
|
264
379
|
}
|
|
265
380
|
async updateTask(task) {
|
|
266
|
-
|
|
381
|
+
const result = await this.getTask(task.taskId);
|
|
382
|
+
if (result) {
|
|
383
|
+
const valueBuf = Buffer.from(JSON.stringify(task));
|
|
384
|
+
await this.db.put(result.keyBuf, valueBuf);
|
|
385
|
+
}
|
|
267
386
|
}
|
|
268
387
|
async getStat(name) {
|
|
269
388
|
const key = `_queue_stats/${this.config.name}/${name}`;
|
|
@@ -288,4 +407,4 @@ exports.PriorityQueue = PriorityQueue;
|
|
|
288
407
|
function createQueue(db, name, config) {
|
|
289
408
|
return PriorityQueue.fromDatabase(db, name, config);
|
|
290
409
|
}
|
|
291
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVldWUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcXVldWUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTZCRzs7O0FBZ1dILGtDQU1DO0FBcFdELHFDQUF1QztBQUV2QywrRUFBK0U7QUFDL0UsYUFBYTtBQUNiLCtFQUErRTtBQUUvRSxJQUFZLFNBS1g7QUFMRCxXQUFZLFNBQVM7SUFDbkIsZ0NBQW1CLENBQUE7SUFDbkIsZ0NBQW1CLENBQUE7SUFDbkIsb0NBQXVCLENBQUE7SUFDdkIsNENBQStCLENBQUE7QUFDakMsQ0FBQyxFQUxXLFNBQVMseUJBQVQsU0FBUyxRQUtwQjtBQWFELCtFQUErRTtBQUMvRSxxQkFBcUI7QUFDckIsK0VBQStFO0FBRS9FOztHQUVHO0FBQ0gsU0FBUyxXQUFXLENBQUMsS0FBYTtJQUNoQyxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2xDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUNwQyxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFFRDs7R0FFRztBQUNILFNBQVMsV0FBVyxDQUFDLEdBQVc7SUFDOUIsT0FBTyxNQUFNLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3hDLENBQUM7QUFFRDs7R0FFRztBQUNILFNBQVMsV0FBVyxDQUFDLEtBQWE7SUFDaEMsa0NBQWtDO0lBQ2xDLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxHQUFHLENBQUMsQ0FBQztJQUMzQyxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2xDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztJ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TSxHQUFHLEdBQUcsZ0JBQWdCLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxJQUFJLElBQUksRUFBRSxDQUFDO1FBQ3ZELE1BQU0sSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUM3RSxDQUFDO0lBRU8sS0FBSyxDQUFDLGFBQWEsQ0FBQyxJQUFZO1FBQ3RDLE1BQU0sT0FBTyxHQUFHLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN6QyxNQUFNLEdBQUcsR0FBRyxnQkFBZ0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLElBQUksSUFBSSxFQUFFLENBQUM7UUFDdkQsTUFBTSxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN4RixDQUFDOztBQW5NSCxzQ0FvTUM7QUFFRDs7R0FFRztBQUNILFNBQWdCLFdBQVcsQ0FDekIsRUFBTyxFQUNQLElBQVksRUFDWixNQUE2QjtJQUU3QixPQUFPLGFBQWEsQ0FBQyxZQUFZLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztBQUN0RCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBTb2NoREIgUHJpb3JpdHkgUXVldWVcbiAqIFxuICogRmlyc3QtY2xhc3MgcXVldWUgQVBJIHdpdGggb3JkZXJlZC1rZXkgdGFzayBlbnRyaWVzLCBwcm92aWRpbmcgZWZmaWNpZW50XG4gKiBwcmlvcml0eSBxdWV1ZSBvcGVyYXRpb25zIHdpdGhvdXQgdGhlIE8oTikgYmxvYiByZXdyaXRlIGFudGktcGF0dGVybi5cbiAqIFxuICogRmVhdHVyZXM6XG4gKiAtIE9yZGVyZWQta2V5IHJlcHJlc2VudGF0aW9uOiBFYWNoIHRhc2sgaGFzIGl0cyBvd24ga2V5LCBubyBibG9iIHBhcnNpbmdcbiAqIC0gTyhsb2cgTikgZW5xdWV1ZS9kZXF1ZXVlIHdpdGggb3JkZXJlZCBzY2Fuc1xuICogLSBBdG9taWMgY2xhaW0gcHJvdG9jb2wgZm9yIGNvbmN1cnJlbnQgd29ya2Vyc1xuICogLSBWaXNpYmlsaXR5IHRpbWVvdXQgZm9yIGNyYXNoIHJlY292ZXJ5XG4gKiBcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBpbXBvcnQgeyBEYXRhYmFzZSwgUHJpb3JpdHlRdWV1ZSB9IGZyb20gJ0Bzb2NoZGIvc29jaGRiJztcbiAqIFxuICogY29uc3QgZGIgPSBhd2FpdCBEYXRhYmFzZS5vcGVuKCcuL3F1ZXVlX2RiJyk7XG4gKiBjb25zdCBxdWV1ZSA9IFByaW9yaXR5UXVldWUuZnJvbURhdGFiYXNlKGRiLCAndGFza3MnKTtcbiAqIFxuICogLy8gRW5xdWV1ZSB0YXNrXG4gKiBhd2FpdCBxdWV1ZS5lbnF1ZXVlKDEsIEJ1ZmZlci5mcm9tKCdoaWdoIHByaW9yaXR5IHRhc2snKSk7XG4gKiBcbiAqIC8vIERlcXVldWUgYW5kIHByb2Nlc3NcbiAqIGNvbnN0IHRhc2sgPSBhd2FpdCBxdWV1ZS5kZXF1ZXVlKCd3b3JrZXItMScpO1xuICogaWYgKHRhc2spIHtcbiAqICAgLy8gUHJvY2VzcyB0YXNrLi4uXG4gKiAgIGF3YWl0IHF1ZXVlLmFjayh0YXNrLnRhc2tJZCk7XG4gKiB9XG4gKiBgYGBcbiAqL1xuXG5pbXBvcnQgeyBTb2NoREJFcnJvciB9IGZyb20gJy4vZXJyb3JzJztcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gVGFzayBTdGF0ZVxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5leHBvcnQgZW51bSBUYXNrU3RhdGUge1xuICBQRU5ESU5HID0gJ3BlbmRpbmcnLFxuICBDTEFJTUVEID0gJ2NsYWltZWQnLFxuICBDT01QTEVURUQgPSAnY29tcGxldGVkJyxcbiAgREVBRF9MRVRURVJFRCA9ICdkZWFkX2xldHRlcmVkJyxcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gUXVldWUgQ29uZmlndXJhdGlvblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5leHBvcnQgaW50ZXJmYWNlIFF1ZXVlQ29uZmlnIHtcbiAgbmFtZTogc3RyaW5nO1xuICB2aXNpYmlsaXR5VGltZW91dD86IG51bWJlcjsgLy8gbWlsbGlzZWNvbmRzLCBkZWZhdWx0IDMwMDAwXG4gIG1heFJldHJpZXM/OiBudW1iZXI7IC8vIGRlZmF1bHQgM1xuICBkZWFkTGV0dGVyUXVldWU/OiBzdHJpbmc7XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFF1ZXVlIEtleSBFbmNvZGluZ1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKipcbiAqIEVuY29kZSB1NjQgYXMgYmlnLWVuZGlhbiBmb3IgbGV4aWNvZ3JhcGhpYyBvcmRlcmluZ1xuICovXG5mdW5jdGlvbiBlbmNvZGVVNjRCRSh2YWx1ZTogbnVtYmVyKTogQnVmZmVyIHtcbiAgY29uc3QgYnVmID0gQnVmZmVyLmFsbG9jVW5zYWZlKDgpO1xuICBidWYud3JpdGVCaWdVSW50NjRCRShCaWdJbnQodmFsdWUpKTtcbiAgcmV0dXJuIGJ1Zjtcbn1cblxuLyoqXG4gKiBEZWNvZGUgYmlnLWVuZGlhbiB1NjRcbiAqL1xuZnVuY3Rpb24gZGVjb2RlVTY0QkUoYnVmOiBCdWZmZXIpOiBudW1iZXIge1xuICByZXR1cm4gTnVtYmVyKGJ1Zi5yZWFkQmlnVUludDY0QkUoMCkpO1xufVxuXG4vKipcbiAqIEVuY29kZSBpNjQgYXMgYmlnLWVuZGlhbiBwcmVzZXJ2aW5nIG9yZGVyXG4gKi9cbmZ1bmN0aW9uIGVuY29kZUk2NEJFKHZhbHVlOiBudW1iZXIpOiBCdWZmZXIge1xuICAvLyBNYXAgaTY0IHRvIHU2NCBieSBhZGRpbmcgb2Zmc2V0XG4gIGNvbnN0IG1hcHBlZCA9IEJpZ0ludCh2YWx1ZSkgKyAoMW4gPDwgNjNuKTtcbiAgY29uc3QgYnVmID0gQnVmZmVyLmFsbG9jVW5zYWZlKDgpO1xuICBidWYud3JpdGVCaWdVSW50NjRCRShtYXBwZWQpO1xuICByZXR1cm4gYnVmO1xufVxuXG4vKipcbiAqIERlY29kZSBiaWctZW5kaWFuIGk2NFxuICovXG5mdW5jdGlvbiBkZWNvZGVJNjRCRShidWY6IEJ1ZmZlcik6IG51bWJlciB7XG4gIGNvbnN0IG1hcHBlZCA9IGJ1Zi5yZWFkQmlnVUludDY0QkUoMCk7XG4gIHJldHVybiBOdW1iZXIobWFwcGVkIC0gKDFuIDw8IDYzbikpO1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBRdWV1ZSBLZXlcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuZXhwb3J0IGludGVyZmFjZSBRdWV1ZUtleSB7XG4gIHF1ZXVlSWQ6IHN0cmluZztcbiAgcHJpb3JpdHk6IG51bWJlcjtcbiAgcmVhZHlUczogbnVtYmVyOyAvLyB0aW1lc3RhbXAgaW4gbWlsbGlzZWNvbmRzXG4gIHNlcXVlbmNlOiBudW1iZXI7XG4gIHRhc2tJZDogc3RyaW5nO1xufVxuXG4vKipcbiAqIEVuY29kZSBxdWV1ZSBrZXkgdG8gYnl0ZXMgZm9yIHN0b3JhZ2VcbiAqL1xuZnVuY3Rpb24gZW5jb2RlUXVldWVLZXkoa2V5OiBRdWV1ZUtleSk6IEJ1ZmZlciB7XG4gIGNvbnN0IHBhcnRzID0gW1xuICAgIEJ1ZmZlci5mcm9tKCdxdWV1ZS8nKSxcbiAgICBCdWZmZXIuZnJvbShrZXkucXVldWVJZCksXG4gICAgQnVmZmVyLmZyb20oJy8nKSxcbiAgICBlbmNvZGVJNjRCRShrZXkucHJpb3JpdHkpLFxuICAgIEJ1ZmZlci5mcm9tKCcvJyksXG4gICAgZW5jb2RlVTY0QkUoa2V5LnJlYWR5VHMpLFxuICAgIEJ1ZmZlci5mcm9tKCcvJyksXG4gICAgZW5jb2RlVTY0QkUoa2V5LnNlcXVlbmNlKSxcbiAgICBCdWZmZXIuZnJvbSgnLycpLFxuICAgIEJ1ZmZlci5mcm9tKGtleS50YXNrSWQpLFxuICBdO1xuICBcbiAgcmV0dXJuIEJ1ZmZlci5jb25jYXQocGFydHMpO1xufVxuXG4vKipcbiAqIERlY29kZSBxdWV1ZSBrZXkgZnJvbSBieXRlc1xuICovXG5mdW5jdGlvbiBkZWNvZGVRdWV1ZUtleShkYXRhOiBCdWZmZXIpOiBRdWV1ZUtleSB7XG4gIGNvbnN0IHN0ciA9IGRhdGEudG9TdHJpbmcoKTtcbiAgY29uc3QgcGFydHMgPSBzdHIuc3BsaXQoJy8nKTtcbiAgXG4gIGlmIChwYXJ0cy5sZW5ndGggPCA2IHx8IHBhcnRzWzBdICE9PSAncXVldWUnKSB7XG4gICAgdGhyb3cgbmV3IFNvY2hEQkVycm9yKCdJbnZhbGlkIHF1ZXVlIGtleSBmb3JtYXQnKTtcbiAgfVxuICBcbiAgcmV0dXJuIHtcbiAgICBxdWV1ZUlkOiBwYXJ0c1sxXSxcbiAgICBwcmlvcml0eTogMCwgLy8gV291bGQgbmVlZCB0byBkZWNvZGUgZnJvbSBieXRlc1xuICAgIHJlYWR5VHM6IDAsXG4gICAgc2VxdWVuY2U6IDAsXG4gICAgdGFza0lkOiBwYXJ0c1twYXJ0cy5sZW5ndGggLSAxXSxcbiAgfTtcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gVGFza1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5leHBvcnQgaW50ZXJmYWNlIFRhc2sge1xuICB0YXNrSWQ6IHN0cmluZztcbiAgcHJpb3JpdHk6IG51bWJlcjtcbiAgcGF5bG9hZDogQnVmZmVyO1xuICBzdGF0ZTogVGFza1N0YXRlO1xuICBlbnF1ZXVlZEF0OiBudW1iZXI7XG4gIGNsYWltZWRBdD86IG51bWJlcjtcbiAgY2xhaW1lZEJ5Pzogc3RyaW5nO1xuICBjb21wbGV0ZWRBdD86IG51bWJlcjtcbiAgcmV0cmllczogbnVtYmVyO1xuICBtZXRhZGF0YT86IFJlY29yZDxzdHJpbmcsIGFueT47XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFF1ZXVlIFN0YXRpc3RpY3Ncbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuZXhwb3J0IGludGVyZmFjZSBRdWV1ZVN0YXRzIHtcbiAgcGVuZGluZzogbnVtYmVyO1xuICBjbGFpbWVkOiBudW1iZXI7XG4gIGNvbXBsZXRlZDogbnVtYmVyO1xuICBkZWFkTGV0dGVyZWQ6IG51bWJlcjtcbiAgdG90YWxFbnF1ZXVlZDogbnVtYmVyO1xuICB0b3RhbERlcXVldWVkOiBudW1iZXI7XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFByaW9yaXR5IFF1ZXVlXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbmV4cG9ydCBjbGFzcyBQcmlvcml0eVF1ZXVlIHtcbiAgcHJpdmF0ZSBzdGF0aWMgc2VxdWVuY2VDb3VudGVyID0gMDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGRiOiBhbnksXG4gICAgcHJpdmF0ZSBjb25maWc6IFF1ZXVlQ29uZmlnXG4gICkge1xuICAgIC8vIFNldCBkZWZhdWx0c1xuICAgIHRoaXMuY29uZmlnLnZpc2liaWxpdHlUaW1lb3V0ID0gY29uZmlnLnZpc2liaWxpdHlUaW1lb3V0IHx8IDMwMDAwO1xuICAgIHRoaXMuY29uZmlnLm1heFJldHJpZXMgPSBjb25maWcubWF4UmV0cmllcyB8fCAzO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBxdWV1ZSBmcm9tIGVtYmVkZGVkIGRhdGFiYXNlXG4gICAqL1xuICBzdGF0aWMgZnJvbURhdGFiYXNlKGRiOiBhbnksIG5hbWU6IHN0cmluZywgY29uZmlnPzogUGFydGlhbDxRdWV1ZUNvbmZpZz4pOiBQcmlvcml0eVF1ZXVlIHtcbiAgICBjb25zdCBmdWxsQ29uZmlnOiBRdWV1ZUNvbmZpZyA9IHtcbiAgICAgIG5hbWUsXG4gICAgICAuLi5jb25maWcsXG4gICAgfTtcbiAgICByZXR1cm4gbmV3IFByaW9yaXR5UXVldWUoZGIsIGZ1bGxDb25maWcpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBxdWV1ZSBmcm9tIGdSUEMgY2xpZW50XG4gICAqL1xuICBzdGF0aWMgZnJvbUNsaWVudChjbGllbnQ6IGFueSwgbmFtZTogc3RyaW5nLCBjb25maWc/OiBQYXJ0aWFsPFF1ZXVlQ29uZmlnPik6IFByaW9yaXR5UXVldWUge1xuICAgIGNvbnN0IGZ1bGxDb25maWc6IFF1ZXVlQ29uZmlnID0ge1xuICAgICAgbmFtZSxcbiAgICAgIC4uLmNvbmZpZyxcbiAgICB9O1xuICAgIHJldHVybiBuZXcgUHJpb3JpdHlRdWV1ZShjbGllbnQsIGZ1bGxDb25maWcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEVucXVldWUgYSB0YXNrIHdpdGggcHJpb3JpdHlcbiAgICogTG93ZXIgcHJpb3JpdHkgbnVtYmVyID0gaGlnaGVyIHVyZ2VuY3lcbiAgICovXG4gIGFzeW5jIGVucXVldWUoXG4gICAgcHJpb3JpdHk6IG51bWJlcixcbiAgICBwYXlsb2FkOiBCdWZmZXIsXG4gICAgbWV0YWRhdGE/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+XG4gICk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgY29uc3QgdGFza0lkID0gdGhpcy5nZW5lcmF0ZVRhc2tJZCgpO1xuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgXG4gICAgY29uc3Qga2V5OiBRdWV1ZUtleSA9IHtcbiAgICAgIHF1ZXVlSWQ6IHRoaXMuY29uZmlnLm5hbWUsXG4gICAgICBwcmlvcml0eSxcbiAgICAgIHJlYWR5VHM6IG5vdyxcbiAgICAgIHNlcXVlbmNlOiBQcmlvcml0eVF1ZXVlLnNlcXVlbmNlQ291bnRlcisrLFxuICAgICAgdGFza0lkLFxuICAgIH07XG5cbiAgICBjb25zdCB0YXNrOiBUYXNrID0ge1xuICAgICAgdGFza0lkLFxuICAgICAgcHJpb3JpdHksXG4gICAgICBwYXlsb2FkLFxuICAgICAgc3RhdGU6IFRhc2tTdGF0ZS5QRU5ESU5HLFxuICAgICAgZW5xdWV1ZWRBdDogbm93LFxuICAgICAgcmV0cmllczogMCxcbiAgICAgIG1ldGFkYXRhLFxuICAgIH07XG5cbiAgICBjb25zdCBrZXlCdWYgPSBlbmNvZGVRdWV1ZUtleShrZXkpO1xuICAgIGNvbnN0IHZhbHVlQnVmID0gQnVmZmVyLmZyb20oSlNPTi5zdHJpbmdpZnkodGFzaykpO1xuICAgIFxuICAgIGF3YWl0IHRoaXMuZGIucHV0KGtleUJ1ZiwgdmFsdWVCdWYpO1xuICAgIFxuICAgIC8vIFVwZGF0ZSBzdGF0c1xuICAgIGF3YWl0IHRoaXMuaW5jcmVtZW50U3RhdCgndG90YWxFbnF1ZXVlZCcpO1xuICAgIGF3YWl0IHRoaXMuaW5jcmVtZW50U3RhdCgncGVuZGluZycpO1xuICAgIFxuICAgIHJldHVybiB0YXNrSWQ7XG4gIH1cblxuICAvKipcbiAgICogRGVxdWV1ZSB0aGUgaGlnaGVzdCBwcmlvcml0eSB0YXNrXG4gICAqIFJldHVybnMgbnVsbCBpZiBubyB0YXNrcyBhdmFpbGFibGVcbiAgICovXG4gIGFzeW5jIGRlcXVldWUod29ya2VySWQ6IHN0cmluZyk6IFByb21pc2U8VGFzayB8IG51bGw+IHtcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IHByZWZpeCA9IGBxdWV1ZS8ke3RoaXMuY29uZmlnLm5hbWV9L2A7XG4gICAgXG4gICAgLy8gVE9ETzogSW1wbGVtZW50IHJhbmdlIHNjYW4gdG8gZmluZCBmaXJzdCByZWFkeSB0YXNrXG4gICAgLy8gRm9yIG5vdywgdGhpcyBpcyBhIHBsYWNlaG9sZGVyXG4gICAgXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvKipcbiAgICogQWNrbm93bGVkZ2UgdGFzayBjb21wbGV0aW9uXG4gICAqL1xuICBhc3luYyBhY2sodGFza0lkOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAvLyBGaW5kIGFuZCB1cGRhdGUgdGFzayBzdGF0ZVxuICAgIGNvbnN0IHRhc2sgPSBhd2FpdCB0aGlzLmdldFRhc2sodGFza0lkKTtcbiAgICBpZiAoIXRhc2spIHtcbiAgICAgIHRocm93IG5ldyBTb2NoREJFcnJvcihgVGFzayBub3QgZm91bmQ6ICR7dGFza0lkfWApO1xuICAgIH1cblxuICAgIGlmICh0YXNrLnN0YXRlICE9PSBUYXNrU3RhdGUuQ0xBSU1FRCkge1xuICAgICAgdGhyb3cgbmV3IFNvY2hEQkVycm9yKGBUYXNrIG5vdCBpbiBjbGFpbWVkIHN0YXRlOiAke3Rhc2tJZH1gKTtcbiAgICB9XG5cbiAgICAvLyBVcGRhdGUgdGFzayBzdGF0ZVxuICAgIHRhc2suc3RhdGUgPSBUYXNrU3RhdGUuQ09NUExFVEVEO1xuICAgIHRhc2suY29tcGxldGVkQXQgPSBEYXRlLm5vdygpO1xuICAgIFxuICAgIGF3YWl0IHRoaXMudXBkYXRlVGFzayh0YXNrKTtcbiAgICBcbiAgICAvLyBVcGRhdGUgc3RhdHNcbiAgICBhd2FpdCB0aGlzLmRlY3JlbWVudFN0YXQoJ2NsYWltZWQnKTtcbiAgICBhd2FpdCB0aGlzLmluY3JlbWVudFN0YXQoJ2NvbXBsZXRlZCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIE5lZ2F0aXZlIGFja25vd2xlZGdlIC0gcmV0dXJuIHRhc2sgdG8gcXVldWVcbiAgICovXG4gIGFzeW5jIG5hY2sodGFza0lkOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB0YXNrID0gYXdhaXQgdGhpcy5nZXRUYXNrKHRhc2tJZCk7XG4gICAgaWYgKCF0YXNrKSB7XG4gICAgICB0aHJvdyBuZXcgU29jaERCRXJyb3IoYFRhc2sgbm90IGZvdW5kOiAke3Rhc2tJZH1gKTtcbiAgICB9XG5cbiAgICB0YXNrLnJldHJpZXMrKztcbiAgICBcbiAgICBpZiAodGFzay5yZXRyaWVzID49ICh0aGlzLmNvbmZpZy5tYXhSZXRyaWVzIHx8IDMpKSB7XG4gICAgICAvLyBNb3ZlIHRvIGRlYWQgbGV0dGVyIHF1ZXVlXG4gICAgICB0YXNrLnN0YXRlID0gVGFza1N0YXRlLkRFQURfTEVUVEVSRUQ7XG4gICAgICBhd2FpdCB0aGlzLnVwZGF0ZVRhc2sodGFzayk7XG4gICAgICBhd2FpdCB0aGlzLmRlY3JlbWVudFN0YXQoJ2NsYWltZWQnKTtcbiAgICAgIGF3YWl0IHRoaXMuaW5jcmVtZW50U3RhdCgnZGVhZExldHRlcmVkJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFJldHVybiB0byBwZW5kaW5nXG4gICAgICB0YXNrLnN0YXRlID0gVGFza1N0YXRlLlBFTkRJTkc7XG4gICAgICB0YXNrLmNsYWltZWRBdCA9IHVuZGVmaW5lZDtcbiAgICAgIHRhc2suY2xhaW1lZEJ5ID0gdW5kZWZpbmVkO1xuICAgICAgYXdhaXQgdGhpcy51cGRhdGVUYXNrKHRhc2spO1xuICAgICAgYXdhaXQgdGhpcy5kZWNyZW1lbnRTdGF0KCdjbGFpbWVkJyk7XG4gICAgICBhd2FpdCB0aGlzLmluY3JlbWVudFN0YXQoJ3BlbmRpbmcnKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0IHF1ZXVlIHN0YXRpc3RpY3NcbiAgICovXG4gIGFzeW5jIHN0YXRzKCk6IFByb21pc2U8UXVldWVTdGF0cz4ge1xuICAgIHJldHVybiB7XG4gICAgICBwZW5kaW5nOiBhd2FpdCB0aGlzLmdldFN0YXQoJ3BlbmRpbmcnKSxcbiAgICAgIGNsYWltZWQ6IGF3YWl0IHRoaXMuZ2V0U3RhdCgnY2xhaW1lZCcpLFxuICAgICAgY29tcGxldGVkOiBhd2FpdCB0aGlzLmdldFN0YXQoJ2NvbXBsZXRlZCcpLFxuICAgICAgZGVhZExldHRlcmVkOiBhd2FpdCB0aGlzLmdldFN0YXQoJ2RlYWRMZXR0ZXJlZCcpLFxuICAgICAgdG90YWxFbnF1ZXVlZDogYXdhaXQgdGhpcy5nZXRTdGF0KCd0b3RhbEVucXVldWVkJyksXG4gICAgICB0b3RhbERlcXVldWVkOiBhd2FpdCB0aGlzLmdldFN0YXQoJ3RvdGFsRGVxdWV1ZWQnKSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFB1cmdlIGNvbXBsZXRlZCB0YXNrc1xuICAgKi9cbiAgYXN5bmMgcHVyZ2UoKTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICAvLyBUT0RPOiBJbXBsZW1lbnQgcHVyZ2luZyBvZiBjb21wbGV0ZWQgdGFza3NcbiAgICByZXR1cm4gMDtcbiAgfVxuXG4gIC8vIEhlbHBlciBtZXRob2RzXG4gIHByaXZhdGUgZ2VuZXJhdGVUYXNrSWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCR7RGF0ZS5ub3coKX0tJHtNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHIoMiwgOSl9YDtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZ2V0VGFzayh0YXNrSWQ6IHN0cmluZyk6IFByb21pc2U8VGFzayB8IG51bGw+IHtcbiAgICAvLyBUT0RPOiBJbXBsZW1lbnQgdGFzayBsb29rdXBcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgdXBkYXRlVGFzayh0YXNrOiBUYXNrKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8gVE9ETzogSW1wbGVtZW50IHRhc2sgdXBkYXRlXG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGdldFN0YXQobmFtZTogc3RyaW5nKTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICBjb25zdCBrZXkgPSBgX3F1ZXVlX3N0YXRzLyR7dGhpcy5jb25maWcubmFtZX0vJHtuYW1lfWA7XG4gICAgY29uc3QgdmFsdWUgPSBhd2FpdCB0aGlzLmRiLmdldChCdWZmZXIuZnJvbShrZXkpKTtcbiAgICByZXR1cm4gdmFsdWUgPyBwYXJzZUludCh2YWx1ZS50b1N0cmluZygpKSA6IDA7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGluY3JlbWVudFN0YXQobmFtZTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgY3VycmVudCA9IGF3YWl0IHRoaXMuZ2V0U3RhdChuYW1lKTtcbiAgICBjb25zdCBrZXkgPSBgX3F1ZXVlX3N0YXRzLyR7dGhpcy5jb25maWcubmFtZX0vJHtuYW1lfWA7XG4gICAgYXdhaXQgdGhpcy5kYi5wdXQoQnVmZmVyLmZyb20oa2V5KSwgQnVmZmVyLmZyb20oKGN1cnJlbnQgKyAxKS50b1N0cmluZygpKSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGRlY3JlbWVudFN0YXQobmFtZTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgY3VycmVudCA9IGF3YWl0IHRoaXMuZ2V0U3RhdChuYW1lKTtcbiAgICBjb25zdCBrZXkgPSBgX3F1ZXVlX3N0YXRzLyR7dGhpcy5jb25maWcubmFtZX0vJHtuYW1lfWA7XG4gICAgYXdhaXQgdGhpcy5kYi5wdXQoQnVmZmVyLmZyb20oa2V5KSwgQnVmZmVyLmZyb20oTWF0aC5tYXgoMCwgY3VycmVudCAtIDEpLnRvU3RyaW5nKCkpKTtcbiAgfVxufVxuXG4vKipcbiAqIENyZWF0ZSBhIHF1ZXVlIGluc3RhbmNlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVRdWV1ZShcbiAgZGI6IGFueSxcbiAgbmFtZTogc3RyaW5nLFxuICBjb25maWc/OiBQYXJ0aWFsPFF1ZXVlQ29uZmlnPlxuKTogUHJpb3JpdHlRdWV1ZSB7XG4gIHJldHVybiBQcmlvcml0eVF1ZXVlLmZyb21EYXRhYmFzZShkYiwgbmFtZSwgY29uZmlnKTtcbn1cbiJdfQ==
|
|
410
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVldWUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcXVldWUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTZCRzs7O0FBb2VILGtDQU1DO0FBeGVELHFDQUF1QztBQUV2QywrRUFBK0U7QUFDL0UsYUFBYTtBQUNiLCtFQUErRTtBQUUvRSxJQUFZLFNBS1g7QUFMRCxXQUFZLFNBQVM7SUFDbkIsZ0NBQW1CLENBQUE7SUFDbkIsZ0NBQW1CLENBQUE7SUFDbkIsb0NBQXVCLENBQUE7SUFDdkIsNENBQStCLENBQUE7QUFDakMsQ0FBQyxFQUxXLFNBQVMseUJBQVQsU0FBUyxRQUtwQjtBQWFELCtFQUErRTtBQUMvRSxxQkFBcUI7QUFDckIsK0VBQStFO0FBRS9FOztHQUVHO0FBQ0gsU0FBUyxXQUFXLENBQUMsS0FBYTtJQUNoQyxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2xDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUNwQyxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFFRDs7R0FFRztBQUNILFNBQVMsV0FBVyxDQUFDLEdBQVc7SUFDOUIsT0FBTyxNQUFNLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3hDLENBQUM7QUFFRDs7R0FFRztBQUNILFNBQVMsV0FBVyxDQUFDLEtBQWE7SUFDaEMsa0NBQWtDO0lBQ2xDLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxHQUFHLENBQUMsQ0FBQztJQUMzQyxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2xDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUM3QixPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFFRDs7R0FFRztBQUNILFNBQVMsV0FBVyxDQUFDLEdBQVc7SUFDOUIsTUFBTSxNQUFNLEdBQUcsR0FBRyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN0QyxPQUFPLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQztBQUN0QyxDQUFDO0FBY0Q7O0dBRUc7QUFDSCxTQUFTLGNBQWMsQ0FBQyxHQUFhO0lBQ25DLE1BQU0sS0FBSyxHQUFHO1FBQ1osTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7UUFDckIsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDO1FBQ3hCLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDO1FBQ2hCLFdBQVcsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDO1FBQ3pCLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDO1FBQ2hCLFdBQVcsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDO1FBQ3hCLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDO1FBQ2hCLFdBQVcsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDO1FBQ3pCLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDO1FBQ2hCLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQztLQUN4QixDQUFDO0lBRUYsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzlCLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsU0FBUyxjQUFjLENBQUMsSUFBWTtJQUNsQywyQkFBMkI7SUFDM0IsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNyQyxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ3pGLE1BQU0sSUFBSSxvQkFBVyxDQUFDLGlEQUFpRCxDQUFDLENBQUM7SUFDM0UsQ0FBQztJQUVELElBQUksTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7SUFFM0Isa0VBQWtFO0lBQ2xFLCtHQUErRztJQUMvRyx3REFBd0Q7SUFDeEQsd0ZBQXdGO0lBQ3hGLHdGQUF3RjtJQUN4Rix5RUFBeUU7SUFFekUsOENBQThDO0lBQzlDLDRDQUE0QztJQUM1QyxpRkFBaUY7SUFDakYsc0ZBQXNGO0lBQ3RGLElBQUksVUFBVSxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3BCLEtBQUssSUFBSSxDQUFDLEdBQUcsTUFBTSxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7UUFDMUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNO1lBQzVCLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLHVCQUF1QjtZQUM5RCxvR0FBb0c7WUFDcEcsSUFBSSxTQUFTLElBQUksRUFBRSxFQUFFLENBQUM7Z0JBQ3BCLFVBQVUsR0FBRyxDQUFDLENBQUM7Z0JBQ2YsTUFBTTtZQUNSLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVELElBQUksVUFBVSxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQ25CLE1BQU0sSUFBSSxvQkFBVyxDQUFDLCtDQUErQyxDQUFDLENBQUM7SUFDekUsQ0FBQztJQUVELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLFVBQVUsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQzdELE1BQU0sR0FBRyxVQUFVLEdBQUcsQ0FBQyxDQUFDLENBQUMsV0FBVztJQUVwQywyREFBMkQ7SUFDM0QsSUFBSSxNQUFNLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNO1FBQUUsTUFBTSxJQUFJLG9CQUFXLENBQUMsdUNBQXVDLENBQUMsQ0FBQztJQUM3RixNQUFNLFFBQVEsR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsTUFBTSxHQUFHLENBQUMsQ0FBVyxDQUFDLENBQUM7SUFDMUUsTUFBTSxJQUFJLENBQUMsQ0FBQztJQUVaLFdBQVc7SUFDWCxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxJQUFJO1FBQUUsTUFBTSxJQUFJLG9CQUFXLENBQUMsOENBQThDLENBQUMsQ0FBQztJQUNqRyxNQUFNLElBQUksQ0FBQyxDQUFDO0lBRVoseUNBQXlDO0lBQ3pDLElBQUksTUFBTSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTTtRQUFFLE1BQU0sSUFBSSxvQkFBVyxDQUFDLHNDQUFzQyxDQUFDLENBQUM7SUFDNUYsTUFBTSxPQUFPLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLE1BQU0sR0FBRyxDQUFDLENBQVcsQ0FBQyxDQUFDO0lBQ3pFLE1BQU0sSUFBSSxDQUFDLENBQUM7SUFFWixXQUFXO0lBQ1gsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssSUFBSTtRQUFFLE1BQU0sSUFBSSxvQkFBVyxDQUFDLDZDQUE2QyxDQUFDLENBQUM7SUFDaEcsTUFBTSxJQUFJLENBQUMsQ0FBQztJQUVaLDBDQUEwQztJQUMxQyxJQUFJLE1BQU0sR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU07UUFBRSxNQUFNLElBQUksb0JBQVcsQ0FBQyx1Q0FBdUMsQ0FBQyxDQUFDO0lBQzdGLE1BQU0sUUFBUSxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxNQUFNLEdBQUcsQ0FBQyxDQUFXLENBQUMsQ0FBQztJQUMxRSxNQUFNLElBQUksQ0FBQyxDQUFDO0lBRVosV0FBVztJQUNYLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLElBQUk7UUFBRSxNQUFNLElBQUksb0JBQVcsQ0FBQyw4Q0FBOEMsQ0FBQyxDQUFDO0lBQ2pHLE1BQU0sSUFBSSxDQUFDLENBQUM7SUFFWixzQkFBc0I7SUFDdEIsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUVoRCxPQUFPLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxDQUFDO0FBQzFELENBQUM7QUFnQ0QsK0VBQStFO0FBQy9FLGlCQUFpQjtBQUNqQiwrRUFBK0U7QUFFL0UsTUFBYSxhQUFhO0lBSWQ7SUFDQTtJQUpGLE1BQU0sQ0FBQyxlQUFlLEdBQUcsQ0FBQyxDQUFDO0lBRW5DLFlBQ1UsRUFBTyxFQUNQLE1BQW1CO1FBRG5CLE9BQUUsR0FBRixFQUFFLENBQUs7UUFDUCxXQUFNLEdBQU4sTUFBTSxDQUFhO1FBRTNCLGVBQWU7UUFDZixJQUFJLENBQUMsTUFBTSxDQUFDLGlCQUFpQixHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsSUFBSSxLQUFLLENBQUM7UUFDbEUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDLFVBQVUsSUFBSSxDQUFDLENBQUM7SUFDbEQsQ0FBQztJQUVEOztPQUVHO0lBQ0gsTUFBTSxDQUFDLFlBQVksQ0FBQyxFQUFPLEVBQUUsSUFBWSxFQUFFLE1BQTZCO1FBQ3RFLE1BQU0sVUFBVSxHQUFnQjtZQUM5QixJQUFJO1lBQ0osR0FBRyxNQUFNO1NBQ1YsQ0FBQztRQUNGLE9BQU8sSUFBSSxhQUFhLENBQUMsRUFBRSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFFRDs7T0FFRztJQUNILE1BQU0sQ0FBQyxVQUFVLENBQUMsTUFBVyxFQUFFLElBQVksRUFBRSxNQUE2QjtRQUN4RSxNQUFNLFVBQVUsR0FBZ0I7WUFDOUIsSUFBSTtZQUNKLEdBQUcsTUFBTTtTQUNWLENBQUM7UUFDRixPQUFPLElBQUksYUFBYSxDQUFDLE1BQU0sRUFBRSxVQUFVLENBQUMsQ0FBQztJQUMvQyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsS0FBSyxDQUFDLE9BQU8sQ0FDWCxRQUFnQixFQUNoQixPQUFlLEVBQ2YsUUFBOEI7UUFFOUIsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3JDLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUV2QixNQUFNLEdBQUcsR0FBYTtZQUNwQixPQUFPLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJO1lBQ3pCLFFBQVE7WUFDUixPQUFPLEVBQUUsR0FBRztZQUNaLFFBQVEsRUFBRSxhQUFhLENBQUMsZUFBZSxFQUFFO1lBQ3pDLE1BQU07U0FDUCxDQUFDO1FBRUYsTUFBTSxJQUFJLEdBQVM7WUFDakIsTUFBTTtZQUNOLFFBQVE7WUFDUixPQUFPO1lBQ1AsS0FBSyxFQUFFLFNBQVMsQ0FBQyxPQUFPO1lBQ3hCLFVBQVUsRUFBRSxHQUFHO1lBQ2YsT0FBTyxFQUFFLENBQUM7WUFDVixRQUFRO1NBQ1QsQ0FBQztRQUVGLE1BQU0sTUFBTSxHQUFHLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNuQyxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUVuRCxNQUFNLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQztRQUVwQyxlQUFlO1FBQ2YsTUFBTSxJQUFJLENBQUMsYUFBYSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQzFDLE1BQU0sSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUVwQyxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsS0FBSyxDQUFDLE9BQU8sQ0FBQyxRQUFnQjtRQUM1QixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDdkIsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztRQUV6RCw2RkFBNkY7UUFDN0YsSUFBSSxDQUFDO1lBQ0gsSUFBSSxLQUFLLEVBQUUsTUFBTSxDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO2dCQUNsRSxNQUFNLElBQUksR0FBUyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO2dCQUVuRCx5QkFBeUI7Z0JBQ3pCLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxTQUFTLENBQUMsT0FBTyxFQUFFLENBQUM7b0JBQ3JDLFNBQVM7Z0JBQ1gsQ0FBQztnQkFFRCw4QkFBOEI7Z0JBQzlCLElBQUksQ0FBQztvQkFDSCxNQUFNLFFBQVEsR0FBRyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUM7b0JBQ3hDLElBQUksUUFBUSxDQUFDLE9BQU8sR0FBRyxHQUFHLEVBQUUsQ0FBQzt3QkFDM0IsU0FBUyxDQUFDLGdCQUFnQjtvQkFDNUIsQ0FBQztnQkFDSCxDQUFDO2dCQUFDLE1BQU0sQ0FBQztvQkFDUCxTQUFTLENBQUMsc0JBQXNCO2dCQUNsQyxDQUFDO2dCQUVELDZCQUE2QjtnQkFDN0IsSUFBSSxDQUFDLEtBQUssR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDO2dCQUMvQixJQUFJLENBQUMsU0FBUyxHQUFHLEdBQUcsQ0FBQztnQkFDckIsSUFBSSxDQUFDLFNBQVMsR0FBRyxRQUFRLENBQUM7Z0JBRTFCLHFFQUFxRTtnQkFDckUsTUFBTSxZQUFZLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7Z0JBQ3ZELE1BQU0sSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLFlBQVksQ0FBQyxDQUFDO2dCQUV4QyxlQUFlO2dCQUNmLE1BQU0sSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsQ0FBQztnQkFDcEMsTUFBTSxJQUFJLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDO2dCQUNwQyxNQUFNLElBQUksQ0FBQyxhQUFhLENBQUMsZUFBZSxDQUFDLENBQUM7Z0JBRTFDLE9BQU8sSUFBSSxDQUFDO1lBQ2QsQ0FBQztRQUNILENBQUM7UUFBQyxNQUFNLENBQUM7WUFDUCx1REFBdUQ7UUFDekQsQ0FBQztRQUVELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVEOztPQUVHO0lBQ0gsS0FBSyxDQUFDLEdBQUcsQ0FBQyxNQUFjO1FBQ3RCLDZCQUE2QjtRQUM3QixNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDMUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ1osTUFBTSxJQUFJLG9CQUFXLENBQUMsbUJBQW1CLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFDckQsQ0FBQztRQUVELE1BQU0sRUFBRSxJQUFJLEVBQUUsR0FBRyxNQUFNLENBQUM7UUFFeEIsSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLFNBQVMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNyQyxNQUFNLElBQUksb0JBQVcsQ0FBQyw4QkFBOEIsTUFBTSxFQUFFLENBQUMsQ0FBQztRQUNoRSxDQUFDO1FBRUQsb0JBQW9CO1FBQ3BCLElBQUksQ0FBQyxLQUFLLEdBQUcsU0FBUyxDQUFDLFNBQVMsQ0FBQztRQUNqQyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUU5QixNQUFNLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFNUIsZUFBZTtRQUNmLE1BQU0sSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNwQyxNQUFNLElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDeEMsQ0FBQztJQUVEOztPQUVHO0lBQ0gsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFjO1FBQ3ZCLE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMxQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDWixNQUFNLElBQUksb0JBQVcsQ0FBQyxtQkFBbUIsTUFBTSxFQUFFLENBQUMsQ0FBQztRQUNyRCxDQUFDO1FBRUQsTUFBTSxFQUFFLElBQUksRUFBRSxHQUFHLE1BQU0sQ0FBQztRQUN4QixJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7UUFFZixJQUFJLElBQUksQ0FBQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ2xELDRCQUE0QjtZQUM1QixJQUFJLENBQUMsS0FBSyxHQUFHLFNBQVMsQ0FBQyxhQUFhLENBQUM7WUFDckMsTUFBTSxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzVCLE1BQU0sSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUNwQyxNQUFNLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDM0MsQ0FBQzthQUFNLENBQUM7WUFDTixvQkFBb0I7WUFDcEIsSUFBSSxDQUFDLEtBQUssR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDO1lBQy9CLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO1lBQzNCLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO1lBQzNCLE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUM1QixNQUFNLElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDcEMsTUFBTSxJQUFJLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3RDLENBQUM7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxLQUFLLENBQUMsS0FBSztRQUNULE9BQU87WUFDTCxPQUFPLEVBQUUsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQztZQUN0QyxPQUFPLEVBQUUsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQztZQUN0QyxTQUFTLEVBQUUsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQztZQUMxQyxZQUFZLEVBQUUsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQztZQUNoRCxhQUFhLEVBQUUsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQztZQUNsRCxhQUFhLEVBQUUsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQztTQUNuRCxDQUFDO0lBQ0osQ0FBQztJQUVEOztPQUVHO0lBQ0gsS0FBSyxDQUFDLEtBQUs7UUFDVCxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO1FBQ3pELElBQUksTUFBTSxHQUFHLENBQUMsQ0FBQztRQUVmLElBQUksQ0FBQztZQUNILE1BQU0sUUFBUSxHQUFhLEVBQUUsQ0FBQztZQUM5QixJQUFJLEtBQUssRUFBRSxNQUFNLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxJQUFJLElBQUksQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7Z0JBQ2xFLE1BQU0sSUFBSSxHQUFTLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7Z0JBQ25ELElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxTQUFTLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssU0FBUyxDQUFDLGFBQWEsRUFBRSxDQUFDO29CQUNqRixRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUN4QixDQUFDO1lBQ0gsQ0FBQztZQUVELEtBQUssTUFBTSxHQUFHLElBQUksUUFBUSxFQUFFLENBQUM7Z0JBQzNCLE1BQU0sSUFBSSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQzFCLE1BQU0sRUFBRSxDQUFDO1lBQ1gsQ0FBQztRQUNILENBQUM7UUFBQyxNQUFNLENBQUM7WUFDUCxzQkFBc0I7UUFDeEIsQ0FBQztRQUVELE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFRCxpQkFBaUI7SUFDVCxjQUFjO1FBQ3BCLE9BQU8sR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDcEUsQ0FBQztJQUVPLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBYztRQUNsQyxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO1FBRXpELElBQUksQ0FBQztZQUNILElBQUksS0FBSyxFQUFFLE1BQU0sQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztnQkFDbEUsTUFBTSxJQUFJLEdBQVMsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztnQkFDbkQsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLE1BQU0sRUFBRSxDQUFDO29CQUMzQixPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFDO2dCQUMxQixDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7UUFBQyxNQUFNLENBQUM7WUFDUCxxQkFBcUI7UUFDdkIsQ0FBQztRQUVELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVPLEtBQUssQ0FBQyxVQUFVLENBQUMsSUFBVTtRQUNqQyxNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQy9DLElBQUksTUFBTSxFQUFFLENBQUM7WUFDWCxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUNuRCxNQUFNLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDN0MsQ0FBQztJQUNILENBQUM7SUFFTyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQVk7UUFDaEMsTUFBTSxHQUFHLEdBQUcsZ0JBQWdCLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxJQUFJLElBQUksRUFBRSxDQUFDO1FBQ3ZELE1BQU0sS0FBSyxHQUFHLE1BQU0sSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ2xELE9BQU8sS0FBSyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNoRCxDQUFDO0lBRU8sS0FBSyxDQUFDLGFBQWEsQ0FBQyxJQUFZO1FBQ3RDLE1BQU0sT0FBTyxHQUFHLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN6QyxNQUFNLEdBQUcsR0FBRyxnQkFBZ0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLElBQUksSUFBSSxFQUFFLENBQUM7UUFDdkQsTUFBTSxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzdFLENBQUM7SUFFTyxLQUFLLENBQUMsYUFBYSxDQUFDLElBQVk7UUFDdEMsTUFBTSxPQUFPLEdBQUcsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3pDLE1BQU0sR0FBRyxHQUFHLGdCQUFnQixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUN2RCxNQUFNLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3hGLENBQUM7O0FBOVFILHNDQStRQztBQUVEOztHQUVHO0FBQ0gsU0FBZ0IsV0FBVyxDQUN6QixFQUFPLEVBQ1AsSUFBWSxFQUNaLE1BQTZCO0lBRTdCLE9BQU8sYUFBYSxDQUFDLFlBQVksQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ3RELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFNvY2hEQiBQcmlvcml0eSBRdWV1ZVxuICogXG4gKiBGaXJzdC1jbGFzcyBxdWV1ZSBBUEkgd2l0aCBvcmRlcmVkLWtleSB0YXNrIGVudHJpZXMsIHByb3ZpZGluZyBlZmZpY2llbnRcbiAqIHByaW9yaXR5IHF1ZXVlIG9wZXJhdGlvbnMgd2l0aG91dCB0aGUgTyhOKSBibG9iIHJld3JpdGUgYW50aS1wYXR0ZXJuLlxuICogXG4gKiBGZWF0dXJlczpcbiAqIC0gT3JkZXJlZC1rZXkgcmVwcmVzZW50YXRpb246IEVhY2ggdGFzayBoYXMgaXRzIG93biBrZXksIG5vIGJsb2IgcGFyc2luZ1xuICogLSBPKGxvZyBOKSBlbnF1ZXVlL2RlcXVldWUgd2l0aCBvcmRlcmVkIHNjYW5zXG4gKiAtIEF0b21pYyBjbGFpbSBwcm90b2NvbCBmb3IgY29uY3VycmVudCB3b3JrZXJzXG4gKiAtIFZpc2liaWxpdHkgdGltZW91dCBmb3IgY3Jhc2ggcmVjb3ZlcnlcbiAqIFxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGltcG9ydCB7IERhdGFiYXNlLCBQcmlvcml0eVF1ZXVlIH0gZnJvbSAnQHNvY2hkYi9zb2NoZGInO1xuICogXG4gKiBjb25zdCBkYiA9IGF3YWl0IERhdGFiYXNlLm9wZW4oJy4vcXVldWVfZGInKTtcbiAqIGNvbnN0IHF1ZXVlID0gUHJpb3JpdHlRdWV1ZS5mcm9tRGF0YWJhc2UoZGIsICd0YXNrcycpO1xuICogXG4gKiAvLyBFbnF1ZXVlIHRhc2tcbiAqIGF3YWl0IHF1ZXVlLmVucXVldWUoMSwgQnVmZmVyLmZyb20oJ2hpZ2ggcHJpb3JpdHkgdGFzaycpKTtcbiAqIFxuICogLy8gRGVxdWV1ZSBhbmQgcHJvY2Vzc1xuICogY29uc3QgdGFzayA9IGF3YWl0IHF1ZXVlLmRlcXVldWUoJ3dvcmtlci0xJyk7XG4gKiBpZiAodGFzaykge1xuICogICAvLyBQcm9jZXNzIHRhc2suLi5cbiAqICAgYXdhaXQgcXVldWUuYWNrKHRhc2sudGFza0lkKTtcbiAqIH1cbiAqIGBgYFxuICovXG5cbmltcG9ydCB7IFNvY2hEQkVycm9yIH0gZnJvbSAnLi9lcnJvcnMnO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBUYXNrIFN0YXRlXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbmV4cG9ydCBlbnVtIFRhc2tTdGF0ZSB7XG4gIFBFTkRJTkcgPSAncGVuZGluZycsXG4gIENMQUlNRUQgPSAnY2xhaW1lZCcsXG4gIENPTVBMRVRFRCA9ICdjb21wbGV0ZWQnLFxuICBERUFEX0xFVFRFUkVEID0gJ2RlYWRfbGV0dGVyZWQnLFxufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBRdWV1ZSBDb25maWd1cmF0aW9uXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbmV4cG9ydCBpbnRlcmZhY2UgUXVldWVDb25maWcge1xuICBuYW1lOiBzdHJpbmc7XG4gIHZpc2liaWxpdHlUaW1lb3V0PzogbnVtYmVyOyAvLyBtaWxsaXNlY29uZHMsIGRlZmF1bHQgMzAwMDBcbiAgbWF4UmV0cmllcz86IG51bWJlcjsgLy8gZGVmYXVsdCAzXG4gIGRlYWRMZXR0ZXJRdWV1ZT86IHN0cmluZztcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gUXVldWUgS2V5IEVuY29kaW5nXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICogRW5jb2RlIHU2NCBhcyBiaWctZW5kaWFuIGZvciBsZXhpY29ncmFwaGljIG9yZGVyaW5nXG4gKi9cbmZ1bmN0aW9uIGVuY29kZVU2NEJFKHZhbHVlOiBudW1iZXIpOiBCdWZmZXIge1xuICBjb25zdCBidWYgPSBCdWZmZXIuYWxsb2NVbnNhZmUoOCk7XG4gIGJ1Zi53cml0ZUJpZ1VJbnQ2NEJFKEJpZ0ludCh2YWx1ZSkpO1xuICByZXR1cm4gYnVmO1xufVxuXG4vKipcbiAqIERlY29kZSBiaWctZW5kaWFuIHU2NFxuICovXG5mdW5jdGlvbiBkZWNvZGVVNjRCRShidWY6IEJ1ZmZlcik6IG51bWJlciB7XG4gIHJldHVybiBOdW1iZXIoYnVmLnJlYWRCaWdVSW50NjRCRSgwKSk7XG59XG5cbi8qKlxuICogRW5jb2RlIGk2NCBhcyBiaWctZW5kaWFuIHByZXNlcnZpbmcgb3JkZXJcbiAqL1xuZnVuY3Rpb24gZW5jb2RlSTY0QkUodmFsdWU6IG51bWJlcik6IEJ1ZmZlciB7XG4gIC8vIE1hcCBpNjQgdG8gdTY0IGJ5IGFkZGluZyBvZmZzZXRcbiAgY29uc3QgbWFwcGVkID0gQmlnSW50KHZhbHVlKSArICgxbiA8PCA2M24pO1xuICBjb25zdCBidWYgPSBCdWZmZXIuYWxsb2NVbnNhZmUoOCk7XG4gIGJ1Zi53cml0ZUJpZ1VJbnQ2NEJFKG1hcHBlZCk7XG4gIHJldHVybiBidWY7XG59XG5cbi8qKlxuICogRGVjb2RlIGJpZy1lbmRpYW4gaTY0XG4gKi9cbmZ1bmN0aW9uIGRlY29kZUk2NEJFKGJ1ZjogQnVmZmVyKTogbnVtYmVyIHtcbiAgY29uc3QgbWFwcGVkID0gYnVmLnJlYWRCaWdVSW50NjRCRSgwKTtcbiAgcmV0dXJuIE51bWJlcihtYXBwZWQgLSAoMW4gPDwgNjNuKSk7XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFF1ZXVlIEtleVxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5leHBvcnQgaW50ZXJmYWNlIFF1ZXVlS2V5IHtcbiAgcXVldWVJZDogc3RyaW5nO1xuICBwcmlvcml0eTogbnVtYmVyO1xuICByZWFkeVRzOiBudW1iZXI7IC8vIHRpbWVzdGFtcCBpbiBtaWxsaXNlY29uZHNcbiAgc2VxdWVuY2U6IG51bWJlcjtcbiAgdGFza0lkOiBzdHJpbmc7XG59XG5cbi8qKlxuICogRW5jb2RlIHF1ZXVlIGtleSB0byBieXRlcyBmb3Igc3RvcmFnZVxuICovXG5mdW5jdGlvbiBlbmNvZGVRdWV1ZUtleShrZXk6IFF1ZXVlS2V5KTogQnVmZmVyIHtcbiAgY29uc3QgcGFydHMgPSBbXG4gICAgQnVmZmVyLmZyb20oJ3F1ZXVlLycpLFxuICAgIEJ1ZmZlci5mcm9tKGtleS5xdWV1ZUlkKSxcbiAgICBCdWZmZXIuZnJvbSgnLycpLFxuICAgIGVuY29kZUk2NEJFKGtleS5wcmlvcml0eSksXG4gICAgQnVmZmVyLmZyb20oJy8nKSxcbiAgICBlbmNvZGVVNjRCRShrZXkucmVhZHlUcyksXG4gICAgQnVmZmVyLmZyb20oJy8nKSxcbiAgICBlbmNvZGVVNjRCRShrZXkuc2VxdWVuY2UpLFxuICAgIEJ1ZmZlci5mcm9tKCcvJyksXG4gICAgQnVmZmVyLmZyb20oa2V5LnRhc2tJZCksXG4gIF07XG4gIFxuICByZXR1cm4gQnVmZmVyLmNvbmNhdChwYXJ0cyk7XG59XG5cbi8qKlxuICogRGVjb2RlIHF1ZXVlIGtleSBmcm9tIGJ5dGVzIHVzaW5nIHBvc2l0aW9uYWwgcGFyc2luZy5cbiAqIEtleSBmb3JtYXQ6IFwicXVldWUvXCIgKyBxdWV1ZUlkICsgXCIvXCIgKyBpNjRCRShwcmlvcml0eSkgKyBcIi9cIiArIHU2NEJFKHJlYWR5VHMpICsgXCIvXCIgKyB1NjRCRShzZXF1ZW5jZSkgKyBcIi9cIiArIHRhc2tJZFxuICogQmluYXJ5IGZpZWxkcyBtYXkgY29udGFpbiAweDJGICgnLycpLCBzbyBzcGxpdCgnLycpIGlzIE5PVCBzYWZlLlxuICovXG5mdW5jdGlvbiBkZWNvZGVRdWV1ZUtleShkYXRhOiBCdWZmZXIpOiBRdWV1ZUtleSB7XG4gIC8vIE11c3Qgc3RhcnQgd2l0aCBcInF1ZXVlL1wiXG4gIGNvbnN0IHByZWZpeCA9IEJ1ZmZlci5mcm9tKCdxdWV1ZS8nKTtcbiAgaWYgKGRhdGEubGVuZ3RoIDwgcHJlZml4Lmxlbmd0aCB8fCBkYXRhLnN1YmFycmF5KDAsIHByZWZpeC5sZW5ndGgpLmNvbXBhcmUocHJlZml4KSAhPT0gMCkge1xuICAgIHRocm93IG5ldyBTb2NoREJFcnJvcignSW52YWxpZCBxdWV1ZSBrZXkgZm9ybWF0OiBtaXNzaW5nIHF1ZXVlLyBwcmVmaXgnKTtcbiAgfVxuXG4gIGxldCBvZmZzZXQgPSBwcmVmaXgubGVuZ3RoO1xuXG4gIC8vIEZpbmQgcXVldWVJZDogc2NhbiBmb3IgdGhlICcvJyBiZWZvcmUgdGhlIDgtYnl0ZSBwcmlvcml0eSBmaWVsZFxuICAvLyBUaGUgcXVldWVJZCBlbmRzIGF0IHRoZSBmaXJzdCAnLycgZm9sbG93ZWQgYnkgZXhhY3RseSA4IGJ5dGVzICsgJy8nICsgOCBieXRlcyArICcvJyArIDggYnl0ZXMgKyAnLycgKyB0YXNrSWRcbiAgLy8gU3RyYXRlZ3k6IHdhbGsgZnJvbSB0aGUgZW5kLiBTdHJ1Y3R1cmUgYWZ0ZXIgcXVldWVJZDpcbiAgLy8gICBcIi9cIiArIDgtYnl0ZSBwcmlvcml0eSArIFwiL1wiICsgOC1ieXRlIHJlYWR5VHMgKyBcIi9cIiArIDgtYnl0ZSBzZXF1ZW5jZSArIFwiL1wiICsgdGFza0lkXG4gIC8vIFRvdGFsIGZpeGVkIG92ZXJoZWFkIGFmdGVyIHF1ZXVlSWQ6IDEgKyA4ICsgMSArIDggKyAxICsgOCArIDEgPSAyOCBieXRlcywgdGhlbiB0YXNrSWRcbiAgLy8gRmluZCBxdWV1ZUlkIGJ5IHNjYW5uaW5nIGZvciAnLycgc3VjaCB0aGF0IHJlbWFpbmluZyA9IDI4ICsgdGFza0lkLmxlblxuXG4gIC8vIFdlIGtub3c6IGFmdGVyIHF1ZXVlSWQsIGZpeGVkIHN0cnVjdHVyZSBpczpcbiAgLy8gICAvWzggYnl0ZXNdL1s4IGJ5dGVzXS9bOCBieXRlc10vW3Rhc2tJZF1cbiAgLy8gU28gc2NhbiBmb3J3YXJkIHRvIGZpbmQgdGhlIHNlcGFyYXRvci4gUXVldWVJZCBpcyBhIHBsYWluIHN0cmluZyAobm8gYmluYXJ5KSwgXG4gIC8vIHNvIGZpbmQgdGhlIGZpcnN0ICcvJyBhZnRlciBcInF1ZXVlL1wiIHRoYXQgaGFzIGF0IGxlYXN0IDI4IGJ5dGVzIHJlbWFpbmluZyBhZnRlciBpdC5cbiAgbGV0IHF1ZXVlSWRFbmQgPSAtMTtcbiAgZm9yIChsZXQgaSA9IG9mZnNldDsgaSA8IGRhdGEubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoZGF0YVtpXSA9PT0gMHgyRikgeyAvLyAnLydcbiAgICAgIGNvbnN0IHJlbWFpbmluZyA9IGRhdGEubGVuZ3RoIC0gaSAtIDE7IC8vIGJ5dGVzIGFmdGVyIHRoaXMgJy8nXG4gICAgICAvLyBOZWVkIDggKHByaW9yaXR5KSArIDEgKC8pICsgOCAocmVhZHlUcykgKyAxICgvKSArIDggKHNlcXVlbmNlKSArIDEgKC8pICsgYXQgbGVhc3QgMSAodGFza0lkKSA9IDI4XG4gICAgICBpZiAocmVtYWluaW5nID49IDI4KSB7XG4gICAgICAgIHF1ZXVlSWRFbmQgPSBpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAocXVldWVJZEVuZCA8IDApIHtcbiAgICB0aHJvdyBuZXcgU29jaERCRXJyb3IoJ0ludmFsaWQgcXVldWUga2V5IGZvcm1hdDogY2Fubm90IGZpbmQgcXVldWVJZCcpO1xuICB9XG5cbiAgY29uc3QgcXVldWVJZCA9IGRhdGEuc3ViYXJyYXkob2Zmc2V0LCBxdWV1ZUlkRW5kKS50b1N0cmluZygpO1xuICBvZmZzZXQgPSBxdWV1ZUlkRW5kICsgMTsgLy8gc2tpcCAnLydcblxuICAvLyBSZWFkIHByaW9yaXR5ICg4IGJ5dGVzLCBpNjQgYmlnLWVuZGlhbiBvcmRlci1wcmVzZXJ2aW5nKVxuICBpZiAob2Zmc2V0ICsgOCA+IGRhdGEubGVuZ3RoKSB0aHJvdyBuZXcgU29jaERCRXJyb3IoJ0ludmFsaWQgcXVldWUga2V5OiB0cnVuY2F0ZWQgcHJpb3JpdHknKTtcbiAgY29uc3QgcHJpb3JpdHkgPSBkZWNvZGVJNjRCRShkYXRhLnN1YmFycmF5KG9mZnNldCwgb2Zmc2V0ICsgOCkgYXMgQnVmZmVyKTtcbiAgb2Zmc2V0ICs9IDg7XG5cbiAgLy8gU2tpcCAnLydcbiAgaWYgKGRhdGFbb2Zmc2V0XSAhPT0gMHgyRikgdGhyb3cgbmV3IFNvY2hEQkVycm9yKCdJbnZhbGlkIHF1ZXVlIGtleTogZXhwZWN0ZWQgLyBhZnRlciBwcmlvcml0eScpO1xuICBvZmZzZXQgKz0gMTtcblxuICAvLyBSZWFkIHJlYWR5VHMgKDggYnl0ZXMsIHU2NCBiaWctZW5kaWFuKVxuICBpZiAob2Zmc2V0ICsgOCA+IGRhdGEubGVuZ3RoKSB0aHJvdyBuZXcgU29jaERCRXJyb3IoJ0ludmFsaWQgcXVldWUga2V5OiB0cnVuY2F0ZWQgcmVhZHlUcycpO1xuICBjb25zdCByZWFkeVRzID0gZGVjb2RlVTY0QkUoZGF0YS5zdWJhcnJheShvZmZzZXQsIG9mZnNldCArIDgpIGFzIEJ1ZmZlcik7XG4gIG9mZnNldCArPSA4O1xuXG4gIC8vIFNraXAgJy8nXG4gIGlmIChkYXRhW29mZnNldF0gIT09IDB4MkYpIHRocm93IG5ldyBTb2NoREJFcnJvcignSW52YWxpZCBxdWV1ZSBrZXk6IGV4cGVjdGVkIC8gYWZ0ZXIgcmVhZHlUcycpO1xuICBvZmZzZXQgKz0gMTtcblxuICAvLyBSZWFkIHNlcXVlbmNlICg4IGJ5dGVzLCB1NjQgYmlnLWVuZGlhbilcbiAgaWYgKG9mZnNldCArIDggPiBkYXRhLmxlbmd0aCkgdGhyb3cgbmV3IFNvY2hEQkVycm9yKCdJbnZhbGlkIHF1ZXVlIGtleTogdHJ1bmNhdGVkIHNlcXVlbmNlJyk7XG4gIGNvbnN0IHNlcXVlbmNlID0gZGVjb2RlVTY0QkUoZGF0YS5zdWJhcnJheShvZmZzZXQsIG9mZnNldCArIDgpIGFzIEJ1ZmZlcik7XG4gIG9mZnNldCArPSA4O1xuXG4gIC8vIFNraXAgJy8nXG4gIGlmIChkYXRhW29mZnNldF0gIT09IDB4MkYpIHRocm93IG5ldyBTb2NoREJFcnJvcignSW52YWxpZCBxdWV1ZSBrZXk6IGV4cGVjdGVkIC8gYWZ0ZXIgc2VxdWVuY2UnKTtcbiAgb2Zmc2V0ICs9IDE7XG5cbiAgLy8gUmVtYWluaW5nIGlzIHRhc2tJZFxuICBjb25zdCB0YXNrSWQgPSBkYXRhLnN1YmFycmF5KG9mZnNldCkudG9TdHJpbmcoKTtcblxuICByZXR1cm4geyBxdWV1ZUlkLCBwcmlvcml0eSwgcmVhZHlUcywgc2VxdWVuY2UsIHRhc2tJZCB9O1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBUYXNrXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGFzayB7XG4gIHRhc2tJZDogc3RyaW5nO1xuICBwcmlvcml0eTogbnVtYmVyO1xuICBwYXlsb2FkOiBCdWZmZXI7XG4gIHN0YXRlOiBUYXNrU3RhdGU7XG4gIGVucXVldWVkQXQ6IG51bWJlcjtcbiAgY2xhaW1lZEF0PzogbnVtYmVyO1xuICBjbGFpbWVkQnk/OiBzdHJpbmc7XG4gIGNvbXBsZXRlZEF0PzogbnVtYmVyO1xuICByZXRyaWVzOiBudW1iZXI7XG4gIG1ldGFkYXRhPzogUmVjb3JkPHN0cmluZywgYW55Pjtcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gUXVldWUgU3RhdGlzdGljc1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5leHBvcnQgaW50ZXJmYWNlIFF1ZXVlU3RhdHMge1xuICBwZW5kaW5nOiBudW1iZXI7XG4gIGNsYWltZWQ6IG51bWJlcjtcbiAgY29tcGxldGVkOiBudW1iZXI7XG4gIGRlYWRMZXR0ZXJlZDogbnVtYmVyO1xuICB0b3RhbEVucXVldWVkOiBudW1iZXI7XG4gIHRvdGFsRGVxdWV1ZWQ6IG51bWJlcjtcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gUHJpb3JpdHkgUXVldWVcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuZXhwb3J0IGNsYXNzIFByaW9yaXR5UXVldWUge1xuICBwcml2YXRlIHN0YXRpYyBzZXF1ZW5jZUNvdW50ZXIgPSAwO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgZGI6IGFueSxcbiAgICBwcml2YXRlIGNvbmZpZzogUXVldWVDb25maWdcbiAgKSB7XG4gICAgLy8gU2V0IGRlZmF1bHRzXG4gICAgdGhpcy5jb25maWcudmlzaWJpbGl0eVRpbWVvdXQgPSBjb25maWcudmlzaWJpbGl0eVRpbWVvdXQgfHwgMzAwMDA7XG4gICAgdGhpcy5jb25maWcubWF4UmV0cmllcyA9IGNvbmZpZy5tYXhSZXRyaWVzIHx8IDM7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIHF1ZXVlIGZyb20gZW1iZWRkZWQgZGF0YWJhc2VcbiAgICovXG4gIHN0YXRpYyBmcm9tRGF0YWJhc2UoZGI6IGFueSwgbmFtZTogc3RyaW5nLCBjb25maWc/OiBQYXJ0aWFsPFF1ZXVlQ29uZmlnPik6IFByaW9yaXR5UXVldWUge1xuICAgIGNvbnN0IGZ1bGxDb25maWc6IFF1ZXVlQ29uZmlnID0ge1xuICAgICAgbmFtZSxcbiAgICAgIC4uLmNvbmZpZyxcbiAgICB9O1xuICAgIHJldHVybiBuZXcgUHJpb3JpdHlRdWV1ZShkYiwgZnVsbENvbmZpZyk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIHF1ZXVlIGZyb20gZ1JQQyBjbGllbnRcbiAgICovXG4gIHN0YXRpYyBmcm9tQ2xpZW50KGNsaWVudDogYW55LCBuYW1lOiBzdHJpbmcsIGNvbmZpZz86IFBhcnRpYWw8UXVldWVDb25maWc+KTogUHJpb3JpdHlRdWV1ZSB7XG4gICAgY29uc3QgZnVsbENvbmZpZzogUXVldWVDb25maWcgPSB7XG4gICAgICBuYW1lLFxuICAgICAgLi4uY29uZmlnLFxuICAgIH07XG4gICAgcmV0dXJuIG5ldyBQcmlvcml0eVF1ZXVlKGNsaWVudCwgZnVsbENvbmZpZyk7XG4gIH1cblxuICAvKipcbiAgICogRW5xdWV1ZSBhIHRhc2sgd2l0aCBwcmlvcml0eVxuICAgKiBMb3dlciBwcmlvcml0eSBudW1iZXIgPSBoaWdoZXIgdXJnZW5jeVxuICAgKi9cbiAgYXN5bmMgZW5xdWV1ZShcbiAgICBwcmlvcml0eTogbnVtYmVyLFxuICAgIHBheWxvYWQ6IEJ1ZmZlcixcbiAgICBtZXRhZGF0YT86IFJlY29yZDxzdHJpbmcsIGFueT5cbiAgKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBjb25zdCB0YXNrSWQgPSB0aGlzLmdlbmVyYXRlVGFza0lkKCk7XG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICBcbiAgICBjb25zdCBrZXk6IFF1ZXVlS2V5ID0ge1xuICAgICAgcXVldWVJZDogdGhpcy5jb25maWcubmFtZSxcbiAgICAgIHByaW9yaXR5LFxuICAgICAgcmVhZHlUczogbm93LFxuICAgICAgc2VxdWVuY2U6IFByaW9yaXR5UXVldWUuc2VxdWVuY2VDb3VudGVyKyssXG4gICAgICB0YXNrSWQsXG4gICAgfTtcblxuICAgIGNvbnN0IHRhc2s6IFRhc2sgPSB7XG4gICAgICB0YXNrSWQsXG4gICAgICBwcmlvcml0eSxcbiAgICAgIHBheWxvYWQsXG4gICAgICBzdGF0ZTogVGFza1N0YXRlLlBFTkRJTkcsXG4gICAgICBlbnF1ZXVlZEF0OiBub3csXG4gICAgICByZXRyaWVzOiAwLFxuICAgICAgbWV0YWRhdGEsXG4gICAgfTtcblxuICAgIGNvbnN0IGtleUJ1ZiA9IGVuY29kZVF1ZXVlS2V5KGtleSk7XG4gICAgY29uc3QgdmFsdWVCdWYgPSBCdWZmZXIuZnJvbShKU09OLnN0cmluZ2lmeSh0YXNrKSk7XG4gICAgXG4gICAgYXdhaXQgdGhpcy5kYi5wdXQoa2V5QnVmLCB2YWx1ZUJ1Zik7XG4gICAgXG4gICAgLy8gVXBkYXRlIHN0YXRzXG4gICAgYXdhaXQgdGhpcy5pbmNyZW1lbnRTdGF0KCd0b3RhbEVucXVldWVkJyk7XG4gICAgYXdhaXQgdGhpcy5pbmNyZW1lbnRTdGF0KCdwZW5kaW5nJyk7XG4gICAgXG4gICAgcmV0dXJuIHRhc2tJZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXF1ZXVlIHRoZSBoaWdoZXN0IHByaW9yaXR5IHRhc2tcbiAgICogUmV0dXJucyBudWxsIGlmIG5vIHRhc2tzIGF2YWlsYWJsZVxuICAgKi9cbiAgYXN5bmMgZGVxdWV1ZSh3b3JrZXJJZDogc3RyaW5nKTogUHJvbWlzZTxUYXNrIHwgbnVsbD4ge1xuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgY29uc3QgcHJlZml4ID0gQnVmZmVyLmZyb20oYHF1ZXVlLyR7dGhpcy5jb25maWcubmFtZX0vYCk7XG5cbiAgICAvLyBTY2FuIGFsbCB0YXNrcyBpbiBwcmlvcml0eSBvcmRlciAoYmluYXJ5IHNvcnQgPSBwcmlvcml0eSBvcmRlciBkdWUgdG8gYmlnLWVuZGlhbiBlbmNvZGluZylcbiAgICB0cnkge1xuICAgICAgZm9yIGF3YWl0IChjb25zdCBba2V5QnVmLCB2YWx1ZUJ1Zl0gb2YgdGhpcy5kYi5zY2FuUHJlZml4KHByZWZpeCkpIHtcbiAgICAgICAgY29uc3QgdGFzazogVGFzayA9IEpTT04ucGFyc2UodmFsdWVCdWYudG9TdHJpbmcoKSk7XG5cbiAgICAgICAgLy8gU2tpcCBub24tcGVuZGluZyB0YXNrc1xuICAgICAgICBpZiAodGFzay5zdGF0ZSAhPT0gVGFza1N0YXRlLlBFTkRJTkcpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIERlY29kZSBrZXkgdG8gY2hlY2sgcmVhZHlUc1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHF1ZXVlS2V5ID0gZGVjb2RlUXVldWVLZXkoa2V5QnVmKTtcbiAgICAgICAgICBpZiAocXVldWVLZXkucmVhZHlUcyA+IG5vdykge1xuICAgICAgICAgICAgY29udGludWU7IC8vIE5vdCByZWFkeSB5ZXRcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgIGNvbnRpbnVlOyAvLyBTa2lwIG1hbGZvcm1lZCBrZXlzXG4gICAgICAgIH1cblxuICAgICAgICAvLyBDbGFpbSB0aGlzIHRhc2sgYXRvbWljYWxseVxuICAgICAgICB0YXNrLnN0YXRlID0gVGFza1N0YXRlLkNMQUlNRUQ7XG4gICAgICAgIHRhc2suY2xhaW1lZEF0ID0gbm93O1xuICAgICAgICB0YXNrLmNsYWltZWRCeSA9IHdvcmtlcklkO1xuXG4gICAgICAgIC8vIFJlLXNlcmlhbGl6ZSB0aGUgcGF5bG9hZCBjb3JyZWN0bHkgKGl0J3Mgc3RvcmVkIGFzIGJhc2U2NCBpbiBKU09OKVxuICAgICAgICBjb25zdCB1cGRhdGVkVmFsdWUgPSBCdWZmZXIuZnJvbShKU09OLnN0cmluZ2lmeSh0YXNrKSk7XG4gICAgICAgIGF3YWl0IHRoaXMuZGIucHV0KGtleUJ1ZiwgdXBkYXRlZFZhbHVlKTtcblxuICAgICAgICAvLyBVcGRhdGUgc3RhdHNcbiAgICAgICAgYXdhaXQgdGhpcy5kZWNyZW1lbnRTdGF0KCdwZW5kaW5nJyk7XG4gICAgICAgIGF3YWl0IHRoaXMuaW5jcmVtZW50U3RhdCgnY2xhaW1lZCcpO1xuICAgICAgICBhd2FpdCB0aGlzLmluY3JlbWVudFN0YXQoJ3RvdGFsRGVxdWV1ZWQnKTtcblxuICAgICAgICByZXR1cm4gdGFzaztcbiAgICAgIH1cbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIElmIHNjYW4gaXMgbm90IGF2YWlsYWJsZSB2aWEgc2NhblByZWZpeCwgcmV0dXJuIG51bGxcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBBY2tub3dsZWRnZSB0YXNrIGNvbXBsZXRpb25cbiAgICovXG4gIGFzeW5jIGFjayh0YXNrSWQ6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIC8vIEZpbmQgYW5kIHVwZGF0ZSB0YXNrIHN0YXRlXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5nZXRUYXNrKHRhc2tJZCk7XG4gICAgaWYgKCFyZXN1bHQpIHtcbiAgICAgIHRocm93IG5ldyBTb2NoREJFcnJvcihgVGFzayBub3QgZm91bmQ6ICR7dGFza0lkfWApO1xuICAgIH1cblxuICAgIGNvbnN0IHsgdGFzayB9ID0gcmVzdWx0O1xuXG4gICAgaWYgKHRhc2suc3RhdGUgIT09IFRhc2tTdGF0ZS5DTEFJTUVEKSB7XG4gICAgICB0aHJvdyBuZXcgU29jaERCRXJyb3IoYFRhc2sgbm90IGluIGNsYWltZWQgc3RhdGU6ICR7dGFza0lkfWApO1xuICAgIH1cblxuICAgIC8vIFVwZGF0ZSB0YXNrIHN0YXRlXG4gICAgdGFzay5zdGF0ZSA9IFRhc2tTdGF0ZS5DT01QTEVURUQ7XG4gICAgdGFzay5jb21wbGV0ZWRBdCA9IERhdGUubm93KCk7XG4gICAgXG4gICAgYXdhaXQgdGhpcy51cGRhdGVUYXNrKHRhc2spO1xuICAgIFxuICAgIC8vIFVwZGF0ZSBzdGF0c1xuICAgIGF3YWl0IHRoaXMuZGVjcmVtZW50U3RhdCgnY2xhaW1lZCcpO1xuICAgIGF3YWl0IHRoaXMuaW5jcmVtZW50U3RhdCgnY29tcGxldGVkJyk7XG4gIH1cblxuICAvKipcbiAgICogTmVnYXRpdmUgYWNrbm93bGVkZ2UgLSByZXR1cm4gdGFzayB0byBxdWV1ZVxuICAgKi9cbiAgYXN5bmMgbmFjayh0YXNrSWQ6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuZ2V0VGFzayh0YXNrSWQpO1xuICAgIGlmICghcmVzdWx0KSB7XG4gICAgICB0aHJvdyBuZXcgU29jaERCRXJyb3IoYFRhc2sgbm90IGZvdW5kOiAke3Rhc2tJZH1gKTtcbiAgICB9XG5cbiAgICBjb25zdCB7IHRhc2sgfSA9IHJlc3VsdDtcbiAgICB0YXNrLnJldHJpZXMrKztcbiAgICBcbiAgICBpZiAodGFzay5yZXRyaWVzID49ICh0aGlzLmNvbmZpZy5tYXhSZXRyaWVzIHx8IDMpKSB7XG4gICAgICAvLyBNb3ZlIHRvIGRlYWQgbGV0dGVyIHF1ZXVlXG4gICAgICB0YXNrLnN0YXRlID0gVGFza1N0YXRlLkRFQURfTEVUVEVSRUQ7XG4gICAgICBhd2FpdCB0aGlzLnVwZGF0ZVRhc2sodGFzayk7XG4gICAgICBhd2FpdCB0aGlzLmRlY3JlbWVudFN0YXQoJ2NsYWltZWQnKTtcbiAgICAgIGF3YWl0IHRoaXMuaW5jcmVtZW50U3RhdCgnZGVhZExldHRlcmVkJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFJldHVybiB0byBwZW5kaW5nXG4gICAgICB0YXNrLnN0YXRlID0gVGFza1N0YXRlLlBFTkRJTkc7XG4gICAgICB0YXNrLmNsYWltZWRBdCA9IHVuZGVmaW5lZDtcbiAgICAgIHRhc2suY2xhaW1lZEJ5ID0gdW5kZWZpbmVkO1xuICAgICAgYXdhaXQgdGhpcy51cGRhdGVUYXNrKHRhc2spO1xuICAgICAgYXdhaXQgdGhpcy5kZWNyZW1lbnRTdGF0KCdjbGFpbWVkJyk7XG4gICAgICBhd2FpdCB0aGlzLmluY3JlbWVudFN0YXQoJ3BlbmRpbmcnKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0IHF1ZXVlIHN0YXRpc3RpY3NcbiAgICovXG4gIGFzeW5jIHN0YXRzKCk6IFByb21pc2U8UXVldWVTdGF0cz4ge1xuICAgIHJldHVybiB7XG4gICAgICBwZW5kaW5nOiBhd2FpdCB0aGlzLmdldFN0YXQoJ3BlbmRpbmcnKSxcbiAgICAgIGNsYWltZWQ6IGF3YWl0IHRoaXMuZ2V0U3RhdCgnY2xhaW1lZCcpLFxuICAgICAgY29tcGxldGVkOiBhd2FpdCB0aGlzLmdldFN0YXQoJ2NvbXBsZXRlZCcpLFxuICAgICAgZGVhZExldHRlcmVkOiBhd2FpdCB0aGlzLmdldFN0YXQoJ2RlYWRMZXR0ZXJlZCcpLFxuICAgICAgdG90YWxFbnF1ZXVlZDogYXdhaXQgdGhpcy5nZXRTdGF0KCd0b3RhbEVucXVldWVkJyksXG4gICAgICB0b3RhbERlcXVldWVkOiBhd2FpdCB0aGlzLmdldFN0YXQoJ3RvdGFsRGVxdWV1ZWQnKSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFB1cmdlIGNvbXBsZXRlZCB0YXNrc1xuICAgKi9cbiAgYXN5bmMgcHVyZ2UoKTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICBjb25zdCBwcmVmaXggPSBCdWZmZXIuZnJvbShgcXVldWUvJHt0aGlzLmNvbmZpZy5uYW1lfS9gKTtcbiAgICBsZXQgcHVyZ2VkID0gMDtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCB0b0RlbGV0ZTogQnVmZmVyW10gPSBbXTtcbiAgICAgIGZvciBhd2FpdCAoY29uc3QgW2tleUJ1ZiwgdmFsdWVCdWZdIG9mIHRoaXMuZGIuc2NhblByZWZpeChwcmVmaXgpKSB7XG4gICAgICAgIGNvbnN0IHRhc2s6IFRhc2sgPSBKU09OLnBhcnNlKHZhbHVlQnVmLnRvU3RyaW5nKCkpO1xuICAgICAgICBpZiAodGFzay5zdGF0ZSA9PT0gVGFza1N0YXRlLkNPTVBMRVRFRCB8fCB0YXNrLnN0YXRlID09PSBUYXNrU3RhdGUuREVBRF9MRVRURVJFRCkge1xuICAgICAgICAgIHRvRGVsZXRlLnB1c2goa2V5QnVmKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBmb3IgKGNvbnN0IGtleSBvZiB0b0RlbGV0ZSkge1xuICAgICAgICBhd2FpdCB0aGlzLmRiLmRlbGV0ZShrZXkpO1xuICAgICAgICBwdXJnZWQrKztcbiAgICAgIH1cbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIFJldHVybiBjb3VudCBzbyBmYXJcbiAgICB9XG5cbiAgICByZXR1cm4gcHVyZ2VkO1xuICB9XG5cbiAgLy8gSGVscGVyIG1ldGhvZHNcbiAgcHJpdmF0ZSBnZW5lcmF0ZVRhc2tJZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiBgJHtEYXRlLm5vdygpfS0ke01hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cigyLCA5KX1gO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBnZXRUYXNrKHRhc2tJZDogc3RyaW5nKTogUHJvbWlzZTx7IHRhc2s6IFRhc2s7IGtleUJ1ZjogQnVmZmVyIH0gfCBudWxsPiB7XG4gICAgY29uc3QgcHJlZml4ID0gQnVmZmVyLmZyb20oYHF1ZXVlLyR7dGhpcy5jb25maWcubmFtZX0vYCk7XG5cbiAgICB0cnkge1xuICAgICAgZm9yIGF3YWl0IChjb25zdCBba2V5QnVmLCB2YWx1ZUJ1Zl0gb2YgdGhpcy5kYi5zY2FuUHJlZml4KHByZWZpeCkpIHtcbiAgICAgICAgY29uc3QgdGFzazogVGFzayA9IEpTT04ucGFyc2UodmFsdWVCdWYudG9TdHJpbmcoKSk7XG4gICAgICAgIGlmICh0YXNrLnRhc2tJZCA9PT0gdGFza0lkKSB7XG4gICAgICAgICAgcmV0dXJuIHsgdGFzaywga2V5QnVmIH07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIFNjYW4gbm90IGF2YWlsYWJsZVxuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyB1cGRhdGVUYXNrKHRhc2s6IFRhc2spOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmdldFRhc2sodGFzay50YXNrSWQpO1xuICAgIGlmIChyZXN1bHQpIHtcbiAgICAgIGNvbnN0IHZhbHVlQnVmID0gQnVmZmVyLmZyb20oSlNPTi5zdHJpbmdpZnkodGFzaykpO1xuICAgICAgYXdhaXQgdGhpcy5kYi5wdXQocmVzdWx0LmtleUJ1ZiwgdmFsdWVCdWYpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZ2V0U3RhdChuYW1lOiBzdHJpbmcpOiBQcm9taXNlPG51bWJlcj4ge1xuICAgIGNvbnN0IGtleSA9IGBfcXVldWVfc3RhdHMvJHt0aGlzLmNvbmZpZy5uYW1lfS8ke25hbWV9YDtcbiAgICBjb25zdCB2YWx1ZSA9IGF3YWl0IHRoaXMuZGIuZ2V0KEJ1ZmZlci5mcm9tKGtleSkpO1xuICAgIHJldHVybiB2YWx1ZSA/IHBhcnNlSW50KHZhbHVlLnRvU3RyaW5nKCkpIDogMDtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgaW5jcmVtZW50U3RhdChuYW1lOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBjdXJyZW50ID0gYXdhaXQgdGhpcy5nZXRTdGF0KG5hbWUpO1xuICAgIGNvbnN0IGtleSA9IGBfcXVldWVfc3RhdHMvJHt0aGlzLmNvbmZpZy5uYW1lfS8ke25hbWV9YDtcbiAgICBhd2FpdCB0aGlzLmRiLnB1dChCdWZmZXIuZnJvbShrZXkpLCBCdWZmZXIuZnJvbSgoY3VycmVudCArIDEpLnRvU3RyaW5nKCkpKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZGVjcmVtZW50U3RhdChuYW1lOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBjdXJyZW50ID0gYXdhaXQgdGhpcy5nZXRTdGF0KG5hbWUpO1xuICAgIGNvbnN0IGtleSA9IGBfcXVldWVfc3RhdHMvJHt0aGlzLmNvbmZpZy5uYW1lfS8ke25hbWV9YDtcbiAgICBhd2FpdCB0aGlzLmRiLnB1dChCdWZmZXIuZnJvbShrZXkpLCBCdWZmZXIuZnJvbShNYXRoLm1heCgwLCBjdXJyZW50IC0gMSkudG9TdHJpbmcoKSkpO1xuICB9XG59XG5cbi8qKlxuICogQ3JlYXRlIGEgcXVldWUgaW5zdGFuY2VcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVF1ZXVlKFxuICBkYjogYW55LFxuICBuYW1lOiBzdHJpbmcsXG4gIGNvbmZpZz86IFBhcnRpYWw8UXVldWVDb25maWc+XG4pOiBQcmlvcml0eVF1ZXVlIHtcbiAgcmV0dXJuIFByaW9yaXR5UXVldWUuZnJvbURhdGFiYXNlKGRiLCBuYW1lLCBjb25maWcpO1xufVxuIl19
|
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
*/
|
|
7
7
|
import { NativeBindings } from './ffi/bindings';
|
|
8
8
|
import { EmbeddedTransaction } from './transaction';
|
|
9
|
+
import { Namespace, NamespaceConfig } from '../namespace';
|
|
9
10
|
export interface EmbeddedDatabaseConfig {
|
|
10
11
|
walEnabled?: boolean;
|
|
11
12
|
syncMode?: 'full' | 'normal' | 'off';
|
|
@@ -166,5 +167,73 @@ export declare class EmbeddedDatabase {
|
|
|
166
167
|
* @internal
|
|
167
168
|
*/
|
|
168
169
|
getBindings(): NativeBindings;
|
|
170
|
+
/**
|
|
171
|
+
* Create a new namespace
|
|
172
|
+
*/
|
|
173
|
+
createNamespace(name: string, config?: Partial<NamespaceConfig>): Promise<Namespace>;
|
|
174
|
+
/**
|
|
175
|
+
* Get an existing namespace
|
|
176
|
+
*/
|
|
177
|
+
namespace(name: string): Promise<Namespace>;
|
|
178
|
+
/**
|
|
179
|
+
* Get or create a namespace
|
|
180
|
+
*/
|
|
181
|
+
getOrCreateNamespace(name: string, config?: Partial<NamespaceConfig>): Promise<Namespace>;
|
|
182
|
+
/**
|
|
183
|
+
* Delete a namespace and all its data
|
|
184
|
+
*/
|
|
185
|
+
deleteNamespace(name: string): Promise<boolean>;
|
|
186
|
+
/**
|
|
187
|
+
* List all namespace names
|
|
188
|
+
*/
|
|
189
|
+
listNamespaces(): Promise<string[]>;
|
|
190
|
+
/**
|
|
191
|
+
* Add a node to the graph overlay
|
|
192
|
+
*/
|
|
193
|
+
addNode(namespace: string, nodeId: string, nodeType: string, properties?: Record<string, string>): Promise<void>;
|
|
194
|
+
/**
|
|
195
|
+
* Add an edge between nodes
|
|
196
|
+
*/
|
|
197
|
+
addEdge(namespace: string, fromId: string, edgeType: string, toId: string, properties?: Record<string, string>): Promise<void>;
|
|
198
|
+
/**
|
|
199
|
+
* Traverse the graph from a starting node
|
|
200
|
+
*/
|
|
201
|
+
traverse(namespace: string, startNode: string, maxDepth?: number, order?: 'bfs' | 'dfs'): Promise<{
|
|
202
|
+
nodes: any[];
|
|
203
|
+
edges: any[];
|
|
204
|
+
}>;
|
|
205
|
+
/**
|
|
206
|
+
* Put a value in the semantic cache
|
|
207
|
+
*/
|
|
208
|
+
cachePut(cacheName: string, key: string, value: string, embedding: number[], ttlSeconds?: number): Promise<void>;
|
|
209
|
+
/**
|
|
210
|
+
* Get a value from the semantic cache by embedding similarity
|
|
211
|
+
*/
|
|
212
|
+
cacheGet(cacheName: string, queryEmbedding: number[], threshold?: number): Promise<string | null>;
|
|
213
|
+
/**
|
|
214
|
+
* Delete a cache entry
|
|
215
|
+
*/
|
|
216
|
+
cacheDelete(cacheName: string, key: string): Promise<void>;
|
|
217
|
+
/**
|
|
218
|
+
* Clear all entries in a semantic cache
|
|
219
|
+
*/
|
|
220
|
+
cacheClear(cacheName: string): Promise<number>;
|
|
221
|
+
/**
|
|
222
|
+
* Convert records to TOON format
|
|
223
|
+
*/
|
|
224
|
+
static toToon(tableName: string, records: Array<Record<string, any>>, fields?: string[]): string;
|
|
225
|
+
/**
|
|
226
|
+
* Convert records to JSON format
|
|
227
|
+
*/
|
|
228
|
+
static toJson(tableName: string, records: Array<Record<string, any>>, fields?: string[], compact?: boolean): string;
|
|
229
|
+
/**
|
|
230
|
+
* Parse JSON format
|
|
231
|
+
*/
|
|
232
|
+
static fromJson(jsonStr: string): {
|
|
233
|
+
table: string;
|
|
234
|
+
fields: string[];
|
|
235
|
+
records: Array<Record<string, any>>;
|
|
236
|
+
};
|
|
237
|
+
private static cosineSimilarity;
|
|
169
238
|
}
|
|
170
239
|
//# sourceMappingURL=database.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"database.d.ts","sourceRoot":"","sources":["../../../src/embedded/database.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"database.d.ts","sourceRoot":"","sources":["../../../src/embedded/database.ts"],"names":[],"mappings":"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"}
|
package/dist/types/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* SochDB Node.js SDK v0.5.
|
|
2
|
+
* SochDB Node.js SDK v0.5.3
|
|
3
3
|
*
|
|
4
4
|
* Dual-mode architecture: Embedded (FFI) + Server (gRPC/IPC)
|
|
5
5
|
*
|
|
@@ -49,7 +49,7 @@
|
|
|
49
49
|
* await client.putKv('key', Buffer.from('value'));
|
|
50
50
|
* ```
|
|
51
51
|
*/
|
|
52
|
-
export declare const VERSION = "0.5.
|
|
52
|
+
export declare const VERSION = "0.5.3";
|
|
53
53
|
export { EmbeddedDatabase, EmbeddedDatabaseConfig } from './embedded';
|
|
54
54
|
export { EmbeddedTransaction } from './embedded';
|
|
55
55
|
export { HnswIndex, HnswConfig, HnswBindings } from './embedded';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"namespace.d.ts","sourceRoot":"","sources":["../../src/namespace.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"namespace.d.ts","sourceRoot":"","sources":["../../src/namespace.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"queue.d.ts","sourceRoot":"","sources":["../../src/queue.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAQH,oBAAY,SAAS;IACnB,OAAO,YAAY;IACnB,OAAO,YAAY;IACnB,SAAS,cAAc;IACvB,aAAa,kBAAkB;CAChC;AAMD,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AA6CD,MAAM,WAAW,QAAQ;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;CAChB;
|
|
1
|
+
{"version":3,"file":"queue.d.ts","sourceRoot":"","sources":["../../src/queue.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAQH,oBAAY,SAAS;IACnB,OAAO,YAAY;IACnB,OAAO,YAAY;IACnB,SAAS,cAAc;IACvB,aAAa,kBAAkB;CAChC;AAMD,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AA6CD,MAAM,WAAW,QAAQ;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;CAChB;AAuGD,MAAM,WAAW,IAAI;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,SAAS,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAChC;AAMD,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;CACvB;AAMD,qBAAa,aAAa;IAItB,OAAO,CAAC,EAAE;IACV,OAAO,CAAC,MAAM;IAJhB,OAAO,CAAC,MAAM,CAAC,eAAe,CAAK;gBAGzB,EAAE,EAAE,GAAG,EACP,MAAM,EAAE,WAAW;IAO7B;;OAEG;IACH,MAAM,CAAC,YAAY,CAAC,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,GAAG,aAAa;IAQxF;;OAEG;IACH,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,GAAG,aAAa;IAQ1F;;;OAGG;IACG,OAAO,CACX,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAC7B,OAAO,CAAC,MAAM,CAAC;IAkClB;;;OAGG;IACG,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;IA+CrD;;OAEG;IACG,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAwBxC;;OAEG;IACG,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA0BzC;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,UAAU,CAAC;IAWlC;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC;IAyB9B,OAAO,CAAC,cAAc;YAIR,OAAO;YAiBP,UAAU;YAQV,OAAO;YAMP,aAAa;YAMb,aAAa;CAK5B;AAED;;GAEG;AACH,wBAAgB,WAAW,CACzB,EAAE,EAAE,GAAG,EACP,IAAI,EAAE,MAAM,EACZ,MAAM,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,GAC5B,aAAa,CAEf"}
|
package/package.json
CHANGED