@kepler.gl/duckdb 3.1.8 → 3.1.9
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.
|
@@ -20,6 +20,14 @@ export declare function getDuckDBColumnTypes(connection: DatabaseConnection, tab
|
|
|
20
20
|
* @returns A record where keys are column names and values are their data types.
|
|
21
21
|
*/
|
|
22
22
|
export declare function getDuckDBColumnTypesMap(columns: DuckDBColumnDesc[]): Record<string, string>;
|
|
23
|
+
/**
|
|
24
|
+
* Quotes a table name for safe SQL usage.
|
|
25
|
+
* Always quotes to handle all edge cases (spaces, special characters, reserved words).
|
|
26
|
+
* For fully qualified names (containing dots), preserves the existing structure.
|
|
27
|
+
* @param tableName The table name to quote.
|
|
28
|
+
* @returns The table name, properly quoted.
|
|
29
|
+
*/
|
|
30
|
+
export declare function quoteTableName(tableName: string): string;
|
|
23
31
|
/**
|
|
24
32
|
* Constructs an SQL query to select all columns from a given table,
|
|
25
33
|
* converting specified columns to Well-Known Binary (WKB) format using ST_AsWKB,
|
|
@@ -17,6 +17,7 @@ exports.isGeoArrowMultiPoint = isGeoArrowMultiPoint;
|
|
|
17
17
|
exports.isGeoArrowMultiPolygon = isGeoArrowMultiPolygon;
|
|
18
18
|
exports.isGeoArrowPoint = isGeoArrowPoint;
|
|
19
19
|
exports.isGeoArrowPolygon = isGeoArrowPolygon;
|
|
20
|
+
exports.quoteTableName = quoteTableName;
|
|
20
21
|
exports.removeSQLComments = removeSQLComments;
|
|
21
22
|
exports.restoreUnsupportedExtensions = exports.restoreArrowTable = exports.removeUnsupportedExtensions = void 0;
|
|
22
23
|
exports.sanitizeDuckDBTableName = sanitizeDuckDBTableName;
|
|
@@ -60,13 +61,14 @@ function getDuckDBColumnTypes(_x, _x2) {
|
|
|
60
61
|
*/
|
|
61
62
|
function _getDuckDBColumnTypes() {
|
|
62
63
|
_getDuckDBColumnTypes = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee2(connection, tableName) {
|
|
63
|
-
var resDescribe, duckDbTypes, numRows, i, _resDescribe$getChild, _resDescribe$getChild2, columnName, columnType;
|
|
64
|
+
var quotedTableName, resDescribe, duckDbTypes, numRows, i, _resDescribe$getChild, _resDescribe$getChild2, columnName, columnType;
|
|
64
65
|
return _regenerator["default"].wrap(function _callee2$(_context2) {
|
|
65
66
|
while (1) switch (_context2.prev = _context2.next) {
|
|
66
67
|
case 0:
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
68
|
+
quotedTableName = quoteTableName(tableName);
|
|
69
|
+
_context2.next = 3;
|
|
70
|
+
return connection.query("DESCRIBE ".concat(quotedTableName));
|
|
71
|
+
case 3:
|
|
70
72
|
resDescribe = _context2.sent;
|
|
71
73
|
duckDbTypes = [];
|
|
72
74
|
numRows = resDescribe.numRows;
|
|
@@ -79,7 +81,7 @@ function _getDuckDBColumnTypes() {
|
|
|
79
81
|
});
|
|
80
82
|
}
|
|
81
83
|
return _context2.abrupt("return", duckDbTypes);
|
|
82
|
-
case
|
|
84
|
+
case 8:
|
|
83
85
|
case "end":
|
|
84
86
|
return _context2.stop();
|
|
85
87
|
}
|
|
@@ -94,6 +96,33 @@ function getDuckDBColumnTypesMap(columns) {
|
|
|
94
96
|
}, {});
|
|
95
97
|
}
|
|
96
98
|
|
|
99
|
+
/**
|
|
100
|
+
* Quotes a table name for safe SQL usage.
|
|
101
|
+
* Always quotes to handle all edge cases (spaces, special characters, reserved words).
|
|
102
|
+
* For fully qualified names (containing dots), preserves the existing structure.
|
|
103
|
+
* @param tableName The table name to quote.
|
|
104
|
+
* @returns The table name, properly quoted.
|
|
105
|
+
*/
|
|
106
|
+
function quoteTableName(tableName) {
|
|
107
|
+
// Return as-is if:
|
|
108
|
+
// 1. It's already a properly quoted simple identifier (starts and ends with quotes)
|
|
109
|
+
// 2. It contains both dots and quotes (assume it's a qualified name)
|
|
110
|
+
if (tableName.startsWith('"') && tableName.endsWith('"') || tableName.includes('.') && tableName.includes('"')) {
|
|
111
|
+
return tableName;
|
|
112
|
+
}
|
|
113
|
+
return "\"".concat(tableName.replace(/"/g, '""'), "\"");
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
/**
|
|
117
|
+
* Quotes a column name for safe SQL usage.
|
|
118
|
+
* Always quotes to handle all edge cases (spaces, special characters, reserved words).
|
|
119
|
+
* @param columnName The column name to quote.
|
|
120
|
+
* @returns The column name, properly quoted.
|
|
121
|
+
*/
|
|
122
|
+
function quoteColumnName(columnName) {
|
|
123
|
+
return "\"".concat(columnName.replace(/"/g, '""'), "\"");
|
|
124
|
+
}
|
|
125
|
+
|
|
97
126
|
/**
|
|
98
127
|
* Constructs an SQL query to select all columns from a given table,
|
|
99
128
|
* converting specified columns to Well-Known Binary (WKB) format using ST_AsWKB,
|
|
@@ -111,14 +140,16 @@ function castDuckDBTypesForKepler(tableName, columns) {
|
|
|
111
140
|
var modifiedColumns = columns.map(function (column) {
|
|
112
141
|
var name = column.name,
|
|
113
142
|
type = column.type;
|
|
143
|
+
var quotedColumnName = quoteColumnName(name);
|
|
114
144
|
if (type === 'GEOMETRY' && options.geometryToWKB) {
|
|
115
|
-
return "ST_AsWKB(".concat(
|
|
145
|
+
return "ST_AsWKB(".concat(quotedColumnName, ") as ").concat(quotedColumnName);
|
|
116
146
|
} else if (type === 'BIGINT' && options.bigIntToDouble) {
|
|
117
|
-
return "CAST(".concat(
|
|
147
|
+
return "CAST(".concat(quotedColumnName, " AS DOUBLE) as ").concat(quotedColumnName);
|
|
118
148
|
}
|
|
119
|
-
return
|
|
149
|
+
return quotedColumnName;
|
|
120
150
|
});
|
|
121
|
-
|
|
151
|
+
var quotedTableName = quoteTableName(tableName);
|
|
152
|
+
return "SELECT ".concat(modifiedColumns.join(', '), " FROM ").concat(quotedTableName);
|
|
122
153
|
}
|
|
123
154
|
|
|
124
155
|
/**
|
|
@@ -602,4 +633,4 @@ function sanitizeDuckDBTableName(fileName) {
|
|
|
602
633
|
}
|
|
603
634
|
return name || 'default_table';
|
|
604
635
|
}
|
|
605
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJhcnJvdyIsIl9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkIiwicmVxdWlyZSIsIl90eXBlIiwiX2R1Y2tkYldhc20iLCJfY29uc3RhbnRzIiwiX3V0aWxzIiwiX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlIiwiZSIsIldlYWtNYXAiLCJyIiwidCIsIl9fZXNNb2R1bGUiLCJfdHlwZW9mIiwiaGFzIiwiZ2V0IiwibiIsIl9fcHJvdG9fXyIsImEiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsInUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJpIiwic2V0IiwiU1VQUE9SVEVEX0RVQ0tEQl9EUk9QX0VYVEVOU0lPTlMiLCJleHBvcnRzIiwiZ2V0RHVja0RCQ29sdW1uVHlwZXMiLCJfeCIsIl94MiIsIl9nZXREdWNrREJDb2x1bW5UeXBlcyIsImFwcGx5IiwiYXJndW1lbnRzIiwiX2FzeW5jVG9HZW5lcmF0b3IyIiwiX3JlZ2VuZXJhdG9yIiwibWFyayIsIl9jYWxsZWUyIiwiY29ubmVjdGlvbiIsInRhYmxlTmFtZSIsInJlc0Rlc2NyaWJlIiwiZHVja0RiVHlwZXMiLCJudW1Sb3dzIiwiX3Jlc0Rlc2NyaWJlJGdldENoaWxkIiwiX3Jlc0Rlc2NyaWJlJGdldENoaWxkMiIsImNvbHVtbk5hbWUiLCJjb2x1bW5UeXBlIiwid3JhcCIsIl9jYWxsZWUyJCIsIl9jb250ZXh0MiIsInByZXYiLCJuZXh0IiwicXVlcnkiLCJjb25jYXQiLCJzZW50IiwiZ2V0Q2hpbGRBdCIsInB1c2giLCJuYW1lIiwidHlwZSIsImFicnVwdCIsInN0b3AiLCJnZXREdWNrREJDb2x1bW5UeXBlc01hcCIsImNvbHVtbnMiLCJyZWR1Y2UiLCJhY2MiLCJ2YWx1ZSIsImNhc3REdWNrREJUeXBlc0ZvcktlcGxlciIsIm9wdGlvbnMiLCJsZW5ndGgiLCJ1bmRlZmluZWQiLCJnZW9tZXRyeVRvV0tCIiwiYmlnSW50VG9Eb3VibGUiLCJtb2RpZmllZENvbHVtbnMiLCJtYXAiLCJjb2x1bW4iLCJqb2luIiwic2V0R2VvQXJyb3dXS0JFeHRlbnNpb24iLCJ0YWJsZSIsInNjaGVtYSIsImZpZWxkcyIsImZvckVhY2giLCJmaWVsZCIsImluZm8iLCJmaW5kIiwibWV0YWRhdGEiLCJHRU9BUlJPV19NRVRBREFUQV9LRVkiLCJHRU9BUlJPV19FWFRFTlNJT05TIiwiV0tCIiwicmVzdG9yZUFycm93VGFibGUiLCJhcnJvd1NjaGVtYSIsImNyZWFPcHRzIiwiaW5kZXgiLCJUYWJsZSIsInJlbW92ZVVuc3VwcG9ydGVkRXh0ZW5zaW9ucyIsInJlbW92ZWRNZXRhZGF0YSIsImV4dGVuc2lvbiIsInN0YXJ0c1dpdGgiLCJyZXN0b3JlVW5zdXBwb3J0ZWRFeHRlbnNpb25zIiwicmVtb3ZlZEV4dGVuc2lvbnMiLCJpc0dlb0Fycm93UG9pbnQiLCJEYXRhVHlwZSIsImlzRml4ZWRTaXplTGlzdCIsImluY2x1ZGVzIiwibGlzdFNpemUiLCJpc0Zsb2F0IiwiY2hpbGRyZW4iLCJpc0dlb0Fycm93TGluZVN0cmluZyIsImlzTGlzdCIsImlzR2VvQXJyb3dQb2x5Z29uIiwiaXNHZW9BcnJvd011bHRpUG9pbnQiLCJpc0dlb0Fycm93TXVsdGlMaW5lU3RyaW5nIiwiaXNHZW9BcnJvd011bHRpUG9seWdvbiIsImNoZWNrSXNTZWxlY3RRdWVyeSIsIl94MyIsIl94NCIsIl9jaGVja0lzU2VsZWN0UXVlcnkiLCJfY2FsbGVlMyIsInJlc3VsdCIsIl9jYWxsZWUzJCIsIl9jb250ZXh0MyIsInQwIiwic3BsaXRTcWxTdGF0ZW1lbnRzIiwiaW5wdXQiLCJxdWVyaWVzIiwiY3VycmVudFF1ZXJ5IiwiaW5TaW5nbGVRdW90ZSIsImluRG91YmxlUXVvdGUiLCJpbkxpbmVDb21tZW50IiwiaW5CbG9ja0NvbW1lbnQiLCJjaGFyIiwidHJpbW1lZCIsInRyaW0iLCJyZW1vdmVTUUxDb21tZW50cyIsInNxbCIsInJlcGxhY2UiLCJkcm9wVGFibGVJZkV4aXN0cyIsIl9yZWYiLCJfY2FsbGVlIiwiX2NhbGxlZSQiLCJfY29udGV4dCIsImNvbnNvbGUiLCJlcnJvciIsIl94NSIsIl94NiIsInRhYmxlRnJvbUZpbGUiLCJfeDciLCJfdGFibGVGcm9tRmlsZSIsIl9jYWxsZWU0IiwiZmlsZSIsImZpbGVFeHQiLCJkYiIsImMiLCJzb3VyY2VOYW1lIiwiYXJyYXlCdWZmZXIiLCJ1aW50OEFycmF5IiwiYXJyb3dUYWJsZSIsIm1lc3NhZ2UiLCJfY2FsbGVlNCQiLCJfY29udGV4dDQiLCJFcnJvciIsImV4dCIsImVuZHNXaXRoIiwiZ2V0QXBwbGljYXRpb25Db25maWciLCJkYXRhYmFzZSIsImNvbm5lY3QiLCJzYW5pdGl6ZUR1Y2tEQlRhYmxlTmFtZSIsIlVpbnQ4QXJyYXkiLCJ0YWJsZUZyb21JUEMiLCJpbnNlcnRBcnJvd1RhYmxlIiwicmVnaXN0ZXJGaWxlSGFuZGxlIiwiRHVja0RCRGF0YVByb3RvY29sIiwiQlJPV1NFUl9GSUxFUkVBREVSIiwiY2xvc2UiLCJmaWxlTmFtZSIsInRlc3QiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvdGFibGUvZHVja2RiLXRhYmxlLXV0aWxzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbi8vIGxvYWRlcnMuZ2xcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCAoYykgdmlzLmdsIGNvbnRyaWJ1dG9yc1xuXG4vLyBDb3BpZWQgZnJvbSBsb2FkZXJzLmdsL2dlb2Fycm93XG5cbi8vIFRPRE86IFJlbW92ZSBpc0dlb0Fycm93KiBvbmNlIEtlcGxlci5nbCBpcyB1cGdyYWRlZCB0byBsb2FkZXJzLmdsIDQuNCtcblxuaW1wb3J0ICogYXMgYXJyb3cgZnJvbSAnYXBhY2hlLWFycm93JztcbmltcG9ydCB7RGF0YVR5cGV9IGZyb20gJ2FwYWNoZS1hcnJvdy90eXBlJztcbmltcG9ydCB7RHVja0RCRGF0YVByb3RvY29sfSBmcm9tICdAZHVja2RiL2R1Y2tkYi13YXNtJztcblxuaW1wb3J0IHtHRU9BUlJPV19FWFRFTlNJT05TLCBHRU9BUlJPV19NRVRBREFUQV9LRVl9IGZyb20gJ0BrZXBsZXIuZ2wvY29uc3RhbnRzJztcbmltcG9ydCB7UHJvdG9EYXRhc2V0RmllbGR9IGZyb20gJ0BrZXBsZXIuZ2wvdHlwZXMnO1xuaW1wb3J0IHtEYXRhYmFzZUNvbm5lY3Rpb24sIGdldEFwcGxpY2F0aW9uQ29uZmlnfSBmcm9tICdAa2VwbGVyLmdsL3V0aWxzJztcblxuZXhwb3J0IGNvbnN0IFNVUFBPUlRFRF9EVUNLREJfRFJPUF9FWFRFTlNJT05TID0gWydhcnJvdycsICdjc3YnLCAnZ2VvanNvbicsICdqc29uJywgJ3BhcnF1ZXQnXTtcblxuZXhwb3J0IHR5cGUgRHVja0RCQ29sdW1uRGVzYyA9IHtuYW1lOiBzdHJpbmc7IHR5cGU6IHN0cmluZ307XG5cbi8qKlxuICogUXVlcmllcyBhIER1Y2tEQiB0YWJsZSBmb3IgdGhlIHNjaGVtYSBkZXNjcmlwdGlvbi5cbiAqIEBwYXJhbSBjb25uZWN0aW9uIEFuIGFjdGl2ZSBEdWNrREIgY29ubmVjdGlvbi5cbiAqIEBwYXJhbSB0YWJsZU5hbWUgQSBuYW1lIG9mIER1Y2tEQiB0YWJsZSB0byBxdWVyeS5cbiAqIEByZXR1cm5zIEFuIGFycmF5IG9mIGNvbHVtbiBuYW1lcyBhbmQgRHVja0RCIHR5cGVzLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0RHVja0RCQ29sdW1uVHlwZXMoXG4gIGNvbm5lY3Rpb246IERhdGFiYXNlQ29ubmVjdGlvbixcbiAgdGFibGVOYW1lOiBzdHJpbmdcbik6IFByb21pc2U8RHVja0RCQ29sdW1uRGVzY1tdPiB7XG4gIGNvbnN0IHJlc0Rlc2NyaWJlID0gYXdhaXQgY29ubmVjdGlvbi5xdWVyeShgREVTQ1JJQkUgXCIke3RhYmxlTmFtZX1cImApO1xuXG4gIGNvbnN0IGR1Y2tEYlR5cGVzOiBEdWNrREJDb2x1bW5EZXNjW10gPSBbXTtcbiAgY29uc3QgbnVtUm93cyA9IHJlc0Rlc2NyaWJlLm51bVJvd3M7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbnVtUm93czsgKytpKSB7XG4gICAgY29uc3QgY29sdW1uTmFtZSA9IHJlc0Rlc2NyaWJlLmdldENoaWxkQXQoMCk/LmdldChpKTtcbiAgICBjb25zdCBjb2x1bW5UeXBlID0gcmVzRGVzY3JpYmUuZ2V0Q2hpbGRBdCgxKT8uZ2V0KGkpO1xuXG4gICAgZHVja0RiVHlwZXMucHVzaCh7XG4gICAgICBuYW1lOiBjb2x1bW5OYW1lLFxuICAgICAgdHlwZTogY29sdW1uVHlwZVxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIGR1Y2tEYlR5cGVzO1xufVxuXG4vKipcbiAqIEdlbmVyYXRlcyBhIG1hcHBpbmcgb2YgY29sdW1uIG5hbWVzIHRvIHRoZWlyIGNvcnJlc3BvbmRpbmcgRHVja0RCIGRhdGEgdHlwZXMuXG4gKiBAcGFyYW0gY29sdW1ucyBBbiBhcnJheSBvZiBjb2x1bW4gZGVzY3JpcHRpb25zIGZyb20gRHVja0RCLiBDaGVjayBnZXREdWNrREJDb2x1bW5UeXBlcy5cbiAqIEByZXR1cm5zIEEgcmVjb3JkIHdoZXJlIGtleXMgYXJlIGNvbHVtbiBuYW1lcyBhbmQgdmFsdWVzIGFyZSB0aGVpciBkYXRhIHR5cGVzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RHVja0RCQ29sdW1uVHlwZXNNYXAoY29sdW1uczogRHVja0RCQ29sdW1uRGVzY1tdKSB7XG4gIHJldHVybiBjb2x1bW5zLnJlZHVjZSgoYWNjLCB2YWx1ZSkgPT4ge1xuICAgIGFjY1t2YWx1ZS5uYW1lXSA9IHZhbHVlLnR5cGU7XG4gICAgcmV0dXJuIGFjYztcbiAgfSwge30gYXMgUmVjb3JkPHN0cmluZywgc3RyaW5nPik7XG59XG5cbi8qKlxuICogQ29uc3RydWN0cyBhbiBTUUwgcXVlcnkgdG8gc2VsZWN0IGFsbCBjb2x1bW5zIGZyb20gYSBnaXZlbiB0YWJsZSxcbiAqIGNvbnZlcnRpbmcgc3BlY2lmaWVkIGNvbHVtbnMgdG8gV2VsbC1Lbm93biBCaW5hcnkgKFdLQikgZm9ybWF0IHVzaW5nIFNUX0FzV0tCLFxuICogYW5kIGNhc3RpbmcgQklHSU5UIGNvbHVtbnMgdG8gRE9VQkxFIGlmIHNwZWNpZmllZC5cbiAqIEBwYXJhbSB0YWJsZU5hbWUgVGhlIG5hbWUgb2YgdGhlIHRhYmxlIGZyb20gd2hpY2ggdG8gc2VsZWN0IGRhdGEuXG4gKiBAcGFyYW0gY29sdW1ucyBBbiBhcnJheSBvZiBjb2x1bW4gZGVzY3JpcHRvcnMsIGVhY2ggd2l0aCBhIHR5cGUgYW5kIG5hbWUuXG4gKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25hbCBwYXJhbWV0ZXJzIHRvIGNvbnRyb2wgdGhlIGNvbnZlcnNpb24gYmVoYXZpb3IuXG4gKiBAcmV0dXJucyBUaGUgY29uc3RydWN0ZWQgU1FMIHF1ZXJ5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gY2FzdER1Y2tEQlR5cGVzRm9yS2VwbGVyKFxuICB0YWJsZU5hbWU6IHN0cmluZyxcbiAgY29sdW1uczogRHVja0RCQ29sdW1uRGVzY1tdLFxuICBvcHRpb25zID0ge2dlb21ldHJ5VG9XS0I6IHRydWUsIGJpZ0ludFRvRG91YmxlOiB0cnVlfVxuKTogc3RyaW5nIHtcbiAgY29uc3QgbW9kaWZpZWRDb2x1bW5zID0gY29sdW1ucy5tYXAoY29sdW1uID0+IHtcbiAgICBjb25zdCB7bmFtZSwgdHlwZX0gPSBjb2x1bW47XG4gICAgaWYgKHR5cGUgPT09ICdHRU9NRVRSWScgJiYgb3B0aW9ucy5nZW9tZXRyeVRvV0tCKSB7XG4gICAgICByZXR1cm4gYFNUX0FzV0tCKCR7bmFtZX0pIGFzICR7bmFtZX1gO1xuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ0JJR0lOVCcgJiYgb3B0aW9ucy5iaWdJbnRUb0RvdWJsZSkge1xuICAgICAgcmV0dXJuIGBDQVNUKCR7bmFtZX0gQVMgRE9VQkxFKSBhcyAke25hbWV9YDtcbiAgICB9XG4gICAgcmV0dXJuIG5hbWU7XG4gIH0pO1xuXG4gIHJldHVybiBgU0VMRUNUICR7bW9kaWZpZWRDb2x1bW5zLmpvaW4oJywgJyl9IEZST00gJyR7dGFibGVOYW1lfSdgO1xufVxuXG4vKipcbiAqIFNldHMgdGhlIEdlb0Fycm93IFdLQiBleHRlbnNpb24gbWV0YWRhdGEgZm9yIGNvbHVtbnMgb2YgdHlwZSBHRU9NRVRSWSBpbiBhbiBBcnJvdyB0YWJsZS5cbiAqIEBwYXJhbSB0YWJsZSBUaGUgQXBhY2hlIEFycm93IHRhYmxlIHdob3NlIHNjaGVtYSBmaWVsZHMgd2lsbCBiZSBtb2RpZmllZC5cbiAqIEBwYXJhbSBjb2x1bW5zIEFuIGFycmF5IG9mIGNvbHVtbiBkZXNjcmlwdG9ycyBmcm9tIGEgRHVja0RCIHRhYmxlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0R2VvQXJyb3dXS0JFeHRlbnNpb24odGFibGU6IGFycm93LlRhYmxlLCBjb2x1bW5zOiBEdWNrREJDb2x1bW5EZXNjW10pIHtcbiAgdGFibGUuc2NoZW1hLmZpZWxkcy5mb3JFYWNoKGZpZWxkID0+IHtcbiAgICBjb25zdCBpbmZvID0gY29sdW1ucy5maW5kKHQgPT4gdC5uYW1lID09PSBmaWVsZC5uYW1lKTtcbiAgICBpZiAoaW5mbz8udHlwZSA9PT0gJ0dFT01FVFJZJykge1xuICAgICAgZmllbGQubWV0YWRhdGEuc2V0KEdFT0FSUk9XX01FVEFEQVRBX0tFWSwgR0VPQVJST1dfRVhURU5TSU9OUy5XS0IpO1xuICAgIH1cbiAgfSk7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJvdyB0YWJsZSBmcm9tIGFuIGFycmF5IG9mIGFycm93IHZlY3RvcnMgYW5kIGZpZWxkcy5cbiAqIEBwYXJhbSBjb2x1bW5zIEFuIGFycmF5IG9mIGFycm93IHZlY3RvcnMuXG4gKiBAcGFyYW0gZmllbGRzIEFuIGFycmF5IG9mIGZpZWxkcyBwZXIgYXJyb3cgdmVjdG9yLlxuICogQHBhcmFtIGFycm93U2NoZW1hIE9wdGlvbmFsIGFycm93IHRhYmxlIHNjaGVtYSB3aGVuIGF2YWlsYWJsZS5cbiAqIEByZXR1cm5zIEFuIGFycm93IHRhYmxlLlxuICovXG5leHBvcnQgY29uc3QgcmVzdG9yZUFycm93VGFibGUgPSAoXG4gIGNvbHVtbnM6IGFycm93LlZlY3RvcltdLFxuICBmaWVsZHM6IFByb3RvRGF0YXNldEZpZWxkW10sXG4gIGFycm93U2NoZW1hPzogYXJyb3cuU2NoZW1hXG4pID0+IHtcbiAgY29uc3QgY3JlYU9wdHMgPSB7fTtcbiAgZmllbGRzLm1hcCgoZmllbGQsIGluZGV4KSA9PiB7XG4gICAgY3JlYU9wdHNbZmllbGQubmFtZV0gPSBjb2x1bW5zW2luZGV4XTtcbiAgfSk7XG5cbiAgcmV0dXJuIGFycm93U2NoZW1hID8gbmV3IGFycm93LlRhYmxlKGFycm93U2NoZW1hLCBjcmVhT3B0cykgOiBuZXcgYXJyb3cuVGFibGUoY3JlYU9wdHMpO1xufTtcblxuLyoqXG4gKiBEdWNrRGIgdGhyb3dzIHdoZW4gZ2VvYXJyb3cgZXh0ZW5zaW9ucyBhcmUgcHJlc2VudCBpbiBtZXRhZGF0YS5cbiAqIEBwYXJhbSB0YWJsZSBBbiBhcnJvdyB0YWJsZSB0byBjbGVhciBmcm9tIGV4dGVuc2lvbnMuXG4gKiBAcmV0dXJucyBBIG1hcCBvZiByZW1vdmVkIHBlciBmaWVsZCBnZW9hcnJvdyBleHRlbnNpb25zLlxuICovXG5leHBvcnQgY29uc3QgcmVtb3ZlVW5zdXBwb3J0ZWRFeHRlbnNpb25zID0gKHRhYmxlOiBhcnJvdy5UYWJsZSk6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPT4ge1xuICBjb25zdCByZW1vdmVkTWV0YWRhdGE6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcbiAgdGFibGUuc2NoZW1hLmZpZWxkcy5mb3JFYWNoKGZpZWxkID0+IHtcbiAgICBjb25zdCBleHRlbnNpb24gPSBmaWVsZC5tZXRhZGF0YS5nZXQoR0VPQVJST1dfTUVUQURBVEFfS0VZKTtcbiAgICBpZiAoZXh0ZW5zaW9uPy5zdGFydHNXaXRoKCdnZW9hcnJvdycpKSB7XG4gICAgICByZW1vdmVkTWV0YWRhdGFbZmllbGQubmFtZV0gPSBleHRlbnNpb247XG4gICAgICBmaWVsZC5tZXRhZGF0YS5kZWxldGUoR0VPQVJST1dfTUVUQURBVEFfS0VZKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gcmVtb3ZlZE1ldGFkYXRhO1xufTtcblxuLyoqXG4gKiBSZXN0b3JlIHJlbW92ZWQgbWV0YWRhdGEgZXh0ZW5zaW9ucyBhZnRlciBhIGNhbGwgdG8gcmVtb3ZlVW5zdXBwb3J0ZWRFeHRlbnNpb25zLlxuICogQHBhcmFtIHRhYmxlIEFuIGFycm93IHRhYmxlIHRvIHJlc3RvcmUgZ2VvYXJyb3cgZXh0ZW5zaW9ucy5cbiAqIEBwYXJhbSByZW1vdmVkRXh0ZW5zaW9ucyBBIG1hcCBvZiBwZXIgZmllbGQgZ2VvYXJyb3cgZXh0ZW5zaW9ucyB0byByZXN0b3JlLlxuICovXG5leHBvcnQgY29uc3QgcmVzdG9yZVVuc3VwcG9ydGVkRXh0ZW5zaW9ucyA9IChcbiAgdGFibGU6IGFycm93LlRhYmxlLFxuICByZW1vdmVkRXh0ZW5zaW9uczogUmVjb3JkPHN0cmluZywgc3RyaW5nPlxuKSA9PiB7XG4gIHRhYmxlLnNjaGVtYS5maWVsZHMuZm9yRWFjaChmaWVsZCA9PiB7XG4gICAgY29uc3QgZXh0ZW5zaW9uID0gcmVtb3ZlZEV4dGVuc2lvbnNbZmllbGQubmFtZV07XG4gICAgaWYgKGV4dGVuc2lvbikge1xuICAgICAgZmllbGQubWV0YWRhdGEuc2V0KEdFT0FSUk9XX01FVEFEQVRBX0tFWSwgZXh0ZW5zaW9uKTtcbiAgICB9XG4gIH0pO1xufTtcblxuLyoqIENoZWNrcyB3aGV0aGVyIHRoZSBnaXZlbiBBcGFjaGUgQXJyb3cgSlMgdHlwZSBpcyBhIFBvaW50IGRhdGEgdHlwZSAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzR2VvQXJyb3dQb2ludCh0eXBlOiBEYXRhVHlwZSkge1xuICBpZiAoRGF0YVR5cGUuaXNGaXhlZFNpemVMaXN0KHR5cGUpKSB7XG4gICAgLy8gQ2hlY2sgbGlzdCBzaXplXG4gICAgaWYgKCFbMiwgMywgNF0uaW5jbHVkZXModHlwZS5saXN0U2l6ZSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBDaGVjayBjaGlsZCBvZiBGaXhlZFNpemVMaXN0IGlzIGZsb2F0aW5nIHR5cGVcbiAgICBpZiAoIURhdGFUeXBlLmlzRmxvYXQodHlwZS5jaGlsZHJlblswXSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuLyoqIENoZWNrcyB3aGV0aGVyIHRoZSBnaXZlbiBBcGFjaGUgQXJyb3cgSlMgdHlwZSBpcyBhIFBvaW50IGRhdGEgdHlwZSAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzR2VvQXJyb3dMaW5lU3RyaW5nKHR5cGU6IERhdGFUeXBlKSB7XG4gIC8vIENoZWNrIHRoZSBvdXRlciB0eXBlIGlzIGEgTGlzdFxuICBpZiAoIURhdGFUeXBlLmlzTGlzdCh0eXBlKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8vIENoZWNrIHRoZSBjaGlsZCBpcyBhIHBvaW50IHR5cGVcbiAgaWYgKCFpc0dlb0Fycm93UG9pbnQodHlwZS5jaGlsZHJlblswXS50eXBlKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG4vKiogQ2hlY2tzIHdoZXRoZXIgdGhlIGdpdmVuIEFwYWNoZSBBcnJvdyBKUyB0eXBlIGlzIGEgUG9seWdvbiBkYXRhIHR5cGUgKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0dlb0Fycm93UG9seWdvbih0eXBlOiBEYXRhVHlwZSkge1xuICAvLyBDaGVjayB0aGUgb3V0ZXIgdmVjdG9yIGlzIGEgTGlzdFxuICBpZiAoIURhdGFUeXBlLmlzTGlzdCh0eXBlKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8vIENoZWNrIHRoZSBjaGlsZCBpcyBhIGxpbmVzdHJpbmcgdmVjdG9yXG4gIGlmICghaXNHZW9BcnJvd0xpbmVTdHJpbmcodHlwZS5jaGlsZHJlblswXS50eXBlKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG4vKiogQ2hlY2tzIHdoZXRoZXIgdGhlIGdpdmVuIEFwYWNoZSBBcnJvdyBKUyB0eXBlIGlzIGEgUG9seWdvbiBkYXRhIHR5cGUgKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0dlb0Fycm93TXVsdGlQb2ludCh0eXBlOiBEYXRhVHlwZSkge1xuICAvLyBDaGVjayB0aGUgb3V0ZXIgdmVjdG9yIGlzIGEgTGlzdFxuICBpZiAoIURhdGFUeXBlLmlzTGlzdCh0eXBlKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8vIENoZWNrIHRoZSBjaGlsZCBpcyBhIHBvaW50IHZlY3RvclxuICBpZiAoIWlzR2VvQXJyb3dQb2ludCh0eXBlLmNoaWxkcmVuWzBdLnR5cGUpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbi8qKiBDaGVja3Mgd2hldGhlciB0aGUgZ2l2ZW4gQXBhY2hlIEFycm93IEpTIHR5cGUgaXMgYSBQb2x5Z29uIGRhdGEgdHlwZSAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzR2VvQXJyb3dNdWx0aUxpbmVTdHJpbmcodHlwZTogRGF0YVR5cGUpIHtcbiAgLy8gQ2hlY2sgdGhlIG91dGVyIHZlY3RvciBpcyBhIExpc3RcbiAgaWYgKCFEYXRhVHlwZS5pc0xpc3QodHlwZSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvLyBDaGVjayB0aGUgY2hpbGQgaXMgYSBsaW5lc3RyaW5nIHZlY3RvclxuICBpZiAoIWlzR2VvQXJyb3dMaW5lU3RyaW5nKHR5cGUuY2hpbGRyZW5bMF0udHlwZSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuLyoqIENoZWNrcyB3aGV0aGVyIHRoZSBnaXZlbiBBcGFjaGUgQXJyb3cgSlMgdHlwZSBpcyBhIFBvbHlnb24gZGF0YSB0eXBlICovXG5leHBvcnQgZnVuY3Rpb24gaXNHZW9BcnJvd011bHRpUG9seWdvbih0eXBlOiBEYXRhVHlwZSkge1xuICAvLyBDaGVjayB0aGUgb3V0ZXIgdmVjdG9yIGlzIGEgTGlzdFxuICBpZiAoIURhdGFUeXBlLmlzTGlzdCh0eXBlKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8vIENoZWNrIHRoZSBjaGlsZCBpcyBhIHBvbHlnb24gdmVjdG9yXG4gIGlmICghaXNHZW9BcnJvd1BvbHlnb24odHlwZS5jaGlsZHJlblswXS50eXBlKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiB0aGUgZ2l2ZW4gU1FMIHF1ZXJ5IGlzIGEgU0VMRUNUIHF1ZXJ5IGJ5IHVzaW5nIHRoZSBFWFBMQUlOIGNvbW1hbmQuXG4gKiBAcGFyYW0gY29ubmVjdGlvbiBUaGUgRHVja0RCIGNvbm5lY3Rpb24gaW5zdGFuY2UuXG4gKiBAcGFyYW0gcXVlcnkgVGhlIFNRTCBxdWVyeSB0byBjaGVjay5cbiAqIEByZXR1cm5zIFJlc29sdmVzIHRvIGB0cnVlYCBpZiB0aGUgcXVlcnkgaXMgYSBTRUxFQ1Qgc3RhdGVtZW50LCBvdGhlcndpc2UgYGZhbHNlYC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNoZWNrSXNTZWxlY3RRdWVyeShcbiAgY29ubmVjdGlvbjogRGF0YWJhc2VDb25uZWN0aW9uLFxuICBxdWVyeTogc3RyaW5nXG4pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjb25uZWN0aW9uLnF1ZXJ5KGBFWFBMQUlOICgke3F1ZXJ5fSlgKTtcbiAgICByZXR1cm4gcmVzdWx0Lm51bVJvd3MgPiAwO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG4vKipcbiAqIFNwbGl0IGEgc3RyaW5nIHdpdGggcG90ZW50aWFsbHkgbXVsdGlwbGUgU1FMIHF1ZXJpZXMgKHNlcGFyYXRlZCBhcyB1c3VhbCBieSAnOycpIGludG8gYW4gYXJyYXkgb2YgcXVlcmllcy5cbiAqIFRoaXMgaW1wbGVtZW50YXRpb246XG4gKiAgLSBIYW5kbGVzIHNpbmdsZSBhbmQgZG91YmxlIHF1b3RlZCBzdHJpbmdzIHdpdGggcHJvcGVyIGVzY2FwaW5nXG4gKiAgLSBJZ25vcmVzIHNlbWljb2xvbnMgaW4gbGluZSBjb21tZW50cyAoLS0pIGFuZCBibG9jayBjb21tZW50cyAoc2xhc2ggYXN0ZXJpc2spXG4gKiAgLSBUcmltcyB3aGl0ZXNwYWNlIGZyb20gcXVlcmllc1xuICogIC0gSGFuZGxlcyBTUUwtc3R5bGUgZXNjYXBlZCBxdW90ZXMgKCcnIGluc2lkZSBzdHJpbmdzKVxuICogIC0gUmV0dXJucyBvbmx5IG5vbi1lbXB0eSBxdWVyaWVzXG4gKiBAcGFyYW0gaW5wdXQgQSBzdHJpbmcgd2l0aCBwb3RlbnRpYWxseSBtdWx0aXBsZSBTUUwgcXVlcmllcy5cbiAqIEByZXR1cm5zIEFuIGFycmF5IG9mIHF1ZXJpZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzcGxpdFNxbFN0YXRlbWVudHMoaW5wdXQ6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgY29uc3QgcXVlcmllczogc3RyaW5nW10gPSBbXTtcbiAgbGV0IGN1cnJlbnRRdWVyeSA9ICcnO1xuICBsZXQgaW5TaW5nbGVRdW90ZSA9IGZhbHNlO1xuICBsZXQgaW5Eb3VibGVRdW90ZSA9IGZhbHNlO1xuICBsZXQgaW5MaW5lQ29tbWVudCA9IGZhbHNlO1xuICBsZXQgaW5CbG9ja0NvbW1lbnQgPSBmYWxzZTtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IGlucHV0Lmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgY2hhciA9IGlucHV0W2ldO1xuXG4gICAgaWYgKGluTGluZUNvbW1lbnQpIHtcbiAgICAgIGN1cnJlbnRRdWVyeSArPSBjaGFyO1xuICAgICAgaWYgKGNoYXIgPT09ICdcXG4nKSB7XG4gICAgICAgIGluTGluZUNvbW1lbnQgPSBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmIChpbkJsb2NrQ29tbWVudCkge1xuICAgICAgY3VycmVudFF1ZXJ5ICs9IGNoYXI7XG4gICAgICBpZiAoY2hhciA9PT0gJyonICYmIGlucHV0W2kgKyAxXSA9PT0gJy8nKSB7XG4gICAgICAgIGluQmxvY2tDb21tZW50ID0gZmFsc2U7XG4gICAgICAgIGN1cnJlbnRRdWVyeSArPSBpbnB1dFsrK2ldOyAvLyBDb25zdW1lICcvJ1xuICAgICAgfVxuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKGluU2luZ2xlUXVvdGUpIHtcbiAgICAgIGN1cnJlbnRRdWVyeSArPSBjaGFyO1xuICAgICAgaWYgKGNoYXIgPT09IFwiJ1wiKSB7XG4gICAgICAgIC8vIEhhbmRsZSBlc2NhcGVkIHNpbmdsZSBxdW90ZXMgaW4gU1FMXG4gICAgICAgIGlmIChpICsgMSA8IGlucHV0Lmxlbmd0aCAmJiBpbnB1dFtpICsgMV0gPT09IFwiJ1wiKSB7XG4gICAgICAgICAgY3VycmVudFF1ZXJ5ICs9IGlucHV0WysraV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaW5TaW5nbGVRdW90ZSA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAoaW5Eb3VibGVRdW90ZSkge1xuICAgICAgY3VycmVudFF1ZXJ5ICs9IGNoYXI7XG4gICAgICBpZiAoY2hhciA9PT0gJ1wiJykge1xuICAgICAgICAvLyBIYW5kbGUgZXNjYXBlZCBkb3VibGUgcXVvdGVzXG4gICAgICAgIGlmIChpICsgMSA8IGlucHV0Lmxlbmd0aCAmJiBpbnB1dFtpICsgMV0gPT09ICdcIicpIHtcbiAgICAgICAgICBjdXJyZW50UXVlcnkgKz0gaW5wdXRbKytpXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpbkRvdWJsZVF1b3RlID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIC8vIENoZWNrIGZvciBjb21tZW50IHN0YXJ0c1xuICAgIGlmIChjaGFyID09PSAnLScgJiYgaW5wdXRbaSArIDFdID09PSAnLScpIHtcbiAgICAgIGluTGluZUNvbW1lbnQgPSB0cnVlO1xuICAgICAgY3VycmVudFF1ZXJ5ICs9IGNoYXIgKyBpbnB1dFsrK2ldO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKGNoYXIgPT09ICcvJyAmJiBpbnB1dFtpICsgMV0gPT09ICcqJykge1xuICAgICAgaW5CbG9ja0NvbW1lbnQgPSB0cnVlO1xuICAgICAgY3VycmVudFF1ZXJ5ICs9IGNoYXIgKyBpbnB1dFsrK2ldO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgZm9yIHF1b3RlIHN0YXJ0c1xuICAgIGlmIChjaGFyID09PSBcIidcIikge1xuICAgICAgaW5TaW5nbGVRdW90ZSA9IHRydWU7XG4gICAgICBjdXJyZW50UXVlcnkgKz0gY2hhcjtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmIChjaGFyID09PSAnXCInKSB7XG4gICAgICBpbkRvdWJsZVF1b3RlID0gdHJ1ZTtcbiAgICAgIGN1cnJlbnRRdWVyeSArPSBjaGFyO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgLy8gSGFuZGxlIHF1ZXJ5IHNlcGFyYXRvclxuICAgIGlmIChjaGFyID09PSAnOycpIHtcbiAgICAgIGNvbnN0IHRyaW1tZWQgPSBjdXJyZW50UXVlcnkudHJpbSgpO1xuICAgICAgaWYgKHRyaW1tZWQubGVuZ3RoID4gMCkge1xuICAgICAgICBxdWVyaWVzLnB1c2godHJpbW1lZCk7XG4gICAgICB9XG4gICAgICBjdXJyZW50UXVlcnkgPSAnJztcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGN1cnJlbnRRdWVyeSArPSBjaGFyO1xuICB9XG5cbiAgLy8gQWRkIHRoZSBmaW5hbCBxdWVyeVxuICBjb25zdCB0cmltbWVkID0gY3VycmVudFF1ZXJ5LnRyaW0oKTtcbiAgaWYgKHRyaW1tZWQubGVuZ3RoID4gMCkge1xuICAgIHF1ZXJpZXMucHVzaCh0cmltbWVkKTtcbiAgfVxuXG4gIHJldHVybiBxdWVyaWVzO1xufVxuXG4vKipcbiAqIFJlbW92ZXMgU1FMIGNvbW1lbnRzIGZyb20gYSBnaXZlbiBTUUwgc3RyaW5nLlxuICogQHBhcmFtIHNxbCBUaGUgU1FMIHF1ZXJ5IHN0cmluZyBmcm9tIHdoaWNoIGNvbW1lbnRzIHNob3VsZCBiZSByZW1vdmVkLlxuICogQHJldHVybnMgVGhlIGNsZWFuZWQgU1FMIHN0cmluZyB3aXRob3V0IGNvbW1lbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlU1FMQ29tbWVudHMoc3FsOiBzdHJpbmcpOiBzdHJpbmcge1xuICAvLyBSZW1vdmUgbXVsdGktbGluZSBjb21tZW50cyAoLyogLi4uICovKVxuICBzcWwgPSBzcWwucmVwbGFjZSgvXFwvXFwqW1xcc1xcU10qP1xcKlxcLy9nLCAnJyk7XG4gIC8vIFJlbW92ZSBzaW5nbGUtbGluZSBjb21tZW50cyAoLS0gLi4uKVxuICBzcWwgPSBzcWwucmVwbGFjZSgvLS0uKiQvZ20sICcnKTtcbiAgcmV0dXJuIHNxbC50cmltKCk7XG59XG5cbi8qKlxuICogRHJvcHMgYSB0YWJsZSBpZiBpdCBleGlzdHMgaW4gdGhlIER1Y2tEQiBkYXRhYmFzZS5cbiAqIEBwYXJhbSBjb25uZWN0aW9uIFRoZSBEdWNrREIgY29ubmVjdGlvbiBpbnN0YW5jZS5cbiAqIEBwYXJhbSB0YWJsZU5hbWUgVGhlIG5hbWUgb2YgdGhlIHRhYmxlIHRvIGRyb3AuXG4gKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBvcGVyYXRpb24gaXMgY29tcGxldGUuXG4gKiBAdGhyb3dzIExvZ3MgYW4gZXJyb3IgaWYgdGhlIHRhYmxlIGRyb3Agb3BlcmF0aW9uIGZhaWxzLlxuICovXG5leHBvcnQgY29uc3QgZHJvcFRhYmxlSWZFeGlzdHMgPSBhc3luYyAoY29ubmVjdGlvbjogRGF0YWJhc2VDb25uZWN0aW9uLCB0YWJsZU5hbWU6IHN0cmluZykgPT4ge1xuICB0cnkge1xuICAgIGF3YWl0IGNvbm5lY3Rpb24ucXVlcnkoYERST1AgVEFCTEUgSUYgRVhJU1RTIFwiJHt0YWJsZU5hbWV9XCI7YCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY29uc29sZS5lcnJvcignRHJvcHBpbmcgdGFibGUgZmFpbGVkJywgdGFibGVOYW1lLCBlcnJvcik7XG4gIH1cbn07XG5cbi8qKlxuICogSW1wb3J0cyBhIGZpbGUgaW50byBEdWNrREIgYXMgYSB0YWJsZSwgc3VwcG9ydGluZyBtdWx0aXBsZSBmb3JtYXRzIGZyb20gU1VQUE9SVEVEX0RVQ0tEQl9EUk9QX0VYVEVOU0lPTlMuXG4gKiBAcGFyYW0gZmlsZSBUaGUgZmlsZSB0byBiZSBpbXBvcnRlZC5cbiAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIGZpbGUgaGFzIGJlZW4gcHJvY2Vzc2VkIGludG8gYSBEdWNrREIgdGFibGUuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB0YWJsZUZyb21GaWxlKGZpbGU6IEZpbGUgfCBudWxsKTogUHJvbWlzZTxudWxsIHwgRXJyb3I+IHtcbiAgaWYgKCFmaWxlKSByZXR1cm4gbmV3IEVycm9yKCdGaWxlIERyYWcgJiBEcm9wOiBObyBmaWxlJyk7XG5cbiAgY29uc3QgZmlsZUV4dCA9IFNVUFBPUlRFRF9EVUNLREJfRFJPUF9FWFRFTlNJT05TLmZpbmQoZXh0ID0+IGZpbGUubmFtZS5lbmRzV2l0aChleHQpKTtcbiAgaWYgKCFmaWxlRXh0KSB7XG4gICAgcmV0dXJuIG5ldyBFcnJvcihcIkZpbGUgRHJhZyAmIERyb3A6IEZpbGUgZXh0ZW5zaW9uIGlzbid0IHN1cHBvcnRlZFwiKTtcbiAgfVxuXG4gIGNvbnN0IGRiID0gYXdhaXQgZ2V0QXBwbGljYXRpb25Db25maWcoKS5kYXRhYmFzZTtcbiAgaWYgKCFkYikge1xuICAgIHJldHVybiBuZXcgRXJyb3IoJ1RoZSBkYXRhYmFzZSBpcyBub3QgY29uZmlndXJlZCBwcm9wZXJseS4nKTtcbiAgfVxuICBjb25zdCBjID0gYXdhaXQgZGIuY29ubmVjdCgpO1xuXG4gIGxldCBlcnJvcjogRXJyb3IgfCBudWxsID0gbnVsbDtcblxuICB0cnkge1xuICAgIGNvbnN0IHRhYmxlTmFtZSA9IHNhbml0aXplRHVja0RCVGFibGVOYW1lKGZpbGUubmFtZSk7XG4gICAgY29uc3Qgc291cmNlTmFtZSA9ICd0ZW1wX2ZpbGVfaGFuZGxlJztcblxuICAgIGMucXVlcnkoYGluc3RhbGwgc3BhdGlhbDtcbiAgICAgIGxvYWQgc3BhdGlhbDtgKTtcblxuICAgIGlmIChmaWxlRXh0ID09PSAnYXJyb3cnKSB7XG4gICAgICBjb25zdCBhcnJheUJ1ZmZlciA9IGF3YWl0IGZpbGUuYXJyYXlCdWZmZXIoKTtcbiAgICAgIGNvbnN0IHVpbnQ4QXJyYXkgPSBuZXcgVWludDhBcnJheShhcnJheUJ1ZmZlcik7XG4gICAgICBjb25zdCBhcnJvd1RhYmxlID0gYXJyb3cudGFibGVGcm9tSVBDKHVpbnQ4QXJyYXkpO1xuXG4gICAgICBhd2FpdCBjLmluc2VydEFycm93VGFibGUoYXJyb3dUYWJsZSwge25hbWU6IHRhYmxlTmFtZX0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBhd2FpdCBkYi5yZWdpc3RlckZpbGVIYW5kbGUoc291cmNlTmFtZSwgZmlsZSwgRHVja0RCRGF0YVByb3RvY29sLkJST1dTRVJfRklMRVJFQURFUiwgdHJ1ZSk7XG5cbiAgICAgIGlmIChmaWxlRXh0ID09PSAnY3N2Jykge1xuICAgICAgICBhd2FpdCBjLnF1ZXJ5KGBcbiAgICAgICAgICAgIENSRUFURSBUQUJMRSAnJHt0YWJsZU5hbWV9JyBBU1xuICAgICAgICAgICAgU0VMRUNUICpcbiAgICAgICAgICAgIEZST00gcmVhZF9jc3YoJyR7c291cmNlTmFtZX0nLCBoZWFkZXIgPSB0cnVlLCBhdXRvX2RldGVjdCA9IHRydWUsIHNhbXBsZV9zaXplID0gLTEpO1xuICAgICAgICAgIGApO1xuICAgICAgfSBlbHNlIGlmIChmaWxlRXh0ID09PSAnanNvbicpIHtcbiAgICAgICAgYXdhaXQgYy5xdWVyeShgXG4gICAgICAgICAgICBDUkVBVEUgVEFCTEUgJyR7dGFibGVOYW1lfScgQVNcbiAgICAgICAgICAgIFNFTEVDVCAqXG4gICAgICAgICAgICBGUk9NIHJlYWRfanNvbl9hdXRvKCcke3NvdXJjZU5hbWV9Jyk7XG4gICAgICAgICAgYCk7XG4gICAgICB9IGVsc2UgaWYgKGZpbGVFeHQgPT09ICdnZW9qc29uJykge1xuICAgICAgICBhd2FpdCBjLnF1ZXJ5KGBcbiAgICAgICAgICAgIENSRUFURSBUQUJMRSAnJHt0YWJsZU5hbWV9JyBBU1xuICAgICAgICAgICAgU0VMRUNUICpcbiAgICAgICAgICAgIEZST00gU1RfUkVBRCgnJHtzb3VyY2VOYW1lfScsIGtlZXBfd2tiID0gVFJVRSk7XG4gICAgICAgICAgYCk7XG4gICAgICB9IGVsc2UgaWYgKGZpbGVFeHQgPT09ICdwYXJxdWV0Jykge1xuICAgICAgICBhd2FpdCBjLnF1ZXJ5KGBcbiAgICAgICAgICAgIENSRUFURSBUQUJMRSAnJHt0YWJsZU5hbWV9JyBBU1xuICAgICAgICAgICAgU0VMRUNUICpcbiAgICAgICAgICAgIEZST00gcmVhZF9wYXJxdWV0KCcke3NvdXJjZU5hbWV9JylcbiAgICAgICAgICBgKTtcbiAgICAgIH1cbiAgICB9XG4gIH0gY2F0Y2ggKGVycm9yRGF0YSkge1xuICAgIGlmIChlcnJvckRhdGEgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgY29uc3QgbWVzc2FnZSA9IGVycm9yRGF0YS5tZXNzYWdlIHx8ICcnO1xuICAgICAgLy8gb3V0cHV0IG1vcmUgcmVhZGFibGUgZXJyb3JzIGZvciBrbm93biBpc3N1ZXNcbiAgICAgIGlmIChtZXNzYWdlLmluY2x1ZGVzKCdBcnJvdyBUeXBlIHdpdGggZXh0ZW5zaW9uIG5hbWU6IGdlb2Fycm93JykpIHtcbiAgICAgICAgZXJyb3IgPSBuZXcgRXJyb3IoXG4gICAgICAgICAgJ1RoZSBHZW9BcnJvdyBleHRlbnNpb25zIGFyZSBub3QgaW1wbGVtZW50ZWQgaW4gdGhlIGNvbm5lY3RlZCBEdWNrREIgdmVyc2lvbi4nXG4gICAgICAgICk7XG4gICAgICB9IGVsc2UgaWYgKG1lc3NhZ2UuaW5jbHVkZXMoXCJHZW9wYXJxdWV0IGNvbHVtbiAnZ2VvbWV0cnknIGRvZXMgbm90IGhhdmUgZ2VvbWV0cnkgdHlwZXNcIikpIHtcbiAgICAgICAgZXJyb3IgPSBuZXcgRXJyb3IoXG4gICAgICAgICAgYEludmFsaWQgSW5wdXQgRXJyb3I6IEdlb3BhcnF1ZXQgY29sdW1uICdnZW9tZXRyeScgZG9lcyBub3QgaGF2ZSBnZW9tZXRyeSB0eXBlcy5cblBvc3NpYmxlIHJlYXNvbnM6XG4gIC0gT2xkIC5wYXJxdWV0IGZpbGVzIHRoYXQgZG9uJ3QgbWF0Y2ggdGhlIFBhcnF1ZXQgZm9ybWF0IHNwZWNpZmljYXRpb24uXG4gIC0gVW5zdXBwb3J0ZWQgY29tcHJlc3Npb24uYFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghZXJyb3IpIHtcbiAgICAgIGVycm9yID0gZXJyb3JEYXRhIGFzIEVycm9yO1xuICAgIH1cbiAgfVxuXG4gIGF3YWl0IGMuY2xvc2UoKTtcblxuICByZXR1cm4gZXJyb3I7XG59XG5cbi8qKlxuICogU2FuaXRpemVzIGEgZmlsZSBuYW1lIHRvIGJlIGEgdmFsaWQgRHVja0RCIHRhYmxlIG5hbWUuXG4gKiBAcGFyYW0gZmlsZU5hbWUgVGhlIGlucHV0IGZpbGUgbmFtZSB0byBiZSBzYW5pdGl6ZWQuXG4gKiBAcmV0dXJucyBBIHZhbGlkIER1Y2tEQiB0YWJsZSBuYW1lLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc2FuaXRpemVEdWNrREJUYWJsZU5hbWUoZmlsZU5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIC8vIFJlcGxhY2UgaW52YWxpZCBjaGFyYWN0ZXJzIHdpdGggdW5kZXJzY29yZXNcbiAgbGV0IG5hbWUgPSBmaWxlTmFtZS5yZXBsYWNlKC9bXmEtekEtWjAtOV9dL2csICdfJyk7XG4gIC8vIEVuc3VyZSBpdCBkb2Vzbid0IHN0YXJ0IHdpdGggYSBkaWdpdFxuICBpZiAoL15cXGQvLnRlc3QobmFtZSkpIHtcbiAgICBuYW1lID0gYHRfJHtuYW1lfWA7XG4gIH1cbiAgcmV0dXJuIG5hbWUgfHwgJ2RlZmF1bHRfdGFibGUnO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFXQSxJQUFBQSxLQUFBLEdBQUFDLHVCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxLQUFBLEdBQUFELE9BQUE7QUFDQSxJQUFBRSxXQUFBLEdBQUFGLE9BQUE7QUFFQSxJQUFBRyxVQUFBLEdBQUFILE9BQUE7QUFFQSxJQUFBSSxNQUFBLEdBQUFKLE9BQUE7QUFBMEUsU0FBQUsseUJBQUFDLENBQUEsNkJBQUFDLE9BQUEsbUJBQUFDLENBQUEsT0FBQUQsT0FBQSxJQUFBRSxDQUFBLE9BQUFGLE9BQUEsWUFBQUYsd0JBQUEsWUFBQUEseUJBQUFDLENBQUEsV0FBQUEsQ0FBQSxHQUFBRyxDQUFBLEdBQUFELENBQUEsS0FBQUYsQ0FBQTtBQUFBLFNBQUFQLHdCQUFBTyxDQUFBLEVBQUFFLENBQUEsU0FBQUEsQ0FBQSxJQUFBRixDQUFBLElBQUFBLENBQUEsQ0FBQUksVUFBQSxTQUFBSixDQUFBLGVBQUFBLENBQUEsZ0JBQUFLLE9BQUEsQ0FBQUwsQ0FBQSwwQkFBQUEsQ0FBQSxzQkFBQUEsQ0FBQSxRQUFBRyxDQUFBLEdBQUFKLHdCQUFBLENBQUFHLENBQUEsT0FBQUMsQ0FBQSxJQUFBQSxDQUFBLENBQUFHLEdBQUEsQ0FBQU4sQ0FBQSxVQUFBRyxDQUFBLENBQUFJLEdBQUEsQ0FBQVAsQ0FBQSxPQUFBUSxDQUFBLEtBQUFDLFNBQUEsVUFBQUMsQ0FBQSxHQUFBQyxNQUFBLENBQUFDLGNBQUEsSUFBQUQsTUFBQSxDQUFBRSx3QkFBQSxXQUFBQyxDQUFBLElBQUFkLENBQUEsb0JBQUFjLENBQUEsT0FBQUMsY0FB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
|
|
636
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJhcnJvdyIsIl9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkIiwicmVxdWlyZSIsIl90eXBlIiwiX2R1Y2tkYldhc20iLCJfY29uc3RhbnRzIiwiX3V0aWxzIiwiX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlIiwiZSIsIldlYWtNYXAiLCJyIiwidCIsIl9fZXNNb2R1bGUiLCJfdHlwZW9mIiwiaGFzIiwiZ2V0IiwibiIsIl9fcHJvdG9fXyIsImEiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsInUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJpIiwic2V0IiwiU1VQUE9SVEVEX0RVQ0tEQl9EUk9QX0VYVEVOU0lPTlMiLCJleHBvcnRzIiwiZ2V0RHVja0RCQ29sdW1uVHlwZXMiLCJfeCIsIl94MiIsIl9nZXREdWNrREJDb2x1bW5UeXBlcyIsImFwcGx5IiwiYXJndW1lbnRzIiwiX2FzeW5jVG9HZW5lcmF0b3IyIiwiX3JlZ2VuZXJhdG9yIiwibWFyayIsIl9jYWxsZWUyIiwiY29ubmVjdGlvbiIsInRhYmxlTmFtZSIsInF1b3RlZFRhYmxlTmFtZSIsInJlc0Rlc2NyaWJlIiwiZHVja0RiVHlwZXMiLCJudW1Sb3dzIiwiX3Jlc0Rlc2NyaWJlJGdldENoaWxkIiwiX3Jlc0Rlc2NyaWJlJGdldENoaWxkMiIsImNvbHVtbk5hbWUiLCJjb2x1bW5UeXBlIiwid3JhcCIsIl9jYWxsZWUyJCIsIl9jb250ZXh0MiIsInByZXYiLCJuZXh0IiwicXVvdGVUYWJsZU5hbWUiLCJxdWVyeSIsImNvbmNhdCIsInNlbnQiLCJnZXRDaGlsZEF0IiwicHVzaCIsIm5hbWUiLCJ0eXBlIiwiYWJydXB0Iiwic3RvcCIsImdldER1Y2tEQkNvbHVtblR5cGVzTWFwIiwiY29sdW1ucyIsInJlZHVjZSIsImFjYyIsInZhbHVlIiwic3RhcnRzV2l0aCIsImVuZHNXaXRoIiwiaW5jbHVkZXMiLCJyZXBsYWNlIiwicXVvdGVDb2x1bW5OYW1lIiwiY2FzdER1Y2tEQlR5cGVzRm9yS2VwbGVyIiwib3B0aW9ucyIsImxlbmd0aCIsInVuZGVmaW5lZCIsImdlb21ldHJ5VG9XS0IiLCJiaWdJbnRUb0RvdWJsZSIsIm1vZGlmaWVkQ29sdW1ucyIsIm1hcCIsImNvbHVtbiIsInF1b3RlZENvbHVtbk5hbWUiLCJqb2luIiwic2V0R2VvQXJyb3dXS0JFeHRlbnNpb24iLCJ0YWJsZSIsInNjaGVtYSIsImZpZWxkcyIsImZvckVhY2giLCJmaWVsZCIsImluZm8iLCJmaW5kIiwibWV0YWRhdGEiLCJHRU9BUlJPV19NRVRBREFUQV9LRVkiLCJHRU9BUlJPV19FWFRFTlNJT05TIiwiV0tCIiwicmVzdG9yZUFycm93VGFibGUiLCJhcnJvd1NjaGVtYSIsImNyZWFPcHRzIiwiaW5kZXgiLCJUYWJsZSIsInJlbW92ZVVuc3VwcG9ydGVkRXh0ZW5zaW9ucyIsInJlbW92ZWRNZXRhZGF0YSIsImV4dGVuc2lvbiIsInJlc3RvcmVVbnN1cHBvcnRlZEV4dGVuc2lvbnMiLCJyZW1vdmVkRXh0ZW5zaW9ucyIsImlzR2VvQXJyb3dQb2ludCIsIkRhdGFUeXBlIiwiaXNGaXhlZFNpemVMaXN0IiwibGlzdFNpemUiLCJpc0Zsb2F0IiwiY2hpbGRyZW4iLCJpc0dlb0Fycm93TGluZVN0cmluZyIsImlzTGlzdCIsImlzR2VvQXJyb3dQb2x5Z29uIiwiaXNHZW9BcnJvd011bHRpUG9pbnQiLCJpc0dlb0Fycm93TXVsdGlMaW5lU3RyaW5nIiwiaXNHZW9BcnJvd011bHRpUG9seWdvbiIsImNoZWNrSXNTZWxlY3RRdWVyeSIsIl94MyIsIl94NCIsIl9jaGVja0lzU2VsZWN0UXVlcnkiLCJfY2FsbGVlMyIsInJlc3VsdCIsIl9jYWxsZWUzJCIsIl9jb250ZXh0MyIsInQwIiwic3BsaXRTcWxTdGF0ZW1lbnRzIiwiaW5wdXQiLCJxdWVyaWVzIiwiY3VycmVudFF1ZXJ5IiwiaW5TaW5nbGVRdW90ZSIsImluRG91YmxlUXVvdGUiLCJpbkxpbmVDb21tZW50IiwiaW5CbG9ja0NvbW1lbnQiLCJjaGFyIiwidHJpbW1lZCIsInRyaW0iLCJyZW1vdmVTUUxDb21tZW50cyIsInNxbCIsImRyb3BUYWJsZUlmRXhpc3RzIiwiX3JlZiIsIl9jYWxsZWUiLCJfY2FsbGVlJCIsIl9jb250ZXh0IiwiY29uc29sZSIsImVycm9yIiwiX3g1IiwiX3g2IiwidGFibGVGcm9tRmlsZSIsIl94NyIsIl90YWJsZUZyb21GaWxlIiwiX2NhbGxlZTQiLCJmaWxlIiwiZmlsZUV4dCIsImRiIiwiYyIsInNvdXJjZU5hbWUiLCJhcnJheUJ1ZmZlciIsInVpbnQ4QXJyYXkiLCJhcnJvd1RhYmxlIiwibWVzc2FnZSIsIl9jYWxsZWU0JCIsIl9jb250ZXh0NCIsIkVycm9yIiwiZXh0IiwiZ2V0QXBwbGljYXRpb25Db25maWciLCJkYXRhYmFzZSIsImNvbm5lY3QiLCJzYW5pdGl6ZUR1Y2tEQlRhYmxlTmFtZSIsIlVpbnQ4QXJyYXkiLCJ0YWJsZUZyb21JUEMiLCJpbnNlcnRBcnJvd1RhYmxlIiwicmVnaXN0ZXJGaWxlSGFuZGxlIiwiRHVja0RCRGF0YVByb3RvY29sIiwiQlJPV1NFUl9GSUxFUkVBREVSIiwiY2xvc2UiLCJmaWxlTmFtZSIsInRlc3QiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvdGFibGUvZHVja2RiLXRhYmxlLXV0aWxzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbi8vIGxvYWRlcnMuZ2xcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCAoYykgdmlzLmdsIGNvbnRyaWJ1dG9yc1xuXG4vLyBDb3BpZWQgZnJvbSBsb2FkZXJzLmdsL2dlb2Fycm93XG5cbi8vIFRPRE86IFJlbW92ZSBpc0dlb0Fycm93KiBvbmNlIEtlcGxlci5nbCBpcyB1cGdyYWRlZCB0byBsb2FkZXJzLmdsIDQuNCtcblxuaW1wb3J0ICogYXMgYXJyb3cgZnJvbSAnYXBhY2hlLWFycm93JztcbmltcG9ydCB7RGF0YVR5cGV9IGZyb20gJ2FwYWNoZS1hcnJvdy90eXBlJztcbmltcG9ydCB7RHVja0RCRGF0YVByb3RvY29sfSBmcm9tICdAZHVja2RiL2R1Y2tkYi13YXNtJztcblxuaW1wb3J0IHtHRU9BUlJPV19FWFRFTlNJT05TLCBHRU9BUlJPV19NRVRBREFUQV9LRVl9IGZyb20gJ0BrZXBsZXIuZ2wvY29uc3RhbnRzJztcbmltcG9ydCB7UHJvdG9EYXRhc2V0RmllbGR9IGZyb20gJ0BrZXBsZXIuZ2wvdHlwZXMnO1xuaW1wb3J0IHtEYXRhYmFzZUNvbm5lY3Rpb24sIGdldEFwcGxpY2F0aW9uQ29uZmlnfSBmcm9tICdAa2VwbGVyLmdsL3V0aWxzJztcblxuZXhwb3J0IGNvbnN0IFNVUFBPUlRFRF9EVUNLREJfRFJPUF9FWFRFTlNJT05TID0gWydhcnJvdycsICdjc3YnLCAnZ2VvanNvbicsICdqc29uJywgJ3BhcnF1ZXQnXTtcblxuZXhwb3J0IHR5cGUgRHVja0RCQ29sdW1uRGVzYyA9IHtuYW1lOiBzdHJpbmc7IHR5cGU6IHN0cmluZ307XG5cbi8qKlxuICogUXVlcmllcyBhIER1Y2tEQiB0YWJsZSBmb3IgdGhlIHNjaGVtYSBkZXNjcmlwdGlvbi5cbiAqIEBwYXJhbSBjb25uZWN0aW9uIEFuIGFjdGl2ZSBEdWNrREIgY29ubmVjdGlvbi5cbiAqIEBwYXJhbSB0YWJsZU5hbWUgQSBuYW1lIG9mIER1Y2tEQiB0YWJsZSB0byBxdWVyeS5cbiAqIEByZXR1cm5zIEFuIGFycmF5IG9mIGNvbHVtbiBuYW1lcyBhbmQgRHVja0RCIHR5cGVzLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0RHVja0RCQ29sdW1uVHlwZXMoXG4gIGNvbm5lY3Rpb246IERhdGFiYXNlQ29ubmVjdGlvbixcbiAgdGFibGVOYW1lOiBzdHJpbmdcbik6IFByb21pc2U8RHVja0RCQ29sdW1uRGVzY1tdPiB7XG4gIGNvbnN0IHF1b3RlZFRhYmxlTmFtZSA9IHF1b3RlVGFibGVOYW1lKHRhYmxlTmFtZSk7XG4gIGNvbnN0IHJlc0Rlc2NyaWJlID0gYXdhaXQgY29ubmVjdGlvbi5xdWVyeShgREVTQ1JJQkUgJHtxdW90ZWRUYWJsZU5hbWV9YCk7XG5cbiAgY29uc3QgZHVja0RiVHlwZXM6IER1Y2tEQkNvbHVtbkRlc2NbXSA9IFtdO1xuICBjb25zdCBudW1Sb3dzID0gcmVzRGVzY3JpYmUubnVtUm93cztcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBudW1Sb3dzOyArK2kpIHtcbiAgICBjb25zdCBjb2x1bW5OYW1lID0gcmVzRGVzY3JpYmUuZ2V0Q2hpbGRBdCgwKT8uZ2V0KGkpO1xuICAgIGNvbnN0IGNvbHVtblR5cGUgPSByZXNEZXNjcmliZS5nZXRDaGlsZEF0KDEpPy5nZXQoaSk7XG5cbiAgICBkdWNrRGJUeXBlcy5wdXNoKHtcbiAgICAgIG5hbWU6IGNvbHVtbk5hbWUsXG4gICAgICB0eXBlOiBjb2x1bW5UeXBlXG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gZHVja0RiVHlwZXM7XG59XG5cbi8qKlxuICogR2VuZXJhdGVzIGEgbWFwcGluZyBvZiBjb2x1bW4gbmFtZXMgdG8gdGhlaXIgY29ycmVzcG9uZGluZyBEdWNrREIgZGF0YSB0eXBlcy5cbiAqIEBwYXJhbSBjb2x1bW5zIEFuIGFycmF5IG9mIGNvbHVtbiBkZXNjcmlwdGlvbnMgZnJvbSBEdWNrREIuIENoZWNrIGdldER1Y2tEQkNvbHVtblR5cGVzLlxuICogQHJldHVybnMgQSByZWNvcmQgd2hlcmUga2V5cyBhcmUgY29sdW1uIG5hbWVzIGFuZCB2YWx1ZXMgYXJlIHRoZWlyIGRhdGEgdHlwZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXREdWNrREJDb2x1bW5UeXBlc01hcChjb2x1bW5zOiBEdWNrREJDb2x1bW5EZXNjW10pIHtcbiAgcmV0dXJuIGNvbHVtbnMucmVkdWNlKChhY2MsIHZhbHVlKSA9PiB7XG4gICAgYWNjW3ZhbHVlLm5hbWVdID0gdmFsdWUudHlwZTtcbiAgICByZXR1cm4gYWNjO1xuICB9LCB7fSBhcyBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+KTtcbn1cblxuLyoqXG4gKiBRdW90ZXMgYSB0YWJsZSBuYW1lIGZvciBzYWZlIFNRTCB1c2FnZS5cbiAqIEFsd2F5cyBxdW90ZXMgdG8gaGFuZGxlIGFsbCBlZGdlIGNhc2VzIChzcGFjZXMsIHNwZWNpYWwgY2hhcmFjdGVycywgcmVzZXJ2ZWQgd29yZHMpLlxuICogRm9yIGZ1bGx5IHF1YWxpZmllZCBuYW1lcyAoY29udGFpbmluZyBkb3RzKSwgcHJlc2VydmVzIHRoZSBleGlzdGluZyBzdHJ1Y3R1cmUuXG4gKiBAcGFyYW0gdGFibGVOYW1lIFRoZSB0YWJsZSBuYW1lIHRvIHF1b3RlLlxuICogQHJldHVybnMgVGhlIHRhYmxlIG5hbWUsIHByb3Blcmx5IHF1b3RlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHF1b3RlVGFibGVOYW1lKHRhYmxlTmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgLy8gUmV0dXJuIGFzLWlzIGlmOlxuICAvLyAxLiBJdCdzIGFscmVhZHkgYSBwcm9wZXJseSBxdW90ZWQgc2ltcGxlIGlkZW50aWZpZXIgKHN0YXJ0cyBhbmQgZW5kcyB3aXRoIHF1b3RlcylcbiAgLy8gMi4gSXQgY29udGFpbnMgYm90aCBkb3RzIGFuZCBxdW90ZXMgKGFzc3VtZSBpdCdzIGEgcXVhbGlmaWVkIG5hbWUpXG4gIGlmIChcbiAgICAodGFibGVOYW1lLnN0YXJ0c1dpdGgoJ1wiJykgJiYgdGFibGVOYW1lLmVuZHNXaXRoKCdcIicpKSB8fFxuICAgICh0YWJsZU5hbWUuaW5jbHVkZXMoJy4nKSAmJiB0YWJsZU5hbWUuaW5jbHVkZXMoJ1wiJykpXG4gICkge1xuICAgIHJldHVybiB0YWJsZU5hbWU7XG4gIH1cblxuICByZXR1cm4gYFwiJHt0YWJsZU5hbWUucmVwbGFjZSgvXCIvZywgJ1wiXCInKX1cImA7XG59XG5cbi8qKlxuICogUXVvdGVzIGEgY29sdW1uIG5hbWUgZm9yIHNhZmUgU1FMIHVzYWdlLlxuICogQWx3YXlzIHF1b3RlcyB0byBoYW5kbGUgYWxsIGVkZ2UgY2FzZXMgKHNwYWNlcywgc3BlY2lhbCBjaGFyYWN0ZXJzLCByZXNlcnZlZCB3b3JkcykuXG4gKiBAcGFyYW0gY29sdW1uTmFtZSBUaGUgY29sdW1uIG5hbWUgdG8gcXVvdGUuXG4gKiBAcmV0dXJucyBUaGUgY29sdW1uIG5hbWUsIHByb3Blcmx5IHF1b3RlZC5cbiAqL1xuZnVuY3Rpb24gcXVvdGVDb2x1bW5OYW1lKGNvbHVtbk5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBgXCIke2NvbHVtbk5hbWUucmVwbGFjZSgvXCIvZywgJ1wiXCInKX1cImA7XG59XG5cbi8qKlxuICogQ29uc3RydWN0cyBhbiBTUUwgcXVlcnkgdG8gc2VsZWN0IGFsbCBjb2x1bW5zIGZyb20gYSBnaXZlbiB0YWJsZSxcbiAqIGNvbnZlcnRpbmcgc3BlY2lmaWVkIGNvbHVtbnMgdG8gV2VsbC1Lbm93biBCaW5hcnkgKFdLQikgZm9ybWF0IHVzaW5nIFNUX0FzV0tCLFxuICogYW5kIGNhc3RpbmcgQklHSU5UIGNvbHVtbnMgdG8gRE9VQkxFIGlmIHNwZWNpZmllZC5cbiAqIEBwYXJhbSB0YWJsZU5hbWUgVGhlIG5hbWUgb2YgdGhlIHRhYmxlIGZyb20gd2hpY2ggdG8gc2VsZWN0IGRhdGEuXG4gKiBAcGFyYW0gY29sdW1ucyBBbiBhcnJheSBvZiBjb2x1bW4gZGVzY3JpcHRvcnMsIGVhY2ggd2l0aCBhIHR5cGUgYW5kIG5hbWUuXG4gKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25hbCBwYXJhbWV0ZXJzIHRvIGNvbnRyb2wgdGhlIGNvbnZlcnNpb24gYmVoYXZpb3IuXG4gKiBAcmV0dXJucyBUaGUgY29uc3RydWN0ZWQgU1FMIHF1ZXJ5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gY2FzdER1Y2tEQlR5cGVzRm9yS2VwbGVyKFxuICB0YWJsZU5hbWU6IHN0cmluZyxcbiAgY29sdW1uczogRHVja0RCQ29sdW1uRGVzY1tdLFxuICBvcHRpb25zID0ge2dlb21ldHJ5VG9XS0I6IHRydWUsIGJpZ0ludFRvRG91YmxlOiB0cnVlfVxuKTogc3RyaW5nIHtcbiAgY29uc3QgbW9kaWZpZWRDb2x1bW5zID0gY29sdW1ucy5tYXAoY29sdW1uID0+IHtcbiAgICBjb25zdCB7bmFtZSwgdHlwZX0gPSBjb2x1bW47XG4gICAgY29uc3QgcXVvdGVkQ29sdW1uTmFtZSA9IHF1b3RlQ29sdW1uTmFtZShuYW1lKTtcbiAgICBpZiAodHlwZSA9PT0gJ0dFT01FVFJZJyAmJiBvcHRpb25zLmdlb21ldHJ5VG9XS0IpIHtcbiAgICAgIHJldHVybiBgU1RfQXNXS0IoJHtxdW90ZWRDb2x1bW5OYW1lfSkgYXMgJHtxdW90ZWRDb2x1bW5OYW1lfWA7XG4gICAgfSBlbHNlIGlmICh0eXBlID09PSAnQklHSU5UJyAmJiBvcHRpb25zLmJpZ0ludFRvRG91YmxlKSB7XG4gICAgICByZXR1cm4gYENBU1QoJHtxdW90ZWRDb2x1bW5OYW1lfSBBUyBET1VCTEUpIGFzICR7cXVvdGVkQ29sdW1uTmFtZX1gO1xuICAgIH1cbiAgICByZXR1cm4gcXVvdGVkQ29sdW1uTmFtZTtcbiAgfSk7XG5cbiAgY29uc3QgcXVvdGVkVGFibGVOYW1lID0gcXVvdGVUYWJsZU5hbWUodGFibGVOYW1lKTtcbiAgcmV0dXJuIGBTRUxFQ1QgJHttb2RpZmllZENvbHVtbnMuam9pbignLCAnKX0gRlJPTSAke3F1b3RlZFRhYmxlTmFtZX1gO1xufVxuXG4vKipcbiAqIFNldHMgdGhlIEdlb0Fycm93IFdLQiBleHRlbnNpb24gbWV0YWRhdGEgZm9yIGNvbHVtbnMgb2YgdHlwZSBHRU9NRVRSWSBpbiBhbiBBcnJvdyB0YWJsZS5cbiAqIEBwYXJhbSB0YWJsZSBUaGUgQXBhY2hlIEFycm93IHRhYmxlIHdob3NlIHNjaGVtYSBmaWVsZHMgd2lsbCBiZSBtb2RpZmllZC5cbiAqIEBwYXJhbSBjb2x1bW5zIEFuIGFycmF5IG9mIGNvbHVtbiBkZXNjcmlwdG9ycyBmcm9tIGEgRHVja0RCIHRhYmxlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0R2VvQXJyb3dXS0JFeHRlbnNpb24odGFibGU6IGFycm93LlRhYmxlLCBjb2x1bW5zOiBEdWNrREJDb2x1bW5EZXNjW10pIHtcbiAgdGFibGUuc2NoZW1hLmZpZWxkcy5mb3JFYWNoKGZpZWxkID0+IHtcbiAgICBjb25zdCBpbmZvID0gY29sdW1ucy5maW5kKHQgPT4gdC5uYW1lID09PSBmaWVsZC5uYW1lKTtcbiAgICBpZiAoaW5mbz8udHlwZSA9PT0gJ0dFT01FVFJZJykge1xuICAgICAgZmllbGQubWV0YWRhdGEuc2V0KEdFT0FSUk9XX01FVEFEQVRBX0tFWSwgR0VPQVJST1dfRVhURU5TSU9OUy5XS0IpO1xuICAgIH1cbiAgfSk7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJvdyB0YWJsZSBmcm9tIGFuIGFycmF5IG9mIGFycm93IHZlY3RvcnMgYW5kIGZpZWxkcy5cbiAqIEBwYXJhbSBjb2x1bW5zIEFuIGFycmF5IG9mIGFycm93IHZlY3RvcnMuXG4gKiBAcGFyYW0gZmllbGRzIEFuIGFycmF5IG9mIGZpZWxkcyBwZXIgYXJyb3cgdmVjdG9yLlxuICogQHBhcmFtIGFycm93U2NoZW1hIE9wdGlvbmFsIGFycm93IHRhYmxlIHNjaGVtYSB3aGVuIGF2YWlsYWJsZS5cbiAqIEByZXR1cm5zIEFuIGFycm93IHRhYmxlLlxuICovXG5leHBvcnQgY29uc3QgcmVzdG9yZUFycm93VGFibGUgPSAoXG4gIGNvbHVtbnM6IGFycm93LlZlY3RvcltdLFxuICBmaWVsZHM6IFByb3RvRGF0YXNldEZpZWxkW10sXG4gIGFycm93U2NoZW1hPzogYXJyb3cuU2NoZW1hXG4pID0+IHtcbiAgY29uc3QgY3JlYU9wdHMgPSB7fTtcbiAgZmllbGRzLm1hcCgoZmllbGQsIGluZGV4KSA9PiB7XG4gICAgY3JlYU9wdHNbZmllbGQubmFtZV0gPSBjb2x1bW5zW2luZGV4XTtcbiAgfSk7XG5cbiAgcmV0dXJuIGFycm93U2NoZW1hID8gbmV3IGFycm93LlRhYmxlKGFycm93U2NoZW1hLCBjcmVhT3B0cykgOiBuZXcgYXJyb3cuVGFibGUoY3JlYU9wdHMpO1xufTtcblxuLyoqXG4gKiBEdWNrRGIgdGhyb3dzIHdoZW4gZ2VvYXJyb3cgZXh0ZW5zaW9ucyBhcmUgcHJlc2VudCBpbiBtZXRhZGF0YS5cbiAqIEBwYXJhbSB0YWJsZSBBbiBhcnJvdyB0YWJsZSB0byBjbGVhciBmcm9tIGV4dGVuc2lvbnMuXG4gKiBAcmV0dXJucyBBIG1hcCBvZiByZW1vdmVkIHBlciBmaWVsZCBnZW9hcnJvdyBleHRlbnNpb25zLlxuICovXG5leHBvcnQgY29uc3QgcmVtb3ZlVW5zdXBwb3J0ZWRFeHRlbnNpb25zID0gKHRhYmxlOiBhcnJvdy5UYWJsZSk6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPT4ge1xuICBjb25zdCByZW1vdmVkTWV0YWRhdGE6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcbiAgdGFibGUuc2NoZW1hLmZpZWxkcy5mb3JFYWNoKGZpZWxkID0+IHtcbiAgICBjb25zdCBleHRlbnNpb24gPSBmaWVsZC5tZXRhZGF0YS5nZXQoR0VPQVJST1dfTUVUQURBVEFfS0VZKTtcbiAgICBpZiAoZXh0ZW5zaW9uPy5zdGFydHNXaXRoKCdnZW9hcnJvdycpKSB7XG4gICAgICByZW1vdmVkTWV0YWRhdGFbZmllbGQubmFtZV0gPSBleHRlbnNpb247XG4gICAgICBmaWVsZC5tZXRhZGF0YS5kZWxldGUoR0VPQVJST1dfTUVUQURBVEFfS0VZKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gcmVtb3ZlZE1ldGFkYXRhO1xufTtcblxuLyoqXG4gKiBSZXN0b3JlIHJlbW92ZWQgbWV0YWRhdGEgZXh0ZW5zaW9ucyBhZnRlciBhIGNhbGwgdG8gcmVtb3ZlVW5zdXBwb3J0ZWRFeHRlbnNpb25zLlxuICogQHBhcmFtIHRhYmxlIEFuIGFycm93IHRhYmxlIHRvIHJlc3RvcmUgZ2VvYXJyb3cgZXh0ZW5zaW9ucy5cbiAqIEBwYXJhbSByZW1vdmVkRXh0ZW5zaW9ucyBBIG1hcCBvZiBwZXIgZmllbGQgZ2VvYXJyb3cgZXh0ZW5zaW9ucyB0byByZXN0b3JlLlxuICovXG5leHBvcnQgY29uc3QgcmVzdG9yZVVuc3VwcG9ydGVkRXh0ZW5zaW9ucyA9IChcbiAgdGFibGU6IGFycm93LlRhYmxlLFxuICByZW1vdmVkRXh0ZW5zaW9uczogUmVjb3JkPHN0cmluZywgc3RyaW5nPlxuKSA9PiB7XG4gIHRhYmxlLnNjaGVtYS5maWVsZHMuZm9yRWFjaChmaWVsZCA9PiB7XG4gICAgY29uc3QgZXh0ZW5zaW9uID0gcmVtb3ZlZEV4dGVuc2lvbnNbZmllbGQubmFtZV07XG4gICAgaWYgKGV4dGVuc2lvbikge1xuICAgICAgZmllbGQubWV0YWRhdGEuc2V0KEdFT0FSUk9XX01FVEFEQVRBX0tFWSwgZXh0ZW5zaW9uKTtcbiAgICB9XG4gIH0pO1xufTtcblxuLyoqIENoZWNrcyB3aGV0aGVyIHRoZSBnaXZlbiBBcGFjaGUgQXJyb3cgSlMgdHlwZSBpcyBhIFBvaW50IGRhdGEgdHlwZSAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzR2VvQXJyb3dQb2ludCh0eXBlOiBEYXRhVHlwZSkge1xuICBpZiAoRGF0YVR5cGUuaXNGaXhlZFNpemVMaXN0KHR5cGUpKSB7XG4gICAgLy8gQ2hlY2sgbGlzdCBzaXplXG4gICAgaWYgKCFbMiwgMywgNF0uaW5jbHVkZXModHlwZS5saXN0U2l6ZSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBDaGVjayBjaGlsZCBvZiBGaXhlZFNpemVMaXN0IGlzIGZsb2F0aW5nIHR5cGVcbiAgICBpZiAoIURhdGFUeXBlLmlzRmxvYXQodHlwZS5jaGlsZHJlblswXSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuLyoqIENoZWNrcyB3aGV0aGVyIHRoZSBnaXZlbiBBcGFjaGUgQXJyb3cgSlMgdHlwZSBpcyBhIFBvaW50IGRhdGEgdHlwZSAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzR2VvQXJyb3dMaW5lU3RyaW5nKHR5cGU6IERhdGFUeXBlKSB7XG4gIC8vIENoZWNrIHRoZSBvdXRlciB0eXBlIGlzIGEgTGlzdFxuICBpZiAoIURhdGFUeXBlLmlzTGlzdCh0eXBlKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8vIENoZWNrIHRoZSBjaGlsZCBpcyBhIHBvaW50IHR5cGVcbiAgaWYgKCFpc0dlb0Fycm93UG9pbnQodHlwZS5jaGlsZHJlblswXS50eXBlKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG4vKiogQ2hlY2tzIHdoZXRoZXIgdGhlIGdpdmVuIEFwYWNoZSBBcnJvdyBKUyB0eXBlIGlzIGEgUG9seWdvbiBkYXRhIHR5cGUgKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0dlb0Fycm93UG9seWdvbih0eXBlOiBEYXRhVHlwZSkge1xuICAvLyBDaGVjayB0aGUgb3V0ZXIgdmVjdG9yIGlzIGEgTGlzdFxuICBpZiAoIURhdGFUeXBlLmlzTGlzdCh0eXBlKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8vIENoZWNrIHRoZSBjaGlsZCBpcyBhIGxpbmVzdHJpbmcgdmVjdG9yXG4gIGlmICghaXNHZW9BcnJvd0xpbmVTdHJpbmcodHlwZS5jaGlsZHJlblswXS50eXBlKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG4vKiogQ2hlY2tzIHdoZXRoZXIgdGhlIGdpdmVuIEFwYWNoZSBBcnJvdyBKUyB0eXBlIGlzIGEgUG9seWdvbiBkYXRhIHR5cGUgKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0dlb0Fycm93TXVsdGlQb2ludCh0eXBlOiBEYXRhVHlwZSkge1xuICAvLyBDaGVjayB0aGUgb3V0ZXIgdmVjdG9yIGlzIGEgTGlzdFxuICBpZiAoIURhdGFUeXBlLmlzTGlzdCh0eXBlKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8vIENoZWNrIHRoZSBjaGlsZCBpcyBhIHBvaW50IHZlY3RvclxuICBpZiAoIWlzR2VvQXJyb3dQb2ludCh0eXBlLmNoaWxkcmVuWzBdLnR5cGUpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbi8qKiBDaGVja3Mgd2hldGhlciB0aGUgZ2l2ZW4gQXBhY2hlIEFycm93IEpTIHR5cGUgaXMgYSBQb2x5Z29uIGRhdGEgdHlwZSAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzR2VvQXJyb3dNdWx0aUxpbmVTdHJpbmcodHlwZTogRGF0YVR5cGUpIHtcbiAgLy8gQ2hlY2sgdGhlIG91dGVyIHZlY3RvciBpcyBhIExpc3RcbiAgaWYgKCFEYXRhVHlwZS5pc0xpc3QodHlwZSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvLyBDaGVjayB0aGUgY2hpbGQgaXMgYSBsaW5lc3RyaW5nIHZlY3RvclxuICBpZiAoIWlzR2VvQXJyb3dMaW5lU3RyaW5nKHR5cGUuY2hpbGRyZW5bMF0udHlwZSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuLyoqIENoZWNrcyB3aGV0aGVyIHRoZSBnaXZlbiBBcGFjaGUgQXJyb3cgSlMgdHlwZSBpcyBhIFBvbHlnb24gZGF0YSB0eXBlICovXG5leHBvcnQgZnVuY3Rpb24gaXNHZW9BcnJvd011bHRpUG9seWdvbih0eXBlOiBEYXRhVHlwZSkge1xuICAvLyBDaGVjayB0aGUgb3V0ZXIgdmVjdG9yIGlzIGEgTGlzdFxuICBpZiAoIURhdGFUeXBlLmlzTGlzdCh0eXBlKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8vIENoZWNrIHRoZSBjaGlsZCBpcyBhIHBvbHlnb24gdmVjdG9yXG4gIGlmICghaXNHZW9BcnJvd1BvbHlnb24odHlwZS5jaGlsZHJlblswXS50eXBlKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiB0aGUgZ2l2ZW4gU1FMIHF1ZXJ5IGlzIGEgU0VMRUNUIHF1ZXJ5IGJ5IHVzaW5nIHRoZSBFWFBMQUlOIGNvbW1hbmQuXG4gKiBAcGFyYW0gY29ubmVjdGlvbiBUaGUgRHVja0RCIGNvbm5lY3Rpb24gaW5zdGFuY2UuXG4gKiBAcGFyYW0gcXVlcnkgVGhlIFNRTCBxdWVyeSB0byBjaGVjay5cbiAqIEByZXR1cm5zIFJlc29sdmVzIHRvIGB0cnVlYCBpZiB0aGUgcXVlcnkgaXMgYSBTRUxFQ1Qgc3RhdGVtZW50LCBvdGhlcndpc2UgYGZhbHNlYC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNoZWNrSXNTZWxlY3RRdWVyeShcbiAgY29ubmVjdGlvbjogRGF0YWJhc2VDb25uZWN0aW9uLFxuICBxdWVyeTogc3RyaW5nXG4pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjb25uZWN0aW9uLnF1ZXJ5KGBFWFBMQUlOICgke3F1ZXJ5fSlgKTtcbiAgICByZXR1cm4gcmVzdWx0Lm51bVJvd3MgPiAwO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG4vKipcbiAqIFNwbGl0IGEgc3RyaW5nIHdpdGggcG90ZW50aWFsbHkgbXVsdGlwbGUgU1FMIHF1ZXJpZXMgKHNlcGFyYXRlZCBhcyB1c3VhbCBieSAnOycpIGludG8gYW4gYXJyYXkgb2YgcXVlcmllcy5cbiAqIFRoaXMgaW1wbGVtZW50YXRpb246XG4gKiAgLSBIYW5kbGVzIHNpbmdsZSBhbmQgZG91YmxlIHF1b3RlZCBzdHJpbmdzIHdpdGggcHJvcGVyIGVzY2FwaW5nXG4gKiAgLSBJZ25vcmVzIHNlbWljb2xvbnMgaW4gbGluZSBjb21tZW50cyAoLS0pIGFuZCBibG9jayBjb21tZW50cyAoc2xhc2ggYXN0ZXJpc2spXG4gKiAgLSBUcmltcyB3aGl0ZXNwYWNlIGZyb20gcXVlcmllc1xuICogIC0gSGFuZGxlcyBTUUwtc3R5bGUgZXNjYXBlZCBxdW90ZXMgKCcnIGluc2lkZSBzdHJpbmdzKVxuICogIC0gUmV0dXJucyBvbmx5IG5vbi1lbXB0eSBxdWVyaWVzXG4gKiBAcGFyYW0gaW5wdXQgQSBzdHJpbmcgd2l0aCBwb3RlbnRpYWxseSBtdWx0aXBsZSBTUUwgcXVlcmllcy5cbiAqIEByZXR1cm5zIEFuIGFycmF5IG9mIHF1ZXJpZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzcGxpdFNxbFN0YXRlbWVudHMoaW5wdXQ6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgY29uc3QgcXVlcmllczogc3RyaW5nW10gPSBbXTtcbiAgbGV0IGN1cnJlbnRRdWVyeSA9ICcnO1xuICBsZXQgaW5TaW5nbGVRdW90ZSA9IGZhbHNlO1xuICBsZXQgaW5Eb3VibGVRdW90ZSA9IGZhbHNlO1xuICBsZXQgaW5MaW5lQ29tbWVudCA9IGZhbHNlO1xuICBsZXQgaW5CbG9ja0NvbW1lbnQgPSBmYWxzZTtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IGlucHV0Lmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgY2hhciA9IGlucHV0W2ldO1xuXG4gICAgaWYgKGluTGluZUNvbW1lbnQpIHtcbiAgICAgIGN1cnJlbnRRdWVyeSArPSBjaGFyO1xuICAgICAgaWYgKGNoYXIgPT09ICdcXG4nKSB7XG4gICAgICAgIGluTGluZUNvbW1lbnQgPSBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmIChpbkJsb2NrQ29tbWVudCkge1xuICAgICAgY3VycmVudFF1ZXJ5ICs9IGNoYXI7XG4gICAgICBpZiAoY2hhciA9PT0gJyonICYmIGlucHV0W2kgKyAxXSA9PT0gJy8nKSB7XG4gICAgICAgIGluQmxvY2tDb21tZW50ID0gZmFsc2U7XG4gICAgICAgIGN1cnJlbnRRdWVyeSArPSBpbnB1dFsrK2ldOyAvLyBDb25zdW1lICcvJ1xuICAgICAgfVxuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKGluU2luZ2xlUXVvdGUpIHtcbiAgICAgIGN1cnJlbnRRdWVyeSArPSBjaGFyO1xuICAgICAgaWYgKGNoYXIgPT09IFwiJ1wiKSB7XG4gICAgICAgIC8vIEhhbmRsZSBlc2NhcGVkIHNpbmdsZSBxdW90ZXMgaW4gU1FMXG4gICAgICAgIGlmIChpICsgMSA8IGlucHV0Lmxlbmd0aCAmJiBpbnB1dFtpICsgMV0gPT09IFwiJ1wiKSB7XG4gICAgICAgICAgY3VycmVudFF1ZXJ5ICs9IGlucHV0WysraV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaW5TaW5nbGVRdW90ZSA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAoaW5Eb3VibGVRdW90ZSkge1xuICAgICAgY3VycmVudFF1ZXJ5ICs9IGNoYXI7XG4gICAgICBpZiAoY2hhciA9PT0gJ1wiJykge1xuICAgICAgICAvLyBIYW5kbGUgZXNjYXBlZCBkb3VibGUgcXVvdGVzXG4gICAgICAgIGlmIChpICsgMSA8IGlucHV0Lmxlbmd0aCAmJiBpbnB1dFtpICsgMV0gPT09ICdcIicpIHtcbiAgICAgICAgICBjdXJyZW50UXVlcnkgKz0gaW5wdXRbKytpXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpbkRvdWJsZVF1b3RlID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIC8vIENoZWNrIGZvciBjb21tZW50IHN0YXJ0c1xuICAgIGlmIChjaGFyID09PSAnLScgJiYgaW5wdXRbaSArIDFdID09PSAnLScpIHtcbiAgICAgIGluTGluZUNvbW1lbnQgPSB0cnVlO1xuICAgICAgY3VycmVudFF1ZXJ5ICs9IGNoYXIgKyBpbnB1dFsrK2ldO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKGNoYXIgPT09ICcvJyAmJiBpbnB1dFtpICsgMV0gPT09ICcqJykge1xuICAgICAgaW5CbG9ja0NvbW1lbnQgPSB0cnVlO1xuICAgICAgY3VycmVudFF1ZXJ5ICs9IGNoYXIgKyBpbnB1dFsrK2ldO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgZm9yIHF1b3RlIHN0YXJ0c1xuICAgIGlmIChjaGFyID09PSBcIidcIikge1xuICAgICAgaW5TaW5nbGVRdW90ZSA9IHRydWU7XG4gICAgICBjdXJyZW50UXVlcnkgKz0gY2hhcjtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmIChjaGFyID09PSAnXCInKSB7XG4gICAgICBpbkRvdWJsZVF1b3RlID0gdHJ1ZTtcbiAgICAgIGN1cnJlbnRRdWVyeSArPSBjaGFyO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgLy8gSGFuZGxlIHF1ZXJ5IHNlcGFyYXRvclxuICAgIGlmIChjaGFyID09PSAnOycpIHtcbiAgICAgIGNvbnN0IHRyaW1tZWQgPSBjdXJyZW50UXVlcnkudHJpbSgpO1xuICAgICAgaWYgKHRyaW1tZWQubGVuZ3RoID4gMCkge1xuICAgICAgICBxdWVyaWVzLnB1c2godHJpbW1lZCk7XG4gICAgICB9XG4gICAgICBjdXJyZW50UXVlcnkgPSAnJztcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGN1cnJlbnRRdWVyeSArPSBjaGFyO1xuICB9XG5cbiAgLy8gQWRkIHRoZSBmaW5hbCBxdWVyeVxuICBjb25zdCB0cmltbWVkID0gY3VycmVudFF1ZXJ5LnRyaW0oKTtcbiAgaWYgKHRyaW1tZWQubGVuZ3RoID4gMCkge1xuICAgIHF1ZXJpZXMucHVzaCh0cmltbWVkKTtcbiAgfVxuXG4gIHJldHVybiBxdWVyaWVzO1xufVxuXG4vKipcbiAqIFJlbW92ZXMgU1FMIGNvbW1lbnRzIGZyb20gYSBnaXZlbiBTUUwgc3RyaW5nLlxuICogQHBhcmFtIHNxbCBUaGUgU1FMIHF1ZXJ5IHN0cmluZyBmcm9tIHdoaWNoIGNvbW1lbnRzIHNob3VsZCBiZSByZW1vdmVkLlxuICogQHJldHVybnMgVGhlIGNsZWFuZWQgU1FMIHN0cmluZyB3aXRob3V0IGNvbW1lbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlU1FMQ29tbWVudHMoc3FsOiBzdHJpbmcpOiBzdHJpbmcge1xuICAvLyBSZW1vdmUgbXVsdGktbGluZSBjb21tZW50cyAoLyogLi4uICovKVxuICBzcWwgPSBzcWwucmVwbGFjZSgvXFwvXFwqW1xcc1xcU10qP1xcKlxcLy9nLCAnJyk7XG4gIC8vIFJlbW92ZSBzaW5nbGUtbGluZSBjb21tZW50cyAoLS0gLi4uKVxuICBzcWwgPSBzcWwucmVwbGFjZSgvLS0uKiQvZ20sICcnKTtcbiAgcmV0dXJuIHNxbC50cmltKCk7XG59XG5cbi8qKlxuICogRHJvcHMgYSB0YWJsZSBpZiBpdCBleGlzdHMgaW4gdGhlIER1Y2tEQiBkYXRhYmFzZS5cbiAqIEBwYXJhbSBjb25uZWN0aW9uIFRoZSBEdWNrREIgY29ubmVjdGlvbiBpbnN0YW5jZS5cbiAqIEBwYXJhbSB0YWJsZU5hbWUgVGhlIG5hbWUgb2YgdGhlIHRhYmxlIHRvIGRyb3AuXG4gKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBvcGVyYXRpb24gaXMgY29tcGxldGUuXG4gKiBAdGhyb3dzIExvZ3MgYW4gZXJyb3IgaWYgdGhlIHRhYmxlIGRyb3Agb3BlcmF0aW9uIGZhaWxzLlxuICovXG5leHBvcnQgY29uc3QgZHJvcFRhYmxlSWZFeGlzdHMgPSBhc3luYyAoY29ubmVjdGlvbjogRGF0YWJhc2VDb25uZWN0aW9uLCB0YWJsZU5hbWU6IHN0cmluZykgPT4ge1xuICB0cnkge1xuICAgIGF3YWl0IGNvbm5lY3Rpb24ucXVlcnkoYERST1AgVEFCTEUgSUYgRVhJU1RTIFwiJHt0YWJsZU5hbWV9XCI7YCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY29uc29sZS5lcnJvcignRHJvcHBpbmcgdGFibGUgZmFpbGVkJywgdGFibGVOYW1lLCBlcnJvcik7XG4gIH1cbn07XG5cbi8qKlxuICogSW1wb3J0cyBhIGZpbGUgaW50byBEdWNrREIgYXMgYSB0YWJsZSwgc3VwcG9ydGluZyBtdWx0aXBsZSBmb3JtYXRzIGZyb20gU1VQUE9SVEVEX0RVQ0tEQl9EUk9QX0VYVEVOU0lPTlMuXG4gKiBAcGFyYW0gZmlsZSBUaGUgZmlsZSB0byBiZSBpbXBvcnRlZC5cbiAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIGZpbGUgaGFzIGJlZW4gcHJvY2Vzc2VkIGludG8gYSBEdWNrREIgdGFibGUuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB0YWJsZUZyb21GaWxlKGZpbGU6IEZpbGUgfCBudWxsKTogUHJvbWlzZTxudWxsIHwgRXJyb3I+IHtcbiAgaWYgKCFmaWxlKSByZXR1cm4gbmV3IEVycm9yKCdGaWxlIERyYWcgJiBEcm9wOiBObyBmaWxlJyk7XG5cbiAgY29uc3QgZmlsZUV4dCA9IFNVUFBPUlRFRF9EVUNLREJfRFJPUF9FWFRFTlNJT05TLmZpbmQoZXh0ID0+IGZpbGUubmFtZS5lbmRzV2l0aChleHQpKTtcbiAgaWYgKCFmaWxlRXh0KSB7XG4gICAgcmV0dXJuIG5ldyBFcnJvcihcIkZpbGUgRHJhZyAmIERyb3A6IEZpbGUgZXh0ZW5zaW9uIGlzbid0IHN1cHBvcnRlZFwiKTtcbiAgfVxuXG4gIGNvbnN0IGRiID0gYXdhaXQgZ2V0QXBwbGljYXRpb25Db25maWcoKS5kYXRhYmFzZTtcbiAgaWYgKCFkYikge1xuICAgIHJldHVybiBuZXcgRXJyb3IoJ1RoZSBkYXRhYmFzZSBpcyBub3QgY29uZmlndXJlZCBwcm9wZXJseS4nKTtcbiAgfVxuICBjb25zdCBjID0gYXdhaXQgZGIuY29ubmVjdCgpO1xuXG4gIGxldCBlcnJvcjogRXJyb3IgfCBudWxsID0gbnVsbDtcblxuICB0cnkge1xuICAgIGNvbnN0IHRhYmxlTmFtZSA9IHNhbml0aXplRHVja0RCVGFibGVOYW1lKGZpbGUubmFtZSk7XG4gICAgY29uc3Qgc291cmNlTmFtZSA9ICd0ZW1wX2ZpbGVfaGFuZGxlJztcblxuICAgIGMucXVlcnkoYGluc3RhbGwgc3BhdGlhbDtcbiAgICAgIGxvYWQgc3BhdGlhbDtgKTtcblxuICAgIGlmIChmaWxlRXh0ID09PSAnYXJyb3cnKSB7XG4gICAgICBjb25zdCBhcnJheUJ1ZmZlciA9IGF3YWl0IGZpbGUuYXJyYXlCdWZmZXIoKTtcbiAgICAgIGNvbnN0IHVpbnQ4QXJyYXkgPSBuZXcgVWludDhBcnJheShhcnJheUJ1ZmZlcik7XG4gICAgICBjb25zdCBhcnJvd1RhYmxlID0gYXJyb3cudGFibGVGcm9tSVBDKHVpbnQ4QXJyYXkpO1xuXG4gICAgICBhd2FpdCBjLmluc2VydEFycm93VGFibGUoYXJyb3dUYWJsZSwge25hbWU6IHRhYmxlTmFtZX0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBhd2FpdCBkYi5yZWdpc3RlckZpbGVIYW5kbGUoc291cmNlTmFtZSwgZmlsZSwgRHVja0RCRGF0YVByb3RvY29sLkJST1dTRVJfRklMRVJFQURFUiwgdHJ1ZSk7XG5cbiAgICAgIGlmIChmaWxlRXh0ID09PSAnY3N2Jykge1xuICAgICAgICBhd2FpdCBjLnF1ZXJ5KGBcbiAgICAgICAgICAgIENSRUFURSBUQUJMRSAnJHt0YWJsZU5hbWV9JyBBU1xuICAgICAgICAgICAgU0VMRUNUICpcbiAgICAgICAgICAgIEZST00gcmVhZF9jc3YoJyR7c291cmNlTmFtZX0nLCBoZWFkZXIgPSB0cnVlLCBhdXRvX2RldGVjdCA9IHRydWUsIHNhbXBsZV9zaXplID0gLTEpO1xuICAgICAgICAgIGApO1xuICAgICAgfSBlbHNlIGlmIChmaWxlRXh0ID09PSAnanNvbicpIHtcbiAgICAgICAgYXdhaXQgYy5xdWVyeShgXG4gICAgICAgICAgICBDUkVBVEUgVEFCTEUgJyR7dGFibGVOYW1lfScgQVNcbiAgICAgICAgICAgIFNFTEVDVCAqXG4gICAgICAgICAgICBGUk9NIHJlYWRfanNvbl9hdXRvKCcke3NvdXJjZU5hbWV9Jyk7XG4gICAgICAgICAgYCk7XG4gICAgICB9IGVsc2UgaWYgKGZpbGVFeHQgPT09ICdnZW9qc29uJykge1xuICAgICAgICBhd2FpdCBjLnF1ZXJ5KGBcbiAgICAgICAgICAgIENSRUFURSBUQUJMRSAnJHt0YWJsZU5hbWV9JyBBU1xuICAgICAgICAgICAgU0VMRUNUICpcbiAgICAgICAgICAgIEZST00gU1RfUkVBRCgnJHtzb3VyY2VOYW1lfScsIGtlZXBfd2tiID0gVFJVRSk7XG4gICAgICAgICAgYCk7XG4gICAgICB9IGVsc2UgaWYgKGZpbGVFeHQgPT09ICdwYXJxdWV0Jykge1xuICAgICAgICBhd2FpdCBjLnF1ZXJ5KGBcbiAgICAgICAgICAgIENSRUFURSBUQUJMRSAnJHt0YWJsZU5hbWV9JyBBU1xuICAgICAgICAgICAgU0VMRUNUICpcbiAgICAgICAgICAgIEZST00gcmVhZF9wYXJxdWV0KCcke3NvdXJjZU5hbWV9JylcbiAgICAgICAgICBgKTtcbiAgICAgIH1cbiAgICB9XG4gIH0gY2F0Y2ggKGVycm9yRGF0YSkge1xuICAgIGlmIChlcnJvckRhdGEgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgY29uc3QgbWVzc2FnZSA9IGVycm9yRGF0YS5tZXNzYWdlIHx8ICcnO1xuICAgICAgLy8gb3V0cHV0IG1vcmUgcmVhZGFibGUgZXJyb3JzIGZvciBrbm93biBpc3N1ZXNcbiAgICAgIGlmIChtZXNzYWdlLmluY2x1ZGVzKCdBcnJvdyBUeXBlIHdpdGggZXh0ZW5zaW9uIG5hbWU6IGdlb2Fycm93JykpIHtcbiAgICAgICAgZXJyb3IgPSBuZXcgRXJyb3IoXG4gICAgICAgICAgJ1RoZSBHZW9BcnJvdyBleHRlbnNpb25zIGFyZSBub3QgaW1wbGVtZW50ZWQgaW4gdGhlIGNvbm5lY3RlZCBEdWNrREIgdmVyc2lvbi4nXG4gICAgICAgICk7XG4gICAgICB9IGVsc2UgaWYgKG1lc3NhZ2UuaW5jbHVkZXMoXCJHZW9wYXJxdWV0IGNvbHVtbiAnZ2VvbWV0cnknIGRvZXMgbm90IGhhdmUgZ2VvbWV0cnkgdHlwZXNcIikpIHtcbiAgICAgICAgZXJyb3IgPSBuZXcgRXJyb3IoXG4gICAgICAgICAgYEludmFsaWQgSW5wdXQgRXJyb3I6IEdlb3BhcnF1ZXQgY29sdW1uICdnZW9tZXRyeScgZG9lcyBub3QgaGF2ZSBnZW9tZXRyeSB0eXBlcy5cblBvc3NpYmxlIHJlYXNvbnM6XG4gIC0gT2xkIC5wYXJxdWV0IGZpbGVzIHRoYXQgZG9uJ3QgbWF0Y2ggdGhlIFBhcnF1ZXQgZm9ybWF0IHNwZWNpZmljYXRpb24uXG4gIC0gVW5zdXBwb3J0ZWQgY29tcHJlc3Npb24uYFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghZXJyb3IpIHtcbiAgICAgIGVycm9yID0gZXJyb3JEYXRhIGFzIEVycm9yO1xuICAgIH1cbiAgfVxuXG4gIGF3YWl0IGMuY2xvc2UoKTtcblxuICByZXR1cm4gZXJyb3I7XG59XG5cbi8qKlxuICogU2FuaXRpemVzIGEgZmlsZSBuYW1lIHRvIGJlIGEgdmFsaWQgRHVja0RCIHRhYmxlIG5hbWUuXG4gKiBAcGFyYW0gZmlsZU5hbWUgVGhlIGlucHV0IGZpbGUgbmFtZSB0byBiZSBzYW5pdGl6ZWQuXG4gKiBAcmV0dXJucyBBIHZhbGlkIER1Y2tEQiB0YWJsZSBuYW1lLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc2FuaXRpemVEdWNrREJUYWJsZU5hbWUoZmlsZU5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIC8vIFJlcGxhY2UgaW52YWxpZCBjaGFyYWN0ZXJzIHdpdGggdW5kZXJzY29yZXNcbiAgbGV0IG5hbWUgPSBmaWxlTmFtZS5yZXBsYWNlKC9bXmEtekEtWjAtOV9dL2csICdfJyk7XG4gIC8vIEVuc3VyZSBpdCBkb2Vzbid0IHN0YXJ0IHdpdGggYSBkaWdpdFxuICBpZiAoL15cXGQvLnRlc3QobmFtZSkpIHtcbiAgICBuYW1lID0gYHRfJHtuYW1lfWA7XG4gIH1cbiAgcmV0dXJuIG5hbWUgfHwgJ2RlZmF1bHRfdGFibGUnO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBV0EsSUFBQUEsS0FBQSxHQUFBQyx1QkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsS0FBQSxHQUFBRCxPQUFBO0FBQ0EsSUFBQUUsV0FBQSxHQUFBRixPQUFBO0FBRUEsSUFBQUcsVUFBQSxHQUFBSCxPQUFBO0FBRUEsSUFBQUksTUFBQSxH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
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kepler.gl/duckdb",
|
|
3
3
|
"author": "Shan He <heshan0131@gmail.com>",
|
|
4
|
-
"version": "3.1.
|
|
4
|
+
"version": "3.1.9",
|
|
5
5
|
"description": "DuckDB plugin for Kepler.gl",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"main": "dist/index.js",
|
|
@@ -26,11 +26,11 @@
|
|
|
26
26
|
],
|
|
27
27
|
"dependencies": {
|
|
28
28
|
"@duckdb/duckdb-wasm": "^1.28.0",
|
|
29
|
-
"@kepler.gl/common-utils": "3.1.
|
|
30
|
-
"@kepler.gl/constants": "3.1.
|
|
31
|
-
"@kepler.gl/processors": "3.1.
|
|
32
|
-
"@kepler.gl/table": "3.1.
|
|
33
|
-
"@kepler.gl/types": "3.1.
|
|
29
|
+
"@kepler.gl/common-utils": "3.1.9",
|
|
30
|
+
"@kepler.gl/constants": "3.1.9",
|
|
31
|
+
"@kepler.gl/processors": "3.1.9",
|
|
32
|
+
"@kepler.gl/table": "3.1.9",
|
|
33
|
+
"@kepler.gl/types": "3.1.9",
|
|
34
34
|
"@monaco-editor/react": "^4.6.0",
|
|
35
35
|
"@radix-ui/react-collapsible": "^1.1.0",
|
|
36
36
|
"apache-arrow": ">=15.0.0",
|