parse-server 5.3.0-alpha.9 → 5.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +10 -1
- package/lib/Adapters/Auth/facebook.js +10 -8
- package/lib/Adapters/Auth/gcenter.js +89 -19
- package/lib/Adapters/Auth/spotify.js +10 -8
- package/lib/Adapters/Cache/LRUCache.js +2 -2
- package/lib/Adapters/Files/GridFSBucketAdapter.js +27 -11
- package/lib/Auth.js +11 -1
- package/lib/Controllers/DatabaseController.js +27 -31
- package/lib/Controllers/LiveQueryController.js +9 -1
- package/lib/Controllers/SchemaController.js +13 -6
- package/lib/GraphQL/ParseGraphQLSchema.js +30 -42
- package/lib/GraphQL/ParseGraphQLServer.js +37 -26
- package/lib/GraphQL/helpers/objectsQueries.js +2 -2
- package/lib/GraphQL/loaders/defaultGraphQLTypes.js +12 -9
- package/lib/GraphQL/loaders/defaultRelaySchema.js +2 -2
- package/lib/GraphQL/loaders/filesMutations.js +9 -22
- package/lib/GraphQL/loaders/schemaDirectives.js +51 -42
- package/lib/GraphQL/loaders/schemaTypes.js +14 -14
- package/lib/GraphQL/parseGraphQLUtils.js +5 -3
- package/lib/LiveQuery/ParseCloudCodePublisher.js +11 -1
- package/lib/LiveQuery/ParseLiveQueryServer.js +78 -17
- package/lib/LiveQuery/ParseWebSocketServer.js +8 -2
- package/lib/LiveQuery/SessionTokenCache.js +2 -2
- package/lib/Options/Definitions.js +9 -2
- package/lib/Options/docs.js +7 -2
- package/lib/Options/index.js +1 -1
- package/lib/RestQuery.js +18 -1
- package/lib/RestWrite.js +45 -3
- package/lib/Routers/FilesRouter.js +27 -15
- package/lib/cloud-code/Parse.Cloud.js +36 -16
- package/lib/triggers.js +7 -18
- package/package.json +19 -20
|
@@ -232,21 +232,37 @@ class GridFSBucketAdapter extends _FilesAdapter.FilesAdapter {
|
|
|
232
232
|
const parts = req.get('Range').replace(/bytes=/, '').split('-');
|
|
233
233
|
const partialstart = parts[0];
|
|
234
234
|
const partialend = parts[1];
|
|
235
|
-
const
|
|
236
|
-
const
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
235
|
+
const fileLength = files[0].length;
|
|
236
|
+
const fileStart = parseInt(partialstart, 10);
|
|
237
|
+
const fileEnd = partialend ? parseInt(partialend, 10) : fileLength;
|
|
238
|
+
let start = Math.min(fileStart || 0, fileEnd, fileLength);
|
|
239
|
+
let end = Math.max(fileStart || 0, fileEnd) + 1 || fileLength;
|
|
240
|
+
|
|
241
|
+
if (isNaN(fileStart)) {
|
|
242
|
+
start = fileLength - end + 1;
|
|
243
|
+
end = fileLength;
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
end = Math.min(end, fileLength);
|
|
247
|
+
start = Math.max(start, 0);
|
|
248
|
+
res.status(206);
|
|
249
|
+
res.header('Accept-Ranges', 'bytes');
|
|
250
|
+
res.header('Content-Length', end - start);
|
|
251
|
+
res.header('Content-Range', 'bytes ' + start + '-' + end + '/' + fileLength);
|
|
252
|
+
res.header('Content-Type', contentType);
|
|
243
253
|
const stream = bucket.openDownloadStreamByName(filename);
|
|
244
254
|
stream.start(start);
|
|
255
|
+
|
|
256
|
+
if (end) {
|
|
257
|
+
stream.end(end);
|
|
258
|
+
}
|
|
259
|
+
|
|
245
260
|
stream.on('data', chunk => {
|
|
246
261
|
res.write(chunk);
|
|
247
262
|
});
|
|
248
|
-
stream.on('error',
|
|
249
|
-
res.
|
|
263
|
+
stream.on('error', e => {
|
|
264
|
+
res.status(404);
|
|
265
|
+
res.send(e.message);
|
|
250
266
|
});
|
|
251
267
|
stream.on('end', () => {
|
|
252
268
|
res.end();
|
|
@@ -270,4 +286,4 @@ class GridFSBucketAdapter extends _FilesAdapter.FilesAdapter {
|
|
|
270
286
|
exports.GridFSBucketAdapter = GridFSBucketAdapter;
|
|
271
287
|
var _default = GridFSBucketAdapter;
|
|
272
288
|
exports.default = _default;
|
|
273
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9BZGFwdGVycy9GaWxlcy9HcmlkRlNCdWNrZXRBZGFwdGVyLmpzIl0sIm5hbWVzIjpbImNyeXB0byIsInJlcXVpcmUiLCJHcmlkRlNCdWNrZXRBZGFwdGVyIiwiRmlsZXNBZGFwdGVyIiwiY29uc3RydWN0b3IiLCJtb25nb0RhdGFiYXNlVVJJIiwiZGVmYXVsdHMiLCJEZWZhdWx0TW9uZ29VUkkiLCJtb25nb09wdGlvbnMiLCJlbmNyeXB0aW9uS2V5IiwidW5kZWZpbmVkIiwiX2RhdGFiYXNlVVJJIiwiX2FsZ29yaXRobSIsIl9lbmNyeXB0aW9uS2V5IiwiY3JlYXRlSGFzaCIsInVwZGF0ZSIsIlN0cmluZyIsImRpZ2VzdCIsInN1YnN0ciIsImRlZmF1bHRNb25nb09wdGlvbnMiLCJ1c2VOZXdVcmxQYXJzZXIiLCJ1c2VVbmlmaWVkVG9wb2xvZ3kiLCJfbW9uZ29PcHRpb25zIiwiT2JqZWN0IiwiYXNzaWduIiwiX2Nvbm5lY3QiLCJfY29ubmVjdGlvblByb21pc2UiLCJNb25nb0NsaWVudCIsImNvbm5lY3QiLCJ0aGVuIiwiY2xpZW50IiwiX2NsaWVudCIsImRiIiwicyIsIm9wdGlvbnMiLCJkYk5hbWUiLCJfZ2V0QnVja2V0IiwiZGF0YWJhc2UiLCJHcmlkRlNCdWNrZXQiLCJjcmVhdGVGaWxlIiwiZmlsZW5hbWUiLCJkYXRhIiwiY29udGVudFR5cGUiLCJidWNrZXQiLCJzdHJlYW0iLCJvcGVuVXBsb2FkU3RyZWFtIiwibWV0YWRhdGEiLCJpdiIsInJhbmRvbUJ5dGVzIiwiY2lwaGVyIiwiY3JlYXRlQ2lwaGVyaXYiLCJlbmNyeXB0ZWRSZXN1bHQiLCJCdWZmZXIiLCJjb25jYXQiLCJmaW5hbCIsImdldEF1dGhUYWciLCJ3cml0ZSIsImVyciIsIlByb21pc2UiLCJyZXNvbHZlIiwicmVqZWN0IiwiZW5kIiwib24iLCJkZWxldGVGaWxlIiwiZG9jdW1lbnRzIiwiZmluZCIsInRvQXJyYXkiLCJsZW5ndGgiLCJFcnJvciIsImFsbCIsIm1hcCIsImRvYyIsImRlbGV0ZSIsIl9pZCIsImdldEZpbGVEYXRhIiwib3BlbkRvd25sb2FkU3RyZWFtQnlOYW1lIiwicmVhZCIsImNodW5rcyIsInB1c2giLCJhdXRoVGFnTG9jYXRpb24iLCJpdkxvY2F0aW9uIiwiYXV0aFRhZyIsInNsaWNlIiwiZW5jcnlwdGVkIiwiZGVjaXBoZXIiLCJjcmVhdGVEZWNpcGhlcml2Iiwic2V0QXV0aFRhZyIsImRlY3J5cHRlZCIsInJvdGF0ZUVuY3J5cHRpb25LZXkiLCJmaWxlTmFtZXMiLCJvbGRLZXlGaWxlQWRhcHRlciIsIm9sZEtleSIsImZpbGVOYW1lc0l0ZXJhdG9yIiwiZm9yRWFjaCIsImZpbGUiLCJmaWxlTmFtZXNOb3RSb3RhdGVkIiwiZmlsZU5hbWVzUm90YXRlZCIsImZpbGVOYW1lVG90YWwiLCJmaWxlTmFtZUluZGV4IiwiZmlsZU5hbWUiLCJwbGFpblRleHREYXRhIiwiZmlsdGVyIiwidmFsdWUiLCJyb3RhdGVkIiwibm90Um90YXRlZCIsImNhdGNoIiwiZ2V0RmlsZUxvY2F0aW9uIiwiY29uZmlnIiwibW91bnQiLCJhcHBsaWNhdGlvbklkIiwiZW5jb2RlVVJJQ29tcG9uZW50IiwiZ2V0TWV0YWRhdGEiLCJmaWxlcyIsImhhbmRsZUZpbGVTdHJlYW0iLCJyZXEiLCJyZXMiLCJwYXJ0cyIsImdldCIsInJlcGxhY2UiLCJzcGxpdCIsInBhcnRpYWxzdGFydCIsInBhcnRpYWxlbmQiLCJzdGFydCIsInBhcnNlSW50Iiwid3JpdGVIZWFkIiwiY2h1bmsiLCJzZW5kU3RhdHVzIiwiaGFuZGxlU2h1dGRvd24iLCJjbG9zZSIsInZhbGlkYXRlRmlsZW5hbWUiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFTQTs7QUFDQTs7QUFDQTs7OztBQVhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFJQSxNQUFNQSxNQUFNLEdBQUdDLE9BQU8sQ0FBQyxRQUFELENBQXRCOztBQUVPLE1BQU1DLG1CQUFOLFNBQWtDQywwQkFBbEMsQ0FBK0M7QUFN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Q3pCVixNQUFBQSxHQUFHLENBQUMzRCxLQUFKLENBQVVxRSxLQUFWO0FBQ0QsS0FGRDtBQUdBakYsSUFBQUEsTUFBTSxDQUFDa0IsRUFBUCxDQUFVLE9BQVYsRUFBbUIsTUFBTTtBQUN2QnFELE1BQUFBLEdBQUcsQ0FBQ1csVUFBSixDQUFlLEdBQWY7QUFDRCxLQUZEO0FBR0FsRixJQUFBQSxNQUFNLENBQUNrQixFQUFQLENBQVUsS0FBVixFQUFpQixNQUFNO0FBQ3JCcUQsTUFBQUEsR0FBRyxDQUFDdEQsR0FBSjtBQUNELEtBRkQ7QUFHRDs7QUFFRGtFLEVBQUFBLGNBQWMsR0FBRztBQUNmLFFBQUksQ0FBQyxLQUFLaEcsT0FBVixFQUFtQjtBQUNqQixhQUFPMkIsT0FBTyxDQUFDQyxPQUFSLEVBQVA7QUFDRDs7QUFDRCxXQUFPLEtBQUs1QixPQUFMLENBQWFpRyxLQUFiLENBQW1CLEtBQW5CLENBQVA7QUFDRDs7QUFFREMsRUFBQUEsZ0JBQWdCLENBQUN6RixRQUFELEVBQVc7QUFDekIsV0FBTyxvQ0FBaUJBLFFBQWpCLENBQVA7QUFDRDs7QUF2UG1EOzs7ZUEwUHZDdEMsbUIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiBHcmlkRlNCdWNrZXRBZGFwdGVyXG4gU3RvcmVzIGZpbGVzIGluIE1vbmdvIHVzaW5nIEdyaWRGU1xuIFJlcXVpcmVzIHRoZSBkYXRhYmFzZSBhZGFwdGVyIHRvIGJlIGJhc2VkIG9uIG1vbmdvY2xpZW50XG5cbiBAZmxvdyB3ZWFrXG4gKi9cblxuLy8gQGZsb3ctZGlzYWJsZS1uZXh0XG5pbXBvcnQgeyBNb25nb0NsaWVudCwgR3JpZEZTQnVja2V0LCBEYiB9IGZyb20gJ21vbmdvZGInO1xuaW1wb3J0IHsgRmlsZXNBZGFwdGVyLCB2YWxpZGF0ZUZpbGVuYW1lIH0gZnJvbSAnLi9GaWxlc0FkYXB0ZXInO1xuaW1wb3J0IGRlZmF1bHRzIGZyb20gJy4uLy4uL2RlZmF1bHRzJztcbmNvbnN0IGNyeXB0byA9IHJlcXVpcmUoJ2NyeXB0bycpO1xuXG5leHBvcnQgY2xhc3MgR3JpZEZTQnVja2V0QWRhcHRlciBleHRlbmRzIEZpbGVzQWRhcHRlciB7XG4gIF9kYXRhYmFzZVVSSTogc3RyaW5nO1xuICBfY29ubmVjdGlvblByb21pc2U6IFByb21pc2U8RGI+O1xuICBfbW9uZ29PcHRpb25zOiBPYmplY3Q7XG4gIF9hbGdvcml0aG06IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBtb25nb0RhdGFiYXNlVVJJID0gZGVmYXVsdHMuRGVmYXVsdE1vbmdvVVJJLFxuICAgIG1vbmdvT3B0aW9ucyA9IHt9LFxuICAgIGVuY3J5cHRpb25LZXkgPSB1bmRlZmluZWRcbiAgKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLl9kYXRhYmFzZVVSSSA9IG1vbmdvRGF0YWJhc2VVUkk7XG4gICAgdGhpcy5fYWxnb3JpdGhtID0gJ2Flcy0yNTYtZ2NtJztcbiAgICB0aGlzLl9lbmNyeXB0aW9uS2V5ID1cbiAgICAgIGVuY3J5cHRpb25LZXkgIT09IHVuZGVmaW5lZFxuICAgICAgICA/IGNyeXB0by5jcmVhdGVIYXNoKCdzaGEyNTYnKS51cGRhdGUoU3RyaW5nKGVuY3J5cHRpb25LZXkpKS5kaWdlc3QoJ2Jhc2U2NCcpLnN1YnN0cigwLCAzMilcbiAgICAgICAgOiBudWxsO1xuICAgIGNvbnN0IGRlZmF1bHRNb25nb09wdGlvbnMgPSB7XG4gICAgICB1c2VOZXdVcmxQYXJzZXI6IHRydWUsXG4gICAgICB1c2VVbmlmaWVkVG9wb2xvZ3k6IHRydWUsXG4gICAgfTtcbiAgICB0aGlzLl9tb25nb09wdGlvbnMgPSBPYmplY3QuYXNzaWduKGRlZmF1bHRNb25nb09wdGlvbnMsIG1vbmdvT3B0aW9ucyk7XG4gIH1cblxuICBfY29ubmVjdCgpIHtcbiAgICBpZiAoIXRoaXMuX2Nvbm5lY3Rpb25Qcm9taXNlKSB7XG4gICAgICB0aGlzLl9jb25uZWN0aW9uUHJvbWlzZSA9IE1vbmdvQ2xpZW50LmNvbm5lY3QodGhpcy5fZGF0YWJhc2VVUkksIHRoaXMuX21vbmdvT3B0aW9ucykudGhlbihcbiAgICAgICAgY2xpZW50ID0+IHtcbiAgICAgICAgICB0aGlzLl9jbGllbnQgPSBjbGllbnQ7XG4gICAgICAgICAgcmV0dXJuIGNsaWVudC5kYihjbGllbnQucy5vcHRpb25zLmRiTmFtZSk7XG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9jb25uZWN0aW9uUHJvbWlzZTtcbiAgfVxuXG4gIF9nZXRCdWNrZXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2Nvbm5lY3QoKS50aGVuKGRhdGFiYXNlID0+IG5ldyBHcmlkRlNCdWNrZXQoZGF0YWJhc2UpKTtcbiAgfVxuXG4gIC8vIEZvciBhIGdpdmVuIGNvbmZpZyBvYmplY3QsIGZpbGVuYW1lLCBhbmQgZGF0YSwgc3RvcmUgYSBmaWxlXG4gIC8vIFJldHVybnMgYSBwcm9taXNlXG4gIGFzeW5jIGNyZWF0ZUZpbGUoZmlsZW5hbWU6IHN0cmluZywgZGF0YSwgY29udGVudFR5cGUsIG9wdGlvbnMgPSB7fSkge1xuICAgIGNvbnN0IGJ1Y2tldCA9IGF3YWl0IHRoaXMuX2dldEJ1Y2tldCgpO1xuICAgIGNvbnN0IHN0cmVhbSA9IGF3YWl0IGJ1Y2tldC5vcGVuVXBsb2FkU3RyZWFtKGZpbGVuYW1lLCB7XG4gICAgICBtZXRhZGF0YTogb3B0aW9ucy5tZXRhZGF0YSxcbiAgICB9KTtcbiAgICBpZiAodGhpcy5fZW5jcnlwdGlvbktleSAhPT0gbnVsbCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgaXYgPSBjcnlwdG8ucmFuZG9tQnl0ZXMoMTYpO1xuICAgICAgICBjb25zdCBjaXBoZXIgPSBjcnlwdG8uY3JlYXRlQ2lwaGVyaXYodGhpcy5fYWxnb3JpdGhtLCB0aGlzLl9lbmNyeXB0aW9uS2V5LCBpdik7XG4gICAgICAgIGNvbnN0IGVuY3J5cHRlZFJlc3VsdCA9IEJ1ZmZlci5jb25jYXQoW1xuICAgICAgICAgIGNpcGhlci51cGRhdGUoZGF0YSksXG4gICAgICAgICAgY2lwaGVyLmZpbmFsKCksXG4gICAgICAgICAgaXYsXG4gICAgICAgICAgY2lwaGVyLmdldEF1dGhUYWcoKSxcbiAgICAgICAgXSk7XG4gICAgICAgIGF3YWl0IHN0cmVhbS53cml0ZShlbmNyeXB0ZWRSZXN1bHQpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHJlamVjdChlcnIpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgYXdhaXQgc3RyZWFtLndyaXRlKGRhdGEpO1xuICAgIH1cbiAgICBzdHJlYW0uZW5kKCk7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHN0cmVhbS5vbignZmluaXNoJywgcmVzb2x2ZSk7XG4gICAgICBzdHJlYW0ub24oJ2Vycm9yJywgcmVqZWN0KTtcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZUZpbGUoZmlsZW5hbWU6IHN0cmluZykge1xuICAgIGNvbnN0IGJ1Y2tldCA9IGF3YWl0IHRoaXMuX2dldEJ1Y2tldCgpO1xuICAgIGNvbnN0IGRvY3VtZW50cyA9IGF3YWl0IGJ1Y2tldC5maW5kKHsgZmlsZW5hbWUgfSkudG9BcnJheSgpO1xuICAgIGlmIChkb2N1bWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZpbGVOb3RGb3VuZCcpO1xuICAgIH1cbiAgICByZXR1cm4gUHJvbWlzZS5hbGwoXG4gICAgICBkb2N1bWVudHMubWFwKGRvYyA9PiB7XG4gICAgICAgIHJldHVybiBidWNrZXQuZGVsZXRlKGRvYy5faWQpO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgYXN5bmMgZ2V0RmlsZURhdGEoZmlsZW5hbWU6IHN0cmluZykge1xuICAgIGNvbnN0IGJ1Y2tldCA9IGF3YWl0IHRoaXMuX2dldEJ1Y2tldCgpO1xuICAgIGNvbnN0IHN0cmVhbSA9IGJ1Y2tldC5vcGVuRG93bmxvYWRTdHJlYW1CeU5hbWUoZmlsZW5hbWUpO1xuICAgIHN0cmVhbS5yZWFkKCk7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNvbnN0IGNodW5rcyA9IFtdO1xuICAgICAgc3RyZWFtLm9uKCdkYXRhJywgZGF0YSA9PiB7XG4gICAgICAgIGNodW5rcy5wdXNoKGRhdGEpO1xuICAgICAgfSk7XG4gICAgICBzdHJlYW0ub24oJ2VuZCcsICgpID0+IHtcbiAgICAgICAgY29uc3QgZGF0YSA9IEJ1ZmZlci5jb25jYXQoY2h1bmtzKTtcbiAgICAgICAgaWYgKHRoaXMuX2VuY3J5cHRpb25LZXkgIT09IG51bGwpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgYXV0aFRhZ0xvY2F0aW9uID0gZGF0YS5sZW5ndGggLSAxNjtcbiAgICAgICAgICAgIGNvbnN0IGl2TG9jYXRpb24gPSBkYXRhLmxlbmd0aCAtIDMyO1xuICAgICAgICAgICAgY29uc3QgYXV0aFRhZyA9IGRhdGEuc2xpY2UoYXV0aFRhZ0xvY2F0aW9uKTtcbiAgICAgICAgICAgIGNvbnN0IGl2ID0gZGF0YS5zbGljZShpdkxvY2F0aW9uLCBhdXRoVGFnTG9jYXRpb24pO1xuICAgICAgICAgICAgY29uc3QgZW5jcnlwdGVkID0gZGF0YS5zbGljZSgwLCBpdkxvY2F0aW9uKTtcbiAgICAgICAgICAgIGNvbnN0IGRlY2lwaGVyID0gY3J5cHRvLmNyZWF0ZURlY2lwaGVyaXYodGhpcy5fYWxnb3JpdGhtLCB0aGlzLl9lbmNyeXB0aW9uS2V5LCBpdik7XG4gICAgICAgICAgICBkZWNpcGhlci5zZXRBdXRoVGFnKGF1dGhUYWcpO1xuICAgICAgICAgICAgY29uc3QgZGVjcnlwdGVkID0gQnVmZmVyLmNvbmNhdChbZGVjaXBoZXIudXBkYXRlKGVuY3J5cHRlZCksIGRlY2lwaGVyLmZpbmFsKCldKTtcbiAgICAgICAgICAgIHJldHVybiByZXNvbHZlKGRlY3J5cHRlZCk7XG4gICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVqZWN0KGVycik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJlc29sdmUoZGF0YSk7XG4gICAgICB9KTtcbiAgICAgIHN0cmVhbS5vbignZXJyb3InLCBlcnIgPT4ge1xuICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgcm90YXRlRW5jcnlwdGlvbktleShvcHRpb25zID0ge30pIHtcbiAgICB2YXIgZmlsZU5hbWVzID0gW107XG4gICAgdmFyIG9sZEtleUZpbGVBZGFwdGVyID0ge307XG4gICAgY29uc3QgYnVja2V0ID0gYXdhaXQgdGhpcy5fZ2V0QnVja2V0KCk7XG4gICAgaWYgKG9wdGlvbnMub2xkS2V5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIG9sZEtleUZpbGVBZGFwdGVyID0gbmV3IEdyaWRGU0J1Y2tldEFkYXB0ZXIoXG4gICAgICAgIHRoaXMuX2RhdGFiYXNlVVJJLFxuICAgICAgICB0aGlzLl9tb25nb09wdGlvbnMsXG4gICAgICAgIG9wdGlvbnMub2xkS2V5XG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICBvbGRLZXlGaWxlQWRhcHRlciA9IG5ldyBHcmlkRlNCdWNrZXRBZGFwdGVyKHRoaXMuX2RhdGFiYXNlVVJJLCB0aGlzLl9tb25nb09wdGlvbnMpO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy5maWxlTmFtZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgZmlsZU5hbWVzID0gb3B0aW9ucy5maWxlTmFtZXM7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGZpbGVOYW1lc0l0ZXJhdG9yID0gYXdhaXQgYnVja2V0LmZpbmQoKS50b0FycmF5KCk7XG4gICAgICBmaWxlTmFtZXNJdGVyYXRvci5mb3JFYWNoKGZpbGUgPT4ge1xuICAgICAgICBmaWxlTmFtZXMucHVzaChmaWxlLmZpbGVuYW1lKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICB2YXIgZmlsZU5hbWVzTm90Um90YXRlZCA9IGZpbGVOYW1lcztcbiAgICAgIHZhciBmaWxlTmFtZXNSb3RhdGVkID0gW107XG4gICAgICB2YXIgZmlsZU5hbWVUb3RhbCA9IGZpbGVOYW1lcy5sZW5ndGg7XG4gICAgICB2YXIgZmlsZU5hbWVJbmRleCA9IDA7XG4gICAgICBmaWxlTmFtZXMuZm9yRWFjaChmaWxlTmFtZSA9PiB7XG4gICAgICAgIG9sZEtleUZpbGVBZGFwdGVyXG4gICAgICAgICAgLmdldEZpbGVEYXRhKGZpbGVOYW1lKVxuICAgICAgICAgIC50aGVuKHBsYWluVGV4dERhdGEgPT4ge1xuICAgICAgICAgICAgLy9PdmVyd3JpdGUgZmlsZSB3aXRoIGRhdGEgZW5jcnlwdGVkIHdpdGggbmV3IGtleVxuICAgICAgICAgICAgdGhpcy5jcmVhdGVGaWxlKGZpbGVOYW1lLCBwbGFpblRleHREYXRhKVxuICAgICAgICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgZmlsZU5hbWVzUm90YXRlZC5wdXNoKGZpbGVOYW1lKTtcbiAgICAgICAgICAgICAgICBmaWxlTmFtZXNOb3RSb3RhdGVkID0gZmlsZU5hbWVzTm90Um90YXRlZC5maWx0ZXIoZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUgIT09IGZpbGVOYW1lO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGZpbGVOYW1lSW5kZXggKz0gMTtcbiAgICAgICAgICAgICAgICBpZiAoZmlsZU5hbWVJbmRleCA9PSBmaWxlTmFtZVRvdGFsKSB7XG4gICAgICAgICAgICAgICAgICByZXNvbHZlKHtcbiAgICAgICAgICAgICAgICAgICAgcm90YXRlZDogZmlsZU5hbWVzUm90YXRlZCxcbiAgICAgICAgICAgICAgICAgICAgbm90Um90YXRlZDogZmlsZU5hbWVzTm90Um90YXRlZCxcbiAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgLmNhdGNoKCgpID0+IHtcbiAgICAgICAgICAgICAgICBmaWxlTmFtZUluZGV4ICs9IDE7XG4gICAgICAgICAgICAgICAgaWYgKGZpbGVOYW1lSW5kZXggPT0gZmlsZU5hbWVUb3RhbCkge1xuICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh7XG4gICAgICAgICAgICAgICAgICAgIHJvdGF0ZWQ6IGZpbGVOYW1lc1JvdGF0ZWQsXG4gICAgICAgICAgICAgICAgICAgIG5vdFJvdGF0ZWQ6IGZpbGVOYW1lc05vdFJvdGF0ZWQsXG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pXG4gICAgICAgICAgLmNhdGNoKCgpID0+IHtcbiAgICAgICAgICAgIGZpbGVOYW1lSW5kZXggKz0gMTtcbiAgICAgICAgICAgIGlmIChmaWxlTmFtZUluZGV4ID09IGZpbGVOYW1lVG90YWwpIHtcbiAgICAgICAgICAgICAgcmVzb2x2ZSh7XG4gICAgICAgICAgICAgICAgcm90YXRlZDogZmlsZU5hbWVzUm90YXRlZCxcbiAgICAgICAgICAgICAgICBub3RSb3RhdGVkOiBmaWxlTmFtZXNOb3RSb3RhdGVkLFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgZ2V0RmlsZUxvY2F0aW9uKGNvbmZpZywgZmlsZW5hbWUpIHtcbiAgICByZXR1cm4gY29uZmlnLm1vdW50ICsgJy9maWxlcy8nICsgY29uZmlnLmFwcGxpY2F0aW9uSWQgKyAnLycgKyBlbmNvZGVVUklDb21wb25lbnQoZmlsZW5hbWUpO1xuICB9XG5cbiAgYXN5bmMgZ2V0TWV0YWRhdGEoZmlsZW5hbWUpIHtcbiAgICBjb25zdCBidWNrZXQgPSBhd2FpdCB0aGlzLl9nZXRCdWNrZXQoKTtcbiAgICBjb25zdCBmaWxlcyA9IGF3YWl0IGJ1Y2tldC5maW5kKHsgZmlsZW5hbWUgfSkudG9BcnJheSgpO1xuICAgIGlmIChmaWxlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG4gICAgY29uc3QgeyBtZXRhZGF0YSB9ID0gZmlsZXNbMF07XG4gICAgcmV0dXJuIHsgbWV0YWRhdGEgfTtcbiAgfVxuXG4gIGFzeW5jIGhhbmRsZUZpbGVTdHJlYW0oZmlsZW5hbWU6IHN0cmluZywgcmVxLCByZXMsIGNvbnRlbnRUeXBlKSB7XG4gICAgY29uc3QgYnVja2V0ID0gYXdhaXQgdGhpcy5fZ2V0QnVja2V0KCk7XG4gICAgY29uc3QgZmlsZXMgPSBhd2FpdCBidWNrZXQuZmluZCh7IGZpbGVuYW1lIH0pLnRvQXJyYXkoKTtcbiAgICBpZiAoZmlsZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZpbGVOb3RGb3VuZCcpO1xuICAgIH1cbiAgICBjb25zdCBwYXJ0cyA9IHJlcVxuICAgICAgLmdldCgnUmFuZ2UnKVxuICAgICAgLnJlcGxhY2UoL2J5dGVzPS8sICcnKVxuICAgICAgLnNwbGl0KCctJyk7XG4gICAgY29uc3QgcGFydGlhbHN0YXJ0ID0gcGFydHNbMF07XG4gICAgY29uc3QgcGFydGlhbGVuZCA9IHBhcnRzWzFdO1xuXG4gICAgY29uc3Qgc3RhcnQgPSBwYXJzZUludChwYXJ0aWFsc3RhcnQsIDEwKTtcbiAgICBjb25zdCBlbmQgPSBwYXJ0aWFsZW5kID8gcGFyc2VJbnQocGFydGlhbGVuZCwgMTApIDogZmlsZXNbMF0ubGVuZ3RoIC0gMTtcblxuICAgIHJlcy53cml0ZUhlYWQoMjA2LCB7XG4gICAgICAnQWNjZXB0LVJhbmdlcyc6ICdieXRlcycsXG4gICAgICAnQ29udGVudC1MZW5ndGgnOiBlbmQgLSBzdGFydCArIDEsXG4gICAgICAnQ29udGVudC1SYW5nZSc6ICdieXRlcyAnICsgc3RhcnQgKyAnLScgKyBlbmQgKyAnLycgKyBmaWxlc1swXS5sZW5ndGgsXG4gICAgICAnQ29udGVudC1UeXBlJzogY29udGVudFR5cGUsXG4gICAgfSk7XG4gICAgY29uc3Qgc3RyZWFtID0gYnVja2V0Lm9wZW5Eb3dubG9hZFN0cmVhbUJ5TmFtZShmaWxlbmFtZSk7XG4gICAgc3RyZWFtLnN0YXJ0KHN0YXJ0KTtcbiAgICBzdHJlYW0ub24oJ2RhdGEnLCBjaHVuayA9PiB7XG4gICAgICByZXMud3JpdGUoY2h1bmspO1xuICAgIH0pO1xuICAgIHN0cmVhbS5vbignZXJyb3InLCAoKSA9PiB7XG4gICAgICByZXMuc2VuZFN0YXR1cyg0MDQpO1xuICAgIH0pO1xuICAgIHN0cmVhbS5vbignZW5kJywgKCkgPT4ge1xuICAgICAgcmVzLmVuZCgpO1xuICAgIH0pO1xuICB9XG5cbiAgaGFuZGxlU2h1dGRvd24oKSB7XG4gICAgaWYgKCF0aGlzLl9jbGllbnQpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX2NsaWVudC5jbG9zZShmYWxzZSk7XG4gIH1cblxuICB2YWxpZGF0ZUZpbGVuYW1lKGZpbGVuYW1lKSB7XG4gICAgcmV0dXJuIHZhbGlkYXRlRmlsZW5hbWUoZmlsZW5hbWUpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEdyaWRGU0J1Y2tldEFkYXB0ZXI7XG4iXX0=
|
|
289
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9BZGFwdGVycy9GaWxlcy9HcmlkRlNCdWNrZXRBZGFwdGVyLmpzIl0sIm5hbWVzIjpbImNyeXB0byIsInJlcXVpcmUiLCJHcmlkRlNCdWNrZXRBZGFwdGVyIiwiRmlsZXNBZGFwdGVyIiwiY29uc3RydWN0b3IiLCJtb25nb0RhdGFiYXNlVVJJIiwiZGVmYXVsdHMiLCJEZWZhdWx0TW9uZ29VUkkiLCJtb25nb09wdGlvbnMiLCJlbmNyeXB0aW9uS2V5IiwidW5kZWZpbmVkIiwiX2RhdGFiYXNlVVJJIiwiX2FsZ29yaXRobSIsIl9lbmNyeXB0aW9uS2V5IiwiY3JlYXRlSGFzaCIsInVwZGF0ZSIsIlN0cmluZyIsImRpZ2VzdCIsInN1YnN0ciIsImRlZmF1bHRNb25nb09wdGlvbnMiLCJ1c2VOZXdVcmxQYXJzZXIiLCJ1c2VVbmlmaWVkVG9wb2xvZ3kiLCJfbW9uZ29PcHRpb25zIiwiT2JqZWN0IiwiYXNzaWduIiwiX2Nvbm5lY3QiLCJfY29ubmVjdGlvblByb21pc2UiLCJNb25nb0NsaWVudCIsImNvbm5lY3QiLCJ0aGVuIiwiY2xpZW50IiwiX2NsaWVudCIsImRiIiwicyIsIm9wdGlvbnMiLCJkYk5hbWUiLCJfZ2V0QnVja2V0IiwiZGF0YWJhc2UiLCJHcmlkRlNCdWNrZXQiLCJjcmVhdGVGaWxlIiwiZmlsZW5hbWUiLCJkYXRhIiwiY29udGVudFR5cGUiLCJidWNrZXQiLCJzdHJlYW0iLCJvcGVuVXBsb2FkU3RyZWFtIiwibWV0YWRhdGEiLCJpdiIsInJhbmRvbUJ5dGVzIiwiY2lwaGVyIiwiY3JlYXRlQ2lwaGVyaXYiLCJlbmNyeXB0ZWRSZXN1bHQiLCJCdWZmZXIiLCJjb25jYXQiLCJmaW5hbCIsImdldEF1dGhUYWciLCJ3cml0ZSIsImVyciIsIlByb21pc2UiLCJyZXNvbHZlIiwicmVqZWN0IiwiZW5kIiwib24iLCJkZWxldGVGaWxlIiwiZG9jdW1lbnRzIiwiZmluZCIsInRvQXJyYXkiLCJsZW5ndGgiLCJFcnJvciIsImFsbCIsIm1hcCIsImRvYyIsImRlbGV0ZSIsIl9pZCIsImdldEZpbGVEYXRhIiwib3BlbkRvd25sb2FkU3RyZWFtQnlOYW1lIiwicmVhZCIsImNodW5rcyIsInB1c2giLCJhdXRoVGFnTG9jYXRpb24iLCJpdkxvY2F0aW9uIiwiYXV0aFRhZyIsInNsaWNlIiwiZW5jcnlwdGVkIiwiZGVjaXBoZXIiLCJjcmVhdGVEZWNpcGhlcml2Iiwic2V0QXV0aFRhZyIsImRlY3J5cHRlZCIsInJvdGF0ZUVuY3J5cHRpb25LZXkiLCJmaWxlTmFtZXMiLCJvbGRLZXlGaWxlQWRhcHRlciIsIm9sZEtleSIsImZpbGVOYW1lc0l0ZXJhdG9yIiwiZm9yRWFjaCIsImZpbGUiLCJmaWxlTmFtZXNOb3RSb3RhdGVkIiwiZmlsZU5hbWVzUm90YXRlZCIsImZpbGVOYW1lVG90YWwiLCJmaWxlTmFtZUluZGV4IiwiZmlsZU5hbWUiLCJwbGFpblRleHREYXRhIiwiZmlsdGVyIiwidmFsdWUiLCJyb3RhdGVkIiwibm90Um90YXRlZCIsImNhdGNoIiwiZ2V0RmlsZUxvY2F0aW9uIiwiY29uZmlnIiwibW91bnQiLCJhcHBsaWNhdGlvbklkIiwiZW5jb2RlVVJJQ29tcG9uZW50IiwiZ2V0TWV0YWRhdGEiLCJmaWxlcyIsImhhbmRsZUZpbGVTdHJlYW0iLCJyZXEiLCJyZXMiLCJwYXJ0cyIsImdldCIsInJlcGxhY2UiLCJzcGxpdCIsInBhcnRpYWxzdGFydCIsInBhcnRpYWxlbmQiLCJmaWxlTGVuZ3RoIiwiZmlsZVN0YXJ0IiwicGFyc2VJbnQiLCJmaWxlRW5kIiwic3RhcnQiLCJNYXRoIiwibWluIiwibWF4IiwiaXNOYU4iLCJzdGF0dXMiLCJoZWFkZXIiLCJjaHVuayIsImUiLCJzZW5kIiwibWVzc2FnZSIsImhhbmRsZVNodXRkb3duIiwiY2xvc2UiLCJ2YWxpZGF0ZUZpbGVuYW1lIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBU0E7O0FBQ0E7O0FBQ0E7Ozs7QUFYQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBSUEsTUFB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QUFYO0FBQ0QsS0FIRDtBQUlBNUYsSUFBQUEsTUFBTSxDQUFDa0IsRUFBUCxDQUFVLEtBQVYsRUFBaUIsTUFBTTtBQUNyQnFELE1BQUFBLEdBQUcsQ0FBQ3RELEdBQUo7QUFDRCxLQUZEO0FBR0Q7O0FBRUQ0RSxFQUFBQSxjQUFjLEdBQUc7QUFDZixRQUFJLENBQUMsS0FBSzFHLE9BQVYsRUFBbUI7QUFDakIsYUFBTzJCLE9BQU8sQ0FBQ0MsT0FBUixFQUFQO0FBQ0Q7O0FBQ0QsV0FBTyxLQUFLNUIsT0FBTCxDQUFhMkcsS0FBYixDQUFtQixLQUFuQixDQUFQO0FBQ0Q7O0FBRURDLEVBQUFBLGdCQUFnQixDQUFDbkcsUUFBRCxFQUFXO0FBQ3pCLFdBQU8sb0NBQWlCQSxRQUFqQixDQUFQO0FBQ0Q7O0FBcFFtRDs7O2VBdVF2Q3RDLG1CIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gR3JpZEZTQnVja2V0QWRhcHRlclxuIFN0b3JlcyBmaWxlcyBpbiBNb25nbyB1c2luZyBHcmlkRlNcbiBSZXF1aXJlcyB0aGUgZGF0YWJhc2UgYWRhcHRlciB0byBiZSBiYXNlZCBvbiBtb25nb2NsaWVudFxuXG4gQGZsb3cgd2Vha1xuICovXG5cbi8vIEBmbG93LWRpc2FibGUtbmV4dFxuaW1wb3J0IHsgTW9uZ29DbGllbnQsIEdyaWRGU0J1Y2tldCwgRGIgfSBmcm9tICdtb25nb2RiJztcbmltcG9ydCB7IEZpbGVzQWRhcHRlciwgdmFsaWRhdGVGaWxlbmFtZSB9IGZyb20gJy4vRmlsZXNBZGFwdGVyJztcbmltcG9ydCBkZWZhdWx0cyBmcm9tICcuLi8uLi9kZWZhdWx0cyc7XG5jb25zdCBjcnlwdG8gPSByZXF1aXJlKCdjcnlwdG8nKTtcblxuZXhwb3J0IGNsYXNzIEdyaWRGU0J1Y2tldEFkYXB0ZXIgZXh0ZW5kcyBGaWxlc0FkYXB0ZXIge1xuICBfZGF0YWJhc2VVUkk6IHN0cmluZztcbiAgX2Nvbm5lY3Rpb25Qcm9taXNlOiBQcm9taXNlPERiPjtcbiAgX21vbmdvT3B0aW9uczogT2JqZWN0O1xuICBfYWxnb3JpdGhtOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgbW9uZ29EYXRhYmFzZVVSSSA9IGRlZmF1bHRzLkRlZmF1bHRNb25nb1VSSSxcbiAgICBtb25nb09wdGlvbnMgPSB7fSxcbiAgICBlbmNyeXB0aW9uS2V5ID0gdW5kZWZpbmVkXG4gICkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5fZGF0YWJhc2VVUkkgPSBtb25nb0RhdGFiYXNlVVJJO1xuICAgIHRoaXMuX2FsZ29yaXRobSA9ICdhZXMtMjU2LWdjbSc7XG4gICAgdGhpcy5fZW5jcnlwdGlvbktleSA9XG4gICAgICBlbmNyeXB0aW9uS2V5ICE9PSB1bmRlZmluZWRcbiAgICAgICAgPyBjcnlwdG8uY3JlYXRlSGFzaCgnc2hhMjU2JykudXBkYXRlKFN0cmluZyhlbmNyeXB0aW9uS2V5KSkuZGlnZXN0KCdiYXNlNjQnKS5zdWJzdHIoMCwgMzIpXG4gICAgICAgIDogbnVsbDtcbiAgICBjb25zdCBkZWZhdWx0TW9uZ29PcHRpb25zID0ge1xuICAgICAgdXNlTmV3VXJsUGFyc2VyOiB0cnVlLFxuICAgICAgdXNlVW5pZmllZFRvcG9sb2d5OiB0cnVlLFxuICAgIH07XG4gICAgdGhpcy5fbW9uZ29PcHRpb25zID0gT2JqZWN0LmFzc2lnbihkZWZhdWx0TW9uZ29PcHRpb25zLCBtb25nb09wdGlvbnMpO1xuICB9XG5cbiAgX2Nvbm5lY3QoKSB7XG4gICAgaWYgKCF0aGlzLl9jb25uZWN0aW9uUHJvbWlzZSkge1xuICAgICAgdGhpcy5fY29ubmVjdGlvblByb21pc2UgPSBNb25nb0NsaWVudC5jb25uZWN0KHRoaXMuX2RhdGFiYXNlVVJJLCB0aGlzLl9tb25nb09wdGlvbnMpLnRoZW4oXG4gICAgICAgIGNsaWVudCA9PiB7XG4gICAgICAgICAgdGhpcy5fY2xpZW50ID0gY2xpZW50O1xuICAgICAgICAgIHJldHVybiBjbGllbnQuZGIoY2xpZW50LnMub3B0aW9ucy5kYk5hbWUpO1xuICAgICAgICB9XG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fY29ubmVjdGlvblByb21pc2U7XG4gIH1cblxuICBfZ2V0QnVja2V0KCkge1xuICAgIHJldHVybiB0aGlzLl9jb25uZWN0KCkudGhlbihkYXRhYmFzZSA9PiBuZXcgR3JpZEZTQnVja2V0KGRhdGFiYXNlKSk7XG4gIH1cblxuICAvLyBGb3IgYSBnaXZlbiBjb25maWcgb2JqZWN0LCBmaWxlbmFtZSwgYW5kIGRhdGEsIHN0b3JlIGEgZmlsZVxuICAvLyBSZXR1cm5zIGEgcHJvbWlzZVxuICBhc3luYyBjcmVhdGVGaWxlKGZpbGVuYW1lOiBzdHJpbmcsIGRhdGEsIGNvbnRlbnRUeXBlLCBvcHRpb25zID0ge30pIHtcbiAgICBjb25zdCBidWNrZXQgPSBhd2FpdCB0aGlzLl9nZXRCdWNrZXQoKTtcbiAgICBjb25zdCBzdHJlYW0gPSBhd2FpdCBidWNrZXQub3BlblVwbG9hZFN0cmVhbShmaWxlbmFtZSwge1xuICAgICAgbWV0YWRhdGE6IG9wdGlvbnMubWV0YWRhdGEsXG4gICAgfSk7XG4gICAgaWYgKHRoaXMuX2VuY3J5cHRpb25LZXkgIT09IG51bGwpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGl2ID0gY3J5cHRvLnJhbmRvbUJ5dGVzKDE2KTtcbiAgICAgICAgY29uc3QgY2lwaGVyID0gY3J5cHRvLmNyZWF0ZUNpcGhlcml2KHRoaXMuX2FsZ29yaXRobSwgdGhpcy5fZW5jcnlwdGlvbktleSwgaXYpO1xuICAgICAgICBjb25zdCBlbmNyeXB0ZWRSZXN1bHQgPSBCdWZmZXIuY29uY2F0KFtcbiAgICAgICAgICBjaXBoZXIudXBkYXRlKGRhdGEpLFxuICAgICAgICAgIGNpcGhlci5maW5hbCgpLFxuICAgICAgICAgIGl2LFxuICAgICAgICAgIGNpcGhlci5nZXRBdXRoVGFnKCksXG4gICAgICAgIF0pO1xuICAgICAgICBhd2FpdCBzdHJlYW0ud3JpdGUoZW5jcnlwdGVkUmVzdWx0KTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgIHJldHVybiByZWplY3QoZXJyKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGF3YWl0IHN0cmVhbS53cml0ZShkYXRhKTtcbiAgICB9XG4gICAgc3RyZWFtLmVuZCgpO1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBzdHJlYW0ub24oJ2ZpbmlzaCcsIHJlc29sdmUpO1xuICAgICAgc3RyZWFtLm9uKCdlcnJvcicsIHJlamVjdCk7XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBkZWxldGVGaWxlKGZpbGVuYW1lOiBzdHJpbmcpIHtcbiAgICBjb25zdCBidWNrZXQgPSBhd2FpdCB0aGlzLl9nZXRCdWNrZXQoKTtcbiAgICBjb25zdCBkb2N1bWVudHMgPSBhd2FpdCBidWNrZXQuZmluZCh7IGZpbGVuYW1lIH0pLnRvQXJyYXkoKTtcbiAgICBpZiAoZG9jdW1lbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdGaWxlTm90Rm91bmQnKTtcbiAgICB9XG4gICAgcmV0dXJuIFByb21pc2UuYWxsKFxuICAgICAgZG9jdW1lbnRzLm1hcChkb2MgPT4ge1xuICAgICAgICByZXR1cm4gYnVja2V0LmRlbGV0ZShkb2MuX2lkKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIGFzeW5jIGdldEZpbGVEYXRhKGZpbGVuYW1lOiBzdHJpbmcpIHtcbiAgICBjb25zdCBidWNrZXQgPSBhd2FpdCB0aGlzLl9nZXRCdWNrZXQoKTtcbiAgICBjb25zdCBzdHJlYW0gPSBidWNrZXQub3BlbkRvd25sb2FkU3RyZWFtQnlOYW1lKGZpbGVuYW1lKTtcbiAgICBzdHJlYW0ucmVhZCgpO1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjb25zdCBjaHVua3MgPSBbXTtcbiAgICAgIHN0cmVhbS5vbignZGF0YScsIGRhdGEgPT4ge1xuICAgICAgICBjaHVua3MucHVzaChkYXRhKTtcbiAgICAgIH0pO1xuICAgICAgc3RyZWFtLm9uKCdlbmQnLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBCdWZmZXIuY29uY2F0KGNodW5rcyk7XG4gICAgICAgIGlmICh0aGlzLl9lbmNyeXB0aW9uS2V5ICE9PSBudWxsKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IGF1dGhUYWdMb2NhdGlvbiA9IGRhdGEubGVuZ3RoIC0gMTY7XG4gICAgICAgICAgICBjb25zdCBpdkxvY2F0aW9uID0gZGF0YS5sZW5ndGggLSAzMjtcbiAgICAgICAgICAgIGNvbnN0IGF1dGhUYWcgPSBkYXRhLnNsaWNlKGF1dGhUYWdMb2NhdGlvbik7XG4gICAgICAgICAgICBjb25zdCBpdiA9IGRhdGEuc2xpY2UoaXZMb2NhdGlvbiwgYXV0aFRhZ0xvY2F0aW9uKTtcbiAgICAgICAgICAgIGNvbnN0IGVuY3J5cHRlZCA9IGRhdGEuc2xpY2UoMCwgaXZMb2NhdGlvbik7XG4gICAgICAgICAgICBjb25zdCBkZWNpcGhlciA9IGNyeXB0by5jcmVhdGVEZWNpcGhlcml2KHRoaXMuX2FsZ29yaXRobSwgdGhpcy5fZW5jcnlwdGlvbktleSwgaXYpO1xuICAgICAgICAgICAgZGVjaXBoZXIuc2V0QXV0aFRhZyhhdXRoVGFnKTtcbiAgICAgICAgICAgIGNvbnN0IGRlY3J5cHRlZCA9IEJ1ZmZlci5jb25jYXQoW2RlY2lwaGVyLnVwZGF0ZShlbmNyeXB0ZWQpLCBkZWNpcGhlci5maW5hbCgpXSk7XG4gICAgICAgICAgICByZXR1cm4gcmVzb2x2ZShkZWNyeXB0ZWQpO1xuICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgcmV0dXJuIHJlamVjdChlcnIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXNvbHZlKGRhdGEpO1xuICAgICAgfSk7XG4gICAgICBzdHJlYW0ub24oJ2Vycm9yJywgZXJyID0+IHtcbiAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIHJvdGF0ZUVuY3J5cHRpb25LZXkob3B0aW9ucyA9IHt9KSB7XG4gICAgdmFyIGZpbGVOYW1lcyA9IFtdO1xuICAgIHZhciBvbGRLZXlGaWxlQWRhcHRlciA9IHt9O1xuICAgIGNvbnN0IGJ1Y2tldCA9IGF3YWl0IHRoaXMuX2dldEJ1Y2tldCgpO1xuICAgIGlmIChvcHRpb25zLm9sZEtleSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBvbGRLZXlGaWxlQWRhcHRlciA9IG5ldyBHcmlkRlNCdWNrZXRBZGFwdGVyKFxuICAgICAgICB0aGlzLl9kYXRhYmFzZVVSSSxcbiAgICAgICAgdGhpcy5fbW9uZ29PcHRpb25zLFxuICAgICAgICBvcHRpb25zLm9sZEtleVxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgb2xkS2V5RmlsZUFkYXB0ZXIgPSBuZXcgR3JpZEZTQnVja2V0QWRhcHRlcih0aGlzLl9kYXRhYmFzZVVSSSwgdGhpcy5fbW9uZ29PcHRpb25zKTtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMuZmlsZU5hbWVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGZpbGVOYW1lcyA9IG9wdGlvbnMuZmlsZU5hbWVzO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBmaWxlTmFtZXNJdGVyYXRvciA9IGF3YWl0IGJ1Y2tldC5maW5kKCkudG9BcnJheSgpO1xuICAgICAgZmlsZU5hbWVzSXRlcmF0b3IuZm9yRWFjaChmaWxlID0+IHtcbiAgICAgICAgZmlsZU5hbWVzLnB1c2goZmlsZS5maWxlbmFtZSk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgdmFyIGZpbGVOYW1lc05vdFJvdGF0ZWQgPSBmaWxlTmFtZXM7XG4gICAgICB2YXIgZmlsZU5hbWVzUm90YXRlZCA9IFtdO1xuICAgICAgdmFyIGZpbGVOYW1lVG90YWwgPSBmaWxlTmFtZXMubGVuZ3RoO1xuICAgICAgdmFyIGZpbGVOYW1lSW5kZXggPSAwO1xuICAgICAgZmlsZU5hbWVzLmZvckVhY2goZmlsZU5hbWUgPT4ge1xuICAgICAgICBvbGRLZXlGaWxlQWRhcHRlclxuICAgICAgICAgIC5nZXRGaWxlRGF0YShmaWxlTmFtZSlcbiAgICAgICAgICAudGhlbihwbGFpblRleHREYXRhID0+IHtcbiAgICAgICAgICAgIC8vT3ZlcndyaXRlIGZpbGUgd2l0aCBkYXRhIGVuY3J5cHRlZCB3aXRoIG5ldyBrZXlcbiAgICAgICAgICAgIHRoaXMuY3JlYXRlRmlsZShmaWxlTmFtZSwgcGxhaW5UZXh0RGF0YSlcbiAgICAgICAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgIGZpbGVOYW1lc1JvdGF0ZWQucHVzaChmaWxlTmFtZSk7XG4gICAgICAgICAgICAgICAgZmlsZU5hbWVzTm90Um90YXRlZCA9IGZpbGVOYW1lc05vdFJvdGF0ZWQuZmlsdGVyKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlICE9PSBmaWxlTmFtZTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBmaWxlTmFtZUluZGV4ICs9IDE7XG4gICAgICAgICAgICAgICAgaWYgKGZpbGVOYW1lSW5kZXggPT0gZmlsZU5hbWVUb3RhbCkge1xuICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh7XG4gICAgICAgICAgICAgICAgICAgIHJvdGF0ZWQ6IGZpbGVOYW1lc1JvdGF0ZWQsXG4gICAgICAgICAgICAgICAgICAgIG5vdFJvdGF0ZWQ6IGZpbGVOYW1lc05vdFJvdGF0ZWQsXG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIC5jYXRjaCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgZmlsZU5hbWVJbmRleCArPSAxO1xuICAgICAgICAgICAgICAgIGlmIChmaWxlTmFtZUluZGV4ID09IGZpbGVOYW1lVG90YWwpIHtcbiAgICAgICAgICAgICAgICAgIHJlc29sdmUoe1xuICAgICAgICAgICAgICAgICAgICByb3RhdGVkOiBmaWxlTmFtZXNSb3RhdGVkLFxuICAgICAgICAgICAgICAgICAgICBub3RSb3RhdGVkOiBmaWxlTmFtZXNOb3RSb3RhdGVkLFxuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5jYXRjaCgoKSA9PiB7XG4gICAgICAgICAgICBmaWxlTmFtZUluZGV4ICs9IDE7XG4gICAgICAgICAgICBpZiAoZmlsZU5hbWVJbmRleCA9PSBmaWxlTmFtZVRvdGFsKSB7XG4gICAgICAgICAgICAgIHJlc29sdmUoe1xuICAgICAgICAgICAgICAgIHJvdGF0ZWQ6IGZpbGVOYW1lc1JvdGF0ZWQsXG4gICAgICAgICAgICAgICAgbm90Um90YXRlZDogZmlsZU5hbWVzTm90Um90YXRlZCxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIGdldEZpbGVMb2NhdGlvbihjb25maWcsIGZpbGVuYW1lKSB7XG4gICAgcmV0dXJuIGNvbmZpZy5tb3VudCArICcvZmlsZXMvJyArIGNvbmZpZy5hcHBsaWNhdGlvbklkICsgJy8nICsgZW5jb2RlVVJJQ29tcG9uZW50KGZpbGVuYW1lKTtcbiAgfVxuXG4gIGFzeW5jIGdldE1ldGFkYXRhKGZpbGVuYW1lKSB7XG4gICAgY29uc3QgYnVja2V0ID0gYXdhaXQgdGhpcy5fZ2V0QnVja2V0KCk7XG4gICAgY29uc3QgZmlsZXMgPSBhd2FpdCBidWNrZXQuZmluZCh7IGZpbGVuYW1lIH0pLnRvQXJyYXkoKTtcbiAgICBpZiAoZmlsZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4ge307XG4gICAgfVxuICAgIGNvbnN0IHsgbWV0YWRhdGEgfSA9IGZpbGVzWzBdO1xuICAgIHJldHVybiB7IG1ldGFkYXRhIH07XG4gIH1cblxuICBhc3luYyBoYW5kbGVGaWxlU3RyZWFtKGZpbGVuYW1lOiBzdHJpbmcsIHJlcSwgcmVzLCBjb250ZW50VHlwZSkge1xuICAgIGNvbnN0IGJ1Y2tldCA9IGF3YWl0IHRoaXMuX2dldEJ1Y2tldCgpO1xuICAgIGNvbnN0IGZpbGVzID0gYXdhaXQgYnVja2V0LmZpbmQoeyBmaWxlbmFtZSB9KS50b0FycmF5KCk7XG4gICAgaWYgKGZpbGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdGaWxlTm90Rm91bmQnKTtcbiAgICB9XG4gICAgY29uc3QgcGFydHMgPSByZXFcbiAgICAgIC5nZXQoJ1JhbmdlJylcbiAgICAgIC5yZXBsYWNlKC9ieXRlcz0vLCAnJylcbiAgICAgIC5zcGxpdCgnLScpO1xuICAgIGNvbnN0IHBhcnRpYWxzdGFydCA9IHBhcnRzWzBdO1xuICAgIGNvbnN0IHBhcnRpYWxlbmQgPSBwYXJ0c1sxXTtcblxuICAgIGNvbnN0IGZpbGVMZW5ndGggPSBmaWxlc1swXS5sZW5ndGg7XG4gICAgY29uc3QgZmlsZVN0YXJ0ID0gcGFyc2VJbnQocGFydGlhbHN0YXJ0LCAxMCk7XG4gICAgY29uc3QgZmlsZUVuZCA9IHBhcnRpYWxlbmQgPyBwYXJzZUludChwYXJ0aWFsZW5kLCAxMCkgOiBmaWxlTGVuZ3RoO1xuXG4gICAgbGV0IHN0YXJ0ID0gTWF0aC5taW4oZmlsZVN0YXJ0IHx8IDAsIGZpbGVFbmQsIGZpbGVMZW5ndGgpO1xuICAgIGxldCBlbmQgPSBNYXRoLm1heChmaWxlU3RhcnQgfHwgMCwgZmlsZUVuZCkgKyAxIHx8IGZpbGVMZW5ndGg7XG4gICAgaWYgKGlzTmFOKGZpbGVTdGFydCkpIHtcbiAgICAgIHN0YXJ0ID0gZmlsZUxlbmd0aCAtIGVuZCArIDE7XG4gICAgICBlbmQgPSBmaWxlTGVuZ3RoO1xuICAgIH1cbiAgICBlbmQgPSBNYXRoLm1pbihlbmQsIGZpbGVMZW5ndGgpO1xuICAgIHN0YXJ0ID0gTWF0aC5tYXgoc3RhcnQsIDApO1xuXG4gICAgcmVzLnN0YXR1cygyMDYpO1xuICAgIHJlcy5oZWFkZXIoJ0FjY2VwdC1SYW5nZXMnLCAnYnl0ZXMnKTtcbiAgICByZXMuaGVhZGVyKCdDb250ZW50LUxlbmd0aCcsIGVuZCAtIHN0YXJ0KTtcbiAgICByZXMuaGVhZGVyKCdDb250ZW50LVJhbmdlJywgJ2J5dGVzICcgKyBzdGFydCArICctJyArIGVuZCArICcvJyArIGZpbGVMZW5ndGgpO1xuICAgIHJlcy5oZWFkZXIoJ0NvbnRlbnQtVHlwZScsIGNvbnRlbnRUeXBlKTtcbiAgICBjb25zdCBzdHJlYW0gPSBidWNrZXQub3BlbkRvd25sb2FkU3RyZWFtQnlOYW1lKGZpbGVuYW1lKTtcbiAgICBzdHJlYW0uc3RhcnQoc3RhcnQpO1xuICAgIGlmIChlbmQpIHtcbiAgICAgIHN0cmVhbS5lbmQoZW5kKTtcbiAgICB9XG4gICAgc3RyZWFtLm9uKCdkYXRhJywgY2h1bmsgPT4ge1xuICAgICAgcmVzLndyaXRlKGNodW5rKTtcbiAgICB9KTtcbiAgICBzdHJlYW0ub24oJ2Vycm9yJywgKGUpID0+IHtcbiAgICAgIHJlcy5zdGF0dXMoNDA0KTtcbiAgICAgIHJlcy5zZW5kKGUubWVzc2FnZSk7XG4gICAgfSk7XG4gICAgc3RyZWFtLm9uKCdlbmQnLCAoKSA9PiB7XG4gICAgICByZXMuZW5kKCk7XG4gICAgfSk7XG4gIH1cblxuICBoYW5kbGVTaHV0ZG93bigpIHtcbiAgICBpZiAoIXRoaXMuX2NsaWVudCkge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fY2xpZW50LmNsb3NlKGZhbHNlKTtcbiAgfVxuXG4gIHZhbGlkYXRlRmlsZW5hbWUoZmlsZW5hbWUpIHtcbiAgICByZXR1cm4gdmFsaWRhdGVGaWxlbmFtZShmaWxlbmFtZSk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgR3JpZEZTQnVja2V0QWRhcHRlcjtcbiJdfQ==
|
package/lib/Auth.js
CHANGED
|
@@ -259,6 +259,16 @@ Auth.prototype.cacheRoles = function () {
|
|
|
259
259
|
return true;
|
|
260
260
|
};
|
|
261
261
|
|
|
262
|
+
Auth.prototype.clearRoleCache = function (sessionToken) {
|
|
263
|
+
if (!this.cacheController) {
|
|
264
|
+
return false;
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
this.cacheController.role.del(this.user.id);
|
|
268
|
+
this.cacheController.user.del(sessionToken);
|
|
269
|
+
return true;
|
|
270
|
+
};
|
|
271
|
+
|
|
262
272
|
Auth.prototype.getRolesByIds = async function (ins) {
|
|
263
273
|
const results = []; // Build an OR query across all parentRoles
|
|
264
274
|
|
|
@@ -333,4 +343,4 @@ module.exports = {
|
|
|
333
343
|
getAuthForSessionToken,
|
|
334
344
|
getAuthForLegacySessionToken
|
|
335
345
|
};
|
|
336
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9BdXRoLmpzIl0sIm5hbWVzIjpbIlJlc3RRdWVyeSIsInJlcXVpcmUiLCJQYXJzZSIsIkF1dGgiLCJjb25maWciLCJjYWNoZUNvbnRyb2xsZXIiLCJ1bmRlZmluZWQiLCJpc01hc3RlciIsImlzUmVhZE9ubHkiLCJ1c2VyIiwiaW5zdGFsbGF0aW9uSWQiLCJ1c2VyUm9sZXMiLCJmZXRjaGVkUm9sZXMiLCJyb2xlUHJvbWlzZSIsInByb3RvdHlwZSIsImlzVW5hdXRoZW50aWNhdGVkIiwibWFzdGVyIiwicmVhZE9ubHkiLCJub2JvZHkiLCJnZXRBdXRoRm9yU2Vzc2lvblRva2VuIiwic2Vzc2lvblRva2VuIiwidXNlckpTT04iLCJnZXQiLCJjYWNoZWRVc2VyIiwiT2JqZWN0IiwiZnJvbUpTT04iLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlc3VsdHMiLCJyZXN0T3B0aW9ucyIsImxpbWl0IiwiaW5jbHVkZSIsInF1ZXJ5IiwiZXhlY3V0ZSIsIlF1ZXJ5IiwiU2Vzc2lvbiIsImVxdWFsVG8iLCJmaW5kIiwidXNlTWFzdGVyS2V5IiwibWFwIiwib2JqIiwidG9KU09OIiwibGVuZ3RoIiwiRXJyb3IiLCJJTlZBTElEX1NFU1NJT05fVE9LRU4iLCJub3ciLCJEYXRlIiwiZXhwaXJlc0F0IiwiaXNvIiwicGFzc3dvcmQiLCJwdXQiLCJ1c2VyT2JqZWN0IiwiZ2V0QXV0aEZvckxlZ2FjeVNlc3Npb25Ub2tlbiIsInRoZW4iLCJyZXNwb25zZSIsImNsYXNzTmFtZSIsImdldFVzZXJSb2xlcyIsIl9sb2FkUm9sZXMiLCJnZXRSb2xlc0ZvclVzZXIiLCJyZXN0V2hlcmUiLCJ1c2VycyIsIl9fdHlwZSIsIm9iamVjdElkIiwiaWQiLCJlYWNoIiwicmVzdWx0IiwicHVzaCIsIlJvbGUiLCJjYWNoZWRSb2xlcyIsInJvbGUiLCJjYWNoZVJvbGVzIiwicm9sZXNNYXAiLCJyZWR1Y2UiLCJtIiwiciIsIm5hbWVzIiwibmFtZSIsImlkcyIsInJvbGVOYW1lcyIsIl9nZXRBbGxSb2xlc05hbWVzRm9yUm9sZUlkcyIsIkFycmF5IiwiZ2V0Um9sZXNCeUlkcyIsImlucyIsImNvbnRhaW5lZEluIiwicm9sZXMiLCIkaW4iLCJyb2xlSURzIiwicXVlcmllZFJvbGVzIiwiZmlsdGVyIiwicm9sZUlEIiwid2FzUXVlcmllZCIsIlNldCIsInJlc3VsdE1hcCIsIm1lbW8iLCJjb25jYXQiLCJtb2R1bGUiLCJleHBvcnRzIl0sIm1hcHBpbmdzIjoiOztBQUFBLE1BQU1BLFNBQVMsR0FBR0MsT0FBTyxDQUFDLGFBQUQsQ0FBekI7O0FBQ0EsTUFBTUMsS0FBSyxHQUFHRCxPQUFPLENBQUMsWUFBRCxDQUFyQixDLENBRUE7QUFDQTtBQUNBOzs7QUFDQSxTQUFTRSxJQUFULENBQWM7QUFDWkMsRUFBQUEsTUFEWTtBQUVaQyxFQUFBQSxlQUFlLEdBQUdDLFNBRk47QUFHWkMsRUFBQUEsUUFBUSxHQUFHLEtBSEM7QUFJWkMsRUFBQUEsVUFBVSxHQUFHLEtBSkQ7QUFLWkMsRUFBQUEsSUFMWTtBQU1aQyxFQUFBQTtBQU5ZLENBQWQsRUFPRztBQUNELE9BQUtOLE1BQUwsR0FBY0EsTUFBZDtBQUNBLE9BQUtDLGVBQUwsR0FBdUJBLGVBQWUsSUFBS0QsTUFBTSxJQUFJQSxNQUFNLENBQUNDLGVBQTVEO0FBQ0EsT0FBS0ssY0FBTCxHQUFzQkEsY0FBdEI7QUFDQSxPQUFLSCxRQUFMLEdBQWdCQSxRQUFoQjtBQUNBLE9BQUtFLElBQUwsR0FBWUEsSUFBWjtBQUNBLE9BQUtELFVBQUwsR0FBa0JBLFVBQWxCLENBTkMsQ0FRRDtBQUNBOztBQUNBLE9BQUtHLFNBQUwsR0FBaUIsRUFBakI7QUFDQSxPQUFLQyxZQUFMLEdBQW9CLEtBQXBCO0FBQ0EsT0FBS0MsV0FBTCxHQUFtQixJQUFuQjtBQUNELEMsQ0FFRDtBQUNBOzs7QUFDQVYsSUFBSSxDQUFDVyxTQUFMLENBQWVDLGlCQUFmLEdBQW1DLFlBQVk7QUFDN0MsTUFBSSxLQUFLUixRQUFULEVBQW1CO0FBQ2pCLFdBQU8sS0FBUDtBQUNEOztBQUNELE1BQUksS0FBS0UsSUFBVCxFQUFlO0FBQ2IsV0FBTyxLQUFQO0FBQ0Q7O0FBQ0QsU0FBTyxJQUFQO0FBQ0QsQ0FSRCxDLENBVUE7OztBQUNBLFNBQVNPLE1BQVQsQ0FBZ0JaLE1BQWhCLEVBQXdCO0FBQ3RCLFNBQU8sSUFBSUQsSUFBSixDQUFTO0FBQUVDLElBQUFBLE1BQUY7QUFBVUcsSUFBQUEsUUFBUSxFQUFFO0FBQXBCLEdBQVQsQ0FBUDtBQUNELEMsQ0FFRDs7O0FBQ0EsU0FBU1UsUUFBVCxDQUFrQmIsTUFBbEIsRUFBMEI7QUFDeEIsU0FBTyxJQUFJRCxJQUFKLENBQVM7QUFBRUMsSUFBQUEsTUFBRjtBQUFVRyxJQUFBQSxRQUFRLEVBQUUsSUFBcEI7QUFBMEJDLElBQUFBLFVBQVUsRUFBRTtBQUF0QyxHQUFULENBQVA7QUFDRCxDLENBRUQ7OztBQUNBLFNBQVNVLE1BQVQsQ0FBZ0JkLE1BQWhCLEVBQXdCO0FBQ3RCLFNBQU8sSUFBSUQsSUFBSixDQUFTO0FBQUVDLElBQUFBLE1BQUY7QUFBVUcsSUFBQUEsUUFBUSxFQUFFO0FBQXBCLEdBQVQsQ0FBUDtBQUNELEMsQ0FFRDs7O0FBQ0EsTUFBTVksc0JBQXNCLEdBQUcsZ0JBQWdCO0FBQzdDZixFQUFBQSxNQUQ2QztBQUU3Q0MsRUFBQUEsZUFGNkM7QUFHN0NlLEVBQUFBLFlBSDZDO0FBSTdDVixFQUFBQTtBQUo2QyxDQUFoQixFQUs1QjtBQUNETCxFQUFBQSxlQUFlLEdBQUdBLGVBQWUsSUFBS0QsTUFBTSxJQUFJQSxNQUFNLENBQUNDLGVBQXZEOztBQUNBLE1BQUlBLGVBQUosRUFBcUI7QUFDbkIsVUFBTWdCLFFBQVEsR0FBRyxNQUFNaEIsZUFBZSxDQUFDSSxJQUFoQixDQUFxQmEsR0FBckIsQ0FBeUJGLFlBQXpCLENBQXZCOztBQUNBLFFBQUlDLFFBQUosRUFBYztBQUNaLFlBQU1FLFVBQVUsR0FBR3JCLEtBQUssQ0FBQ3NCLE1BQU4sQ0FBYUMsUUFBYixDQUFzQkosUUFBdEIsQ0FBbkI7QUFDQSxhQUFPSyxPQUFPLENBQUNDLE9BQVIsQ0FDTCxJQUFJeEIsSUFBSixDQUFTO0FBQ1BDLFFBQUFBLE1BRE87QUFFUEMsUUFBQUEsZUFGTztBQUdQRSxRQUFBQSxRQUFRLEVBQUUsS0FISDtBQUlQRyxRQUFBQSxjQUpPO0FBS1BELFFBQUFBLElBQUksRUFBRWM7QUFMQyxPQUFULENBREssQ0FBUDtBQVNEO0FBQ0Y7O0FBRUQsTUFBSUssT0FBSjs7QUFDQSxNQUFJeEIsTUFBSixFQUFZO0FBQ1YsVUFBTXlCLFdBQVcsR0FBRztBQUNsQkMsTUFBQUEsS0FBSyxFQUFFLENBRFc7QUFFbEJDLE1BQUFBLE9BQU8sRUFBRTtBQUZTLEtBQXBCO0FBS0EsVUFBTUMsS0FBSyxHQUFHLElBQUloQyxTQUFKLENBQWNJLE1BQWQsRUFBc0JZLE1BQU0sQ0FBQ1osTUFBRCxDQUE1QixFQUFzQyxVQUF0QyxFQUFrRDtBQUFFZ0IsTUFBQUE7QUFBRixLQUFsRCxFQUFvRVMsV0FBcEUsQ0FBZDtBQUNBRCxJQUFBQSxPQUFPLEdBQUcsQ0FBQyxNQUFNSSxLQUFLLENBQUNDLE9BQU4sRUFBUCxFQUF3QkwsT0FBbEM7QUFDRCxHQVJELE1BUU87QUFDTEEsSUFBQUEsT0FBTyxHQUFHLENBQ1IsTUFBTSxJQUFJMUIsS0FBSyxDQUFDZ0MsS0FBVixDQUFnQmhDLEtBQUssQ0FBQ2lDLE9BQXRCLEVBQ0hMLEtBREcsQ0FDRyxDQURILEVBRUhDLE9BRkcsQ0FFSyxNQUZMLEVBR0hLLE9BSEcsQ0FHSyxjQUhMLEVBR3FCaEIsWUFIckIsRUFJSGlCLElBSkcsQ0FJRTtBQUFFQyxNQUFBQSxZQUFZLEVBQUU7QUFBaEIsS0FKRixDQURFLEVBTVJDLEdBTlEsQ0FNSkMsR0FBRyxJQUFJQSxHQUFHLENBQUNDLE1BQUosRUFOSCxDQUFWO0FBT0Q7O0FBRUQsTUFBSWIsT0FBTyxDQUFDYyxNQUFSLEtBQW1CLENBQW5CLElBQXdCLENBQUNkLE9BQU8sQ0FBQyxDQUFELENBQVAsQ0FBVyxNQUFYLENBQTdCLEVBQWlEO0FBQy9DLFVBQU0sSUFBSTFCLEtBQUssQ0FBQ3lDLEtBQVYsQ0FBZ0J6QyxLQUFLLENBQUN5QyxLQUFOLENBQVlDLHFCQUE1QixFQUFtRCx1QkFBbkQsQ0FBTjtBQUNEOztBQUNELFFBQU1DLEdBQUcsR0FBRyxJQUFJQyxJQUFKLEVBQVo7QUFBQSxRQUNFQyxTQUFTLEdBQUduQixPQUFPLENBQUMsQ0FBRCxDQUFQLENBQVdtQixTQUFYLEdBQXVCLElBQUlELElBQUosQ0FBU2xCLE9BQU8sQ0FBQyxDQUFELENBQVAsQ0FBV21CLFNBQVgsQ0FBcUJDLEdBQTlCLENBQXZCLEdBQTREMUMsU0FEMUU7O0FBRUEsTUFBSXlDLFNBQVMsR0FBR0YsR0FBaEIsRUFBcUI7QUFDbkIsVUFBTSxJQUFJM0MsS0FBSyxDQUFDeUMsS0FBVixDQUFnQnpDLEtBQUssQ0FBQ3lDLEtBQU4sQ0FBWUMscUJBQTVCLEVBQW1ELDJCQUFuRCxDQUFOO0FBQ0Q7O0FBQ0QsUUFBTUosR0FBRyxHQUFHWixPQUFPLENBQUMsQ0FBRCxDQUFQLENBQVcsTUFBWCxDQUFaO0FBQ0EsU0FBT1ksR0FBRyxDQUFDUyxRQUFYO0FBQ0FULEVBQUFBLEdBQUcsQ0FBQyxXQUFELENBQUgsR0FBbUIsT0FBbkI7QUFDQUEsRUFBQUEsR0FBRyxDQUFDLGNBQUQsQ0FBSCxHQUFzQnBCLFlBQXRCOztBQUNBLE1BQUlmLGVBQUosRUFBcUI7QUFDbkJBLElBQUFBLGVBQWUsQ0FBQ0ksSUFBaEIsQ0FBcUJ5QyxHQUFyQixDQUF5QjlCLFlBQXpCLEVBQXVDb0IsR0FBdkM7QUFDRDs7QUFDRCxRQUFNVyxVQUFVLEdBQUdqRCxLQUFLLENBQUNzQixNQUFOLENBQWFDLFFBQWIsQ0FBc0JlLEdBQXRCLENBQW5CO0FBQ0EsU0FBTyxJQUFJckMsSUFBSixDQUFTO0FBQ2RDLElBQUFBLE1BRGM7QUFFZEMsSUFBQUEsZUFGYztBQUdkRSxJQUFBQSxRQUFRLEVBQUUsS0FISTtBQUlkRyxJQUFBQSxjQUpjO0FBS2RELElBQUFBLElBQUksRUFBRTBDO0FBTFEsR0FBVCxDQUFQO0FBT0QsQ0FqRUQ7O0FBbUVBLElBQUlDLDRCQUE0QixHQUFHLFVBQVU7QUFBRWhELEVBQUFBLE1BQUY7QUFBVWdCLEVBQUFBLFlBQVY7QUFBd0JWLEVBQUFBO0FBQXhCLENBQVYsRUFBb0Q7QUFDckYsTUFBSW1CLFdBQVcsR0FBRztBQUNoQkMsSUFBQUEsS0FBSyxFQUFFO0FBRFMsR0FBbEI7QUFHQSxNQUFJRSxLQUFLLEdBQUcsSUFBSWhDLFNBQUosQ0FBY0ksTUFBZCxFQUFzQlksTUFBTSxDQUFDWixNQUFELENBQTVCLEVBQXNDLE9BQXRDLEVBQStDO0FBQUVnQixJQUFBQTtBQUFGLEdBQS9DLEVBQWlFUyxXQUFqRSxDQUFaO0FBQ0EsU0FBT0csS0FBSyxDQUFDQyxPQUFOLEdBQWdCb0IsSUFBaEIsQ0FBcUJDLFFBQVEsSUFBSTtBQUN0QyxRQUFJMUIsT0FBTyxHQUFHMEIsUUFBUSxDQUFDMUIsT0FBdkI7O0FBQ0EsUUFBSUEsT0FBTyxDQUFDYyxNQUFSLEtBQW1CLENBQXZCLEVBQTBCO0FBQ3hCLFlBQU0sSUFBSXhDLEtBQUssQ0FBQ3lDLEtBQVYsQ0FBZ0J6QyxLQUFLLENBQUN5QyxLQUFOLENBQVlDLHFCQUE1QixFQUFtRCw4QkFBbkQsQ0FBTjtBQUNEOztBQUNELFVBQU1KLEdBQUcsR0FBR1osT0FBTyxDQUFDLENBQUQsQ0FBbkI7QUFDQVksSUFBQUEsR0FBRyxDQUFDZSxTQUFKLEdBQWdCLE9BQWhCO0FBQ0EsVUFBTUosVUFBVSxHQUFHakQsS0FBSyxDQUFDc0IsTUFBTixDQUFhQyxRQUFiLENBQXNCZSxHQUF0QixDQUFuQjtBQUNBLFdBQU8sSUFBSXJDLElBQUosQ0FBUztBQUNkQyxNQUFBQSxNQURjO0FBRWRHLE1BQUFBLFFBQVEsRUFBRSxLQUZJO0FBR2RHLE1BQUFBLGNBSGM7QUFJZEQsTUFBQUEsSUFBSSxFQUFFMEM7QUFKUSxLQUFULENBQVA7QUFNRCxHQWRNLENBQVA7QUFlRCxDQXBCRCxDLENBc0JBOzs7QUFDQWhELElBQUksQ0FBQ1csU0FBTCxDQUFlMEMsWUFBZixHQUE4QixZQUFZO0FBQ3hDLE1BQUksS0FBS2pELFFBQUwsSUFBaUIsQ0FBQyxLQUFLRSxJQUEzQixFQUFpQztBQUMvQixXQUFPaUIsT0FBTyxDQUFDQyxPQUFSLENBQWdCLEVBQWhCLENBQVA7QUFDRDs7QUFDRCxNQUFJLEtBQUtmLFlBQVQsRUFBdUI7QUFDckIsV0FBT2MsT0FBTyxDQUFDQyxPQUFSLENBQWdCLEtBQUtoQixTQUFyQixDQUFQO0FBQ0Q7O0FBQ0QsTUFBSSxLQUFLRSxXQUFULEVBQXNCO0FBQ3BCLFdBQU8sS0FBS0EsV0FBWjtBQUNEOztBQUNELE9BQUtBLFdBQUwsR0FBbUIsS0FBSzRDLFVBQUwsRUFBbkI7QUFDQSxTQUFPLEtBQUs1QyxXQUFaO0FBQ0QsQ0FaRDs7QUFjQVYsSUFBSSxDQUFDVyxTQUFMLENBQWU0QyxlQUFmLEdBQWlDLGtCQUFrQjtBQUNqRDtBQUNBLFFBQU05QixPQUFPLEdBQUcsRUFBaEI7O0FBQ0EsTUFBSSxLQUFLeEIsTUFBVCxFQUFpQjtBQUNmLFVBQU11RCxTQUFTLEdBQUc7QUFDaEJDLE1BQUFBLEtBQUssRUFBRTtBQUNMQyxRQUFBQSxNQUFNLEVBQUUsU0FESDtBQUVMTixRQUFBQSxTQUFTLEVBQUUsT0FGTjtBQUdMTyxRQUFBQSxRQUFRLEVBQUUsS0FBS3JELElBQUwsQ0FBVXNEO0FBSGY7QUFEUyxLQUFsQjtBQU9BLFVBQU0sSUFBSS9ELFNBQUosQ0FBYyxLQUFLSSxNQUFuQixFQUEyQlksTUFBTSxDQUFDLEtBQUtaLE1BQU4sQ0FBakMsRUFBZ0QsT0FBaEQsRUFBeUR1RCxTQUF6RCxFQUFvRSxFQUFwRSxFQUF3RUssSUFBeEUsQ0FBNkVDLE1BQU0sSUFDdkZyQyxPQUFPLENBQUNzQyxJQUFSLENBQWFELE1BQWIsQ0FESSxDQUFOO0FBR0QsR0FYRCxNQVdPO0FBQ0wsVUFBTSxJQUFJL0QsS0FBSyxDQUFDZ0MsS0FBVixDQUFnQmhDLEtBQUssQ0FBQ2lFLElBQXRCLEVBQ0gvQixPQURHLENBQ0ssT0FETCxFQUNjLEtBQUszQixJQURuQixFQUVIdUQsSUFGRyxDQUVFQyxNQUFNLElBQUlyQyxPQUFPLENBQUNzQyxJQUFSLENBQWFELE1BQU0sQ0FBQ3hCLE1BQVAsRUFBYixDQUZaLEVBRTJDO0FBQUVILE1BQUFBLFlBQVksRUFBRTtBQUFoQixLQUYzQyxDQUFOO0FBR0Q7O0FBQ0QsU0FBT1YsT0FBUDtBQUNELENBcEJELEMsQ0FzQkE7OztBQUNBekIsSUFBSSxDQUFDVyxTQUFMLENBQWUyQyxVQUFmLEdBQTRCLGtCQUFrQjtBQUM1QyxNQUFJLEtBQUtwRCxlQUFULEVBQTBCO0FBQ3hCLFVBQU0rRCxXQUFXLEdBQUcsTUFBTSxLQUFLL0QsZUFBTCxDQUFxQmdFLElBQXJCLENBQTBCL0MsR0FBMUIsQ0FBOEIsS0FBS2IsSUFBTCxDQUFVc0QsRUFBeEMsQ0FBMUI7O0FBQ0EsUUFBSUssV0FBVyxJQUFJLElBQW5CLEVBQXlCO0FBQ3ZCLFdBQUt4RCxZQUFMLEdBQW9CLElBQXBCO0FBQ0EsV0FBS0QsU0FBTCxHQUFpQnlELFdBQWpCO0FBQ0EsYUFBT0EsV0FBUDtBQUNEO0FBQ0YsR0FSMkMsQ0FVNUM7OztBQUNBLFFBQU14QyxPQUFPLEdBQUcsTUFBTSxLQUFLOEIsZUFBTCxFQUF0Qjs7QUFDQSxNQUFJLENBQUM5QixPQUFPLENBQUNjLE1BQWIsRUFBcUI7QUFDbkIsU0FBSy9CLFNBQUwsR0FBaUIsRUFBakI7QUFDQSxTQUFLQyxZQUFMLEdBQW9CLElBQXBCO0FBQ0EsU0FBS0MsV0FBTCxHQUFtQixJQUFuQjtBQUVBLFNBQUt5RCxVQUFMO0FBQ0EsV0FBTyxLQUFLM0QsU0FBWjtBQUNEOztBQUVELFFBQU00RCxRQUFRLEdBQUczQyxPQUFPLENBQUM0QyxNQUFSLENBQ2YsQ0FBQ0MsQ0FBRCxFQUFJQyxDQUFKLEtBQVU7QUFDUkQsSUFBQUEsQ0FBQyxDQUFDRSxLQUFGLENBQVFULElBQVIsQ0FBYVEsQ0FBQyxDQUFDRSxJQUFmO0FBQ0FILElBQUFBLENBQUMsQ0FBQ0ksR0FBRixDQUFNWCxJQUFOLENBQVdRLENBQUMsQ0FBQ1osUUFBYjtBQUNBLFdBQU9XLENBQVA7QUFDRCxHQUxjLEVBTWY7QUFBRUksSUFBQUEsR0FBRyxFQUFFLEVBQVA7QUFBV0YsSUFBQUEsS0FBSyxFQUFFO0FBQWxCLEdBTmUsQ0FBakIsQ0FyQjRDLENBOEI1Qzs7QUFDQSxRQUFNRyxTQUFTLEdBQUcsTUFBTSxLQUFLQywyQkFBTCxDQUFpQ1IsUUFBUSxDQUFDTSxHQUExQyxFQUErQ04sUUFBUSxDQUFDSSxLQUF4RCxDQUF4QjtBQUNBLE9BQUtoRSxTQUFMLEdBQWlCbUUsU0FBUyxDQUFDdkMsR0FBVixDQUFjbUMsQ0FBQyxJQUFJO0FBQ2xDLFdBQU8sVUFBVUEsQ0FBakI7QUFDRCxHQUZnQixDQUFqQjtBQUdBLE9BQUs5RCxZQUFMLEdBQW9CLElBQXBCO0FBQ0EsT0FBS0MsV0FBTCxHQUFtQixJQUFuQjtBQUNBLE9BQUt5RCxVQUFMO0FBQ0EsU0FBTyxLQUFLM0QsU0FBWjtBQUNELENBdkNEOztBQXlDQVIsSUFBSSxDQUFDVyxTQUFMLENBQWV3RCxVQUFmLEdBQTRCLFlBQVk7QUFDdEMsTUFBSSxDQUFDLEtBQUtqRSxlQUFWLEVBQTJCO0FBQ3pCLFdBQU8sS0FBUDtBQUNEOztBQUNELE9BQUtBLGVBQUwsQ0FBcUJnRSxJQUFyQixDQUEwQm5CLEdBQTFCLENBQThCLEtBQUt6QyxJQUFMLENBQVVzRCxFQUF4QyxFQUE0Q2lCLEtBQUssQ0FBQyxHQUFHLEtBQUtyRSxTQUFULENBQWpEO0FBQ0EsU0FBTyxJQUFQO0FBQ0QsQ0FORDs7QUFRQVIsSUFBSSxDQUFDVyxTQUFMLENBQWVtRSxhQUFmLEdBQStCLGdCQUFnQkMsR0FBaEIsRUFBcUI7QUFDbEQsUUFBTXRELE9BQU8sR0FBRyxFQUFoQixDQURrRCxDQUVsRDs7QUFDQSxNQUFJLENBQUMsS0FBS3hCLE1BQVYsRUFBa0I7QUFDaEIsVUFBTSxJQUFJRixLQUFLLENBQUNnQyxLQUFWLENBQWdCaEMsS0FBSyxDQUFDaUUsSUFBdEIsRUFDSGdCLFdBREcsQ0FFRixPQUZFLEVBR0ZELEdBQUcsQ0FBQzNDLEdBQUosQ0FBUXdCLEVBQUUsSUFBSTtBQUNaLFlBQU1NLElBQUksR0FBRyxJQUFJbkUsS0FBSyxDQUFDc0IsTUFBVixDQUFpQnRCLEtBQUssQ0FBQ2lFLElBQXZCLENBQWI7QUFDQUUsTUFBQUEsSUFBSSxDQUFDTixFQUFMLEdBQVVBLEVBQVY7QUFDQSxhQUFPTSxJQUFQO0FBQ0QsS0FKRCxDQUhFLEVBU0hMLElBVEcsQ0FTRUMsTUFBTSxJQUFJckMsT0FBTyxDQUFDc0MsSUFBUixDQUFhRCxNQUFNLENBQUN4QixNQUFQLEVBQWIsQ0FUWixFQVMyQztBQUFFSCxNQUFBQSxZQUFZLEVBQUU7QUFBaEIsS0FUM0MsQ0FBTjtBQVVELEdBWEQsTUFXTztBQUNMLFVBQU04QyxLQUFLLEdBQUdGLEdBQUcsQ0FBQzNDLEdBQUosQ0FBUXdCLEVBQUUsSUFBSTtBQUMxQixhQUFPO0FBQ0xGLFFBQUFBLE1BQU0sRUFBRSxTQURIO0FBRUxOLFFBQUFBLFNBQVMsRUFBRSxPQUZOO0FBR0xPLFFBQUFBLFFBQVEsRUFBRUM7QUFITCxPQUFQO0FBS0QsS0FOYSxDQUFkO0FBT0EsVUFBTUosU0FBUyxHQUFHO0FBQUV5QixNQUFBQSxLQUFLLEVBQUU7QUFBRUMsUUFBQUEsR0FBRyxFQUFFRDtBQUFQO0FBQVQsS0FBbEI7QUFDQSxVQUFNLElBQUlwRixTQUFKLENBQWMsS0FBS0ksTUFBbkIsRUFBMkJZLE1BQU0sQ0FBQyxLQUFLWixNQUFOLENBQWpDLEVBQWdELE9BQWhELEVBQXlEdUQsU0FBekQsRUFBb0UsRUFBcEUsRUFBd0VLLElBQXhFLENBQTZFQyxNQUFNLElBQ3ZGckMsT0FBTyxDQUFDc0MsSUFBUixDQUFhRCxNQUFiLENBREksQ0FBTjtBQUdEOztBQUNELFNBQU9yQyxPQUFQO0FBQ0QsQ0E1QkQsQyxDQThCQTs7O0FBQ0F6QixJQUFJLENBQUNXLFNBQUwsQ0FBZWlFLDJCQUFmLEdBQTZDLFVBQVVPLE9BQVYsRUFBbUJYLEtBQUssR0FBRyxFQUEzQixFQUErQlksWUFBWSxHQUFHLEVBQTlDLEVBQWtEO0FBQzdGLFFBQU1MLEdBQUcsR0FBR0ksT0FBTyxDQUFDRSxNQUFSLENBQWVDLE1BQU0sSUFBSTtBQUNuQyxVQUFNQyxVQUFVLEdBQUdILFlBQVksQ0FBQ0UsTUFBRCxDQUFaLEtBQXlCLElBQTVDO0FBQ0FGLElBQUFBLFlBQVksQ0FBQ0UsTUFBRCxDQUFaLEdBQXVCLElBQXZCO0FBQ0EsV0FBT0MsVUFBUDtBQUNELEdBSlcsQ0FBWixDQUQ2RixDQU83Rjs7QUFDQSxNQUFJUixHQUFHLENBQUN4QyxNQUFKLElBQWMsQ0FBbEIsRUFBcUI7QUFDbkIsV0FBT2hCLE9BQU8sQ0FBQ0MsT0FBUixDQUFnQixDQUFDLEdBQUcsSUFBSWdFLEdBQUosQ0FBUWhCLEtBQVIsQ0FBSixDQUFoQixDQUFQO0FBQ0Q7O0FBRUQsU0FBTyxLQUFLTSxhQUFMLENBQW1CQyxHQUFuQixFQUNKN0IsSUFESSxDQUNDekIsT0FBTyxJQUFJO0FBQ2Y7QUFDQSxRQUFJLENBQUNBLE9BQU8sQ0FBQ2MsTUFBYixFQUFxQjtBQUNuQixhQUFPaEIsT0FBTyxDQUFDQyxPQUFSLENBQWdCZ0QsS0FBaEIsQ0FBUDtBQUNELEtBSmMsQ0FLZjs7O0FBQ0EsVUFBTWlCLFNBQVMsR0FBR2hFLE9BQU8sQ0FBQzRDLE1BQVIsQ0FDaEIsQ0FBQ3FCLElBQUQsRUFBT3hCLElBQVAsS0FBZ0I7QUFDZHdCLE1BQUFBLElBQUksQ0FBQ2xCLEtBQUwsQ0FBV1QsSUFBWCxDQUFnQkcsSUFBSSxDQUFDTyxJQUFyQjtBQUNBaUIsTUFBQUEsSUFBSSxDQUFDaEIsR0FBTCxDQUFTWCxJQUFULENBQWNHLElBQUksQ0FBQ1AsUUFBbkI7QUFDQSxhQUFPK0IsSUFBUDtBQUNELEtBTGUsRUFNaEI7QUFBRWhCLE1BQUFBLEdBQUcsRUFBRSxFQUFQO0FBQVdGLE1BQUFBLEtBQUssRUFBRTtBQUFsQixLQU5nQixDQUFsQixDQU5lLENBY2Y7O0FBQ0FBLElBQUFBLEtBQUssR0FBR0EsS0FBSyxDQUFDbUIsTUFBTixDQUFhRixTQUFTLENBQUNqQixLQUF2QixDQUFSLENBZmUsQ0FnQmY7O0FBQ0EsV0FBTyxLQUFLSSwyQkFBTCxDQUFpQ2EsU0FBUyxDQUFDZixHQUEzQyxFQUFnREYsS0FBaEQsRUFBdURZLFlBQXZELENBQVA7QUFDRCxHQW5CSSxFQW9CSmxDLElBcEJJLENBb0JDc0IsS0FBSyxJQUFJO0FBQ2IsV0FBT2pELE9BQU8sQ0FBQ0MsT0FBUixDQUFnQixDQUFDLEdBQUcsSUFBSWdFLEdBQUosQ0FBUWhCLEtBQVIsQ0FBSixDQUFoQixDQUFQO0FBQ0QsR0F0QkksQ0FBUDtBQXVCRCxDQW5DRDs7QUFxQ0FvQixNQUFNLENBQUNDLE9BQVAsR0FBaUI7QUFDZjdGLEVBQUFBLElBRGU7QUFFZmEsRUFBQUEsTUFGZTtBQUdmRSxFQUFBQSxNQUhlO0FBSWZELEVBQUFBLFFBSmU7QUFLZkUsRUFBQUEsc0JBTGU7QUFNZmlDLEVBQUFBO0FBTmUsQ0FBakIiLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCBSZXN0UXVlcnkgPSByZXF1aXJlKCcuL1Jlc3RRdWVyeScpO1xuY29uc3QgUGFyc2UgPSByZXF1aXJlKCdwYXJzZS9ub2RlJyk7XG5cbi8vIEFuIEF1dGggb2JqZWN0IHRlbGxzIHlvdSB3aG8gaXMgcmVxdWVzdGluZyBzb21ldGhpbmcgYW5kIHdoZXRoZXJcbi8vIHRoZSBtYXN0ZXIga2V5IHdhcyB1c2VkLlxuLy8gdXNlck9iamVjdCBpcyBhIFBhcnNlLlVzZXIgYW5kIGNhbiBiZSBudWxsIGlmIHRoZXJlJ3Mgbm8gdXNlci5cbmZ1bmN0aW9uIEF1dGgoe1xuICBjb25maWcsXG4gIGNhY2hlQ29udHJvbGxlciA9IHVuZGVmaW5lZCxcbiAgaXNNYXN0ZXIgPSBmYWxzZSxcbiAgaXNSZWFkT25seSA9IGZhbHNlLFxuICB1c2VyLFxuICBpbnN0YWxsYXRpb25JZCxcbn0pIHtcbiAgdGhpcy5jb25maWcgPSBjb25maWc7XG4gIHRoaXMuY2FjaGVDb250cm9sbGVyID0gY2FjaGVDb250cm9sbGVyIHx8IChjb25maWcgJiYgY29uZmlnLmNhY2hlQ29udHJvbGxlcik7XG4gIHRoaXMuaW5zdGFsbGF0aW9uSWQgPSBpbnN0YWxsYXRpb25JZDtcbiAgdGhpcy5pc01hc3RlciA9IGlzTWFzdGVyO1xuICB0aGlzLnVzZXIgPSB1c2VyO1xuICB0aGlzLmlzUmVhZE9ubHkgPSBpc1JlYWRPbmx5O1xuXG4gIC8vIEFzc3VtaW5nIGEgdXNlcnMgcm9sZXMgd29uJ3QgY2hhbmdlIGR1cmluZyBhIHNpbmdsZSByZXF1ZXN0LCB3ZSdsbFxuICAvLyBvbmx5IGxvYWQgdGhlbSBvbmNlLlxuICB0aGlzLnVzZXJSb2xlcyA9IFtdO1xuICB0aGlzLmZldGNoZWRSb2xlcyA9IGZhbHNlO1xuICB0aGlzLnJvbGVQcm9taXNlID0gbnVsbDtcbn1cblxuLy8gV2hldGhlciB0aGlzIGF1dGggY291bGQgcG9zc2libHkgbW9kaWZ5IHRoZSBnaXZlbiB1c2VyIGlkLlxuLy8gSXQgc3RpbGwgY291bGQgYmUgZm9yYmlkZGVuIHZpYSBBQ0xzIGV2ZW4gaWYgdGhpcyByZXR1cm5zIHRydWUuXG5BdXRoLnByb3RvdHlwZS5pc1VuYXV0aGVudGljYXRlZCA9IGZ1bmN0aW9uICgpIHtcbiAgaWYgKHRoaXMuaXNNYXN0ZXIpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKHRoaXMudXNlcikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn07XG5cbi8vIEEgaGVscGVyIHRvIGdldCBhIG1hc3Rlci1sZXZlbCBBdXRoIG9iamVjdFxuZnVuY3Rpb24gbWFzdGVyKGNvbmZpZykge1xuICByZXR1cm4gbmV3IEF1dGgoeyBjb25maWcsIGlzTWFzdGVyOiB0cnVlIH0pO1xufVxuXG4vLyBBIGhlbHBlciB0byBnZXQgYSBtYXN0ZXItbGV2ZWwgQXV0aCBvYmplY3RcbmZ1bmN0aW9uIHJlYWRPbmx5KGNvbmZpZykge1xuICByZXR1cm4gbmV3IEF1dGgoeyBjb25maWcsIGlzTWFzdGVyOiB0cnVlLCBpc1JlYWRPbmx5OiB0cnVlIH0pO1xufVxuXG4vLyBBIGhlbHBlciB0byBnZXQgYSBub2JvZHktbGV2ZWwgQXV0aCBvYmplY3RcbmZ1bmN0aW9uIG5vYm9keShjb25maWcpIHtcbiAgcmV0dXJuIG5ldyBBdXRoKHsgY29uZmlnLCBpc01hc3RlcjogZmFsc2UgfSk7XG59XG5cbi8vIFJldHVybnMgYSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gYW4gQXV0aCBvYmplY3RcbmNvbnN0IGdldEF1dGhGb3JTZXNzaW9uVG9rZW4gPSBhc3luYyBmdW5jdGlvbiAoe1xuICBjb25maWcsXG4gIGNhY2hlQ29udHJvbGxlcixcbiAgc2Vzc2lvblRva2VuLFxuICBpbnN0YWxsYXRpb25JZCxcbn0pIHtcbiAgY2FjaGVDb250cm9sbGVyID0gY2FjaGVDb250cm9sbGVyIHx8IChjb25maWcgJiYgY29uZmlnLmNhY2hlQ29udHJvbGxlcik7XG4gIGlmIChjYWNoZUNvbnRyb2xsZXIpIHtcbiAgICBjb25zdCB1c2VySlNPTiA9IGF3YWl0IGNhY2hlQ29udHJvbGxlci51c2VyLmdldChzZXNzaW9uVG9rZW4pO1xuICAgIGlmICh1c2VySlNPTikge1xuICAgICAgY29uc3QgY2FjaGVkVXNlciA9IFBhcnNlLk9iamVjdC5mcm9tSlNPTih1c2VySlNPTik7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFxuICAgICAgICBuZXcgQXV0aCh7XG4gICAgICAgICAgY29uZmlnLFxuICAgICAgICAgIGNhY2hlQ29udHJvbGxlcixcbiAgICAgICAgICBpc01hc3RlcjogZmFsc2UsXG4gICAgICAgICAgaW5zdGFsbGF0aW9uSWQsXG4gICAgICAgICAgdXNlcjogY2FjaGVkVXNlcixcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgbGV0IHJlc3VsdHM7XG4gIGlmIChjb25maWcpIHtcbiAgICBjb25zdCByZXN0T3B0aW9ucyA9IHtcbiAgICAgIGxpbWl0OiAxLFxuICAgICAgaW5jbHVkZTogJ3VzZXInLFxuICAgIH07XG5cbiAgICBjb25zdCBxdWVyeSA9IG5ldyBSZXN0UXVlcnkoY29uZmlnLCBtYXN0ZXIoY29uZmlnKSwgJ19TZXNzaW9uJywgeyBzZXNzaW9uVG9rZW4gfSwgcmVzdE9wdGlvbnMpO1xuICAgIHJlc3VsdHMgPSAoYXdhaXQgcXVlcnkuZXhlY3V0ZSgpKS5yZXN1bHRzO1xuICB9IGVsc2Uge1xuICAgIHJlc3VsdHMgPSAoXG4gICAgICBhd2FpdCBuZXcgUGFyc2UuUXVlcnkoUGFyc2UuU2Vzc2lvbilcbiAgICAgICAgLmxpbWl0KDEpXG4gICAgICAgIC5pbmNsdWRlKCd1c2VyJylcbiAgICAgICAgLmVxdWFsVG8oJ3Nlc3Npb25Ub2tlbicsIHNlc3Npb25Ub2tlbilcbiAgICAgICAgLmZpbmQoeyB1c2VNYXN0ZXJLZXk6IHRydWUgfSlcbiAgICApLm1hcChvYmogPT4gb2JqLnRvSlNPTigpKTtcbiAgfVxuXG4gIGlmIChyZXN1bHRzLmxlbmd0aCAhPT0gMSB8fCAhcmVzdWx0c1swXVsndXNlciddKSB7XG4gICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLklOVkFMSURfU0VTU0lPTl9UT0tFTiwgJ0ludmFsaWQgc2Vzc2lvbiB0b2tlbicpO1xuICB9XG4gIGNvbnN0IG5vdyA9IG5ldyBEYXRlKCksXG4gICAgZXhwaXJlc0F0ID0gcmVzdWx0c1swXS5leHBpcmVzQXQgPyBuZXcgRGF0ZShyZXN1bHRzWzBdLmV4cGlyZXNBdC5pc28pIDogdW5kZWZpbmVkO1xuICBpZiAoZXhwaXJlc0F0IDwgbm93KSB7XG4gICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLklOVkFMSURfU0VTU0lPTl9UT0tFTiwgJ1Nlc3Npb24gdG9rZW4gaXMgZXhwaXJlZC4nKTtcbiAgfVxuICBjb25zdCBvYmogPSByZXN1bHRzWzBdWyd1c2VyJ107XG4gIGRlbGV0ZSBvYmoucGFzc3dvcmQ7XG4gIG9ialsnY2xhc3NOYW1lJ10gPSAnX1VzZXInO1xuICBvYmpbJ3Nlc3Npb25Ub2tlbiddID0gc2Vzc2lvblRva2VuO1xuICBpZiAoY2FjaGVDb250cm9sbGVyKSB7XG4gICAgY2FjaGVDb250cm9sbGVyLnVzZXIucHV0KHNlc3Npb25Ub2tlbiwgb2JqKTtcbiAgfVxuICBjb25zdCB1c2VyT2JqZWN0ID0gUGFyc2UuT2JqZWN0LmZyb21KU09OKG9iaik7XG4gIHJldHVybiBuZXcgQXV0aCh7XG4gICAgY29uZmlnLFxuICAgIGNhY2hlQ29udHJvbGxlcixcbiAgICBpc01hc3RlcjogZmFsc2UsXG4gICAgaW5zdGFsbGF0aW9uSWQsXG4gICAgdXNlcjogdXNlck9iamVjdCxcbiAgfSk7XG59O1xuXG52YXIgZ2V0QXV0aEZvckxlZ2FjeVNlc3Npb25Ub2tlbiA9IGZ1bmN0aW9uICh7IGNvbmZpZywgc2Vzc2lvblRva2VuLCBpbnN0YWxsYXRpb25JZCB9KSB7XG4gIHZhciByZXN0T3B0aW9ucyA9IHtcbiAgICBsaW1pdDogMSxcbiAgfTtcbiAgdmFyIHF1ZXJ5ID0gbmV3IFJlc3RRdWVyeShjb25maWcsIG1hc3Rlcihjb25maWcpLCAnX1VzZXInLCB7IHNlc3Npb25Ub2tlbiB9LCByZXN0T3B0aW9ucyk7XG4gIHJldHVybiBxdWVyeS5leGVjdXRlKCkudGhlbihyZXNwb25zZSA9PiB7XG4gICAgdmFyIHJlc3VsdHMgPSByZXNwb25zZS5yZXN1bHRzO1xuICAgIGlmIChyZXN1bHRzLmxlbmd0aCAhPT0gMSkge1xuICAgICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLklOVkFMSURfU0VTU0lPTl9UT0tFTiwgJ2ludmFsaWQgbGVnYWN5IHNlc3Npb24gdG9rZW4nKTtcbiAgICB9XG4gICAgY29uc3Qgb2JqID0gcmVzdWx0c1swXTtcbiAgICBvYmouY2xhc3NOYW1lID0gJ19Vc2VyJztcbiAgICBjb25zdCB1c2VyT2JqZWN0ID0gUGFyc2UuT2JqZWN0LmZyb21KU09OKG9iaik7XG4gICAgcmV0dXJuIG5ldyBBdXRoKHtcbiAgICAgIGNvbmZpZyxcbiAgICAgIGlzTWFzdGVyOiBmYWxzZSxcbiAgICAgIGluc3RhbGxhdGlvbklkLFxuICAgICAgdXNlcjogdXNlck9iamVjdCxcbiAgICB9KTtcbiAgfSk7XG59O1xuXG4vLyBSZXR1cm5zIGEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIGFuIGFycmF5IG9mIHJvbGUgbmFtZXNcbkF1dGgucHJvdG90eXBlLmdldFVzZXJSb2xlcyA9IGZ1bmN0aW9uICgpIHtcbiAgaWYgKHRoaXMuaXNNYXN0ZXIgfHwgIXRoaXMudXNlcikge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoW10pO1xuICB9XG4gIGlmICh0aGlzLmZldGNoZWRSb2xlcykge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy51c2VyUm9sZXMpO1xuICB9XG4gIGlmICh0aGlzLnJvbGVQcm9taXNlKSB7XG4gICAgcmV0dXJuIHRoaXMucm9sZVByb21pc2U7XG4gIH1cbiAgdGhpcy5yb2xlUHJvbWlzZSA9IHRoaXMuX2xvYWRSb2xlcygpO1xuICByZXR1cm4gdGhpcy5yb2xlUHJvbWlzZTtcbn07XG5cbkF1dGgucHJvdG90eXBlLmdldFJvbGVzRm9yVXNlciA9IGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgLy9TdGFjayBhbGwgUGFyc2UuUm9sZVxuICBjb25zdCByZXN1bHRzID0gW107XG4gIGlmICh0aGlzLmNvbmZpZykge1xuICAgIGNvbnN0IHJlc3RXaGVyZSA9IHtcbiAgICAgIHVzZXJzOiB7XG4gICAgICAgIF9fdHlwZTogJ1BvaW50ZXInLFxuICAgICAgICBjbGFzc05hbWU6ICdfVXNlcicsXG4gICAgICAgIG9iamVjdElkOiB0aGlzLnVzZXIuaWQsXG4gICAgICB9LFxuICAgIH07XG4gICAgYXdhaXQgbmV3IFJlc3RRdWVyeSh0aGlzLmNvbmZpZywgbWFzdGVyKHRoaXMuY29uZmlnKSwgJ19Sb2xlJywgcmVzdFdoZXJlLCB7fSkuZWFjaChyZXN1bHQgPT5cbiAgICAgIHJlc3VsdHMucHVzaChyZXN1bHQpXG4gICAgKTtcbiAgfSBlbHNlIHtcbiAgICBhd2FpdCBuZXcgUGFyc2UuUXVlcnkoUGFyc2UuUm9sZSlcbiAgICAgIC5lcXVhbFRvKCd1c2VycycsIHRoaXMudXNlcilcbiAgICAgIC5lYWNoKHJlc3VsdCA9PiByZXN1bHRzLnB1c2gocmVzdWx0LnRvSlNPTigpKSwgeyB1c2VNYXN0ZXJLZXk6IHRydWUgfSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdHM7XG59O1xuXG4vLyBJdGVyYXRlcyB0aHJvdWdoIHRoZSByb2xlIHRyZWUgYW5kIGNvbXBpbGVzIGEgdXNlcidzIHJvbGVzXG5BdXRoLnByb3RvdHlwZS5fbG9hZFJvbGVzID0gYXN5bmMgZnVuY3Rpb24gKCkge1xuICBpZiAodGhpcy5jYWNoZUNvbnRyb2xsZXIpIHtcbiAgICBjb25zdCBjYWNoZWRSb2xlcyA9IGF3YWl0IHRoaXMuY2FjaGVDb250cm9sbGVyLnJvbGUuZ2V0KHRoaXMudXNlci5pZCk7XG4gICAgaWYgKGNhY2hlZFJvbGVzICE9IG51bGwpIHtcbiAgICAgIHRoaXMuZmV0Y2hlZFJvbGVzID0gdHJ1ZTtcbiAgICAgIHRoaXMudXNlclJvbGVzID0gY2FjaGVkUm9sZXM7XG4gICAgICByZXR1cm4gY2FjaGVkUm9sZXM7XG4gICAgfVxuICB9XG5cbiAgLy8gRmlyc3QgZ2V0IHRoZSByb2xlIGlkcyB0aGlzIHVzZXIgaXMgZGlyZWN0bHkgYSBtZW1iZXIgb2ZcbiAgY29uc3QgcmVzdWx0cyA9IGF3YWl0IHRoaXMuZ2V0Um9sZXNGb3JVc2VyKCk7XG4gIGlmICghcmVzdWx0cy5sZW5ndGgpIHtcbiAgICB0aGlzLnVzZXJSb2xlcyA9IFtdO1xuICAgIHRoaXMuZmV0Y2hlZFJvbGVzID0gdHJ1ZTtcbiAgICB0aGlzLnJvbGVQcm9taXNlID0gbnVsbDtcblxuICAgIHRoaXMuY2FjaGVSb2xlcygpO1xuICAgIHJldHVybiB0aGlzLnVzZXJSb2xlcztcbiAgfVxuXG4gIGNvbnN0IHJvbGVzTWFwID0gcmVzdWx0cy5yZWR1Y2UoXG4gICAgKG0sIHIpID0+IHtcbiAgICAgIG0ubmFtZXMucHVzaChyLm5hbWUpO1xuICAgICAgbS5pZHMucHVzaChyLm9iamVjdElkKTtcbiAgICAgIHJldHVybiBtO1xuICAgIH0sXG4gICAgeyBpZHM6IFtdLCBuYW1lczogW10gfVxuICApO1xuXG4gIC8vIHJ1biB0aGUgcmVjdXJzaXZlIGZpbmRpbmdcbiAgY29uc3Qgcm9sZU5hbWVzID0gYXdhaXQgdGhpcy5fZ2V0QWxsUm9sZXNOYW1lc0ZvclJvbGVJZHMocm9sZXNNYXAuaWRzLCByb2xlc01hcC5uYW1lcyk7XG4gIHRoaXMudXNlclJvbGVzID0gcm9sZU5hbWVzLm1hcChyID0+IHtcbiAgICByZXR1cm4gJ3JvbGU6JyArIHI7XG4gIH0pO1xuICB0aGlzLmZldGNoZWRSb2xlcyA9IHRydWU7XG4gIHRoaXMucm9sZVByb21pc2UgPSBudWxsO1xuICB0aGlzLmNhY2hlUm9sZXMoKTtcbiAgcmV0dXJuIHRoaXMudXNlclJvbGVzO1xufTtcblxuQXV0aC5wcm90b3R5cGUuY2FjaGVSb2xlcyA9IGZ1bmN0aW9uICgpIHtcbiAgaWYgKCF0aGlzLmNhY2hlQ29udHJvbGxlcikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB0aGlzLmNhY2hlQ29udHJvbGxlci5yb2xlLnB1dCh0aGlzLnVzZXIuaWQsIEFycmF5KC4uLnRoaXMudXNlclJvbGVzKSk7XG4gIHJldHVybiB0cnVlO1xufTtcblxuQXV0aC5wcm90b3R5cGUuZ2V0Um9sZXNCeUlkcyA9IGFzeW5jIGZ1bmN0aW9uIChpbnMpIHtcbiAgY29uc3QgcmVzdWx0cyA9IFtdO1xuICAvLyBCdWlsZCBhbiBPUiBxdWVyeSBhY3Jvc3MgYWxsIHBhcmVudFJvbGVzXG4gIGlmICghdGhpcy5jb25maWcpIHtcbiAgICBhd2FpdCBuZXcgUGFyc2UuUXVlcnkoUGFyc2UuUm9sZSlcbiAgICAgIC5jb250YWluZWRJbihcbiAgICAgICAgJ3JvbGVzJyxcbiAgICAgICAgaW5zLm1hcChpZCA9PiB7XG4gICAgICAgICAgY29uc3Qgcm9sZSA9IG5ldyBQYXJzZS5PYmplY3QoUGFyc2UuUm9sZSk7XG4gICAgICAgICAgcm9sZS5pZCA9IGlkO1xuICAgICAgICAgIHJldHVybiByb2xlO1xuICAgICAgICB9KVxuICAgICAgKVxuICAgICAgLmVhY2gocmVzdWx0ID0+IHJlc3VsdHMucHVzaChyZXN1bHQudG9KU09OKCkpLCB7IHVzZU1hc3RlcktleTogdHJ1ZSB9KTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCByb2xlcyA9IGlucy5tYXAoaWQgPT4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgX190eXBlOiAnUG9pbnRlcicsXG4gICAgICAgIGNsYXNzTmFtZTogJ19Sb2xlJyxcbiAgICAgICAgb2JqZWN0SWQ6IGlkLFxuICAgICAgfTtcbiAgICB9KTtcbiAgICBjb25zdCByZXN0V2hlcmUgPSB7IHJvbGVzOiB7ICRpbjogcm9sZXMgfSB9O1xuICAgIGF3YWl0IG5ldyBSZXN0UXVlcnkodGhpcy5jb25maWcsIG1hc3Rlcih0aGlzLmNvbmZpZyksICdfUm9sZScsIHJlc3RXaGVyZSwge30pLmVhY2gocmVzdWx0ID0+XG4gICAgICByZXN1bHRzLnB1c2gocmVzdWx0KVxuICAgICk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdHM7XG59O1xuXG4vLyBHaXZlbiBhIGxpc3Qgb2Ygcm9sZUlkcywgZmluZCBhbGwgdGhlIHBhcmVudCByb2xlcywgcmV0dXJucyBhIHByb21pc2Ugd2l0aCBhbGwgbmFtZXNcbkF1dGgucHJvdG90eXBlLl9nZXRBbGxSb2xlc05hbWVzRm9yUm9sZUlkcyA9IGZ1bmN0aW9uIChyb2xlSURzLCBuYW1lcyA9IFtdLCBxdWVyaWVkUm9sZXMgPSB7fSkge1xuICBjb25zdCBpbnMgPSByb2xlSURzLmZpbHRlcihyb2xlSUQgPT4ge1xuICAgIGNvbnN0IHdhc1F1ZXJpZWQgPSBxdWVyaWVkUm9sZXNbcm9sZUlEXSAhPT0gdHJ1ZTtcbiAgICBxdWVyaWVkUm9sZXNbcm9sZUlEXSA9IHRydWU7XG4gICAgcmV0dXJuIHdhc1F1ZXJpZWQ7XG4gIH0pO1xuXG4gIC8vIGFsbCByb2xlcyBhcmUgYWNjb3VudGVkIGZvciwgcmV0dXJuIHRoZSBuYW1lc1xuICBpZiAoaW5zLmxlbmd0aCA9PSAwKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShbLi4ubmV3IFNldChuYW1lcyldKTtcbiAgfVxuXG4gIHJldHVybiB0aGlzLmdldFJvbGVzQnlJZHMoaW5zKVxuICAgIC50aGVuKHJlc3VsdHMgPT4ge1xuICAgICAgLy8gTm90aGluZyBmb3VuZFxuICAgICAgaWYgKCFyZXN1bHRzLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG5hbWVzKTtcbiAgICAgIH1cbiAgICAgIC8vIE1hcCB0aGUgcmVzdWx0cyB3aXRoIGFsbCBJZHMgYW5kIG5hbWVzXG4gICAgICBjb25zdCByZXN1bHRNYXAgPSByZXN1bHRzLnJlZHVjZShcbiAgICAgICAgKG1lbW8sIHJvbGUpID0+IHtcbiAgICAgICAgICBtZW1vLm5hbWVzLnB1c2gocm9sZS5uYW1lKTtcbiAgICAgICAgICBtZW1vLmlkcy5wdXNoKHJvbGUub2JqZWN0SWQpO1xuICAgICAgICAgIHJldHVybiBtZW1vO1xuICAgICAgICB9LFxuICAgICAgICB7IGlkczogW10sIG5hbWVzOiBbXSB9XG4gICAgICApO1xuICAgICAgLy8gc3RvcmUgdGhlIG5ldyBmb3VuZCBuYW1lc1xuICAgICAgbmFtZXMgPSBuYW1lcy5jb25jYXQocmVzdWx0TWFwLm5hbWVzKTtcbiAgICAgIC8vIGZpbmQgdGhlIG5leHQgb25lcywgY2lyY3VsYXIgcm9sZXMgd2lsbCBiZSBjdXRcbiAgICAgIHJldHVybiB0aGlzLl9nZXRBbGxSb2xlc05hbWVzRm9yUm9sZUlkcyhyZXN1bHRNYXAuaWRzLCBuYW1lcywgcXVlcmllZFJvbGVzKTtcbiAgICB9KVxuICAgIC50aGVuKG5hbWVzID0+IHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoWy4uLm5ldyBTZXQobmFtZXMpXSk7XG4gICAgfSk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgQXV0aCxcbiAgbWFzdGVyLFxuICBub2JvZHksXG4gIHJlYWRPbmx5LFxuICBnZXRBdXRoRm9yU2Vzc2lvblRva2VuLFxuICBnZXRBdXRoRm9yTGVnYWN5U2Vzc2lvblRva2VuLFxufTtcbiJdfQ==
|
|
346
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9BdXRoLmpzIl0sIm5hbWVzIjpbIlJlc3RRdWVyeSIsInJlcXVpcmUiLCJQYXJzZSIsIkF1dGgiLCJjb25maWciLCJjYWNoZUNvbnRyb2xsZXIiLCJ1bmRlZmluZWQiLCJpc01hc3RlciIsImlzUmVhZE9ubHkiLCJ1c2VyIiwiaW5zdGFsbGF0aW9uSWQiLCJ1c2VyUm9sZXMiLCJmZXRjaGVkUm9sZXMiLCJyb2xlUHJvbWlzZSIsInByb3RvdHlwZSIsImlzVW5hdXRoZW50aWNhdGVkIiwibWFzdGVyIiwicmVhZE9ubHkiLCJub2JvZHkiLCJnZXRBdXRoRm9yU2Vzc2lvblRva2VuIiwic2Vzc2lvblRva2VuIiwidXNlckpTT04iLCJnZXQiLCJjYWNoZWRVc2VyIiwiT2JqZWN0IiwiZnJvbUpTT04iLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlc3VsdHMiLCJyZXN0T3B0aW9ucyIsImxpbWl0IiwiaW5jbHVkZSIsInF1ZXJ5IiwiZXhlY3V0ZSIsIlF1ZXJ5IiwiU2Vzc2lvbiIsImVxdWFsVG8iLCJmaW5kIiwidXNlTWFzdGVyS2V5IiwibWFwIiwib2JqIiwidG9KU09OIiwibGVuZ3RoIiwiRXJyb3IiLCJJTlZBTElEX1NFU1NJT05fVE9LRU4iLCJub3ciLCJEYXRlIiwiZXhwaXJlc0F0IiwiaXNvIiwicGFzc3dvcmQiLCJwdXQiLCJ1c2VyT2JqZWN0IiwiZ2V0QXV0aEZvckxlZ2FjeVNlc3Npb25Ub2tlbiIsInRoZW4iLCJyZXNwb25zZSIsImNsYXNzTmFtZSIsImdldFVzZXJSb2xlcyIsIl9sb2FkUm9sZXMiLCJnZXRSb2xlc0ZvclVzZXIiLCJyZXN0V2hlcmUiLCJ1c2VycyIsIl9fdHlwZSIsIm9iamVjdElkIiwiaWQiLCJlYWNoIiwicmVzdWx0IiwicHVzaCIsIlJvbGUiLCJjYWNoZWRSb2xlcyIsInJvbGUiLCJjYWNoZVJvbGVzIiwicm9sZXNNYXAiLCJyZWR1Y2UiLCJtIiwiciIsIm5hbWVzIiwibmFtZSIsImlkcyIsInJvbGVOYW1lcyIsIl9nZXRBbGxSb2xlc05hbWVzRm9yUm9sZUlkcyIsIkFycmF5IiwiY2xlYXJSb2xlQ2FjaGUiLCJkZWwiLCJnZXRSb2xlc0J5SWRzIiwiaW5zIiwiY29udGFpbmVkSW4iLCJyb2xlcyIsIiRpbiIsInJvbGVJRHMiLCJxdWVyaWVkUm9sZXMiLCJmaWx0ZXIiLCJyb2xlSUQiLCJ3YXNRdWVyaWVkIiwiU2V0IiwicmVzdWx0TWFwIiwibWVtbyIsImNvbmNhdCIsIm1vZHVsZSIsImV4cG9ydHMiXSwibWFwcGluZ3MiOiI7O0FBQUEsTUFBTUEsU0FBUyxHQUFHQyxPQUFPLENBQUMsYUFBRCxDQUF6Qjs7QUFDQSxNQUFNQyxLQUFLLEdBQUdELE9BQU8sQ0FBQyxZQUFELENBQXJCLEMsQ0FFQTtBQUNBO0FBQ0E7OztBQUNBLFNBQVNFLElBQVQsQ0FBYztBQUNaQyxFQUFBQSxNQURZO0FBRVpDLEVBQUFBLGVBQWUsR0FBR0MsU0FGTjtBQUdaQyxFQUFBQSxRQUFRLEdBQUcsS0FIQztBQUlaQyxFQUFBQSxVQUFVLEdBQUcsS0FKRDtBQUtaQyxFQUFBQSxJQUxZO0FBTVpDLEVBQUFBO0FBTlksQ0FBZCxFQU9HO0FBQ0QsT0FBS04sTUFBTCxHQUFjQSxNQUFkO0FBQ0EsT0FBS0MsZUFBTCxHQUF1QkEsZUFBZSxJQUFLRCxNQUFNLElBQUlBLE1BQU0sQ0FBQ0MsZUFBNUQ7QUFDQSxPQUFLSyxjQUFMLEdBQXNCQSxjQUF0QjtBQUNBLE9BQUtILFFBQUwsR0FBZ0JBLFFBQWhCO0FBQ0EsT0FBS0UsSUFBTCxHQUFZQSxJQUFaO0FBQ0EsT0FBS0QsVUFBTCxHQUFrQkEsVUFBbEIsQ0FOQyxDQVFEO0FBQ0E7O0FBQ0EsT0FBS0csU0FBTCxHQUFpQixFQUFqQjtBQUNBLE9BQUtDLFlBQUwsR0FBb0IsS0FBcEI7QUFDQSxPQUFLQyxXQUFMLEdBQW1CLElBQW5CO0FBQ0QsQyxDQUVEO0FBQ0E7OztBQUNBVixJQUFJLENBQUNXLFNBQUwsQ0FBZUMsaUJBQWYsR0FBbUMsWUFBWTtBQUM3QyxNQUFJLEtBQUtSLFFBQVQsRUFBbUI7QUFD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VCxDQUFjRyxJQUFJLENBQUNQLFFBQW5CO0FBQ0EsYUFBT2lDLElBQVA7QUFDRCxLQUxlLEVBTWhCO0FBQUVsQixNQUFBQSxHQUFHLEVBQUUsRUFBUDtBQUFXRixNQUFBQSxLQUFLLEVBQUU7QUFBbEIsS0FOZ0IsQ0FBbEIsQ0FOZSxDQWNmOztBQUNBQSxJQUFBQSxLQUFLLEdBQUdBLEtBQUssQ0FBQ3FCLE1BQU4sQ0FBYUYsU0FBUyxDQUFDbkIsS0FBdkIsQ0FBUixDQWZlLENBZ0JmOztBQUNBLFdBQU8sS0FBS0ksMkJBQUwsQ0FBaUNlLFNBQVMsQ0FBQ2pCLEdBQTNDLEVBQWdERixLQUFoRCxFQUF1RGMsWUFBdkQsQ0FBUDtBQUNELEdBbkJJLEVBb0JKcEMsSUFwQkksQ0FvQkNzQixLQUFLLElBQUk7QUFDYixXQUFPakQsT0FBTyxDQUFDQyxPQUFSLENBQWdCLENBQUMsR0FBRyxJQUFJa0UsR0FBSixDQUFRbEIsS0FBUixDQUFKLENBQWhCLENBQVA7QUFDRCxHQXRCSSxDQUFQO0FBdUJELENBbkNEOztBQXFDQXNCLE1BQU0sQ0FBQ0MsT0FBUCxHQUFpQjtBQUNmL0YsRUFBQUEsSUFEZTtBQUVmYSxFQUFBQSxNQUZlO0FBR2ZFLEVBQUFBLE1BSGU7QUFJZkQsRUFBQUEsUUFKZTtBQUtmRSxFQUFBQSxzQkFMZTtBQU1maUMsRUFBQUE7QUFOZSxDQUFqQiIsInNvdXJjZXNDb250ZW50IjpbImNvbnN0IFJlc3RRdWVyeSA9IHJlcXVpcmUoJy4vUmVzdFF1ZXJ5Jyk7XG5jb25zdCBQYXJzZSA9IHJlcXVpcmUoJ3BhcnNlL25vZGUnKTtcblxuLy8gQW4gQXV0aCBvYmplY3QgdGVsbHMgeW91IHdobyBpcyByZXF1ZXN0aW5nIHNvbWV0aGluZyBhbmQgd2hldGhlclxuLy8gdGhlIG1hc3RlciBrZXkgd2FzIHVzZWQuXG4vLyB1c2VyT2JqZWN0IGlzIGEgUGFyc2UuVXNlciBhbmQgY2FuIGJlIG51bGwgaWYgdGhlcmUncyBubyB1c2VyLlxuZnVuY3Rpb24gQXV0aCh7XG4gIGNvbmZpZyxcbiAgY2FjaGVDb250cm9sbGVyID0gdW5kZWZpbmVkLFxuICBpc01hc3RlciA9IGZhbHNlLFxuICBpc1JlYWRPbmx5ID0gZmFsc2UsXG4gIHVzZXIsXG4gIGluc3RhbGxhdGlvbklkLFxufSkge1xuICB0aGlzLmNvbmZpZyA9IGNvbmZpZztcbiAgdGhpcy5jYWNoZUNvbnRyb2xsZXIgPSBjYWNoZUNvbnRyb2xsZXIgfHwgKGNvbmZpZyAmJiBjb25maWcuY2FjaGVDb250cm9sbGVyKTtcbiAgdGhpcy5pbnN0YWxsYXRpb25JZCA9IGluc3RhbGxhdGlvbklkO1xuICB0aGlzLmlzTWFzdGVyID0gaXNNYXN0ZXI7XG4gIHRoaXMudXNlciA9IHVzZXI7XG4gIHRoaXMuaXNSZWFkT25seSA9IGlzUmVhZE9ubHk7XG5cbiAgLy8gQXNzdW1pbmcgYSB1c2VycyByb2xlcyB3b24ndCBjaGFuZ2UgZHVyaW5nIGEgc2luZ2xlIHJlcXVlc3QsIHdlJ2xsXG4gIC8vIG9ubHkgbG9hZCB0aGVtIG9uY2UuXG4gIHRoaXMudXNlclJvbGVzID0gW107XG4gIHRoaXMuZmV0Y2hlZFJvbGVzID0gZmFsc2U7XG4gIHRoaXMucm9sZVByb21pc2UgPSBudWxsO1xufVxuXG4vLyBXaGV0aGVyIHRoaXMgYXV0aCBjb3VsZCBwb3NzaWJseSBtb2RpZnkgdGhlIGdpdmVuIHVzZXIgaWQuXG4vLyBJdCBzdGlsbCBjb3VsZCBiZSBmb3JiaWRkZW4gdmlhIEFDTHMgZXZlbiBpZiB0aGlzIHJldHVybnMgdHJ1ZS5cbkF1dGgucHJvdG90eXBlLmlzVW5hdXRoZW50aWNhdGVkID0gZnVuY3Rpb24gKCkge1xuICBpZiAodGhpcy5pc01hc3Rlcikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAodGhpcy51c2VyKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiB0cnVlO1xufTtcblxuLy8gQSBoZWxwZXIgdG8gZ2V0IGEgbWFzdGVyLWxldmVsIEF1dGggb2JqZWN0XG5mdW5jdGlvbiBtYXN0ZXIoY29uZmlnKSB7XG4gIHJldHVybiBuZXcgQXV0aCh7IGNvbmZpZywgaXNNYXN0ZXI6IHRydWUgfSk7XG59XG5cbi8vIEEgaGVscGVyIHRvIGdldCBhIG1hc3Rlci1sZXZlbCBBdXRoIG9iamVjdFxuZnVuY3Rpb24gcmVhZE9ubHkoY29uZmlnKSB7XG4gIHJldHVybiBuZXcgQXV0aCh7IGNvbmZpZywgaXNNYXN0ZXI6IHRydWUsIGlzUmVhZE9ubHk6IHRydWUgfSk7XG59XG5cbi8vIEEgaGVscGVyIHRvIGdldCBhIG5vYm9keS1sZXZlbCBBdXRoIG9iamVjdFxuZnVuY3Rpb24gbm9ib2R5KGNvbmZpZykge1xuICByZXR1cm4gbmV3IEF1dGgoeyBjb25maWcsIGlzTWFzdGVyOiBmYWxzZSB9KTtcbn1cblxuLy8gUmV0dXJucyBhIHByb21pc2UgdGhhdCByZXNvbHZlcyB0byBhbiBBdXRoIG9iamVjdFxuY29uc3QgZ2V0QXV0aEZvclNlc3Npb25Ub2tlbiA9IGFzeW5jIGZ1bmN0aW9uICh7XG4gIGNvbmZpZyxcbiAgY2FjaGVDb250cm9sbGVyLFxuICBzZXNzaW9uVG9rZW4sXG4gIGluc3RhbGxhdGlvbklkLFxufSkge1xuICBjYWNoZUNvbnRyb2xsZXIgPSBjYWNoZUNvbnRyb2xsZXIgfHwgKGNvbmZpZyAmJiBjb25maWcuY2FjaGVDb250cm9sbGVyKTtcbiAgaWYgKGNhY2hlQ29udHJvbGxlcikge1xuICAgIGNvbnN0IHVzZXJKU09OID0gYXdhaXQgY2FjaGVDb250cm9sbGVyLnVzZXIuZ2V0KHNlc3Npb25Ub2tlbik7XG4gICAgaWYgKHVzZXJKU09OKSB7XG4gICAgICBjb25zdCBjYWNoZWRVc2VyID0gUGFyc2UuT2JqZWN0LmZyb21KU09OKHVzZXJKU09OKTtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoXG4gICAgICAgIG5ldyBBdXRoKHtcbiAgICAgICAgICBjb25maWcsXG4gICAgICAgICAgY2FjaGVDb250cm9sbGVyLFxuICAgICAgICAgIGlzTWFzdGVyOiBmYWxzZSxcbiAgICAgICAgICBpbnN0YWxsYXRpb25JZCxcbiAgICAgICAgICB1c2VyOiBjYWNoZWRVc2VyLFxuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBsZXQgcmVzdWx0cztcbiAgaWYgKGNvbmZpZykge1xuICAgIGNvbnN0IHJlc3RPcHRpb25zID0ge1xuICAgICAgbGltaXQ6IDEsXG4gICAgICBpbmNsdWRlOiAndXNlcicsXG4gICAgfTtcblxuICAgIGNvbnN0IHF1ZXJ5ID0gbmV3IFJlc3RRdWVyeShjb25maWcsIG1hc3Rlcihjb25maWcpLCAnX1Nlc3Npb24nLCB7IHNlc3Npb25Ub2tlbiB9LCByZXN0T3B0aW9ucyk7XG4gICAgcmVzdWx0cyA9IChhd2FpdCBxdWVyeS5leGVjdXRlKCkpLnJlc3VsdHM7XG4gIH0gZWxzZSB7XG4gICAgcmVzdWx0cyA9IChcbiAgICAgIGF3YWl0IG5ldyBQYXJzZS5RdWVyeShQYXJzZS5TZXNzaW9uKVxuICAgICAgICAubGltaXQoMSlcbiAgICAgICAgLmluY2x1ZGUoJ3VzZXInKVxuICAgICAgICAuZXF1YWxUbygnc2Vzc2lvblRva2VuJywgc2Vzc2lvblRva2VuKVxuICAgICAgICAuZmluZCh7IHVzZU1hc3RlcktleTogdHJ1ZSB9KVxuICAgICkubWFwKG9iaiA9PiBvYmoudG9KU09OKCkpO1xuICB9XG5cbiAgaWYgKHJlc3VsdHMubGVuZ3RoICE9PSAxIHx8ICFyZXN1bHRzWzBdWyd1c2VyJ10pIHtcbiAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuSU5WQUxJRF9TRVNTSU9OX1RPS0VOLCAnSW52YWxpZCBzZXNzaW9uIHRva2VuJyk7XG4gIH1cbiAgY29uc3Qgbm93ID0gbmV3IERhdGUoKSxcbiAgICBleHBpcmVzQXQgPSByZXN1bHRzWzBdLmV4cGlyZXNBdCA/IG5ldyBEYXRlKHJlc3VsdHNbMF0uZXhwaXJlc0F0LmlzbykgOiB1bmRlZmluZWQ7XG4gIGlmIChleHBpcmVzQXQgPCBub3cpIHtcbiAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuSU5WQUxJRF9TRVNTSU9OX1RPS0VOLCAnU2Vzc2lvbiB0b2tlbiBpcyBleHBpcmVkLicpO1xuICB9XG4gIGNvbnN0IG9iaiA9IHJlc3VsdHNbMF1bJ3VzZXInXTtcbiAgZGVsZXRlIG9iai5wYXNzd29yZDtcbiAgb2JqWydjbGFzc05hbWUnXSA9ICdfVXNlcic7XG4gIG9ialsnc2Vzc2lvblRva2VuJ10gPSBzZXNzaW9uVG9rZW47XG4gIGlmIChjYWNoZUNvbnRyb2xsZXIpIHtcbiAgICBjYWNoZUNvbnRyb2xsZXIudXNlci5wdXQoc2Vzc2lvblRva2VuLCBvYmopO1xuICB9XG4gIGNvbnN0IHVzZXJPYmplY3QgPSBQYXJzZS5PYmplY3QuZnJvbUpTT04ob2JqKTtcbiAgcmV0dXJuIG5ldyBBdXRoKHtcbiAgICBjb25maWcsXG4gICAgY2FjaGVDb250cm9sbGVyLFxuICAgIGlzTWFzdGVyOiBmYWxzZSxcbiAgICBpbnN0YWxsYXRpb25JZCxcbiAgICB1c2VyOiB1c2VyT2JqZWN0LFxuICB9KTtcbn07XG5cbnZhciBnZXRBdXRoRm9yTGVnYWN5U2Vzc2lvblRva2VuID0gZnVuY3Rpb24gKHsgY29uZmlnLCBzZXNzaW9uVG9rZW4sIGluc3RhbGxhdGlvbklkIH0pIHtcbiAgdmFyIHJlc3RPcHRpb25zID0ge1xuICAgIGxpbWl0OiAxLFxuICB9O1xuICB2YXIgcXVlcnkgPSBuZXcgUmVzdFF1ZXJ5KGNvbmZpZywgbWFzdGVyKGNvbmZpZyksICdfVXNlcicsIHsgc2Vzc2lvblRva2VuIH0sIHJlc3RPcHRpb25zKTtcbiAgcmV0dXJuIHF1ZXJ5LmV4ZWN1dGUoKS50aGVuKHJlc3BvbnNlID0+IHtcbiAgICB2YXIgcmVzdWx0cyA9IHJlc3BvbnNlLnJlc3VsdHM7XG4gICAgaWYgKHJlc3VsdHMubGVuZ3RoICE9PSAxKSB7XG4gICAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuSU5WQUxJRF9TRVNTSU9OX1RPS0VOLCAnaW52YWxpZCBsZWdhY3kgc2Vzc2lvbiB0b2tlbicpO1xuICAgIH1cbiAgICBjb25zdCBvYmogPSByZXN1bHRzWzBdO1xuICAgIG9iai5jbGFzc05hbWUgPSAnX1VzZXInO1xuICAgIGNvbnN0IHVzZXJPYmplY3QgPSBQYXJzZS5PYmplY3QuZnJvbUpTT04ob2JqKTtcbiAgICByZXR1cm4gbmV3IEF1dGgoe1xuICAgICAgY29uZmlnLFxuICAgICAgaXNNYXN0ZXI6IGZhbHNlLFxuICAgICAgaW5zdGFsbGF0aW9uSWQsXG4gICAgICB1c2VyOiB1c2VyT2JqZWN0LFxuICAgIH0pO1xuICB9KTtcbn07XG5cbi8vIFJldHVybnMgYSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gYW4gYXJyYXkgb2Ygcm9sZSBuYW1lc1xuQXV0aC5wcm90b3R5cGUuZ2V0VXNlclJvbGVzID0gZnVuY3Rpb24gKCkge1xuICBpZiAodGhpcy5pc01hc3RlciB8fCAhdGhpcy51c2VyKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShbXSk7XG4gIH1cbiAgaWYgKHRoaXMuZmV0Y2hlZFJvbGVzKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLnVzZXJSb2xlcyk7XG4gIH1cbiAgaWYgKHRoaXMucm9sZVByb21pc2UpIHtcbiAgICByZXR1cm4gdGhpcy5yb2xlUHJvbWlzZTtcbiAgfVxuICB0aGlzLnJvbGVQcm9taXNlID0gdGhpcy5fbG9hZFJvbGVzKCk7XG4gIHJldHVybiB0aGlzLnJvbGVQcm9taXNlO1xufTtcblxuQXV0aC5wcm90b3R5cGUuZ2V0Um9sZXNGb3JVc2VyID0gYXN5bmMgZnVuY3Rpb24gKCkge1xuICAvL1N0YWNrIGFsbCBQYXJzZS5Sb2xlXG4gIGNvbnN0IHJlc3VsdHMgPSBbXTtcbiAgaWYgKHRoaXMuY29uZmlnKSB7XG4gICAgY29uc3QgcmVzdFdoZXJlID0ge1xuICAgICAgdXNlcnM6IHtcbiAgICAgICAgX190eXBlOiAnUG9pbnRlcicsXG4gICAgICAgIGNsYXNzTmFtZTogJ19Vc2VyJyxcbiAgICAgICAgb2JqZWN0SWQ6IHRoaXMudXNlci5pZCxcbiAgICAgIH0sXG4gICAgfTtcbiAgICBhd2FpdCBuZXcgUmVzdFF1ZXJ5KHRoaXMuY29uZmlnLCBtYXN0ZXIodGhpcy5jb25maWcpLCAnX1JvbGUnLCByZXN0V2hlcmUsIHt9KS5lYWNoKHJlc3VsdCA9PlxuICAgICAgcmVzdWx0cy5wdXNoKHJlc3VsdClcbiAgICApO1xuICB9IGVsc2Uge1xuICAgIGF3YWl0IG5ldyBQYXJzZS5RdWVyeShQYXJzZS5Sb2xlKVxuICAgICAgLmVxdWFsVG8oJ3VzZXJzJywgdGhpcy51c2VyKVxuICAgICAgLmVhY2gocmVzdWx0ID0+IHJlc3VsdHMucHVzaChyZXN1bHQudG9KU09OKCkpLCB7IHVzZU1hc3RlcktleTogdHJ1ZSB9KTtcbiAgfVxuICByZXR1cm4gcmVzdWx0cztcbn07XG5cbi8vIEl0ZXJhdGVzIHRocm91Z2ggdGhlIHJvbGUgdHJlZSBhbmQgY29tcGlsZXMgYSB1c2VyJ3Mgcm9sZXNcbkF1dGgucHJvdG90eXBlLl9sb2FkUm9sZXMgPSBhc3luYyBmdW5jdGlvbiAoKSB7XG4gIGlmICh0aGlzLmNhY2hlQ29udHJvbGxlcikge1xuICAgIGNvbnN0IGNhY2hlZFJvbGVzID0gYXdhaXQgdGhpcy5jYWNoZUNvbnRyb2xsZXIucm9sZS5nZXQodGhpcy51c2VyLmlkKTtcbiAgICBpZiAoY2FjaGVkUm9sZXMgIT0gbnVsbCkge1xuICAgICAgdGhpcy5mZXRjaGVkUm9sZXMgPSB0cnVlO1xuICAgICAgdGhpcy51c2VyUm9sZXMgPSBjYWNoZWRSb2xlcztcbiAgICAgIHJldHVybiBjYWNoZWRSb2xlcztcbiAgICB9XG4gIH1cblxuICAvLyBGaXJzdCBnZXQgdGhlIHJvbGUgaWRzIHRoaXMgdXNlciBpcyBkaXJlY3RseSBhIG1lbWJlciBvZlxuICBjb25zdCByZXN1bHRzID0gYXdhaXQgdGhpcy5nZXRSb2xlc0ZvclVzZXIoKTtcbiAgaWYgKCFyZXN1bHRzLmxlbmd0aCkge1xuICAgIHRoaXMudXNlclJvbGVzID0gW107XG4gICAgdGhpcy5mZXRjaGVkUm9sZXMgPSB0cnVlO1xuICAgIHRoaXMucm9sZVByb21pc2UgPSBudWxsO1xuXG4gICAgdGhpcy5jYWNoZVJvbGVzKCk7XG4gICAgcmV0dXJuIHRoaXMudXNlclJvbGVzO1xuICB9XG5cbiAgY29uc3Qgcm9sZXNNYXAgPSByZXN1bHRzLnJlZHVjZShcbiAgICAobSwgcikgPT4ge1xuICAgICAgbS5uYW1lcy5wdXNoKHIubmFtZSk7XG4gICAgICBtLmlkcy5wdXNoKHIub2JqZWN0SWQpO1xuICAgICAgcmV0dXJuIG07XG4gICAgfSxcbiAgICB7IGlkczogW10sIG5hbWVzOiBbXSB9XG4gICk7XG5cbiAgLy8gcnVuIHRoZSByZWN1cnNpdmUgZmluZGluZ1xuICBjb25zdCByb2xlTmFtZXMgPSBhd2FpdCB0aGlzLl9nZXRBbGxSb2xlc05hbWVzRm9yUm9sZUlkcyhyb2xlc01hcC5pZHMsIHJvbGVzTWFwLm5hbWVzKTtcbiAgdGhpcy51c2VyUm9sZXMgPSByb2xlTmFtZXMubWFwKHIgPT4ge1xuICAgIHJldHVybiAncm9sZTonICsgcjtcbiAgfSk7XG4gIHRoaXMuZmV0Y2hlZFJvbGVzID0gdHJ1ZTtcbiAgdGhpcy5yb2xlUHJvbWlzZSA9IG51bGw7XG4gIHRoaXMuY2FjaGVSb2xlcygpO1xuICByZXR1cm4gdGhpcy51c2VyUm9sZXM7XG59O1xuXG5BdXRoLnByb3RvdHlwZS5jYWNoZVJvbGVzID0gZnVuY3Rpb24gKCkge1xuICBpZiAoIXRoaXMuY2FjaGVDb250cm9sbGVyKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHRoaXMuY2FjaGVDb250cm9sbGVyLnJvbGUucHV0KHRoaXMudXNlci5pZCwgQXJyYXkoLi4udGhpcy51c2VyUm9sZXMpKTtcbiAgcmV0dXJuIHRydWU7XG59O1xuXG5BdXRoLnByb3RvdHlwZS5jbGVhclJvbGVDYWNoZSA9IGZ1bmN0aW9uIChzZXNzaW9uVG9rZW4pIHtcbiAgaWYgKCF0aGlzLmNhY2hlQ29udHJvbGxlcikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB0aGlzLmNhY2hlQ29udHJvbGxlci5yb2xlLmRlbCh0aGlzLnVzZXIuaWQpO1xuICB0aGlzLmNhY2hlQ29udHJvbGxlci51c2VyLmRlbChzZXNzaW9uVG9rZW4pO1xuICByZXR1cm4gdHJ1ZTtcbn07XG5cbkF1dGgucHJvdG90eXBlLmdldFJvbGVzQnlJZHMgPSBhc3luYyBmdW5jdGlvbiAoaW5zKSB7XG4gIGNvbnN0IHJlc3VsdHMgPSBbXTtcbiAgLy8gQnVpbGQgYW4gT1IgcXVlcnkgYWNyb3NzIGFsbCBwYXJlbnRSb2xlc1xuICBpZiAoIXRoaXMuY29uZmlnKSB7XG4gICAgYXdhaXQgbmV3IFBhcnNlLlF1ZXJ5KFBhcnNlLlJvbGUpXG4gICAgICAuY29udGFpbmVkSW4oXG4gICAgICAgICdyb2xlcycsXG4gICAgICAgIGlucy5tYXAoaWQgPT4ge1xuICAgICAgICAgIGNvbnN0IHJvbGUgPSBuZXcgUGFyc2UuT2JqZWN0KFBhcnNlLlJvbGUpO1xuICAgICAgICAgIHJvbGUuaWQgPSBpZDtcbiAgICAgICAgICByZXR1cm4gcm9sZTtcbiAgICAgICAgfSlcbiAgICAgIClcbiAgICAgIC5lYWNoKHJlc3VsdCA9PiByZXN1bHRzLnB1c2gocmVzdWx0LnRvSlNPTigpKSwgeyB1c2VNYXN0ZXJLZXk6IHRydWUgfSk7XG4gIH0gZWxzZSB7XG4gICAgY29uc3Qgcm9sZXMgPSBpbnMubWFwKGlkID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIF9fdHlwZTogJ1BvaW50ZXInLFxuICAgICAgICBjbGFzc05hbWU6ICdfUm9sZScsXG4gICAgICAgIG9iamVjdElkOiBpZCxcbiAgICAgIH07XG4gICAgfSk7XG4gICAgY29uc3QgcmVzdFdoZXJlID0geyByb2xlczogeyAkaW46IHJvbGVzIH0gfTtcbiAgICBhd2FpdCBuZXcgUmVzdFF1ZXJ5KHRoaXMuY29uZmlnLCBtYXN0ZXIodGhpcy5jb25maWcpLCAnX1JvbGUnLCByZXN0V2hlcmUsIHt9KS5lYWNoKHJlc3VsdCA9PlxuICAgICAgcmVzdWx0cy5wdXNoKHJlc3VsdClcbiAgICApO1xuICB9XG4gIHJldHVybiByZXN1bHRzO1xufTtcblxuLy8gR2l2ZW4gYSBsaXN0IG9mIHJvbGVJZHMsIGZpbmQgYWxsIHRoZSBwYXJlbnQgcm9sZXMsIHJldHVybnMgYSBwcm9taXNlIHdpdGggYWxsIG5hbWVzXG5BdXRoLnByb3RvdHlwZS5fZ2V0QWxsUm9sZXNOYW1lc0ZvclJvbGVJZHMgPSBmdW5jdGlvbiAocm9sZUlEcywgbmFtZXMgPSBbXSwgcXVlcmllZFJvbGVzID0ge30pIHtcbiAgY29uc3QgaW5zID0gcm9sZUlEcy5maWx0ZXIocm9sZUlEID0+IHtcbiAgICBjb25zdCB3YXNRdWVyaWVkID0gcXVlcmllZFJvbGVzW3JvbGVJRF0gIT09IHRydWU7XG4gICAgcXVlcmllZFJvbGVzW3JvbGVJRF0gPSB0cnVlO1xuICAgIHJldHVybiB3YXNRdWVyaWVkO1xuICB9KTtcblxuICAvLyBhbGwgcm9sZXMgYXJlIGFjY291bnRlZCBmb3IsIHJldHVybiB0aGUgbmFtZXNcbiAgaWYgKGlucy5sZW5ndGggPT0gMCkge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoWy4uLm5ldyBTZXQobmFtZXMpXSk7XG4gIH1cblxuICByZXR1cm4gdGhpcy5nZXRSb2xlc0J5SWRzKGlucylcbiAgICAudGhlbihyZXN1bHRzID0+IHtcbiAgICAgIC8vIE5vdGhpbmcgZm91bmRcbiAgICAgIGlmICghcmVzdWx0cy5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShuYW1lcyk7XG4gICAgICB9XG4gICAgICAvLyBNYXAgdGhlIHJlc3VsdHMgd2l0aCBhbGwgSWRzIGFuZCBuYW1lc1xuICAgICAgY29uc3QgcmVzdWx0TWFwID0gcmVzdWx0cy5yZWR1Y2UoXG4gICAgICAgIChtZW1vLCByb2xlKSA9PiB7XG4gICAgICAgICAgbWVtby5uYW1lcy5wdXNoKHJvbGUubmFtZSk7XG4gICAgICAgICAgbWVtby5pZHMucHVzaChyb2xlLm9iamVjdElkKTtcbiAgICAgICAgICByZXR1cm4gbWVtbztcbiAgICAgICAgfSxcbiAgICAgICAgeyBpZHM6IFtdLCBuYW1lczogW10gfVxuICAgICAgKTtcbiAgICAgIC8vIHN0b3JlIHRoZSBuZXcgZm91bmQgbmFtZXNcbiAgICAgIG5hbWVzID0gbmFtZXMuY29uY2F0KHJlc3VsdE1hcC5uYW1lcyk7XG4gICAgICAvLyBmaW5kIHRoZSBuZXh0IG9uZXMsIGNpcmN1bGFyIHJvbGVzIHdpbGwgYmUgY3V0XG4gICAgICByZXR1cm4gdGhpcy5fZ2V0QWxsUm9sZXNOYW1lc0ZvclJvbGVJZHMocmVzdWx0TWFwLmlkcywgbmFtZXMsIHF1ZXJpZWRSb2xlcyk7XG4gICAgfSlcbiAgICAudGhlbihuYW1lcyA9PiB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFsuLi5uZXcgU2V0KG5hbWVzKV0pO1xuICAgIH0pO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIEF1dGgsXG4gIG1hc3RlcixcbiAgbm9ib2R5LFxuICByZWFkT25seSxcbiAgZ2V0QXV0aEZvclNlc3Npb25Ub2tlbixcbiAgZ2V0QXV0aEZvckxlZ2FjeVNlc3Npb25Ub2tlbixcbn07XG4iXX0=
|