@ultipa-graph/ultipa-driver 6.2.1 → 6.2.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/dist/client.d.ts +54 -5
- package/dist/client.js +143 -8
- package/dist/index.d.ts +2 -2
- package/dist/index.js +1 -1
- package/dist/proto/gqldb.proto +83 -32
- package/dist/response.d.ts +31 -7
- package/dist/response.js +22 -2
- package/dist/services/converters.js +4 -2
- package/dist/services/data-service.d.ts +1 -9
- package/dist/services/data-service.js +6 -37
- package/dist/services/query-service.js +15 -4
- package/dist/types/typed_value.js +7 -7
- package/package.json +1 -1
package/dist/response.js
CHANGED
|
@@ -474,6 +474,9 @@ class Response {
|
|
|
474
474
|
warnings;
|
|
475
475
|
rowsAffected;
|
|
476
476
|
currentGraph;
|
|
477
|
+
timeCostNs;
|
|
478
|
+
diskCostNs;
|
|
479
|
+
computeCostNs;
|
|
477
480
|
constructor(columns, rows, rowCount, hasMore, warnings, rowsAffected = 0,
|
|
478
481
|
/**
|
|
479
482
|
* Session's current graph after this RPC executed, as authoritatively
|
|
@@ -483,7 +486,21 @@ class Response {
|
|
|
483
486
|
* which case the driver falls back to its USE GRAPH text-parsing path
|
|
484
487
|
* internally to keep the local default-graph cache in sync.
|
|
485
488
|
*/
|
|
486
|
-
currentGraph = ''
|
|
489
|
+
currentGraph = '',
|
|
490
|
+
/**
|
|
491
|
+
* Server-side timing (nanoseconds), read from the engine's ResultSet.
|
|
492
|
+
* Network / client-side time is NOT included.
|
|
493
|
+
* - timeCostNs: total wall-clock parse + plan + execute
|
|
494
|
+
* - diskCostNs: subset spent in storage / LSM layer
|
|
495
|
+
* - computeCostNs: subset spent in the in-memory compute engine
|
|
496
|
+
* (k-hop, shortest path, algo.* via topology
|
|
497
|
+
* accelerator); 0 when compute is disabled or
|
|
498
|
+
* the query path did not invoke the accelerator.
|
|
499
|
+
* Old servers omit these proto3 fields → treat 0 as "not reported",
|
|
500
|
+
* not "took zero time". Streaming queries populate only on the
|
|
501
|
+
* final batch (hasMore=false), matching currentGraph / rowsAffected.
|
|
502
|
+
*/
|
|
503
|
+
timeCostNs = 0, diskCostNs = 0, computeCostNs = 0) {
|
|
487
504
|
this.columns = columns;
|
|
488
505
|
this.rows = rows;
|
|
489
506
|
this.rowCount = rowCount;
|
|
@@ -491,6 +508,9 @@ class Response {
|
|
|
491
508
|
this.warnings = warnings;
|
|
492
509
|
this.rowsAffected = rowsAffected;
|
|
493
510
|
this.currentGraph = currentGraph;
|
|
511
|
+
this.timeCostNs = timeCostNs;
|
|
512
|
+
this.diskCostNs = diskCostNs;
|
|
513
|
+
this.computeCostNs = computeCostNs;
|
|
494
514
|
// Push column names into each Row so name-based access (row.getByName)
|
|
495
515
|
// works without going through Response.getByName(row, ...). Matches
|
|
496
516
|
// Python's Response.__post_init__ behavior.
|
|
@@ -844,4 +864,4 @@ class Response {
|
|
|
844
864
|
}
|
|
845
865
|
}
|
|
846
866
|
exports.Response = Response;
|
|
847
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzcG9uc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvcmVzcG9uc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOztHQUVHOzs7QUFFSCxtQ0FBOEk7QUFFOUk7Ozs7Ozs7Ozs7R0FVRztBQUNILE1BQWEsR0FBRztJQVNJO0lBQ0E7SUFUbEI7Ozs7T0FJRztJQUNILFdBQVcsR0FBc0IsRUFBRSxDQUFDO0lBRXBDLFlBQ2tCLE1BQWEsRUFDYixRQUF3QixFQUFFO1FBRDFCLFdBQU0sR0FBTixNQUFNLENBQU87UUFDYixVQUFLLEdBQUwsS0FBSyxDQUFxQjtJQUN6QyxDQUFDO0lBRUosOENBQThDO0lBQzlDLEdBQUcsQ0FBQyxLQUFhO1FBQ2YsSUFBSSxLQUFLLEdBQUcsQ0FBQyxJQUFJLEtBQUssSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQzdDLE1BQU0sSUFBSSxLQUFLLENBQUMsOEJBQThCLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDekQsQ0FBQztRQUNELE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDakMsOENBQThDO1FBQzlDLElBQUksS0FBSyxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxNQUFNLElBQUksS0FBSyxJQUFJLE1BQU0sSUFBSSxLQUFLLElBQUksUUFBUSxJQUFJLEtBQUssRUFBRSxDQUFDO1lBQ2xHLE9BQU8sSUFBQSxzQkFBYyxFQUFDLEtBQW1CLENBQUMsQ0FBQztRQUM3QyxDQUFDO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsU0FBUyxDQUFDLElBQVk7UUFDcEIsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNsQyxNQUFNLElBQUksS0FBSyxDQUFDLGtEQUFrRCxJQUFJLFdBQVcsQ0FBQyxDQUFDO1FBQ3JGLENBQUM7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LG9CQUFZLENBQUMsSUFBSSxDQUFDO1FBQ3JELElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7WUFBRSxPQUFPLG9CQUFZLENBQUMsSUFBSSxDQUFDO1FBQ25ELElBQUksT0FBTyxLQUFLLEtBQUssUUFBUTtZQUFFLE9BQU8sb0JBQVksQ0FBQyxHQUFHLENBQUM7UUFDdkQsT0FBTyxvQkFBWSxDQUFDLEtBQUssQ0FBQztJQUM1QixDQUFDO0NBQ0Y7QUF4WUQsNEJBd1lDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBSZXNwb25zZSBoYW5kbGluZyBmb3IgR1FMREIgTm9kZS5qcyBkcml2ZXIuXG4gKi9cblxuaW1wb3J0IHsgVHlwZWRWYWx1ZSwgdHlwZWRWYWx1ZVRvSlMsIFByb3BlcnR5VHlwZSwgU2NoZW1hLCBQcm9wZXJ0eURlZiwgVGFibGUsIEhlYWRlciwgQXR0ciwgR3FsZGJOb2RlLCBHcWxkYkVkZ2UsIEdxbGRiUGF0aCB9IGZyb20gJy4vdHlwZXMnO1xuXG4vKipcbiAqIFJlcHJlc2VudHMgYSBzaW5nbGUgcm93IGluIHRoZSBxdWVyeSByZXN1bHQuXG4gKlxuICogUG9zaXRpb25hbCBhY2Nlc3MgdmlhIGByb3cuZ2V0KGkpYCBpcyBhbHdheXMgYXZhaWxhYmxlLiBOYW1lLWJhc2VkXG4gKiBhY2Nlc3MgdmlhIGByb3cuZ2V0QnlOYW1lKG5hbWUpYCAvIGByb3cuaGFzKG5hbWUpYCByZXF1aXJlcyB0aGUgcGFyZW50XG4gKiBSZXNwb25zZSB0byBoYXZlIHBvcHVsYXRlZCB7QGxpbmsgUm93LmNvbHVtbk5hbWVzfSAoUmVzcG9uc2Unc1xuICogY29uc3RydWN0b3IgZG9lcyB0aGlzIGF1dG9tYXRpY2FsbHkpLlxuICpcbiAqIFRoZSByb3cgaXMgaXRlcmFibGUg4oCUIGBmb3IgKGNvbnN0IHYgb2Ygcm93KSAuLi5gIHlpZWxkcyBkZWNvZGVkXG4gKiBjb2x1bW4gdmFsdWVzIChzYW1lIGFzIHJlcGVhdGVkIGByb3cuZ2V0KGkpYCkuXG4gKi9cbmV4cG9ydCBjbGFzcyBSb3cgaW1wbGVtZW50cyBJdGVyYWJsZTxhbnk+IHtcbiAgLyoqXG4gICAqIENvbHVtbiBuYW1lcyBmb3IgbmFtZS1iYXNlZCBhY2Nlc3MuIEluamVjdGVkIGJ5IHRoZSBwYXJlbnQgUmVzcG9uc2VcbiAgICogY29uc3RydWN0b3Igc28gdGhhdCBgcm93LmdldEJ5TmFtZSgnY29sJylgIHdvcmtzIHdpdGhvdXQgZ29pbmdcbiAgICogdGhyb3VnaCBSZXNwb25zZS5nZXRCeU5hbWUocm93LCAnY29sJykuXG4gICAqL1xuICBjb2x1bW5OYW1lczogcmVhZG9ubHkgc3RyaW5nW10gPSBbXTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgcmVhZG9ubHkgdmFsdWVzOiBhbnlbXSxcbiAgICBwdWJsaWMgcmVhZG9ubHkgdHlwZXM6IFByb3BlcnR5VHlwZVtdID0gW11cbiAgKSB7fVxuXG4gIC8qKiBHZXQgdGhlIHZhbHVlIGF0IHRoZSBnaXZlbiBjb2x1bW4gaW5kZXggKi9cbiAgZ2V0KGluZGV4OiBudW1iZXIpOiBhbnkge1xuICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gdGhpcy52YWx1ZXMubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENvbHVtbiBpbmRleCBvdXQgb2YgcmFuZ2U6ICR7aW5kZXh9YCk7XG4gICAgfVxuICAgIGNvbnN0IHZhbHVlID0gdGhpcy52YWx1ZXNbaW5kZXhdO1xuICAgIC8vIElmIHZhbHVlIGlzIGEgVHlwZWRWYWx1ZSBvYmplY3QsIGNvbnZlcnQgaXRcbiAgICBpZiAodmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiAndHlwZScgaW4gdmFsdWUgJiYgJ2RhdGEnIGluIHZhbHVlICYmICdpc051bGwnIGluIHZhbHVlKSB7XG4gICAgICByZXR1cm4gdHlwZWRWYWx1ZVRvSlModmFsdWUgYXMgVHlwZWRWYWx1ZSk7XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHZhbHVlIGZvciB0aGUgZ2l2ZW4gY29sdW1uIG5hbWUuIFJlcXVpcmVzIGBjb2x1bW5OYW1lc2AgdG9cbiAgICogaGF2ZSBiZWVuIHBvcHVsYXRlZCBieSB0aGUgcGFyZW50IFJlc3BvbnNlLlxuICAgKi9cbiAgZ2V0QnlOYW1lKG5hbWU6IHN0cmluZyk6IGFueSB7XG4gICAgaWYgKHRoaXMuY29sdW1uTmFtZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFJvdyBjb2x1bW5OYW1lcyBub3QgcG9wdWxhdGVkOyBjYW5ub3QgbG9vayB1cCAnJHtuYW1lfScgYnkgbmFtZWApO1xuICAgIH1cbiAgICBjb25zdCBpZHggPSB0aGlzLmNvbHVtbk5hbWVzLmluZGV4T2YobmFtZSk7XG4gICAgaWYgKGlkeCA8IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ29sdW1uIG5vdCBmb3VuZDogJHtuYW1lfTsgYXZhaWxhYmxlOiAke3RoaXMuY29sdW1uTmFtZXMuam9pbignLCAnKX1gKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZ2V0KGlkeCk7XG4gIH1cblxuICAvKiogUmV0dXJucyB0cnVlIGlmIHRoaXMgcm93IGtub3dzIHRoZSBnaXZlbiBjb2x1bW4gbmFtZS4gKi9cbiAgaGFzKG5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmNvbHVtbk5hbWVzLmluZGV4T2YobmFtZSkgPj0gMDtcbiAgfVxuXG4gIC8qKiBOdW1iZXIgb2YgY29sdW1ucyBpbiB0aGlzIHJvdy4gKi9cbiAgZ2V0IGxlbmd0aCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnZhbHVlcy5sZW5ndGg7XG4gIH1cblxuICAvKiogSXRlcmF0ZSBvdmVyIGRlY29kZWQgY29sdW1uIHZhbHVlcy4gKi9cbiAgKltTeW1ib2wuaXRlcmF0b3JdKCk6IEl0ZXJhYmxlSXRlcmF0b3I8YW55PiB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnZhbHVlcy5sZW5ndGg7IGkrKykge1xuICAgICAgeWllbGQgdGhpcy5nZXQoaSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEZvcm1hdHRlZCByZXByZXNlbnRhdGlvbi4gV2hlbiBgY29sdW1uTmFtZXNgIGlzIHBvcHVsYXRlZDpcbiAgICogICBgUm93KG5hbWUxPXZhbHVlMSwgbmFtZTI9dmFsdWUyKWBcbiAgICogT3RoZXJ3aXNlOlxuICAgKiAgIGBSb3codmFsdWUwLCB2YWx1ZTEpYFxuICAgKiBNaXJyb3JzIHRoZSBQeXRob24gZHJpdmVyJ3MgYHJlcHIocm93KWAgbGF5b3V0LlxuICAgKi9cbiAgdG9TdHJpbmcoKTogc3RyaW5nIHtcbiAgICBjb25zdCBwYXJ0czogc3RyaW5nW10gPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMudmFsdWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCB2ID0gdGhpcy5nZXQoaSk7XG4gICAgICBjb25zdCBmb3JtYXR0ZWQgPSB0eXBlb2YgdiA9PT0gJ3N0cmluZycgPyBgJyR7dn0nYCA6IFN0cmluZyh2KTtcbiAgICAgIGlmIChpIDwgdGhpcy5jb2x1bW5OYW1lcy5sZW5ndGgpIHtcbiAgICAgICAgcGFydHMucHVzaChgJHt0aGlzLmNvbHVtbk5hbWVzW2ldfT0ke2Zvcm1hdHRlZH1gKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBhcnRzLnB1c2goZm9ybWF0dGVkKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGBSb3coJHtwYXJ0cy5qb2luKCcsICcpfSlgO1xuICB9XG5cbiAgLyoqXG4gICAqIFN0cnVjdHVyYWwgZXF1YWxpdHk6IHNhbWUgY29sdW1uIG5hbWVzIChvciBib3RoIGVtcHR5KSBBTkQgZGVjb2RlZFxuICAgKiBjb2x1bW4gdmFsdWVzIGNvbXBhcmUgZXF1YWwgcGFpcndpc2UuIE1pcnJvcnMgUHl0aG9uIGBSb3cuX19lcV9fYC5cbiAgICogVXNlcyBKU09OLnN0cmluZ2lmeSBmb3IgbmVzdGVkIHZhbHVlIGNvbXBhcmlzb24g4oCUIGFkZXF1YXRlIGZvciB0aGVcbiAgICogcHJpbWl0aXZlL29iamVjdCB0eXBlcyBkZWNvZGVkIGZyb20gdGhlIHdpcmUuXG4gICAqL1xuICBlcXVhbHMob3RoZXI6IFJvdyk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzID09PSBvdGhlcikgcmV0dXJuIHRydWU7XG4gICAgaWYgKCEob3RoZXIgaW5zdGFuY2VvZiBSb3cpKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKHRoaXMuY29sdW1uTmFtZXMubGVuZ3RoICE9PSBvdGhlci5jb2x1bW5OYW1lcy5sZW5ndGgpIHJldHVybiBmYWxzZTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuY29sdW1uTmFtZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICh0aGlzLmNvbHVtbk5hbWVzW2ldICE9PSBvdGhlci5jb2x1bW5OYW1lc1tpXSkgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAodGhpcy52YWx1ZXMubGVuZ3RoICE9PSBvdGhlci52YWx1ZXMubGVuZ3RoKSByZXR1cm4gZmFsc2U7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnZhbHVlcy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgYSA9IHRoaXMuZ2V0KGkpO1xuICAgICAgY29uc3QgYiA9IG90aGVyLmdldChpKTtcbiAgICAgIGlmIChhID09PSBiKSBjb250aW51ZTtcbiAgICAgIGlmIChhICE9PSBhICYmIGIgIT09IGIpIGNvbnRpbnVlOyAvLyBOYU4gPT09IE5hTlxuICAgICAgaWYgKHR5cGVvZiBhICE9PSB0eXBlb2YgYikgcmV0dXJuIGZhbHNlO1xuICAgICAgaWYgKHR5cGVvZiBhID09PSAnb2JqZWN0JyAmJiBhICE9PSBudWxsICYmIGIgIT09IG51bGwpIHtcbiAgICAgICAgaWYgKEpTT04uc3RyaW5naWZ5KGEpICE9PSBKU09OLnN0cmluZ2lmeShiKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKiBHZXQgdGhlIFByb3BlcnR5VHlwZSBhdCB0aGUgZ2l2ZW4gY29sdW1uIGluZGV4ICovXG4gIGdldFR5cGUoaW5kZXg6IG51bWJlcik6IFByb3BlcnR5VHlwZSB7XG4gICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSB0aGlzLnR5cGVzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIFByb3BlcnR5VHlwZS5VTlNFVDtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMudHlwZXNbaW5kZXhdO1xuICB9XG5cbiAgLyoqIEdldCB0aGUgdmFsdWUgYXQgdGhlIGdpdmVuIGNvbHVtbiBpbmRleCBhcyBhIHN0cmluZyAqL1xuICBnZXRTdHJpbmcoaW5kZXg6IG51bWJlcik6IHN0cmluZyB7XG4gICAgY29uc3QgdmFsID0gdGhpcy5nZXQoaW5kZXgpO1xuICAgIGlmICh2YWwgPT09IG51bGwgfHwgdmFsID09PSB1bmRlZmluZWQpIHJldHVybiAnJztcbiAgICBpZiAodHlwZW9mIHZhbCA9PT0gJ3N0cmluZycpIHJldHVybiB2YWw7XG4gICAgcmV0dXJuIFN0cmluZyh2YWwpO1xuICB9XG5cbiAgLyoqIEdldCB0aGUgdmFsdWUgYXQgdGhlIGdpdmVuIGNvbHVtbiBpbmRleCBhcyBhIG51bWJlciAqL1xuICBnZXROdW1iZXIoaW5kZXg6IG51bWJlcik6IG51bWJlciB7XG4gICAgY29uc3QgdmFsID0gdGhpcy5nZXQoaW5kZXgpO1xuICAgIGlmICh2YWwgPT09IG51bGwgfHwgdmFsID09PSB1bmRlZmluZWQpIHJldHVybiAwO1xuICAgIGlmICh0eXBlb2YgdmFsID09PSAnbnVtYmVyJykgcmV0dXJuIHZhbDtcbiAgICBjb25zdCBudW0gPSBOdW1iZXIodmFsKTtcbiAgICBpZiAoaXNOYU4obnVtKSkgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgY29udmVydCAke3R5cGVvZiB2YWx9IHRvIG51bWJlcmApO1xuICAgIHJldHVybiBudW07XG4gIH1cblxuICAvKiogR2V0IHRoZSB2YWx1ZSBhdCB0aGUgZ2l2ZW4gY29sdW1uIGluZGV4IGFzIGEgYm9vbGVhbiAqL1xuICBnZXRCb29sZWFuKGluZGV4OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICBjb25zdCB2YWwgPSB0aGlzLmdldChpbmRleCk7XG4gICAgaWYgKHZhbCA9PT0gbnVsbCB8fCB2YWwgPT09IHVuZGVmaW5lZCkgcmV0dXJuIGZhbHNlO1xuICAgIGlmICh0eXBlb2YgdmFsID09PSAnYm9vbGVhbicpIHJldHVybiB2YWw7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgY29udmVydCAke3R5cGVvZiB2YWx9IHRvIGJvb2xlYW5gKTtcbiAgfVxufVxuXG4vKipcbiAqIFJlcHJlc2VudHMgYSBzaW5nbGUgY29sdW1uJ3MgZGF0YSBmcm9tIHRoZSByZXNwb25zZS5cbiAqIEFsbG93cyBjaGFpbmluZyBvcGVyYXRpb25zIGxpa2UgcmVzcC5hbGlhcyhcIm5cIikuYXNOb2RlcygpIG9yIHJlc3AuZ2V0KDApLmFzTm9kZXMoKS5cbiAqL1xuZXhwb3J0IGNsYXNzIEFsaWFzUmVzdWx0IHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBhbGlhc05hbWU6IHN0cmluZyxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNvbHVtbklkeDogbnVtYmVyLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgcmVzcG9uc2U6IFJlc3BvbnNlXG4gICkge31cblxuICAvKiogR2V0IHRoZSBhbGlhcyBuYW1lICovXG4gIGdldCBhbGlhcygpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmFsaWFzTmFtZTtcbiAgfVxuXG4gIC8qKiBHZXQgdGhlIGNvbHVtbiBpbmRleCAqL1xuICBnZXQgY29sdW1uSW5kZXgoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5jb2x1bW5JZHg7XG4gIH1cblxuICAvKipcbiAgICogRXh0cmFjdCBub2RlcyBmcm9tIHRoZSBhbGlhc2VkIGNvbHVtbiB3aXRoIHNjaGVtYSBpbmZvLlxuICAgKiBUaHJvd3MgVHlwZUVycm9yIGlmIHRoZSBjb2x1bW4gY29udGFpbnMgbm9uLU5PREUgdHlwZXMuXG4gICAqL1xuICBwcml2YXRlIGNvbGxlY3ROb2RlKHZhbDogYW55LCBub2RlczogTm9kZVtdLCBzY2hlbWFzOiBNYXA8c3RyaW5nLCBTY2hlbWE+KTogdm9pZCB7XG4gICAgaWYgKHZhbCAmJiB0eXBlb2YgdmFsLmlkID09PSAnc3RyaW5nJyAmJiAnbGFiZWxzJyBpbiB2YWwpIHtcbiAgICAgIGNvbnN0IG5vZGU6IE5vZGUgPSB7XG4gICAgICAgIGlkOiB2YWwuaWQsXG4gICAgICAgIGxhYmVsczogdmFsLmxhYmVscyB8fCBbXSxcbiAgICAgICAgcHJvcGVydGllczogdmFsLnByb3BlcnRpZXMgfHwge30sXG4gICAgICB9O1xuICAgICAgbm9kZXMucHVzaChub2RlKTtcbiAgICAgIGZvciAoY29uc3QgbGFiZWwgb2Ygbm9kZS5sYWJlbHMpIHtcbiAgICAgICAgaWYgKCFzY2hlbWFzLmhhcyhsYWJlbCkpIHtcbiAgICAgICAgICBzY2hlbWFzLnNldChsYWJlbCwgdGhpcy5idWlsZFNjaGVtYUZyb21Ob2RlKGxhYmVsLCBub2RlKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNvbGxlY3RFZGdlKHZhbDogYW55LCBlZGdlczogRWRnZVtdLCBzY2hlbWFzOiBNYXA8c3RyaW5nLCBTY2hlbWE+KTogdm9pZCB7XG4gICAgaWYgKHZhbCAmJiB0eXBlb2YgdmFsLmlkID09PSAnc3RyaW5nJyAmJiAnbGFiZWwnIGluIHZhbCkge1xuICAgICAgY29uc3QgZWRnZTogRWRnZSA9IHtcbiAgICAgICAgaWQ6IHZhbC5pZCxcbiAgICAgICAgbGFiZWw6IHZhbC5sYWJlbCB8fCAnJyxcbiAgICAgICAgZnJvbU5vZGVJZDogdmFsLmZyb21Ob2RlSWQgfHwgJycsXG4gICAgICAgIHRvTm9kZUlkOiB2YWwudG9Ob2RlSWQgfHwgJycsXG4gICAgICAgIHByb3BlcnRpZXM6IHZhbC5wcm9wZXJ0aWVzIHx8IHt9LFxuICAgICAgfTtcbiAgICAgIGVkZ2VzLnB1c2goZWRnZSk7XG4gICAgICBpZiAoZWRnZS5sYWJlbCAmJiAhc2NoZW1hcy5oYXMoZWRnZS5sYWJlbCkpIHtcbiAgICAgICAgc2NoZW1hcy5zZXQoZWRnZS5sYWJlbCwgdGhpcy5idWlsZFNjaGVtYUZyb21FZGdlKGVkZ2UubGFiZWwsIGVkZ2UpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRXh0cmFjdCBub2RlcyBmcm9tIHRoZSBhbGlhc2VkIGNvbHVtbiB3aXRoIHNjaGVtYSBpbmZvLlxuICAgKiBTdXBwb3J0cyBib3RoIGRpcmVjdCBOT0RFIGNvbHVtbnMgYW5kIExJU1Qgb2YgTk9ERSBjb2x1bW5zXG4gICAqIChlLmcuLCBncm91cCB2YXJpYWJsZXMgZnJvbSBxdWFudGlmaWVkIHBhdHRlcm5zKS5cbiAgICovXG4gIGFzTm9kZXMoKTogTm9kZVJlc3VsdCB7XG4gICAgY29uc3Qgbm9kZXM6IE5vZGVbXSA9IFtdO1xuICAgIGNvbnN0IHNjaGVtYXMgPSBuZXcgTWFwPHN0cmluZywgU2NoZW1hPigpO1xuXG4gICAgZm9yIChjb25zdCByb3cgb2YgdGhpcy5yZXNwb25zZS5yb3dzKSB7XG4gICAgICBpZiAodGhpcy5jb2x1bW5JZHggPj0gcm93LnZhbHVlcy5sZW5ndGgpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGxldCBpdGVtVHlwZSA9IHJvdy5nZXRUeXBlKHRoaXMuY29sdW1uSWR4KTtcbiAgICAgIGNvbnN0IHJhd1ZhbHVlID0gcm93LnZhbHVlc1t0aGlzLmNvbHVtbklkeF07XG4gICAgICBpZiAoaXRlbVR5cGUgPT09IFByb3BlcnR5VHlwZS5VTlNFVCAmJiByYXdWYWx1ZSAmJiB0eXBlb2YgcmF3VmFsdWUgPT09ICdvYmplY3QnICYmICd0eXBlJyBpbiByYXdWYWx1ZSkge1xuICAgICAgICBpdGVtVHlwZSA9IHJhd1ZhbHVlLnR5cGU7XG4gICAgICB9XG5cbiAgICAgIGlmICghcmF3VmFsdWUgfHwgKHR5cGVvZiByYXdWYWx1ZSA9PT0gJ29iamVjdCcgJiYgJ2lzTnVsbCcgaW4gcmF3VmFsdWUgJiYgcmF3VmFsdWUuaXNOdWxsKSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGl0ZW1UeXBlID09PSBQcm9wZXJ0eVR5cGUuTk9ERSkge1xuICAgICAgICB0aGlzLmNvbGxlY3ROb2RlKHJvdy5nZXQodGhpcy5jb2x1bW5JZHgpLCBub2Rlcywgc2NoZW1hcyk7XG4gICAgICB9IGVsc2UgaWYgKGl0ZW1UeXBlID09PSBQcm9wZXJ0eVR5cGUuTElTVCkge1xuICAgICAgICAvLyBMSVNUIG9mIE5PREUgKGdyb3VwIHZhcmlhYmxlIGZyb20gcXVhbnRpZmllZCBwYXR0ZXJuKVxuICAgICAgICBjb25zdCBsaXN0ID0gcm93LmdldCh0aGlzLmNvbHVtbklkeCk7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGxpc3QpKSB7XG4gICAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGxpc3QpIHtcbiAgICAgICAgICAgIHRoaXMuY29sbGVjdE5vZGUoaXRlbSwgbm9kZXMsIHNjaGVtYXMpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgICBgVHlwZSBtaXNtYXRjaDogY29sdW1uICcke3RoaXMuYWxpYXNOYW1lfScgKGluZGV4ICR7dGhpcy5jb2x1bW5JZHh9KSBjb250YWlucyAke1Byb3BlcnR5VHlwZVtpdGVtVHlwZV19LCBleHBlY3RlZCBOT0RFIG9yIExJU1Qgb2YgTk9ERWBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4geyBub2Rlcywgc2NoZW1hcyB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEV4dHJhY3QgZWRnZXMgZnJvbSB0aGUgYWxpYXNlZCBjb2x1bW4gd2l0aCBzY2hlbWEgaW5mby5cbiAgICogU3VwcG9ydHMgYm90aCBkaXJlY3QgRURHRSBjb2x1bW5zIGFuZCBMSVNUIG9mIEVER0UgY29sdW1uc1xuICAgKiAoZS5nLiwgZ3JvdXAgdmFyaWFibGVzIGZyb20gcXVhbnRpZmllZCBwYXR0ZXJucykuXG4gICAqL1xuICBhc0VkZ2VzKCk6IEVkZ2VSZXN1bHQge1xuICAgIGNvbnN0IGVkZ2VzOiBFZGdlW10gPSBbXTtcbiAgICBjb25zdCBzY2hlbWFzID0gbmV3IE1hcDxzdHJpbmcsIFNjaGVtYT4oKTtcblxuICAgIGZvciAoY29uc3Qgcm93IG9mIHRoaXMucmVzcG9uc2Uucm93cykge1xuICAgICAgaWYgKHRoaXMuY29sdW1uSWR4ID49IHJvdy52YWx1ZXMubGVuZ3RoKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBsZXQgaXRlbVR5cGUgPSByb3cuZ2V0VHlwZSh0aGlzLmNvbHVtbklkeCk7XG4gICAgICBjb25zdCByYXdWYWx1ZSA9IHJvdy52YWx1ZXNbdGhpcy5jb2x1bW5JZHhdO1xuICAgICAgaWYgKGl0ZW1UeXBlID09PSBQcm9wZXJ0eVR5cGUuVU5TRVQgJiYgcmF3VmFsdWUgJiYgdHlwZW9mIHJhd1ZhbHVlID09PSAnb2JqZWN0JyAmJiAndHlwZScgaW4gcmF3VmFsdWUpIHtcbiAgICAgICAgaXRlbVR5cGUgPSByYXdWYWx1ZS50eXBlO1xuICAgICAgfVxuXG4gICAgICBpZiAoIXJhd1ZhbHVlIHx8ICh0eXBlb2YgcmF3VmFsdWUgPT09ICdvYmplY3QnICYmICdpc051bGwnIGluIHJhd1ZhbHVlICYmIHJhd1ZhbHVlLmlzTnVsbCkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChpdGVtVHlwZSA9PT0gUHJvcGVydHlUeXBlLkVER0UpIHtcbiAgICAgICAgdGhpcy5jb2xsZWN0RWRnZShyb3cuZ2V0KHRoaXMuY29sdW1uSWR4KSwgZWRnZXMsIHNjaGVtYXMpO1xuICAgICAgfSBlbHNlIGlmIChpdGVtVHlwZSA9PT0gUHJvcGVydHlUeXBlLkxJU1QpIHtcbiAgICAgICAgLy8gTElTVCBvZiBFREdFIChncm91cCB2YXJpYWJsZSBmcm9tIHF1YW50aWZpZWQgcGF0dGVybilcbiAgICAgICAgY29uc3QgbGlzdCA9IHJvdy5nZXQodGhpcy5jb2x1bW5JZHgpO1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShsaXN0KSkge1xuICAgICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBsaXN0KSB7XG4gICAgICAgICAgICB0aGlzLmNvbGxlY3RFZGdlKGl0ZW0sIGVkZ2VzLCBzY2hlbWFzKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICAgYFR5cGUgbWlzbWF0Y2g6IGNvbHVtbiAnJHt0aGlzLmFsaWFzTmFtZX0nIChpbmRleCAke3RoaXMuY29sdW1uSWR4fSkgY29udGFpbnMgJHtQcm9wZXJ0eVR5cGVbaXRlbVR5cGVdfSwgZXhwZWN0ZWQgRURHRSBvciBMSVNUIG9mIEVER0VgXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgZWRnZXMsIHNjaGVtYXMgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeHRyYWN0IHBhdGhzIGZyb20gdGhlIGFsaWFzZWQgY29sdW1uLlxuICAgKiBUaHJvd3MgVHlwZUVycm9yIGlmIHRoZSBjb2x1bW4gY29udGFpbnMgbm9uLVBBVEggdHlwZXMuXG4gICAqL1xuICBhc1BhdGhzKCk6IFBhdGhbXSB7XG4gICAgY29uc3QgcGF0aHM6IFBhdGhbXSA9IFtdO1xuXG4gICAgZm9yIChjb25zdCByb3cgb2YgdGhpcy5yZXNwb25zZS5yb3dzKSB7XG4gICAgICBpZiAodGhpcy5jb2x1bW5JZHggPj0gcm93LnZhbHVlcy5sZW5ndGgpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIC8vIENoZWNrIHR5cGUgZnJvbSB0eXBlcyBhcnJheSBvciBmcm9tIFR5cGVkVmFsdWUgb2JqZWN0XG4gICAgICBsZXQgaXRlbVR5cGUgPSByb3cuZ2V0VHlwZSh0aGlzLmNvbHVtbklkeCk7XG4gICAgICBjb25zdCByYXdWYWx1ZSA9IHJvdy52YWx1ZXNbdGhpcy5jb2x1bW5JZHhdO1xuICAgICAgaWYgKGl0ZW1UeXBlID09PSBQcm9wZXJ0eVR5cGUuVU5TRVQgJiYgcmF3VmFsdWUgJiYgdHlwZW9mIHJhd1ZhbHVlID09PSAnb2JqZWN0JyAmJiAndHlwZScgaW4gcmF3VmFsdWUpIHtcbiAgICAgICAgaXRlbVR5cGUgPSByYXdWYWx1ZS50eXBlO1xuICAgICAgfVxuXG4gICAgICAvLyBTa2lwIG51bGwgdmFsdWVzXG4gICAgICBpZiAoIXJhd1ZhbHVlIHx8ICh0eXBlb2YgcmF3VmFsdWUgPT09ICdvYmplY3QnICYmICdpc051bGwnIGluIHJhd1ZhbHVlICYmIHJhd1ZhbHVlLmlzTnVsbCkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIC8vIFR5cGUgY2hlY2tpbmc6IG11c3QgYmUgUEFUSCB0eXBlXG4gICAgICBpZiAoaXRlbVR5cGUgIT09IFByb3BlcnR5VHlwZS5QQVRIKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICAgYFR5cGUgbWlzbWF0Y2g6IGNvbHVtbiAnJHt0aGlzLmFsaWFzTmFtZX0nIChpbmRleCAke3RoaXMuY29sdW1uSWR4fSkgY29udGFpbnMgJHtQcm9wZXJ0eVR5cGVbaXRlbVR5cGVdfSwgZXhwZWN0ZWQgUEFUSGBcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgLy8gQ29udmVydCBUeXBlZFZhbHVlIHRvIEdxbGRiUGF0aFxuICAgICAgY29uc3QgdmFsID0gcm93LmdldCh0aGlzLmNvbHVtbklkeCkgYXMgR3FsZGJQYXRoO1xuICAgICAgaWYgKHZhbCAmJiBBcnJheS5pc0FycmF5KHZhbC5ub2RlcykpIHtcbiAgICAgICAgLy8gQ29udmVydCBHcWxkYk5vZGUvR3FsZGJFZGdlIHRvIE5vZGUvRWRnZVxuICAgICAgICBjb25zdCBub2RlczogTm9kZVtdID0gKHZhbC5ub2RlcyB8fCBbXSkubWFwKChuOiBHcWxkYk5vZGUpID0+ICh7XG4gICAgICAgICAgaWQ6IG4uaWQgfHwgJycsXG4gICAgICAgICAgbGFiZWxzOiBuLmxhYmVscyB8fCBbXSxcbiAgICAgICAgICBwcm9wZXJ0aWVzOiBuLnByb3BlcnRpZXMgfHwge30sXG4gICAgICAgIH0pKTtcbiAgICAgICAgY29uc3QgZWRnZXM6IEVkZ2VbXSA9ICh2YWwuZWRnZXMgfHwgW10pLm1hcCgoZTogR3FsZGJFZGdlKSA9PiAoe1xuICAgICAgICAgIGlkOiBlLmlkIHx8ICcnLFxuICAgICAgICAgIGxhYmVsOiBlLmxhYmVsIHx8ICcnLFxuICAgICAgICAgIGZyb21Ob2RlSWQ6IGUuZnJvbU5vZGVJZCB8fCAnJyxcbiAgICAgICAgICB0b05vZGVJZDogZS50b05vZGVJZCB8fCAnJyxcbiAgICAgICAgICBwcm9wZXJ0aWVzOiBlLnByb3BlcnRpZXMgfHwge30sXG4gICAgICAgIH0pKTtcbiAgICAgICAgcGF0aHMucHVzaCh7IG5vZGVzLCBlZGdlcyB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcGF0aHM7XG4gIH1cblxuICAvKiogQ29udmVydCB0aGUgYWxpYXNlZCBjb2x1bW4gdG8gYSBzaW5nbGUtY29sdW1uIHRhYmxlICovXG4gIGFzVGFibGUoKTogVGFibGUge1xuICAgIC8vIENoZWNrIGlmIGZpcnN0IG5vbi1udWxsIHZhbHVlIGlzIGEgR3FsZGJUYWJsZSDigJQgaWYgc28sIHVud3JhcCBpdFxuICAgIGZvciAoY29uc3Qgcm93IG9mIHRoaXMucmVzcG9uc2Uucm93cykge1xuICAgICAgaWYgKHRoaXMuY29sdW1uSWR4IDwgcm93LnZhbHVlcy5sZW5ndGgpIHtcbiAgICAgICAgY29uc3QgaXRlbVR5cGUgPSByb3cuZ2V0VHlwZSh0aGlzLmNvbHVtbklkeCk7XG4gICAgICAgIGlmIChpdGVtVHlwZSA9PT0gUHJvcGVydHlUeXBlLlRBQkxFKSB7XG4gICAgICAgICAgY29uc3QgdmFsID0gcm93LmdldCh0aGlzLmNvbHVtbklkeCkgYXMgYW55O1xuICAgICAgICAgIGlmICh2YWwgJiYgJ2NvbHVtbnMnIGluIHZhbCAmJiAncm93cycgaW4gdmFsKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bndyYXBHcWxkYlRhYmxlKHZhbCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBicmVhazsgLy8gb25seSBjaGVjayBmaXJzdCByb3dcbiAgICB9XG5cbiAgICAvLyBGYWxsYmFjazogZ2VuZXJpYyBzaW5nbGUtY29sdW1uIHRhYmxlXG4gICAgY29uc3QgaGVhZGVyczogSGVhZGVyW10gPSBbe1xuICAgICAgbmFtZTogdGhpcy5hbGlhc05hbWUsXG4gICAgICB0eXBlOiBQcm9wZXJ0eVR5cGUuVU5TRVQsXG4gICAgfV07XG5cbiAgICBpZiAodGhpcy5yZXNwb25zZS5yb3dzLmxlbmd0aCA+IDApIHtcbiAgICAgIGZvciAoY29uc3Qgcm93IG9mIHRoaXMucmVzcG9uc2Uucm93cykge1xuICAgICAgICBpZiAodGhpcy5jb2x1bW5JZHggPCByb3cudmFsdWVzLmxlbmd0aCkge1xuICAgICAgICAgIGNvbnN0IHR5cGUgPSByb3cuZ2V0VHlwZSh0aGlzLmNvbHVtbklkeCk7XG4gICAgICAgICAgaWYgKHR5cGUgIT09IFByb3BlcnR5VHlwZS5VTlNFVCkge1xuICAgICAgICAgICAgaGVhZGVyc1swXS50eXBlID0gdHlwZTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHRhYmxlUm93czogYW55W11bXSA9IHRoaXMucmVzcG9uc2Uucm93cy5tYXAocm93ID0+IHtcbiAgICAgIGlmICh0aGlzLmNvbHVtbklkeCA8IHJvdy52YWx1ZXMubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBbcm93LmdldCh0aGlzLmNvbHVtbklkeCldO1xuICAgICAgfVxuICAgICAgcmV0dXJuIFtudWxsXTtcbiAgICB9KTtcblxuICAgIHJldHVybiB7IG5hbWU6ICcnLCBoZWFkZXJzLCByb3dzOiB0YWJsZVJvd3MgfTtcbiAgfVxuXG4gIHByaXZhdGUgdW53cmFwR3FsZGJUYWJsZShndDogeyBjb2x1bW5zOiBzdHJpbmdbXTsgcm93czogYW55W11bXSB9KTogVGFibGUge1xuICAgIGNvbnN0IGhlYWRlcnM6IEhlYWRlcltdID0gZ3QuY29sdW1ucy5tYXAoKGNvbCwgaSkgPT4ge1xuICAgICAgbGV0IGNvbFR5cGUgPSBQcm9wZXJ0eVR5cGUuVU5TRVQ7XG4gICAgICBpZiAoZ3Qucm93cy5sZW5ndGggPiAwICYmIGkgPCBndC5yb3dzWzBdLmxlbmd0aCkge1xuICAgICAgICBjb25zdCB2ID0gZ3Qucm93c1swXVtpXTtcbiAgICAgICAgaWYgKHR5cGVvZiB2ID09PSAnbnVtYmVyJykgY29sVHlwZSA9IE51bWJlci5pc0ludGVnZXIodikgPyBQcm9wZXJ0eVR5cGUuSU5UNjQgOiBQcm9wZXJ0eVR5cGUuRE9VQkxFO1xuICAgICAgICBlbHNlIGlmICh0eXBlb2YgdiA9PT0gJ3N0cmluZycpIGNvbFR5cGUgPSBQcm9wZXJ0eVR5cGUuU1RSSU5HO1xuICAgICAgICBlbHNlIGlmICh0eXBlb2YgdiA9PT0gJ2Jvb2xlYW4nKSBjb2xUeXBlID0gUHJvcGVydHlUeXBlLkJPT0w7XG4gICAgICB9XG4gICAgICByZXR1cm4geyBuYW1lOiBjb2wsIHR5cGU6IGNvbFR5cGUgfTtcbiAgICB9KTtcbiAgICByZXR1cm4geyBuYW1lOiB0aGlzLmFsaWFzTmFtZSwgaGVhZGVycywgcm93czogZ3Qucm93cyB9O1xuICB9XG5cbiAgLyoqIEV4dHJhY3Qgc2NhbGFyIG9yIGxpc3QgYXR0cmlidXRlIHZhbHVlcyBmcm9tIHRoZSBhbGlhc2VkIGNvbHVtbiAqL1xuICBhc0F0dHIoKTogQXR0ciB7XG4gICAgY29uc3QgdmFsdWVzOiBhbnlbXSA9IFtdO1xuICAgIGxldCBhdHRyVHlwZSA9IFByb3BlcnR5VHlwZS5VTlNFVDtcblxuICAgIGZvciAoY29uc3Qgcm93IG9mIHRoaXMucmVzcG9uc2Uucm93cykge1xuICAgICAgaWYgKHRoaXMuY29sdW1uSWR4IDwgcm93LnZhbHVlcy5sZW5ndGgpIHtcbiAgICAgICAgLy8gVHJ5IHRvIGdldCB0eXBlIGZyb20gcm93LnR5cGVzIGZpcnN0LCB0aGVuIGZyb20gVHlwZWRWYWx1ZSBvYmplY3RcbiAgICAgICAgaWYgKGF0dHJUeXBlID09PSBQcm9wZXJ0eVR5cGUuVU5TRVQpIHtcbiAgICAgICAgICBhdHRyVHlwZSA9IHJvdy5nZXRUeXBlKHRoaXMuY29sdW1uSWR4KTtcbiAgICAgICAgICBpZiAoYXR0clR5cGUgPT09IFByb3BlcnR5VHlwZS5VTlNFVCkge1xuICAgICAgICAgICAgY29uc3QgcmF3VmFsdWUgPSByb3cudmFsdWVzW3RoaXMuY29sdW1uSWR4XTtcbiAgICAgICAgICAgIGlmIChyYXdWYWx1ZSAmJiB0eXBlb2YgcmF3VmFsdWUgPT09ICdvYmplY3QnICYmICd0eXBlJyBpbiByYXdWYWx1ZSkge1xuICAgICAgICAgICAgICBhdHRyVHlwZSA9IHJhd1ZhbHVlLnR5cGU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHZhbHVlID0gcm93LmdldCh0aGlzLmNvbHVtbklkeCk7ICAvLyBVc2UgZ2V0KCkgdG8gY29udmVydCBUeXBlZFZhbHVlXG4gICAgICAgIHZhbHVlcy5wdXNoKHZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4geyBuYW1lOiB0aGlzLmFsaWFzTmFtZSwgdHlwZTogYXR0clR5cGUsIHZhbHVlcyB9O1xuICB9XG5cbiAgLyoqIEV4dHJhY3QgcmF3IEphdmFTY3JpcHQgdmFsdWVzIGZyb20gdGhlIGFsaWFzZWQgY29sdW1uICovXG4gIGFzVmFsdWVzKCk6IGFueVtdIHtcbiAgICBjb25zdCB2YWx1ZXM6IGFueVtdID0gW107XG5cbiAgICBmb3IgKGNvbnN0IHJvdyBvZiB0aGlzLnJlc3BvbnNlLnJvd3MpIHtcbiAgICAgIGlmICh0aGlzLmNvbHVtbklkeCA8IHJvdy52YWx1ZXMubGVuZ3RoKSB7XG4gICAgICAgIHZhbHVlcy5wdXNoKHJvdy5nZXQodGhpcy5jb2x1bW5JZHgpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdmFsdWVzO1xuICB9XG5cbiAgLy8gSGVscGVyIG1ldGhvZHNcblxuICBwcml2YXRlIGJ1aWxkU2NoZW1hRnJvbU5vZGUobGFiZWw6IHN0cmluZywgbm9kZTogTm9kZSk6IFNjaGVtYSB7XG4gICAgY29uc3QgcHJvcGVydGllczogUHJvcGVydHlEZWZbXSA9IE9iamVjdC5lbnRyaWVzKG5vZGUucHJvcGVydGllcykubWFwKChbbmFtZSwgdmFsdWVdKSA9PiAoe1xuICAgICAgbmFtZSxcbiAgICAgIHR5cGU6IHRoaXMuaW5mZXJQcm9wZXJ0eVR5cGUodmFsdWUpLFxuICAgIH0pKTtcbiAgICByZXR1cm4geyBuYW1lOiBsYWJlbCwgcHJvcGVydGllcyB9O1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZFNjaGVtYUZyb21FZGdlKGxhYmVsOiBzdHJpbmcsIGVkZ2U6IEVkZ2UpOiBTY2hlbWEge1xuICAgIGNvbnN0IHByb3BlcnRpZXM6IFByb3BlcnR5RGVmW10gPSBPYmplY3QuZW50cmllcyhlZGdlLnByb3BlcnRpZXMpLm1hcCgoW25hbWUsIHZhbHVlXSkgPT4gKHtcbiAgICAgIG5hbWUsXG4gICAgICB0eXBlOiB0aGlzLmluZmVyUHJvcGVydHlUeXBlKHZhbHVlKSxcbiAgICB9KSk7XG4gICAgcmV0dXJuIHsgbmFtZTogbGFiZWwsIHByb3BlcnRpZXMgfTtcbiAgfVxuXG4gIHByaXZhdGUgaW5mZXJQcm9wZXJ0eVR5cGUodmFsdWU6IGFueSk6IFByb3BlcnR5VHlwZSB7XG4gICAgaWYgKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQpIHJldHVybiBQcm9wZXJ0eVR5cGUuTlVMTDtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnYm9vbGVhbicpIHJldHVybiBQcm9wZXJ0eVR5cGUuQk9PTDtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykge1xuICAgICAgcmV0dXJuIE51bWJlci5pc0ludGVnZXIodmFsdWUpID8gUHJvcGVydHlUeXBlLklOVDY0IDogUHJvcGVydHlUeXBlLkRPVUJMRTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHJldHVybiBQcm9wZXJ0eVR5cGUuU1RSSU5HO1xuICAgIGlmIChCdWZmZXIuaXNCdWZmZXIodmFsdWUpKSByZXR1cm4gUHJvcGVydHlUeXBlLkJMT0I7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSByZXR1cm4gUHJvcGVydHlUeXBlLkxJU1Q7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpIHJldHVybiBQcm9wZXJ0eVR5cGUuTUFQO1xuICAgIHJldHVybiBQcm9wZXJ0eVR5cGUuVU5TRVQ7XG4gIH1cbn1cblxuLyoqIFJlcHJlc2VudHMgdGhlIHJlc3VsdCBvZiBhIEdRTCBxdWVyeSAqL1xuZXhwb3J0IGNsYXNzIFJlc3BvbnNlIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIHJlYWRvbmx5IGNvbHVtbnM6IHN0cmluZ1tdLFxuICAgIHB1YmxpYyByZWFkb25seSByb3dzOiBSb3dbXSxcbiAgICBwdWJsaWMgcmVhZG9ubHkgcm93Q291bnQ6IG51bWJlcixcbiAgICBwdWJsaWMgcmVhZG9ubHkgaGFzTW9yZTogYm9vbGVhbixcbiAgICBwdWJsaWMgcmVhZG9ubHkgd2FybmluZ3M6IHN0cmluZ1tdLFxuICAgIHB1YmxpYyByZWFkb25seSByb3dzQWZmZWN0ZWQ6IG51bWJlciA9IDAsXG4gICAgLyoqXG4gICAgICogU2Vzc2lvbidzIGN1cnJlbnQgZ3JhcGggYWZ0ZXIgdGhpcyBSUEMgZXhlY3V0ZWQsIGFzIGF1dGhvcml0YXRpdmVseVxuICAgICAqIHJlcG9ydGVkIGJ5IHRoZSBzZXJ2ZXIuIEFsd2F5cyBwb3B1bGF0ZWQgb24gc3VjY2VzcyBhZ2FpbnN0IG5ld1xuICAgICAqIHNlcnZlcnMgKGNvdmVycyBzaW5nbGUvY29tcG91bmQgVVNFIEdSQVBIIGF0IGFueSBwb3NpdGlvbixcbiAgICAgKiBsYXN0LXdyaXRlLXdpbnMpLiBFbXB0eSB3aGVuIHJ1bm5pbmcgYWdhaW5zdCBhIHByZS1maXggc2VydmVyLCBpblxuICAgICAqIHdoaWNoIGNhc2UgdGhlIGRyaXZlciBmYWxscyBiYWNrIHRvIGl0cyBVU0UgR1JBUEggdGV4dC1wYXJzaW5nIHBhdGhcbiAgICAgKiBpbnRlcm5hbGx5IHRvIGtlZXAgdGhlIGxvY2FsIGRlZmF1bHQtZ3JhcGggY2FjaGUgaW4gc3luYy5cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgY3VycmVudEdyYXBoOiBzdHJpbmcgPSAnJ1xuICApIHtcbiAgICAvLyBQdXNoIGNvbHVtbiBuYW1lcyBpbnRvIGVhY2ggUm93IHNvIG5hbWUtYmFzZWQgYWNjZXNzIChyb3cuZ2V0QnlOYW1lKVxuICAgIC8vIHdvcmtzIHdpdGhvdXQgZ29pbmcgdGhyb3VnaCBSZXNwb25zZS5nZXRCeU5hbWUocm93LCAuLi4pLiBNYXRjaGVzXG4gICAgLy8gUHl0aG9uJ3MgUmVzcG9uc2UuX19wb3N0X2luaXRfXyBiZWhhdmlvci5cbiAgICBpZiAodGhpcy5jb2x1bW5zLmxlbmd0aCA+IDApIHtcbiAgICAgIGZvciAoY29uc3Qgcm93IG9mIHRoaXMucm93cykge1xuICAgICAgICBpZiAocm93ICYmIHJvdy5jb2x1bW5OYW1lcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICByb3cuY29sdW1uTmFtZXMgPSB0aGlzLmNvbHVtbnM7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKiogQ2hlY2sgaWYgdGhlIHJlc3BvbnNlIGhhcyBubyByb3dzICovXG4gIGlzRW1wdHkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMucm93cy5sZW5ndGggPT09IDA7XG4gIH1cblxuICAvKiogR2V0IHRoZSBmaXJzdCByb3cgKi9cbiAgZmlyc3QoKTogUm93IHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5yb3dzWzBdO1xuICB9XG5cbiAgLyoqIEdldCB0aGUgbGFzdCByb3cgKi9cbiAgbGFzdCgpOiBSb3cgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnJvd3NbdGhpcy5yb3dzLmxlbmd0aCAtIDFdO1xuICB9XG5cbiAgLyoqIEdldCB0aGUgdmFsdWUgZm9yIGEgY29sdW1uIGJ5IG5hbWUgKi9cbiAgZ2V0QnlOYW1lKHJvdzogUm93LCBjb2x1bW5OYW1lOiBzdHJpbmcpOiBhbnkge1xuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5jb2x1bW5zLmluZGV4T2YoY29sdW1uTmFtZSk7XG4gICAgaWYgKGluZGV4ID09PSAtMSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb2x1bW4gbm90IGZvdW5kOiAke2NvbHVtbk5hbWV9YCk7XG4gICAgfVxuICAgIHJldHVybiByb3cuZ2V0KGluZGV4KTtcbiAgfVxuXG4gIC8qKiBJdGVyYXRlIG92ZXIgYWxsIHJvd3Mgd2l0aCBhIGNhbGxiYWNrICovXG4gIGZvckVhY2goZm46IChyb3c6IFJvdywgaW5kZXg6IG51bWJlcikgPT4gdm9pZCk6IHZvaWQge1xuICAgIHRoaXMucm93cy5mb3JFYWNoKGZuKTtcbiAgfVxuXG4gIC8qKiBUcmFuc2Zvcm0gZWFjaCByb3cgdXNpbmcgYSBjYWxsYmFjayAqL1xuICBtYXA8VD4oZm46IChyb3c6IFJvdykgPT4gVCk6IFRbXSB7XG4gICAgcmV0dXJuIHRoaXMucm93cy5tYXAoZm4pO1xuICB9XG5cbiAgLyoqIENvbnZlcnQgdGhlIHJlc3BvbnNlIHRvIGFuIGFycmF5IG9mIG9iamVjdHMgKi9cbiAgdG9PYmplY3RzKCk6IFJlY29yZDxzdHJpbmcsIGFueT5bXSB7XG4gICAgcmV0dXJuIHRoaXMucm93cy5tYXAocm93ID0+IHtcbiAgICAgIGNvbnN0IG9iajogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9O1xuICAgICAgdGhpcy5jb2x1bW5zLmZvckVhY2goKGNvbCwgaSkgPT4ge1xuICAgICAgICAvLyBBZGQgYm91bmRhcnkgY2hlY2sgdG8gaGFuZGxlIG1pc21hdGNoZWQgY29sdW1ucy92YWx1ZXNcbiAgICAgICAgb2JqW2NvbF0gPSBpIDwgcm93LnZhbHVlcy5sZW5ndGggPyByb3cuZ2V0KGkpIDogbnVsbDtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIG9iajtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKiBDb252ZXJ0IHRoZSByZXNwb25zZSB0byBKU09OICovXG4gIHRvSlNPTigpOiBzdHJpbmcge1xuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh0aGlzLnRvT2JqZWN0cygpKTtcbiAgfVxuXG4gIC8qKiBHZXQgdGhlIHNpbmdsZSB2YWx1ZSBmcm9tIGEgc2luZ2xlLXJvdywgc2luZ2xlLWNvbHVtbiByZXNwb25zZSAqL1xuICBzaW5nbGVWYWx1ZSgpOiBhbnkge1xuICAgIGlmICh0aGlzLnJvd3MubGVuZ3RoID09PSAwKSByZXR1cm4gbnVsbDtcbiAgICBpZiAodGhpcy5yb3dzLmxlbmd0aCA+IDEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgc2luZ2xlIHJvdywgZ290ICR7dGhpcy5yb3dzLmxlbmd0aH1gKTtcbiAgICB9XG4gICAgaWYgKHRoaXMucm93c1swXS52YWx1ZXMubGVuZ3RoID09PSAwKSByZXR1cm4gbnVsbDtcbiAgICBpZiAodGhpcy5yb3dzWzBdLnZhbHVlcy5sZW5ndGggPiAxKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIHNpbmdsZSBjb2x1bW4sIGdvdCAke3RoaXMucm93c1swXS52YWx1ZXMubGVuZ3RofWApO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5yb3dzWzBdLmdldCgwKTtcbiAgfVxuXG4gIC8qKiBHZXQgdGhlIHNpbmdsZSBudW1iZXIgdmFsdWUgKi9cbiAgc2luZ2xlTnVtYmVyKCk6IG51bWJlciB7XG4gICAgY29uc3QgdmFsID0gdGhpcy5zaW5nbGVWYWx1ZSgpO1xuICAgIGlmICh2YWwgPT09IG51bGwgfHwgdmFsID09PSB1bmRlZmluZWQpIHJldHVybiAwO1xuICAgIGlmICh0eXBlb2YgdmFsID09PSAnbnVtYmVyJykgcmV0dXJuIHZhbDtcbiAgICBjb25zdCBudW0gPSBOdW1iZXIodmFsKTtcbiAgICBpZiAoaXNOYU4obnVtKSkgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgY29udmVydCAke3R5cGVvZiB2YWx9IHRvIG51bWJlcmApO1xuICAgIHJldHVybiBudW07XG4gIH1cblxuICAvKiogR2V0IHRoZSBzaW5nbGUgc3RyaW5nIHZhbHVlICovXG4gIHNpbmdsZVN0cmluZygpOiBzdHJpbmcge1xuICAgIGNvbnN0IHZhbCA9IHRoaXMuc2luZ2xlVmFsdWUoKTtcbiAgICBpZiAodmFsID09PSBudWxsIHx8IHZhbCA9PT0gdW5kZWZpbmVkKSByZXR1cm4gJyc7XG4gICAgaWYgKHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnKSByZXR1cm4gdmFsO1xuICAgIHJldHVybiBTdHJpbmcodmFsKTtcbiAgfVxuXG4gIC8qKiBJdGVyYXRvciBzdXBwb3J0ICovXG4gIFtTeW1ib2wuaXRlcmF0b3JdKCk6IEl0ZXJhdG9yPFJvdz4ge1xuICAgIHJldHVybiB0aGlzLnJvd3NbU3ltYm9sLml0ZXJhdG9yXSgpO1xuICB9XG5cbiAgLyoqIEdldCB0aGUgbnVtYmVyIG9mIHJvd3MgKi9cbiAgZ2V0IGxlbmd0aCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnJvd3MubGVuZ3RoO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBhbiBBbGlhc1Jlc3VsdCBmb3IgdGhlIHNwZWNpZmllZCBjb2x1bW4gbmFtZS5cbiAgICogVXNlIHRoaXMgdG8gZXh0cmFjdCBkYXRhIGZyb20gYSBzcGVjaWZpYyBjb2x1bW4gYnkgbmFtZS5cbiAgICogRXhhbXBsZTogcmVzcC5hbGlhcyhcIm5cIikuYXNOb2RlcygpXG4gICAqL1xuICBhbGlhcyhjb2x1bW5OYW1lOiBzdHJpbmcpOiBBbGlhc1Jlc3VsdCB7XG4gICAgY29uc3QgY29sSWR4ID0gdGhpcy5jb2x1bW5zLmluZGV4T2YoY29sdW1uTmFtZSk7XG4gICAgaWYgKGNvbElkeCA9PT0gLTEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ29sdW1uIGFsaWFzIG5vdCBmb3VuZDogJHtjb2x1bW5OYW1lfWApO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IEFsaWFzUmVzdWx0KGNvbHVtbk5hbWUsIGNvbElkeCwgdGhpcyk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGFuIEFsaWFzUmVzdWx0IGZvciB0aGUgY29sdW1uIGF0IHRoZSBzcGVjaWZpZWQgaW5kZXguXG4gICAqIFVzZSB0aGlzIHRvIGV4dHJhY3QgZGF0YSBmcm9tIGEgc3BlY2lmaWMgY29sdW1uIGJ5IGluZGV4LlxuICAgKiBFeGFtcGxlOiByZXNwLmdldCgwKS5hc05vZGVzKClcbiAgICovXG4gIGdldChpbmRleDogbnVtYmVyKTogQWxpYXNSZXN1bHQge1xuICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gdGhpcy5jb2x1bW5zLmxlbmd0aCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb2x1bW4gaW5kZXggb3V0IG9mIHJhbmdlOiAke2luZGV4fSAodG90YWw6ICR7dGhpcy5jb2x1bW5zLmxlbmd0aH0pYCk7XG4gICAgfVxuICAgIHJldHVybiBuZXcgQWxpYXNSZXN1bHQodGhpcy5jb2x1bW5zW2luZGV4XSwgaW5kZXgsIHRoaXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIFVzZSBhbGlhcygpIG9yIGdldCgpIGluc3RlYWQuIFRoaXMgbWV0aG9kIHdpbGwgYmUgcmVtb3ZlZCBpbiBhIGZ1dHVyZSB2ZXJzaW9uLlxuICAgKiBFeHRyYWN0IG5vZGVzIGZyb20gcmVzcG9uc2Ugd2l0aCBzY2hlbWEgaW5mby5cbiAgICogU3VwcG9ydHMgYm90aCBOT0RFIGFuZCBMSVNUIG9mIE5PREUgY29sdW1ucy5cbiAgICovXG4gIGFzTm9kZXMoKTogTm9kZVJlc3VsdCB7XG4gICAgY29uc3Qgbm9kZXM6IE5vZGVbXSA9IFtdO1xuICAgIGNvbnN0IHNjaGVtYXMgPSBuZXcgTWFwPHN0cmluZywgU2NoZW1hPigpO1xuXG4gICAgY29uc3QgY29sbGVjdE5vZGUgPSAodmFsOiBhbnkpID0+IHtcbiAgICAgIGlmICh2YWwgJiYgdHlwZW9mIHZhbC5pZCA9PT0gJ3N0cmluZycgJiYgJ2xhYmVscycgaW4gdmFsKSB7XG4gICAgICAgIGNvbnN0IG5vZGU6IE5vZGUgPSB7XG4gICAgICAgICAgaWQ6IHZhbC5pZCxcbiAgICAgICAgICBsYWJlbHM6IHZhbC5sYWJlbHMgfHwgW10sXG4gICAgICAgICAgcHJvcGVydGllczogdmFsLnByb3BlcnRpZXMgfHwge30sXG4gICAgICAgIH07XG4gICAgICAgIG5vZGVzLnB1c2gobm9kZSk7XG4gICAgICAgIGZvciAoY29uc3QgbGFiZWwgb2Ygbm9kZS5sYWJlbHMpIHtcbiAgICAgICAgICBpZiAoIXNjaGVtYXMuaGFzKGxhYmVsKSkge1xuICAgICAgICAgICAgc2NoZW1hcy5zZXQobGFiZWwsIHRoaXMuYnVpbGRTY2hlbWFGcm9tTm9kZShsYWJlbCwgbm9kZSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG5cbiAgICBmb3IgKGNvbnN0IHJvdyBvZiB0aGlzLnJvd3MpIHtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcm93LnZhbHVlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBsZXQgaXRlbVR5cGUgPSByb3cuZ2V0VHlwZShpKTtcbiAgICAgICAgY29uc3QgcmF3VmFsdWUgPSByb3cudmFsdWVzW2ldO1xuICAgICAgICBpZiAoaXRlbVR5cGUgPT09IFByb3BlcnR5VHlwZS5VTlNFVCAmJiByYXdWYWx1ZSAmJiB0eXBlb2YgcmF3VmFsdWUgPT09ICdvYmplY3QnICYmICd0eXBlJyBpbiByYXdWYWx1ZSkge1xuICAgICAgICAgIGl0ZW1UeXBlID0gcmF3VmFsdWUudHlwZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpdGVtVHlwZSA9PT0gUHJvcGVydHlUeXBlLk5PREUpIHtcbiAgICAgICAgICBjb2xsZWN0Tm9kZShyb3cuZ2V0KGkpKTtcbiAgICAgICAgfSBlbHNlIGlmIChpdGVtVHlwZSA9PT0gUHJvcGVydHlUeXBlLkxJU1QpIHtcbiAgICAgICAgICBjb25zdCBsaXN0ID0gcm93LmdldChpKTtcbiAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShsaXN0KSkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGxpc3QpIHtcbiAgICAgICAgICAgICAgY29sbGVjdE5vZGUoaXRlbSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgbm9kZXMsIHNjaGVtYXMgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBVc2UgYWxpYXMoKSBvciBnZXQoKSBpbnN0ZWFkLiBUaGlzIG1ldGhvZCB3aWxsIGJlIHJlbW92ZWQgaW4gYSBmdXR1cmUgdmVyc2lvbi5cbiAgICogRXh0cmFjdCBlZGdlcyBmcm9tIHJlc3BvbnNlIHdpdGggc2NoZW1hIGluZm8uXG4gICAqIFN1cHBvcnRzIGJvdGggRURHRSBhbmQgTElTVCBvZiBFREdFIGNvbHVtbnMuXG4gICAqL1xuICBhc0VkZ2VzKCk6IEVkZ2VSZXN1bHQge1xuICAgIGNvbnN0IGVkZ2VzOiBFZGdlW10gPSBbXTtcbiAgICBjb25zdCBzY2hlbWFzID0gbmV3IE1hcDxzdHJpbmcsIFNjaGVtYT4oKTtcblxuICAgIGNvbnN0IGNvbGxlY3RFZGdlID0gKHZhbDogYW55KSA9PiB7XG4gICAgICBpZiAodmFsICYmIHR5cGVvZiB2YWwuaWQgPT09ICdzdHJpbmcnICYmICdsYWJlbCcgaW4gdmFsKSB7XG4gICAgICAgIGNvbnN0IGVkZ2U6IEVkZ2UgPSB7XG4gICAgICAgICAgaWQ6IHZhbC5pZCxcbiAgICAgICAgICBsYWJlbDogdmFsLmxhYmVsIHx8ICcnLFxuICAgICAgICAgIGZyb21Ob2RlSWQ6IHZhbC5mcm9tTm9kZUlkIHx8ICcnLFxuICAgICAgICAgIHRvTm9kZUlkOiB2YWwudG9Ob2RlSWQgfHwgJycsXG4gICAgICAgICAgcHJvcGVydGllczogdmFsLnByb3BlcnRpZXMgfHwge30sXG4gICAgICAgIH07XG4gICAgICAgIGVkZ2VzLnB1c2goZWRnZSk7XG4gICAgICAgIGlmIChlZGdlLmxhYmVsICYmICFzY2hlbWFzLmhhcyhlZGdlLmxhYmVsKSkge1xuICAgICAgICAgIHNjaGVtYXMuc2V0KGVkZ2UubGFiZWwsIHRoaXMuYnVpbGRTY2hlbWFGcm9tRWRnZShlZGdlLmxhYmVsLCBlZGdlKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuXG4gICAgZm9yIChjb25zdCByb3cgb2YgdGhpcy5yb3dzKSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJvdy52YWx1ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgbGV0IGl0ZW1UeXBlID0gcm93LmdldFR5cGUoaSk7XG4gICAgICAgIGNvbnN0IHJhd1ZhbHVlID0gcm93LnZhbHVlc1tpXTtcbiAgICAgICAgaWYgKGl0ZW1UeXBlID09PSBQcm9wZXJ0eVR5cGUuVU5TRVQgJiYgcmF3VmFsdWUgJiYgdHlwZW9mIHJhd1ZhbHVlID09PSAnb2JqZWN0JyAmJiAndHlwZScgaW4gcmF3VmFsdWUpIHtcbiAgICAgICAgICBpdGVtVHlwZSA9IHJhd1ZhbHVlLnR5cGU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXRlbVR5cGUgPT09IFByb3BlcnR5VHlwZS5FREdFKSB7XG4gICAgICAgICAgY29sbGVjdEVkZ2Uocm93LmdldChpKSk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXRlbVR5cGUgPT09IFByb3BlcnR5VHlwZS5MSVNUKSB7XG4gICAgICAgICAgY29uc3QgbGlzdCA9IHJvdy5nZXQoaSk7XG4gICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkobGlzdCkpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBsaXN0KSB7XG4gICAgICAgICAgICAgIGNvbGxlY3RFZGdlKGl0ZW0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7IGVkZ2VzLCBzY2hlbWFzIH07XG4gIH1cblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgVXNlIGFsaWFzKCkgb3IgZ2V0KCkgaW5zdGVhZC4gVGhpcyBtZXRob2Qgd2lsbCBiZSByZW1vdmVkIGluIGEgZnV0dXJlIHZlcnNpb24uXG4gICAqIEV4dHJhY3QgcGF0aHMgZnJvbSByZXNwb25zZS5cbiAgICogUGF0aHMgYXJlIGlkZW50aWZpZWQgYnkgUHJvcGVydHlUeXBlLlBBVEggdHlwZSBpbiB0aGUgVHlwZWRWYWx1ZS5cbiAgICovXG4gIGFzUGF0aHMoKTogUGF0aFtdIHtcbiAgICBjb25zdCBwYXRoczogUGF0aFtdID0gW107XG5cbiAgICBmb3IgKGNvbnN0IHJvdyBvZiB0aGlzLnJvd3MpIHtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcm93LnZhbHVlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAvLyBDaGVjayB0eXBlIGZyb20gdHlwZXMgYXJyYXkgb3IgZnJvbSBUeXBlZFZhbHVlIG9iamVjdFxuICAgICAgICBsZXQgaXRlbVR5cGUgPSByb3cuZ2V0VHlwZShpKTtcbiAgICAgICAgY29uc3QgcmF3VmFsdWUgPSByb3cudmFsdWVzW2ldO1xuICAgICAgICBpZiAoaXRlbVR5cGUgPT09IFByb3BlcnR5VHlwZS5VTlNFVCAmJiByYXdWYWx1ZSAmJiB0eXBlb2YgcmF3VmFsdWUgPT09ICdvYmplY3QnICYmICd0eXBlJyBpbiByYXdWYWx1ZSkge1xuICAgICAgICAgIGl0ZW1UeXBlID0gcmF3VmFsdWUudHlwZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpdGVtVHlwZSA9PT0gUHJvcGVydHlUeXBlLlBBVEgpIHtcbiAgICAgICAgICAvLyBDb252ZXJ0IFR5cGVkVmFsdWUgdG8gR3FsZGJQYXRoXG4gICAgICAgICAgY29uc3QgdmFsID0gcm93LmdldChpKSBhcyBHcWxkYlBhdGg7XG4gICAgICAgICAgaWYgKHZhbCAmJiBBcnJheS5pc0FycmF5KHZhbC5ub2RlcykpIHtcbiAgICAgICAgICAgIC8vIENvbnZlcnQgR3FsZGJOb2RlL0dxbGRiRWRnZSB0byBOb2RlL0VkZ2VcbiAgICAgICAgICAgIGNvbnN0IG5vZGVzOiBOb2RlW10gPSAodmFsLm5vZGVzIHx8IFtdKS5tYXAoKG46IEdxbGRiTm9kZSkgPT4gKHtcbiAgICAgICAgICAgICAgaWQ6IG4uaWQgfHwgJycsXG4gICAgICAgICAgICAgIGxhYmVsczogbi5sYWJlbHMgfHwgW10sXG4gICAgICAgICAgICAgIHByb3BlcnRpZXM6IG4ucHJvcGVydGllcyB8fCB7fSxcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIGNvbnN0IGVkZ2VzOiBFZGdlW10gPSAodmFsLmVkZ2VzIHx8IFtdKS5tYXAoKGU6IEdxbGRiRWRnZSkgPT4gKHtcbiAgICAgICAgICAgICAgaWQ6IGUuaWQgfHwgJycsXG4gICAgICAgICAgICAgIGxhYmVsOiBlLmxhYmVsIHx8ICcnLFxuICAgICAgICAgICAgICBmcm9tTm9kZUlkOiBlLmZyb21Ob2RlSWQgfHwgJycsXG4gICAgICAgICAgICAgIHRvTm9kZUlkOiBlLnRvTm9kZUlkIHx8ICcnLFxuICAgICAgICAgICAgICBwcm9wZXJ0aWVzOiBlLnByb3BlcnRpZXMgfHwge30sXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICBwYXRocy5wdXNoKHsgbm9kZXMsIGVkZ2VzIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBwYXRocztcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBVc2UgYWxpYXMoKSBvciBnZXQoKSBpbnN0ZWFkLiBUaGlzIG1ldGhvZCB3aWxsIGJlIHJlbW92ZWQgaW4gYSBmdXR1cmUgdmVyc2lvbi5cbiAgICogUmV0dXJuIHJlc3BvbnNlIGFzIGdlbmVyaWMgdGFibGUuXG4gICAqIElmIHJlc3BvbnNlIGlzIGEgc2luZ2xlIFRBQkxFIGNvbHVtbiwgdW53cmFwcyB0aGUgR3FsZGJUYWJsZSBpbnRvIHByb3BlciBoZWFkZXJzL3Jvd3MuXG4gICAqL1xuICBhc1RhYmxlKCk6IFRhYmxlIHtcbiAgICAvLyBJZiBzaW5nbGUgY29sdW1uIG9mIFRBQkxFIHR5cGUsIHVud3JhcCBHcWxkYlRhYmxlXG4gICAgaWYgKHRoaXMuY29sdW1ucy5sZW5ndGggPT09IDEgJiYgdGhpcy5yb3dzLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IGl0ZW1UeXBlID0gdGhpcy5yb3dzWzBdLmdldFR5cGUoMCk7XG4gICAgICBpZiAoaXRlbVR5cGUgPT09IFByb3BlcnR5VHlwZS5UQUJMRSkge1xuICAgICAgICBjb25zdCB2YWwgPSB0aGlzLnJvd3NbMF0uZ2V0KDApIGFzIGFueTtcbiAgICAgICAgaWYgKHZhbCAmJiAnY29sdW1ucycgaW4gdmFsICYmICdyb3dzJyBpbiB2YWwpIHtcbiAgICAgICAgICBjb25zdCBndCA9IHZhbCBhcyB7IGNvbHVtbnM6IHN0cmluZ1tdOyByb3dzOiBhbnlbXVtdIH07XG4gICAgICAgICAgY29uc3QgaGVhZGVyczogSGVhZGVyW10gPSBndC5jb2x1bW5zLm1hcCgoY29sOiBzdHJpbmcsIGk6IG51bWJlcikgPT4ge1xuICAgICAgICAgICAgbGV0IGNvbFR5cGUgPSBQcm9wZXJ0eVR5cGUuVU5TRVQ7XG4gICAgICAgICAgICBpZiAoZ3Qucm93cy5sZW5ndGggPiAwICYmIGkgPCBndC5yb3dzWzBdLmxlbmd0aCkge1xuICAgICAgICAgICAgICBjb25zdCB2ID0gZ3Qucm93c1swXVtpXTtcbiAgICAgICAgICAgICAgaWYgKHR5cGVvZiB2ID09PSAnbnVtYmVyJykgY29sVHlwZSA9IE51bWJlci5pc0ludGVnZXIodikgPyBQcm9wZXJ0eVR5cGUuSU5UNjQgOiBQcm9wZXJ0eVR5cGUuRE9VQkxFO1xuICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlb2YgdiA9PT0gJ3N0cmluZycpIGNvbFR5cGUgPSBQcm9wZXJ0eVR5cGUuU1RSSU5HO1xuICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlb2YgdiA9PT0gJ2Jvb2xlYW4nKSBjb2xUeXBlID0gUHJvcGVydHlUeXBlLkJPT0w7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4geyBuYW1lOiBjb2wsIHR5cGU6IGNvbFR5cGUgfTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm4geyBuYW1lOiB0aGlzLmNvbHVtbnNbMF0sIGhlYWRlcnMsIHJvd3M6IGd0LnJvd3MgfTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEZhbGxiYWNrOiBnZW5lcmljIG11bHRpLWNvbHVtbiB0YWJsZVxuICAgIGNvbnN0IGhlYWRlcnM6IEhlYWRlcltdID0gdGhpcy5jb2x1bW5zLm1hcChjb2wgPT4gKHtcbiAgICAgIG5hbWU6IGNvbCxcbiAgICAgIHR5cGU6IFByb3BlcnR5VHlwZS5VTlNFVCxcbiAgICB9KSk7XG5cbiAgICBjb25zdCB0YWJsZVJvd3M6IGFueVtdW10gPSB0aGlzLnJvd3MubWFwKHJvdyA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5jb2x1bW5zLm1hcCgoXywgaSkgPT4gKGkgPCByb3cudmFsdWVzLmxlbmd0aCA/IHJvdy5nZXQoaSkgOiBudWxsKSk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4geyBuYW1lOiAnJywgaGVhZGVycywgcm93czogdGFibGVSb3dzIH07XG4gIH1cblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgVXNlIGFsaWFzKCkgb3IgZ2V0KCkgaW5zdGVhZC4gVGhpcyBtZXRob2Qgd2lsbCBiZSByZW1vdmVkIGluIGEgZnV0dXJlIHZlcnNpb24uXG4gICAqIEV4dHJhY3Qgc2NhbGFyIG9yIGxpc3QgYXR0cmlidXRlIHZhbHVlc1xuICAgKi9cbiAgYXNBdHRyKGNvbHVtbk5hbWU6IHN0cmluZyk6IEF0dHIge1xuICAgIGNvbnN0IGNvbEluZGV4ID0gdGhpcy5jb2x1bW5zLmluZGV4T2YoY29sdW1uTmFtZSk7XG4gICAgaWYgKGNvbEluZGV4ID09PSAtMSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb2x1bW4gbm90IGZvdW5kOiAke2NvbHVtbk5hbWV9YCk7XG4gICAgfVxuXG4gICAgY29uc3QgdmFsdWVzOiBhbnlbXSA9IFtdO1xuICAgIGxldCBhdHRyVHlwZSA9IFByb3BlcnR5VHlwZS5VTlNFVDtcblxuICAgIGZvciAoY29uc3Qgcm93IG9mIHRoaXMucm93cykge1xuICAgICAgaWYgKGNvbEluZGV4IDwgcm93LnZhbHVlcy5sZW5ndGgpIHtcbiAgICAgICAgLy8gVHJ5IHRvIGdldCB0eXBlIGZyb20gcm93LnR5cGVzIGZpcnN0LCB0aGVuIGZyb20gVHlwZWRWYWx1ZSBvYmplY3RcbiAgICAgICAgaWYgKGF0dHJUeXBlID09PSBQcm9wZXJ0eVR5cGUuVU5TRVQpIHtcbiAgICAgICAgICBhdHRyVHlwZSA9IHJvdy5nZXRUeXBlKGNvbEluZGV4KTtcbiAgICAgICAgICBpZiAoYXR0clR5cGUgPT09IFByb3BlcnR5VHlwZS5VTlNFVCkge1xuICAgICAgICAgICAgY29uc3QgcmF3VmFsdWUgPSByb3cudmFsdWVzW2NvbEluZGV4XTtcbiAgICAgICAgICAgIGlmIChyYXdWYWx1ZSAmJiB0eXBlb2YgcmF3VmFsdWUgPT09ICdvYmplY3QnICYmICd0eXBlJyBpbiByYXdWYWx1ZSkge1xuICAgICAgICAgICAgICBhdHRyVHlwZSA9IHJhd1ZhbHVlLnR5cGU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHZhbHVlID0gcm93LmdldChjb2xJbmRleCk7ICAvLyBVc2UgZ2V0KCkgdG8gY29udmVydCBUeXBlZFZhbHVlXG4gICAgICAgIHZhbHVlcy5wdXNoKHZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4geyBuYW1lOiBjb2x1bW5OYW1lLCB0eXBlOiBhdHRyVHlwZSwgdmFsdWVzIH07XG4gIH1cblxuICAvLyBIZWxwZXIgbWV0aG9kc1xuXG4gIHByaXZhdGUgYnVpbGRTY2hlbWFGcm9tTm9kZShsYWJlbDogc3RyaW5nLCBub2RlOiBOb2RlKTogU2NoZW1hIHtcbiAgICBjb25zdCBwcm9wZXJ0aWVzOiBQcm9wZXJ0eURlZltdID0gT2JqZWN0LmVudHJpZXMobm9kZS5wcm9wZXJ0aWVzKS5tYXAoKFtuYW1lLCB2YWx1ZV0pID0+ICh7XG4gICAgICBuYW1lLFxuICAgICAgdHlwZTogdGhpcy5pbmZlclByb3BlcnR5VHlwZSh2YWx1ZSksXG4gICAgfSkpO1xuICAgIHJldHVybiB7IG5hbWU6IGxhYmVsLCBwcm9wZXJ0aWVzIH07XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkU2NoZW1hRnJvbUVkZ2UobGFiZWw6IHN0cmluZywgZWRnZTogRWRnZSk6IFNjaGVtYSB7XG4gICAgY29uc3QgcHJvcGVydGllczogUHJvcGVydHlEZWZbXSA9IE9iamVjdC5lbnRyaWVzKGVkZ2UucHJvcGVydGllcykubWFwKChbbmFtZSwgdmFsdWVdKSA9PiAoe1xuICAgICAgbmFtZSxcbiAgICAgIHR5cGU6IHRoaXMuaW5mZXJQcm9wZXJ0eVR5cGUodmFsdWUpLFxuICAgIH0pKTtcbiAgICByZXR1cm4geyBuYW1lOiBsYWJlbCwgcHJvcGVydGllcyB9O1xuICB9XG5cbiAgcHJpdmF0ZSBpbmZlclByb3BlcnR5VHlwZSh2YWx1ZTogYW55KTogUHJvcGVydHlUeXBlIHtcbiAgICBpZiAodmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZCkgcmV0dXJuIFByb3BlcnR5VHlwZS5OVUxMO1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJykgcmV0dXJuIFByb3BlcnR5VHlwZS5CT09MO1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSB7XG4gICAgICByZXR1cm4gTnVtYmVyLmlzSW50ZWdlcih2YWx1ZSkgPyBQcm9wZXJ0eVR5cGUuSU5UNjQgOiBQcm9wZXJ0eVR5cGUuRE9VQkxFO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykgcmV0dXJuIFByb3BlcnR5VHlwZS5TVFJJTkc7XG4gICAgaWYgKEJ1ZmZlci5pc0J1ZmZlcih2YWx1ZSkpIHJldHVybiBQcm9wZXJ0eVR5cGUuQkxPQjtcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHJldHVybiBQcm9wZXJ0eVR5cGUuTElTVDtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JykgcmV0dXJuIFByb3BlcnR5VHlwZS5NQVA7XG4gICAgcmV0dXJuIFByb3BlcnR5VHlwZS5VTlNFVDtcbiAgfVxufVxuXG4vKiogUmVzdWx0IG9mIGFuIGluc2VydCBub2RlcyBvcGVyYXRpb24gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW5zZXJ0Tm9kZXNSZXN1bHQge1xuICBzdWNjZXNzOiBib29sZWFuO1xuICBub2RlSWRzOiBzdHJpbmdbXTtcbiAgbm9kZUNvdW50OiBudW1iZXI7XG4gIG1lc3NhZ2U6IHN0cmluZztcbn1cblxuLyoqIFJlc3VsdCBvZiBhbiBpbnNlcnQgZWRnZXMgb3BlcmF0aW9uICovXG5leHBvcnQgaW50ZXJmYWNlIEluc2VydEVkZ2VzUmVzdWx0IHtcbiAgc3VjY2VzczogYm9vbGVhbjtcbiAgZWRnZUlkczogc3RyaW5nW107XG4gIGVkZ2VDb3VudDogbnVtYmVyO1xuICBtZXNzYWdlOiBzdHJpbmc7XG4gIHNraXBwZWRDb3VudDogbnVtYmVyO1xufVxuXG4vKiogUmVzdWx0IG9mIGEgZGVsZXRlIG9wZXJhdGlvbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEZWxldGVSZXN1bHQge1xuICBzdWNjZXNzOiBib29sZWFuO1xuICBkZWxldGVkQ291bnQ6IG51bWJlcjtcbiAgbWVzc2FnZTogc3RyaW5nO1xufVxuXG4vKiogQ29uZmlndXJhdGlvbiBmb3IgdGhlIHVuaWZpZWQgRXhwb3J0IG9wZXJhdGlvbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFeHBvcnRDb25maWcge1xuICBncmFwaE5hbWU6IHN0cmluZztcbiAgYmF0Y2hTaXplPzogbnVtYmVyO1xuICBleHBvcnROb2Rlcz86IGJvb2xlYW47XG4gIGV4cG9ydEVkZ2VzPzogYm9vbGVhbjtcbiAgbm9kZUxhYmVscz86IHN0cmluZ1tdO1xuICBlZGdlTGFiZWxzPzogc3RyaW5nW107XG4gIGluY2x1ZGVNZXRhZGF0YT86IGJvb2xlYW47XG59XG5cbi8qKiBTdGF0aXN0aWNzIGZvciBhbiBleHBvcnQgb3BlcmF0aW9uICovXG5leHBvcnQgaW50ZXJmYWNlIEV4cG9ydFN0YXRzIHtcbiAgbm9kZXNFeHBvcnRlZDogbnVtYmVyO1xuICBlZGdlc0V4cG9ydGVkOiBudW1iZXI7XG4gIGJ5dGVzV3JpdHRlbjogbnVtYmVyO1xuICBkdXJhdGlvbk1zOiBudW1iZXI7XG59XG5cbi8qKiBBIGNodW5rIG9mIGV4cG9ydGVkIGRhdGEgaW4gSlNPTiBMaW5lcyBmb3JtYXQgKi9cbmV4cG9ydCBpbnRlcmZhY2UgRXhwb3J0Q2h1bmsge1xuICBkYXRhOiBCdWZmZXI7XG4gIGlzRmluYWw6IGJvb2xlYW47XG4gIHN0YXRzPzogRXhwb3J0U3RhdHM7XG59XG5cbi8qKlxuICogQSBiYXRjaCBvZiBleHBvcnRlZCBub2Rlc1xuICogQGRlcHJlY2F0ZWQgVXNlIGV4cG9ydCgpIHdpdGggRXhwb3J0Q29uZmlnIGluc3RlYWRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFeHBvcnROb2Rlc1Jlc3VsdCB7XG4gIG5vZGVzOiBFeHBvcnRlZE5vZGVbXTtcbiAgaGFzTW9yZTogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBBIGJhdGNoIG9mIGV4cG9ydGVkIGVkZ2VzXG4gKiBAZGVwcmVjYXRlZCBVc2UgZXhwb3J0KCkgd2l0aCBFeHBvcnRDb25maWcgaW5zdGVhZFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEV4cG9ydEVkZ2VzUmVzdWx0IHtcbiAgZWRnZXM6IEV4cG9ydGVkRWRnZVtdO1xuICBoYXNNb3JlOiBib29sZWFuO1xufVxuXG4vKipcbiAqIEEgbm9kZSBleHBvcnRlZCBmcm9tIHRoZSBkYXRhYmFzZVxuICogQGRlcHJlY2F0ZWQgVXNlIGV4cG9ydCgpIHdpdGggRXhwb3J0Q29uZmlnIGluc3RlYWRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFeHBvcnRlZE5vZGUge1xuICBpZDogc3RyaW5nO1xuICBsYWJlbHM6IHN0cmluZ1tdO1xuICBwcm9wZXJ0aWVzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xufVxuXG4vKipcbiAqIEFuIGVkZ2UgZXhwb3J0ZWQgZnJvbSB0aGUgZGF0YWJhc2VcbiAqIEBkZXByZWNhdGVkIFVzZSBleHBvcnQoKSB3aXRoIEV4cG9ydENvbmZpZyBpbnN0ZWFkXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRXhwb3J0ZWRFZGdlIHtcbiAgaWQ6IHN0cmluZztcbiAgbGFiZWw6IHN0cmluZztcbiAgZnJvbU5vZGVJZDogc3RyaW5nO1xuICB0b05vZGVJZDogc3RyaW5nO1xuICBwcm9wZXJ0aWVzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xufVxuXG4vKiogUmVwcmVzZW50cyBhIG5vZGUgaW4gdGhlIGdyYXBoIGRhdGFiYXNlICovXG5leHBvcnQgaW50ZXJmYWNlIE5vZGUge1xuICBpZDogc3RyaW5nO1xuICBsYWJlbHM6IHN0cmluZ1tdO1xuICBwcm9wZXJ0aWVzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xufVxuXG4vKiogUmVwcmVzZW50cyBhbiBlZGdlIGluIHRoZSBncmFwaCBkYXRhYmFzZSAqL1xuZXhwb3J0IGludGVyZmFjZSBFZGdlIHtcbiAgaWQ6IHN0cmluZztcbiAgbGFiZWw6IHN0cmluZztcbiAgZnJvbU5vZGVJZDogc3RyaW5nO1xuICB0b05vZGVJZDogc3RyaW5nO1xuICBwcm9wZXJ0aWVzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xufVxuXG4vKiogUmVwcmVzZW50cyBhIHBhdGggaW4gdGhlIGdyYXBoIGRhdGFiYXNlICovXG5leHBvcnQgaW50ZXJmYWNlIFBhdGgge1xuICBub2RlczogTm9kZVtdO1xuICBlZGdlczogRWRnZVtdO1xufVxuXG4vKiogUmVzdWx0IHdyYXBwZXIgZm9yIG5vZGVzIHdpdGggc2NoZW1hIGluZm9ybWF0aW9uICovXG5leHBvcnQgaW50ZXJmYWNlIE5vZGVSZXN1bHQge1xuICBub2RlczogTm9kZVtdO1xuICBzY2hlbWFzOiBNYXA8c3RyaW5nLCBTY2hlbWE+O1xufVxuXG4vKiogUmVzdWx0IHdyYXBwZXIgZm9yIGVkZ2VzIHdpdGggc2NoZW1hIGluZm9ybWF0aW9uICovXG5leHBvcnQgaW50ZXJmYWNlIEVkZ2VSZXN1bHQge1xuICBlZGdlczogRWRnZVtdO1xuICBzY2hlbWFzOiBNYXA8c3RyaW5nLCBTY2hlbWE+O1xufVxuIl19
|
|
867
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzcG9uc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvcmVzcG9uc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOztHQUVHOzs7QUFFSCxtQ0FBOEk7QUFFOUk7Ozs7Ozs7Ozs7R0FVRztBQUNILE1BQWEsR0FBRztJQVNJO0lBQ0E7SUFUbEI7Ozs7T0FJRztJQUNILFdBQVcsR0FBc0IsRUFBRSxDQUFDO0lBRXBDLFlBQ2tCLE1BQWEsRUFDYixRQUF3QixFQUFFO1FBRDFCLFdBQU0sR0FBTixNQUFNLENBQU87UUFDYixVQUFLLEdBQUwsS0FBSyxDQUFxQjtJQUN6QyxDQUFDO0lBRUosOENBQThDO0lBQzlDLEdBQUcsQ0FBQyxLQUFhO1FBQ2YsSUFBSSxLQUFLLEdBQUcsQ0FBQyxJQUFJLEtBQUssSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQzdDLE1BQU0sSUFBSSxLQUFLLENBQUMsOEJBQThCLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDekQsQ0FBQztRQUNELE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDakMsOENBQThDO1FBQzlDLElBQUksS0FBSyxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxNQUFNLElBQUksS0FBSyxJQUFJLE1BQU0sSUFBSSxLQUFLLElBQUksUUFBUSxJQUFJLEtBQUssRUFBRSxDQUFDO1lBQ2xHLE9BQU8sSUFBQSxzQkFBYyxFQUFDLEtBQW1CLENBQUMsQ0FBQztRQUM3QyxDQUFDO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsU0FBUyxDQUFDLElBQVk7UUFDcEIsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNsQyxNQUFNLElBQUksS0FBSyxDQUFDLGtEQUFrRCxJQUFJLFdBQVcsQ0FBQyxDQUFDO1FBQ3JGLENBQUM7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LENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxvQkFBWSxDQUFDLE1BQU0sQ0FBQztRQUM1RSxDQUFDO1FBQ0QsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRO1lBQUUsT0FBTyxvQkFBWSxDQUFDLE1BQU0sQ0FBQztRQUMxRCxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDO1lBQUUsT0FBTyxvQkFBWSxDQUFDLElBQUksQ0FBQztRQUNyRCxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO1lBQUUsT0FBTyxvQkFBWSxDQUFDLElBQUksQ0FBQztRQUNuRCxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVE7WUFBRSxPQUFPLG9CQUFZLENBQUMsR0FBRyxDQUFDO1FBQ3ZELE9BQU8sb0JBQVksQ0FBQyxLQUFLLENBQUM7SUFDNUIsQ0FBQztDQUNGO0FBeFpELDRCQXdaQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogUmVzcG9uc2UgaGFuZGxpbmcgZm9yIEdRTERCIE5vZGUuanMgZHJpdmVyLlxuICovXG5cbmltcG9ydCB7IFR5cGVkVmFsdWUsIHR5cGVkVmFsdWVUb0pTLCBQcm9wZXJ0eVR5cGUsIFNjaGVtYSwgUHJvcGVydHlEZWYsIFRhYmxlLCBIZWFkZXIsIEF0dHIsIEdxbGRiTm9kZSwgR3FsZGJFZGdlLCBHcWxkYlBhdGggfSBmcm9tICcuL3R5cGVzJztcblxuLyoqXG4gKiBSZXByZXNlbnRzIGEgc2luZ2xlIHJvdyBpbiB0aGUgcXVlcnkgcmVzdWx0LlxuICpcbiAqIFBvc2l0aW9uYWwgYWNjZXNzIHZpYSBgcm93LmdldChpKWAgaXMgYWx3YXlzIGF2YWlsYWJsZS4gTmFtZS1iYXNlZFxuICogYWNjZXNzIHZpYSBgcm93LmdldEJ5TmFtZShuYW1lKWAgLyBgcm93LmhhcyhuYW1lKWAgcmVxdWlyZXMgdGhlIHBhcmVudFxuICogUmVzcG9uc2UgdG8gaGF2ZSBwb3B1bGF0ZWQge0BsaW5rIFJvdy5jb2x1bW5OYW1lc30gKFJlc3BvbnNlJ3NcbiAqIGNvbnN0cnVjdG9yIGRvZXMgdGhpcyBhdXRvbWF0aWNhbGx5KS5cbiAqXG4gKiBUaGUgcm93IGlzIGl0ZXJhYmxlIOKAlCBgZm9yIChjb25zdCB2IG9mIHJvdykgLi4uYCB5aWVsZHMgZGVjb2RlZFxuICogY29sdW1uIHZhbHVlcyAoc2FtZSBhcyByZXBlYXRlZCBgcm93LmdldChpKWApLlxuICovXG5leHBvcnQgY2xhc3MgUm93IGltcGxlbWVudHMgSXRlcmFibGU8YW55PiB7XG4gIC8qKlxuICAgKiBDb2x1bW4gbmFtZXMgZm9yIG5hbWUtYmFzZWQgYWNjZXNzLiBJbmplY3RlZCBieSB0aGUgcGFyZW50IFJlc3BvbnNlXG4gICAqIGNvbnN0cnVjdG9yIHNvIHRoYXQgYHJvdy5nZXRCeU5hbWUoJ2NvbCcpYCB3b3JrcyB3aXRob3V0IGdvaW5nXG4gICAqIHRocm91Z2ggUmVzcG9uc2UuZ2V0QnlOYW1lKHJvdywgJ2NvbCcpLlxuICAgKi9cbiAgY29sdW1uTmFtZXM6IHJlYWRvbmx5IHN0cmluZ1tdID0gW107XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIHJlYWRvbmx5IHZhbHVlczogYW55W10sXG4gICAgcHVibGljIHJlYWRvbmx5IHR5cGVzOiBQcm9wZXJ0eVR5cGVbXSA9IFtdXG4gICkge31cblxuICAvKiogR2V0IHRoZSB2YWx1ZSBhdCB0aGUgZ2l2ZW4gY29sdW1uIGluZGV4ICovXG4gIGdldChpbmRleDogbnVtYmVyKTogYW55IHtcbiAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IHRoaXMudmFsdWVzLmxlbmd0aCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb2x1bW4gaW5kZXggb3V0IG9mIHJhbmdlOiAke2luZGV4fWApO1xuICAgIH1cbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMudmFsdWVzW2luZGV4XTtcbiAgICAvLyBJZiB2YWx1ZSBpcyBhIFR5cGVkVmFsdWUgb2JqZWN0LCBjb252ZXJ0IGl0XG4gICAgaWYgKHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgJ3R5cGUnIGluIHZhbHVlICYmICdkYXRhJyBpbiB2YWx1ZSAmJiAnaXNOdWxsJyBpbiB2YWx1ZSkge1xuICAgICAgcmV0dXJuIHR5cGVkVmFsdWVUb0pTKHZhbHVlIGFzIFR5cGVkVmFsdWUpO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSB2YWx1ZSBmb3IgdGhlIGdpdmVuIGNvbHVtbiBuYW1lLiBSZXF1aXJlcyBgY29sdW1uTmFtZXNgIHRvXG4gICAqIGhhdmUgYmVlbiBwb3B1bGF0ZWQgYnkgdGhlIHBhcmVudCBSZXNwb25zZS5cbiAgICovXG4gIGdldEJ5TmFtZShuYW1lOiBzdHJpbmcpOiBhbnkge1xuICAgIGlmICh0aGlzLmNvbHVtbk5hbWVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBSb3cgY29sdW1uTmFtZXMgbm90IHBvcHVsYXRlZDsgY2Fubm90IGxvb2sgdXAgJyR7bmFtZX0nIGJ5IG5hbWVgKTtcbiAgICB9XG4gICAgY29uc3QgaWR4ID0gdGhpcy5jb2x1bW5OYW1lcy5pbmRleE9mKG5hbWUpO1xuICAgIGlmIChpZHggPCAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENvbHVtbiBub3QgZm91bmQ6ICR7bmFtZX07IGF2YWlsYWJsZTogJHt0aGlzLmNvbHVtbk5hbWVzLmpvaW4oJywgJyl9YCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmdldChpZHgpO1xuICB9XG5cbiAgLyoqIFJldHVybnMgdHJ1ZSBpZiB0aGlzIHJvdyBrbm93cyB0aGUgZ2l2ZW4gY29sdW1uIG5hbWUuICovXG4gIGhhcyhuYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5jb2x1bW5OYW1lcy5pbmRleE9mKG5hbWUpID49IDA7XG4gIH1cblxuICAvKiogTnVtYmVyIG9mIGNvbHVtbnMgaW4gdGhpcyByb3cuICovXG4gIGdldCBsZW5ndGgoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy52YWx1ZXMubGVuZ3RoO1xuICB9XG5cbiAgLyoqIEl0ZXJhdGUgb3ZlciBkZWNvZGVkIGNvbHVtbiB2YWx1ZXMuICovXG4gICpbU3ltYm9sLml0ZXJhdG9yXSgpOiBJdGVyYWJsZUl0ZXJhdG9yPGFueT4ge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy52YWx1ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHlpZWxkIHRoaXMuZ2V0KGkpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBGb3JtYXR0ZWQgcmVwcmVzZW50YXRpb24uIFdoZW4gYGNvbHVtbk5hbWVzYCBpcyBwb3B1bGF0ZWQ6XG4gICAqICAgYFJvdyhuYW1lMT12YWx1ZTEsIG5hbWUyPXZhbHVlMilgXG4gICAqIE90aGVyd2lzZTpcbiAgICogICBgUm93KHZhbHVlMCwgdmFsdWUxKWBcbiAgICogTWlycm9ycyB0aGUgUHl0aG9uIGRyaXZlcidzIGByZXByKHJvdylgIGxheW91dC5cbiAgICovXG4gIHRvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgY29uc3QgcGFydHM6IHN0cmluZ1tdID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnZhbHVlcy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgdiA9IHRoaXMuZ2V0KGkpO1xuICAgICAgY29uc3QgZm9ybWF0dGVkID0gdHlwZW9mIHYgPT09ICdzdHJpbmcnID8gYCcke3Z9J2AgOiBTdHJpbmcodik7XG4gICAgICBpZiAoaSA8IHRoaXMuY29sdW1uTmFtZXMubGVuZ3RoKSB7XG4gICAgICAgIHBhcnRzLnB1c2goYCR7dGhpcy5jb2x1bW5OYW1lc1tpXX09JHtmb3JtYXR0ZWR9YCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwYXJ0cy5wdXNoKGZvcm1hdHRlZCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBgUm93KCR7cGFydHMuam9pbignLCAnKX0pYDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdHJ1Y3R1cmFsIGVxdWFsaXR5OiBzYW1lIGNvbHVtbiBuYW1lcyAob3IgYm90aCBlbXB0eSkgQU5EIGRlY29kZWRcbiAgICogY29sdW1uIHZhbHVlcyBjb21wYXJlIGVxdWFsIHBhaXJ3aXNlLiBNaXJyb3JzIFB5dGhvbiBgUm93Ll9fZXFfX2AuXG4gICAqIFVzZXMgSlNPTi5zdHJpbmdpZnkgZm9yIG5lc3RlZCB2YWx1ZSBjb21wYXJpc29uIOKAlCBhZGVxdWF0ZSBmb3IgdGhlXG4gICAqIHByaW1pdGl2ZS9vYmplY3QgdHlwZXMgZGVjb2RlZCBmcm9tIHRoZSB3aXJlLlxuICAgKi9cbiAgZXF1YWxzKG90aGVyOiBSb3cpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcyA9PT0gb3RoZXIpIHJldHVybiB0cnVlO1xuICAgIGlmICghKG90aGVyIGluc3RhbmNlb2YgUm93KSkgcmV0dXJuIGZhbHNlO1xuICAgIGlmICh0aGlzLmNvbHVtbk5hbWVzLmxlbmd0aCAhPT0gb3RoZXIuY29sdW1uTmFtZXMubGVuZ3RoKSByZXR1cm4gZmFsc2U7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmNvbHVtbk5hbWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAodGhpcy5jb2x1bW5OYW1lc1tpXSAhPT0gb3RoZXIuY29sdW1uTmFtZXNbaV0pIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKHRoaXMudmFsdWVzLmxlbmd0aCAhPT0gb3RoZXIudmFsdWVzLmxlbmd0aCkgcmV0dXJuIGZhbHNlO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy52YWx1ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGEgPSB0aGlzLmdldChpKTtcbiAgICAgIGNvbnN0IGIgPSBvdGhlci5nZXQoaSk7XG4gICAgICBpZiAoYSA9PT0gYikgY29udGludWU7XG4gICAgICBpZiAoYSAhPT0gYSAmJiBiICE9PSBiKSBjb250aW51ZTsgLy8gTmFOID09PSBOYU5cbiAgICAgIGlmICh0eXBlb2YgYSAhPT0gdHlwZW9mIGIpIHJldHVybiBmYWxzZTtcbiAgICAgIGlmICh0eXBlb2YgYSA9PT0gJ29iamVjdCcgJiYgYSAhPT0gbnVsbCAmJiBiICE9PSBudWxsKSB7XG4gICAgICAgIGlmIChKU09OLnN0cmluZ2lmeShhKSAhPT0gSlNPTi5zdHJpbmdpZnkoYikpIHJldHVybiBmYWxzZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKiogR2V0IHRoZSBQcm9wZXJ0eVR5cGUgYXQgdGhlIGdpdmVuIGNvbHVtbiBpbmRleCAqL1xuICBnZXRUeXBlKGluZGV4OiBudW1iZXIpOiBQcm9wZXJ0eVR5cGUge1xuICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gdGhpcy50eXBlcy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBQcm9wZXJ0eVR5cGUuVU5TRVQ7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnR5cGVzW2luZGV4XTtcbiAgfVxuXG4gIC8qKiBHZXQgdGhlIHZhbHVlIGF0IHRoZSBnaXZlbiBjb2x1bW4gaW5kZXggYXMgYSBzdHJpbmcgKi9cbiAgZ2V0U3RyaW5nKGluZGV4OiBudW1iZXIpOiBzdHJpbmcge1xuICAgIGNvbnN0IHZhbCA9IHRoaXMuZ2V0KGluZGV4KTtcbiAgICBpZiAodmFsID09PSBudWxsIHx8IHZhbCA9PT0gdW5kZWZpbmVkKSByZXR1cm4gJyc7XG4gICAgaWYgKHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnKSByZXR1cm4gdmFsO1xuICAgIHJldHVybiBTdHJpbmcodmFsKTtcbiAgfVxuXG4gIC8qKiBHZXQgdGhlIHZhbHVlIGF0IHRoZSBnaXZlbiBjb2x1bW4gaW5kZXggYXMgYSBudW1iZXIgKi9cbiAgZ2V0TnVtYmVyKGluZGV4OiBudW1iZXIpOiBudW1iZXIge1xuICAgIGNvbnN0IHZhbCA9IHRoaXMuZ2V0KGluZGV4KTtcbiAgICBpZiAodmFsID09PSBudWxsIHx8IHZhbCA9PT0gdW5kZWZpbmVkKSByZXR1cm4gMDtcbiAgICBpZiAodHlwZW9mIHZhbCA9PT0gJ251bWJlcicpIHJldHVybiB2YWw7XG4gICAgY29uc3QgbnVtID0gTnVtYmVyKHZhbCk7XG4gICAgaWYgKGlzTmFOKG51bSkpIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IGNvbnZlcnQgJHt0eXBlb2YgdmFsfSB0byBudW1iZXJgKTtcbiAgICByZXR1cm4gbnVtO1xuICB9XG5cbiAgLyoqIEdldCB0aGUgdmFsdWUgYXQgdGhlIGdpdmVuIGNvbHVtbiBpbmRleCBhcyBhIGJvb2xlYW4gKi9cbiAgZ2V0Qm9vbGVhbihpbmRleDogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgY29uc3QgdmFsID0gdGhpcy5nZXQoaW5kZXgpO1xuICAgIGlmICh2YWwgPT09IG51bGwgfHwgdmFsID09PSB1bmRlZmluZWQpIHJldHVybiBmYWxzZTtcbiAgICBpZiAodHlwZW9mIHZhbCA9PT0gJ2Jvb2xlYW4nKSByZXR1cm4gdmFsO1xuICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IGNvbnZlcnQgJHt0eXBlb2YgdmFsfSB0byBib29sZWFuYCk7XG4gIH1cbn1cblxuLyoqXG4gKiBSZXByZXNlbnRzIGEgc2luZ2xlIGNvbHVtbidzIGRhdGEgZnJvbSB0aGUgcmVzcG9uc2UuXG4gKiBBbGxvd3MgY2hhaW5pbmcgb3BlcmF0aW9ucyBsaWtlIHJlc3AuYWxpYXMoXCJuXCIpLmFzTm9kZXMoKSBvciByZXNwLmdldCgwKS5hc05vZGVzKCkuXG4gKi9cbmV4cG9ydCBjbGFzcyBBbGlhc1Jlc3VsdCB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgYWxpYXNOYW1lOiBzdHJpbmcsXG4gICAgcHJpdmF0ZSByZWFkb25seSBjb2x1bW5JZHg6IG51bWJlcixcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJlc3BvbnNlOiBSZXNwb25zZVxuICApIHt9XG5cbiAgLyoqIEdldCB0aGUgYWxpYXMgbmFtZSAqL1xuICBnZXQgYWxpYXMoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5hbGlhc05hbWU7XG4gIH1cblxuICAvKiogR2V0IHRoZSBjb2x1bW4gaW5kZXggKi9cbiAgZ2V0IGNvbHVtbkluZGV4KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuY29sdW1uSWR4O1xuICB9XG5cbiAgLyoqXG4gICAqIEV4dHJhY3Qgbm9kZXMgZnJvbSB0aGUgYWxpYXNlZCBjb2x1bW4gd2l0aCBzY2hlbWEgaW5mby5cbiAgICogVGhyb3dzIFR5cGVFcnJvciBpZiB0aGUgY29sdW1uIGNvbnRhaW5zIG5vbi1OT0RFIHR5cGVzLlxuICAgKi9cbiAgcHJpdmF0ZSBjb2xsZWN0Tm9kZSh2YWw6IGFueSwgbm9kZXM6IE5vZGVbXSwgc2NoZW1hczogTWFwPHN0cmluZywgU2NoZW1hPik6IHZvaWQge1xuICAgIGlmICh2YWwgJiYgdHlwZW9mIHZhbC5pZCA9PT0gJ3N0cmluZycgJiYgJ2xhYmVscycgaW4gdmFsKSB7XG4gICAgICBjb25zdCBub2RlOiBOb2RlID0ge1xuICAgICAgICBpZDogdmFsLmlkLFxuICAgICAgICBsYWJlbHM6IHZhbC5sYWJlbHMgfHwgW10sXG4gICAgICAgIHByb3BlcnRpZXM6IHZhbC5wcm9wZXJ0aWVzIHx8IHt9LFxuICAgICAgfTtcbiAgICAgIG5vZGVzLnB1c2gobm9kZSk7XG4gICAgICBmb3IgKGNvbnN0IGxhYmVsIG9mIG5vZGUubGFiZWxzKSB7XG4gICAgICAgIGlmICghc2NoZW1hcy5oYXMobGFiZWwpKSB7XG4gICAgICAgICAgc2NoZW1hcy5zZXQobGFiZWwsIHRoaXMuYnVpbGRTY2hlbWFGcm9tTm9kZShsYWJlbCwgbm9kZSkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjb2xsZWN0RWRnZSh2YWw6IGFueSwgZWRnZXM6IEVkZ2VbXSwgc2NoZW1hczogTWFwPHN0cmluZywgU2NoZW1hPik6IHZvaWQge1xuICAgIGlmICh2YWwgJiYgdHlwZW9mIHZhbC5pZCA9PT0gJ3N0cmluZycgJiYgJ2xhYmVsJyBpbiB2YWwpIHtcbiAgICAgIGNvbnN0IGVkZ2U6IEVkZ2UgPSB7XG4gICAgICAgIGlkOiB2YWwuaWQsXG4gICAgICAgIGxhYmVsOiB2YWwubGFiZWwgfHwgJycsXG4gICAgICAgIGZyb21Ob2RlSWQ6IHZhbC5mcm9tTm9kZUlkIHx8ICcnLFxuICAgICAgICB0b05vZGVJZDogdmFsLnRvTm9kZUlkIHx8ICcnLFxuICAgICAgICBwcm9wZXJ0aWVzOiB2YWwucHJvcGVydGllcyB8fCB7fSxcbiAgICAgIH07XG4gICAgICBlZGdlcy5wdXNoKGVkZ2UpO1xuICAgICAgaWYgKGVkZ2UubGFiZWwgJiYgIXNjaGVtYXMuaGFzKGVkZ2UubGFiZWwpKSB7XG4gICAgICAgIHNjaGVtYXMuc2V0KGVkZ2UubGFiZWwsIHRoaXMuYnVpbGRTY2hlbWFGcm9tRWRnZShlZGdlLmxhYmVsLCBlZGdlKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEV4dHJhY3Qgbm9kZXMgZnJvbSB0aGUgYWxpYXNlZCBjb2x1bW4gd2l0aCBzY2hlbWEgaW5mby5cbiAgICogU3VwcG9ydHMgYm90aCBkaXJlY3QgTk9ERSBjb2x1bW5zIGFuZCBMSVNUIG9mIE5PREUgY29sdW1uc1xuICAgKiAoZS5nLiwgZ3JvdXAgdmFyaWFibGVzIGZyb20gcXVhbnRpZmllZCBwYXR0ZXJucykuXG4gICAqL1xuICBhc05vZGVzKCk6IE5vZGVSZXN1bHQge1xuICAgIGNvbnN0IG5vZGVzOiBOb2RlW10gPSBbXTtcbiAgICBjb25zdCBzY2hlbWFzID0gbmV3IE1hcDxzdHJpbmcsIFNjaGVtYT4oKTtcblxuICAgIGZvciAoY29uc3Qgcm93IG9mIHRoaXMucmVzcG9uc2Uucm93cykge1xuICAgICAgaWYgKHRoaXMuY29sdW1uSWR4ID49IHJvdy52YWx1ZXMubGVuZ3RoKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBsZXQgaXRlbVR5cGUgPSByb3cuZ2V0VHlwZSh0aGlzLmNvbHVtbklkeCk7XG4gICAgICBjb25zdCByYXdWYWx1ZSA9IHJvdy52YWx1ZXNbdGhpcy5jb2x1bW5JZHhdO1xuICAgICAgaWYgKGl0ZW1UeXBlID09PSBQcm9wZXJ0eVR5cGUuVU5TRVQgJiYgcmF3VmFsdWUgJiYgdHlwZW9mIHJhd1ZhbHVlID09PSAnb2JqZWN0JyAmJiAndHlwZScgaW4gcmF3VmFsdWUpIHtcbiAgICAgICAgaXRlbVR5cGUgPSByYXdWYWx1ZS50eXBlO1xuICAgICAgfVxuXG4gICAgICBpZiAoIXJhd1ZhbHVlIHx8ICh0eXBlb2YgcmF3VmFsdWUgPT09ICdvYmplY3QnICYmICdpc051bGwnIGluIHJhd1ZhbHVlICYmIHJhd1ZhbHVlLmlzTnVsbCkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChpdGVtVHlwZSA9PT0gUHJvcGVydHlUeXBlLk5PREUpIHtcbiAgICAgICAgdGhpcy5jb2xsZWN0Tm9kZShyb3cuZ2V0KHRoaXMuY29sdW1uSWR4KSwgbm9kZXMsIHNjaGVtYXMpO1xuICAgICAgfSBlbHNlIGlmIChpdGVtVHlwZSA9PT0gUHJvcGVydHlUeXBlLkxJU1QpIHtcbiAgICAgICAgLy8gTElTVCBvZiBOT0RFIChncm91cCB2YXJpYWJsZSBmcm9tIHF1YW50aWZpZWQgcGF0dGVybilcbiAgICAgICAgY29uc3QgbGlzdCA9IHJvdy5nZXQodGhpcy5jb2x1bW5JZHgpO1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShsaXN0KSkge1xuICAgICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBsaXN0KSB7XG4gICAgICAgICAgICB0aGlzLmNvbGxlY3ROb2RlKGl0ZW0sIG5vZGVzLCBzY2hlbWFzKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICAgYFR5cGUgbWlzbWF0Y2g6IGNvbHVtbiAnJHt0aGlzLmFsaWFzTmFtZX0nIChpbmRleCAke3RoaXMuY29sdW1uSWR4fSkgY29udGFpbnMgJHtQcm9wZXJ0eVR5cGVbaXRlbVR5cGVdfSwgZXhwZWN0ZWQgTk9ERSBvciBMSVNUIG9mIE5PREVgXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgbm9kZXMsIHNjaGVtYXMgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeHRyYWN0IGVkZ2VzIGZyb20gdGhlIGFsaWFzZWQgY29sdW1uIHdpdGggc2NoZW1hIGluZm8uXG4gICAqIFN1cHBvcnRzIGJvdGggZGlyZWN0IEVER0UgY29sdW1ucyBhbmQgTElTVCBvZiBFREdFIGNvbHVtbnNcbiAgICogKGUuZy4sIGdyb3VwIHZhcmlhYmxlcyBmcm9tIHF1YW50aWZpZWQgcGF0dGVybnMpLlxuICAgKi9cbiAgYXNFZGdlcygpOiBFZGdlUmVzdWx0IHtcbiAgICBjb25zdCBlZGdlczogRWRnZVtdID0gW107XG4gICAgY29uc3Qgc2NoZW1hcyA9IG5ldyBNYXA8c3RyaW5nLCBTY2hlbWE+KCk7XG5cbiAgICBmb3IgKGNvbnN0IHJvdyBvZiB0aGlzLnJlc3BvbnNlLnJvd3MpIHtcbiAgICAgIGlmICh0aGlzLmNvbHVtbklkeCA+PSByb3cudmFsdWVzLmxlbmd0aCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgbGV0IGl0ZW1UeXBlID0gcm93LmdldFR5cGUodGhpcy5jb2x1bW5JZHgpO1xuICAgICAgY29uc3QgcmF3VmFsdWUgPSByb3cudmFsdWVzW3RoaXMuY29sdW1uSWR4XTtcbiAgICAgIGlmIChpdGVtVHlwZSA9PT0gUHJvcGVydHlUeXBlLlVOU0VUICYmIHJhd1ZhbHVlICYmIHR5cGVvZiByYXdWYWx1ZSA9PT0gJ29iamVjdCcgJiYgJ3R5cGUnIGluIHJhd1ZhbHVlKSB7XG4gICAgICAgIGl0ZW1UeXBlID0gcmF3VmFsdWUudHlwZTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFyYXdWYWx1ZSB8fCAodHlwZW9mIHJhd1ZhbHVlID09PSAnb2JqZWN0JyAmJiAnaXNOdWxsJyBpbiByYXdWYWx1ZSAmJiByYXdWYWx1ZS5pc051bGwpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoaXRlbVR5cGUgPT09IFByb3BlcnR5VHlwZS5FREdFKSB7XG4gICAgICAgIHRoaXMuY29sbGVjdEVkZ2Uocm93LmdldCh0aGlzLmNvbHVtbklkeCksIGVkZ2VzLCBzY2hlbWFzKTtcbiAgICAgIH0gZWxzZSBpZiAoaXRlbVR5cGUgPT09IFByb3BlcnR5VHlwZS5MSVNUKSB7XG4gICAgICAgIC8vIExJU1Qgb2YgRURHRSAoZ3JvdXAgdmFyaWFibGUgZnJvbSBxdWFudGlmaWVkIHBhdHRlcm4pXG4gICAgICAgIGNvbnN0IGxpc3QgPSByb3cuZ2V0KHRoaXMuY29sdW1uSWR4KTtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkobGlzdCkpIHtcbiAgICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgbGlzdCkge1xuICAgICAgICAgICAgdGhpcy5jb2xsZWN0RWRnZShpdGVtLCBlZGdlcywgc2NoZW1hcyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICAgIGBUeXBlIG1pc21hdGNoOiBjb2x1bW4gJyR7dGhpcy5hbGlhc05hbWV9JyAoaW5kZXggJHt0aGlzLmNvbHVtbklkeH0pIGNvbnRhaW5zICR7UHJvcGVydHlUeXBlW2l0ZW1UeXBlXX0sIGV4cGVjdGVkIEVER0Ugb3IgTElTVCBvZiBFREdFYFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7IGVkZ2VzLCBzY2hlbWFzIH07XG4gIH1cblxuICAvKipcbiAgICogRXh0cmFjdCBwYXRocyBmcm9tIHRoZSBhbGlhc2VkIGNvbHVtbi5cbiAgICogVGhyb3dzIFR5cGVFcnJvciBpZiB0aGUgY29sdW1uIGNvbnRhaW5zIG5vbi1QQVRIIHR5cGVzLlxuICAgKi9cbiAgYXNQYXRocygpOiBQYXRoW10ge1xuICAgIGNvbnN0IHBhdGhzOiBQYXRoW10gPSBbXTtcblxuICAgIGZvciAoY29uc3Qgcm93IG9mIHRoaXMucmVzcG9uc2Uucm93cykge1xuICAgICAgaWYgKHRoaXMuY29sdW1uSWR4ID49IHJvdy52YWx1ZXMubGVuZ3RoKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICAvLyBDaGVjayB0eXBlIGZyb20gdHlwZXMgYXJyYXkgb3IgZnJvbSBUeXBlZFZhbHVlIG9iamVjdFxuICAgICAgbGV0IGl0ZW1UeXBlID0gcm93LmdldFR5cGUodGhpcy5jb2x1bW5JZHgpO1xuICAgICAgY29uc3QgcmF3VmFsdWUgPSByb3cudmFsdWVzW3RoaXMuY29sdW1uSWR4XTtcbiAgICAgIGlmIChpdGVtVHlwZSA9PT0gUHJvcGVydHlUeXBlLlVOU0VUICYmIHJhd1ZhbHVlICYmIHR5cGVvZiByYXdWYWx1ZSA9PT0gJ29iamVjdCcgJiYgJ3R5cGUnIGluIHJhd1ZhbHVlKSB7XG4gICAgICAgIGl0ZW1UeXBlID0gcmF3VmFsdWUudHlwZTtcbiAgICAgIH1cblxuICAgICAgLy8gU2tpcCBudWxsIHZhbHVlc1xuICAgICAgaWYgKCFyYXdWYWx1ZSB8fCAodHlwZW9mIHJhd1ZhbHVlID09PSAnb2JqZWN0JyAmJiAnaXNOdWxsJyBpbiByYXdWYWx1ZSAmJiByYXdWYWx1ZS5pc051bGwpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICAvLyBUeXBlIGNoZWNraW5nOiBtdXN0IGJlIFBBVEggdHlwZVxuICAgICAgaWYgKGl0ZW1UeXBlICE9PSBQcm9wZXJ0eVR5cGUuUEFUSCkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICAgIGBUeXBlIG1pc21hdGNoOiBjb2x1bW4gJyR7dGhpcy5hbGlhc05hbWV9JyAoaW5kZXggJHt0aGlzLmNvbHVtbklkeH0pIGNvbnRhaW5zICR7UHJvcGVydHlUeXBlW2l0ZW1UeXBlXX0sIGV4cGVjdGVkIFBBVEhgXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIC8vIENvbnZlcnQgVHlwZWRWYWx1ZSB0byBHcWxkYlBhdGhcbiAgICAgIGNvbnN0IHZhbCA9IHJvdy5nZXQodGhpcy5jb2x1bW5JZHgpIGFzIEdxbGRiUGF0aDtcbiAgICAgIGlmICh2YWwgJiYgQXJyYXkuaXNBcnJheSh2YWwubm9kZXMpKSB7XG4gICAgICAgIC8vIENvbnZlcnQgR3FsZGJOb2RlL0dxbGRiRWRnZSB0byBOb2RlL0VkZ2VcbiAgICAgICAgY29uc3Qgbm9kZXM6IE5vZGVbXSA9ICh2YWwubm9kZXMgfHwgW10pLm1hcCgobjogR3FsZGJOb2RlKSA9PiAoe1xuICAgICAgICAgIGlkOiBuLmlkIHx8ICcnLFxuICAgICAgICAgIGxhYmVsczogbi5sYWJlbHMgfHwgW10sXG4gICAgICAgICAgcHJvcGVydGllczogbi5wcm9wZXJ0aWVzIHx8IHt9LFxuICAgICAgICB9KSk7XG4gICAgICAgIGNvbnN0IGVkZ2VzOiBFZGdlW10gPSAodmFsLmVkZ2VzIHx8IFtdKS5tYXAoKGU6IEdxbGRiRWRnZSkgPT4gKHtcbiAgICAgICAgICBpZDogZS5pZCB8fCAnJyxcbiAgICAgICAgICBsYWJlbDogZS5sYWJlbCB8fCAnJyxcbiAgICAgICAgICBmcm9tTm9kZUlkOiBlLmZyb21Ob2RlSWQgfHwgJycsXG4gICAgICAgICAgdG9Ob2RlSWQ6IGUudG9Ob2RlSWQgfHwgJycsXG4gICAgICAgICAgcHJvcGVydGllczogZS5wcm9wZXJ0aWVzIHx8IHt9LFxuICAgICAgICB9KSk7XG4gICAgICAgIHBhdGhzLnB1c2goeyBub2RlcywgZWRnZXMgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhdGhzO1xuICB9XG5cbiAgLyoqIENvbnZlcnQgdGhlIGFsaWFzZWQgY29sdW1uIHRvIGEgc2luZ2xlLWNvbHVtbiB0YWJsZSAqL1xuICBhc1RhYmxlKCk6IFRhYmxlIHtcbiAgICAvLyBDaGVjayBpZiBmaXJzdCBub24tbnVsbCB2YWx1ZSBpcyBhIEdxbGRiVGFibGUg4oCUIGlmIHNvLCB1bndyYXAgaXRcbiAgICBmb3IgKGNvbnN0IHJvdyBvZiB0aGlzLnJlc3BvbnNlLnJvd3MpIHtcbiAgICAgIGlmICh0aGlzLmNvbHVtbklkeCA8IHJvdy52YWx1ZXMubGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IGl0ZW1UeXBlID0gcm93LmdldFR5cGUodGhpcy5jb2x1bW5JZHgpO1xuICAgICAgICBpZiAoaXRlbVR5cGUgPT09IFByb3BlcnR5VHlwZS5UQUJMRSkge1xuICAgICAgICAgIGNvbnN0IHZhbCA9IHJvdy5nZXQodGhpcy5jb2x1bW5JZHgpIGFzIGFueTtcbiAgICAgICAgICBpZiAodmFsICYmICdjb2x1bW5zJyBpbiB2YWwgJiYgJ3Jvd3MnIGluIHZhbCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW53cmFwR3FsZGJUYWJsZSh2YWwpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgYnJlYWs7IC8vIG9ubHkgY2hlY2sgZmlyc3Qgcm93XG4gICAgfVxuXG4gICAgLy8gRmFsbGJhY2s6IGdlbmVyaWMgc2luZ2xlLWNvbHVtbiB0YWJsZVxuICAgIGNvbnN0IGhlYWRlcnM6IEhlYWRlcltdID0gW3tcbiAgICAgIG5hbWU6IHRoaXMuYWxpYXNOYW1lLFxuICAgICAgdHlwZTogUHJvcGVydHlUeXBlLlVOU0VULFxuICAgIH1dO1xuXG4gICAgaWYgKHRoaXMucmVzcG9uc2Uucm93cy5sZW5ndGggPiAwKSB7XG4gICAgICBmb3IgKGNvbnN0IHJvdyBvZiB0aGlzLnJlc3BvbnNlLnJvd3MpIHtcbiAgICAgICAgaWYgKHRoaXMuY29sdW1uSWR4IDwgcm93LnZhbHVlcy5sZW5ndGgpIHtcbiAgICAgICAgICBjb25zdCB0eXBlID0gcm93LmdldFR5cGUodGhpcy5jb2x1bW5JZHgpO1xuICAgICAgICAgIGlmICh0eXBlICE9PSBQcm9wZXJ0eVR5cGUuVU5TRVQpIHtcbiAgICAgICAgICAgIGhlYWRlcnNbMF0udHlwZSA9IHR5cGU7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCB0YWJsZVJvd3M6IGFueVtdW10gPSB0aGlzLnJlc3BvbnNlLnJvd3MubWFwKHJvdyA9PiB7XG4gICAgICBpZiAodGhpcy5jb2x1bW5JZHggPCByb3cudmFsdWVzLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gW3Jvdy5nZXQodGhpcy5jb2x1bW5JZHgpXTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBbbnVsbF07XG4gICAgfSk7XG5cbiAgICByZXR1cm4geyBuYW1lOiAnJywgaGVhZGVycywgcm93czogdGFibGVSb3dzIH07XG4gIH1cblxuICBwcml2YXRlIHVud3JhcEdxbGRiVGFibGUoZ3Q6IHsgY29sdW1uczogc3RyaW5nW107IHJvd3M6IGFueVtdW10gfSk6IFRhYmxlIHtcbiAgICBjb25zdCBoZWFkZXJzOiBIZWFkZXJbXSA9IGd0LmNvbHVtbnMubWFwKChjb2wsIGkpID0+IHtcbiAgICAgIGxldCBjb2xUeXBlID0gUHJvcGVydHlUeXBlLlVOU0VUO1xuICAgICAgaWYgKGd0LnJvd3MubGVuZ3RoID4gMCAmJiBpIDwgZ3Qucm93c1swXS5sZW5ndGgpIHtcbiAgICAgICAgY29uc3QgdiA9IGd0LnJvd3NbMF1baV07XG4gICAgICAgIGlmICh0eXBlb2YgdiA9PT0gJ251bWJlcicpIGNvbFR5cGUgPSBOdW1iZXIuaXNJbnRlZ2VyKHYpID8gUHJvcGVydHlUeXBlLklOVDY0IDogUHJvcGVydHlUeXBlLkRPVUJMRTtcbiAgICAgICAgZWxzZSBpZiAodHlwZW9mIHYgPT09ICdzdHJpbmcnKSBjb2xUeXBlID0gUHJvcGVydHlUeXBlLlNUUklORztcbiAgICAgICAgZWxzZSBpZiAodHlwZW9mIHYgPT09ICdib29sZWFuJykgY29sVHlwZSA9IFByb3BlcnR5VHlwZS5CT09MO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHsgbmFtZTogY29sLCB0eXBlOiBjb2xUeXBlIH07XG4gICAgfSk7XG4gICAgcmV0dXJuIHsgbmFtZTogdGhpcy5hbGlhc05hbWUsIGhlYWRlcnMsIHJvd3M6IGd0LnJvd3MgfTtcbiAgfVxuXG4gIC8qKiBFeHRyYWN0IHNjYWxhciBvciBsaXN0IGF0dHJpYnV0ZSB2YWx1ZXMgZnJvbSB0aGUgYWxpYXNlZCBjb2x1bW4gKi9cbiAgYXNBdHRyKCk6IEF0dHIge1xuICAgIGNvbnN0IHZhbHVlczogYW55W10gPSBbXTtcbiAgICBsZXQgYXR0clR5cGUgPSBQcm9wZXJ0eVR5cGUuVU5TRVQ7XG5cbiAgICBmb3IgKGNvbnN0IHJvdyBvZiB0aGlzLnJlc3BvbnNlLnJvd3MpIHtcbiAgICAgIGlmICh0aGlzLmNvbHVtbklkeCA8IHJvdy52YWx1ZXMubGVuZ3RoKSB7XG4gICAgICAgIC8vIFRyeSB0byBnZXQgdHlwZSBmcm9tIHJvdy50eXBlcyBmaXJzdCwgdGhlbiBmcm9tIFR5cGVkVmFsdWUgb2JqZWN0XG4gICAgICAgIGlmIChhdHRyVHlwZSA9PT0gUHJvcGVydHlUeXBlLlVOU0VUKSB7XG4gICAgICAgICAgYXR0clR5cGUgPSByb3cuZ2V0VHlwZSh0aGlzLmNvbHVtbklkeCk7XG4gICAgICAgICAgaWYgKGF0dHJUeXBlID09PSBQcm9wZXJ0eVR5cGUuVU5TRVQpIHtcbiAgICAgICAgICAgIGNvbnN0IHJhd1ZhbHVlID0gcm93LnZhbHVlc1t0aGlzLmNvbHVtbklkeF07XG4gICAgICAgICAgICBpZiAocmF3VmFsdWUgJiYgdHlwZW9mIHJhd1ZhbHVlID09PSAnb2JqZWN0JyAmJiAndHlwZScgaW4gcmF3VmFsdWUpIHtcbiAgICAgICAgICAgICAgYXR0clR5cGUgPSByYXdWYWx1ZS50eXBlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCB2YWx1ZSA9IHJvdy5nZXQodGhpcy5jb2x1bW5JZHgpOyAgLy8gVXNlIGdldCgpIHRvIGNvbnZlcnQgVHlwZWRWYWx1ZVxuICAgICAgICB2YWx1ZXMucHVzaCh2YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgbmFtZTogdGhpcy5hbGlhc05hbWUsIHR5cGU6IGF0dHJUeXBlLCB2YWx1ZXMgfTtcbiAgfVxuXG4gIC8qKiBFeHRyYWN0IHJhdyBKYXZhU2NyaXB0IHZhbHVlcyBmcm9tIHRoZSBhbGlhc2VkIGNvbHVtbiAqL1xuICBhc1ZhbHVlcygpOiBhbnlbXSB7XG4gICAgY29uc3QgdmFsdWVzOiBhbnlbXSA9IFtdO1xuXG4gICAgZm9yIChjb25zdCByb3cgb2YgdGhpcy5yZXNwb25zZS5yb3dzKSB7XG4gICAgICBpZiAodGhpcy5jb2x1bW5JZHggPCByb3cudmFsdWVzLmxlbmd0aCkge1xuICAgICAgICB2YWx1ZXMucHVzaChyb3cuZ2V0KHRoaXMuY29sdW1uSWR4KSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbHVlcztcbiAgfVxuXG4gIC8vIEhlbHBlciBtZXRob2RzXG5cbiAgcHJpdmF0ZSBidWlsZFNjaGVtYUZyb21Ob2RlKGxhYmVsOiBzdHJpbmcsIG5vZGU6IE5vZGUpOiBTY2hlbWEge1xuICAgIGNvbnN0IHByb3BlcnRpZXM6IFByb3BlcnR5RGVmW10gPSBPYmplY3QuZW50cmllcyhub2RlLnByb3BlcnRpZXMpLm1hcCgoW25hbWUsIHZhbHVlXSkgPT4gKHtcbiAgICAgIG5hbWUsXG4gICAgICB0eXBlOiB0aGlzLmluZmVyUHJvcGVydHlUeXBlKHZhbHVlKSxcbiAgICB9KSk7XG4gICAgcmV0dXJuIHsgbmFtZTogbGFiZWwsIHByb3BlcnRpZXMgfTtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRTY2hlbWFGcm9tRWRnZShsYWJlbDogc3RyaW5nLCBlZGdlOiBFZGdlKTogU2NoZW1hIHtcbiAgICBjb25zdCBwcm9wZXJ0aWVzOiBQcm9wZXJ0eURlZltdID0gT2JqZWN0LmVudHJpZXMoZWRnZS5wcm9wZXJ0aWVzKS5tYXAoKFtuYW1lLCB2YWx1ZV0pID0+ICh7XG4gICAgICBuYW1lLFxuICAgICAgdHlwZTogdGhpcy5pbmZlclByb3BlcnR5VHlwZSh2YWx1ZSksXG4gICAgfSkpO1xuICAgIHJldHVybiB7IG5hbWU6IGxhYmVsLCBwcm9wZXJ0aWVzIH07XG4gIH1cblxuICBwcml2YXRlIGluZmVyUHJvcGVydHlUeXBlKHZhbHVlOiBhbnkpOiBQcm9wZXJ0eVR5cGUge1xuICAgIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkKSByZXR1cm4gUHJvcGVydHlUeXBlLk5VTEw7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2Jvb2xlYW4nKSByZXR1cm4gUHJvcGVydHlUeXBlLkJPT0w7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICAgIHJldHVybiBOdW1iZXIuaXNJbnRlZ2VyKHZhbHVlKSA/IFByb3BlcnR5VHlwZS5JTlQ2NCA6IFByb3BlcnR5VHlwZS5ET1VCTEU7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSByZXR1cm4gUHJvcGVydHlUeXBlLlNUUklORztcbiAgICBpZiAoQnVmZmVyLmlzQnVmZmVyKHZhbHVlKSkgcmV0dXJuIFByb3BlcnR5VHlwZS5CTE9CO1xuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkgcmV0dXJuIFByb3BlcnR5VHlwZS5MSVNUO1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKSByZXR1cm4gUHJvcGVydHlUeXBlLk1BUDtcbiAgICByZXR1cm4gUHJvcGVydHlUeXBlLlVOU0VUO1xuICB9XG59XG5cbi8qKiBSZXByZXNlbnRzIHRoZSByZXN1bHQgb2YgYSBHUUwgcXVlcnkgKi9cbmV4cG9ydCBjbGFzcyBSZXNwb25zZSB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyByZWFkb25seSBjb2x1bW5zOiBzdHJpbmdbXSxcbiAgICBwdWJsaWMgcmVhZG9ubHkgcm93czogUm93W10sXG4gICAgcHVibGljIHJlYWRvbmx5IHJvd0NvdW50OiBudW1iZXIsXG4gICAgcHVibGljIHJlYWRvbmx5IGhhc01vcmU6IGJvb2xlYW4sXG4gICAgcHVibGljIHJlYWRvbmx5IHdhcm5pbmdzOiBzdHJpbmdbXSxcbiAgICBwdWJsaWMgcmVhZG9ubHkgcm93c0FmZmVjdGVkOiBudW1iZXIgPSAwLFxuICAgIC8qKlxuICAgICAqIFNlc3Npb24ncyBjdXJyZW50IGdyYXBoIGFmdGVyIHRoaXMgUlBDIGV4ZWN1dGVkLCBhcyBhdXRob3JpdGF0aXZlbHlcbiAgICAgKiByZXBvcnRlZCBieSB0aGUgc2VydmVyLiBBbHdheXMgcG9wdWxhdGVkIG9uIHN1Y2Nlc3MgYWdhaW5zdCBuZXdcbiAgICAgKiBzZXJ2ZXJzIChjb3ZlcnMgc2luZ2xlL2NvbXBvdW5kIFVTRSBHUkFQSCBhdCBhbnkgcG9zaXRpb24sXG4gICAgICogbGFzdC13cml0ZS13aW5zKS4gRW1wdHkgd2hlbiBydW5uaW5nIGFnYWluc3QgYSBwcmUtZml4IHNlcnZlciwgaW5cbiAgICAgKiB3aGljaCBjYXNlIHRoZSBkcml2ZXIgZmFsbHMgYmFjayB0byBpdHMgVVNFIEdSQVBIIHRleHQtcGFyc2luZyBwYXRoXG4gICAgICogaW50ZXJuYWxseSB0byBrZWVwIHRoZSBsb2NhbCBkZWZhdWx0LWdyYXBoIGNhY2hlIGluIHN5bmMuXG4gICAgICovXG4gICAgcHVibGljIHJlYWRvbmx5IGN1cnJlbnRHcmFwaDogc3RyaW5nID0gJycsXG4gICAgLyoqXG4gICAgICogU2VydmVyLXNpZGUgdGltaW5nIChuYW5vc2Vjb25kcyksIHJlYWQgZnJvbSB0aGUgZW5naW5lJ3MgUmVzdWx0U2V0LlxuICAgICAqIE5ldHdvcmsgLyBjbGllbnQtc2lkZSB0aW1lIGlzIE5PVCBpbmNsdWRlZC5cbiAgICAgKiAgLSB0aW1lQ29zdE5zOiAgICB0b3RhbCB3YWxsLWNsb2NrIHBhcnNlICsgcGxhbiArIGV4ZWN1dGVcbiAgICAgKiAgLSBkaXNrQ29zdE5zOiAgICBzdWJzZXQgc3BlbnQgaW4gc3RvcmFnZSAvIExTTSBsYXllclxuICAgICAqICAtIGNvbXB1dGVDb3N0TnM6IHN1YnNldCBzcGVudCBpbiB0aGUgaW4tbWVtb3J5IGNvbXB1dGUgZW5naW5lXG4gICAgICogICAgICAgICAgICAgICAgICAgKGstaG9wLCBzaG9ydGVzdCBwYXRoLCBhbGdvLiogdmlhIHRvcG9sb2d5XG4gICAgICogICAgICAgICAgICAgICAgICAgYWNjZWxlcmF0b3IpOyAwIHdoZW4gY29tcHV0ZSBpcyBkaXNhYmxlZCBvclxuICAgICAqICAgICAgICAgICAgICAgICAgIHRoZSBxdWVyeSBwYXRoIGRpZCBub3QgaW52b2tlIHRoZSBhY2NlbGVyYXRvci5cbiAgICAgKiBPbGQgc2VydmVycyBvbWl0IHRoZXNlIHByb3RvMyBmaWVsZHMg4oaSIHRyZWF0IDAgYXMgXCJub3QgcmVwb3J0ZWRcIixcbiAgICAgKiBub3QgXCJ0b29rIHplcm8gdGltZVwiLiBTdHJlYW1pbmcgcXVlcmllcyBwb3B1bGF0ZSBvbmx5IG9uIHRoZVxuICAgICAqIGZpbmFsIGJhdGNoIChoYXNNb3JlPWZhbHNlKSwgbWF0Y2hpbmcgY3VycmVudEdyYXBoIC8gcm93c0FmZmVjdGVkLlxuICAgICAqL1xuICAgIHB1YmxpYyByZWFkb25seSB0aW1lQ29zdE5zOiBudW1iZXIgPSAwLFxuICAgIHB1YmxpYyByZWFkb25seSBkaXNrQ29zdE5zOiBudW1iZXIgPSAwLFxuICAgIHB1YmxpYyByZWFkb25seSBjb21wdXRlQ29zdE5zOiBudW1iZXIgPSAwXG4gICkge1xuICAgIC8vIFB1c2ggY29sdW1uIG5hbWVzIGludG8gZWFjaCBSb3cgc28gbmFtZS1iYXNlZCBhY2Nlc3MgKHJvdy5nZXRCeU5hbWUpXG4gICAgLy8gd29ya3Mgd2l0aG91dCBnb2luZyB0aHJvdWdoIFJlc3BvbnNlLmdldEJ5TmFtZShyb3csIC4uLikuIE1hdGNoZXNcbiAgICAvLyBQeXRob24ncyBSZXNwb25zZS5fX3Bvc3RfaW5pdF9fIGJlaGF2aW9yLlxuICAgIGlmICh0aGlzLmNvbHVtbnMubGVuZ3RoID4gMCkge1xuICAgICAgZm9yIChjb25zdCByb3cgb2YgdGhpcy5yb3dzKSB7XG4gICAgICAgIGlmIChyb3cgJiYgcm93LmNvbHVtbk5hbWVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHJvdy5jb2x1bW5OYW1lcyA9IHRoaXMuY29sdW1ucztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKiBDaGVjayBpZiB0aGUgcmVzcG9uc2UgaGFzIG5vIHJvd3MgKi9cbiAgaXNFbXB0eSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5yb3dzLmxlbmd0aCA9PT0gMDtcbiAgfVxuXG4gIC8qKiBHZXQgdGhlIGZpcnN0IHJvdyAqL1xuICBmaXJzdCgpOiBSb3cgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnJvd3NbMF07XG4gIH1cblxuICAvKiogR2V0IHRoZSBsYXN0IHJvdyAqL1xuICBsYXN0KCk6IFJvdyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMucm93c1t0aGlzLnJvd3MubGVuZ3RoIC0gMV07XG4gIH1cblxuICAvKiogR2V0IHRoZSB2YWx1ZSBmb3IgYSBjb2x1bW4gYnkgbmFtZSAqL1xuICBnZXRCeU5hbWUocm93OiBSb3csIGNvbHVtbk5hbWU6IHN0cmluZyk6IGFueSB7XG4gICAgY29uc3QgaW5kZXggPSB0aGlzLmNvbHVtbnMuaW5kZXhPZihjb2x1bW5OYW1lKTtcbiAgICBpZiAoaW5kZXggPT09IC0xKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENvbHVtbiBub3QgZm91bmQ6ICR7Y29sdW1uTmFtZX1gKTtcbiAgICB9XG4gICAgcmV0dXJuIHJvdy5nZXQoaW5kZXgpO1xuICB9XG5cbiAgLyoqIEl0ZXJhdGUgb3ZlciBhbGwgcm93cyB3aXRoIGEgY2FsbGJhY2sgKi9cbiAgZm9yRWFjaChmbjogKHJvdzogUm93LCBpbmRleDogbnVtYmVyKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgdGhpcy5yb3dzLmZvckVhY2goZm4pO1xuICB9XG5cbiAgLyoqIFRyYW5zZm9ybSBlYWNoIHJvdyB1c2luZyBhIGNhbGxiYWNrICovXG4gIG1hcDxUPihmbjogKHJvdzogUm93KSA9PiBUKTogVFtdIHtcbiAgICByZXR1cm4gdGhpcy5yb3dzLm1hcChmbik7XG4gIH1cblxuICAvKiogQ29udmVydCB0aGUgcmVzcG9uc2UgdG8gYW4gYXJyYXkgb2Ygb2JqZWN0cyAqL1xuICB0b09iamVjdHMoKTogUmVjb3JkPHN0cmluZywgYW55PltdIHtcbiAgICByZXR1cm4gdGhpcy5yb3dzLm1hcChyb3cgPT4ge1xuICAgICAgY29uc3Qgb2JqOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge307XG4gICAgICB0aGlzLmNvbHVtbnMuZm9yRWFjaCgoY29sLCBpKSA9PiB7XG4gICAgICAgIC8vIEFkZCBib3VuZGFyeSBjaGVjayB0byBoYW5kbGUgbWlzbWF0Y2hlZCBjb2x1bW5zL3ZhbHVlc1xuICAgICAgICBvYmpbY29sXSA9IGkgPCByb3cudmFsdWVzLmxlbmd0aCA/IHJvdy5nZXQoaSkgOiBudWxsO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gb2JqO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqIENvbnZlcnQgdGhlIHJlc3BvbnNlIHRvIEpTT04gKi9cbiAgdG9KU09OKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHRoaXMudG9PYmplY3RzKCkpO1xuICB9XG5cbiAgLyoqIEdldCB0aGUgc2luZ2xlIHZhbHVlIGZyb20gYSBzaW5nbGUtcm93LCBzaW5nbGUtY29sdW1uIHJlc3BvbnNlICovXG4gIHNpbmdsZVZhbHVlKCk6IGFueSB7XG4gICAgaWYgKHRoaXMucm93cy5sZW5ndGggPT09IDApIHJldHVybiBudWxsO1xuICAgIGlmICh0aGlzLnJvd3MubGVuZ3RoID4gMSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBzaW5nbGUgcm93LCBnb3QgJHt0aGlzLnJvd3MubGVuZ3RofWApO1xuICAgIH1cbiAgICBpZiAodGhpcy5yb3dzWzBdLnZhbHVlcy5sZW5ndGggPT09IDApIHJldHVybiBudWxsO1xuICAgIGlmICh0aGlzLnJvd3NbMF0udmFsdWVzLmxlbmd0aCA+IDEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgc2luZ2xlIGNvbHVtbiwgZ290ICR7dGhpcy5yb3dzWzBdLnZhbHVlcy5sZW5ndGh9YCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnJvd3NbMF0uZ2V0KDApO1xuICB9XG5cbiAgLyoqIEdldCB0aGUgc2luZ2xlIG51bWJlciB2YWx1ZSAqL1xuICBzaW5nbGVOdW1iZXIoKTogbnVtYmVyIHtcbiAgICBjb25zdCB2YWwgPSB0aGlzLnNpbmdsZVZhbHVlKCk7XG4gICAgaWYgKHZhbCA9PT0gbnVsbCB8fCB2YWwgPT09IHVuZGVmaW5lZCkgcmV0dXJuIDA7XG4gICAgaWYgKHR5cGVvZiB2YWwgPT09ICdudW1iZXInKSByZXR1cm4gdmFsO1xuICAgIGNvbnN0IG51bSA9IE51bWJlcih2YWwpO1xuICAgIGlmIChpc05hTihudW0pKSB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBjb252ZXJ0ICR7dHlwZW9mIHZhbH0gdG8gbnVtYmVyYCk7XG4gICAgcmV0dXJuIG51bTtcbiAgfVxuXG4gIC8qKiBHZXQgdGhlIHNpbmdsZSBzdHJpbmcgdmFsdWUgKi9cbiAgc2luZ2xlU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgY29uc3QgdmFsID0gdGhpcy5zaW5nbGVWYWx1ZSgpO1xuICAgIGlmICh2YWwgPT09IG51bGwgfHwgdmFsID09PSB1bmRlZmluZWQpIHJldHVybiAnJztcbiAgICBpZiAodHlwZW9mIHZhbCA9PT0gJ3N0cmluZycpIHJldHVybiB2YWw7XG4gICAgcmV0dXJuIFN0cmluZyh2YWwpO1xuICB9XG5cbiAgLyoqIEl0ZXJhdG9yIHN1cHBvcnQgKi9cbiAgW1N5bWJvbC5pdGVyYXRvcl0oKTogSXRlcmF0b3I8Um93PiB7XG4gICAgcmV0dXJuIHRoaXMucm93c1tTeW1ib2wuaXRlcmF0b3JdKCk7XG4gIH1cblxuICAvKiogR2V0IHRoZSBudW1iZXIgb2Ygcm93cyAqL1xuICBnZXQgbGVuZ3RoKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMucm93cy5sZW5ndGg7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGFuIEFsaWFzUmVzdWx0IGZvciB0aGUgc3BlY2lmaWVkIGNvbHVtbiBuYW1lLlxuICAgKiBVc2UgdGhpcyB0byBleHRyYWN0IGRhdGEgZnJvbSBhIHNwZWNpZmljIGNvbHVtbiBieSBuYW1lLlxuICAgKiBFeGFtcGxlOiByZXNwLmFsaWFzKFwiblwiKS5hc05vZGVzKClcbiAgICovXG4gIGFsaWFzKGNvbHVtbk5hbWU6IHN0cmluZyk6IEFsaWFzUmVzdWx0IHtcbiAgICBjb25zdCBjb2xJZHggPSB0aGlzLmNvbHVtbnMuaW5kZXhPZihjb2x1bW5OYW1lKTtcbiAgICBpZiAoY29sSWR4ID09PSAtMSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb2x1bW4gYWxpYXMgbm90IGZvdW5kOiAke2NvbHVtbk5hbWV9YCk7XG4gICAgfVxuICAgIHJldHVybiBuZXcgQWxpYXNSZXN1bHQoY29sdW1uTmFtZSwgY29sSWR4LCB0aGlzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgYW4gQWxpYXNSZXN1bHQgZm9yIHRoZSBjb2x1bW4gYXQgdGhlIHNwZWNpZmllZCBpbmRleC5cbiAgICogVXNlIHRoaXMgdG8gZXh0cmFjdCBkYXRhIGZyb20gYSBzcGVjaWZpYyBjb2x1bW4gYnkgaW5kZXguXG4gICAqIEV4YW1wbGU6IHJlc3AuZ2V0KDApLmFzTm9kZXMoKVxuICAgKi9cbiAgZ2V0KGluZGV4OiBudW1iZXIpOiBBbGlhc1Jlc3VsdCB7XG4gICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSB0aGlzLmNvbHVtbnMubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENvbHVtbiBpbmRleCBvdXQgb2YgcmFuZ2U6ICR7aW5kZXh9ICh0b3RhbDogJHt0aGlzLmNvbHVtbnMubGVuZ3RofSlgKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBBbGlhc1Jlc3VsdCh0aGlzLmNvbHVtbnNbaW5kZXhdLCBpbmRleCwgdGhpcyk7XG4gIH1cblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgVXNlIGFsaWFzKCkgb3IgZ2V0KCkgaW5zdGVhZC4gVGhpcyBtZXRob2Qgd2lsbCBiZSByZW1vdmVkIGluIGEgZnV0dXJlIHZlcnNpb24uXG4gICAqIEV4dHJhY3Qgbm9kZXMgZnJvbSByZXNwb25zZSB3aXRoIHNjaGVtYSBpbmZvLlxuICAgKiBTdXBwb3J0cyBib3RoIE5PREUgYW5kIExJU1Qgb2YgTk9ERSBjb2x1bW5zLlxuICAgKi9cbiAgYXNOb2RlcygpOiBOb2RlUmVzdWx0IHtcbiAgICBjb25zdCBub2RlczogTm9kZVtdID0gW107XG4gICAgY29uc3Qgc2NoZW1hcyA9IG5ldyBNYXA8c3RyaW5nLCBTY2hlbWE+KCk7XG5cbiAgICBjb25zdCBjb2xsZWN0Tm9kZSA9ICh2YWw6IGFueSkgPT4ge1xuICAgICAgaWYgKHZhbCAmJiB0eXBlb2YgdmFsLmlkID09PSAnc3RyaW5nJyAmJiAnbGFiZWxzJyBpbiB2YWwpIHtcbiAgICAgICAgY29uc3Qgbm9kZTogTm9kZSA9IHtcbiAgICAgICAgICBpZDogdmFsLmlkLFxuICAgICAgICAgIGxhYmVsczogdmFsLmxhYmVscyB8fCBbXSxcbiAgICAgICAgICBwcm9wZXJ0aWVzOiB2YWwucHJvcGVydGllcyB8fCB7fSxcbiAgICAgICAgfTtcbiAgICAgICAgbm9kZXMucHVzaChub2RlKTtcbiAgICAgICAgZm9yIChjb25zdCBsYWJlbCBvZiBub2RlLmxhYmVscykge1xuICAgICAgICAgIGlmICghc2NoZW1hcy5oYXMobGFiZWwpKSB7XG4gICAgICAgICAgICBzY2hlbWFzLnNldChsYWJlbCwgdGhpcy5idWlsZFNjaGVtYUZyb21Ob2RlKGxhYmVsLCBub2RlKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcblxuICAgIGZvciAoY29uc3Qgcm93IG9mIHRoaXMucm93cykge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByb3cudmFsdWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGxldCBpdGVtVHlwZSA9IHJvdy5nZXRUeXBlKGkpO1xuICAgICAgICBjb25zdCByYXdWYWx1ZSA9IHJvdy52YWx1ZXNbaV07XG4gICAgICAgIGlmIChpdGVtVHlwZSA9PT0gUHJvcGVydHlUeXBlLlVOU0VUICYmIHJhd1ZhbHVlICYmIHR5cGVvZiByYXdWYWx1ZSA9PT0gJ29iamVjdCcgJiYgJ3R5cGUnIGluIHJhd1ZhbHVlKSB7XG4gICAgICAgICAgaXRlbVR5cGUgPSByYXdWYWx1ZS50eXBlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGl0ZW1UeXBlID09PSBQcm9wZXJ0eVR5cGUuTk9ERSkge1xuICAgICAgICAgIGNvbGxlY3ROb2RlKHJvdy5nZXQoaSkpO1xuICAgICAgICB9IGVsc2UgaWYgKGl0ZW1UeXBlID09PSBQcm9wZXJ0eVR5cGUuTElTVCkge1xuICAgICAgICAgIGNvbnN0IGxpc3QgPSByb3cuZ2V0KGkpO1xuICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGxpc3QpKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgbGlzdCkge1xuICAgICAgICAgICAgICBjb2xsZWN0Tm9kZShpdGVtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4geyBub2Rlcywgc2NoZW1hcyB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIFVzZSBhbGlhcygpIG9yIGdldCgpIGluc3RlYWQuIFRoaXMgbWV0aG9kIHdpbGwgYmUgcmVtb3ZlZCBpbiBhIGZ1dHVyZSB2ZXJzaW9uLlxuICAgKiBFeHRyYWN0IGVkZ2VzIGZyb20gcmVzcG9uc2Ugd2l0aCBzY2hlbWEgaW5mby5cbiAgICogU3VwcG9ydHMgYm90aCBFREdFIGFuZCBMSVNUIG9mIEVER0UgY29sdW1ucy5cbiAgICovXG4gIGFzRWRnZXMoKTogRWRnZVJlc3VsdCB7XG4gICAgY29uc3QgZWRnZXM6IEVkZ2VbXSA9IFtdO1xuICAgIGNvbnN0IHNjaGVtYXMgPSBuZXcgTWFwPHN0cmluZywgU2NoZW1hPigpO1xuXG4gICAgY29uc3QgY29sbGVjdEVkZ2UgPSAodmFsOiBhbnkpID0+IHtcbiAgICAgIGlmICh2YWwgJiYgdHlwZW9mIHZhbC5pZCA9PT0gJ3N0cmluZycgJiYgJ2xhYmVsJyBpbiB2YWwpIHtcbiAgICAgICAgY29uc3QgZWRnZTogRWRnZSA9IHtcbiAgICAgICAgICBpZDogdmFsLmlkLFxuICAgICAgICAgIGxhYmVsOiB2YWwubGFiZWwgfHwgJycsXG4gICAgICAgICAgZnJvbU5vZGVJZDogdmFsLmZyb21Ob2RlSWQgfHwgJycsXG4gICAgICAgICAgdG9Ob2RlSWQ6IHZhbC50b05vZGVJZCB8fCAnJyxcbiAgICAgICAgICBwcm9wZXJ0aWVzOiB2YWwucHJvcGVydGllcyB8fCB7fSxcbiAgICAgICAgfTtcbiAgICAgICAgZWRnZXMucHVzaChlZGdlKTtcbiAgICAgICAgaWYgKGVkZ2UubGFiZWwgJiYgIXNjaGVtYXMuaGFzKGVkZ2UubGFiZWwpKSB7XG4gICAgICAgICAgc2NoZW1hcy5zZXQoZWRnZS5sYWJlbCwgdGhpcy5idWlsZFNjaGVtYUZyb21FZGdlKGVkZ2UubGFiZWwsIGVkZ2UpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG5cbiAgICBmb3IgKGNvbnN0IHJvdyBvZiB0aGlzLnJvd3MpIHtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcm93LnZhbHVlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBsZXQgaXRlbVR5cGUgPSByb3cuZ2V0VHlwZShpKTtcbiAgICAgICAgY29uc3QgcmF3VmFsdWUgPSByb3cudmFsdWVzW2ldO1xuICAgICAgICBpZiAoaXRlbVR5cGUgPT09IFByb3BlcnR5VHlwZS5VTlNFVCAmJiByYXdWYWx1ZSAmJiB0eXBlb2YgcmF3VmFsdWUgPT09ICdvYmplY3QnICYmICd0eXBlJyBpbiByYXdWYWx1ZSkge1xuICAgICAgICAgIGl0ZW1UeXBlID0gcmF3VmFsdWUudHlwZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpdGVtVHlwZSA9PT0gUHJvcGVydHlUeXBlLkVER0UpIHtcbiAgICAgICAgICBjb2xsZWN0RWRnZShyb3cuZ2V0KGkpKTtcbiAgICAgICAgfSBlbHNlIGlmIChpdGVtVHlwZSA9PT0gUHJvcGVydHlUeXBlLkxJU1QpIHtcbiAgICAgICAgICBjb25zdCBsaXN0ID0gcm93LmdldChpKTtcbiAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShsaXN0KSkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGxpc3QpIHtcbiAgICAgICAgICAgICAgY29sbGVjdEVkZ2UoaXRlbSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgZWRnZXMsIHNjaGVtYXMgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBVc2UgYWxpYXMoKSBvciBnZXQoKSBpbnN0ZWFkLiBUaGlzIG1ldGhvZCB3aWxsIGJlIHJlbW92ZWQgaW4gYSBmdXR1cmUgdmVyc2lvbi5cbiAgICogRXh0cmFjdCBwYXRocyBmcm9tIHJlc3BvbnNlLlxuICAgKiBQYXRocyBhcmUgaWRlbnRpZmllZCBieSBQcm9wZXJ0eVR5cGUuUEFUSCB0eXBlIGluIHRoZSBUeXBlZFZhbHVlLlxuICAgKi9cbiAgYXNQYXRocygpOiBQYXRoW10ge1xuICAgIGNvbnN0IHBhdGhzOiBQYXRoW10gPSBbXTtcblxuICAgIGZvciAoY29uc3Qgcm93IG9mIHRoaXMucm93cykge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByb3cudmFsdWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIC8vIENoZWNrIHR5cGUgZnJvbSB0eXBlcyBhcnJheSBvciBmcm9tIFR5cGVkVmFsdWUgb2JqZWN0XG4gICAgICAgIGxldCBpdGVtVHlwZSA9IHJvdy5nZXRUeXBlKGkpO1xuICAgICAgICBjb25zdCByYXdWYWx1ZSA9IHJvdy52YWx1ZXNbaV07XG4gICAgICAgIGlmIChpdGVtVHlwZSA9PT0gUHJvcGVydHlUeXBlLlVOU0VUICYmIHJhd1ZhbHVlICYmIHR5cGVvZiByYXdWYWx1ZSA9PT0gJ29iamVjdCcgJiYgJ3R5cGUnIGluIHJhd1ZhbHVlKSB7XG4gICAgICAgICAgaXRlbVR5cGUgPSByYXdWYWx1ZS50eXBlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGl0ZW1UeXBlID09PSBQcm9wZXJ0eVR5cGUuUEFUSCkge1xuICAgICAgICAgIC8vIENvbnZlcnQgVHlwZWRWYWx1ZSB0byBHcWxkYlBhdGhcbiAgICAgICAgICBjb25zdCB2YWwgPSByb3cuZ2V0KGkpIGFzIEdxbGRiUGF0aDtcbiAgICAgICAgICBpZiAodmFsICYmIEFycmF5LmlzQXJyYXkodmFsLm5vZGVzKSkge1xuICAgICAgICAgICAgLy8gQ29udmVydCBHcWxkYk5vZGUvR3FsZGJFZGdlIHRvIE5vZGUvRWRnZVxuICAgICAgICAgICAgY29uc3Qgbm9kZXM6IE5vZGVbXSA9ICh2YWwubm9kZXMgfHwgW10pLm1hcCgobjogR3FsZGJOb2RlKSA9PiAoe1xuICAgICAgICAgICAgICBpZDogbi5pZCB8fCAnJyxcbiAgICAgICAgICAgICAgbGFiZWxzOiBuLmxhYmVscyB8fCBbXSxcbiAgICAgICAgICAgICAgcHJvcGVydGllczogbi5wcm9wZXJ0aWVzIHx8IHt9LFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgY29uc3QgZWRnZXM6IEVkZ2VbXSA9ICh2YWwuZWRnZXMgfHwgW10pLm1hcCgoZTogR3FsZGJFZGdlKSA9PiAoe1xuICAgICAgICAgICAgICBpZDogZS5pZCB8fCAnJyxcbiAgICAgICAgICAgICAgbGFiZWw6IGUubGFiZWwgfHwgJycsXG4gICAgICAgICAgICAgIGZyb21Ob2RlSWQ6IGUuZnJvbU5vZGVJZCB8fCAnJyxcbiAgICAgICAgICAgICAgdG9Ob2RlSWQ6IGUudG9Ob2RlSWQgfHwgJycsXG4gICAgICAgICAgICAgIHByb3BlcnRpZXM6IGUucHJvcGVydGllcyB8fCB7fSxcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIHBhdGhzLnB1c2goeyBub2RlcywgZWRnZXMgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhdGhzO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIFVzZSBhbGlhcygpIG9yIGdldCgpIGluc3RlYWQuIFRoaXMgbWV0aG9kIHdpbGwgYmUgcmVtb3ZlZCBpbiBhIGZ1dHVyZSB2ZXJzaW9uLlxuICAgKiBSZXR1cm4gcmVzcG9uc2UgYXMgZ2VuZXJpYyB0YWJsZS5cbiAgICogSWYgcmVzcG9uc2UgaXMgYSBzaW5nbGUgVEFCTEUgY29sdW1uLCB1bndyYXBzIHRoZSBHcWxkYlRhYmxlIGludG8gcHJvcGVyIGhlYWRlcnMvcm93cy5cbiAgICovXG4gIGFzVGFibGUoKTogVGFibGUge1xuICAgIC8vIElmIHNpbmdsZSBjb2x1bW4gb2YgVEFCTEUgdHlwZSwgdW53cmFwIEdxbGRiVGFibGVcbiAgICBpZiAodGhpcy5jb2x1bW5zLmxlbmd0aCA9PT0gMSAmJiB0aGlzLnJvd3MubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgaXRlbVR5cGUgPSB0aGlzLnJvd3NbMF0uZ2V0VHlwZSgwKTtcbiAgICAgIGlmIChpdGVtVHlwZSA9PT0gUHJvcGVydHlUeXBlLlRBQkxFKSB7XG4gICAgICAgIGNvbnN0IHZhbCA9IHRoaXMucm93c1swXS5nZXQoMCkgYXMgYW55O1xuICAgICAgICBpZiAodmFsICYmICdjb2x1bW5zJyBpbiB2YWwgJiYgJ3Jvd3MnIGluIHZhbCkge1xuICAgICAgICAgIGNvbnN0IGd0ID0gdmFsIGFzIHsgY29sdW1uczogc3RyaW5nW107IHJvd3M6IGFueVtdW10gfTtcbiAgICAgICAgICBjb25zdCBoZWFkZXJzOiBIZWFkZXJbXSA9IGd0LmNvbHVtbnMubWFwKChjb2w6IHN0cmluZywgaTogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgICBsZXQgY29sVHlwZSA9IFByb3BlcnR5VHlwZS5VTlNFVDtcbiAgICAgICAgICAgIGlmIChndC5yb3dzLmxlbmd0aCA+IDAgJiYgaSA8IGd0LnJvd3NbMF0ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHYgPSBndC5yb3dzWzBdW2ldO1xuICAgICAgICAgICAgICBpZiAodHlwZW9mIHYgPT09ICdudW1iZXInKSBjb2xUeXBlID0gTnVtYmVyLmlzSW50ZWdlcih2KSA/IFByb3BlcnR5VHlwZS5JTlQ2NCA6IFByb3BlcnR5VHlwZS5ET1VCTEU7XG4gICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZiB2ID09PSAnc3RyaW5nJykgY29sVHlwZSA9IFByb3BlcnR5VHlwZS5TVFJJTkc7XG4gICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZiB2ID09PSAnYm9vbGVhbicpIGNvbFR5cGUgPSBQcm9wZXJ0eVR5cGUuQk9PTDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB7IG5hbWU6IGNvbCwgdHlwZTogY29sVHlwZSB9O1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybiB7IG5hbWU6IHRoaXMuY29sdW1uc1swXSwgaGVhZGVycywgcm93czogZ3Qucm93cyB9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gRmFsbGJhY2s6IGdlbmVyaWMgbXVsdGktY29sdW1uIHRhYmxlXG4gICAgY29uc3QgaGVhZGVyczogSGVhZGVyW10gPSB0aGlzLmNvbHVtbnMubWFwKGNvbCA9PiAoe1xuICAgICAgbmFtZTogY29sLFxuICAgICAgdHlwZTogUHJvcGVydHlUeXBlLlVOU0VULFxuICAgIH0pKTtcblxuICAgIGNvbnN0IHRhYmxlUm93czogYW55W11bXSA9IHRoaXMucm93cy5tYXAocm93ID0+IHtcbiAgICAgIHJldHVybiB0aGlzLmNvbHVtbnMubWFwKChfLCBpKSA9PiAoaSA8IHJvdy52YWx1ZXMubGVuZ3RoID8gcm93LmdldChpKSA6IG51bGwpKTtcbiAgICB9KTtcblxuICAgIHJldHVybiB7IG5hbWU6ICcnLCBoZWFkZXJzLCByb3dzOiB0YWJsZVJvd3MgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBVc2UgYWxpYXMoKSBvciBnZXQoKSBpbnN0ZWFkLiBUaGlzIG1ldGhvZCB3aWxsIGJlIHJlbW92ZWQgaW4gYSBmdXR1cmUgdmVyc2lvbi5cbiAgICogRXh0cmFjdCBzY2FsYXIgb3IgbGlzdCBhdHRyaWJ1dGUgdmFsdWVzXG4gICAqL1xuICBhc0F0dHIoY29sdW1uTmFtZTogc3RyaW5nKTogQXR0ciB7XG4gICAgY29uc3QgY29sSW5kZXggPSB0aGlzLmNvbHVtbnMuaW5kZXhPZihjb2x1bW5OYW1lKTtcbiAgICBpZiAoY29sSW5kZXggPT09IC0xKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENvbHVtbiBub3QgZm91bmQ6ICR7Y29sdW1uTmFtZX1gKTtcbiAgICB9XG5cbiAgICBjb25zdCB2YWx1ZXM6IGFueVtdID0gW107XG4gICAgbGV0IGF0dHJUeXBlID0gUHJvcGVydHlUeXBlLlVOU0VUO1xuXG4gICAgZm9yIChjb25zdCByb3cgb2YgdGhpcy5yb3dzKSB7XG4gICAgICBpZiAoY29sSW5kZXggPCByb3cudmFsdWVzLmxlbmd0aCkge1xuICAgICAgICAvLyBUcnkgdG8gZ2V0IHR5cGUgZnJvbSByb3cudHlwZXMgZmlyc3QsIHRoZW4gZnJvbSBUeXBlZFZhbHVlIG9iamVjdFxuICAgICAgICBpZiAoYXR0clR5cGUgPT09IFByb3BlcnR5VHlwZS5VTlNFVCkge1xuICAgICAgICAgIGF0dHJUeXBlID0gcm93LmdldFR5cGUoY29sSW5kZXgpO1xuICAgICAgICAgIGlmIChhdHRyVHlwZSA9PT0gUHJvcGVydHlUeXBlLlVOU0VUKSB7XG4gICAgICAgICAgICBjb25zdCByYXdWYWx1ZSA9IHJvdy52YWx1ZXNbY29sSW5kZXhdO1xuICAgICAgICAgICAgaWYgKHJhd1ZhbHVlICYmIHR5cGVvZiByYXdWYWx1ZSA9PT0gJ29iamVjdCcgJiYgJ3R5cGUnIGluIHJhd1ZhbHVlKSB7XG4gICAgICAgICAgICAgIGF0dHJUeXBlID0gcmF3VmFsdWUudHlwZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdmFsdWUgPSByb3cuZ2V0KGNvbEluZGV4KTsgIC8vIFVzZSBnZXQoKSB0byBjb252ZXJ0IFR5cGVkVmFsdWVcbiAgICAgICAgdmFsdWVzLnB1c2godmFsdWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7IG5hbWU6IGNvbHVtbk5hbWUsIHR5cGU6IGF0dHJUeXBlLCB2YWx1ZXMgfTtcbiAgfVxuXG4gIC8vIEhlbHBlciBtZXRob2RzXG5cbiAgcHJpdmF0ZSBidWlsZFNjaGVtYUZyb21Ob2RlKGxhYmVsOiBzdHJpbmcsIG5vZGU6IE5vZGUpOiBTY2hlbWEge1xuICAgIGNvbnN0IHByb3BlcnRpZXM6IFByb3BlcnR5RGVmW10gPSBPYmplY3QuZW50cmllcyhub2RlLnByb3BlcnRpZXMpLm1hcCgoW25hbWUsIHZhbHVlXSkgPT4gKHtcbiAgICAgIG5hbWUsXG4gICAgICB0eXBlOiB0aGlzLmluZmVyUHJvcGVydHlUeXBlKHZhbHVlKSxcbiAgICB9KSk7XG4gICAgcmV0dXJuIHsgbmFtZTogbGFiZWwsIHByb3BlcnRpZXMgfTtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRTY2hlbWFGcm9tRWRnZShsYWJlbDogc3RyaW5nLCBlZGdlOiBFZGdlKTogU2NoZW1hIHtcbiAgICBjb25zdCBwcm9wZXJ0aWVzOiBQcm9wZXJ0eURlZltdID0gT2JqZWN0LmVudHJpZXMoZWRnZS5wcm9wZXJ0aWVzKS5tYXAoKFtuYW1lLCB2YWx1ZV0pID0+ICh7XG4gICAgICBuYW1lLFxuICAgICAgdHlwZTogdGhpcy5pbmZlclByb3BlcnR5VHlwZSh2YWx1ZSksXG4gICAgfSkpO1xuICAgIHJldHVybiB7IG5hbWU6IGxhYmVsLCBwcm9wZXJ0aWVzIH07XG4gIH1cblxuICBwcml2YXRlIGluZmVyUHJvcGVydHlUeXBlKHZhbHVlOiBhbnkpOiBQcm9wZXJ0eVR5cGUge1xuICAgIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkKSByZXR1cm4gUHJvcGVydHlUeXBlLk5VTEw7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2Jvb2xlYW4nKSByZXR1cm4gUHJvcGVydHlUeXBlLkJPT0w7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICAgIHJldHVybiBOdW1iZXIuaXNJbnRlZ2VyKHZhbHVlKSA/IFByb3BlcnR5VHlwZS5JTlQ2NCA6IFByb3BlcnR5VHlwZS5ET1VCTEU7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSByZXR1cm4gUHJvcGVydHlUeXBlLlNUUklORztcbiAgICBpZiAoQnVmZmVyLmlzQnVmZmVyKHZhbHVlKSkgcmV0dXJuIFByb3BlcnR5VHlwZS5CTE9CO1xuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkgcmV0dXJuIFByb3BlcnR5VHlwZS5MSVNUO1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKSByZXR1cm4gUHJvcGVydHlUeXBlLk1BUDtcbiAgICByZXR1cm4gUHJvcGVydHlUeXBlLlVOU0VUO1xuICB9XG59XG5cbi8qKiBSZXN1bHQgb2YgYW4gaW5zZXJ0IG5vZGVzIG9wZXJhdGlvbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJbnNlcnROb2Rlc1Jlc3VsdCB7XG4gIHN1Y2Nlc3M6IGJvb2xlYW47XG4gIG5vZGVJZHM6IHN0cmluZ1tdO1xuICBub2RlQ291bnQ6IG51bWJlcjtcbiAgbWVzc2FnZTogc3RyaW5nO1xufVxuXG4vKiogUmVzdWx0IG9mIGFuIGluc2VydCBlZGdlcyBvcGVyYXRpb24gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW5zZXJ0RWRnZXNSZXN1bHQge1xuICBzdWNjZXNzOiBib29sZWFuO1xuICBlZGdlSWRzOiBzdHJpbmdbXTtcbiAgZWRnZUNvdW50OiBudW1iZXI7XG4gIG1lc3NhZ2U6IHN0cmluZztcbiAgc2tpcHBlZENvdW50OiBudW1iZXI7XG59XG5cbi8qKiBDb25maWd1cmF0aW9uIGZvciB0aGUgdW5pZmllZCBFeHBvcnQgb3BlcmF0aW9uICovXG5leHBvcnQgaW50ZXJmYWNlIEV4cG9ydENvbmZpZyB7XG4gIGdyYXBoTmFtZTogc3RyaW5nO1xuICBiYXRjaFNpemU/OiBudW1iZXI7XG4gIGV4cG9ydE5vZGVzPzogYm9vbGVhbjtcbiAgZXhwb3J0RWRnZXM/OiBib29sZWFuO1xuICBub2RlTGFiZWxzPzogc3RyaW5nW107XG4gIGVkZ2VMYWJlbHM/OiBzdHJpbmdbXTtcbiAgaW5jbHVkZU1ldGFkYXRhPzogYm9vbGVhbjtcbn1cblxuLyoqIFN0YXRpc3RpY3MgZm9yIGFuIGV4cG9ydCBvcGVyYXRpb24gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRXhwb3J0U3RhdHMge1xuICBub2Rlc0V4cG9ydGVkOiBudW1iZXI7XG4gIGVkZ2VzRXhwb3J0ZWQ6IG51bWJlcjtcbiAgYnl0ZXNXcml0dGVuOiBudW1iZXI7XG4gIGR1cmF0aW9uTXM6IG51bWJlcjtcbn1cblxuLyoqIEEgY2h1bmsgb2YgZXhwb3J0ZWQgZGF0YSBpbiBKU09OIExpbmVzIGZvcm1hdCAqL1xuZXhwb3J0IGludGVyZmFjZSBFeHBvcnRDaHVuayB7XG4gIGRhdGE6IEJ1ZmZlcjtcbiAgaXNGaW5hbDogYm9vbGVhbjtcbiAgc3RhdHM/OiBFeHBvcnRTdGF0cztcbn1cblxuLyoqXG4gKiBBIGJhdGNoIG9mIGV4cG9ydGVkIG5vZGVzXG4gKiBAZGVwcmVjYXRlZCBVc2UgZXhwb3J0KCkgd2l0aCBFeHBvcnRDb25maWcgaW5zdGVhZFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEV4cG9ydE5vZGVzUmVzdWx0IHtcbiAgbm9kZXM6IEV4cG9ydGVkTm9kZVtdO1xuICBoYXNNb3JlOiBib29sZWFuO1xufVxuXG4vKipcbiAqIEEgYmF0Y2ggb2YgZXhwb3J0ZWQgZWRnZXNcbiAqIEBkZXByZWNhdGVkIFVzZSBleHBvcnQoKSB3aXRoIEV4cG9ydENvbmZpZyBpbnN0ZWFkXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRXhwb3J0RWRnZXNSZXN1bHQge1xuICBlZGdlczogRXhwb3J0ZWRFZGdlW107XG4gIGhhc01vcmU6IGJvb2xlYW47XG59XG5cbi8qKlxuICogQSBub2RlIGV4cG9ydGVkIGZyb20gdGhlIGRhdGFiYXNlXG4gKiBAZGVwcmVjYXRlZCBVc2UgZXhwb3J0KCkgd2l0aCBFeHBvcnRDb25maWcgaW5zdGVhZFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEV4cG9ydGVkTm9kZSB7XG4gIGlkOiBzdHJpbmc7XG4gIGxhYmVsczogc3RyaW5nW107XG4gIHByb3BlcnRpZXM6IFJlY29yZDxzdHJpbmcsIGFueT47XG59XG5cbi8qKlxuICogQW4gZWRnZSBleHBvcnRlZCBmcm9tIHRoZSBkYXRhYmFzZVxuICogQGRlcHJlY2F0ZWQgVXNlIGV4cG9ydCgpIHdpdGggRXhwb3J0Q29uZmlnIGluc3RlYWRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFeHBvcnRlZEVkZ2Uge1xuICBpZDogc3RyaW5nO1xuICBsYWJlbDogc3RyaW5nO1xuICBmcm9tTm9kZUlkOiBzdHJpbmc7XG4gIHRvTm9kZUlkOiBzdHJpbmc7XG4gIHByb3BlcnRpZXM6IFJlY29yZDxzdHJpbmcsIGFueT47XG59XG5cbi8qKiBSZXByZXNlbnRzIGEgbm9kZSBpbiB0aGUgZ3JhcGggZGF0YWJhc2UgKi9cbmV4cG9ydCBpbnRlcmZhY2UgTm9kZSB7XG4gIGlkOiBzdHJpbmc7XG4gIGxhYmVsczogc3RyaW5nW107XG4gIHByb3BlcnRpZXM6IFJlY29yZDxzdHJpbmcsIGFueT47XG59XG5cbi8qKiBSZXByZXNlbnRzIGFuIGVkZ2UgaW4gdGhlIGdyYXBoIGRhdGFiYXNlICovXG5leHBvcnQgaW50ZXJmYWNlIEVkZ2Uge1xuICBpZDogc3RyaW5nO1xuICBsYWJlbDogc3RyaW5nO1xuICBmcm9tTm9kZUlkOiBzdHJpbmc7XG4gIHRvTm9kZUlkOiBzdHJpbmc7XG4gIHByb3BlcnRpZXM6IFJlY29yZDxzdHJpbmcsIGFueT47XG59XG5cbi8qKiBSZXByZXNlbnRzIGEgcGF0aCBpbiB0aGUgZ3JhcGggZGF0YWJhc2UgKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGF0aCB7XG4gIG5vZGVzOiBOb2RlW107XG4gIGVkZ2VzOiBFZGdlW107XG59XG5cbi8qKiBSZXN1bHQgd3JhcHBlciBmb3Igbm9kZXMgd2l0aCBzY2hlbWEgaW5mb3JtYXRpb24gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTm9kZVJlc3VsdCB7XG4gIG5vZGVzOiBOb2RlW107XG4gIHNjaGVtYXM6IE1hcDxzdHJpbmcsIFNjaGVtYT47XG59XG5cbi8qKiBSZXN1bHQgd3JhcHBlciBmb3IgZWRnZXMgd2l0aCBzY2hlbWEgaW5mb3JtYXRpb24gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRWRnZVJlc3VsdCB7XG4gIGVkZ2VzOiBFZGdlW107XG4gIHNjaGVtYXM6IE1hcDxzdHJpbmcsIFNjaGVtYT47XG59XG4iXX0=
|
|
@@ -54,7 +54,9 @@ function convertGqlResponse(grpcResponse) {
|
|
|
54
54
|
const types = rawValues.map((tv) => protoTypeToEnum(tv?.type));
|
|
55
55
|
return new response_1.Row(values, types);
|
|
56
56
|
});
|
|
57
|
-
return new response_1.Response(columns, rows, parseInt(grpcResponse.row_count || '0', 10), grpcResponse.has_more || false, grpcResponse.warnings || [], parseInt(grpcResponse.rows_affected || '0', 10), grpcResponse.current_graph || ''
|
|
57
|
+
return new response_1.Response(columns, rows, parseInt(grpcResponse.row_count || '0', 10), grpcResponse.has_more || false, grpcResponse.warnings || [], parseInt(grpcResponse.rows_affected || '0', 10), grpcResponse.current_graph || '',
|
|
58
|
+
// Old servers omit these proto3 fields → 0 means "not reported".
|
|
59
|
+
parseInt(grpcResponse.time_cost_ns || '0', 10), parseInt(grpcResponse.disk_cost_ns || '0', 10), parseInt(grpcResponse.compute_cost_ns || '0', 10));
|
|
58
60
|
}
|
|
59
61
|
/**
|
|
60
62
|
* Map proto type string or number to PropertyType enum.
|
|
@@ -252,4 +254,4 @@ function edgeDataToProto(edge) {
|
|
|
252
254
|
properties,
|
|
253
255
|
};
|
|
254
256
|
}
|
|
255
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udmVydGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZXJ2aWNlcy9jb252ZXJ0ZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7R0FFRzs7QUFtQkgsMENBZ0JDO0FBS0QsMENBTUM7QUFLRCxnREFpQkM7QUE0REQsOENBZ0NDO0FBS0Qsd0RBTUM7QUFLRCw0Q0FRQztBQUtELDRDQVdDO0FBS0QsNENBU0M7QUFLRCxrREFXQztBQUtELDRDQVNDO0FBS0QsMENBWUM7QUFLRCwwQ0FjQztBQXRSRCwwQ0FBNEM7QUFDNUMsb0NBUWtCO0FBS2xCOztHQUVHO0FBQ0gsU0FBZ0IsZUFBZSxDQUM3QixLQUFhLEVBQ2IsT0FBdUIsRUFDdkIsTUFBbUIsRUFDbkIsV0FBeUI7SUFFekIsT0FBTztRQUNMLEdBQUcsRUFBRSxLQUFLO1FBQ1YsVUFBVSxFQUFFLFdBQVcsRUFBRSxTQUFTLElBQUksT0FBTyxFQUFFLFlBQVksSUFBSSxNQUFNLENBQUMsWUFBWSxJQUFJLEVBQUU7UUFDeEYsVUFBVSxFQUFFLGVBQWUsQ0FBQyxXQUFXLEVBQUUsVUFBVSxDQUFDO1FBQ3BELFVBQVUsRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEdBQUc7UUFDMUMsY0FBYyxFQUFFLFdBQVcsRUFBRSxhQUFhLEVBQUUsUUFBUSxFQUFFLElBQUksR0FBRztRQUM3RCxPQUFPLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLFdBQVcsRUFBRSxPQUFPLElBQUksTUFBTSxDQUFDLE9BQU8sSUFBSSxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxpQ0FBaUM7UUFDaEgsU0FBUyxFQUFFLFdBQVcsRUFBRSxRQUFRLElBQUksS0FBSztRQUN6QyxnQkFBZ0IsRUFBRSxXQUFXLEVBQUUsY0FBYyxJQUFJLENBQUM7S0FDbkQsQ0FBQztBQUNKLENBQUM7QUFFRDs7R0FFRztBQUNILFNBQWdCLGVBQWUsQ0FBQyxNQUE0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QUM7UUFDNUMsQ0FBQztJQUNILENBQUM7SUFDRCxPQUFPO1FBQ0wsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRTtRQUNqQixNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sSUFBSSxFQUFFO1FBQ3pCLFVBQVU7S0FDWCxDQUFDO0FBQ0osQ0FBQztBQUVEOztHQUVHO0FBQ0gsU0FBZ0IsZUFBZSxDQUFDLElBQVM7SUFDdkMsTUFBTSxVQUFVLEdBQXdCLEVBQUUsQ0FBQztJQUMzQyxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUNwQixLQUFLLE1BQU0sQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztZQUMzRCxVQUFVLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBQSx3QkFBZ0IsRUFBQyxLQUFLLENBQUMsQ0FBQztRQUM1QyxDQUFDO0lBQ0gsQ0FBQztJQUNELE9BQU87UUFDTCxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFO1FBQ2pCLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxJQUFJLEVBQUU7UUFDdkIsWUFBWSxFQUFFLElBQUksQ0FBQyxVQUFVLElBQUksRUFBRTtRQUNuQyxVQUFVLEVBQUUsSUFBSSxDQUFDLFFBQVEsSUFBSSxFQUFFO1FBQy9CLFVBQVU7S0FDWCxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVHlwZSBjb252ZXJzaW9uIHV0aWxpdGllcyBiZXR3ZWVuIGdSUEMgcHJvdG8gdHlwZXMgYW5kIEphdmFTY3JpcHQgdHlwZXMuXG4gKi9cblxuaW1wb3J0IHsgUmVzcG9uc2UsIFJvdyB9IGZyb20gJy4uL3Jlc3BvbnNlJztcbmltcG9ydCB7XG4gIEdyYXBoVHlwZSxcbiAgSGVhbHRoU3RhdHVzLFxuICBDYWNoZVR5cGUsXG4gIEdyYXBoSW5mbyxcbiAgY3JlYXRlVHlwZWRWYWx1ZSxcbiAgUHJvcGVydHlUeXBlLFxuICB0eXBlZFZhbHVlVG9KUyxcbn0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgR3FsZGJDb25maWcgfSBmcm9tICcuLi9jb25maWcnO1xuaW1wb3J0IHsgU2Vzc2lvbiB9IGZyb20gJy4uL3Nlc3Npb24nO1xuaW1wb3J0IHsgUXVlcnlDb25maWcgfSBmcm9tICcuLi9jbGllbnQnO1xuXG4vKipcbiAqIEJ1aWxkIGEgR1FMIHJlcXVlc3QgZnJvbSBjb25maWcuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBidWlsZEdxbFJlcXVlc3QoXG4gIHF1ZXJ5OiBzdHJpbmcsXG4gIHNlc3Npb246IFNlc3Npb24gfCBudWxsLFxuICBjb25maWc6IEdxbGRiQ29uZmlnLFxuICBxdWVyeUNvbmZpZz86IFF1ZXJ5Q29uZmlnXG4pOiBhbnkge1xuICByZXR1cm4ge1xuICAgIGdxbDogcXVlcnksXG4gICAgZ3JhcGhfbmFtZTogcXVlcnlDb25maWc/LmdyYXBoTmFtZSB8fCBzZXNzaW9uPy5kZWZhdWx0R3JhcGggfHwgY29uZmlnLmRlZmF1bHRHcmFwaCB8fCAnJyxcbiAgICBwYXJhbWV0ZXJzOiBidWlsZFBhcmFtZXRlcnMocXVlcnlDb25maWc/LnBhcmFtZXRlcnMpLFxuICAgIHNlc3Npb25faWQ6IHNlc3Npb24/LmlkPy50b1N0cmluZygpIHx8ICcwJyxcbiAgICB0cmFuc2FjdGlvbl9pZDogcXVlcnlDb25maWc/LnRyYW5zYWN0aW9uSWQ/LnRvU3RyaW5nKCkgfHwgJzAnLFxuICAgIHRpbWVvdXQ6IE1hdGguZmxvb3IoKHF1ZXJ5Q29uZmlnPy50aW1lb3V0IHx8IGNvbmZpZy50aW1lb3V0IHx8IDMwMDAwKSAvIDEwMDApLCAvLyBDb252ZXJ0IG1zIHRvIHNlY29uZHMgZm9yIGdSUENcbiAgICByZWFkX29ubHk6IHF1ZXJ5Q29uZmlnPy5yZWFkT25seSB8fCBmYWxzZSxcbiAgICBtYXhfcGF0aF9yZXN1bHRzOiBxdWVyeUNvbmZpZz8ubWF4UGF0aFJlc3VsdHMgfHwgMCxcbiAgfTtcbn1cblxuLyoqXG4gKiBCdWlsZCBwYXJhbWV0ZXJzIGFycmF5IGZvciBnUlBDLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRQYXJhbWV0ZXJzKHBhcmFtcz86IFJlY29yZDxzdHJpbmcsIGFueT4pOiBhbnlbXSB7XG4gIGlmICghcGFyYW1zKSByZXR1cm4gW107XG4gIHJldHVybiBPYmplY3QuZW50cmllcyhwYXJhbXMpLm1hcCgoW25hbWUsIHZhbHVlXSkgPT4gKHtcbiAgICBuYW1lLFxuICAgIHZhbHVlOiBjcmVhdGVUeXBlZFZhbHVlKHZhbHVlKSxcbiAgfSkpO1xufVxuXG4vKipcbiAqIENvbnZlcnQgZ1JQQyByZXNwb25zZSB0byBSZXNwb25zZSBvYmplY3QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0R3FsUmVzcG9uc2UoZ3JwY1Jlc3BvbnNlOiBhbnkpOiBSZXNwb25zZSB7XG4gIGNvbnN0IGNvbHVtbnMgPSBncnBjUmVzcG9uc2UuY29sdW1ucyB8fCBbXTtcbiAgY29uc3Qgcm93czogUm93W10gPSAoZ3JwY1Jlc3BvbnNlLnJvd3MgfHwgW10pLm1hcCgocm93OiBhbnkpID0+IHtcbiAgICBjb25zdCByYXdWYWx1ZXMgPSByb3cudmFsdWVzIHx8IFtdO1xuICAgIGNvbnN0IHZhbHVlcyA9IHJhd1ZhbHVlcy5tYXAoKHR2OiBhbnkpID0+IGNvbnZlcnRUeXBlZFZhbHVlKHR2KSk7XG4gICAgY29uc3QgdHlwZXMgPSByYXdWYWx1ZXMubWFwKCh0djogYW55KSA9PiBwcm90b1R5cGVUb0VudW0odHY/LnR5cGUpKTtcbiAgICByZXR1cm4gbmV3IFJvdyh2YWx1ZXMsIHR5cGVzKTtcbiAgfSk7XG4gIHJldHVybiBuZXcgUmVzcG9uc2UoXG4gICAgY29sdW1ucyxcbiAgICByb3dzLFxuICAgIHBhcnNlSW50KGdycGNSZXNwb25zZS5yb3dfY291bnQgfHwgJzAnLCAxMCksXG4gICAgZ3JwY1Jlc3BvbnNlLmhhc19tb3JlIHx8IGZhbHNlLFxuICAgIGdycGNSZXNwb25zZS53YXJuaW5ncyB8fCBbXSxcbiAgICBwYXJzZUludChncnBjUmVzcG9uc2Uucm93c19hZmZlY3RlZCB8fCAnMCcsIDEwKSxcbiAgICBncnBjUmVzcG9uc2UuY3VycmVudF9ncmFwaCB8fCAnJ1xuICApO1xufVxuXG4vKipcbiAqIE1hcCBwcm90byB0eXBlIHN0cmluZyBvciBudW1iZXIgdG8gUHJvcGVydHlUeXBlIGVudW0uXG4gKiBIYW5kbGVzIGJvdGggc3RyaW5nIGVudW0gbmFtZXMgKGUuZy4sICdQUk9QRVJUWV9UWVBFX1NUUklORycpIGFuZCBudW1lcmljIHZhbHVlcy5cbiAqL1xuZnVuY3Rpb24gcHJvdG9UeXBlVG9FbnVtKHByb3RvVHlwZTogc3RyaW5nIHwgbnVtYmVyKTogUHJvcGVydHlUeXBlIHtcbiAgLy8gSGFuZGxlIG51bWVyaWMgZW51bSB2YWx1ZXMgZGlyZWN0bHlcbiAgaWYgKHR5cGVvZiBwcm90b1R5cGUgPT09ICdudW1iZXInKSB7XG4gICAgLy8gSWYgaXQncyBhbHJlYWR5IGEgdmFsaWQgUHJvcGVydHlUeXBlIG51bWJlciwgcmV0dXJuIGl0IGRpcmVjdGx5XG4gICAgLy8gUHJvcGVydHlUeXBlIHJhbmdlcyBmcm9tIFVOU0VUKDApIHRvIEVER0UoMzMpXG4gICAgaWYgKHByb3RvVHlwZSA+PSBQcm9wZXJ0eVR5cGUuVU5TRVQgJiYgcHJvdG9UeXBlIDw9IFByb3BlcnR5VHlwZS5FREdFKSB7XG4gICAgICByZXR1cm4gcHJvdG9UeXBlIGFzIFByb3BlcnR5VHlwZTtcbiAgICB9XG4gICAgcmV0dXJuIFByb3BlcnR5VHlwZS5OVUxMO1xuICB9XG5cbiAgY29uc3QgdHlwZU1hcDogUmVjb3JkPHN0cmluZywgUHJvcGVydHlUeXBlPiA9IHtcbiAgICAnUFJPUEVSVFlfVFlQRV9OVUxMJzogUHJvcGVydHlUeXBlLk5VTEwsXG4gICAgJ1BST1BFUlRZX1RZUEVfVU5TRVQnOiBQcm9wZXJ0eVR5cGUuVU5TRVQsXG4gICAgJ1BST1BFUlRZX1RZUEVfQk9PTCc6IFByb3BlcnR5VHlwZS5CT09MLFxuICAgICdQUk9QRVJUWV9UWVBFX0lOVDMyJzogUHJvcGVydHlUeXBlLklOVDMyLFxuICAgICdQUk9QRVJUWV9UWVBFX1VJTlQzMic6IFByb3BlcnR5VHlwZS5VSU5UMzIsXG4gICAgJ1BST1BFUlRZX1RZUEVfSU5UNjQnOiBQcm9wZXJ0eVR5cGUuSU5UNjQsXG4gICAgJ1BST1BFUlRZX1RZUEVfVUlOVDY0JzogUHJvcGVydHlUeXBlLlVJTlQ2NCxcbiAgICAnUFJPUEVSVFlfVFlQRV9GTE9BVCc6IFByb3BlcnR5VHlwZS5GTE9BVCxcbiAgICAnUFJPUEVSVFlfVFlQRV9ET1VCTEUnOiBQcm9wZXJ0eVR5cGUuRE9VQkxFLFxuICAgICdQUk9QRVJUWV9UWVBFX1NUUklORyc6IFByb3BlcnR5VHlwZS5TVFJJTkcsXG4gICAgJ1BST1BFUlRZX1RZUEVfVEVYVCc6IFByb3BlcnR5VHlwZS5URVhULFxuICAgICdQUk9QRVJUWV9UWVBFX0JMT0InOiBQcm9wZXJ0eVR5cGUuQkxPQixcbiAgICAnUFJPUEVSVFlfVFlQRV9USU1FU1RBTVAnOiBQcm9wZXJ0eVR5cGUuVElNRVNUQU1QLFxuICAgICdQUk9QRVJUWV9UWVBFX0RBVEVUSU1FJzogUHJvcGVydHlUeXBlLkRBVEVUSU1FLFxuICAgICdQUk9QRVJUWV9UWVBFX0RBVEUnOiBQcm9wZXJ0eVR5cGUuREFURSxcbiAgICAnUFJPUEVSVFlfVFlQRV9MT0NBTF9EQVRFVElNRSc6IFByb3BlcnR5VHlwZS5MT0NBTF9EQVRFVElNRSxcbiAgICAnUFJPUEVSVFlfVFlQRV9aT05FRF9EQVRFVElNRSc6IFByb3BlcnR5VHlwZS5aT05FRF9EQVRFVElNRSxcbiAgICAnUFJPUEVSVFlfVFlQRV9MT0NBTF9USU1FJzogUHJvcGVydHlUeXBlLkxPQ0FMX1RJTUUsXG4gICAgJ1BST1BFUlRZX1RZUEVfWk9ORURfVElNRSc6IFByb3BlcnR5VHlwZS5aT05FRF9USU1FLFxuICAgICdQUk9QRVJUWV9UWVBFX1lFQVJfVE9fTU9OVEgnOiBQcm9wZXJ0eVR5cGUuWUVBUl9UT19NT05USCxcbiAgICAnUFJPUEVSVFlfVFlQRV9EQVlfVE9fU0VDT05EJzogUHJvcGVydHlUeXBlLkRBWV9UT19TRUNPTkQsXG4gICAgJ1BST1BFUlRZX1RZUEVfREVDSU1BTCc6IFByb3BlcnR5VHlwZS5ERUNJTUFMLFxuICAgICdQUk9QRVJUWV9UWVBFX1BPSU5UJzogUHJvcGVydHlUeXBlLlBPSU5ULFxuICAgICdQUk9QRVJUWV9UWVBFX1BPSU5UM0QnOiBQcm9wZXJ0eVR5cGUuUE9JTlQzRCxcbiAgICAnUFJPUEVSVFlfVFlQRV9WRUNUT1InOiBQcm9wZXJ0eVR5cGUuVkVDVE9SLFxuICAgICdQUk9QRVJUWV9UWVBFX0xJU1QnOiBQcm9wZXJ0eVR5cGUuTElTVCxcbiAgICAnUFJPUEVSVFlfVFlQRV9TRVQnOiBQcm9wZXJ0eVR5cGUuU0VULFxuICAgICdQUk9QRVJUWV9UWVBFX01BUCc6IFByb3BlcnR5VHlwZS5NQVAsXG4gICAgJ1BST1BFUlRZX1RZUEVfTk9ERSc6IFByb3BlcnR5VHlwZS5OT0RFLFxuICAgICdQUk9QRVJUWV9UWVBFX0VER0UnOiBQcm9wZXJ0eVR5cGUuRURHRSxcbiAgICAnUFJPUEVSVFlfVFlQRV9QQVRIJzogUHJvcGVydHlUeXBlLlBBVEgsXG4gICAgJ1BST1BFUlRZX1RZUEVfUkVDT1JEJzogUHJvcGVydHlUeXBlLlJFQ09SRCxcbiAgICAnUFJPUEVSVFlfVFlQRV9UQUJMRSc6IFByb3BlcnR5VHlwZS5UQUJMRSxcbiAgICAnUFJPUEVSVFlfVFlQRV9FUlJPUic6IFByb3BlcnR5VHlwZS5FUlJPUixcbiAgfTtcbiAgcmV0dXJuIHR5cGVNYXBbcHJvdG9UeXBlXSA/PyBQcm9wZXJ0eVR5cGUuTlVMTDtcbn1cblxuLyoqXG4gKiBDb252ZXJ0IGdSUEMgVHlwZWRWYWx1ZSB0byBKUyB2YWx1ZS5cbiAqIFVzZXMgdGhlIHNhbWUgZGVjb2RpbmcgbG9naWMgYXMgdHlwZWRWYWx1ZVRvSlMgZm9yIGNvbnNpc3RlbmN5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gY29udmVydFR5cGVkVmFsdWUodHY6IGFueSk6IGFueSB7XG4gIGlmICghdHYgfHwgdHYuaXNfbnVsbCB8fCB0di5pc051bGwpIHJldHVybiBudWxsO1xuXG4gIGNvbnN0IGRhdGEgPSB0di5kYXRhO1xuICBjb25zdCBwcm90b1R5cGUgPSB0di50eXBlO1xuXG4gIC8vIEhhbmRsZSBudWxsIHR5cGVzIChib3RoIHN0cmluZyBhbmQgbnVtZXJpYyBlbnVtIHZhbHVlcylcbiAgaWYgKHByb3RvVHlwZSA9PT0gJ1BST1BFUlRZX1RZUEVfTlVMTCcgfHwgcHJvdG9UeXBlID09PSAnUFJPUEVSVFlfVFlQRV9VTlNFVCcgfHxcbiAgICAgIHByb3RvVHlwZSA9PT0gUHJvcGVydHlUeXBlLk5VTEwgfHwgcHJvdG9UeXBlID09PSBQcm9wZXJ0eVR5cGUuVU5TRVQpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8vIEhhbmRsZSBlbXB0eSBkYXRhIC0gYnV0IFNUUklORyB0eXBlIHdpdGggZW1wdHkgZGF0YSBzaG91bGQgcmV0dXJuIFwiXCJcbiAgaWYgKCFkYXRhIHx8IGRhdGEubGVuZ3RoID09PSAwKSB7XG4gICAgY29uc3QgaXNTdHJpbmdUeXBlID0gcHJvdG9UeXBlID09PSAnUFJPUEVSVFlfVFlQRV9TVFJJTkcnIHx8IHByb3RvVHlwZSA9PT0gJ1BST1BFUlRZX1RZUEVfVEVYVCcgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICBwcm90b1R5cGUgPT09IFByb3BlcnR5VHlwZS5TVFJJTkcgfHwgcHJvdG9UeXBlID09PSBQcm9wZXJ0eVR5cGUuVEVYVDtcbiAgICBjb25zdCBpc0Jsb2JUeXBlID0gcHJvdG9UeXBlID09PSAnUFJPUEVSVFlfVFlQRV9CTE9CJyB8fCBwcm90b1R5cGUgPT09IFByb3BlcnR5VHlwZS5CTE9CO1xuXG4gICAgaWYgKGlzU3RyaW5nVHlwZSkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgICBpZiAoaXNCbG9iVHlwZSkge1xuICAgICAgcmV0dXJuIEJ1ZmZlci5hbGxvYygwKTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBidWYgPSBCdWZmZXIuZnJvbShkYXRhKTtcbiAgY29uc3QgZW51bVR5cGUgPSBwcm90b1R5cGVUb0VudW0ocHJvdG9UeXBlKTtcblxuICAvLyBVc2UgdHlwZWRWYWx1ZVRvSlMgZm9yIGNvbnNpc3RlbnQgZGVjb2RpbmdcbiAgcmV0dXJuIHR5cGVkVmFsdWVUb0pTKHsgdHlwZTogZW51bVR5cGUsIGRhdGE6IGJ1ZiwgaXNOdWxsOiBmYWxzZSB9KTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0IHByb3RvIHByb3BlcnRpZXMgbWFwIHRvIEpTIG9iamVjdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnRQcm90b1Byb3BlcnRpZXMocHJvdG9Qcm9wczogUmVjb3JkPHN0cmluZywgYW55Pik6IFJlY29yZDxzdHJpbmcsIGFueT4ge1xuICBjb25zdCByZXN1bHQ6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcbiAgZm9yIChjb25zdCBba2V5LCB0dl0gb2YgT2JqZWN0LmVudHJpZXMocHJvdG9Qcm9wcykpIHtcbiAgICByZXN1bHRba2V5XSA9IGNvbnZlcnRUeXBlZFZhbHVlKHR2KTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIENvbnZlcnQgR3JhcGhJbmZvIGZyb20gcHJvdG8gdG8gSlMgb2JqZWN0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gY29udmVydEdyYXBoSW5mbyhnOiBhbnkpOiBHcmFwaEluZm8ge1xuICByZXR1cm4ge1xuICAgIG5hbWU6IGcubmFtZSB8fCAnJyxcbiAgICBncmFwaFR5cGU6IHByb3RvVG9HcmFwaFR5cGUoZy5ncmFwaF90eXBlKSxcbiAgICBub2RlQ291bnQ6IHBhcnNlSW50KGcubm9kZV9jb3VudCB8fCAnMCcsIDEwKSxcbiAgICBlZGdlQ291bnQ6IHBhcnNlSW50KGcuZWRnZV9jb3VudCB8fCAnMCcsIDEwKSxcbiAgICBkZXNjcmlwdGlvbjogZy5kZXNjcmlwdGlvbiB8fCAnJyxcbiAgfTtcbn1cblxuLyoqXG4gKiBNYXAgR3JhcGhUeXBlIGVudW0gdG8gcHJvdG8gc3RyaW5nLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JhcGhUeXBlVG9Qcm90byhncmFwaFR5cGU6IEdyYXBoVHlwZSk6IHN0cmluZyB7XG4gIHN3aXRjaCAoZ3JhcGhUeXBlKSB7XG4gICAgY2FzZSBHcmFwaFR5cGUuT1BFTjpcbiAgICAgIHJldHVybiAnR1JBUEhfVFlQRV9PUEVOJztcbiAgICBjYXNlIEdyYXBoVHlwZS5DTE9TRUQ6XG4gICAgICByZXR1cm4gJ0dSQVBIX1RZUEVfQ0xPU0VEJztcbiAgICBjYXNlIEdyYXBoVHlwZS5PTlRPTE9HWTpcbiAgICAgIHJldHVybiAnR1JBUEhfVFlQRV9PTlRPTE9HWSc7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiAnR1JBUEhfVFlQRV9PUEVOJztcbiAgfVxufVxuXG4vKipcbiAqIE1hcCBwcm90byBzdHJpbmcgdG8gR3JhcGhUeXBlIGVudW0uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcm90b1RvR3JhcGhUeXBlKHByb3RvOiBzdHJpbmcpOiBHcmFwaFR5cGUge1xuICBzd2l0Y2ggKHByb3RvKSB7XG4gICAgY2FzZSAnR1JBUEhfVFlQRV9DTE9TRUQnOlxuICAgICAgcmV0dXJuIEdyYXBoVHlwZS5DTE9TRUQ7XG4gICAgY2FzZSAnR1JBUEhfVFlQRV9PTlRPTE9HWSc6XG4gICAgICByZXR1cm4gR3JhcGhUeXBlLk9OVE9MT0dZO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gR3JhcGhUeXBlLk9QRU47XG4gIH1cbn1cblxuLyoqXG4gKiBNYXAgcHJvdG8gSGVhbHRoU3RhdHVzIHRvIGVudW0uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcm90b1RvSGVhbHRoU3RhdHVzKHByb3RvOiBzdHJpbmcpOiBIZWFsdGhTdGF0dXMge1xuICBzd2l0Y2ggKHByb3RvKSB7XG4gICAgY2FzZSAnSEVBTFRIX1NUQVRVU19TRVJWSU5HJzpcbiAgICAgIHJldHVybiBIZWFsdGhTdGF0dXMuU0VSVklORztcbiAgICBjYXNlICdIRUFMVEhfU1RBVFVTX05PVF9TRVJWSU5HJzpcbiAgICAgIHJldHVybiBIZWFsdGhTdGF0dXMuTk9UX1NFUlZJTkc7XG4gICAgY2FzZSAnSEVBTFRIX1NUQVRVU19TRVJWSUNFX1VOS05PV04nOlxuICAgICAgcmV0dXJuIEhlYWx0aFN0YXR1cy5TRVJWSUNFX1VOS05PV047XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBIZWFsdGhTdGF0dXMuVU5LTk9XTjtcbiAgfVxufVxuXG4vKipcbiAqIE1hcCBDYWNoZVR5cGUgdG8gcHJvdG8gc3RyaW5nLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY2FjaGVUeXBlVG9Qcm90byhjYWNoZVR5cGU6IENhY2hlVHlwZSk6IHN0cmluZyB7XG4gIHN3aXRjaCAoY2FjaGVUeXBlKSB7XG4gICAgY2FzZSBDYWNoZVR5cGUuQVNUOlxuICAgICAgcmV0dXJuICdDQUNIRV9UWVBFX0FTVCc7XG4gICAgY2FzZSBDYWNoZVR5cGUuUExBTjpcbiAgICAgIHJldHVybiAnQ0FDSEVfVFlQRV9QTEFOJztcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuICdDQUNIRV9UWVBFX0FMTCc7XG4gIH1cbn1cblxuLyoqXG4gKiBDb252ZXJ0IE5vZGVEYXRhIHRvIHByb3RvIGZvcm1hdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5vZGVEYXRhVG9Qcm90byhub2RlOiBhbnkpOiBhbnkge1xuICBjb25zdCBwcm9wZXJ0aWVzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge307XG4gIGlmIChub2RlLnByb3BlcnRpZXMpIHtcbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhub2RlLnByb3BlcnRpZXMpKSB7XG4gICAgICBwcm9wZXJ0aWVzW2tleV0gPSBjcmVhdGVUeXBlZFZhbHVlKHZhbHVlKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBpZDogbm9kZS5pZCB8fCAnJyxcbiAgICBsYWJlbHM6IG5vZGUubGFiZWxzIHx8IFtdLFxuICAgIHByb3BlcnRpZXMsXG4gIH07XG59XG5cbi8qKlxuICogQ29udmVydCBFZGdlRGF0YSB0byBwcm90byBmb3JtYXQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlZGdlRGF0YVRvUHJvdG8oZWRnZTogYW55KTogYW55IHtcbiAgY29uc3QgcHJvcGVydGllczogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9O1xuICBpZiAoZWRnZS5wcm9wZXJ0aWVzKSB7XG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoZWRnZS5wcm9wZXJ0aWVzKSkge1xuICAgICAgcHJvcGVydGllc1trZXldID0gY3JlYXRlVHlwZWRWYWx1ZSh2YWx1ZSk7XG4gICAgfVxuICB9XG4gIHJldHVybiB7XG4gICAgaWQ6IGVkZ2UuaWQgfHwgJycsXG4gICAgbGFiZWw6IGVkZ2UubGFiZWwgfHwgJycsXG4gICAgZnJvbV9ub2RlX2lkOiBlZGdlLmZyb21Ob2RlSWQgfHwgJycsXG4gICAgdG9fbm9kZV9pZDogZWRnZS50b05vZGVJZCB8fCAnJyxcbiAgICBwcm9wZXJ0aWVzLFxuICB9O1xufVxuIl19
|
|
257
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udmVydGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZXJ2aWNlcy9jb252ZXJ0ZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7R0FFRzs7QUFtQkgsMENBZ0JDO0FBS0QsMENBTUM7QUFLRCxnREFxQkM7QUE0REQsOENBZ0NDO0FBS0Qsd0RBTUM7QUFLRCw0Q0FRQztBQUtELDRDQVdDO0FBS0QsNENBU0M7QUFLRCxrREFXQztBQUtELDRDQVNDO0FBS0QsMENBWUM7QUFLRCwwQ0FjQztBQTFSRCwwQ0FBNEM7QUFDNUMsb0NBUWtCO0FBS2xCOztHQUVHO0FBQ0gsU0FBZ0IsZUFBZSxDQUM3QixLQUFhLEVBQ2IsT0FBdUIsRUFDdkIsTUFBbUIsRUFDbkIsV0FBeUI7SUFFekIsT0FBTztRQUNMLEdBQUcsRUFBRSxLQUFLO1FBQ1YsVUFBVSxFQUFFLFdBQVcsRUFBRSxTQUFTLElBQUksT0FBTyxFQUFFLFlBQVksSUFBSSxNQUFNLENBQUMsWUFBWSxJQUFJLEVBQUU7UUFDeEYsVUFBVSxFQUFFLGVBQWUsQ0FBQyxXQUFXLEVBQUUsVUFBVSxDQUFDO1FBQ3BELFVBQVUsRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEdBQUc7UUFDMUMsY0FBYyxFQUFFLFdBQVcsRUFBRSxhQUFhLEVBQUUsUUFBUSxFQUFFLElBQUksR0FBRztRQUM3RCxPQUFPLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLFdBQVcsRUFBRSxPQUFPLElBQUksTUFBTSxDQUFDLE9BQU8sSUFBSSxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxpQ0FBaUM7UUFDaEgsU0FBUyxFQUFFLFdBQVcsRUFBRSxRQUFRLElBQUksS0FBSztRQUN6QyxnQkFBZ0IsRUFBRSxXQUFXLEVBQUUsY0FBYyxJQUFJLENBQUM7S0FDbkQsQ0FBQztBQUNKLENBQUM7QUFFRDs7R0FFRztBQUNILFNBQWdCLGVBQWUsQ0FBQyxNQUE0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SUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ3BCLEtBQUssTUFBTSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO1lBQzNELFVBQVUsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFBLHdCQUFnQixFQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzVDLENBQUM7SUFDSCxDQUFDO0lBQ0QsT0FBTztRQUNMLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUU7UUFDakIsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLElBQUksRUFBRTtRQUN6QixVQUFVO0tBQ1gsQ0FBQztBQUNKLENBQUM7QUFFRDs7R0FFRztBQUNILFNBQWdCLGVBQWUsQ0FBQyxJQUFTO0lBQ3ZDLE1BQU0sVUFBVSxHQUF3QixFQUFFLENBQUM7SUFDM0MsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDcEIsS0FBSyxNQUFNLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7WUFDM0QsVUFBVSxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUEsd0JBQWdCLEVBQUMsS0FBSyxDQUFDLENBQUM7UUFDNUMsQ0FBQztJQUNILENBQUM7SUFDRCxPQUFPO1FBQ0wsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRTtRQUNqQixLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssSUFBSSxFQUFFO1FBQ3ZCLFlBQVksRUFBRSxJQUFJLENBQUMsVUFBVSxJQUFJLEVBQUU7UUFDbkMsVUFBVSxFQUFFLElBQUksQ0FBQyxRQUFRLElBQUksRUFBRTtRQUMvQixVQUFVO0tBQ1gsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFR5cGUgY29udmVyc2lvbiB1dGlsaXRpZXMgYmV0d2VlbiBnUlBDIHByb3RvIHR5cGVzIGFuZCBKYXZhU2NyaXB0IHR5cGVzLlxuICovXG5cbmltcG9ydCB7IFJlc3BvbnNlLCBSb3cgfSBmcm9tICcuLi9yZXNwb25zZSc7XG5pbXBvcnQge1xuICBHcmFwaFR5cGUsXG4gIEhlYWx0aFN0YXR1cyxcbiAgQ2FjaGVUeXBlLFxuICBHcmFwaEluZm8sXG4gIGNyZWF0ZVR5cGVkVmFsdWUsXG4gIFByb3BlcnR5VHlwZSxcbiAgdHlwZWRWYWx1ZVRvSlMsXG59IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IEdxbGRiQ29uZmlnIH0gZnJvbSAnLi4vY29uZmlnJztcbmltcG9ydCB7IFNlc3Npb24gfSBmcm9tICcuLi9zZXNzaW9uJztcbmltcG9ydCB7IFF1ZXJ5Q29uZmlnIH0gZnJvbSAnLi4vY2xpZW50JztcblxuLyoqXG4gKiBCdWlsZCBhIEdRTCByZXF1ZXN0IGZyb20gY29uZmlnLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRHcWxSZXF1ZXN0KFxuICBxdWVyeTogc3RyaW5nLFxuICBzZXNzaW9uOiBTZXNzaW9uIHwgbnVsbCxcbiAgY29uZmlnOiBHcWxkYkNvbmZpZyxcbiAgcXVlcnlDb25maWc/OiBRdWVyeUNvbmZpZ1xuKTogYW55IHtcbiAgcmV0dXJuIHtcbiAgICBncWw6IHF1ZXJ5LFxuICAgIGdyYXBoX25hbWU6IHF1ZXJ5Q29uZmlnPy5ncmFwaE5hbWUgfHwgc2Vzc2lvbj8uZGVmYXVsdEdyYXBoIHx8IGNvbmZpZy5kZWZhdWx0R3JhcGggfHwgJycsXG4gICAgcGFyYW1ldGVyczogYnVpbGRQYXJhbWV0ZXJzKHF1ZXJ5Q29uZmlnPy5wYXJhbWV0ZXJzKSxcbiAgICBzZXNzaW9uX2lkOiBzZXNzaW9uPy5pZD8udG9TdHJpbmcoKSB8fCAnMCcsXG4gICAgdHJhbnNhY3Rpb25faWQ6IHF1ZXJ5Q29uZmlnPy50cmFuc2FjdGlvbklkPy50b1N0cmluZygpIHx8ICcwJyxcbiAgICB0aW1lb3V0OiBNYXRoLmZsb29yKChxdWVyeUNvbmZpZz8udGltZW91dCB8fCBjb25maWcudGltZW91dCB8fCAzMDAwMCkgLyAxMDAwKSwgLy8gQ29udmVydCBtcyB0byBzZWNvbmRzIGZvciBnUlBDXG4gICAgcmVhZF9vbmx5OiBxdWVyeUNvbmZpZz8ucmVhZE9ubHkgfHwgZmFsc2UsXG4gICAgbWF4X3BhdGhfcmVzdWx0czogcXVlcnlDb25maWc/Lm1heFBhdGhSZXN1bHRzIHx8IDAsXG4gIH07XG59XG5cbi8qKlxuICogQnVpbGQgcGFyYW1ldGVycyBhcnJheSBmb3IgZ1JQQy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkUGFyYW1ldGVycyhwYXJhbXM/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+KTogYW55W10ge1xuICBpZiAoIXBhcmFtcykgcmV0dXJuIFtdO1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocGFyYW1zKS5tYXAoKFtuYW1lLCB2YWx1ZV0pID0+ICh7XG4gICAgbmFtZSxcbiAgICB2YWx1ZTogY3JlYXRlVHlwZWRWYWx1ZSh2YWx1ZSksXG4gIH0pKTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0IGdSUEMgcmVzcG9uc2UgdG8gUmVzcG9uc2Ugb2JqZWN0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gY29udmVydEdxbFJlc3BvbnNlKGdycGNSZXNwb25zZTogYW55KTogUmVzcG9uc2Uge1xuICBjb25zdCBjb2x1bW5zID0gZ3JwY1Jlc3BvbnNlLmNvbHVtbnMgfHwgW107XG4gIGNvbnN0IHJvd3M6IFJvd1tdID0gKGdycGNSZXNwb25zZS5yb3dzIHx8IFtdKS5tYXAoKHJvdzogYW55KSA9PiB7XG4gICAgY29uc3QgcmF3VmFsdWVzID0gcm93LnZhbHVlcyB8fCBbXTtcbiAgICBjb25zdCB2YWx1ZXMgPSByYXdWYWx1ZXMubWFwKCh0djogYW55KSA9PiBjb252ZXJ0VHlwZWRWYWx1ZSh0dikpO1xuICAgIGNvbnN0IHR5cGVzID0gcmF3VmFsdWVzLm1hcCgodHY6IGFueSkgPT4gcHJvdG9UeXBlVG9FbnVtKHR2Py50eXBlKSk7XG4gICAgcmV0dXJuIG5ldyBSb3codmFsdWVzLCB0eXBlcyk7XG4gIH0pO1xuICByZXR1cm4gbmV3IFJlc3BvbnNlKFxuICAgIGNvbHVtbnMsXG4gICAgcm93cyxcbiAgICBwYXJzZUludChncnBjUmVzcG9uc2Uucm93X2NvdW50IHx8ICcwJywgMTApLFxuICAgIGdycGNSZXNwb25zZS5oYXNfbW9yZSB8fCBmYWxzZSxcbiAgICBncnBjUmVzcG9uc2Uud2FybmluZ3MgfHwgW10sXG4gICAgcGFyc2VJbnQoZ3JwY1Jlc3BvbnNlLnJvd3NfYWZmZWN0ZWQgfHwgJzAnLCAxMCksXG4gICAgZ3JwY1Jlc3BvbnNlLmN1cnJlbnRfZ3JhcGggfHwgJycsXG4gICAgLy8gT2xkIHNlcnZlcnMgb21pdCB0aGVzZSBwcm90bzMgZmllbGRzIOKGkiAwIG1lYW5zIFwibm90IHJlcG9ydGVkXCIuXG4gICAgcGFyc2VJbnQoZ3JwY1Jlc3BvbnNlLnRpbWVfY29zdF9ucyB8fCAnMCcsIDEwKSxcbiAgICBwYXJzZUludChncnBjUmVzcG9uc2UuZGlza19jb3N0X25zIHx8ICcwJywgMTApLFxuICAgIHBhcnNlSW50KGdycGNSZXNwb25zZS5jb21wdXRlX2Nvc3RfbnMgfHwgJzAnLCAxMClcbiAgKTtcbn1cblxuLyoqXG4gKiBNYXAgcHJvdG8gdHlwZSBzdHJpbmcgb3IgbnVtYmVyIHRvIFByb3BlcnR5VHlwZSBlbnVtLlxuICogSGFuZGxlcyBib3RoIHN0cmluZyBlbnVtIG5hbWVzIChlLmcuLCAnUFJPUEVSVFlfVFlQRV9TVFJJTkcnKSBhbmQgbnVtZXJpYyB2YWx1ZXMuXG4gKi9cbmZ1bmN0aW9uIHByb3RvVHlwZVRvRW51bShwcm90b1R5cGU6IHN0cmluZyB8IG51bWJlcik6IFByb3BlcnR5VHlwZSB7XG4gIC8vIEhhbmRsZSBudW1lcmljIGVudW0gdmFsdWVzIGRpcmVjdGx5XG4gIGlmICh0eXBlb2YgcHJvdG9UeXBlID09PSAnbnVtYmVyJykge1xuICAgIC8vIElmIGl0J3MgYWxyZWFkeSBhIHZhbGlkIFByb3BlcnR5VHlwZSBudW1iZXIsIHJldHVybiBpdCBkaXJlY3RseVxuICAgIC8vIFByb3BlcnR5VHlwZSByYW5nZXMgZnJvbSBVTlNFVCgwKSB0byBFREdFKDMzKVxuICAgIGlmIChwcm90b1R5cGUgPj0gUHJvcGVydHlUeXBlLlVOU0VUICYmIHByb3RvVHlwZSA8PSBQcm9wZXJ0eVR5cGUuRURHRSkge1xuICAgICAgcmV0dXJuIHByb3RvVHlwZSBhcyBQcm9wZXJ0eVR5cGU7XG4gICAgfVxuICAgIHJldHVybiBQcm9wZXJ0eVR5cGUuTlVMTDtcbiAgfVxuXG4gIGNvbnN0IHR5cGVNYXA6IFJlY29yZDxzdHJpbmcsIFByb3BlcnR5VHlwZT4gPSB7XG4gICAgJ1BST1BFUlRZX1RZUEVfTlVMTCc6IFByb3BlcnR5VHlwZS5OVUxMLFxuICAgICdQUk9QRVJUWV9UWVBFX1VOU0VUJzogUHJvcGVydHlUeXBlLlVOU0VULFxuICAgICdQUk9QRVJUWV9UWVBFX0JPT0wnOiBQcm9wZXJ0eVR5cGUuQk9PTCxcbiAgICAnUFJPUEVSVFlfVFlQRV9JTlQzMic6IFByb3BlcnR5VHlwZS5JTlQzMixcbiAgICAnUFJPUEVSVFlfVFlQRV9VSU5UMzInOiBQcm9wZXJ0eVR5cGUuVUlOVDMyLFxuICAgICdQUk9QRVJUWV9UWVBFX0lOVDY0JzogUHJvcGVydHlUeXBlLklOVDY0LFxuICAgICdQUk9QRVJUWV9UWVBFX1VJTlQ2NCc6IFByb3BlcnR5VHlwZS5VSU5UNjQsXG4gICAgJ1BST1BFUlRZX1RZUEVfRkxPQVQnOiBQcm9wZXJ0eVR5cGUuRkxPQVQsXG4gICAgJ1BST1BFUlRZX1RZUEVfRE9VQkxFJzogUHJvcGVydHlUeXBlLkRPVUJMRSxcbiAgICAnUFJPUEVSVFlfVFlQRV9TVFJJTkcnOiBQcm9wZXJ0eVR5cGUuU1RSSU5HLFxuICAgICdQUk9QRVJUWV9UWVBFX1RFWFQnOiBQcm9wZXJ0eVR5cGUuVEVYVCxcbiAgICAnUFJPUEVSVFlfVFlQRV9CTE9CJzogUHJvcGVydHlUeXBlLkJMT0IsXG4gICAgJ1BST1BFUlRZX1RZUEVfVElNRVNUQU1QJzogUHJvcGVydHlUeXBlLlRJTUVTVEFNUCxcbiAgICAnUFJPUEVSVFlfVFlQRV9EQVRFVElNRSc6IFByb3BlcnR5VHlwZS5EQVRFVElNRSxcbiAgICAnUFJPUEVSVFlfVFlQRV9EQVRFJzogUHJvcGVydHlUeXBlLkRBVEUsXG4gICAgJ1BST1BFUlRZX1RZUEVfTE9DQUxfREFURVRJTUUnOiBQcm9wZXJ0eVR5cGUuTE9DQUxfREFURVRJTUUsXG4gICAgJ1BST1BFUlRZX1RZUEVfWk9ORURfREFURVRJTUUnOiBQcm9wZXJ0eVR5cGUuWk9ORURfREFURVRJTUUsXG4gICAgJ1BST1BFUlRZX1RZUEVfTE9DQUxfVElNRSc6IFByb3BlcnR5VHlwZS5MT0NBTF9USU1FLFxuICAgICdQUk9QRVJUWV9UWVBFX1pPTkVEX1RJTUUnOiBQcm9wZXJ0eVR5cGUuWk9ORURfVElNRSxcbiAgICAnUFJPUEVSVFlfVFlQRV9ZRUFSX1RPX01PTlRIJzogUHJvcGVydHlUeXBlLllFQVJfVE9fTU9OVEgsXG4gICAgJ1BST1BFUlRZX1RZUEVfREFZX1RPX1NFQ09ORCc6IFByb3BlcnR5VHlwZS5EQVlfVE9fU0VDT05ELFxuICAgICdQUk9QRVJUWV9UWVBFX0RFQ0lNQUwnOiBQcm9wZXJ0eVR5cGUuREVDSU1BTCxcbiAgICAnUFJPUEVSVFlfVFlQRV9QT0lOVCc6IFByb3BlcnR5VHlwZS5QT0lOVCxcbiAgICAnUFJPUEVSVFlfVFlQRV9QT0lOVDNEJzogUHJvcGVydHlUeXBlLlBPSU5UM0QsXG4gICAgJ1BST1BFUlRZX1RZUEVfVkVDVE9SJzogUHJvcGVydHlUeXBlLlZFQ1RPUixcbiAgICAnUFJPUEVSVFlfVFlQRV9MSVNUJzogUHJvcGVydHlUeXBlLkxJU1QsXG4gICAgJ1BST1BFUlRZX1RZUEVfU0VUJzogUHJvcGVydHlUeXBlLlNFVCxcbiAgICAnUFJPUEVSVFlfVFlQRV9NQVAnOiBQcm9wZXJ0eVR5cGUuTUFQLFxuICAgICdQUk9QRVJUWV9UWVBFX05PREUnOiBQcm9wZXJ0eVR5cGUuTk9ERSxcbiAgICAnUFJPUEVSVFlfVFlQRV9FREdFJzogUHJvcGVydHlUeXBlLkVER0UsXG4gICAgJ1BST1BFUlRZX1RZUEVfUEFUSCc6IFByb3BlcnR5VHlwZS5QQVRILFxuICAgICdQUk9QRVJUWV9UWVBFX1JFQ09SRCc6IFByb3BlcnR5VHlwZS5SRUNPUkQsXG4gICAgJ1BST1BFUlRZX1RZUEVfVEFCTEUnOiBQcm9wZXJ0eVR5cGUuVEFCTEUsXG4gICAgJ1BST1BFUlRZX1RZUEVfRVJST1InOiBQcm9wZXJ0eVR5cGUuRVJST1IsXG4gIH07XG4gIHJldHVybiB0eXBlTWFwW3Byb3RvVHlwZV0gPz8gUHJvcGVydHlUeXBlLk5VTEw7XG59XG5cbi8qKlxuICogQ29udmVydCBnUlBDIFR5cGVkVmFsdWUgdG8gSlMgdmFsdWUuXG4gKiBVc2VzIHRoZSBzYW1lIGRlY29kaW5nIGxvZ2ljIGFzIHR5cGVkVmFsdWVUb0pTIGZvciBjb25zaXN0ZW5jeS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnRUeXBlZFZhbHVlKHR2OiBhbnkpOiBhbnkge1xuICBpZiAoIXR2IHx8IHR2LmlzX251bGwgfHwgdHYuaXNOdWxsKSByZXR1cm4gbnVsbDtcblxuICBjb25zdCBkYXRhID0gdHYuZGF0YTtcbiAgY29uc3QgcHJvdG9UeXBlID0gdHYudHlwZTtcblxuICAvLyBIYW5kbGUgbnVsbCB0eXBlcyAoYm90aCBzdHJpbmcgYW5kIG51bWVyaWMgZW51bSB2YWx1ZXMpXG4gIGlmIChwcm90b1R5cGUgPT09ICdQUk9QRVJUWV9UWVBFX05VTEwnIHx8IHByb3RvVHlwZSA9PT0gJ1BST1BFUlRZX1RZUEVfVU5TRVQnIHx8XG4gICAgICBwcm90b1R5cGUgPT09IFByb3BlcnR5VHlwZS5OVUxMIHx8IHByb3RvVHlwZSA9PT0gUHJvcGVydHlUeXBlLlVOU0VUKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvLyBIYW5kbGUgZW1wdHkgZGF0YSAtIGJ1dCBTVFJJTkcgdHlwZSB3aXRoIGVtcHR5IGRhdGEgc2hvdWxkIHJldHVybiBcIlwiXG4gIGlmICghZGF0YSB8fCBkYXRhLmxlbmd0aCA9PT0gMCkge1xuICAgIGNvbnN0IGlzU3RyaW5nVHlwZSA9IHByb3RvVHlwZSA9PT0gJ1BST1BFUlRZX1RZUEVfU1RSSU5HJyB8fCBwcm90b1R5cGUgPT09ICdQUk9QRVJUWV9UWVBFX1RFWFQnIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgcHJvdG9UeXBlID09PSBQcm9wZXJ0eVR5cGUuU1RSSU5HIHx8IHByb3RvVHlwZSA9PT0gUHJvcGVydHlUeXBlLlRFWFQ7XG4gICAgY29uc3QgaXNCbG9iVHlwZSA9IHByb3RvVHlwZSA9PT0gJ1BST1BFUlRZX1RZUEVfQkxPQicgfHwgcHJvdG9UeXBlID09PSBQcm9wZXJ0eVR5cGUuQkxPQjtcblxuICAgIGlmIChpc1N0cmluZ1R5cGUpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gICAgaWYgKGlzQmxvYlR5cGUpIHtcbiAgICAgIHJldHVybiBCdWZmZXIuYWxsb2MoMCk7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3QgYnVmID0gQnVmZmVyLmZyb20oZGF0YSk7XG4gIGNvbnN0IGVudW1UeXBlID0gcHJvdG9UeXBlVG9FbnVtKHByb3RvVHlwZSk7XG5cbiAgLy8gVXNlIHR5cGVkVmFsdWVUb0pTIGZvciBjb25zaXN0ZW50IGRlY29kaW5nXG4gIHJldHVybiB0eXBlZFZhbHVlVG9KUyh7IHR5cGU6IGVudW1UeXBlLCBkYXRhOiBidWYsIGlzTnVsbDogZmFsc2UgfSk7XG59XG5cbi8qKlxuICogQ29udmVydCBwcm90byBwcm9wZXJ0aWVzIG1hcCB0byBKUyBvYmplY3QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0UHJvdG9Qcm9wZXJ0aWVzKHByb3RvUHJvcHM6IFJlY29yZDxzdHJpbmcsIGFueT4pOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHtcbiAgY29uc3QgcmVzdWx0OiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge307XG4gIGZvciAoY29uc3QgW2tleSwgdHZdIG9mIE9iamVjdC5lbnRyaWVzKHByb3RvUHJvcHMpKSB7XG4gICAgcmVzdWx0W2tleV0gPSBjb252ZXJ0VHlwZWRWYWx1ZSh0dik7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBDb252ZXJ0IEdyYXBoSW5mbyBmcm9tIHByb3RvIHRvIEpTIG9iamVjdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnRHcmFwaEluZm8oZzogYW55KTogR3JhcGhJbmZvIHtcbiAgcmV0dXJuIHtcbiAgICBuYW1lOiBnLm5hbWUgfHwgJycsXG4gICAgZ3JhcGhUeXBlOiBwcm90b1RvR3JhcGhUeXBlKGcuZ3JhcGhfdHlwZSksXG4gICAgbm9kZUNvdW50OiBwYXJzZUludChnLm5vZGVfY291bnQgfHwgJzAnLCAxMCksXG4gICAgZWRnZUNvdW50OiBwYXJzZUludChnLmVkZ2VfY291bnQgfHwgJzAnLCAxMCksXG4gICAgZGVzY3JpcHRpb246IGcuZGVzY3JpcHRpb24gfHwgJycsXG4gIH07XG59XG5cbi8qKlxuICogTWFwIEdyYXBoVHlwZSBlbnVtIHRvIHByb3RvIHN0cmluZy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBoVHlwZVRvUHJvdG8oZ3JhcGhUeXBlOiBHcmFwaFR5cGUpOiBzdHJpbmcge1xuICBzd2l0Y2ggKGdyYXBoVHlwZSkge1xuICAgIGNhc2UgR3JhcGhUeXBlLk9QRU46XG4gICAgICByZXR1cm4gJ0dSQVBIX1RZUEVfT1BFTic7XG4gICAgY2FzZSBHcmFwaFR5cGUuQ0xPU0VEOlxuICAgICAgcmV0dXJuICdHUkFQSF9UWVBFX0NMT1NFRCc7XG4gICAgY2FzZSBHcmFwaFR5cGUuT05UT0xPR1k6XG4gICAgICByZXR1cm4gJ0dSQVBIX1RZUEVfT05UT0xPR1knO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gJ0dSQVBIX1RZUEVfT1BFTic7XG4gIH1cbn1cblxuLyoqXG4gKiBNYXAgcHJvdG8gc3RyaW5nIHRvIEdyYXBoVHlwZSBlbnVtLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcHJvdG9Ub0dyYXBoVHlwZShwcm90bzogc3RyaW5nKTogR3JhcGhUeXBlIHtcbiAgc3dpdGNoIChwcm90bykge1xuICAgIGNhc2UgJ0dSQVBIX1RZUEVfQ0xPU0VEJzpcbiAgICAgIHJldHVybiBHcmFwaFR5cGUuQ0xPU0VEO1xuICAgIGNhc2UgJ0dSQVBIX1RZUEVfT05UT0xPR1knOlxuICAgICAgcmV0dXJuIEdyYXBoVHlwZS5PTlRPTE9HWTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIEdyYXBoVHlwZS5PUEVOO1xuICB9XG59XG5cbi8qKlxuICogTWFwIHByb3RvIEhlYWx0aFN0YXR1cyB0byBlbnVtLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcHJvdG9Ub0hlYWx0aFN0YXR1cyhwcm90bzogc3RyaW5nKTogSGVhbHRoU3RhdHVzIHtcbiAgc3dpdGNoIChwcm90bykge1xuICAgIGNhc2UgJ0hFQUxUSF9TVEFUVVNfU0VSVklORyc6XG4gICAgICByZXR1cm4gSGVhbHRoU3RhdHVzLlNFUlZJTkc7XG4gICAgY2FzZSAnSEVBTFRIX1NUQVRVU19OT1RfU0VSVklORyc6XG4gICAgICByZXR1cm4gSGVhbHRoU3RhdHVzLk5PVF9TRVJWSU5HO1xuICAgIGNhc2UgJ0hFQUxUSF9TVEFUVVNfU0VSVklDRV9VTktOT1dOJzpcbiAgICAgIHJldHVybiBIZWFsdGhTdGF0dXMuU0VSVklDRV9VTktOT1dOO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gSGVhbHRoU3RhdHVzLlVOS05PV047XG4gIH1cbn1cblxuLyoqXG4gKiBNYXAgQ2FjaGVUeXBlIHRvIHByb3RvIHN0cmluZy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNhY2hlVHlwZVRvUHJvdG8oY2FjaGVUeXBlOiBDYWNoZVR5cGUpOiBzdHJpbmcge1xuICBzd2l0Y2ggKGNhY2hlVHlwZSkge1xuICAgIGNhc2UgQ2FjaGVUeXBlLkFTVDpcbiAgICAgIHJldHVybiAnQ0FDSEVfVFlQRV9BU1QnO1xuICAgIGNhc2UgQ2FjaGVUeXBlLlBMQU46XG4gICAgICByZXR1cm4gJ0NBQ0hFX1RZUEVfUExBTic7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiAnQ0FDSEVfVFlQRV9BTEwnO1xuICB9XG59XG5cbi8qKlxuICogQ29udmVydCBOb2RlRGF0YSB0byBwcm90byBmb3JtYXQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBub2RlRGF0YVRvUHJvdG8obm9kZTogYW55KTogYW55IHtcbiAgY29uc3QgcHJvcGVydGllczogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9O1xuICBpZiAobm9kZS5wcm9wZXJ0aWVzKSB7XG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMobm9kZS5wcm9wZXJ0aWVzKSkge1xuICAgICAgcHJvcGVydGllc1trZXldID0gY3JlYXRlVHlwZWRWYWx1ZSh2YWx1ZSk7XG4gICAgfVxuICB9XG4gIHJldHVybiB7XG4gICAgaWQ6IG5vZGUuaWQgfHwgJycsXG4gICAgbGFiZWxzOiBub2RlLmxhYmVscyB8fCBbXSxcbiAgICBwcm9wZXJ0aWVzLFxuICB9O1xufVxuXG4vKipcbiAqIENvbnZlcnQgRWRnZURhdGEgdG8gcHJvdG8gZm9ybWF0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZWRnZURhdGFUb1Byb3RvKGVkZ2U6IGFueSk6IGFueSB7XG4gIGNvbnN0IHByb3BlcnRpZXM6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcbiAgaWYgKGVkZ2UucHJvcGVydGllcykge1xuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGVkZ2UucHJvcGVydGllcykpIHtcbiAgICAgIHByb3BlcnRpZXNba2V5XSA9IGNyZWF0ZVR5cGVkVmFsdWUodmFsdWUpO1xuICAgIH1cbiAgfVxuICByZXR1cm4ge1xuICAgIGlkOiBlZGdlLmlkIHx8ICcnLFxuICAgIGxhYmVsOiBlZGdlLmxhYmVsIHx8ICcnLFxuICAgIGZyb21fbm9kZV9pZDogZWRnZS5mcm9tTm9kZUlkIHx8ICcnLFxuICAgIHRvX25vZGVfaWQ6IGVkZ2UudG9Ob2RlSWQgfHwgJycsXG4gICAgcHJvcGVydGllcyxcbiAgfTtcbn1cbiJdfQ==
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Data service handles node and edge insert/delete/export operations.
|
|
3
3
|
*/
|
|
4
4
|
import { ServiceContext } from './service-context';
|
|
5
|
-
import { InsertNodesResult, InsertEdgesResult,
|
|
5
|
+
import { InsertNodesResult, InsertEdgesResult, ExportNodesResult, ExportEdgesResult, ExportConfig, ExportChunk } from '../response';
|
|
6
6
|
import { NodeData, EdgeData } from '../types';
|
|
7
7
|
import { InsertNodesConfig, InsertEdgesConfig } from '../client';
|
|
8
8
|
/**
|
|
@@ -36,14 +36,6 @@ export declare class DataService {
|
|
|
36
36
|
* Insert multiple edges into a graph.
|
|
37
37
|
*/
|
|
38
38
|
insertEdges(graphName: string, edges: EdgeData[], config?: InsertEdgesConfig): Promise<InsertEdgesResult>;
|
|
39
|
-
/**
|
|
40
|
-
* Delete nodes from a graph.
|
|
41
|
-
*/
|
|
42
|
-
deleteNodes(graphName: string, nodeIds?: string[], labels?: string[], where?: string): Promise<DeleteResult>;
|
|
43
|
-
/**
|
|
44
|
-
* Delete edges from a graph.
|
|
45
|
-
*/
|
|
46
|
-
deleteEdges(graphName: string, edgeIds?: string[], label?: string, where?: string): Promise<DeleteResult>;
|
|
47
39
|
/**
|
|
48
40
|
* Export graph data in JSON Lines format (streaming).
|
|
49
41
|
*/
|