parse-server 9.6.0-alpha.9 → 9.6.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.
Files changed (49) hide show
  1. package/lib/AccountLockout.js +14 -42
  2. package/lib/Adapters/Auth/index.js +2 -2
  3. package/lib/Adapters/Auth/oauth2.js +2 -2
  4. package/lib/Adapters/Storage/Mongo/MongoStorageAdapter.js +3 -3
  5. package/lib/Adapters/Storage/Mongo/MongoTransform.js +30 -30
  6. package/lib/Adapters/Storage/Postgres/PostgresStorageAdapter.js +53 -16
  7. package/lib/Auth.js +35 -9
  8. package/lib/Config.js +6 -5
  9. package/lib/Controllers/DatabaseController.js +134 -27
  10. package/lib/Controllers/FilesController.js +2 -2
  11. package/lib/Controllers/LiveQueryController.js +2 -2
  12. package/lib/Controllers/ParseGraphQLController.js +3 -2
  13. package/lib/Controllers/SchemaController.js +3 -7
  14. package/lib/Controllers/UserController.js +12 -3
  15. package/lib/Deprecator/Deprecations.js +41 -1
  16. package/lib/GraphQL/ParseGraphQLServer.js +1 -12
  17. package/lib/GraphQL/loaders/defaultGraphQLTypes.js +6 -5
  18. package/lib/GraphQL/loaders/functionsMutations.js +3 -4
  19. package/lib/GraphQL/loaders/parseClassMutations.js +4 -5
  20. package/lib/GraphQL/loaders/parseClassQueries.js +3 -4
  21. package/lib/GraphQL/loaders/schemaMutations.js +4 -5
  22. package/lib/GraphQL/loaders/schemaQueries.js +2 -3
  23. package/lib/GraphQL/loaders/usersMutations.js +5 -5
  24. package/lib/GraphQL/parseGraphQLUtils.js +9 -1
  25. package/lib/GraphQL/transformers/query.js +2 -2
  26. package/lib/LiveQuery/ParseLiveQueryServer.js +165 -14
  27. package/lib/LiveQuery/QueryTools.js +28 -19
  28. package/lib/Options/Definitions.js +40 -16
  29. package/lib/Options/docs.js +14 -10
  30. package/lib/Options/index.js +1 -1
  31. package/lib/ParseServer.js +9 -4
  32. package/lib/Push/PushWorker.js +2 -4
  33. package/lib/Push/utils.js +3 -4
  34. package/lib/RestQuery.js +32 -4
  35. package/lib/RestWrite.js +50 -24
  36. package/lib/Routers/AggregateRouter.js +9 -2
  37. package/lib/Routers/ClassesRouter.js +6 -2
  38. package/lib/Routers/FilesRouter.js +4 -3
  39. package/lib/Routers/PagesRouter.js +44 -20
  40. package/lib/Routers/UsersRouter.js +60 -26
  41. package/lib/Security/Check.js +2 -2
  42. package/lib/Security/CheckGroups/CheckGroupServerConfig.js +2 -2
  43. package/lib/StatusHandler.js +3 -2
  44. package/lib/Utils.js +74 -8
  45. package/lib/batch.js +39 -36
  46. package/lib/cloud-code/Parse.Cloud.js +2 -2
  47. package/lib/middlewares.js +36 -11
  48. package/lib/triggers.js +9 -2
  49. package/package.json +1 -3
@@ -36,7 +36,11 @@ class AggregateRouter extends _ClassesRouter.default {
36
36
  }
37
37
  options.pipeline = AggregateRouter.getPipeline(body);
38
38
  if (typeof body.where === 'string') {
39
- body.where = JSON.parse(body.where);
39
+ try {
40
+ body.where = JSON.parse(body.where);
41
+ } catch {
42
+ throw new _node.default.Error(_node.default.Error.INVALID_JSON, 'where parameter is not valid JSON');
43
+ }
40
44
  }
41
45
  try {
42
46
  const response = await _rest.default.find(req.config, req.auth, this.className(req), body.where, options, req.info.clientSDK, req.info.context);
@@ -49,6 +53,9 @@ class AggregateRouter extends _ClassesRouter.default {
49
53
  response
50
54
  };
51
55
  } catch (e) {
56
+ if (e instanceof _node.default.Error) {
57
+ throw e;
58
+ }
52
59
  throw new _node.default.Error(_node.default.Error.INVALID_QUERY, e.message);
53
60
  }
54
61
  }
@@ -123,4 +130,4 @@ class AggregateRouter extends _ClassesRouter.default {
123
130
  }
124
131
  exports.AggregateRouter = AggregateRouter;
125
132
  var _default = exports.default = AggregateRouter;
126
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbm9kZSIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwibWlkZGxld2FyZSIsIl9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkIiwiX3Jlc3QiLCJfQ2xhc3Nlc1JvdXRlciIsIl9Vc2Vyc1JvdXRlciIsImUiLCJ0IiwiV2Vha01hcCIsInIiLCJuIiwiX19lc01vZHVsZSIsIm8iLCJpIiwiZiIsIl9fcHJvdG9fXyIsImRlZmF1bHQiLCJoYXMiLCJnZXQiLCJzZXQiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsIkFnZ3JlZ2F0ZVJvdXRlciIsIkNsYXNzZXNSb3V0ZXIiLCJoYW5kbGVGaW5kIiwicmVxIiwiYm9keSIsImFzc2lnbiIsIkpTT05Gcm9tUXVlcnkiLCJxdWVyeSIsIm9wdGlvbnMiLCJkaXN0aW5jdCIsIlN0cmluZyIsImhpbnQiLCJleHBsYWluIiwiY29tbWVudCIsInJlYWRQcmVmZXJlbmNlIiwicGlwZWxpbmUiLCJnZXRQaXBlbGluZSIsIndoZXJlIiwiSlNPTiIsInBhcnNlIiwicmVzcG9uc2UiLCJyZXN0IiwiZmluZCIsImNvbmZpZyIsImF1dGgiLCJjbGFzc05hbWUiLCJpbmZvIiwiY2xpZW50U0RLIiwiY29udGV4dCIsInJlc3VsdCIsInJlc3VsdHMiLCJVc2Vyc1JvdXRlciIsInJlbW92ZUhpZGRlblByb3BlcnRpZXMiLCJQYXJzZSIsIkVycm9yIiwiSU5WQUxJRF9RVUVSWSIsIm1lc3NhZ2UiLCJBcnJheSIsImlzQXJyYXkiLCJrZXlzIiwiZmlsdGVyIiwia2V5IiwidW5kZWZpbmVkIiwibWFwIiwic3RhZ2UiLCJsZW5ndGgiLCJqb2luIiwidHJhbnNmb3JtU3RhZ2UiLCJzdGFnZU5hbWUiLCJza2lwS2V5cyIsImluY2x1ZGVzIiwicHJvdG90eXBlIiwibW91bnRSb3V0ZXMiLCJyb3V0ZSIsInByb21pc2VFbmZvcmNlTWFzdGVyS2V5QWNjZXNzIiwiZXhwb3J0cyIsIl9kZWZhdWx0Il0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL1JvdXRlcnMvQWdncmVnYXRlUm91dGVyLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBQYXJzZSBmcm9tICdwYXJzZS9ub2RlJztcbmltcG9ydCAqIGFzIG1pZGRsZXdhcmUgZnJvbSAnLi4vbWlkZGxld2FyZXMnO1xuaW1wb3J0IHJlc3QgZnJvbSAnLi4vcmVzdCc7XG5pbXBvcnQgQ2xhc3Nlc1JvdXRlciBmcm9tICcuL0NsYXNzZXNSb3V0ZXInO1xuaW1wb3J0IFVzZXJzUm91dGVyIGZyb20gJy4vVXNlcnNSb3V0ZXInO1xuXG5leHBvcnQgY2xhc3MgQWdncmVnYXRlUm91dGVyIGV4dGVuZHMgQ2xhc3Nlc1JvdXRlciB7XG4gIGFzeW5jIGhhbmRsZUZpbmQocmVxKSB7XG4gICAgY29uc3QgYm9keSA9IE9iamVjdC5hc3NpZ24ocmVxLmJvZHkgfHwge30sIENsYXNzZXNSb3V0ZXIuSlNPTkZyb21RdWVyeShyZXEucXVlcnkpKTtcbiAgICBjb25zdCBvcHRpb25zID0ge307XG4gICAgaWYgKGJvZHkuZGlzdGluY3QpIHtcbiAgICAgIG9wdGlvbnMuZGlzdGluY3QgPSBTdHJpbmcoYm9keS5kaXN0aW5jdCk7XG4gICAgfVxuICAgIGlmIChib2R5LmhpbnQpIHtcbiAgICAgIG9wdGlvbnMuaGludCA9IGJvZHkuaGludDtcbiAgICAgIGRlbGV0ZSBib2R5LmhpbnQ7XG4gICAgfVxuICAgIGlmIChib2R5LmV4cGxhaW4pIHtcbiAgICAgIG9wdGlvbnMuZXhwbGFpbiA9IGJvZHkuZXhwbGFpbjtcbiAgICAgIGRlbGV0ZSBib2R5LmV4cGxhaW47XG4gICAgfVxuICAgIGlmIChib2R5LmNvbW1lbnQpIHtcbiAgICAgIG9wdGlvbnMuY29tbWVudCA9IGJvZHkuY29tbWVudDtcbiAgICAgIGRlbGV0ZSBib2R5LmNvbW1lbnQ7XG4gICAgfVxuICAgIGlmIChib2R5LnJlYWRQcmVmZXJlbmNlKSB7XG4gICAgICBvcHRpb25zLnJlYWRQcmVmZXJlbmNlID0gYm9keS5yZWFkUHJlZmVyZW5jZTtcbiAgICAgIGRlbGV0ZSBib2R5LnJlYWRQcmVmZXJlbmNlO1xuICAgIH1cbiAgICBvcHRpb25zLnBpcGVsaW5lID0gQWdncmVnYXRlUm91dGVyLmdldFBpcGVsaW5lKGJvZHkpO1xuICAgIGlmICh0eXBlb2YgYm9keS53aGVyZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGJvZHkud2hlcmUgPSBKU09OLnBhcnNlKGJvZHkud2hlcmUpO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCByZXN0LmZpbmQoXG4gICAgICAgIHJlcS5jb25maWcsXG4gICAgICAgIHJlcS5hdXRoLFxuICAgICAgICB0aGlzLmNsYXNzTmFtZShyZXEpLFxuICAgICAgICBib2R5LndoZXJlLFxuICAgICAgICBvcHRpb25zLFxuICAgICAgICByZXEuaW5mby5jbGllbnRTREssXG4gICAgICAgIHJlcS5pbmZvLmNvbnRleHRcbiAgICAgICk7XG4gICAgICBmb3IgKGNvbnN0IHJlc3VsdCBvZiByZXNwb25zZS5yZXN1bHRzKSB7XG4gICAgICAgIGlmICh0eXBlb2YgcmVzdWx0ID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgIFVzZXJzUm91dGVyLnJlbW92ZUhpZGRlblByb3BlcnRpZXMocmVzdWx0KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHsgcmVzcG9uc2UgfTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuSU5WQUxJRF9RVUVSWSwgZS5tZXNzYWdlKTtcbiAgICB9XG4gIH1cblxuICAvKiBCdWlsZHMgYSBwaXBlbGluZSBmcm9tIHRoZSBib2R5LiBPcmlnaW5hbGx5IHRoZSBib2R5IGNvdWxkIGJlIHBhc3NlZCBhcyBhIHNpbmdsZSBvYmplY3QsXG4gICAqIGFuZCBub3cgd2Ugc3VwcG9ydCBtYW55IG9wdGlvbnMuXG4gICAqXG4gICAqIEFycmF5XG4gICAqXG4gICAqIGJvZHk6IFt7XG4gICAqICAgZ3JvdXA6IHsgb2JqZWN0SWQ6ICckbmFtZScgfSxcbiAgICogfV1cbiAgICpcbiAgICogT2JqZWN0XG4gICAqXG4gICAqIGJvZHk6IHtcbiAgICogICBncm91cDogeyBvYmplY3RJZDogJyRuYW1lJyB9LFxuICAgKiB9XG4gICAqXG4gICAqXG4gICAqIFBpcGVsaW5lIE9wZXJhdG9yIHdpdGggYW4gQXJyYXkgb3IgYW4gT2JqZWN0XG4gICAqXG4gICAqIGJvZHk6IHtcbiAgICogICBwaXBlbGluZToge1xuICAgKiAgICAgJGdyb3VwOiB7IG9iamVjdElkOiAnJG5hbWUnIH0sXG4gICAqICAgfVxuICAgKiB9XG4gICAqXG4gICAqL1xuICBzdGF0aWMgZ2V0UGlwZWxpbmUoYm9keSkge1xuICAgIGxldCBwaXBlbGluZSA9IGJvZHkucGlwZWxpbmUgfHwgYm9keTtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkocGlwZWxpbmUpKSB7XG4gICAgICBwaXBlbGluZSA9IE9iamVjdC5rZXlzKHBpcGVsaW5lKVxuICAgICAgICAuZmlsdGVyKGtleSA9PiBwaXBlbGluZVtrZXldICE9PSB1bmRlZmluZWQpXG4gICAgICAgIC5tYXAoa2V5ID0+IHtcbiAgICAgICAgICByZXR1cm4geyBba2V5XTogcGlwZWxpbmVba2V5XSB9O1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGlwZWxpbmUubWFwKHN0YWdlID0+IHtcbiAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhzdGFnZSk7XG4gICAgICBpZiAoa2V5cy5sZW5ndGggIT09IDEpIHtcbiAgICAgICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFxuICAgICAgICAgIFBhcnNlLkVycm9yLklOVkFMSURfUVVFUlksXG4gICAgICAgICAgYFBpcGVsaW5lIHN0YWdlcyBzaG91bGQgb25seSBoYXZlIG9uZSBrZXkgYnV0IGZvdW5kICR7a2V5cy5qb2luKCcsICcpfS5gXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXR1cm4gQWdncmVnYXRlUm91dGVyLnRyYW5zZm9ybVN0YWdlKGtleXNbMF0sIHN0YWdlKTtcbiAgICB9KTtcbiAgfVxuXG4gIHN0YXRpYyB0cmFuc2Zvcm1TdGFnZShzdGFnZU5hbWUsIHN0YWdlKSB7XG4gICAgY29uc3Qgc2tpcEtleXMgPSBbJ2Rpc3RpbmN0JywgJ3doZXJlJ107XG4gICAgaWYgKHNraXBLZXlzLmluY2x1ZGVzKHN0YWdlTmFtZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHN0YWdlTmFtZVswXSAhPT0gJyQnKSB7XG4gICAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuSU5WQUxJRF9RVUVSWSwgYEludmFsaWQgYWdncmVnYXRlIHN0YWdlICcke3N0YWdlTmFtZX0nLmApO1xuICAgIH1cbiAgICBpZiAoc3RhZ2VOYW1lID09PSAnJGdyb3VwJykge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzdGFnZVtzdGFnZU5hbWVdLCAnb2JqZWN0SWQnKSkge1xuICAgICAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoXG4gICAgICAgICAgUGFyc2UuRXJyb3IuSU5WQUxJRF9RVUVSWSxcbiAgICAgICAgICBgQ2Fubm90IHVzZSAnb2JqZWN0SWQnIGluIGFnZ3JlZ2F0aW9uIHN0YWdlICRncm91cC5gXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzdGFnZVtzdGFnZU5hbWVdLCAnX2lkJykpIHtcbiAgICAgICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFxuICAgICAgICAgIFBhcnNlLkVycm9yLklOVkFMSURfUVVFUlksXG4gICAgICAgICAgYEludmFsaWQgcGFyYW1ldGVyIGZvciBxdWVyeTogZ3JvdXAuIE1pc3Npbmcga2V5IF9pZGBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHsgW3N0YWdlTmFtZV06IHN0YWdlW3N0YWdlTmFtZV0gfTtcbiAgfVxuXG4gIG1vdW50Um91dGVzKCkge1xuICAgIHRoaXMucm91dGUoJ0dFVCcsICcvYWdncmVnYXRlLzpjbGFzc05hbWUnLCBtaWRkbGV3YXJlLnByb21pc2VFbmZvcmNlTWFzdGVyS2V5QWNjZXNzLCByZXEgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlRmluZChyZXEpO1xuICAgIH0pO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEFnZ3JlZ2F0ZVJvdXRlcjtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsSUFBQUEsS0FBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsVUFBQSxHQUFBQyx1QkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQUcsS0FBQSxHQUFBSixzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUksY0FBQSxHQUFBTCxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUssWUFBQSxHQUFBTixzQkFBQSxDQUFBQyxPQUFBO0FBQXdDLFNBQUFFLHdCQUFBSSxDQUFBLEVBQUFDLENBQUEsNkJBQUFDLE9BQUEsTUFBQUMsQ0FBQSxPQUFBRCxPQUFBLElBQUFFLENBQUEsT0FBQUYsT0FBQSxZQUFBTix1QkFBQSxZQUFBQSxDQUFBSSxDQUFBLEVBQUFDLENBQUEsU0FBQUEsQ0FBQSxJQUFBRCxDQUFBLElBQUFBLENBQUEsQ0FBQUssVUFBQSxTQUFBTCxDQUFBLE1BQUFNLENBQUEsRUFBQUMsQ0FBQSxFQUFBQyxDQUFBLEtBQUFDLFNBQUEsUUFBQUMsT0FBQSxFQUFBVixDQUFBLGlCQUFBQSxDQUFBLHVCQUFBQSxDQUFBLHlCQUFBQSxDQUFBLFNBQUFRLENBQUEsTUFBQUYsQ0FBQSxHQUFBTCxDQUFBLEdBQUFHLENBQUEsR0FBQUQsQ0FBQSxRQUFBRyxDQUFBLENBQUFLLEdBQUEsQ0FBQVgsQ0FBQSxVQUFBTSxDQUFBLENBQUFNLEdBQUEsQ0FBQVosQ0FBQSxHQUFBTSxDQUFBLENBQUFPLEdBQUEsQ0FBQWIsQ0FBQSxFQUFBUSxDQUFBLGdCQUFBUCxDQUFBLElBQUFELENBQUEsZ0JBQUFDLENBQUEsT0FBQWEsY0FBQSxDQUFBQyxJQUFBLENBQUFmLENBQUEsRUFBQUMsQ0FBQSxPQUFBTSxDQUFBLElBQUFELENBQUEsR0FBQVUsTUFBQSxDQUFBQyxjQUFBLEtBQUFELE1BQUEsQ0FBQUUsd0JBQUEsQ0FBQWxCLENBQUEsRUFBQUMsQ0FBQSxPQUFBTSxDQUFBLENBQUFLLEdBQUEsSUFBQUwsQ0FBQSxDQUFBTSxHQUFBLElBQUFQLENBQUEsQ0FBQUUsQ0FBQSxFQUFBUCxDQUFBLEVBQUFNLENBQUEsSUFBQUMsQ0FBQSxDQUFBUCxDQUFBLElBQUFELENBQUEsQ0FBQUMsQ0FBQSxXQUFBTyxDQUFBLEtBQUFSLENBQUEsRUFBQUMsQ0FBQTtBQUFBLFNBQUFSLHVCQUFBTyxDQUFBLFdBQUFBLENBQUEsSUFBQUEsQ0FBQSxDQUFBSyxVQUFBLEdBQUFMLENBQUEsS0FBQVUsT0FBQSxFQUFBVixDQUFBO0FBRWpDLE1BQU1tQixlQUFlLFNBQVNDLHNCQUFhLENBQUM7RUFDakQsTUFBTUMsVUFBVUEsQ0FBQ0MsR0FBRyxFQUFFO0lBQ3BCLE1BQU1DLElBQUksR0FBR1AsTUFBTSxDQUFDUSxNQUFNLENBQUNGLEdBQUcsQ0FBQ0MsSUFBSSxJQUFJLENBQUMsQ0FBQyxFQUFFSCxzQkFBYSxDQUFDSyxhQUFhLENBQUNILEdBQUcsQ0FBQ0ksS0FBSyxDQUFDLENBQUM7SUFDbEYsTUFBTUMsT0FBTyxHQUFHLENBQUMsQ0FBQztJQUNsQixJQUFJSixJQUFJLENBQUNLLFFBQVEsRUFBRTtNQUNqQkQsT0FBTyxDQUFDQyxRQUFRLEdBQUdDLE1BQU0sQ0FBQ04sSUFBSSxDQUFDSyxRQUFRLENBQUM7SUFDMUM7SUFDQSxJQUFJTCxJQUFJLENBQUNPLElBQUksRUFBRTtNQUNiSCxPQUFPLENBQUNHLElBQUksR0FBR1AsSUFBSSxDQUFDTyxJQUFJO01BQ3hCLE9BQU9QLElBQUksQ0FBQ08sSUFBSTtJQUNsQjtJQUNBLElBQUlQLElBQUksQ0FBQ1EsT0FBTyxFQUFFO01BQ2hCSixPQUFPLENBQUNJLE9BQU8sR0FBR1IsSUFBSSxDQUFDUSxPQUFPO01BQzlCLE9BQU9SLElBQUksQ0FBQ1EsT0FBTztJQUNyQjtJQUNBLElBQUlSLElBQUksQ0FBQ1MsT0FBTyxFQUFFO01BQ2hCTCxPQUFPLENBQUNLLE9BQU8sR0FBR1QsSUFBSSxDQUFDUyxPQUFPO01BQzlCLE9BQU9ULElBQUksQ0FBQ1MsT0FBTztJQUNyQjtJQUNBLElBQUlULElBQUksQ0FBQ1UsY0FBYyxFQUFFO01BQ3ZCTixPQUFPLENBQUNNLGNBQWMsR0FBR1YsSUFBSSxDQUFDVSxjQUFjO01BQzVDLE9BQU9WLElBQUksQ0FBQ1UsY0FBYztJQUM1QjtJQUNBTixPQUFPLENBQUNPLFFBQVEsR0FBR2YsZUFBZSxDQUFDZ0IsV0FBVyxDQUFDWixJQUFJLENBQUM7SUFDcEQsSUFBSSxPQUFPQSxJQUFJLENBQUNhLEtBQUssS0FBSyxRQUFRLEVBQUU7TUFDbENiLElBQUksQ0FBQ2EsS0FBSyxHQUFHQyxJQUFJLENBQUNDLEtBQUssQ0FBQ2YsSUFBSSxDQUFDYSxLQUFLLENBQUM7SUFDckM7SUFDQSxJQUFJO01BQ0YsTUFBTUcsUUFBUSxHQUFHLE1BQU1DLGFBQUksQ0FBQ0MsSUFBSSxDQUM5Qm5CLEdBQUcsQ0FBQ29CLE1BQU0sRUFDVnBCLEdBQUcsQ0FBQ3FCLElBQUksRUFDUixJQUFJLENBQUNDLFNBQVMsQ0FBQ3RCLEdBQUcsQ0FBQyxFQUNuQkMsSUFBSSxDQUFDYSxLQUFLLEVBQ1ZULE9BQU8sRUFDUEwsR0FBRyxDQUFDdUIsSUFBSSxDQUFDQyxTQUFTLEVBQ2xCeEIsR0FBRyxDQUFDdUIsSUFBSSxDQUFDRSxPQUNYLENBQUM7TUFDRCxLQUFLLE1BQU1DLE1BQU0sSUFBSVQsUUFBUSxDQUFDVSxPQUFPLEVBQUU7UUFDckMsSUFBSSxPQUFPRCxNQUFNLEtBQUssUUFBUSxFQUFFO1VBQzlCRSxvQkFBVyxDQUFDQyxzQkFBc0IsQ0FBQ0gsTUFBTSxDQUFDO1FBQzVDO01BQ0Y7TUFDQSxPQUFPO1FBQUVUO01BQVMsQ0FBQztJQUNyQixDQUFDLENBQUMsT0FBT3ZDLENBQUMsRUFBRTtNQUNWLE1BQU0sSUFBSW9ELGFBQUssQ0FBQ0MsS0FBSyxDQUFDRCxhQUFLLENBQUNDLEtBQUssQ0FBQ0MsYUFBYSxFQUFFdEQsQ0FBQyxDQUFDdUQsT0FBTyxDQUFDO0lBQzdEO0VBQ0Y7O0VBRUE7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDRSxPQUFPcEIsV0FBV0EsQ0FBQ1osSUFBSSxFQUFFO0lBQ3ZCLElBQUlXLFFBQVEsR0FBR1gsSUFBSSxDQUFDVyxRQUFRLElBQUlYLElBQUk7SUFDcEMsSUFBSSxDQUFDaUMsS0FBSyxDQUFDQyxPQUFPLENBQUN2QixRQUFRLENBQUMsRUFBRTtNQUM1QkEsUUFBUSxHQUFHbEIsTUFBTSxDQUFDMEMsSUFBSSxDQUFDeEIsUUFBUSxDQUFDLENBQzdCeUIsTUFBTSxDQUFDQyxHQUFHLElBQUkxQixRQUFRLENBQUMwQixHQUFHLENBQUMsS0FBS0MsU0FBUyxDQUFDLENBQzFDQyxHQUFHLENBQUNGLEdBQUcsSUFBSTtRQUNWLE9BQU87VUFBRSxDQUFDQSxHQUFHLEdBQUcxQixRQUFRLENBQUMwQixHQUFHO1FBQUUsQ0FBQztNQUNqQyxDQUFDLENBQUM7SUFDTjtJQUVBLE9BQU8xQixRQUFRLENBQUM0QixHQUFHLENBQUNDLEtBQUssSUFBSTtNQUMzQixNQUFNTCxJQUFJLEdBQUcxQyxNQUFNLENBQUMwQyxJQUFJLENBQUNLLEtBQUssQ0FBQztNQUMvQixJQUFJTCxJQUFJLENBQUNNLE1BQU0sS0FBSyxDQUFDLEVBQUU7UUFDckIsTUFBTSxJQUFJWixhQUFLLENBQUNDLEtBQUssQ0FDbkJELGFBQUssQ0FBQ0MsS0FBSyxDQUFDQyxhQUFhLEVBQ3pCLHNEQUFzREksSUFBSSxDQUFDTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQ3ZFLENBQUM7TUFDSDtNQUNBLE9BQU85QyxlQUFlLENBQUMrQyxjQUFjLENBQUNSLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRUssS0FBSyxDQUFDO0lBQ3ZELENBQUMsQ0FBQztFQUNKO0VBRUEsT0FBT0csY0FBY0EsQ0FBQ0MsU0FBUyxFQUFFSixLQUFLLEVBQUU7SUFDdEMsTUFBTUssUUFBUSxHQUFHLENBQUMsVUFBVSxFQUFFLE9BQU8sQ0FBQztJQUN0QyxJQUFJQSxRQUFRLENBQUNDLFFBQVEsQ0FBQ0YsU0FBUyxDQUFDLEVBQUU7TUFDaEM7SUFDRjtJQUNBLElBQUlBLFNBQVMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUU7TUFDeEIsTUFBTSxJQUFJZixhQUFLLENBQUNDLEtBQUssQ0FBQ0QsYUFBSyxDQUFDQyxLQUFLLENBQUNDLGFBQWEsRUFBRSw0QkFBNEJhLFNBQVMsSUFBSSxDQUFDO0lBQzdGO0lBQ0EsSUFBSUEsU0FBUyxLQUFLLFFBQVEsRUFBRTtNQUMxQixJQUFJbkQsTUFBTSxDQUFDc0QsU0FBUyxDQUFDeEQsY0FBYyxDQUFDQyxJQUFJLENBQUNnRCxLQUFLLENBQUNJLFNBQVMsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxFQUFFO1FBQ3RFLE1BQU0sSUFBSWYsYUFBSyxDQUFDQyxLQUFLLENBQ25CRCxhQUFLLENBQUNDLEtBQUssQ0FBQ0MsYUFBYSxFQUN6QixvREFDRixDQUFDO01BQ0g7TUFDQSxJQUFJLENBQUN0QyxNQUFNLENBQUNzRCxTQUFTLENBQUN4RCxjQUFjLENBQUNDLElBQUksQ0FBQ2dELEtBQUssQ0FBQ0ksU0FBUyxDQUFDLEVBQUUsS0FBSyxDQUFDLEVBQUU7UUFDbEUsTUFBTSxJQUFJZixhQUFLLENBQUNDLEtBQUssQ0FDbkJELGFBQUssQ0FBQ0MsS0FBSyxDQUFDQyxhQUFhLEVBQ3pCLHFEQUNGLENBQUM7TUFDSDtJQUNGO0lBQ0EsT0FBTztNQUFFLENBQUNhLFNBQVMsR0FBR0osS0FBSyxDQUFDSSxTQUFTO0lBQUUsQ0FBQztFQUMxQztFQUVBSSxXQUFXQSxDQUFBLEVBQUc7SUFDWixJQUFJLENBQUNDLEtBQUssQ0FBQyxLQUFLLEVBQUUsdUJBQXVCLEVBQUU3RSxVQUFVLENBQUM4RSw2QkFBNkIsRUFBRW5ELEdBQUcsSUFBSTtNQUMxRixPQUFPLElBQUksQ0FBQ0QsVUFBVSxDQUFDQyxHQUFHLENBQUM7SUFDN0IsQ0FBQyxDQUFDO0VBQ0o7QUFDRjtBQUFDb0QsT0FBQSxDQUFBdkQsZUFBQSxHQUFBQSxlQUFBO0FBQUEsSUFBQXdELFFBQUEsR0FBQUQsT0FBQSxDQUFBaEUsT0FBQSxHQUVjUyxlQUFlIiwiaWdub3JlTGlzdCI6W119
133
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbm9kZSIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwibWlkZGxld2FyZSIsIl9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkIiwiX3Jlc3QiLCJfQ2xhc3Nlc1JvdXRlciIsIl9Vc2Vyc1JvdXRlciIsImUiLCJ0IiwiV2Vha01hcCIsInIiLCJuIiwiX19lc01vZHVsZSIsIm8iLCJpIiwiZiIsIl9fcHJvdG9fXyIsImRlZmF1bHQiLCJoYXMiLCJnZXQiLCJzZXQiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsIkFnZ3JlZ2F0ZVJvdXRlciIsIkNsYXNzZXNSb3V0ZXIiLCJoYW5kbGVGaW5kIiwicmVxIiwiYm9keSIsImFzc2lnbiIsIkpTT05Gcm9tUXVlcnkiLCJxdWVyeSIsIm9wdGlvbnMiLCJkaXN0aW5jdCIsIlN0cmluZyIsImhpbnQiLCJleHBsYWluIiwiY29tbWVudCIsInJlYWRQcmVmZXJlbmNlIiwicGlwZWxpbmUiLCJnZXRQaXBlbGluZSIsIndoZXJlIiwiSlNPTiIsInBhcnNlIiwiUGFyc2UiLCJFcnJvciIsIklOVkFMSURfSlNPTiIsInJlc3BvbnNlIiwicmVzdCIsImZpbmQiLCJjb25maWciLCJhdXRoIiwiY2xhc3NOYW1lIiwiaW5mbyIsImNsaWVudFNESyIsImNvbnRleHQiLCJyZXN1bHQiLCJyZXN1bHRzIiwiVXNlcnNSb3V0ZXIiLCJyZW1vdmVIaWRkZW5Qcm9wZXJ0aWVzIiwiSU5WQUxJRF9RVUVSWSIsIm1lc3NhZ2UiLCJBcnJheSIsImlzQXJyYXkiLCJrZXlzIiwiZmlsdGVyIiwia2V5IiwidW5kZWZpbmVkIiwibWFwIiwic3RhZ2UiLCJsZW5ndGgiLCJqb2luIiwidHJhbnNmb3JtU3RhZ2UiLCJzdGFnZU5hbWUiLCJza2lwS2V5cyIsImluY2x1ZGVzIiwicHJvdG90eXBlIiwibW91bnRSb3V0ZXMiLCJyb3V0ZSIsInByb21pc2VFbmZvcmNlTWFzdGVyS2V5QWNjZXNzIiwiZXhwb3J0cyIsIl9kZWZhdWx0Il0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL1JvdXRlcnMvQWdncmVnYXRlUm91dGVyLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBQYXJzZSBmcm9tICdwYXJzZS9ub2RlJztcbmltcG9ydCAqIGFzIG1pZGRsZXdhcmUgZnJvbSAnLi4vbWlkZGxld2FyZXMnO1xuaW1wb3J0IHJlc3QgZnJvbSAnLi4vcmVzdCc7XG5pbXBvcnQgQ2xhc3Nlc1JvdXRlciBmcm9tICcuL0NsYXNzZXNSb3V0ZXInO1xuaW1wb3J0IFVzZXJzUm91dGVyIGZyb20gJy4vVXNlcnNSb3V0ZXInO1xuXG5leHBvcnQgY2xhc3MgQWdncmVnYXRlUm91dGVyIGV4dGVuZHMgQ2xhc3Nlc1JvdXRlciB7XG4gIGFzeW5jIGhhbmRsZUZpbmQocmVxKSB7XG4gICAgY29uc3QgYm9keSA9IE9iamVjdC5hc3NpZ24ocmVxLmJvZHkgfHwge30sIENsYXNzZXNSb3V0ZXIuSlNPTkZyb21RdWVyeShyZXEucXVlcnkpKTtcbiAgICBjb25zdCBvcHRpb25zID0ge307XG4gICAgaWYgKGJvZHkuZGlzdGluY3QpIHtcbiAgICAgIG9wdGlvbnMuZGlzdGluY3QgPSBTdHJpbmcoYm9keS5kaXN0aW5jdCk7XG4gICAgfVxuICAgIGlmIChib2R5LmhpbnQpIHtcbiAgICAgIG9wdGlvbnMuaGludCA9IGJvZHkuaGludDtcbiAgICAgIGRlbGV0ZSBib2R5LmhpbnQ7XG4gICAgfVxuICAgIGlmIChib2R5LmV4cGxhaW4pIHtcbiAgICAgIG9wdGlvbnMuZXhwbGFpbiA9IGJvZHkuZXhwbGFpbjtcbiAgICAgIGRlbGV0ZSBib2R5LmV4cGxhaW47XG4gICAgfVxuICAgIGlmIChib2R5LmNvbW1lbnQpIHtcbiAgICAgIG9wdGlvbnMuY29tbWVudCA9IGJvZHkuY29tbWVudDtcbiAgICAgIGRlbGV0ZSBib2R5LmNvbW1lbnQ7XG4gICAgfVxuICAgIGlmIChib2R5LnJlYWRQcmVmZXJlbmNlKSB7XG4gICAgICBvcHRpb25zLnJlYWRQcmVmZXJlbmNlID0gYm9keS5yZWFkUHJlZmVyZW5jZTtcbiAgICAgIGRlbGV0ZSBib2R5LnJlYWRQcmVmZXJlbmNlO1xuICAgIH1cbiAgICBvcHRpb25zLnBpcGVsaW5lID0gQWdncmVnYXRlUm91dGVyLmdldFBpcGVsaW5lKGJvZHkpO1xuICAgIGlmICh0eXBlb2YgYm9keS53aGVyZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGJvZHkud2hlcmUgPSBKU09OLnBhcnNlKGJvZHkud2hlcmUpO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5JTlZBTElEX0pTT04sICd3aGVyZSBwYXJhbWV0ZXIgaXMgbm90IHZhbGlkIEpTT04nKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgcmVzdC5maW5kKFxuICAgICAgICByZXEuY29uZmlnLFxuICAgICAgICByZXEuYXV0aCxcbiAgICAgICAgdGhpcy5jbGFzc05hbWUocmVxKSxcbiAgICAgICAgYm9keS53aGVyZSxcbiAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgcmVxLmluZm8uY2xpZW50U0RLLFxuICAgICAgICByZXEuaW5mby5jb250ZXh0XG4gICAgICApO1xuICAgICAgZm9yIChjb25zdCByZXN1bHQgb2YgcmVzcG9uc2UucmVzdWx0cykge1xuICAgICAgICBpZiAodHlwZW9mIHJlc3VsdCA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICBVc2Vyc1JvdXRlci5yZW1vdmVIaWRkZW5Qcm9wZXJ0aWVzKHJlc3VsdCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB7IHJlc3BvbnNlIH07XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgaWYgKGUgaW5zdGFuY2VvZiBQYXJzZS5FcnJvcikge1xuICAgICAgICB0aHJvdyBlO1xuICAgICAgfVxuICAgICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLklOVkFMSURfUVVFUlksIGUubWVzc2FnZSk7XG4gICAgfVxuICB9XG5cbiAgLyogQnVpbGRzIGEgcGlwZWxpbmUgZnJvbSB0aGUgYm9keS4gT3JpZ2luYWxseSB0aGUgYm9keSBjb3VsZCBiZSBwYXNzZWQgYXMgYSBzaW5nbGUgb2JqZWN0LFxuICAgKiBhbmQgbm93IHdlIHN1cHBvcnQgbWFueSBvcHRpb25zLlxuICAgKlxuICAgKiBBcnJheVxuICAgKlxuICAgKiBib2R5OiBbe1xuICAgKiAgIGdyb3VwOiB7IG9iamVjdElkOiAnJG5hbWUnIH0sXG4gICAqIH1dXG4gICAqXG4gICAqIE9iamVjdFxuICAgKlxuICAgKiBib2R5OiB7XG4gICAqICAgZ3JvdXA6IHsgb2JqZWN0SWQ6ICckbmFtZScgfSxcbiAgICogfVxuICAgKlxuICAgKlxuICAgKiBQaXBlbGluZSBPcGVyYXRvciB3aXRoIGFuIEFycmF5IG9yIGFuIE9iamVjdFxuICAgKlxuICAgKiBib2R5OiB7XG4gICAqICAgcGlwZWxpbmU6IHtcbiAgICogICAgICRncm91cDogeyBvYmplY3RJZDogJyRuYW1lJyB9LFxuICAgKiAgIH1cbiAgICogfVxuICAgKlxuICAgKi9cbiAgc3RhdGljIGdldFBpcGVsaW5lKGJvZHkpIHtcbiAgICBsZXQgcGlwZWxpbmUgPSBib2R5LnBpcGVsaW5lIHx8IGJvZHk7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHBpcGVsaW5lKSkge1xuICAgICAgcGlwZWxpbmUgPSBPYmplY3Qua2V5cyhwaXBlbGluZSlcbiAgICAgICAgLmZpbHRlcihrZXkgPT4gcGlwZWxpbmVba2V5XSAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAubWFwKGtleSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHsgW2tleV06IHBpcGVsaW5lW2tleV0gfTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBpcGVsaW5lLm1hcChzdGFnZSA9PiB7XG4gICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoc3RhZ2UpO1xuICAgICAgaWYgKGtleXMubGVuZ3RoICE9PSAxKSB7XG4gICAgICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihcbiAgICAgICAgICBQYXJzZS5FcnJvci5JTlZBTElEX1FVRVJZLFxuICAgICAgICAgIGBQaXBlbGluZSBzdGFnZXMgc2hvdWxkIG9ubHkgaGF2ZSBvbmUga2V5IGJ1dCBmb3VuZCAke2tleXMuam9pbignLCAnKX0uYFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIEFnZ3JlZ2F0ZVJvdXRlci50cmFuc2Zvcm1TdGFnZShrZXlzWzBdLCBzdGFnZSk7XG4gICAgfSk7XG4gIH1cblxuICBzdGF0aWMgdHJhbnNmb3JtU3RhZ2Uoc3RhZ2VOYW1lLCBzdGFnZSkge1xuICAgIGNvbnN0IHNraXBLZXlzID0gWydkaXN0aW5jdCcsICd3aGVyZSddO1xuICAgIGlmIChza2lwS2V5cy5pbmNsdWRlcyhzdGFnZU5hbWUpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChzdGFnZU5hbWVbMF0gIT09ICckJykge1xuICAgICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLklOVkFMSURfUVVFUlksIGBJbnZhbGlkIGFnZ3JlZ2F0ZSBzdGFnZSAnJHtzdGFnZU5hbWV9Jy5gKTtcbiAgICB9XG4gICAgaWYgKHN0YWdlTmFtZSA9PT0gJyRncm91cCcpIHtcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc3RhZ2Vbc3RhZ2VOYW1lXSwgJ29iamVjdElkJykpIHtcbiAgICAgICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFxuICAgICAgICAgIFBhcnNlLkVycm9yLklOVkFMSURfUVVFUlksXG4gICAgICAgICAgYENhbm5vdCB1c2UgJ29iamVjdElkJyBpbiBhZ2dyZWdhdGlvbiBzdGFnZSAkZ3JvdXAuYFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc3RhZ2Vbc3RhZ2VOYW1lXSwgJ19pZCcpKSB7XG4gICAgICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihcbiAgICAgICAgICBQYXJzZS5FcnJvci5JTlZBTElEX1FVRVJZLFxuICAgICAgICAgIGBJbnZhbGlkIHBhcmFtZXRlciBmb3IgcXVlcnk6IGdyb3VwLiBNaXNzaW5nIGtleSBfaWRgXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB7IFtzdGFnZU5hbWVdOiBzdGFnZVtzdGFnZU5hbWVdIH07XG4gIH1cblxuICBtb3VudFJvdXRlcygpIHtcbiAgICB0aGlzLnJvdXRlKCdHRVQnLCAnL2FnZ3JlZ2F0ZS86Y2xhc3NOYW1lJywgbWlkZGxld2FyZS5wcm9taXNlRW5mb3JjZU1hc3RlcktleUFjY2VzcywgcmVxID0+IHtcbiAgICAgIHJldHVybiB0aGlzLmhhbmRsZUZpbmQocmVxKTtcbiAgICB9KTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBBZ2dyZWdhdGVSb3V0ZXI7XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLElBQUFBLEtBQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLFVBQUEsR0FBQUMsdUJBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFHLEtBQUEsR0FBQUosc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFJLGNBQUEsR0FBQUwsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFLLFlBQUEsR0FBQU4sc0JBQUEsQ0FBQUMsT0FBQTtBQUF3QyxTQUFBRSx3QkFBQUksQ0FBQSxFQUFBQyxDQUFBLDZCQUFBQyxPQUFBLE1BQUFDLENBQUEsT0FBQUQsT0FBQSxJQUFBRSxDQUFBLE9BQUFGLE9BQUEsWUFBQU4sdUJBQUEsWUFBQUEsQ0FBQUksQ0FBQSxFQUFBQyxDQUFBLFNBQUFBLENBQUEsSUFBQUQsQ0FBQSxJQUFBQSxDQUFBLENBQUFLLFVBQUEsU0FBQUwsQ0FBQSxNQUFBTSxDQUFBLEVBQUFDLENBQUEs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
@@ -27,7 +27,11 @@ class ClassesRouter extends _PromiseRouter.default {
27
27
  options.redirectClassNameForKey = String(body.redirectClassNameForKey);
28
28
  }
29
29
  if (typeof body.where === 'string') {
30
- body.where = JSON.parse(body.where);
30
+ try {
31
+ body.where = JSON.parse(body.where);
32
+ } catch {
33
+ throw new _node.default.Error(_node.default.Error.INVALID_JSON, 'where parameter is not valid JSON');
34
+ }
31
35
  }
32
36
  return _rest.default.find(req.config, req.auth, this.className(req), body.where, options, req.info.clientSDK, req.info.context).then(response => {
33
37
  return {
@@ -184,4 +188,4 @@ class ClassesRouter extends _PromiseRouter.default {
184
188
  }
185
189
  exports.ClassesRouter = ClassesRouter;
186
190
  var _default = exports.default = ClassesRouter;
187
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfUHJvbWlzZVJvdXRlciIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX3Jlc3QiLCJfbG9kYXNoIiwiX25vZGUiLCJfbWlkZGxld2FyZXMiLCJfRXJyb3IiLCJlIiwiX19lc01vZHVsZSIsImRlZmF1bHQiLCJBTExPV0VEX0dFVF9RVUVSWV9LRVlTIiwiQ2xhc3Nlc1JvdXRlciIsIlByb21pc2VSb3V0ZXIiLCJjbGFzc05hbWUiLCJyZXEiLCJwYXJhbXMiLCJoYW5kbGVGaW5kIiwiYm9keSIsIk9iamVjdCIsImFzc2lnbiIsIkpTT05Gcm9tUXVlcnkiLCJxdWVyeSIsIm9wdGlvbnMiLCJvcHRpb25zRnJvbUJvZHkiLCJjb25maWciLCJkZWZhdWx0TGltaXQiLCJtYXhMaW1pdCIsImxpbWl0IiwiTnVtYmVyIiwicmVkaXJlY3RDbGFzc05hbWVGb3JLZXkiLCJTdHJpbmciLCJ3aGVyZSIsIkpTT04iLCJwYXJzZSIsInJlc3QiLCJmaW5kIiwiYXV0aCIsImluZm8iLCJjbGllbnRTREsiLCJjb250ZXh0IiwidGhlbiIsInJlc3BvbnNlIiwiaGFuZGxlR2V0Iiwia2V5Iiwia2V5cyIsImluZGV4T2YiLCJQYXJzZSIsIkVycm9yIiwiSU5WQUxJRF9RVUVSWSIsImluY2x1ZGUiLCJleGNsdWRlS2V5cyIsInJlYWRQcmVmZXJlbmNlIiwiaW5jbHVkZVJlYWRQcmVmZXJlbmNlIiwic3VicXVlcnlSZWFkUHJlZmVyZW5jZSIsImdldCIsIm9iamVjdElkIiwicmVzdWx0cyIsImxlbmd0aCIsIk9CSkVDVF9OT1RfRk9VTkQiLCJzZXNzaW9uVG9rZW4iLCJ1c2VyIiwiaWQiLCJoYW5kbGVDcmVhdGUiLCJzdGFydHNXaXRoIiwiY3JlYXRlU2FuaXRpemVkRXJyb3IiLCJPUEVSQVRJT05fRk9SQklEREVOIiwiY3JlYXRlIiwiaGFuZGxlVXBkYXRlIiwidXBkYXRlIiwiaGFuZGxlRGVsZXRlIiwiZGVsIiwianNvbiIsInZhbHVlIiwiXyIsImVudHJpZXMiLCJhbGxvd0NvbnN0cmFpbnRzIiwic2tpcCIsIm9yZGVyIiwiY291bnQiLCJpbmNsdWRlQWxsIiwiaGludCIsImV4cGxhaW4iLCJjb21tZW50IiwibW91bnRSb3V0ZXMiLCJyb3V0ZSIsInByb21pc2VFbnN1cmVJZGVtcG90ZW5jeSIsImV4cG9ydHMiLCJfZGVmYXVsdCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9Sb3V0ZXJzL0NsYXNzZXNSb3V0ZXIuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFByb21pc2VSb3V0ZXIgZnJvbSAnLi4vUHJvbWlzZVJvdXRlcic7XG5pbXBvcnQgcmVzdCBmcm9tICcuLi9yZXN0JztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgUGFyc2UgZnJvbSAncGFyc2Uvbm9kZSc7XG5pbXBvcnQgeyBwcm9taXNlRW5zdXJlSWRlbXBvdGVuY3kgfSBmcm9tICcuLi9taWRkbGV3YXJlcyc7XG5pbXBvcnQgeyBjcmVhdGVTYW5pdGl6ZWRFcnJvciB9IGZyb20gJy4uL0Vycm9yJztcblxuY29uc3QgQUxMT1dFRF9HRVRfUVVFUllfS0VZUyA9IFtcbiAgJ2tleXMnLFxuICAnaW5jbHVkZScsXG4gICdleGNsdWRlS2V5cycsXG4gICdyZWFkUHJlZmVyZW5jZScsXG4gICdpbmNsdWRlUmVhZFByZWZlcmVuY2UnLFxuICAnc3VicXVlcnlSZWFkUHJlZmVyZW5jZScsXG5dO1xuXG5leHBvcnQgY2xhc3MgQ2xhc3Nlc1JvdXRlciBleHRlbmRzIFByb21pc2VSb3V0ZXIge1xuICBjbGFzc05hbWUocmVxKSB7XG4gICAgcmV0dXJuIHJlcS5wYXJhbXMuY2xhc3NOYW1lO1xuICB9XG5cbiAgaGFuZGxlRmluZChyZXEpIHtcbiAgICBjb25zdCBib2R5ID0gT2JqZWN0LmFzc2lnbihyZXEuYm9keSB8fCB7fSwgQ2xhc3Nlc1JvdXRlci5KU09ORnJvbVF1ZXJ5KHJlcS5xdWVyeSkpO1xuICAgIGNvbnN0IG9wdGlvbnMgPSBDbGFzc2VzUm91dGVyLm9wdGlvbnNGcm9tQm9keShib2R5LCByZXEuY29uZmlnLmRlZmF1bHRMaW1pdCk7XG4gICAgaWYgKHJlcS5jb25maWcubWF4TGltaXQgJiYgYm9keS5saW1pdCA+IHJlcS5jb25maWcubWF4TGltaXQpIHtcbiAgICAgIC8vIFNpbGVudGx5IHJlcGxhY2UgdGhlIGxpbWl0IG9uIHRoZSBxdWVyeSB3aXRoIHRoZSBtYXggY29uZmlndXJlZFxuICAgICAgb3B0aW9ucy5saW1pdCA9IE51bWJlcihyZXEuY29uZmlnLm1heExpbWl0KTtcbiAgICB9XG4gICAgaWYgKGJvZHkucmVkaXJlY3RDbGFzc05hbWVGb3JLZXkpIHtcbiAgICAgIG9wdGlvbnMucmVkaXJlY3RDbGFzc05hbWVGb3JLZXkgPSBTdHJpbmcoYm9keS5yZWRpcmVjdENsYXNzTmFtZUZvcktleSk7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgYm9keS53aGVyZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGJvZHkud2hlcmUgPSBKU09OLnBhcnNlKGJvZHkud2hlcmUpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdFxuICAgICAgLmZpbmQoXG4gICAgICAgIHJlcS5jb25maWcsXG4gICAgICAgIHJlcS5hdXRoLFxuICAgICAgICB0aGlzLmNsYXNzTmFtZShyZXEpLFxuICAgICAgICBib2R5LndoZXJlLFxuICAgICAgICBvcHRpb25zLFxuICAgICAgICByZXEuaW5mby5jbGllbnRTREssXG4gICAgICAgIHJlcS5pbmZvLmNvbnRleHRcbiAgICAgIClcbiAgICAgIC50aGVuKHJlc3BvbnNlID0+IHtcbiAgICAgICAgcmV0dXJuIHsgcmVzcG9uc2U6IHJlc3BvbnNlIH07XG4gICAgICB9KTtcbiAgfVxuXG4gIC8vIFJldHVybnMgYSBwcm9taXNlIGZvciBhIHtyZXNwb25zZX0gb2JqZWN0LlxuICBoYW5kbGVHZXQocmVxKSB7XG4gICAgY29uc3QgYm9keSA9IE9iamVjdC5hc3NpZ24ocmVxLmJvZHkgfHwge30sIENsYXNzZXNSb3V0ZXIuSlNPTkZyb21RdWVyeShyZXEucXVlcnkpKTtcbiAgICBjb25zdCBvcHRpb25zID0ge307XG5cbiAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhib2R5KSkge1xuICAgICAgaWYgKEFMTE9XRURfR0VUX1FVRVJZX0tFWVMuaW5kZXhPZihrZXkpID09PSAtMSkge1xuICAgICAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuSU5WQUxJRF9RVUVSWSwgJ0ltcHJvcGVyIGVuY29kZSBvZiBwYXJhbWV0ZXInKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoYm9keS5rZXlzICE9IG51bGwpIHtcbiAgICAgIG9wdGlvbnMua2V5cyA9IFN0cmluZyhib2R5LmtleXMpO1xuICAgIH1cbiAgICBpZiAoYm9keS5pbmNsdWRlICE9IG51bGwpIHtcbiAgICAgIG9wdGlvbnMuaW5jbHVkZSA9IFN0cmluZyhib2R5LmluY2x1ZGUpO1xuICAgIH1cbiAgICBpZiAoYm9keS5leGNsdWRlS2V5cyAhPSBudWxsKSB7XG4gICAgICBvcHRpb25zLmV4Y2x1ZGVLZXlzID0gU3RyaW5nKGJvZHkuZXhjbHVkZUtleXMpO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGJvZHkucmVhZFByZWZlcmVuY2UgPT09ICdzdHJpbmcnKSB7XG4gICAgICBvcHRpb25zLnJlYWRQcmVmZXJlbmNlID0gYm9keS5yZWFkUHJlZmVyZW5jZTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBib2R5LmluY2x1ZGVSZWFkUHJlZmVyZW5jZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIG9wdGlvbnMuaW5jbHVkZVJlYWRQcmVmZXJlbmNlID0gYm9keS5pbmNsdWRlUmVhZFByZWZlcmVuY2U7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgYm9keS5zdWJxdWVyeVJlYWRQcmVmZXJlbmNlID09PSAnc3RyaW5nJykge1xuICAgICAgb3B0aW9ucy5zdWJxdWVyeVJlYWRQcmVmZXJlbmNlID0gYm9keS5zdWJxdWVyeVJlYWRQcmVmZXJlbmNlO1xuICAgIH1cblxuICAgIHJldHVybiByZXN0XG4gICAgICAuZ2V0KFxuICAgICAgICByZXEuY29uZmlnLFxuICAgICAgICByZXEuYXV0aCxcbiAgICAgICAgdGhpcy5jbGFzc05hbWUocmVxKSxcbiAgICAgICAgcmVxLnBhcmFtcy5vYmplY3RJZCxcbiAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgcmVxLmluZm8uY2xpZW50U0RLLFxuICAgICAgICByZXEuaW5mby5jb250ZXh0XG4gICAgICApXG4gICAgICAudGhlbihyZXNwb25zZSA9PiB7XG4gICAgICAgIGlmICghcmVzcG9uc2UucmVzdWx0cyB8fCByZXNwb25zZS5yZXN1bHRzLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLk9CSkVDVF9OT1RfRk9VTkQsICdPYmplY3Qgbm90IGZvdW5kLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuY2xhc3NOYW1lKHJlcSkgPT09ICdfVXNlcicpIHtcbiAgICAgICAgICBkZWxldGUgcmVzcG9uc2UucmVzdWx0c1swXS5zZXNzaW9uVG9rZW47XG5cbiAgICAgICAgICBjb25zdCB1c2VyID0gcmVzcG9uc2UucmVzdWx0c1swXTtcblxuICAgICAgICAgIGlmIChyZXEuYXV0aC51c2VyICYmIHVzZXIub2JqZWN0SWQgPT0gcmVxLmF1dGgudXNlci5pZCkge1xuICAgICAgICAgICAgLy8gRm9yY2UgdGhlIHNlc3Npb24gdG9rZW5cbiAgICAgICAgICAgIHJlc3BvbnNlLnJlc3VsdHNbMF0uc2Vzc2lvblRva2VuID0gcmVxLmluZm8uc2Vzc2lvblRva2VuO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyByZXNwb25zZTogcmVzcG9uc2UucmVzdWx0c1swXSB9O1xuICAgICAgfSk7XG4gIH1cblxuICBoYW5kbGVDcmVhdGUocmVxKSB7XG4gICAgaWYgKFxuICAgICAgdGhpcy5jbGFzc05hbWUocmVxKSA9PT0gJ19Vc2VyJyAmJlxuICAgICAgdHlwZW9mIHJlcS5ib2R5Py5vYmplY3RJZCA9PT0gJ3N0cmluZycgJiZcbiAgICAgIHJlcS5ib2R5Lm9iamVjdElkLnN0YXJ0c1dpdGgoJ3JvbGU6JylcbiAgICApIHtcbiAgICAgIHRocm93IGNyZWF0ZVNhbml0aXplZEVycm9yKFBhcnNlLkVycm9yLk9QRVJBVElPTl9GT1JCSURERU4sICdJbnZhbGlkIG9iamVjdCBJRC4nLCByZXEuY29uZmlnKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3QuY3JlYXRlKFxuICAgICAgcmVxLmNvbmZpZyxcbiAgICAgIHJlcS5hdXRoLFxuICAgICAgdGhpcy5jbGFzc05hbWUocmVxKSxcbiAgICAgIHJlcS5ib2R5IHx8IHt9LFxuICAgICAgcmVxLmluZm8uY2xpZW50U0RLLFxuICAgICAgcmVxLmluZm8uY29udGV4dFxuICAgICk7XG4gIH1cblxuICBoYW5kbGVVcGRhdGUocmVxKSB7XG4gICAgY29uc3Qgd2hlcmUgPSB7IG9iamVjdElkOiByZXEucGFyYW1zLm9iamVjdElkIH07XG4gICAgcmV0dXJuIHJlc3QudXBkYXRlKFxuICAgICAgcmVxLmNvbmZpZyxcbiAgICAgIHJlcS5hdXRoLFxuICAgICAgdGhpcy5jbGFzc05hbWUocmVxKSxcbiAgICAgIHdoZXJlLFxuICAgICAgcmVxLmJvZHkgfHwge30sXG4gICAgICByZXEuaW5mby5jbGllbnRTREssXG4gICAgICByZXEuaW5mby5jb250ZXh0XG4gICAgKTtcbiAgfVxuXG4gIGhhbmRsZURlbGV0ZShyZXEpIHtcbiAgICByZXR1cm4gcmVzdFxuICAgICAgLmRlbChyZXEuY29uZmlnLCByZXEuYXV0aCwgdGhpcy5jbGFzc05hbWUocmVxKSwgcmVxLnBhcmFtcy5vYmplY3RJZCwgcmVxLmluZm8uY29udGV4dClcbiAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgcmV0dXJuIHsgcmVzcG9uc2U6IHt9IH07XG4gICAgICB9KTtcbiAgfVxuXG4gIHN0YXRpYyBKU09ORnJvbVF1ZXJ5KHF1ZXJ5KSB7XG4gICAgY29uc3QganNvbiA9IHt9O1xuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIF8uZW50cmllcyhxdWVyeSkpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGpzb25ba2V5XSA9IEpTT04ucGFyc2UodmFsdWUpO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIGpzb25ba2V5XSA9IHZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4ganNvbjtcbiAgfVxuXG4gIHN0YXRpYyBvcHRpb25zRnJvbUJvZHkoYm9keSwgZGVmYXVsdExpbWl0KSB7XG4gICAgY29uc3QgYWxsb3dDb25zdHJhaW50cyA9IFtcbiAgICAgICdza2lwJyxcbiAgICAgICdsaW1pdCcsXG4gICAgICAnb3JkZXInLFxuICAgICAgJ2NvdW50JyxcbiAgICAgICdrZXlzJyxcbiAgICAgICdleGNsdWRlS2V5cycsXG4gICAgICAnaW5jbHVkZScsXG4gICAgICAnaW5jbHVkZUFsbCcsXG4gICAgICAncmVkaXJlY3RDbGFzc05hbWVGb3JLZXknLFxuICAgICAgJ3doZXJlJyxcbiAgICAgICdyZWFkUHJlZmVyZW5jZScsXG4gICAgICAnaW5jbHVkZVJlYWRQcmVmZXJlbmNlJyxcbiAgICAgICdzdWJxdWVyeVJlYWRQcmVmZXJlbmNlJyxcbiAgICAgICdoaW50JyxcbiAgICAgICdleHBsYWluJyxcbiAgICAgICdjb21tZW50JyxcbiAgICBdO1xuXG4gICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMoYm9keSkpIHtcbiAgICAgIGlmIChhbGxvd0NvbnN0cmFpbnRzLmluZGV4T2Yoa2V5KSA9PT0gLTEpIHtcbiAgICAgICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLklOVkFMSURfUVVFUlksIGBJbnZhbGlkIHBhcmFtZXRlciBmb3IgcXVlcnk6ICR7a2V5fWApO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBvcHRpb25zID0ge307XG4gICAgaWYgKGJvZHkuc2tpcCkge1xuICAgICAgb3B0aW9ucy5za2lwID0gTnVtYmVyKGJvZHkuc2tpcCk7XG4gICAgfVxuICAgIGlmIChib2R5LmxpbWl0IHx8IGJvZHkubGltaXQgPT09IDApIHtcbiAgICAgIG9wdGlvbnMubGltaXQgPSBOdW1iZXIoYm9keS5saW1pdCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9wdGlvbnMubGltaXQgPSBOdW1iZXIoZGVmYXVsdExpbWl0KTtcbiAgICB9XG4gICAgaWYgKGJvZHkub3JkZXIpIHtcbiAgICAgIG9wdGlvbnMub3JkZXIgPSBTdHJpbmcoYm9keS5vcmRlcik7XG4gICAgfVxuICAgIGlmIChib2R5LmNvdW50KSB7XG4gICAgICBvcHRpb25zLmNvdW50ID0gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKGJvZHkua2V5cyAhPSBudWxsKSB7XG4gICAgICBvcHRpb25zLmtleXMgPSBTdHJpbmcoYm9keS5rZXlzKTtcbiAgICB9XG4gICAgaWYgKGJvZHkuZXhjbHVkZUtleXMgIT0gbnVsbCkge1xuICAgICAgb3B0aW9ucy5leGNsdWRlS2V5cyA9IFN0cmluZyhib2R5LmV4Y2x1ZGVLZXlzKTtcbiAgICB9XG4gICAgaWYgKGJvZHkuaW5jbHVkZSAhPSBudWxsKSB7XG4gICAgICBvcHRpb25zLmluY2x1ZGUgPSBTdHJpbmcoYm9keS5pbmNsdWRlKTtcbiAgICB9XG4gICAgaWYgKGJvZHkuaW5jbHVkZUFsbCkge1xuICAgICAgb3B0aW9ucy5pbmNsdWRlQWxsID0gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBib2R5LnJlYWRQcmVmZXJlbmNlID09PSAnc3RyaW5nJykge1xuICAgICAgb3B0aW9ucy5yZWFkUHJlZmVyZW5jZSA9IGJvZHkucmVhZFByZWZlcmVuY2U7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgYm9keS5pbmNsdWRlUmVhZFByZWZlcmVuY2UgPT09ICdzdHJpbmcnKSB7XG4gICAgICBvcHRpb25zLmluY2x1ZGVSZWFkUHJlZmVyZW5jZSA9IGJvZHkuaW5jbHVkZVJlYWRQcmVmZXJlbmNlO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGJvZHkuc3VicXVlcnlSZWFkUHJlZmVyZW5jZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIG9wdGlvbnMuc3VicXVlcnlSZWFkUHJlZmVyZW5jZSA9IGJvZHkuc3VicXVlcnlSZWFkUHJlZmVyZW5jZTtcbiAgICB9XG4gICAgaWYgKGJvZHkuaGludCAmJiAodHlwZW9mIGJvZHkuaGludCA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIGJvZHkuaGludCA9PT0gJ29iamVjdCcpKSB7XG4gICAgICBvcHRpb25zLmhpbnQgPSBib2R5LmhpbnQ7XG4gICAgfVxuICAgIGlmIChib2R5LmV4cGxhaW4pIHtcbiAgICAgIG9wdGlvbnMuZXhwbGFpbiA9IGJvZHkuZXhwbGFpbjtcbiAgICB9XG4gICAgaWYgKGJvZHkuY29tbWVudCAmJiB0eXBlb2YgYm9keS5jb21tZW50ID09PSAnc3RyaW5nJykge1xuICAgICAgb3B0aW9ucy5jb21tZW50ID0gYm9keS5jb21tZW50O1xuICAgIH1cbiAgICByZXR1cm4gb3B0aW9ucztcbiAgfVxuXG4gIG1vdW50Um91dGVzKCkge1xuICAgIHRoaXMucm91dGUoJ0dFVCcsICcvY2xhc3Nlcy86Y2xhc3NOYW1lJywgcmVxID0+IHtcbiAgICAgIHJldHVybiB0aGlzLmhhbmRsZUZpbmQocmVxKTtcbiAgICB9KTtcbiAgICB0aGlzLnJvdXRlKCdHRVQnLCAnL2NsYXNzZXMvOmNsYXNzTmFtZS86b2JqZWN0SWQnLCByZXEgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlR2V0KHJlcSk7XG4gICAgfSk7XG4gICAgdGhpcy5yb3V0ZSgnUE9TVCcsICcvY2xhc3Nlcy86Y2xhc3NOYW1lJywgcHJvbWlzZUVuc3VyZUlkZW1wb3RlbmN5LCByZXEgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlQ3JlYXRlKHJlcSk7XG4gICAgfSk7XG4gICAgdGhpcy5yb3V0ZSgnUFVUJywgJy9jbGFzc2VzLzpjbGFzc05hbWUvOm9iamVjdElkJywgcHJvbWlzZUVuc3VyZUlkZW1wb3RlbmN5LCByZXEgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlVXBkYXRlKHJlcSk7XG4gICAgfSk7XG4gICAgdGhpcy5yb3V0ZSgnREVMRVRFJywgJy9jbGFzc2VzLzpjbGFzc05hbWUvOm9iamVjdElkJywgcmVxID0+IHtcbiAgICAgIHJldHVybiB0aGlzLmhhbmRsZURlbGV0ZShyZXEpO1xuICAgIH0pO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IENsYXNzZXNSb3V0ZXI7XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLElBQUFBLGNBQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLEtBQUEsR0FBQUYsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFFLE9BQUEsR0FBQUgsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFHLEtBQUEsR0FBQUosc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFJLFlBQUEsR0FBQUosT0FBQTtBQUNBLElBQUFLLE1BQUEsR0FBQUwsT0FBQTtBQUFnRCxTQUFBRCx1QkFBQU8sQ0FBQSxXQUFBQSxDQUFBLElBQUFBLENBQUEsQ0FBQUMsVUFBQSxHQUFBRCxDQUFBLEtBQUFFLE9BQUEsRUFBQUYsQ0FBQTtBQUVoRCxNQUFNRyxzQkFBc0IsR0FBRyxDQUM3QixNQUFNLEVBQ04sU0FBUyxFQUNULGFBQWEsRUFDYixnQkFBZ0IsRUFDaEIsdUJBQXVCLEVBQ3ZCLHdCQUF3QixDQUN6QjtBQUVNLE1BQU1DLGFBQWEsU0FBU0Msc0JBQWEsQ0FBQztFQUMvQ0MsU0FBU0EsQ0FBQ0MsR0FBRyxFQUFFO0lBQ2IsT0FBT0EsR0FBRyxDQUFDQyxNQUFNLENBQUNGLFNBQVM7RUFDN0I7RUFFQUcsVUFBVUEsQ0FBQ0YsR0FBRyxFQUFFO0lBQ2QsTUFBTUcsSUFBSSxHQUFHQyxNQUFNLENBQUNDLE1BQU0sQ0FBQ0wsR0FBRyxDQUFDRyxJQUFJLElBQUksQ0FBQyxDQUFDLEVBQUVOLGFBQWEsQ0FBQ1MsYUFBYSxDQUFDTixHQUFHLENBQUNPLEtBQUssQ0FBQyxDQUFDO0lBQ2xGLE1BQU1D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
191
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfUHJvbWlzZVJvdXRlciIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX3Jlc3QiLCJfbG9kYXNoIiwiX25vZGUiLCJfbWlkZGxld2FyZXMiLCJfRXJyb3IiLCJlIiwiX19lc01vZHVsZSIsImRlZmF1bHQiLCJBTExPV0VEX0dFVF9RVUVSWV9LRVlTIiwiQ2xhc3Nlc1JvdXRlciIsIlByb21pc2VSb3V0ZXIiLCJjbGFzc05hbWUiLCJyZXEiLCJwYXJhbXMiLCJoYW5kbGVGaW5kIiwiYm9keSIsIk9iamVjdCIsImFzc2lnbiIsIkpTT05Gcm9tUXVlcnkiLCJxdWVyeSIsIm9wdGlvbnMiLCJvcHRpb25zRnJvbUJvZHkiLCJjb25maWciLCJkZWZhdWx0TGltaXQiLCJtYXhMaW1pdCIsImxpbWl0IiwiTnVtYmVyIiwicmVkaXJlY3RDbGFzc05hbWVGb3JLZXkiLCJTdHJpbmciLCJ3aGVyZSIsIkpTT04iLCJwYXJzZSIsIlBhcnNlIiwiRXJyb3IiLCJJTlZBTElEX0pTT04iLCJyZXN0IiwiZmluZCIsImF1dGgiLCJpbmZvIiwiY2xpZW50U0RLIiwiY29udGV4dCIsInRoZW4iLCJyZXNwb25zZSIsImhhbmRsZUdldCIsImtleSIsImtleXMiLCJpbmRleE9mIiwiSU5WQUxJRF9RVUVSWSIsImluY2x1ZGUiLCJleGNsdWRlS2V5cyIsInJlYWRQcmVmZXJlbmNlIiwiaW5jbHVkZVJlYWRQcmVmZXJlbmNlIiwic3VicXVlcnlSZWFkUHJlZmVyZW5jZSIsImdldCIsIm9iamVjdElkIiwicmVzdWx0cyIsImxlbmd0aCIsIk9CSkVDVF9OT1RfRk9VTkQiLCJzZXNzaW9uVG9rZW4iLCJ1c2VyIiwiaWQiLCJoYW5kbGVDcmVhdGUiLCJzdGFydHNXaXRoIiwiY3JlYXRlU2FuaXRpemVkRXJyb3IiLCJPUEVSQVRJT05fRk9SQklEREVOIiwiY3JlYXRlIiwiaGFuZGxlVXBkYXRlIiwidXBkYXRlIiwiaGFuZGxlRGVsZXRlIiwiZGVsIiwianNvbiIsInZhbHVlIiwiXyIsImVudHJpZXMiLCJhbGxvd0NvbnN0cmFpbnRzIiwic2tpcCIsIm9yZGVyIiwiY291bnQiLCJpbmNsdWRlQWxsIiwiaGludCIsImV4cGxhaW4iLCJjb21tZW50IiwibW91bnRSb3V0ZXMiLCJyb3V0ZSIsInByb21pc2VFbnN1cmVJZGVtcG90ZW5jeSIsImV4cG9ydHMiLCJfZGVmYXVsdCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9Sb3V0ZXJzL0NsYXNzZXNSb3V0ZXIuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFByb21pc2VSb3V0ZXIgZnJvbSAnLi4vUHJvbWlzZVJvdXRlcic7XG5pbXBvcnQgcmVzdCBmcm9tICcuLi9yZXN0JztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgUGFyc2UgZnJvbSAncGFyc2Uvbm9kZSc7XG5pbXBvcnQgeyBwcm9taXNlRW5zdXJlSWRlbXBvdGVuY3kgfSBmcm9tICcuLi9taWRkbGV3YXJlcyc7XG5pbXBvcnQgeyBjcmVhdGVTYW5pdGl6ZWRFcnJvciB9IGZyb20gJy4uL0Vycm9yJztcblxuY29uc3QgQUxMT1dFRF9HRVRfUVVFUllfS0VZUyA9IFtcbiAgJ2tleXMnLFxuICAnaW5jbHVkZScsXG4gICdleGNsdWRlS2V5cycsXG4gICdyZWFkUHJlZmVyZW5jZScsXG4gICdpbmNsdWRlUmVhZFByZWZlcmVuY2UnLFxuICAnc3VicXVlcnlSZWFkUHJlZmVyZW5jZScsXG5dO1xuXG5leHBvcnQgY2xhc3MgQ2xhc3Nlc1JvdXRlciBleHRlbmRzIFByb21pc2VSb3V0ZXIge1xuICBjbGFzc05hbWUocmVxKSB7XG4gICAgcmV0dXJuIHJlcS5wYXJhbXMuY2xhc3NOYW1lO1xuICB9XG5cbiAgaGFuZGxlRmluZChyZXEpIHtcbiAgICBjb25zdCBib2R5ID0gT2JqZWN0LmFzc2lnbihyZXEuYm9keSB8fCB7fSwgQ2xhc3Nlc1JvdXRlci5KU09ORnJvbVF1ZXJ5KHJlcS5xdWVyeSkpO1xuICAgIGNvbnN0IG9wdGlvbnMgPSBDbGFzc2VzUm91dGVyLm9wdGlvbnNGcm9tQm9keShib2R5LCByZXEuY29uZmlnLmRlZmF1bHRMaW1pdCk7XG4gICAgaWYgKHJlcS5jb25maWcubWF4TGltaXQgJiYgYm9keS5saW1pdCA+IHJlcS5jb25maWcubWF4TGltaXQpIHtcbiAgICAgIC8vIFNpbGVudGx5IHJlcGxhY2UgdGhlIGxpbWl0IG9uIHRoZSBxdWVyeSB3aXRoIHRoZSBtYXggY29uZmlndXJlZFxuICAgICAgb3B0aW9ucy5saW1pdCA9IE51bWJlcihyZXEuY29uZmlnLm1heExpbWl0KTtcbiAgICB9XG4gICAgaWYgKGJvZHkucmVkaXJlY3RDbGFzc05hbWVGb3JLZXkpIHtcbiAgICAgIG9wdGlvbnMucmVkaXJlY3RDbGFzc05hbWVGb3JLZXkgPSBTdHJpbmcoYm9keS5yZWRpcmVjdENsYXNzTmFtZUZvcktleSk7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgYm9keS53aGVyZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGJvZHkud2hlcmUgPSBKU09OLnBhcnNlKGJvZHkud2hlcmUpO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5JTlZBTElEX0pTT04sICd3aGVyZSBwYXJhbWV0ZXIgaXMgbm90IHZhbGlkIEpTT04nKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3RcbiAgICAgIC5maW5kKFxuICAgICAgICByZXEuY29uZmlnLFxuICAgICAgICByZXEuYXV0aCxcbiAgICAgICAgdGhpcy5jbGFzc05hbWUocmVxKSxcbiAgICAgICAgYm9keS53aGVyZSxcbiAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgcmVxLmluZm8uY2xpZW50U0RLLFxuICAgICAgICByZXEuaW5mby5jb250ZXh0XG4gICAgICApXG4gICAgICAudGhlbihyZXNwb25zZSA9PiB7XG4gICAgICAgIHJldHVybiB7IHJlc3BvbnNlOiByZXNwb25zZSB9O1xuICAgICAgfSk7XG4gIH1cblxuICAvLyBSZXR1cm5zIGEgcHJvbWlzZSBmb3IgYSB7cmVzcG9uc2V9IG9iamVjdC5cbiAgaGFuZGxlR2V0KHJlcSkge1xuICAgIGNvbnN0IGJvZHkgPSBPYmplY3QuYXNzaWduKHJlcS5ib2R5IHx8IHt9LCBDbGFzc2VzUm91dGVyLkpTT05Gcm9tUXVlcnkocmVxLnF1ZXJ5KSk7XG4gICAgY29uc3Qgb3B0aW9ucyA9IHt9O1xuXG4gICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMoYm9keSkpIHtcbiAgICAgIGlmIChBTExPV0VEX0dFVF9RVUVSWV9LRVlTLmluZGV4T2Yoa2V5KSA9PT0gLTEpIHtcbiAgICAgICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLklOVkFMSURfUVVFUlksICdJbXByb3BlciBlbmNvZGUgb2YgcGFyYW1ldGVyJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGJvZHkua2V5cyAhPSBudWxsKSB7XG4gICAgICBvcHRpb25zLmtleXMgPSBTdHJpbmcoYm9keS5rZXlzKTtcbiAgICB9XG4gICAgaWYgKGJvZHkuaW5jbHVkZSAhPSBudWxsKSB7XG4gICAgICBvcHRpb25zLmluY2x1ZGUgPSBTdHJpbmcoYm9keS5pbmNsdWRlKTtcbiAgICB9XG4gICAgaWYgKGJvZHkuZXhjbHVkZUtleXMgIT0gbnVsbCkge1xuICAgICAgb3B0aW9ucy5leGNsdWRlS2V5cyA9IFN0cmluZyhib2R5LmV4Y2x1ZGVLZXlzKTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBib2R5LnJlYWRQcmVmZXJlbmNlID09PSAnc3RyaW5nJykge1xuICAgICAgb3B0aW9ucy5yZWFkUHJlZmVyZW5jZSA9IGJvZHkucmVhZFByZWZlcmVuY2U7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgYm9keS5pbmNsdWRlUmVhZFByZWZlcmVuY2UgPT09ICdzdHJpbmcnKSB7XG4gICAgICBvcHRpb25zLmluY2x1ZGVSZWFkUHJlZmVyZW5jZSA9IGJvZHkuaW5jbHVkZVJlYWRQcmVmZXJlbmNlO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGJvZHkuc3VicXVlcnlSZWFkUHJlZmVyZW5jZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIG9wdGlvbnMuc3VicXVlcnlSZWFkUHJlZmVyZW5jZSA9IGJvZHkuc3VicXVlcnlSZWFkUHJlZmVyZW5jZTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdFxuICAgICAgLmdldChcbiAgICAgICAgcmVxLmNvbmZpZyxcbiAgICAgICAgcmVxLmF1dGgsXG4gICAgICAgIHRoaXMuY2xhc3NOYW1lKHJlcSksXG4gICAgICAgIHJlcS5wYXJhbXMub2JqZWN0SWQsXG4gICAgICAgIG9wdGlvbnMsXG4gICAgICAgIHJlcS5pbmZvLmNsaWVudFNESyxcbiAgICAgICAgcmVxLmluZm8uY29udGV4dFxuICAgICAgKVxuICAgICAgLnRoZW4ocmVzcG9uc2UgPT4ge1xuICAgICAgICBpZiAoIXJlc3BvbnNlLnJlc3VsdHMgfHwgcmVzcG9uc2UucmVzdWx0cy5sZW5ndGggPT0gMCkge1xuICAgICAgICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5PQkpFQ1RfTk9UX0ZPVU5ELCAnT2JqZWN0IG5vdCBmb3VuZC4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmNsYXNzTmFtZShyZXEpID09PSAnX1VzZXInKSB7XG4gICAgICAgICAgZGVsZXRlIHJlc3BvbnNlLnJlc3VsdHNbMF0uc2Vzc2lvblRva2VuO1xuXG4gICAgICAgICAgY29uc3QgdXNlciA9IHJlc3BvbnNlLnJlc3VsdHNbMF07XG5cbiAgICAgICAgICBpZiAocmVxLmF1dGgudXNlciAmJiB1c2VyLm9iamVjdElkID09IHJlcS5hdXRoLnVzZXIuaWQpIHtcbiAgICAgICAgICAgIC8vIEZvcmNlIHRoZSBzZXNzaW9uIHRva2VuXG4gICAgICAgICAgICByZXNwb25zZS5yZXN1bHRzWzBdLnNlc3Npb25Ub2tlbiA9IHJlcS5pbmZvLnNlc3Npb25Ub2tlbjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgcmVzcG9uc2U6IHJlc3BvbnNlLnJlc3VsdHNbMF0gfTtcbiAgICAgIH0pO1xuICB9XG5cbiAgaGFuZGxlQ3JlYXRlKHJlcSkge1xuICAgIGlmIChcbiAgICAgIHRoaXMuY2xhc3NOYW1lKHJlcSkgPT09ICdfVXNlcicgJiZcbiAgICAgIHR5cGVvZiByZXEuYm9keT8ub2JqZWN0SWQgPT09ICdzdHJpbmcnICYmXG4gICAgICByZXEuYm9keS5vYmplY3RJZC5zdGFydHNXaXRoKCdyb2xlOicpXG4gICAgKSB7XG4gICAgICB0aHJvdyBjcmVhdGVTYW5pdGl6ZWRFcnJvcihQYXJzZS5FcnJvci5PUEVSQVRJT05fRk9SQklEREVOLCAnSW52YWxpZCBvYmplY3QgSUQuJywgcmVxLmNvbmZpZyk7XG4gICAgfVxuICAgIHJldHVybiByZXN0LmNyZWF0ZShcbiAgICAgIHJlcS5jb25maWcsXG4gICAgICByZXEuYXV0aCxcbiAgICAgIHRoaXMuY2xhc3NOYW1lKHJlcSksXG4gICAgICByZXEuYm9keSB8fCB7fSxcbiAgICAgIHJlcS5pbmZvLmNsaWVudFNESyxcbiAgICAgIHJlcS5pbmZvLmNvbnRleHRcbiAgICApO1xuICB9XG5cbiAgaGFuZGxlVXBkYXRlKHJlcSkge1xuICAgIGNvbnN0IHdoZXJlID0geyBvYmplY3RJZDogcmVxLnBhcmFtcy5vYmplY3RJZCB9O1xuICAgIHJldHVybiByZXN0LnVwZGF0ZShcbiAgICAgIHJlcS5jb25maWcsXG4gICAgICByZXEuYXV0aCxcbiAgICAgIHRoaXMuY2xhc3NOYW1lKHJlcSksXG4gICAgICB3aGVyZSxcbiAgICAgIHJlcS5ib2R5IHx8IHt9LFxuICAgICAgcmVxLmluZm8uY2xpZW50U0RLLFxuICAgICAgcmVxLmluZm8uY29udGV4dFxuICAgICk7XG4gIH1cblxuICBoYW5kbGVEZWxldGUocmVxKSB7XG4gICAgcmV0dXJuIHJlc3RcbiAgICAgIC5kZWwocmVxLmNvbmZpZywgcmVxLmF1dGgsIHRoaXMuY2xhc3NOYW1lKHJlcSksIHJlcS5wYXJhbXMub2JqZWN0SWQsIHJlcS5pbmZvLmNvbnRleHQpXG4gICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgIHJldHVybiB7IHJlc3BvbnNlOiB7fSB9O1xuICAgICAgfSk7XG4gIH1cblxuICBzdGF0aWMgSlNPTkZyb21RdWVyeShxdWVyeSkge1xuICAgIGNvbnN0IGpzb24gPSB7fTtcbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBfLmVudHJpZXMocXVlcnkpKSB7XG4gICAgICB0cnkge1xuICAgICAgICBqc29uW2tleV0gPSBKU09OLnBhcnNlKHZhbHVlKTtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICBqc29uW2tleV0gPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGpzb247XG4gIH1cblxuICBzdGF0aWMgb3B0aW9uc0Zyb21Cb2R5KGJvZHksIGRlZmF1bHRMaW1pdCkge1xuICAgIGNvbnN0IGFsbG93Q29uc3RyYWludHMgPSBbXG4gICAgICAnc2tpcCcsXG4gICAgICAnbGltaXQnLFxuICAgICAgJ29yZGVyJyxcbiAgICAgICdjb3VudCcsXG4gICAgICAna2V5cycsXG4gICAgICAnZXhjbHVkZUtleXMnLFxuICAgICAgJ2luY2x1ZGUnLFxuICAgICAgJ2luY2x1ZGVBbGwnLFxuICAgICAgJ3JlZGlyZWN0Q2xhc3NOYW1lRm9yS2V5JyxcbiAgICAgICd3aGVyZScsXG4gICAgICAncmVhZFByZWZlcmVuY2UnLFxuICAgICAgJ2luY2x1ZGVSZWFkUHJlZmVyZW5jZScsXG4gICAgICAnc3VicXVlcnlSZWFkUHJlZmVyZW5jZScsXG4gICAgICAnaGludCcsXG4gICAgICAnZXhwbGFpbicsXG4gICAgICAnY29tbWVudCcsXG4gICAgXTtcblxuICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKGJvZHkpKSB7XG4gICAgICBpZiAoYWxsb3dDb25zdHJhaW50cy5pbmRleE9mKGtleSkgPT09IC0xKSB7XG4gICAgICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5JTlZBTElEX1FVRVJZLCBgSW52YWxpZCBwYXJhbWV0ZXIgZm9yIHF1ZXJ5OiAke2tleX1gKTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3Qgb3B0aW9ucyA9IHt9O1xuICAgIGlmIChib2R5LnNraXApIHtcbiAgICAgIG9wdGlvbnMuc2tpcCA9IE51bWJlcihib2R5LnNraXApO1xuICAgIH1cbiAgICBpZiAoYm9keS5saW1pdCB8fCBib2R5LmxpbWl0ID09PSAwKSB7XG4gICAgICBvcHRpb25zLmxpbWl0ID0gTnVtYmVyKGJvZHkubGltaXQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBvcHRpb25zLmxpbWl0ID0gTnVtYmVyKGRlZmF1bHRMaW1pdCk7XG4gICAgfVxuICAgIGlmIChib2R5Lm9yZGVyKSB7XG4gICAgICBvcHRpb25zLm9yZGVyID0gU3RyaW5nKGJvZHkub3JkZXIpO1xuICAgIH1cbiAgICBpZiAoYm9keS5jb3VudCkge1xuICAgICAgb3B0aW9ucy5jb3VudCA9IHRydWU7XG4gICAgfVxuICAgIGlmIChib2R5LmtleXMgIT0gbnVsbCkge1xuICAgICAgb3B0aW9ucy5rZXlzID0gU3RyaW5nKGJvZHkua2V5cyk7XG4gICAgfVxuICAgIGlmIChib2R5LmV4Y2x1ZGVLZXlzICE9IG51bGwpIHtcbiAgICAgIG9wdGlvbnMuZXhjbHVkZUtleXMgPSBTdHJpbmcoYm9keS5leGNsdWRlS2V5cyk7XG4gICAgfVxuICAgIGlmIChib2R5LmluY2x1ZGUgIT0gbnVsbCkge1xuICAgICAgb3B0aW9ucy5pbmNsdWRlID0gU3RyaW5nKGJvZHkuaW5jbHVkZSk7XG4gICAgfVxuICAgIGlmIChib2R5LmluY2x1ZGVBbGwpIHtcbiAgICAgIG9wdGlvbnMuaW5jbHVkZUFsbCA9IHRydWU7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgYm9keS5yZWFkUHJlZmVyZW5jZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIG9wdGlvbnMucmVhZFByZWZlcmVuY2UgPSBib2R5LnJlYWRQcmVmZXJlbmNlO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGJvZHkuaW5jbHVkZVJlYWRQcmVmZXJlbmNlID09PSAnc3RyaW5nJykge1xuICAgICAgb3B0aW9ucy5pbmNsdWRlUmVhZFByZWZlcmVuY2UgPSBib2R5LmluY2x1ZGVSZWFkUHJlZmVyZW5jZTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBib2R5LnN1YnF1ZXJ5UmVhZFByZWZlcmVuY2UgPT09ICdzdHJpbmcnKSB7XG4gICAgICBvcHRpb25zLnN1YnF1ZXJ5UmVhZFByZWZlcmVuY2UgPSBib2R5LnN1YnF1ZXJ5UmVhZFByZWZlcmVuY2U7XG4gICAgfVxuICAgIGlmIChib2R5LmhpbnQgJiYgKHR5cGVvZiBib2R5LmhpbnQgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBib2R5LmhpbnQgPT09ICdvYmplY3QnKSkge1xuICAgICAgb3B0aW9ucy5oaW50ID0gYm9keS5oaW50O1xuICAgIH1cbiAgICBpZiAoYm9keS5leHBsYWluKSB7XG4gICAgICBvcHRpb25zLmV4cGxhaW4gPSBib2R5LmV4cGxhaW47XG4gICAgfVxuICAgIGlmIChib2R5LmNvbW1lbnQgJiYgdHlwZW9mIGJvZHkuY29tbWVudCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIG9wdGlvbnMuY29tbWVudCA9IGJvZHkuY29tbWVudDtcbiAgICB9XG4gICAgcmV0dXJuIG9wdGlvbnM7XG4gIH1cblxuICBtb3VudFJvdXRlcygpIHtcbiAgICB0aGlzLnJvdXRlKCdHRVQnLCAnL2NsYXNzZXMvOmNsYXNzTmFtZScsIHJlcSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5oYW5kbGVGaW5kKHJlcSk7XG4gICAgfSk7XG4gICAgdGhpcy5yb3V0ZSgnR0VUJywgJy9jbGFzc2VzLzpjbGFzc05hbWUvOm9iamVjdElkJywgcmVxID0+IHtcbiAgICAgIHJldHVybiB0aGlzLmhhbmRsZUdldChyZXEpO1xuICAgIH0pO1xuICAgIHRoaXMucm91dGUoJ1BPU1QnLCAnL2NsYXNzZXMvOmNsYXNzTmFtZScsIHByb21pc2VFbnN1cmVJZGVtcG90ZW5jeSwgcmVxID0+IHtcbiAgICAgIHJldHVybiB0aGlzLmhhbmRsZUNyZWF0ZShyZXEpO1xuICAgIH0pO1xuICAgIHRoaXMucm91dGUoJ1BVVCcsICcvY2xhc3Nlcy86Y2xhc3NOYW1lLzpvYmplY3RJZCcsIHByb21pc2VFbnN1cmVJZGVtcG90ZW5jeSwgcmVxID0+IHtcbiAgICAgIHJldHVybiB0aGlzLmhhbmRsZVVwZGF0ZShyZXEpO1xuICAgIH0pO1xuICAgIHRoaXMucm91dGUoJ0RFTEVURScsICcvY2xhc3Nlcy86Y2xhc3NOYW1lLzpvYmplY3RJZCcsIHJlcSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5oYW5kbGVEZWxldGUocmVxKTtcbiAgICB9KTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBDbGFzc2VzUm91dGVyO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxJQUFBQSxjQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxLQUFBLEdBQUFGLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBRSxPQUFBLEdBQUFILHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBRyxLQUFBLEdBQUFKLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBSSxZQUFBLEdBQUFKLE9BQUE7QUFDQSxJQUFBSyxNQUFBLEdBQUFMLE9BQUE7QUFBZ0QsU0FBQUQsdUJBQUFPLENBQUEsV0FBQUEsQ0FBQSxJQUFBQSxDQUFBLENBQUFDLFVBQUEsR0FBQUQsQ0FBQSxLQUFBRSxPQUFBLEVBQUFGLENBQUE7QUFFaEQsTUFBTUcsc0JBQXNCLEdBQUcsQ0FDN0IsTUFBTSxFQUNOLFNBQVMsRUFDVCxhQUFhLEVBQ2IsZ0JBQWdCLEVBQ2hCLHVCQUF1QixFQUN2Qix3QkFBd0IsQ0FDekI7QUFFTSxNQUFNQyxhQUFhLFNBQVNDLHNCQUFhLENBQUM7RUFDL0NDLFNBQVNBLENBQUNDLEdBQUcsRUFBRTtJQUNiLE9BQU9BLEdBQUcsQ0FBQ0MsTUFBTSxDQUFDRixTQUFTO0VBQzdCO0VBRUFHLFVBQVVBLENBQUNG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
@@ -333,7 +333,8 @@ class FilesRouter {
333
333
  } else if (contentType && contentType.includes('/')) {
334
334
  extension = contentType.split('/')[1];
335
335
  }
336
- extension = extension?.split(' ')?.join('');
336
+ // Strip MIME parameters (e.g. ";charset=utf-8") and whitespace
337
+ extension = extension?.split(';')[0]?.replace(/\s+/g, '');
337
338
  if (extension && !isValidExtension(extension)) {
338
339
  next(new _node.default.Error(_node.default.Error.FILE_SAVE_ERROR, `File upload of extension ${extension} is disabled.`));
339
340
  return;
@@ -387,7 +388,7 @@ class FilesRouter {
387
388
  }
388
389
 
389
390
  // Dispatch to the appropriate handler based on whether the body was buffered
390
- if (req.body instanceof Buffer) {
391
+ if (Buffer.isBuffer(req.body)) {
391
392
  return this._handleBufferedUpload(req, res, next);
392
393
  }
393
394
  return this._handleStreamUpload(req, res, next);
@@ -713,4 +714,4 @@ function isFileStreamable(req, filesController) {
713
714
  const end = Number(range[1]);
714
715
  return (!isNaN(start) || !isNaN(end)) && typeof filesController.adapter.handleFileStream === 'function';
715
716
  }
716
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZXhwcmVzcyIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiTWlkZGxld2FyZXMiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsIl9ub2RlIiwiX0NvbmZpZyIsIl9sb2dnZXIiLCJfc3RyZWFtIiwiX0Vycm9yIiwiZSIsInQiLCJXZWFrTWFwIiwiciIsIm4iLCJfX2VzTW9kdWxlIiwibyIsImkiLCJmIiwiX19wcm90b19fIiwiZGVmYXVsdCIsImhhcyIsImdldCIsInNldCIsImhhc093blByb3BlcnR5IiwiY2FsbCIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwidHJpZ2dlcnMiLCJVdGlscyIsImNyZWF0ZVNpemVMaW1pdGVkU3RyZWFtIiwic291cmNlIiwibWF4Qnl0ZXMiLCJ0b3RhbEJ5dGVzIiwic3RhcnRlZCIsInNvdXJjZUVuZGVkIiwib25EYXRhIiwib25FbmQiLCJvbkVycm9yIiwib3V0cHV0IiwiUmVhZGFibGUiLCJyZWFkIiwiY2h1bmsiLCJsZW5ndGgiLCJkZXN0cm95IiwiUGFyc2UiLCJFcnJvciIsIkZJTEVfU0FWRV9FUlJPUiIsInB1c2giLCJwYXVzZSIsImVyciIsIm9uIiwicmVzdW1lIiwiY2FsbGJhY2siLCJyZW1vdmVMaXN0ZW5lciIsIlJFU0VSVkVEX0RJUkVDVE9SWV9TRUdNRU5UUyIsImV4cG9ydHMiLCJGaWxlc1JvdXRlciIsImV4cHJlc3NSb3V0ZXIiLCJtYXhVcGxvYWRTaXplIiwicm91dGVyIiwiZXhwcmVzcyIsIlJvdXRlciIsIm1ldGFkYXRhSGFuZGxlciIsImdldEhhbmRsZXIiLCJwb3N0IiwicmVxIiwicmVzIiwibmV4dCIsIklOVkFMSURfRklMRV9OQU1FIiwiX2Vhcmx5SGVhZGVyc01pZGRsZXdhcmUiLCJfYm9keVBhcnNpbmdNaWRkbGV3YXJlIiwiaGFuZGxlUGFyc2VIZWFkZXJzIiwiaGFuZGxlUGFyc2VTZXNzaW9uIiwiY3JlYXRlSGFuZGxlciIsImJpbmQiLCJkZWxldGUiLCJlbmZvcmNlTWFzdGVyS2V5QWNjZXNzIiwiZGVsZXRlSGFuZGxlciIsIl9nZXRGaWxlbmFtZUZyb21QYXJhbXMiLCJwYXJ0cyIsInBhcmFtcyIsImZpbGVwYXRoIiwiQXJyYXkiLCJpc0FycmF5Iiwiam9pbiIsInZhbGlkYXRlRGlyZWN0b3J5IiwiZGlyZWN0b3J5IiwiaW5jbHVkZXMiLCJzdGFydHNXaXRoIiwiZW5kc1dpdGgiLCJmaXJzdFNlZ21lbnQiLCJzcGxpdCIsImRpclJlZ2V4IiwidGVzdCIsImNvbmZpZyIsIkNvbmZpZyIsImFwcElkIiwiZXJyb3IiLCJjcmVhdGVTYW5pdGl6ZWRIdHRwRXJyb3IiLCJzdGF0dXMiLCJqc29uIiwibWVzc2FnZSIsImZpbGVuYW1lIiwiZmlsZXNDb250cm9sbGVyIiwibWltZSIsImNvbnRlbnRUeXBlIiwiZ2V0VHlwZSIsImZpbGUiLCJGaWxlIiwiYmFzZTY0IiwidHJpZ2dlclJlc3VsdCIsIm1heWJlUnVuRmlsZVRyaWdnZXIiLCJUeXBlcyIsImJlZm9yZUZpbmQiLCJhdXRoIiwiX25hbWUiLCJkZWZhdWx0UmVzcG9uc2VIZWFkZXJzIiwiaXNGaWxlU3RyZWFtYWJsZSIsImtleSIsInZhbHVlIiwiZW50cmllcyIsImhhbmRsZUZpbGVTdHJlYW0iLCJjYXRjaCIsImVuZCIsImRhdGEiLCJnZXRGaWxlRGF0YSIsInRvU3RyaW5nIiwiYWZ0ZXJGaW5kIiwiZm9yY2VEb3dubG9hZCIsInJlc3BvbnNlSGVhZGVycyIsIkJ1ZmZlciIsImZyb20iLCJfZGF0YSIsInJlc29sdmVFcnJvciIsImNvZGUiLCJTQ1JJUFRfRkFJTEVEIiwibWF4VXBsb2FkU2l6ZU92ZXJyaWRlIiwidW5kZWZpbmVkIiwibWFzdGVyS2V5IiwibG9hZE1hc3RlcktleSIsIm1hc3RlcktleUlwcyIsImNoZWNrSXAiLCJpcCIsIm1hc3RlcktleUlwc1N0b3JlIiwicGFyc2VkQnl0ZXMiLCJwYXJzZVNpemVUb0J5dGVzIiwiX21heFVwbG9hZFNpemVPdmVycmlkZSIsImRlZmF1bHRNYXhCeXRlcyIsIl9tYXhVcGxvYWRTaXplQnl0ZXMiLCJsaW1pdCIsInJhdyIsInR5cGUiLCJpc1JlYWRPbmx5IiwidXNlciIsImlzTWFzdGVyIiwiaXNMaW5rZWQiLCJBbm9ueW1vdXNVdGlscyIsImZpbGVVcGxvYWQiLCJlbmFibGVGb3JBbm9ueW1vdXNVc2VyIiwiZW5hYmxlRm9yQXV0aGVudGljYXRlZFVzZXIiLCJlbmFibGVGb3JQdWJsaWMiLCJ2YWxpZGF0ZUZpbGVuYW1lIiwiZmlsZUV4dGVuc2lvbnMiLCJpc1ZhbGlkRXh0ZW5zaW9uIiwiZXh0ZW5zaW9uIiwic29tZSIsImV4dCIsInJlZ2V4IiwiUmVnRXhwIiwic3Vic3RyaW5nIiwibGFzdEluZGV4T2YiLCJmaWxlRGF0YSIsInBhcnNlZCIsIkpTT04iLCJwYXJzZSIsIm1ldGFkYXRhIiwiSU5WQUxJRF9KU09OIiwidGFncyIsIk9QRVJBVElPTl9GT1JCSURERU4iLCJkaXJlY3RvcnlFcnJvciIsImJvZHkiLCJfaGFuZGxlQnVmZmVyZWRVcGxvYWQiLCJfaGFuZGxlU3RyZWFtVXBsb2FkIiwiY2hlY2tQcm9oaWJpdGVkS2V5d29yZHMiLCJJTlZBTElEX0tFWV9OQU1FIiwic2V0VGFncyIsInNldE1ldGFkYXRhIiwic2V0RGlyZWN0b3J5IiwiZmlsZVNpemUiLCJieXRlTGVuZ3RoIiwiZmlsZU9iamVjdCIsImJlZm9yZVNhdmUiLCJzYXZlUmVzdWx0IiwidXJsIiwibmFtZSIsImJ1ZmZlckRhdGEiLCJfc291cmNlIiwiZm9ybWF0IiwiYnVmZmVyIiwiZmlsZU9wdGlvbnMiLCJfbWV0YWRhdGEiLCJmaWxlVGFncyIsImtleXMiLCJfdGFncyIsImFzc2lnbiIsIl9kaXJlY3RvcnkiLCJjcmVhdGVGaWxlUmVzdWx0IiwiY3JlYXRlRmlsZSIsIl91cmwiLCJfcmVxdWVzdFRhc2siLCJfcHJldmlvdXNTYXZlIiwiUHJvbWlzZSIsInJlc29sdmUiLCJhZnRlclNhdmUiLCJsb2dnZXIiLCJzdHJlYW0iLCJjb250ZW50TGVuZ3RoIiwicGFyc2VJbnQiLCJoYXNFeHRlbnNpb24iLCJzb3VyY2VUeXBlIiwiYWRhcHRlciIsImdldEZpbGVMb2NhdGlvbiIsImJlZm9yZURlbGV0ZSIsImRlbGV0ZUZpbGUiLCJhZnRlckRlbGV0ZSIsIkZJTEVfREVMRVRFX0VSUk9SIiwiZ2V0TWV0YWRhdGEiLCJyYW5nZSIsInN0YXJ0IiwiTnVtYmVyIiwiaXNOYU4iXSwic291cmNlcyI6WyIuLi8uLi9zcmMvUm91dGVycy9GaWxlc1JvdXRlci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZXhwcmVzcyBmcm9tICdleHByZXNzJztcbmltcG9ydCAqIGFzIE1pZGRsZXdhcmVzIGZyb20gJy4uL21pZGRsZXdhcmVzJztcbmltcG9ydCBQYXJzZSBmcm9tICdwYXJzZS9ub2RlJztcbmltcG9ydCBDb25maWcgZnJvbSAnLi4vQ29uZmlnJztcbmltcG9ydCBsb2dnZXIgZnJvbSAnLi4vbG9nZ2VyJztcbmNvbnN0IHRyaWdnZXJzID0gcmVxdWlyZSgnLi4vdHJpZ2dlcnMnKTtcbmNvbnN0IFV0aWxzID0gcmVxdWlyZSgnLi4vVXRpbHMnKTtcbmltcG9ydCB7IFJlYWRhYmxlIH0gZnJvbSAnc3RyZWFtJztcbmltcG9ydCB7IGNyZWF0ZVNhbml0aXplZEh0dHBFcnJvciB9IGZyb20gJy4uL0Vycm9yJztcblxuLyoqXG4gKiBXcmFwcyBhIHJlYWRhYmxlIHN0cmVhbSBpbiBhIFJlYWRhYmxlIHRoYXQgZW5mb3JjZXMgYSBieXRlIHNpemUgbGltaXQuXG4gKiBEYXRhIGZsb3cgaXMgbGF6eTogdGhlIHNvdXJjZSBpcyBub3QgcmVhZCB1bnRpbCBhIGNvbnN1bWVyIHN0YXJ0cyByZWFkaW5nXG4gKiBmcm9tIHRoZSByZXR1cm5lZCBzdHJlYW0gKHZpYSBwaXBlIG9yICdkYXRhJyBsaXN0ZW5lcikuIFRoaXMgZW5zdXJlcyB0aGVcbiAqIGNvbnN1bWVyJ3MgZXJyb3IgbGlzdGVuZXIgaXMgYXR0YWNoZWQgYmVmb3JlIGFueSBkYXRhIChvciBlcnJvcikgaXMgZW1pdHRlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVNpemVMaW1pdGVkU3RyZWFtKHNvdXJjZSwgbWF4Qnl0ZXMpIHtcbiAgbGV0IHRvdGFsQnl0ZXMgPSAwO1xuICBsZXQgc3RhcnRlZCA9IGZhbHNlO1xuICBsZXQgc291cmNlRW5kZWQgPSBmYWxzZTtcbiAgbGV0IG9uRGF0YSwgb25FbmQsIG9uRXJyb3I7XG5cbiAgY29uc3Qgb3V0cHV0ID0gbmV3IFJlYWRhYmxlKHtcbiAgICByZWFkKCkge1xuICAgICAgaWYgKCFzdGFydGVkKSB7XG4gICAgICAgIHN0YXJ0ZWQgPSB0cnVlO1xuXG4gICAgICAgIG9uRGF0YSA9IChjaHVuaykgPT4ge1xuICAgICAgICAgIHRvdGFsQnl0ZXMgKz0gY2h1bmsubGVuZ3RoO1xuICAgICAgICAgIGlmICh0b3RhbEJ5dGVzID4gbWF4Qnl0ZXMpIHtcbiAgICAgICAgICAgIG91dHB1dC5kZXN0cm95KFxuICAgICAgICAgICAgICBuZXcgUGFyc2UuRXJyb3IoXG4gICAgICAgICAgICAgICAgUGFyc2UuRXJyb3IuRklMRV9TQVZFX0VSUk9SLFxuICAgICAgICAgICAgICAgIGBGaWxlIHNpemUgZXhjZWVkcyBtYXhpbXVtIGFsbG93ZWQ6ICR7bWF4Qnl0ZXN9IGJ5dGVzLmBcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCFvdXRwdXQucHVzaChjaHVuaykpIHtcbiAgICAgICAgICAgIHNvdXJjZS5wYXVzZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBvbkVuZCA9ICgpID0+IHtcbiAgICAgICAgICBzb3VyY2VFbmRlZCA9IHRydWU7XG4gICAgICAgICAgb3V0cHV0LnB1c2gobnVsbCk7XG4gICAgICAgIH07XG5cbiAgICAgICAgb25FcnJvciA9IChlcnIpID0+IG91dHB1dC5kZXN0cm95KGVycik7XG5cbiAgICAgICAgc291cmNlLm9uKCdkYXRhJywgb25EYXRhKTtcbiAgICAgICAgc291cmNlLm9uKCdlbmQnLCBvbkVuZCk7XG4gICAgICAgIHNvdXJjZS5vbignZXJyb3InLCBvbkVycm9yKTtcbiAgICAgIH1cblxuICAgICAgLy8gUmVzdW1lIHNvdXJjZSBpbiBjYXNlIGl0IHdhcyBwYXVzZWQgZHVlIHRvIGJhY2twcmVzc3VyZVxuICAgICAgaWYgKCFzb3VyY2VFbmRlZCkge1xuICAgICAgICBzb3VyY2UucmVzdW1lKCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBkZXN0cm95KGVyciwgY2FsbGJhY2spIHtcbiAgICAgIGlmIChvbkRhdGEpIHtcbiAgICAgICAgc291cmNlLnJlbW92ZUxpc3RlbmVyKCdkYXRhJywgb25EYXRhKTtcbiAgICAgIH1cbiAgICAgIGlmIChvbkVuZCkge1xuICAgICAgICBzb3VyY2UucmVtb3ZlTGlzdGVuZXIoJ2VuZCcsIG9uRW5kKTtcbiAgICAgIH1cbiAgICAgIGlmIChvbkVycm9yKSB7XG4gICAgICAgIHNvdXJjZS5yZW1vdmVMaXN0ZW5lcignZXJyb3InLCBvbkVycm9yKTtcbiAgICAgIH1cbiAgICAgIC8vIFN1cHByZXNzIGVycm9ycyBlbWl0dGVkIGR1cmluZyBkcmFpbiAoZS5nLiBjbGllbnQgZGlzY29ubmVjdClcbiAgICAgIHNvdXJjZS5vbignZXJyb3InLCAoKSA9PiB7fSk7XG4gICAgICBpZiAoIXNvdXJjZUVuZGVkKSB7XG4gICAgICAgIHNvdXJjZS5yZXN1bWUoKTtcbiAgICAgIH1cbiAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gb3V0cHV0O1xufVxuXG4vLyBTZWdtZW50cyB0aGF0IGNvbmZsaWN0IHdpdGggc3ViLXJvdXRlcyB1bmRlciBHRVQgL2ZpbGVzLzphcHBJZC8qLiBJZiBhIGZpbGVcbi8vIGRpcmVjdG9yeSBzdGFydHMgd2l0aCBvbmUgb2YgdGhlc2UsIGl0cyBVUkwgd291bGQgbWF0Y2ggdGhlIHdyb25nIHJvdXRlXG4vLyBoYW5kbGVyLiBVcGRhdGUgdGhpcyBsaXN0IHdoZW4gYWRkaW5nIG5ldyBzdWItcm91dGVzIHRvIGV4cHJlc3NSb3V0ZXIoKS5cbmV4cG9ydCBjb25zdCBSRVNFUlZFRF9ESVJFQ1RPUllfU0VHTUVOVFMgPSBbJ21ldGFkYXRhJ107XG5cbmV4cG9ydCBjbGFzcyBGaWxlc1JvdXRlciB7XG4gIGV4cHJlc3NSb3V0ZXIoeyBtYXhVcGxvYWRTaXplID0gJzIwTWInIH0gPSB7fSkge1xuICAgIHZhciByb3V0ZXIgPSBleHByZXNzLlJvdXRlcigpO1xuICAgIC8vIE1ldGFkYXRhIHJvdXRlIG11c3QgY29tZSBiZWZvcmUgdGhlIGNhdGNoLWFsbCBHRVQgcm91dGVcbiAgICByb3V0ZXIuZ2V0KCcvZmlsZXMvOmFwcElkL21ldGFkYXRhLypmaWxlcGF0aCcsIHRoaXMubWV0YWRhdGFIYW5kbGVyKTtcbiAgICByb3V0ZXIuZ2V0KCcvZmlsZXMvOmFwcElkLypmaWxlcGF0aCcsIHRoaXMuZ2V0SGFuZGxlcik7XG5cbiAgICByb3V0ZXIucG9zdCgnL2ZpbGVzJywgZnVuY3Rpb24gKHJlcSwgcmVzLCBuZXh0KSB7XG4gICAgICBuZXh0KG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5JTlZBTElEX0ZJTEVfTkFNRSwgJ0ZpbGVuYW1lIG5vdCBwcm92aWRlZC4nKSk7XG4gICAgfSk7XG5cbiAgICByb3V0ZXIucG9zdChcbiAgICAgICcvZmlsZXMvOmZpbGVuYW1lJyxcbiAgICAgIHRoaXMuX2Vhcmx5SGVhZGVyc01pZGRsZXdhcmUoKSxcbiAgICAgIHRoaXMuX2JvZHlQYXJzaW5nTWlkZGxld2FyZShtYXhVcGxvYWRTaXplKSxcbiAgICAgIE1pZGRsZXdhcmVzLmhhbmRsZVBhcnNlSGVhZGVycyxcbiAgICAgIE1pZGRsZXdhcmVzLmhhbmRsZVBhcnNlU2Vzc2lvbixcbiAgICAgIHRoaXMuY3JlYXRlSGFuZGxlci5iaW5kKHRoaXMpXG4gICAgKTtcblxuICAgIHJvdXRlci5kZWxldGUoXG4gICAgICAnL2ZpbGVzLypmaWxlcGF0aCcsXG4gICAgICBNaWRkbGV3YXJlcy5oYW5kbGVQYXJzZUhlYWRlcnMsXG4gICAgICBNaWRkbGV3YXJlcy5oYW5kbGVQYXJzZVNlc3Npb24sXG4gICAgICBNaWRkbGV3YXJlcy5lbmZvcmNlTWFzdGVyS2V5QWNjZXNzLFxuICAgICAgdGhpcy5kZWxldGVIYW5kbGVyXG4gICAgKTtcbiAgICByZXR1cm4gcm91dGVyO1xuICB9XG5cbiAgc3RhdGljIF9nZXRGaWxlbmFtZUZyb21QYXJhbXMocmVxKSB7XG4gICAgY29uc3QgcGFydHMgPSByZXEucGFyYW1zLmZpbGVwYXRoO1xuICAgIHJldHVybiBBcnJheS5pc0FycmF5KHBhcnRzKSA/IHBhcnRzLmpvaW4oJy8nKSA6IHBhcnRzO1xuICB9XG5cbiAgc3RhdGljIHZhbGlkYXRlRGlyZWN0b3J5KGRpcmVjdG9yeSkge1xuICAgIGlmICh0eXBlb2YgZGlyZWN0b3J5ICE9PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5JTlZBTElEX0ZJTEVfTkFNRSwgJ0RpcmVjdG9yeSBtdXN0IGJlIGEgc3RyaW5nLicpO1xuICAgIH1cbiAgICBpZiAoZGlyZWN0b3J5Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5JTlZBTElEX0ZJTEVfTkFNRSwgJ0RpcmVjdG9yeSBtdXN0IG5vdCBiZSBlbXB0eS4nKTtcbiAgICB9XG4gICAgaWYgKGRpcmVjdG9yeS5sZW5ndGggPiAyNTYpIHtcbiAgICAgIHJldHVybiBuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuSU5WQUxJRF9GSUxFX05BTUUsICdEaXJlY3RvcnkgcGF0aCBpcyB0b28gbG9uZy4nKTtcbiAgICB9XG4gICAgaWYgKGRpcmVjdG9yeS5pbmNsdWRlcygnLi4nKSkge1xuICAgICAgcmV0dXJuIG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5JTlZBTElEX0ZJTEVfTkFNRSwgJ0RpcmVjdG9yeSBtdXN0IG5vdCBjb250YWluIFwiLi5cIi4nKTtcbiAgICB9XG4gICAgaWYgKGRpcmVjdG9yeS5zdGFydHNXaXRoKCcvJykgfHwgZGlyZWN0b3J5LmVuZHNXaXRoKCcvJykpIHtcbiAgICAgIHJldHVybiBuZXcgUGFyc2UuRXJyb3IoXG4gICAgICAgIFBhcnNlLkVycm9yLklOVkFMSURfRklMRV9OQU1FLFxuICAgICAgICAnRGlyZWN0b3J5IG11c3Qgbm90IHN0YXJ0IG9yIGVuZCB3aXRoIFwiL1wiLidcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChkaXJlY3RvcnkuaW5jbHVkZXMoJy8vJykpIHtcbiAgICAgIHJldHVybiBuZXcgUGFyc2UuRXJyb3IoXG4gICAgICAgIFBhcnNlLkVycm9yLklOVkFMSURfRklMRV9OQU1FLFxuICAgICAgICAnRGlyZWN0b3J5IG11c3Qgbm90IGNvbnRhaW4gY29uc2VjdXRpdmUgc2xhc2hlcy4nXG4gICAgICApO1xuICAgIH1cbiAgICBjb25zdCBmaXJzdFNlZ21lbnQgPSBkaXJlY3Rvcnkuc3BsaXQoJy8nKVswXTtcbiAgICBpZiAoUkVTRVJWRURfRElSRUNUT1JZX1NFR01FTlRTLmluY2x1ZGVzKGZpcnN0U2VnbWVudCkpIHtcbiAgICAgIHJldHVybiBuZXcgUGFyc2UuRXJyb3IoXG4gICAgICAgIFBhcnNlLkVycm9yLklOVkFMSURfRklMRV9OQU1FLFxuICAgICAgICBgRGlyZWN0b3J5IG11c3Qgbm90IHN0YXJ0IHdpdGggcmVzZXJ2ZWQgc2VnbWVudCBcIiR7Zmlyc3RTZWdtZW50fVwiLmBcbiAgICAgICk7XG4gICAgfVxuICAgIGNvbnN0IGRpclJlZ2V4ID0gL15bYS16QS1aMC05XVthLXpBLVowLTlfXFwtL10qJC87XG4gICAgaWYgKCFkaXJSZWdleC50ZXN0KGRpcmVjdG9yeSkpIHtcbiAgICAgIHJldHVybiBuZXcgUGFyc2UuRXJyb3IoXG4gICAgICAgIFBhcnNlLkVycm9yLklOVkFMSURfRklMRV9OQU1FLFxuICAgICAgICAnRGlyZWN0b3J5IGNvbnRhaW5zIGludmFsaWQgY2hhcmFjdGVycy4nXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGFzeW5jIGdldEhhbmRsZXIocmVxLCByZXMpIHtcbiAgICBjb25zdCBjb25maWcgPSBDb25maWcuZ2V0KHJlcS5wYXJhbXMuYXBwSWQpO1xuICAgIGlmICghY29uZmlnKSB7XG4gICAgICBjb25zdCBlcnJvciA9IGNyZWF0ZVNhbml0aXplZEh0dHBFcnJvcig0MDMsICdJbnZhbGlkIGFwcGxpY2F0aW9uIElELicsIGNvbmZpZyk7XG4gICAgICByZXMuc3RhdHVzKGVycm9yLnN0YXR1cyk7XG4gICAgICByZXMuanNvbih7IGVycm9yOiBlcnJvci5tZXNzYWdlIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxldCBmaWxlbmFtZSA9IEZpbGVzUm91dGVyLl9nZXRGaWxlbmFtZUZyb21QYXJhbXMocmVxKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgZmlsZXNDb250cm9sbGVyID0gY29uZmlnLmZpbGVzQ29udHJvbGxlcjtcbiAgICAgIGNvbnN0IG1pbWUgPSAoYXdhaXQgaW1wb3J0KCdtaW1lJykpLmRlZmF1bHQ7XG4gICAgICBsZXQgY29udGVudFR5cGUgPSBtaW1lLmdldFR5cGUoZmlsZW5hbWUpO1xuICAgICAgbGV0IGZpbGUgPSBuZXcgUGFyc2UuRmlsZShmaWxlbmFtZSwgeyBiYXNlNjQ6ICcnIH0sIGNvbnRlbnRUeXBlKTtcbiAgICAgIGNvbnN0IHRyaWdnZXJSZXN1bHQgPSBhd2FpdCB0cmlnZ2Vycy5tYXliZVJ1bkZpbGVUcmlnZ2VyKFxuICAgICAgICB0cmlnZ2Vycy5UeXBlcy5iZWZvcmVGaW5kLFxuICAgICAgICB7IGZpbGUgfSxcbiAgICAgICAgY29uZmlnLFxuICAgICAgICByZXEuYXV0aFxuICAgICAgKTtcbiAgICAgIGlmICh0cmlnZ2VyUmVzdWx0Py5maWxlPy5fbmFtZSkge1xuICAgICAgICBmaWxlbmFtZSA9IHRyaWdnZXJSZXN1bHQ/LmZpbGU/Ll9uYW1lO1xuICAgICAgICBjb250ZW50VHlwZSA9IG1pbWUuZ2V0VHlwZShmaWxlbmFtZSk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGRlZmF1bHRSZXNwb25zZUhlYWRlcnMgPSB7ICdYLUNvbnRlbnQtVHlwZS1PcHRpb25zJzogJ25vc25pZmYnIH07XG5cbiAgICAgIGlmIChpc0ZpbGVTdHJlYW1hYmxlKHJlcSwgZmlsZXNDb250cm9sbGVyKSkge1xuICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhkZWZhdWx0UmVzcG9uc2VIZWFkZXJzKSkge1xuICAgICAgICAgIHJlcy5zZXQoa2V5LCB2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgZmlsZXNDb250cm9sbGVyLmhhbmRsZUZpbGVTdHJlYW0oY29uZmlnLCBmaWxlbmFtZSwgcmVxLCByZXMsIGNvbnRlbnRUeXBlKS5jYXRjaCgoKSA9PiB7XG4gICAgICAgICAgcmVzLnN0YXR1cyg0MDQpO1xuICAgICAgICAgIHJlcy5zZXQoJ0NvbnRlbnQtVHlwZScsICd0ZXh0L3BsYWluJyk7XG4gICAgICAgICAgcmVzLmVuZCgnRmlsZSBub3QgZm91bmQuJyk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGxldCBkYXRhID0gYXdhaXQgZmlsZXNDb250cm9sbGVyLmdldEZpbGVEYXRhKGNvbmZpZywgZmlsZW5hbWUpLmNhdGNoKCgpID0+IHtcbiAgICAgICAgcmVzLnN0YXR1cyg0MDQpO1xuICAgICAgICByZXMuc2V0KCdDb250ZW50LVR5cGUnLCAndGV4dC9wbGFpbicpO1xuICAgICAgICByZXMuZW5kKCdGaWxlIG5vdCBmb3VuZC4nKTtcbiAgICAgIH0pO1xuICAgICAgaWYgKCFkYXRhKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGZpbGUgPSBuZXcgUGFyc2UuRmlsZShmaWxlbmFtZSwgeyBiYXNlNjQ6IGRhdGEudG9TdHJpbmcoJ2Jhc2U2NCcpIH0sIGNvbnRlbnRUeXBlKTtcbiAgICAgIGNvbnN0IGFmdGVyRmluZCA9IGF3YWl0IHRyaWdnZXJzLm1heWJlUnVuRmlsZVRyaWdnZXIoXG4gICAgICAgIHRyaWdnZXJzLlR5cGVzLmFmdGVyRmluZCxcbiAgICAgICAgeyBmaWxlLCBmb3JjZURvd25sb2FkOiBmYWxzZSwgcmVzcG9uc2VIZWFkZXJzOiB7IC4uLmRlZmF1bHRSZXNwb25zZUhlYWRlcnMgfSB9LFxuICAgICAgICBjb25maWcsXG4gICAgICAgIHJlcS5hdXRoXG4gICAgICApO1xuXG4gICAgICBpZiAoYWZ0ZXJGaW5kPy5maWxlKSB7XG4gICAgICAgIGNvbnRlbnRUeXBlID0gbWltZS5nZXRUeXBlKGFmdGVyRmluZC5maWxlLl9uYW1lKTtcbiAgICAgICAgZGF0YSA9IEJ1ZmZlci5mcm9tKGFmdGVyRmluZC5maWxlLl9kYXRhLCAnYmFzZTY0Jyk7XG4gICAgICB9XG5cbiAgICAgIHJlcy5zdGF0dXMoMjAwKTtcbiAgICAgIHJlcy5zZXQoJ0NvbnRlbnQtVHlwZScsIGNvbnRlbnRUeXBlKTtcbiAgICAgIHJlcy5zZXQoJ0NvbnRlbnQtTGVuZ3RoJywgZGF0YS5sZW5ndGgpO1xuICAgICAgaWYgKGFmdGVyRmluZC5mb3JjZURvd25sb2FkKSB7XG4gICAgICAgIHJlcy5zZXQoJ0NvbnRlbnQtRGlzcG9zaXRpb24nLCBgYXR0YWNobWVudDtmaWxlbmFtZT0ke2FmdGVyRmluZC5maWxlLl9uYW1lfWApO1xuICAgICAgfVxuICAgICAgaWYgKGFmdGVyRmluZC5yZXNwb25zZUhlYWRlcnMpIHtcbiAgICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoYWZ0ZXJGaW5kLnJlc3BvbnNlSGVhZGVycykpIHtcbiAgICAgICAgICByZXMuc2V0KGtleSwgdmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXMuZW5kKGRhdGEpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnN0IGVyciA9IHRyaWdnZXJzLnJlc29sdmVFcnJvcihlLCB7XG4gICAgICAgIGNvZGU6IFBhcnNlLkVycm9yLlNDUklQVF9GQUlMRUQsXG4gICAgICAgIG1lc3NhZ2U6IGBDb3VsZCBub3QgZmluZCBmaWxlOiAke2ZpbGVuYW1lfS5gLFxuICAgICAgfSk7XG4gICAgICByZXMuc3RhdHVzKDQwMyk7XG4gICAgICByZXMuanNvbih7IGNvZGU6IGVyci5jb2RlLCBlcnJvcjogZXJyLm1lc3NhZ2UgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIE1pZGRsZXdhcmUgdGhhdCBydW5zIGJlZm9yZSBib2R5IHBhcnNpbmcgdG8gaGFuZGxlIGhlYWRlcnMgdGhhdCBtdXN0IGJlXG4gICAqIHJlc29sdmVkIGJlZm9yZSB0aGUgcmVxdWVzdCBib2R5IGlzIGNvbnN1bWVkLiBDdXJyZW50bHkgc3VwcG9ydHM6XG4gICAqXG4gICAqIC0gYFgtUGFyc2UtRmlsZS1NYXgtVXBsb2FkLVNpemVgOiBPdmVycmlkZXMgdGhlIHNlcnZlci13aWRlIGBtYXhVcGxvYWRTaXplYFxuICAgKiAgIGZvciB0aGlzIHJlcXVlc3QuIFJlcXVpcmVzIHRoZSBtYXN0ZXIga2V5LiBUaGUgdmFsdWUgdXNlcyB0aGUgc2FtZSBmb3JtYXRcbiAgICogICBhcyB0aGUgc2VydmVyIG9wdGlvbiAoZS5nLiBgJzUwbWInYCwgYCcxZ2InYCkuIFNldHMgYHJlcS5fbWF4VXBsb2FkU2l6ZU92ZXJyaWRlYFxuICAgKiAgIChpbiBieXRlcykgZm9yIGBfYm9keVBhcnNpbmdNaWRkbGV3YXJlYCB0byB1c2UuXG4gICAqL1xuICBfZWFybHlIZWFkZXJzTWlkZGxld2FyZSgpIHtcbiAgICByZXR1cm4gYXN5bmMgKHJlcSwgcmVzLCBuZXh0KSA9PiB7XG4gICAgICBjb25zdCBtYXhVcGxvYWRTaXplT3ZlcnJpZGUgPSByZXEuZ2V0KCdYLVBhcnNlLUZpbGUtTWF4LVVwbG9hZC1TaXplJyk7XG4gICAgICBpZiAoIW1heFVwbG9hZFNpemVPdmVycmlkZSkge1xuICAgICAgICByZXR1cm4gbmV4dCgpO1xuICAgICAgfVxuICAgICAgY29uc3QgYXBwSWQgPSByZXEuZ2V0KCdYLVBhcnNlLUFwcGxpY2F0aW9uLUlkJyk7XG4gICAgICBjb25zdCBjb25maWcgPSBDb25maWcuZ2V0KGFwcElkKTtcbiAgICAgIGlmICghY29uZmlnKSB7XG4gICAgICAgIGNvbnN0IGVycm9yID0gY3JlYXRlU2FuaXRpemVkSHR0cEVycm9yKDQwMywgJ0ludmFsaWQgYXBwbGljYXRpb24gSUQuJywgdW5kZWZpbmVkKTtcbiAgICAgICAgcmVzLnN0YXR1cyhlcnJvci5zdGF0dXMpO1xuICAgICAgICByZXMuanNvbih7IGVycm9yOiBlcnJvci5tZXNzYWdlIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCBtYXN0ZXJLZXkgPSBhd2FpdCBjb25maWcubG9hZE1hc3RlcktleSgpO1xuICAgICAgaWYgKHJlcS5nZXQoJ1gtUGFyc2UtTWFzdGVyLUtleScpICE9PSBtYXN0ZXJLZXkpIHtcbiAgICAgICAgY29uc3QgZXJyb3IgPSBjcmVhdGVTYW5pdGl6ZWRIdHRwRXJyb3IoNDAzLCAndW5hdXRob3JpemVkOiBtYXN0ZXIga2V5IGlzIHJlcXVpcmVkJywgY29uZmlnKTtcbiAgICAgICAgcmVzLnN0YXR1cyhlcnJvci5zdGF0dXMpO1xuICAgICAgICByZXMuanNvbih7IGVycm9yOiBlcnJvci5tZXNzYWdlIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoY29uZmlnLm1hc3RlcktleUlwcz8ubGVuZ3RoICYmICFNaWRkbGV3YXJlcy5jaGVja0lwKHJlcS5pcCwgY29uZmlnLm1hc3RlcktleUlwcywgY29uZmlnLm1hc3RlcktleUlwc1N0b3JlKSkge1xuICAgICAgICBjb25zdCBlcnJvciA9IGNyZWF0ZVNhbml0aXplZEh0dHBFcnJvcig0MDMsICd1bmF1dGhvcml6ZWQ6IG1hc3RlciBrZXkgaXMgcmVxdWlyZWQnLCBjb25maWcpO1xuICAgICAgICByZXMuc3RhdHVzKGVycm9yLnN0YXR1cyk7XG4gICAgICAgIHJlcy5qc29uKHsgZXJyb3I6IGVycm9yLm1lc3NhZ2UgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGxldCBwYXJzZWRCeXRlcztcbiAgICAgIHRyeSB7XG4gICAgICAgIHBhcnNlZEJ5dGVzID0gVXRpbHMucGFyc2VTaXplVG9CeXRlcyhtYXhVcGxvYWRTaXplT3ZlcnJpZGUpO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIHJldHVybiBuZXh0KFxuICAgICAgICAgIG5ldyBQYXJzZS5FcnJvcihcbiAgICAgICAgICAgIFBhcnNlLkVycm9yLkZJTEVfU0FWRV9FUlJPUixcbiAgICAgICAgICAgIGBJbnZhbGlkIG1heFVwbG9hZFNpemUgb3ZlcnJpZGUgdmFsdWU6ICR7bWF4VXBsb2FkU2l6ZU92ZXJyaWRlfWBcbiAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXEuX21heFVwbG9hZFNpemVPdmVycmlkZSA9IHBhcnNlZEJ5dGVzO1xuICAgICAgbmV4dCgpO1xuICAgIH07XG4gIH1cblxuICBfYm9keVBhcnNpbmdNaWRkbGV3YXJlKG1heFVwbG9hZFNpemUpIHtcbiAgICBjb25zdCBkZWZhdWx0TWF4Qnl0ZXMgPSBVdGlscy5wYXJzZVNpemVUb0J5dGVzKG1heFVwbG9hZFNpemUpO1xuICAgIHJldHVybiAocmVxLCByZXMsIG5leHQpID0+IHtcbiAgICAgIGlmIChyZXEuZ2V0KCdYLVBhcnNlLVVwbG9hZC1Nb2RlJykgPT09ICdzdHJlYW0nKSB7XG4gICAgICAgIHJlcS5fbWF4VXBsb2FkU2l6ZUJ5dGVzID0gcmVxLl9tYXhVcGxvYWRTaXplT3ZlcnJpZGUgPz8gZGVmYXVsdE1heEJ5dGVzO1xuICAgICAgICByZXR1cm4gbmV4dCgpO1xuICAgICAgfVxuICAgICAgY29uc3QgbGltaXQgPSByZXEuX21heFVwbG9hZFNpemVPdmVycmlkZSA/PyBtYXhVcGxvYWRTaXplO1xuICAgICAgcmV0dXJuIGV4cHJlc3MucmF3KHsgdHlwZTogKCkgPT4gdHJ1ZSwgbGltaXQgfSkocmVxLCByZXMsIG5leHQpO1xuICAgIH07XG4gIH1cblxuICBhc3luYyBjcmVhdGVIYW5kbGVyKHJlcSwgcmVzLCBuZXh0KSB7XG4gICAgaWYgKHJlcS5hdXRoLmlzUmVhZE9ubHkpIHtcbiAgICAgIGNvbnN0IGVycm9yID0gY3JlYXRlU2FuaXRpemVkSHR0cEVycm9yKDQwMywgXCJyZWFkLW9ubHkgbWFzdGVyS2V5IGlzbid0IGFsbG93ZWQgdG8gY3JlYXRlIGEgZmlsZS5cIiwgcmVxLmNvbmZpZyk7XG4gICAgICByZXMuc3RhdHVzKGVycm9yLnN0YXR1cyk7XG4gICAgICByZXMuZW5kKGB7XCJlcnJvclwiOlwiJHtlcnJvci5tZXNzYWdlfVwifWApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBjb25maWcgPSByZXEuY29uZmlnO1xuICAgIGNvbnN0IHVzZXIgPSByZXEuYXV0aC51c2VyO1xuICAgIGNvbnN0IGlzTWFzdGVyID0gcmVxLmF1dGguaXNNYXN0ZXI7XG4gICAgY29uc3QgaXNMaW5rZWQgPSB1c2VyICYmIFBhcnNlLkFub255bW91c1V0aWxzLmlzTGlua2VkKHVzZXIpO1xuICAgIGlmICghaXNNYXN0ZXIgJiYgIWNvbmZpZy5maWxlVXBsb2FkLmVuYWJsZUZvckFub255bW91c1VzZXIgJiYgaXNMaW5rZWQpIHtcbiAgICAgIG5leHQoXG4gICAgICAgIG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5GSUxFX1NBVkVfRVJST1IsICdGaWxlIHVwbG9hZCBieSBhbm9ueW1vdXMgdXNlciBpcyBkaXNhYmxlZC4nKVxuICAgICAgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCFpc01hc3RlciAmJiAhY29uZmlnLmZpbGVVcGxvYWQuZW5hYmxlRm9yQXV0aGVudGljYXRlZFVzZXIgJiYgIWlzTGlua2VkICYmIHVzZXIpIHtcbiAgICAgIG5leHQoXG4gICAgICAgIG5ldyBQYXJzZS5FcnJvcihcbiAgICAgICAgICBQYXJzZS5FcnJvci5GSUxFX1NBVkVfRVJST1IsXG4gICAgICAgICAgJ0ZpbGUgdXBsb2FkIGJ5IGF1dGhlbnRpY2F0ZWQgdXNlciBpcyBkaXNhYmxlZC4nXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICghaXNNYXN0ZXIgJiYgIWNvbmZpZy5maWxlVXBsb2FkLmVuYWJsZUZvclB1YmxpYyAmJiAhdXNlcikge1xuICAgICAgbmV4dChuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuRklMRV9TQVZFX0VSUk9SLCAnRmlsZSB1cGxvYWQgYnkgcHVibGljIGlzIGRpc2FibGVkLicpKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgZmlsZXNDb250cm9sbGVyID0gY29uZmlnLmZpbGVzQ29udHJvbGxlcjtcbiAgICBjb25zdCB7IGZpbGVuYW1lIH0gPSByZXEucGFyYW1zO1xuICAgIGNvbnN0IGNvbnRlbnRUeXBlID0gcmVxLmdldCgnQ29udGVudC10eXBlJyk7XG5cbiAgICBjb25zdCBlcnJvciA9IGZpbGVzQ29udHJvbGxlci52YWxpZGF0ZUZpbGVuYW1lKGZpbGVuYW1lKTtcbiAgICBpZiAoZXJyb3IpIHtcbiAgICAgIG5leHQoZXJyb3IpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGZpbGVFeHRlbnNpb25zID0gY29uZmlnLmZpbGVVcGxvYWQ/LmZpbGVFeHRlbnNpb25zO1xuICAgIGlmICghaXNNYXN0ZXIgJiYgZmlsZUV4dGVuc2lvbnMpIHtcbiAgICAgIGNvbnN0IGlzVmFsaWRFeHRlbnNpb24gPSBleHRlbnNpb24gPT4ge1xuICAgICAgICByZXR1cm4gZmlsZUV4dGVuc2lvbnMuc29tZShleHQgPT4ge1xuICAgICAgICAgIGlmIChleHQgPT09ICcqJykge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IHJlZ2V4ID0gbmV3IFJlZ0V4cChleHQpO1xuICAgICAgICAgIGlmIChyZWdleC50ZXN0KGV4dGVuc2lvbikpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgICAgbGV0IGV4dGVuc2lvbiA9IGNvbnRlbnRUeXBlO1xuICAgICAgaWYgKGZpbGVuYW1lICYmIGZpbGVuYW1lLmluY2x1ZGVzKCcuJykpIHtcbiAgICAgICAgZXh0ZW5zaW9uID0gZmlsZW5hbWUuc3Vic3RyaW5nKGZpbGVuYW1lLmxhc3RJbmRleE9mKCcuJykgKyAxKTtcbiAgICAgIH0gZWxzZSBpZiAoY29udGVudFR5cGUgJiYgY29udGVudFR5cGUuaW5jbHVkZXMoJy8nKSkge1xuICAgICAgICBleHRlbnNpb24gPSBjb250ZW50VHlwZS5zcGxpdCgnLycpWzFdO1xuICAgICAgfVxuICAgICAgZXh0ZW5zaW9uID0gZXh0ZW5zaW9uPy5zcGxpdCgnICcpPy5qb2luKCcnKTtcblxuICAgICAgaWYgKGV4dGVuc2lvbiAmJiAhaXNWYWxpZEV4dGVuc2lvbihleHRlbnNpb24pKSB7XG4gICAgICAgIG5leHQoXG4gICAgICAgICAgbmV3IFBhcnNlLkVycm9yKFxuICAgICAgICAgICAgUGFyc2UuRXJyb3IuRklMRV9TQVZFX0VSUk9SLFxuICAgICAgICAgICAgYEZpbGUgdXBsb2FkIG9mIGV4dGVuc2lvbiAke2V4dGVuc2lvbn0gaXMgZGlzYWJsZWQuYFxuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEZvciBzdHJlYW1pbmcgdXBsb2FkcywgcmVhZCBmaWxlIGRhdGEgZnJvbSBoZWFkZXJzIHNpbmNlIHRoZSBib2R5IGlzIHRoZSByYXcgc3RyZWFtXG4gICAgaWYgKHJlcS5nZXQoJ1gtUGFyc2UtVXBsb2FkLU1vZGUnKSA9PT0gJ3N0cmVhbScpIHtcbiAgICAgIHJlcS5maWxlRGF0YSA9IHt9O1xuICAgICAgaWYgKHJlcS5nZXQoJ1gtUGFyc2UtRmlsZS1EaXJlY3RvcnknKSkge1xuICAgICAgICByZXEuZmlsZURhdGEuZGlyZWN0b3J5ID0gcmVxLmdldCgnWC1QYXJzZS1GaWxlLURpcmVjdG9yeScpO1xuICAgICAgfVxuICAgICAgaWYgKHJlcS5nZXQoJ1gtUGFyc2UtRmlsZS1NZXRhZGF0YScpKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgcGFyc2VkID0gSlNPTi5wYXJzZShyZXEuZ2V0KCdYLVBhcnNlLUZpbGUtTWV0YWRhdGEnKSk7XG4gICAgICAgICAgaWYgKCFwYXJzZWQgfHwgdHlwZW9mIHBhcnNlZCAhPT0gJ29iamVjdCcgfHwgQXJyYXkuaXNBcnJheShwYXJzZWQpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmVxLmZpbGVEYXRhLm1ldGFkYXRhID0gcGFyc2VkO1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICBuZXh0KG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5JTlZBTElEX0pTT04sICdJbnZhbGlkIEpTT04gaW4gWC1QYXJzZS1GaWxlLU1ldGFkYXRhIGhlYWRlci4nKSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAocmVxLmdldCgnWC1QYXJzZS1GaWxlLVRhZ3MnKSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHBhcnNlZCA9IEpTT04ucGFyc2UocmVxLmdldCgnWC1QYXJzZS1GaWxlLVRhZ3MnKSk7XG4gICAgICAgICAgaWYgKCFwYXJzZWQgfHwgdHlwZW9mIHBhcnNlZCAhPT0gJ29iamVjdCcgfHwgQXJyYXkuaXNBcnJheShwYXJzZWQpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmVxLmZpbGVEYXRhLnRhZ3MgPSBwYXJzZWQ7XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgIG5leHQobmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLklOVkFMSURfSlNPTiwgJ0ludmFsaWQgSlNPTiBpbiBYLVBhcnNlLUZpbGUtVGFncyBoZWFkZXIuJykpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFZhbGlkYXRlIGRpcmVjdG9yeSBvcHRpb24gKHJlcXVpcmVzIG1hc3RlciBrZXkpXG4gICAgY29uc3QgZGlyZWN0b3J5ID0gcmVxLmZpbGVEYXRhPy5kaXJlY3Rvcnk7XG4gICAgaWYgKGRpcmVjdG9yeSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAoIWlzTWFzdGVyKSB7XG4gICAgICAgIG5leHQoXG4gICAgICAgICAgbmV3IFBhcnNlLkVycm9yKFxuICAgICAgICAgICAgUGFyc2UuRXJyb3IuT1BFUkFUSU9OX0ZPUkJJRERFTixcbiAgICAgICAgICAgICdEaXJlY3RvcnkgY2FuIG9ubHkgYmUgc2V0IHVzaW5nIHRoZSBNYXN0ZXIgS2V5LidcbiAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGRpcmVjdG9yeUVycm9yID0gRmlsZXNSb3V0ZXIudmFsaWRhdGVEaXJlY3RvcnkoZGlyZWN0b3J5KTtcbiAgICAgIGlmIChkaXJlY3RvcnlFcnJvcikge1xuICAgICAgICBuZXh0KGRpcmVjdG9yeUVycm9yKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIERpc3BhdGNoIHRvIHRoZSBhcHByb3ByaWF0ZSBoYW5kbGVyIGJhc2VkIG9uIHdoZXRoZXIgdGhlIGJvZHkgd2FzIGJ1ZmZlcmVkXG4gICAgaWYgKHJlcS5ib2R5IGluc3RhbmNlb2YgQnVmZmVyKSB7XG4gICAgICByZXR1cm4gdGhpcy5faGFuZGxlQnVmZmVyZWRVcGxvYWQocmVxLCByZXMsIG5leHQpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5faGFuZGxlU3RyZWFtVXBsb2FkKHJlcSwgcmVzLCBuZXh0KTtcbiAgfVxuXG4gIGFzeW5jIF9oYW5kbGVCdWZmZXJlZFVwbG9hZChyZXEsIHJlcywgbmV4dCkge1xuICAgIGNvbnN0IGNvbmZpZyA9IHJlcS5jb25maWc7XG4gICAgY29uc3QgZmlsZXNDb250cm9sbGVyID0gY29uZmlnLmZpbGVzQ29udHJvbGxlcjtcbiAgICBjb25zdCB7IGZpbGVuYW1lIH0gPSByZXEucGFyYW1zO1xuICAgIGNvbnN0IGNvbnRlbnRUeXBlID0gcmVxLmdldCgnQ29udGVudC10eXBlJyk7XG5cbiAgICBpZiAoIXJlcS5ib2R5IHx8ICFyZXEuYm9keS5sZW5ndGgpIHtcbiAgICAgIG5leHQobmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLkZJTEVfU0FWRV9FUlJPUiwgJ0ludmFsaWQgZmlsZSB1cGxvYWQuJykpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGJhc2U2NCA9IHJlcS5ib2R5LnRvU3RyaW5nKCdiYXNlNjQnKTtcbiAgICBjb25zdCBmaWxlID0gbmV3IFBhcnNlLkZpbGUoZmlsZW5hbWUsIHsgYmFzZTY0IH0sIGNvbnRlbnRUeXBlKTtcbiAgICBjb25zdCB7IG1ldGFkYXRhID0ge30sIHRhZ3MgPSB7fSwgZGlyZWN0b3J5IH0gPSByZXEuZmlsZURhdGEgfHwge307XG4gICAgdHJ5IHtcbiAgICAgIC8vIFNjYW4gcmVxdWVzdCBkYXRhIGZvciBkZW5pZWQga2V5d29yZHNcbiAgICAgIFV0aWxzLmNoZWNrUHJvaGliaXRlZEtleXdvcmRzKGNvbmZpZywgbWV0YWRhdGEpO1xuICAgICAgVXRpbHMuY2hlY2tQcm9oaWJpdGVkS2V5d29yZHMoY29uZmlnLCB0YWdzKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbmV4dChuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuSU5WQUxJRF9LRVlfTkFNRSwgZXJyb3IpKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZmlsZS5zZXRUYWdzKHRhZ3MpO1xuICAgIGZpbGUuc2V0TWV0YWRhdGEobWV0YWRhdGEpO1xuICAgIGlmIChkaXJlY3RvcnkpIHtcbiAgICAgIGZpbGUuc2V0RGlyZWN0b3J5KGRpcmVjdG9yeSk7XG4gICAgfVxuICAgIGNvbnN0IGZpbGVTaXplID0gQnVmZmVyLmJ5dGVMZW5ndGgocmVxLmJvZHkpO1xuICAgIGNvbnN0IGZpbGVPYmplY3QgPSB7IGZpbGUsIGZpbGVTaXplIH07XG4gICAgdHJ5IHtcbiAgICAgIC8vIHJ1biBiZWZvcmVTYXZlRmlsZSB0cmlnZ2VyXG4gICAgICBjb25zdCB0cmlnZ2VyUmVzdWx0ID0gYXdhaXQgdHJpZ2dlcnMubWF5YmVSdW5GaWxlVHJpZ2dlcihcbiAgICAgICAgdHJpZ2dlcnMuVHlwZXMuYmVmb3JlU2F2ZSxcbiAgICAgICAgZmlsZU9iamVjdCxcbiAgICAgICAgY29uZmlnLFxuICAgICAgICByZXEuYXV0aFxuICAgICAgKTtcbiAgICAgIGxldCBzYXZlUmVzdWx0O1xuICAgICAgLy8gaWYgYSBuZXcgUGFyc2VGaWxlIGlzIHJldHVybmVkIGNoZWNrIGlmIGl0J3MgYW4gYWxyZWFkeSBzYXZlZCBmaWxlXG4gICAgICBpZiAodHJpZ2dlclJlc3VsdCBpbnN0YW5jZW9mIFBhcnNlLkZpbGUpIHtcbiAgICAgICAgZmlsZU9iamVjdC5maWxlID0gdHJpZ2dlclJlc3VsdDtcbiAgICAgICAgaWYgKHRyaWdnZXJSZXN1bHQudXJsKCkpIHtcbiAgICAgICAgICAvLyBzZXQgZmlsZVNpemUgdG8gbnVsbCBiZWNhdXNlIHdlIHdvbnQga25vdyBob3cgYmlnIGl0IGlzIGhlcmVcbiAgICAgICAgICBmaWxlT2JqZWN0LmZpbGVTaXplID0gbnVsbDtcbiAgICAgICAgICBzYXZlUmVzdWx0ID0ge1xuICAgICAgICAgICAgdXJsOiB0cmlnZ2VyUmVzdWx0LnVybCgpLFxuICAgICAgICAgICAgbmFtZTogdHJpZ2dlclJlc3VsdC5fbmFtZSxcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvLyBpZiB0aGUgZmlsZSByZXR1cm5lZCBieSB0aGUgdHJpZ2dlciBoYXMgYWxyZWFkeSBiZWVuIHNhdmVkIHNraXAgc2F2aW5nIGFueXRoaW5nXG4gICAgICBpZiAoIXNhdmVSZXN1bHQpIHtcbiAgICAgICAgLy8gdXBkYXRlIGZpbGVTaXplXG4gICAgICAgIGxldCBidWZmZXJEYXRhO1xuICAgICAgICBpZiAoZmlsZU9iamVjdC5maWxlLl9zb3VyY2U/LmZvcm1hdCA9PT0gJ2J1ZmZlcicpIHtcbiAgICAgICAgICBidWZmZXJEYXRhID0gZmlsZU9iamVjdC5maWxlLl9zb3VyY2UuYnVmZmVyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGJ1ZmZlckRhdGEgPSBCdWZmZXIuZnJvbShmaWxlT2JqZWN0LmZpbGUuX2RhdGEsICdiYXNlNjQnKTtcbiAgICAgICAgfVxuICAgICAgICBmaWxlT2JqZWN0LmZpbGVTaXplID0gQnVmZmVyLmJ5dGVMZW5ndGgoYnVmZmVyRGF0YSk7XG4gICAgICAgIC8vIHByZXBhcmUgZmlsZSBvcHRpb25zXG4gICAgICAgIGNvbnN0IGZpbGVPcHRpb25zID0ge1xuICAgICAgICAgIG1ldGFkYXRhOiBmaWxlT2JqZWN0LmZpbGUuX21ldGFkYXRhLFxuICAgICAgICB9O1xuICAgICAgICAvLyBzb21lIHMzLWNvbXBhdGlibGUgcHJvdmlkZXJzIChEaWdpdGFsT2NlYW4sIExpbm9kZSkgZG8gbm90IGFjY2VwdCB0YWdzXG4gICAgICAgIC8vIHNvIHdlIGRvIG5vdCBpbmNsdWRlIHRoZSB0YWdzIG9wdGlvbiBpZiBpdCBpcyBlbXB0eS5cbiAgICAgICAgY29uc3QgZmlsZVRhZ3MgPVxuICAgICAgICAgIE9iamVjdC5rZXlzKGZpbGVPYmplY3QuZmlsZS5fdGFncykubGVuZ3RoID4gMCA/IHsgdGFnczogZmlsZU9iamVjdC5maWxlLl90YWdzIH0gOiB7fTtcbiAgICAgICAgT2JqZWN0LmFzc2lnbihmaWxlT3B0aW9ucywgZmlsZVRhZ3MpO1xuICAgICAgICAvLyBpbmNsdWRlIGRpcmVjdG9yeSBpZiBzZXQgKGZyb20gY2xpZW50IHJlcXVlc3Qgb3IgYmVmb3JlU2F2ZUZpbGUgdHJpZ2dlcilcbiAgICAgICAgaWYgKGZpbGVPYmplY3QuZmlsZS5fZGlyZWN0b3J5KSB7XG4gICAgICAgICAgZmlsZU9wdGlvbnMuZGlyZWN0b3J5ID0gZmlsZU9iamVjdC5maWxlLl9kaXJlY3Rvcnk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gc2F2ZSBmaWxlXG4gICAgICAgIGNvbnN0IGNyZWF0ZUZpbGVSZXN1bHQgPSBhd2FpdCBmaWxlc0NvbnRyb2xsZXIuY3JlYXRlRmlsZShcbiAgICAgICAgICBjb25maWcsXG4gICAgICAgICAgZmlsZU9iamVjdC5maWxlLl9uYW1lLFxuICAgICAgICAgIGJ1ZmZlckRhdGEsXG4gICAgICAgICAgZmlsZU9iamVjdC5maWxlLl9zb3VyY2UudHlwZSxcbiAgICAgICAgICBmaWxlT3B0aW9uc1xuICAgICAgICApO1xuICAgICAgICAvLyB1cGRhdGUgZmlsZSB3aXRoIG5ldyBkYXRhXG4gICAgICAgIGZpbGVPYmplY3QuZmlsZS5fbmFtZSA9IGNyZWF0ZUZpbGVSZXN1bHQubmFtZTtcbiAgICAgICAgZmlsZU9iamVjdC5maWxlLl91cmwgPSBjcmVhdGVGaWxlUmVzdWx0LnVybDtcbiAgICAgICAgZmlsZU9iamVjdC5maWxlLl9yZXF1ZXN0VGFzayA9IG51bGw7XG4gICAgICAgIGZpbGVPYmplY3QuZmlsZS5fcHJldmlvdXNTYXZlID0gUHJvbWlzZS5yZXNvbHZlKGZpbGVPYmplY3QuZmlsZSk7XG4gICAgICAgIHNhdmVSZXN1bHQgPSB7XG4gICAgICAgICAgdXJsOiBjcmVhdGVGaWxlUmVzdWx0LnVybCxcbiAgICAgICAgICBuYW1lOiBjcmVhdGVGaWxlUmVzdWx0Lm5hbWUsXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICAvLyBydW4gYWZ0ZXJTYXZlRmlsZSB0cmlnZ2VyXG4gICAgICBhd2FpdCB0cmlnZ2Vycy5tYXliZVJ1bkZpbGVUcmlnZ2VyKHRyaWdnZXJzLlR5cGVzLmFmdGVyU2F2ZSwgZmlsZU9iamVjdCwgY29uZmlnLCByZXEuYXV0aCk7XG4gICAgICByZXMuc3RhdHVzKDIwMSk7XG4gICAgICByZXMuc2V0KCdMb2NhdGlvbicsIHNhdmVSZXN1bHQudXJsKTtcbiAgICAgIHJlcy5qc29uKHNhdmVSZXN1bHQpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGxvZ2dlci5lcnJvcignRXJyb3IgY3JlYXRpbmcgYSBmaWxlOiAnLCBlKTtcbiAgICAgIGNvbnN0IGVycm9yID0gdHJpZ2dlcnMucmVzb2x2ZUVycm9yKGUsIHtcbiAgICAgICAgY29kZTogUGFyc2UuRXJyb3IuRklMRV9TQVZFX0VSUk9SLFxuICAgICAgICBtZXNzYWdlOiBgQ291bGQgbm90IHN0b3JlIGZpbGU6ICR7ZmlsZU9iamVjdC5maWxlLl9uYW1lfS5gLFxuICAgICAgfSk7XG4gICAgICBuZXh0KGVycm9yKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBfaGFuZGxlU3RyZWFtVXBsb2FkKHJlcSwgcmVzLCBuZXh0KSB7XG4gICAgY29uc3QgY29uZmlnID0gcmVxLmNvbmZpZztcbiAgICBjb25zdCBmaWxlc0NvbnRyb2xsZXIgPSBjb25maWcuZmlsZXNDb250cm9sbGVyO1xuICAgIGNvbnN0IHsgZmlsZW5hbWUgfSA9IHJlcS5wYXJhbXM7XG4gICAgbGV0IGNvbnRlbnRUeXBlID0gcmVxLmdldCgnQ29udGVudC1UeXBlJyk7XG4gICAgY29uc3QgbWF4Qnl0ZXMgPSByZXEuX21heFVwbG9hZFNpemVCeXRlcztcbiAgICBsZXQgc3RyZWFtO1xuXG4gICAgdHJ5IHtcbiAgICAgIC8vIEVhcmx5IHJlamVjdGlvbiB2aWEgQ29udGVudC1MZW5ndGggaGVhZGVyXG4gICAgICBjb25zdCBjb250ZW50TGVuZ3RoID0gcmVxLmdldCgnQ29udGVudC1MZW5ndGgnKTtcbiAgICAgIGlmIChjb250ZW50TGVuZ3RoICYmIHBhcnNlSW50KGNvbnRlbnRMZW5ndGgsIDEwKSA+IG1heEJ5dGVzKSB7XG4gICAgICAgIHJlcS5yZXN1bWUoKTtcbiAgICAgICAgbmV4dChuZXcgUGFyc2UuRXJyb3IoXG4gICAgICAgICAgUGFyc2UuRXJyb3IuRklMRV9TQVZFX0VSUk9SLFxuICAgICAgICAgIGBGaWxlIHNpemUgZXhjZWVkcyBtYXhpbXVtIGFsbG93ZWQ6ICR7bWF4Qnl0ZXN9IGJ5dGVzLmBcbiAgICAgICAgKSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgbWltZSA9IChhd2FpdCBpbXBvcnQoJ21pbWUnKSkuZGVmYXVsdDtcblxuICAgICAgLy8gSW5mZXIgY29udGVudCB0eXBlIGZyb20gZXh0ZW5zaW9uIG9yIGFkZCBleHRlbnNpb24gZnJvbSBjb250ZW50IHR5cGVcbiAgICAgIGNvbnN0IGhhc0V4dGVuc2lvbiA9IGZpbGVuYW1lICYmIGZpbGVuYW1lLmluY2x1ZGVzKCcuJyk7XG4gICAgICBpZiAoaGFzRXh0ZW5zaW9uICYmICFjb250ZW50VHlwZSkge1xuICAgICAgICBjb250ZW50VHlwZSA9IG1pbWUuZ2V0VHlwZShmaWxlbmFtZSk7XG4gICAgICB9IGVsc2UgaWYgKCFoYXNFeHRlbnNpb24gJiYgY29udGVudFR5cGUpIHtcbiAgICAgICAgLy8gZXh0ZW5zaW9uIHdpbGwgYmUgYWRkZWQgYnkgZmlsZXNDb250cm9sbGVyLmNyZWF0ZUZpbGVcbiAgICAgIH1cblxuICAgICAgLy8gQ3JlYXRlIHNpemUtbGltaXRlZCBzdHJlYW0gd3JhcHBpbmcgdGhlIHJlcXVlc3RcbiAgICAgIHN0cmVhbSA9IGNyZWF0ZVNpemVMaW1pdGVkU3RyZWFtKHJlcSwgbWF4Qnl0ZXMpO1xuXG4gICAgICAvLyBCdWlsZCBhIFBhcnNlLkZpbGUgd2l0aCBubyBfZGF0YSAoc3RyZWFtaW5nIG1vZGUpXG4gICAgICBjb25zdCBmaWxlID0gbmV3IFBhcnNlLkZpbGUoZmlsZW5hbWUsIHsgYmFzZTY0OiAnJyB9LCBjb250ZW50VHlwZSk7XG4gICAgICBjb25zdCB7IG1ldGFkYXRhID0ge30sIHRhZ3MgPSB7fSwgZGlyZWN0b3J5IH0gPSByZXEuZmlsZURhdGEgfHwge307XG5cbiAgICAgIC8vIFZhbGlkYXRlIG1ldGFkYXRhIGFuZCB0YWdzIGZvciBwcm9oaWJpdGVkIGtleXdvcmRzXG4gICAgICB0cnkge1xuICAgICAgICBVdGlscy5jaGVja1Byb2hpYml0ZWRLZXl3b3Jkcyhjb25maWcsIG1ldGFkYXRhKTtcbiAgICAgICAgVXRpbHMuY2hlY2tQcm9oaWJpdGVkS2V5d29yZHMoY29uZmlnLCB0YWdzKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIHN0cmVhbS5kZXN0cm95KCk7XG4gICAgICAgIG5leHQobmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLklOVkFMSURfS0VZX05BTUUsIGVycm9yKSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgZmlsZS5zZXRUYWdzKHRhZ3MpO1xuICAgICAgZmlsZS5zZXRNZXRhZGF0YShtZXRhZGF0YSk7XG4gICAgICBpZiAoZGlyZWN0b3J5KSB7XG4gICAgICAgIGZpbGUuc2V0RGlyZWN0b3J5KGRpcmVjdG9yeSk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGZpbGVTaXplID0gcmVxLmdldCgnQ29udGVudC1MZW5ndGgnKVxuICAgICAgICA/IHBhcnNlSW50KHJlcS5nZXQoJ0NvbnRlbnQtTGVuZ3RoJyksIDEwKVxuICAgICAgICA6IG51bGw7XG4gICAgICBjb25zdCBmaWxlT2JqZWN0ID0geyBmaWxlLCBmaWxlU2l6ZSwgc3RyZWFtOiB0cnVlIH07XG5cbiAgICAgIC8vIFJ1biBiZWZvcmVTYXZlRmlsZSB0cmlnZ2VyXG4gICAgICBjb25zdCB0cmlnZ2VyUmVzdWx0ID0gYXdhaXQgdHJpZ2dlcnMubWF5YmVSdW5GaWxlVHJpZ2dlcihcbiAgICAgICAgdHJpZ2dlcnMuVHlwZXMuYmVmb3JlU2F2ZSxcbiAgICAgICAgZmlsZU9iamVjdCxcbiAgICAgICAgY29uZmlnLFxuICAgICAgICByZXEuYXV0aFxuICAgICAgKTtcblxuICAgICAgbGV0IHNhdmVSZXN1bHQ7XG4gICAgICAvLyBJZiBhIG5ldyBQYXJzZUZpbGUgaXMgcmV0dXJuZWQsIGNoZWNrIGlmIGl0J3MgYW4gYWxyZWFkeSBzYXZlZCBmaWxlXG4gICAgICBpZiAodHJpZ2dlclJlc3VsdCBpbnN0YW5jZW9mIFBhcnNlLkZpbGUpIHtcbiAgICAgICAgZmlsZU9iamVjdC5maWxlID0gdHJpZ2dlclJlc3VsdDtcbiAgICAgICAgaWYgKHRyaWdnZXJSZXN1bHQudXJsKCkpIHtcbiAgICAgICAgICBmaWxlT2JqZWN0LmZpbGVTaXplID0gbnVsbDtcbiAgICAgICAgICBzYXZlUmVzdWx0ID0ge1xuICAgICAgICAgICAgdXJsOiB0cmlnZ2VyUmVzdWx0LnVybCgpLFxuICAgICAgICAgICAgbmFtZTogdHJpZ2dlclJlc3VsdC5fbmFtZSxcbiAgICAgICAgICB9O1xuICAgICAgICAgIC8vIERlc3Ryb3kgc3RyZWFtIHRvIHJlbW92ZSBsaXN0ZW5lcnMgYW5kIGRyYWluIHJlcXVlc3RcbiAgICAgICAgICBzdHJlYW0uZGVzdHJveSgpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIElmIHRoZSBmaWxlIHJldHVybmVkIGJ5IHRoZSB0cmlnZ2VyIGhhcyBhbHJlYWR5IGJlZW4gc2F2ZWQsIHNraXAgc2F2aW5nXG4gICAgICBpZiAoIXNhdmVSZXN1bHQpIHtcbiAgICAgICAgLy8gUHJlcGFyZSBmaWxlIG9wdGlvbnNcbiAgICAgICAgY29uc3QgZmlsZU9wdGlvbnMgPSB7XG4gICAgICAgICAgbWV0YWRhdGE6IGZpbGVPYmplY3QuZmlsZS5fbWV0YWRhdGEsXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGZpbGVUYWdzID1cbiAgICAgICAgICBPYmplY3Qua2V5cyhmaWxlT2JqZWN0LmZpbGUuX3RhZ3MpLmxlbmd0aCA+IDAgPyB7IHRhZ3M6IGZpbGVPYmplY3QuZmlsZS5fdGFncyB9IDoge307XG4gICAgICAgIE9iamVjdC5hc3NpZ24oZmlsZU9wdGlvbnMsIGZpbGVUYWdzKTtcbiAgICAgICAgLy8gaW5jbHVkZSBkaXJlY3RvcnkgaWYgc2V0IChmcm9tIGNsaWVudCByZXF1ZXN0IG9yIGJlZm9yZVNhdmVGaWxlIHRyaWdnZXIpXG4gICAgICAgIGlmIChmaWxlT2JqZWN0LmZpbGUuX2RpcmVjdG9yeSkge1xuICAgICAgICAgIGZpbGVPcHRpb25zLmRpcmVjdG9yeSA9IGZpbGVPYmplY3QuZmlsZS5fZGlyZWN0b3J5O1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gUGFzcyBzdHJlYW0gZGlyZWN0bHkgdG8gZmlsZXNDb250cm9sbGVyIOKAlCBpdCB3aWxsIGJ1ZmZlciBpZiBhZGFwdGVyIGRvZXNuJ3Qgc3VwcG9ydCBzdHJlYW1pbmdcbiAgICAgICAgY29uc3Qgc291cmNlVHlwZSA9IGZpbGVPYmplY3QuZmlsZS5fc291cmNlPy50eXBlIHx8IGNvbnRlbnRUeXBlO1xuICAgICAgICBjb25zdCBjcmVhdGVGaWxlUmVzdWx0ID0gYXdhaXQgZmlsZXNDb250cm9sbGVyLmNyZWF0ZUZpbGUoXG4gICAgICAgICAgY29uZmlnLFxuICAgICAgICAgIGZpbGVPYmplY3QuZmlsZS5fbmFtZSxcbiAgICAgICAgICBzdHJlYW0sXG4gICAgICAgICAgc291cmNlVHlwZSxcbiAgICAgICAgICBmaWxlT3B0aW9uc1xuICAgICAgICApO1xuXG4gICAgICAgIC8vIFVwZGF0ZSBmaWxlIHdpdGggbmV3IGRhdGFcbiAgICAgICAgZmlsZU9iamVjdC5maWxlLl9uYW1lID0gY3JlYXRlRmlsZVJlc3VsdC5uYW1lO1xuICAgICAgICBmaWxlT2JqZWN0LmZpbGUuX3VybCA9IGNyZWF0ZUZpbGVSZXN1bHQudXJsO1xuICAgICAgICBmaWxlT2JqZWN0LmZpbGUuX3JlcXVlc3RUYXNrID0gbnVsbDtcbiAgICAgICAgZmlsZU9iamVjdC5maWxlLl9wcmV2aW91c1NhdmUgPSBQcm9taXNlLnJlc29sdmUoZmlsZU9iamVjdC5maWxlKTtcbiAgICAgICAgc2F2ZVJlc3VsdCA9IHtcbiAgICAgICAgICB1cmw6IGNyZWF0ZUZpbGVSZXN1bHQudXJsLFxuICAgICAgICAgIG5hbWU6IGNyZWF0ZUZpbGVSZXN1bHQubmFtZSxcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgLy8gUnVuIGFmdGVyU2F2ZUZpbGUgdHJpZ2dlclxuICAgICAgYXdhaXQgdHJpZ2dlcnMubWF5YmVSdW5GaWxlVHJpZ2dlcih0cmlnZ2Vycy5UeXBlcy5hZnRlclNhdmUsIGZpbGVPYmplY3QsIGNvbmZpZywgcmVxLmF1dGgpO1xuICAgICAgcmVzLnN0YXR1cygyMDEpO1xuICAgICAgcmVzLnNldCgnTG9jYXRpb24nLCBzYXZlUmVzdWx0LnVybCk7XG4gICAgICByZXMuanNvbihzYXZlUmVzdWx0KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvLyBEZXN0cm95IHN0cmVhbSB0byByZW1vdmUgbGlzdGVuZXJzIGFuZCBkcmFpbiByZXF1ZXN0LCBvciByZXN1bWUgZGlyZWN0bHlcbiAgICAgIGlmIChzdHJlYW0pIHtcbiAgICAgICAgc3RyZWFtLmRlc3Ryb3koKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlcS5yZXN1bWUoKTtcbiAgICAgIH1cbiAgICAgIGxvZ2dlci5lcnJvcignRXJyb3IgY3JlYXRpbmcgYSBmaWxlOiAnLCBlKTtcbiAgICAgIGNvbnN0IGVycm9yID0gdHJpZ2dlcnMucmVzb2x2ZUVycm9yKGUsIHtcbiAgICAgICAgY29kZTogUGFyc2UuRXJyb3IuRklMRV9TQVZFX0VSUk9SLFxuICAgICAgICBtZXNzYWdlOiBgQ291bGQgbm90IHN0b3JlIGZpbGU6ICR7ZmlsZW5hbWV9LmAsXG4gICAgICB9KTtcbiAgICAgIG5leHQoZXJyb3IpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZUhhbmRsZXIocmVxLCByZXMsIG5leHQpIHtcbiAgICBpZiAocmVxLmF1dGguaXNSZWFkT25seSkge1xuICAgICAgY29uc3QgZXJyb3IgPSBjcmVhdGVTYW5pdGl6ZWRIdHRwRXJyb3IoNDAzLCBcInJlYWQtb25seSBtYXN0ZXJLZXkgaXNuJ3QgYWxsb3dlZCB0byBkZWxldGUgYSBmaWxlLlwiLCByZXEuY29uZmlnKTtcbiAgICAgIHJlcy5zdGF0dXMoZXJyb3Iuc3RhdHVzKTtcbiAgICAgIHJlcy5lbmQoYHtcImVycm9yXCI6XCIke2Vycm9yLm1lc3NhZ2V9XCJ9YCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICBjb25zdCB7IGZpbGVzQ29udHJvbGxlciB9ID0gcmVxLmNvbmZpZztcbiAgICAgIGNvbnN0IGZpbGVuYW1lID0gRmlsZXNSb3V0ZXIuX2dldEZpbGVuYW1lRnJvbVBhcmFtcyhyZXEpO1xuICAgICAgLy8gcnVuIGJlZm9yZURlbGV0ZUZpbGUgdHJpZ2dlclxuICAgICAgY29uc3QgZmlsZSA9IG5ldyBQYXJzZS5GaWxlKGZpbGVuYW1lKTtcbiAgICAgIGZpbGUuX3VybCA9IGF3YWl0IGZpbGVzQ29udHJvbGxlci5hZGFwdGVyLmdldEZpbGVMb2NhdGlvbihyZXEuY29uZmlnLCBmaWxlbmFtZSk7XG4gICAgICBjb25zdCBmaWxlT2JqZWN0ID0geyBmaWxlLCBmaWxlU2l6ZTogbnVsbCB9O1xuICAgICAgYXdhaXQgdHJpZ2dlcnMubWF5YmVSdW5GaWxlVHJpZ2dlcihcbiAgICAgICAgdHJpZ2dlcnMuVHlwZXMuYmVmb3JlRGVsZXRlLFxuICAgICAgICBmaWxlT2JqZWN0LFxuICAgICAgICByZXEuY29uZmlnLFxuICAgICAgICByZXEuYXV0aFxuICAgICAgKTtcbiAgICAgIC8vIGRlbGV0ZSBmaWxlXG4gICAgICBhd2FpdCBmaWxlc0NvbnRyb2xsZXIuZGVsZXRlRmlsZShyZXEuY29uZmlnLCBmaWxlbmFtZSk7XG4gICAgICAvLyBydW4gYWZ0ZXJEZWxldGVGaWxlIHRyaWdnZXJcbiAgICAgIGF3YWl0IHRyaWdnZXJzLm1heWJlUnVuRmlsZVRyaWdnZXIoXG4gICAgICAgIHRyaWdnZXJzLlR5cGVzLmFmdGVyRGVsZXRlLFxuICAgICAgICBmaWxlT2JqZWN0LFxuICAgICAgICByZXEuY29uZmlnLFxuICAgICAgICByZXEuYXV0aFxuICAgICAgKTtcbiAgICAgIHJlcy5zdGF0dXMoMjAwKTtcbiAgICAgIC8vIFRPRE86IHJldHVybiB1c2VmdWwgSlNPTiBoZXJlP1xuICAgICAgcmVzLmVuZCgpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGxvZ2dlci5lcnJvcignRXJyb3IgZGVsZXRpbmcgYSBmaWxlOiAnLCBlKTtcbiAgICAgIGNvbnN0IGVycm9yID0gdHJpZ2dlcnMucmVzb2x2ZUVycm9yKGUsIHtcbiAgICAgICAgY29kZTogUGFyc2UuRXJyb3IuRklMRV9ERUxFVEVfRVJST1IsXG4gICAgICAgIG1lc3NhZ2U6ICdDb3VsZCBub3QgZGVsZXRlIGZpbGUuJyxcbiAgICAgIH0pO1xuICAgICAgbmV4dChlcnJvcik7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgbWV0YWRhdGFIYW5kbGVyKHJlcSwgcmVzKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGNvbmZpZyA9IENvbmZpZy5nZXQocmVxLnBhcmFtcy5hcHBJZCk7XG4gICAgICBpZiAoIWNvbmZpZykge1xuICAgICAgICByZXMuc3RhdHVzKDIwMCk7XG4gICAgICAgIHJlcy5qc29uKHt9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgeyBmaWxlc0NvbnRyb2xsZXIgfSA9IGNvbmZpZztcbiAgICAgIGxldCBmaWxlbmFtZSA9IEZpbGVzUm91dGVyLl9nZXRGaWxlbmFtZUZyb21QYXJhbXMocmVxKTtcbiAgICAgIGNvbnN0IGZpbGUgPSBuZXcgUGFyc2UuRmlsZShmaWxlbmFtZSwgeyBiYXNlNjQ6ICcnIH0pO1xuICAgICAgY29uc3QgdHJpZ2dlclJlc3VsdCA9IGF3YWl0IHRyaWdnZXJzLm1heWJlUnVuRmlsZVRyaWdnZXIoXG4gICAgICAgIHRyaWdnZXJzLlR5cGVzLmJlZm9yZUZpbmQsXG4gICAgICAgIHsgZmlsZSB9LFxuICAgICAgICBjb25maWcsXG4gICAgICAgIHJlcS5hdXRoXG4gICAgICApO1xuICAgICAgaWYgKHRyaWdnZXJSZXN1bHQ/LmZpbGU/Ll9uYW1lKSB7XG4gICAgICAgIGZpbGVuYW1lID0gdHJpZ2dlclJlc3VsdC5maWxlLl9uYW1lO1xuICAgICAgfVxuICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IGZpbGVzQ29udHJvbGxlci5nZXRNZXRhZGF0YShmaWxlbmFtZSkuY2F0Y2goKCkgPT4ge1xuICAgICAgICByZXMuc3RhdHVzKDIwMCk7XG4gICAgICAgIHJlcy5qc29uKHt9KTtcbiAgICAgIH0pO1xuICAgICAgaWYgKCFkYXRhKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGF3YWl0IHRyaWdnZXJzLm1heWJlUnVuRmlsZVRyaWdnZXIoXG4gICAgICAgIHRyaWdnZXJzLlR5cGVzLmFmdGVyRmluZCxcbiAgICAgICAgeyBmaWxlIH0sXG4gICAgICAgIGNvbmZpZyxcbiAgICAgICAgcmVxLmF1dGhcbiAgICAgICk7XG4gICAgICByZXMuc3RhdHVzKDIwMCk7XG4gICAgICByZXMuanNvbihkYXRhKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zdCBlcnIgPSB0cmlnZ2Vycy5yZXNvbHZlRXJyb3IoZSwge1xuICAgICAgICBjb2RlOiBQYXJzZS5FcnJvci5TQ1JJUFRfRkFJTEVELFxuICAgICAgICBtZXNzYWdlOiAnQ291bGQgbm90IGdldCBmaWxlIG1ldGFkYXRhLicsXG4gICAgICB9KTtcbiAgICAgIHJlcy5zdGF0dXMoNDAzKTtcbiAgICAgIHJlcy5qc29uKHsgY29kZTogZXJyLmNvZGUsIGVycm9yOiBlcnIubWVzc2FnZSB9KTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNGaWxlU3RyZWFtYWJsZShyZXEsIGZpbGVzQ29udHJvbGxlcikge1xuICBjb25zdCByYW5nZSA9IChyZXEuZ2V0KCdSYW5nZScpIHx8ICcvLS8nKS5zcGxpdCgnLScpO1xuICBjb25zdCBzdGFydCA9IE51bWJlcihyYW5nZVswXSk7XG4gIGNvbnN0IGVuZCA9IE51bWJlcihyYW5nZVsxXSk7XG4gIHJldHVybiAoXG4gICAgKCFpc05hTihzdGFydCkgfHwgIWlzTmFOKGVuZCkpICYmIHR5cGVvZiBmaWxlc0NvbnRyb2xsZXIuYWRhcHRlci5oYW5kbGVGaWxlU3RyZWFtID09PSAnZnVuY3Rpb24nXG4gICk7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQSxJQUFBQSxRQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxXQUFBLEdBQUFDLHVCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBRyxLQUFBLEdBQUFKLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBSSxPQUFBLEdBQUFMLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBSyxPQUFBLEdBQUFOLHNCQUFBLENBQUFDLE9BQUE7QUFHQSxJQUFBTSxPQUFBLEdBQUFOLE9BQUE7QUFDQSxJQUFBTyxNQUFBLEdBQUFQLE9BQUE7QUFBb0QsU0FBQUUsd0JBQUFNLENBQUEsRUFBQUMsQ0FBQSw2QkFBQUMsT0FBQSxNQUFBQyxDQUFBLE9BQUFELE9BQUEsSUFBQUUsQ0FBQSxPQUFBRixPQUFBLFlBQUFSLHVCQUFBLFlBQUFBLENBQUFNLENBQUEsRUFBQUMsQ0FBQSxTQUFBQSxDQUFBLElBQUFELENBQUEsSUFBQUEsQ0FBQSxDQUFBSyxVQUFBLFNBQUFMLENBQUEsTUFBQU0sQ0FBQSxFQUFBQyxDQUFBLEVBQUFDLENBQUEsS0FBQUMsU0FBQSxRQUFBQyxPQUFBLEVBQUFWLENBQUEsaUJBQUFBLENBQUEsdUJBQUFBLENBQUEseUJBQUFBLENBQUEsU0FBQVEsQ0FBQSxNQUFBRixDQUFBLEdBQUFMLENBQUEsR0FBQUcsQ0FBQSxHQUFBRCxDQUFBLFFBQUFHLENBQUEsQ0FBQUssR0FBQSxDQUFBWCxDQUFBLFVBQUFNLENBQUEsQ0FBQU0sR0FBQSxDQUFBWixDQUFBLEdBQUFNLENBQUEsQ0FBQU8sR0FBQSxDQUFBYixDQUFBLEVBQUFRLENBQUEsZ0JBQUFQLENBQUEsSUFBQUQsQ0FBQSxnQkFBQUMsQ0FBQSxPQUFBYSxjQUFBLENBQUFDLElBQUEsQ0FBQWYs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
717
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZXhwcmVzcyIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiTWlkZGxld2FyZXMiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsIl9ub2RlIiwiX0NvbmZpZyIsIl9sb2dnZXIiLCJfc3RyZWFtIiwiX0Vycm9yIiwiZSIsInQiLCJXZWFrTWFwIiwiciIsIm4iLCJfX2VzTW9kdWxlIiwibyIsImkiLCJmIiwiX19wcm90b19fIiwiZGVmYXVsdCIsImhhcyIsImdldCIsInNldCIsImhhc093blByb3BlcnR5IiwiY2FsbCIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwidHJpZ2dlcnMiLCJVdGlscyIsImNyZWF0ZVNpemVMaW1pdGVkU3RyZWFtIiwic291cmNlIiwibWF4Qnl0ZXMiLCJ0b3RhbEJ5dGVzIiwic3RhcnRlZCIsInNvdXJjZUVuZGVkIiwib25EYXRhIiwib25FbmQiLCJvbkVycm9yIiwib3V0cHV0IiwiUmVhZGFibGUiLCJyZWFkIiwiY2h1bmsiLCJsZW5ndGgiLCJkZXN0cm95IiwiUGFyc2UiLCJFcnJvciIsIkZJTEVfU0FWRV9FUlJPUiIsInB1c2giLCJwYXVzZSIsImVyciIsIm9uIiwicmVzdW1lIiwiY2FsbGJhY2siLCJyZW1vdmVMaXN0ZW5lciIsIlJFU0VSVkVEX0RJUkVDVE9SWV9TRUdNRU5UUyIsImV4cG9ydHMiLCJGaWxlc1JvdXRlciIsImV4cHJlc3NSb3V0ZXIiLCJtYXhVcGxvYWRTaXplIiwicm91dGVyIiwiZXhwcmVzcyIsIlJvdXRlciIsIm1ldGFkYXRhSGFuZGxlciIsImdldEhhbmRsZXIiLCJwb3N0IiwicmVxIiwicmVzIiwibmV4dCIsIklOVkFMSURfRklMRV9OQU1FIiwiX2Vhcmx5SGVhZGVyc01pZGRsZXdhcmUiLCJfYm9keVBhcnNpbmdNaWRkbGV3YXJlIiwiaGFuZGxlUGFyc2VIZWFkZXJzIiwiaGFuZGxlUGFyc2VTZXNzaW9uIiwiY3JlYXRlSGFuZGxlciIsImJpbmQiLCJkZWxldGUiLCJlbmZvcmNlTWFzdGVyS2V5QWNjZXNzIiwiZGVsZXRlSGFuZGxlciIsIl9nZXRGaWxlbmFtZUZyb21QYXJhbXMiLCJwYXJ0cyIsInBhcmFtcyIsImZpbGVwYXRoIiwiQXJyYXkiLCJpc0FycmF5Iiwiam9pbiIsInZhbGlkYXRlRGlyZWN0b3J5IiwiZGlyZWN0b3J5IiwiaW5jbHVkZXMiLCJzdGFydHNXaXRoIiwiZW5kc1dpdGgiLCJmaXJzdFNlZ21lbnQiLCJzcGxpdCIsImRpclJlZ2V4IiwidGVzdCIsImNvbmZpZyIsIkNvbmZpZyIsImFwcElkIiwiZXJyb3IiLCJjcmVhdGVTYW5pdGl6ZWRIdHRwRXJyb3IiLCJzdGF0dXMiLCJqc29uIiwibWVzc2FnZSIsImZpbGVuYW1lIiwiZmlsZXNDb250cm9sbGVyIiwibWltZSIsImNvbnRlbnRUeXBlIiwiZ2V0VHlwZSIsImZpbGUiLCJGaWxlIiwiYmFzZTY0IiwidHJpZ2dlclJlc3VsdCIsIm1heWJlUnVuRmlsZVRyaWdnZXIiLCJUeXBlcyIsImJlZm9yZUZpbmQiLCJhdXRoIiwiX25hbWUiLCJkZWZhdWx0UmVzcG9uc2VIZWFkZXJzIiwiaXNGaWxlU3RyZWFtYWJsZSIsImtleSIsInZhbHVlIiwiZW50cmllcyIsImhhbmRsZUZpbGVTdHJlYW0iLCJjYXRjaCIsImVuZCIsImRhdGEiLCJnZXRGaWxlRGF0YSIsInRvU3RyaW5nIiwiYWZ0ZXJGaW5kIiwiZm9yY2VEb3dubG9hZCIsInJlc3BvbnNlSGVhZGVycyIsIkJ1ZmZlciIsImZyb20iLCJfZGF0YSIsInJlc29sdmVFcnJvciIsImNvZGUiLCJTQ1JJUFRfRkFJTEVEIiwibWF4VXBsb2FkU2l6ZU92ZXJyaWRlIiwidW5kZWZpbmVkIiwibWFzdGVyS2V5IiwibG9hZE1hc3RlcktleSIsIm1hc3RlcktleUlwcyIsImNoZWNrSXAiLCJpcCIsIm1hc3RlcktleUlwc1N0b3JlIiwicGFyc2VkQnl0ZXMiLCJwYXJzZVNpemVUb0J5dGVzIiwiX21heFVwbG9hZFNpemVPdmVycmlkZSIsImRlZmF1bHRNYXhCeXRlcyIsIl9tYXhVcGxvYWRTaXplQnl0ZXMiLCJsaW1pdCIsInJhdyIsInR5cGUiLCJpc1JlYWRPbmx5IiwidXNlciIsImlzTWFzdGVyIiwiaXNMaW5rZWQiLCJBbm9ueW1vdXNVdGlscyIsImZpbGVVcGxvYWQiLCJlbmFibGVGb3JBbm9ueW1vdXNVc2VyIiwiZW5hYmxlRm9yQXV0aGVudGljYXRlZFVzZXIiLCJlbmFibGVGb3JQdWJsaWMiLCJ2YWxpZGF0ZUZpbGVuYW1lIiwiZmlsZUV4dGVuc2lvbnMiLCJpc1ZhbGlkRXh0ZW5zaW9uIiwiZXh0ZW5zaW9uIiwic29tZSIsImV4dCIsInJlZ2V4IiwiUmVnRXhwIiwic3Vic3RyaW5nIiwibGFzdEluZGV4T2YiLCJyZXBsYWNlIiwiZmlsZURhdGEiLCJwYXJzZWQiLCJKU09OIiwicGFyc2UiLCJtZXRhZGF0YSIsIklOVkFMSURfSlNPTiIsInRhZ3MiLCJPUEVSQVRJT05fRk9SQklEREVOIiwiZGlyZWN0b3J5RXJyb3IiLCJpc0J1ZmZlciIsImJvZHkiLCJfaGFuZGxlQnVmZmVyZWRVcGxvYWQiLCJfaGFuZGxlU3RyZWFtVXBsb2FkIiwiY2hlY2tQcm9oaWJpdGVkS2V5d29yZHMiLCJJTlZBTElEX0tFWV9OQU1FIiwic2V0VGFncyIsInNldE1ldGFkYXRhIiwic2V0RGlyZWN0b3J5IiwiZmlsZVNpemUiLCJieXRlTGVuZ3RoIiwiZmlsZU9iamVjdCIsImJlZm9yZVNhdmUiLCJzYXZlUmVzdWx0IiwidXJsIiwibmFtZSIsImJ1ZmZlckRhdGEiLCJfc291cmNlIiwiZm9ybWF0IiwiYnVmZmVyIiwiZmlsZU9wdGlvbnMiLCJfbWV0YWRhdGEiLCJmaWxlVGFncyIsImtleXMiLCJfdGFncyIsImFzc2lnbiIsIl9kaXJlY3RvcnkiLCJjcmVhdGVGaWxlUmVzdWx0IiwiY3JlYXRlRmlsZSIsIl91cmwiLCJfcmVxdWVzdFRhc2siLCJfcHJldmlvdXNTYXZlIiwiUHJvbWlzZSIsInJlc29sdmUiLCJhZnRlclNhdmUiLCJsb2dnZXIiLCJzdHJlYW0iLCJjb250ZW50TGVuZ3RoIiwicGFyc2VJbnQiLCJoYXNFeHRlbnNpb24iLCJzb3VyY2VUeXBlIiwiYWRhcHRlciIsImdldEZpbGVMb2NhdGlvbiIsImJlZm9yZURlbGV0ZSIsImRlbGV0ZUZpbGUiLCJhZnRlckRlbGV0ZSIsIkZJTEVfREVMRVRFX0VSUk9SIiwiZ2V0TWV0YWRhdGEiLCJyYW5nZSIsInN0YXJ0IiwiTnVtYmVyIiwiaXNOYU4iXSwic291cmNlcyI6WyIuLi8uLi9zcmMvUm91dGVycy9GaWxlc1JvdXRlci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZXhwcmVzcyBmcm9tICdleHByZXNzJztcbmltcG9ydCAqIGFzIE1pZGRsZXdhcmVzIGZyb20gJy4uL21pZGRsZXdhcmVzJztcbmltcG9ydCBQYXJzZSBmcm9tICdwYXJzZS9ub2RlJztcbmltcG9ydCBDb25maWcgZnJvbSAnLi4vQ29uZmlnJztcbmltcG9ydCBsb2dnZXIgZnJvbSAnLi4vbG9nZ2VyJztcbmNvbnN0IHRyaWdnZXJzID0gcmVxdWlyZSgnLi4vdHJpZ2dlcnMnKTtcbmNvbnN0IFV0aWxzID0gcmVxdWlyZSgnLi4vVXRpbHMnKTtcbmltcG9ydCB7IFJlYWRhYmxlIH0gZnJvbSAnc3RyZWFtJztcbmltcG9ydCB7IGNyZWF0ZVNhbml0aXplZEh0dHBFcnJvciB9IGZyb20gJy4uL0Vycm9yJztcblxuLyoqXG4gKiBXcmFwcyBhIHJlYWRhYmxlIHN0cmVhbSBpbiBhIFJlYWRhYmxlIHRoYXQgZW5mb3JjZXMgYSBieXRlIHNpemUgbGltaXQuXG4gKiBEYXRhIGZsb3cgaXMgbGF6eTogdGhlIHNvdXJjZSBpcyBub3QgcmVhZCB1bnRpbCBhIGNvbnN1bWVyIHN0YXJ0cyByZWFkaW5nXG4gKiBmcm9tIHRoZSByZXR1cm5lZCBzdHJlYW0gKHZpYSBwaXBlIG9yICdkYXRhJyBsaXN0ZW5lcikuIFRoaXMgZW5zdXJlcyB0aGVcbiAqIGNvbnN1bWVyJ3MgZXJyb3IgbGlzdGVuZXIgaXMgYXR0YWNoZWQgYmVmb3JlIGFueSBkYXRhIChvciBlcnJvcikgaXMgZW1pdHRlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVNpemVMaW1pdGVkU3RyZWFtKHNvdXJjZSwgbWF4Qnl0ZXMpIHtcbiAgbGV0IHRvdGFsQnl0ZXMgPSAwO1xuICBsZXQgc3RhcnRlZCA9IGZhbHNlO1xuICBsZXQgc291cmNlRW5kZWQgPSBmYWxzZTtcbiAgbGV0IG9uRGF0YSwgb25FbmQsIG9uRXJyb3I7XG5cbiAgY29uc3Qgb3V0cHV0ID0gbmV3IFJlYWRhYmxlKHtcbiAgICByZWFkKCkge1xuICAgICAgaWYgKCFzdGFydGVkKSB7XG4gICAgICAgIHN0YXJ0ZWQgPSB0cnVlO1xuXG4gICAgICAgIG9uRGF0YSA9IChjaHVuaykgPT4ge1xuICAgICAgICAgIHRvdGFsQnl0ZXMgKz0gY2h1bmsubGVuZ3RoO1xuICAgICAgICAgIGlmICh0b3RhbEJ5dGVzID4gbWF4Qnl0ZXMpIHtcbiAgICAgICAgICAgIG91dHB1dC5kZXN0cm95KFxuICAgICAgICAgICAgICBuZXcgUGFyc2UuRXJyb3IoXG4gICAgICAgICAgICAgICAgUGFyc2UuRXJyb3IuRklMRV9TQVZFX0VSUk9SLFxuICAgICAgICAgICAgICAgIGBGaWxlIHNpemUgZXhjZWVkcyBtYXhpbXVtIGFsbG93ZWQ6ICR7bWF4Qnl0ZXN9IGJ5dGVzLmBcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCFvdXRwdXQucHVzaChjaHVuaykpIHtcbiAgICAgICAgICAgIHNvdXJjZS5wYXVzZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBvbkVuZCA9ICgpID0+IHtcbiAgICAgICAgICBzb3VyY2VFbmRlZCA9IHRydWU7XG4gICAgICAgICAgb3V0cHV0LnB1c2gobnVsbCk7XG4gICAgICAgIH07XG5cbiAgICAgICAgb25FcnJvciA9IChlcnIpID0+IG91dHB1dC5kZXN0cm95KGVycik7XG5cbiAgICAgICAgc291cmNlLm9uKCdkYXRhJywgb25EYXRhKTtcbiAgICAgICAgc291cmNlLm9uKCdlbmQnLCBvbkVuZCk7XG4gICAgICAgIHNvdXJjZS5vbignZXJyb3InLCBvbkVycm9yKTtcbiAgICAgIH1cblxuICAgICAgLy8gUmVzdW1lIHNvdXJjZSBpbiBjYXNlIGl0IHdhcyBwYXVzZWQgZHVlIHRvIGJhY2twcmVzc3VyZVxuICAgICAgaWYgKCFzb3VyY2VFbmRlZCkge1xuICAgICAgICBzb3VyY2UucmVzdW1lKCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBkZXN0cm95KGVyciwgY2FsbGJhY2spIHtcbiAgICAgIGlmIChvbkRhdGEpIHtcbiAgICAgICAgc291cmNlLnJlbW92ZUxpc3RlbmVyKCdkYXRhJywgb25EYXRhKTtcbiAgICAgIH1cbiAgICAgIGlmIChvbkVuZCkge1xuICAgICAgICBzb3VyY2UucmVtb3ZlTGlzdGVuZXIoJ2VuZCcsIG9uRW5kKTtcbiAgICAgIH1cbiAgICAgIGlmIChvbkVycm9yKSB7XG4gICAgICAgIHNvdXJjZS5yZW1vdmVMaXN0ZW5lcignZXJyb3InLCBvbkVycm9yKTtcbiAgICAgIH1cbiAgICAgIC8vIFN1cHByZXNzIGVycm9ycyBlbWl0dGVkIGR1cmluZyBkcmFpbiAoZS5nLiBjbGllbnQgZGlzY29ubmVjdClcbiAgICAgIHNvdXJjZS5vbignZXJyb3InLCAoKSA9PiB7fSk7XG4gICAgICBpZiAoIXNvdXJjZUVuZGVkKSB7XG4gICAgICAgIHNvdXJjZS5yZXN1bWUoKTtcbiAgICAgIH1cbiAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gb3V0cHV0O1xufVxuXG4vLyBTZWdtZW50cyB0aGF0IGNvbmZsaWN0IHdpdGggc3ViLXJvdXRlcyB1bmRlciBHRVQgL2ZpbGVzLzphcHBJZC8qLiBJZiBhIGZpbGVcbi8vIGRpcmVjdG9yeSBzdGFydHMgd2l0aCBvbmUgb2YgdGhlc2UsIGl0cyBVUkwgd291bGQgbWF0Y2ggdGhlIHdyb25nIHJvdXRlXG4vLyBoYW5kbGVyLiBVcGRhdGUgdGhpcyBsaXN0IHdoZW4gYWRkaW5nIG5ldyBzdWItcm91dGVzIHRvIGV4cHJlc3NSb3V0ZXIoKS5cbmV4cG9ydCBjb25zdCBSRVNFUlZFRF9ESVJFQ1RPUllfU0VHTUVOVFMgPSBbJ21ldGFkYXRhJ107XG5cbmV4cG9ydCBjbGFzcyBGaWxlc1JvdXRlciB7XG4gIGV4cHJlc3NSb3V0ZXIoeyBtYXhVcGxvYWRTaXplID0gJzIwTWInIH0gPSB7fSkge1xuICAgIHZhciByb3V0ZXIgPSBleHByZXNzLlJvdXRlcigpO1xuICAgIC8vIE1ldGFkYXRhIHJvdXRlIG11c3QgY29tZSBiZWZvcmUgdGhlIGNhdGNoLWFsbCBHRVQgcm91dGVcbiAgICByb3V0ZXIuZ2V0KCcvZmlsZXMvOmFwcElkL21ldGFkYXRhLypmaWxlcGF0aCcsIHRoaXMubWV0YWRhdGFIYW5kbGVyKTtcbiAgICByb3V0ZXIuZ2V0KCcvZmlsZXMvOmFwcElkLypmaWxlcGF0aCcsIHRoaXMuZ2V0SGFuZGxlcik7XG5cbiAgICByb3V0ZXIucG9zdCgnL2ZpbGVzJywgZnVuY3Rpb24gKHJlcSwgcmVzLCBuZXh0KSB7XG4gICAgICBuZXh0KG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5JTlZBTElEX0ZJTEVfTkFNRSwgJ0ZpbGVuYW1lIG5vdCBwcm92aWRlZC4nKSk7XG4gICAgfSk7XG5cbiAgICByb3V0ZXIucG9zdChcbiAgICAgICcvZmlsZXMvOmZpbGVuYW1lJyxcbiAgICAgIHRoaXMuX2Vhcmx5SGVhZGVyc01pZGRsZXdhcmUoKSxcbiAgICAgIHRoaXMuX2JvZHlQYXJzaW5nTWlkZGxld2FyZShtYXhVcGxvYWRTaXplKSxcbiAgICAgIE1pZGRsZXdhcmVzLmhhbmRsZVBhcnNlSGVhZGVycyxcbiAgICAgIE1pZGRsZXdhcmVzLmhhbmRsZVBhcnNlU2Vzc2lvbixcbiAgICAgIHRoaXMuY3JlYXRlSGFuZGxlci5iaW5kKHRoaXMpXG4gICAgKTtcblxuICAgIHJvdXRlci5kZWxldGUoXG4gICAgICAnL2ZpbGVzLypmaWxlcGF0aCcsXG4gICAgICBNaWRkbGV3YXJlcy5oYW5kbGVQYXJzZUhlYWRlcnMsXG4gICAgICBNaWRkbGV3YXJlcy5oYW5kbGVQYXJzZVNlc3Npb24sXG4gICAgICBNaWRkbGV3YXJlcy5lbmZvcmNlTWFzdGVyS2V5QWNjZXNzLFxuICAgICAgdGhpcy5kZWxldGVIYW5kbGVyXG4gICAgKTtcbiAgICByZXR1cm4gcm91dGVyO1xuICB9XG5cbiAgc3RhdGljIF9nZXRGaWxlbmFtZUZyb21QYXJhbXMocmVxKSB7XG4gICAgY29uc3QgcGFydHMgPSByZXEucGFyYW1zLmZpbGVwYXRoO1xuICAgIHJldHVybiBBcnJheS5pc0FycmF5KHBhcnRzKSA/IHBhcnRzLmpvaW4oJy8nKSA6IHBhcnRzO1xuICB9XG5cbiAgc3RhdGljIHZhbGlkYXRlRGlyZWN0b3J5KGRpcmVjdG9yeSkge1xuICAgIGlmICh0eXBlb2YgZGlyZWN0b3J5ICE9PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5JTlZBTElEX0ZJTEVfTkFNRSwgJ0RpcmVjdG9yeSBtdXN0IGJlIGEgc3RyaW5nLicpO1xuICAgIH1cbiAgICBpZiAoZGlyZWN0b3J5Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5JTlZBTElEX0ZJTEVfTkFNRSwgJ0RpcmVjdG9yeSBtdXN0IG5vdCBiZSBlbXB0eS4nKTtcbiAgICB9XG4gICAgaWYgKGRpcmVjdG9yeS5sZW5ndGggPiAyNTYpIHtcbiAgICAgIHJldHVybiBuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuSU5WQUxJRF9GSUxFX05BTUUsICdEaXJlY3RvcnkgcGF0aCBpcyB0b28gbG9uZy4nKTtcbiAgICB9XG4gICAgaWYgKGRpcmVjdG9yeS5pbmNsdWRlcygnLi4nKSkge1xuICAgICAgcmV0dXJuIG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5JTlZBTElEX0ZJTEVfTkFNRSwgJ0RpcmVjdG9yeSBtdXN0IG5vdCBjb250YWluIFwiLi5cIi4nKTtcbiAgICB9XG4gICAgaWYgKGRpcmVjdG9yeS5zdGFydHNXaXRoKCcvJykgfHwgZGlyZWN0b3J5LmVuZHNXaXRoKCcvJykpIHtcbiAgICAgIHJldHVybiBuZXcgUGFyc2UuRXJyb3IoXG4gICAgICAgIFBhcnNlLkVycm9yLklOVkFMSURfRklMRV9OQU1FLFxuICAgICAgICAnRGlyZWN0b3J5IG11c3Qgbm90IHN0YXJ0IG9yIGVuZCB3aXRoIFwiL1wiLidcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChkaXJlY3RvcnkuaW5jbHVkZXMoJy8vJykpIHtcbiAgICAgIHJldHVybiBuZXcgUGFyc2UuRXJyb3IoXG4gICAgICAgIFBhcnNlLkVycm9yLklOVkFMSURfRklMRV9OQU1FLFxuICAgICAgICAnRGlyZWN0b3J5IG11c3Qgbm90IGNvbnRhaW4gY29uc2VjdXRpdmUgc2xhc2hlcy4nXG4gICAgICApO1xuICAgIH1cbiAgICBjb25zdCBmaXJzdFNlZ21lbnQgPSBkaXJlY3Rvcnkuc3BsaXQoJy8nKVswXTtcbiAgICBpZiAoUkVTRVJWRURfRElSRUNUT1JZX1NFR01FTlRTLmluY2x1ZGVzKGZpcnN0U2VnbWVudCkpIHtcbiAgICAgIHJldHVybiBuZXcgUGFyc2UuRXJyb3IoXG4gICAgICAgIFBhcnNlLkVycm9yLklOVkFMSURfRklMRV9OQU1FLFxuICAgICAgICBgRGlyZWN0b3J5IG11c3Qgbm90IHN0YXJ0IHdpdGggcmVzZXJ2ZWQgc2VnbWVudCBcIiR7Zmlyc3RTZWdtZW50fVwiLmBcbiAgICAgICk7XG4gICAgfVxuICAgIGNvbnN0IGRpclJlZ2V4ID0gL15bYS16QS1aMC05XVthLXpBLVowLTlfXFwtL10qJC87XG4gICAgaWYgKCFkaXJSZWdleC50ZXN0KGRpcmVjdG9yeSkpIHtcbiAgICAgIHJldHVybiBuZXcgUGFyc2UuRXJyb3IoXG4gICAgICAgIFBhcnNlLkVycm9yLklOVkFMSURfRklMRV9OQU1FLFxuICAgICAgICAnRGlyZWN0b3J5IGNvbnRhaW5zIGludmFsaWQgY2hhcmFjdGVycy4nXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGFzeW5jIGdldEhhbmRsZXIocmVxLCByZXMpIHtcbiAgICBjb25zdCBjb25maWcgPSBDb25maWcuZ2V0KHJlcS5wYXJhbXMuYXBwSWQpO1xuICAgIGlmICghY29uZmlnKSB7XG4gICAgICBjb25zdCBlcnJvciA9IGNyZWF0ZVNhbml0aXplZEh0dHBFcnJvcig0MDMsICdJbnZhbGlkIGFwcGxpY2F0aW9uIElELicsIGNvbmZpZyk7XG4gICAgICByZXMuc3RhdHVzKGVycm9yLnN0YXR1cyk7XG4gICAgICByZXMuanNvbih7IGVycm9yOiBlcnJvci5tZXNzYWdlIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxldCBmaWxlbmFtZSA9IEZpbGVzUm91dGVyLl9nZXRGaWxlbmFtZUZyb21QYXJhbXMocmVxKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgZmlsZXNDb250cm9sbGVyID0gY29uZmlnLmZpbGVzQ29udHJvbGxlcjtcbiAgICAgIGNvbnN0IG1pbWUgPSAoYXdhaXQgaW1wb3J0KCdtaW1lJykpLmRlZmF1bHQ7XG4gICAgICBsZXQgY29udGVudFR5cGUgPSBtaW1lLmdldFR5cGUoZmlsZW5hbWUpO1xuICAgICAgbGV0IGZpbGUgPSBuZXcgUGFyc2UuRmlsZShmaWxlbmFtZSwgeyBiYXNlNjQ6ICcnIH0sIGNvbnRlbnRUeXBlKTtcbiAgICAgIGNvbnN0IHRyaWdnZXJSZXN1bHQgPSBhd2FpdCB0cmlnZ2Vycy5tYXliZVJ1bkZpbGVUcmlnZ2VyKFxuICAgICAgICB0cmlnZ2Vycy5UeXBlcy5iZWZvcmVGaW5kLFxuICAgICAgICB7IGZpbGUgfSxcbiAgICAgICAgY29uZmlnLFxuICAgICAgICByZXEuYXV0aFxuICAgICAgKTtcbiAgICAgIGlmICh0cmlnZ2VyUmVzdWx0Py5maWxlPy5fbmFtZSkge1xuICAgICAgICBmaWxlbmFtZSA9IHRyaWdnZXJSZXN1bHQ/LmZpbGU/Ll9uYW1lO1xuICAgICAgICBjb250ZW50VHlwZSA9IG1pbWUuZ2V0VHlwZShmaWxlbmFtZSk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGRlZmF1bHRSZXNwb25zZUhlYWRlcnMgPSB7ICdYLUNvbnRlbnQtVHlwZS1PcHRpb25zJzogJ25vc25pZmYnIH07XG5cbiAgICAgIGlmIChpc0ZpbGVTdHJlYW1hYmxlKHJlcSwgZmlsZXNDb250cm9sbGVyKSkge1xuICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhkZWZhdWx0UmVzcG9uc2VIZWFkZXJzKSkge1xuICAgICAgICAgIHJlcy5zZXQoa2V5LCB2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgZmlsZXNDb250cm9sbGVyLmhhbmRsZUZpbGVTdHJlYW0oY29uZmlnLCBmaWxlbmFtZSwgcmVxLCByZXMsIGNvbnRlbnRUeXBlKS5jYXRjaCgoKSA9PiB7XG4gICAgICAgICAgcmVzLnN0YXR1cyg0MDQpO1xuICAgICAgICAgIHJlcy5zZXQoJ0NvbnRlbnQtVHlwZScsICd0ZXh0L3BsYWluJyk7XG4gICAgICAgICAgcmVzLmVuZCgnRmlsZSBub3QgZm91bmQuJyk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGxldCBkYXRhID0gYXdhaXQgZmlsZXNDb250cm9sbGVyLmdldEZpbGVEYXRhKGNvbmZpZywgZmlsZW5hbWUpLmNhdGNoKCgpID0+IHtcbiAgICAgICAgcmVzLnN0YXR1cyg0MDQpO1xuICAgICAgICByZXMuc2V0KCdDb250ZW50LVR5cGUnLCAndGV4dC9wbGFpbicpO1xuICAgICAgICByZXMuZW5kKCdGaWxlIG5vdCBmb3VuZC4nKTtcbiAgICAgIH0pO1xuICAgICAgaWYgKCFkYXRhKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGZpbGUgPSBuZXcgUGFyc2UuRmlsZShmaWxlbmFtZSwgeyBiYXNlNjQ6IGRhdGEudG9TdHJpbmcoJ2Jhc2U2NCcpIH0sIGNvbnRlbnRUeXBlKTtcbiAgICAgIGNvbnN0IGFmdGVyRmluZCA9IGF3YWl0IHRyaWdnZXJzLm1heWJlUnVuRmlsZVRyaWdnZXIoXG4gICAgICAgIHRyaWdnZXJzLlR5cGVzLmFmdGVyRmluZCxcbiAgICAgICAgeyBmaWxlLCBmb3JjZURvd25sb2FkOiBmYWxzZSwgcmVzcG9uc2VIZWFkZXJzOiB7IC4uLmRlZmF1bHRSZXNwb25zZUhlYWRlcnMgfSB9LFxuICAgICAgICBjb25maWcsXG4gICAgICAgIHJlcS5hdXRoXG4gICAgICApO1xuXG4gICAgICBpZiAoYWZ0ZXJGaW5kPy5maWxlKSB7XG4gICAgICAgIGNvbnRlbnRUeXBlID0gbWltZS5nZXRUeXBlKGFmdGVyRmluZC5maWxlLl9uYW1lKTtcbiAgICAgICAgZGF0YSA9IEJ1ZmZlci5mcm9tKGFmdGVyRmluZC5maWxlLl9kYXRhLCAnYmFzZTY0Jyk7XG4gICAgICB9XG5cbiAgICAgIHJlcy5zdGF0dXMoMjAwKTtcbiAgICAgIHJlcy5zZXQoJ0NvbnRlbnQtVHlwZScsIGNvbnRlbnRUeXBlKTtcbiAgICAgIHJlcy5zZXQoJ0NvbnRlbnQtTGVuZ3RoJywgZGF0YS5sZW5ndGgpO1xuICAgICAgaWYgKGFmdGVyRmluZC5mb3JjZURvd25sb2FkKSB7XG4gICAgICAgIHJlcy5zZXQoJ0NvbnRlbnQtRGlzcG9zaXRpb24nLCBgYXR0YWNobWVudDtmaWxlbmFtZT0ke2FmdGVyRmluZC5maWxlLl9uYW1lfWApO1xuICAgICAgfVxuICAgICAgaWYgKGFmdGVyRmluZC5yZXNwb25zZUhlYWRlcnMpIHtcbiAgICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoYWZ0ZXJGaW5kLnJlc3BvbnNlSGVhZGVycykpIHtcbiAgICAgICAgICByZXMuc2V0KGtleSwgdmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXMuZW5kKGRhdGEpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnN0IGVyciA9IHRyaWdnZXJzLnJlc29sdmVFcnJvcihlLCB7XG4gICAgICAgIGNvZGU6IFBhcnNlLkVycm9yLlNDUklQVF9GQUlMRUQsXG4gICAgICAgIG1lc3NhZ2U6IGBDb3VsZCBub3QgZmluZCBmaWxlOiAke2ZpbGVuYW1lfS5gLFxuICAgICAgfSk7XG4gICAgICByZXMuc3RhdHVzKDQwMyk7XG4gICAgICByZXMuanNvbih7IGNvZGU6IGVyci5jb2RlLCBlcnJvcjogZXJyLm1lc3NhZ2UgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIE1pZGRsZXdhcmUgdGhhdCBydW5zIGJlZm9yZSBib2R5IHBhcnNpbmcgdG8gaGFuZGxlIGhlYWRlcnMgdGhhdCBtdXN0IGJlXG4gICAqIHJlc29sdmVkIGJlZm9yZSB0aGUgcmVxdWVzdCBib2R5IGlzIGNvbnN1bWVkLiBDdXJyZW50bHkgc3VwcG9ydHM6XG4gICAqXG4gICAqIC0gYFgtUGFyc2UtRmlsZS1NYXgtVXBsb2FkLVNpemVgOiBPdmVycmlkZXMgdGhlIHNlcnZlci13aWRlIGBtYXhVcGxvYWRTaXplYFxuICAgKiAgIGZvciB0aGlzIHJlcXVlc3QuIFJlcXVpcmVzIHRoZSBtYXN0ZXIga2V5LiBUaGUgdmFsdWUgdXNlcyB0aGUgc2FtZSBmb3JtYXRcbiAgICogICBhcyB0aGUgc2VydmVyIG9wdGlvbiAoZS5nLiBgJzUwbWInYCwgYCcxZ2InYCkuIFNldHMgYHJlcS5fbWF4VXBsb2FkU2l6ZU92ZXJyaWRlYFxuICAgKiAgIChpbiBieXRlcykgZm9yIGBfYm9keVBhcnNpbmdNaWRkbGV3YXJlYCB0byB1c2UuXG4gICAqL1xuICBfZWFybHlIZWFkZXJzTWlkZGxld2FyZSgpIHtcbiAgICByZXR1cm4gYXN5bmMgKHJlcSwgcmVzLCBuZXh0KSA9PiB7XG4gICAgICBjb25zdCBtYXhVcGxvYWRTaXplT3ZlcnJpZGUgPSByZXEuZ2V0KCdYLVBhcnNlLUZpbGUtTWF4LVVwbG9hZC1TaXplJyk7XG4gICAgICBpZiAoIW1heFVwbG9hZFNpemVPdmVycmlkZSkge1xuICAgICAgICByZXR1cm4gbmV4dCgpO1xuICAgICAgfVxuICAgICAgY29uc3QgYXBwSWQgPSByZXEuZ2V0KCdYLVBhcnNlLUFwcGxpY2F0aW9uLUlkJyk7XG4gICAgICBjb25zdCBjb25maWcgPSBDb25maWcuZ2V0KGFwcElkKTtcbiAgICAgIGlmICghY29uZmlnKSB7XG4gICAgICAgIGNvbnN0IGVycm9yID0gY3JlYXRlU2FuaXRpemVkSHR0cEVycm9yKDQwMywgJ0ludmFsaWQgYXBwbGljYXRpb24gSUQuJywgdW5kZWZpbmVkKTtcbiAgICAgICAgcmVzLnN0YXR1cyhlcnJvci5zdGF0dXMpO1xuICAgICAgICByZXMuanNvbih7IGVycm9yOiBlcnJvci5tZXNzYWdlIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCBtYXN0ZXJLZXkgPSBhd2FpdCBjb25maWcubG9hZE1hc3RlcktleSgpO1xuICAgICAgaWYgKHJlcS5nZXQoJ1gtUGFyc2UtTWFzdGVyLUtleScpICE9PSBtYXN0ZXJLZXkpIHtcbiAgICAgICAgY29uc3QgZXJyb3IgPSBjcmVhdGVTYW5pdGl6ZWRIdHRwRXJyb3IoNDAzLCAndW5hdXRob3JpemVkOiBtYXN0ZXIga2V5IGlzIHJlcXVpcmVkJywgY29uZmlnKTtcbiAgICAgICAgcmVzLnN0YXR1cyhlcnJvci5zdGF0dXMpO1xuICAgICAgICByZXMuanNvbih7IGVycm9yOiBlcnJvci5tZXNzYWdlIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoY29uZmlnLm1hc3RlcktleUlwcz8ubGVuZ3RoICYmICFNaWRkbGV3YXJlcy5jaGVja0lwKHJlcS5pcCwgY29uZmlnLm1hc3RlcktleUlwcywgY29uZmlnLm1hc3RlcktleUlwc1N0b3JlKSkge1xuICAgICAgICBjb25zdCBlcnJvciA9IGNyZWF0ZVNhbml0aXplZEh0dHBFcnJvcig0MDMsICd1bmF1dGhvcml6ZWQ6IG1hc3RlciBrZXkgaXMgcmVxdWlyZWQnLCBjb25maWcpO1xuICAgICAgICByZXMuc3RhdHVzKGVycm9yLnN0YXR1cyk7XG4gICAgICAgIHJlcy5qc29uKHsgZXJyb3I6IGVycm9yLm1lc3NhZ2UgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGxldCBwYXJzZWRCeXRlcztcbiAgICAgIHRyeSB7XG4gICAgICAgIHBhcnNlZEJ5dGVzID0gVXRpbHMucGFyc2VTaXplVG9CeXRlcyhtYXhVcGxvYWRTaXplT3ZlcnJpZGUpO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIHJldHVybiBuZXh0KFxuICAgICAgICAgIG5ldyBQYXJzZS5FcnJvcihcbiAgICAgICAgICAgIFBhcnNlLkVycm9yLkZJTEVfU0FWRV9FUlJPUixcbiAgICAgICAgICAgIGBJbnZhbGlkIG1heFVwbG9hZFNpemUgb3ZlcnJpZGUgdmFsdWU6ICR7bWF4VXBsb2FkU2l6ZU92ZXJyaWRlfWBcbiAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXEuX21heFVwbG9hZFNpemVPdmVycmlkZSA9IHBhcnNlZEJ5dGVzO1xuICAgICAgbmV4dCgpO1xuICAgIH07XG4gIH1cblxuICBfYm9keVBhcnNpbmdNaWRkbGV3YXJlKG1heFVwbG9hZFNpemUpIHtcbiAgICBjb25zdCBkZWZhdWx0TWF4Qnl0ZXMgPSBVdGlscy5wYXJzZVNpemVUb0J5dGVzKG1heFVwbG9hZFNpemUpO1xuICAgIHJldHVybiAocmVxLCByZXMsIG5leHQpID0+IHtcbiAgICAgIGlmIChyZXEuZ2V0KCdYLVBhcnNlLVVwbG9hZC1Nb2RlJykgPT09ICdzdHJlYW0nKSB7XG4gICAgICAgIHJlcS5fbWF4VXBsb2FkU2l6ZUJ5dGVzID0gcmVxLl9tYXhVcGxvYWRTaXplT3ZlcnJpZGUgPz8gZGVmYXVsdE1heEJ5dGVzO1xuICAgICAgICByZXR1cm4gbmV4dCgpO1xuICAgICAgfVxuICAgICAgY29uc3QgbGltaXQgPSByZXEuX21heFVwbG9hZFNpemVPdmVycmlkZSA/PyBtYXhVcGxvYWRTaXplO1xuICAgICAgcmV0dXJuIGV4cHJlc3MucmF3KHsgdHlwZTogKCkgPT4gdHJ1ZSwgbGltaXQgfSkocmVxLCByZXMsIG5leHQpO1xuICAgIH07XG4gIH1cblxuICBhc3luYyBjcmVhdGVIYW5kbGVyKHJlcSwgcmVzLCBuZXh0KSB7XG4gICAgaWYgKHJlcS5hdXRoLmlzUmVhZE9ubHkpIHtcbiAgICAgIGNvbnN0IGVycm9yID0gY3JlYXRlU2FuaXRpemVkSHR0cEVycm9yKDQwMywgXCJyZWFkLW9ubHkgbWFzdGVyS2V5IGlzbid0IGFsbG93ZWQgdG8gY3JlYXRlIGEgZmlsZS5cIiwgcmVxLmNvbmZpZyk7XG4gICAgICByZXMuc3RhdHVzKGVycm9yLnN0YXR1cyk7XG4gICAgICByZXMuZW5kKGB7XCJlcnJvclwiOlwiJHtlcnJvci5tZXNzYWdlfVwifWApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBjb25maWcgPSByZXEuY29uZmlnO1xuICAgIGNvbnN0IHVzZXIgPSByZXEuYXV0aC51c2VyO1xuICAgIGNvbnN0IGlzTWFzdGVyID0gcmVxLmF1dGguaXNNYXN0ZXI7XG4gICAgY29uc3QgaXNMaW5rZWQgPSB1c2VyICYmIFBhcnNlLkFub255bW91c1V0aWxzLmlzTGlua2VkKHVzZXIpO1xuICAgIGlmICghaXNNYXN0ZXIgJiYgIWNvbmZpZy5maWxlVXBsb2FkLmVuYWJsZUZvckFub255bW91c1VzZXIgJiYgaXNMaW5rZWQpIHtcbiAgICAgIG5leHQoXG4gICAgICAgIG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5GSUxFX1NBVkVfRVJST1IsICdGaWxlIHVwbG9hZCBieSBhbm9ueW1vdXMgdXNlciBpcyBkaXNhYmxlZC4nKVxuICAgICAgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCFpc01hc3RlciAmJiAhY29uZmlnLmZpbGVVcGxvYWQuZW5hYmxlRm9yQXV0aGVudGljYXRlZFVzZXIgJiYgIWlzTGlua2VkICYmIHVzZXIpIHtcbiAgICAgIG5leHQoXG4gICAgICAgIG5ldyBQYXJzZS5FcnJvcihcbiAgICAgICAgICBQYXJzZS5FcnJvci5GSUxFX1NBVkVfRVJST1IsXG4gICAgICAgICAgJ0ZpbGUgdXBsb2FkIGJ5IGF1dGhlbnRpY2F0ZWQgdXNlciBpcyBkaXNhYmxlZC4nXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICghaXNNYXN0ZXIgJiYgIWNvbmZpZy5maWxlVXBsb2FkLmVuYWJsZUZvclB1YmxpYyAmJiAhdXNlcikge1xuICAgICAgbmV4dChuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuRklMRV9TQVZFX0VSUk9SLCAnRmlsZSB1cGxvYWQgYnkgcHVibGljIGlzIGRpc2FibGVkLicpKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgZmlsZXNDb250cm9sbGVyID0gY29uZmlnLmZpbGVzQ29udHJvbGxlcjtcbiAgICBjb25zdCB7IGZpbGVuYW1lIH0gPSByZXEucGFyYW1zO1xuICAgIGNvbnN0IGNvbnRlbnRUeXBlID0gcmVxLmdldCgnQ29udGVudC10eXBlJyk7XG5cbiAgICBjb25zdCBlcnJvciA9IGZpbGVzQ29udHJvbGxlci52YWxpZGF0ZUZpbGVuYW1lKGZpbGVuYW1lKTtcbiAgICBpZiAoZXJyb3IpIHtcbiAgICAgIG5leHQoZXJyb3IpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGZpbGVFeHRlbnNpb25zID0gY29uZmlnLmZpbGVVcGxvYWQ/LmZpbGVFeHRlbnNpb25zO1xuICAgIGlmICghaXNNYXN0ZXIgJiYgZmlsZUV4dGVuc2lvbnMpIHtcbiAgICAgIGNvbnN0IGlzVmFsaWRFeHRlbnNpb24gPSBleHRlbnNpb24gPT4ge1xuICAgICAgICByZXR1cm4gZmlsZUV4dGVuc2lvbnMuc29tZShleHQgPT4ge1xuICAgICAgICAgIGlmIChleHQgPT09ICcqJykge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IHJlZ2V4ID0gbmV3IFJlZ0V4cChleHQpO1xuICAgICAgICAgIGlmIChyZWdleC50ZXN0KGV4dGVuc2lvbikpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgICAgbGV0IGV4dGVuc2lvbiA9IGNvbnRlbnRUeXBlO1xuICAgICAgaWYgKGZpbGVuYW1lICYmIGZpbGVuYW1lLmluY2x1ZGVzKCcuJykpIHtcbiAgICAgICAgZXh0ZW5zaW9uID0gZmlsZW5hbWUuc3Vic3RyaW5nKGZpbGVuYW1lLmxhc3RJbmRleE9mKCcuJykgKyAxKTtcbiAgICAgIH0gZWxzZSBpZiAoY29udGVudFR5cGUgJiYgY29udGVudFR5cGUuaW5jbHVkZXMoJy8nKSkge1xuICAgICAgICBleHRlbnNpb24gPSBjb250ZW50VHlwZS5zcGxpdCgnLycpWzFdO1xuICAgICAgfVxuICAgICAgLy8gU3RyaXAgTUlNRSBwYXJhbWV0ZXJzIChlLmcuIFwiO2NoYXJzZXQ9dXRmLThcIikgYW5kIHdoaXRlc3BhY2VcbiAgICAgIGV4dGVuc2lvbiA9IGV4dGVuc2lvbj8uc3BsaXQoJzsnKVswXT8ucmVwbGFjZSgvXFxzKy9nLCAnJyk7XG5cbiAgICAgIGlmIChleHRlbnNpb24gJiYgIWlzVmFsaWRFeHRlbnNpb24oZXh0ZW5zaW9uKSkge1xuICAgICAgICBuZXh0KFxuICAgICAgICAgIG5ldyBQYXJzZS5FcnJvcihcbiAgICAgICAgICAgIFBhcnNlLkVycm9yLkZJTEVfU0FWRV9FUlJPUixcbiAgICAgICAgICAgIGBGaWxlIHVwbG9hZCBvZiBleHRlbnNpb24gJHtleHRlbnNpb259IGlzIGRpc2FibGVkLmBcbiAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBGb3Igc3RyZWFtaW5nIHVwbG9hZHMsIHJlYWQgZmlsZSBkYXRhIGZyb20gaGVhZGVycyBzaW5jZSB0aGUgYm9keSBpcyB0aGUgcmF3IHN0cmVhbVxuICAgIGlmIChyZXEuZ2V0KCdYLVBhcnNlLVVwbG9hZC1Nb2RlJykgPT09ICdzdHJlYW0nKSB7XG4gICAgICByZXEuZmlsZURhdGEgPSB7fTtcbiAgICAgIGlmIChyZXEuZ2V0KCdYLVBhcnNlLUZpbGUtRGlyZWN0b3J5JykpIHtcbiAgICAgICAgcmVxLmZpbGVEYXRhLmRpcmVjdG9yeSA9IHJlcS5nZXQoJ1gtUGFyc2UtRmlsZS1EaXJlY3RvcnknKTtcbiAgICAgIH1cbiAgICAgIGlmIChyZXEuZ2V0KCdYLVBhcnNlLUZpbGUtTWV0YWRhdGEnKSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHBhcnNlZCA9IEpTT04ucGFyc2UocmVxLmdldCgnWC1QYXJzZS1GaWxlLU1ldGFkYXRhJykpO1xuICAgICAgICAgIGlmICghcGFyc2VkIHx8IHR5cGVvZiBwYXJzZWQgIT09ICdvYmplY3QnIHx8IEFycmF5LmlzQXJyYXkocGFyc2VkKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJlcS5maWxlRGF0YS5tZXRhZGF0YSA9IHBhcnNlZDtcbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgbmV4dChuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuSU5WQUxJRF9KU09OLCAnSW52YWxpZCBKU09OIGluIFgtUGFyc2UtRmlsZS1NZXRhZGF0YSBoZWFkZXIuJykpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHJlcS5nZXQoJ1gtUGFyc2UtRmlsZS1UYWdzJykpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBwYXJzZWQgPSBKU09OLnBhcnNlKHJlcS5nZXQoJ1gtUGFyc2UtRmlsZS1UYWdzJykpO1xuICAgICAgICAgIGlmICghcGFyc2VkIHx8IHR5cGVvZiBwYXJzZWQgIT09ICdvYmplY3QnIHx8IEFycmF5LmlzQXJyYXkocGFyc2VkKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJlcS5maWxlRGF0YS50YWdzID0gcGFyc2VkO1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICBuZXh0KG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5JTlZBTElEX0pTT04sICdJbnZhbGlkIEpTT04gaW4gWC1QYXJzZS1GaWxlLVRhZ3MgaGVhZGVyLicpKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBWYWxpZGF0ZSBkaXJlY3Rvcnkgb3B0aW9uIChyZXF1aXJlcyBtYXN0ZXIga2V5KVxuICAgIGNvbnN0IGRpcmVjdG9yeSA9IHJlcS5maWxlRGF0YT8uZGlyZWN0b3J5O1xuICAgIGlmIChkaXJlY3RvcnkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKCFpc01hc3Rlcikge1xuICAgICAgICBuZXh0KFxuICAgICAgICAgIG5ldyBQYXJzZS5FcnJvcihcbiAgICAgICAgICAgIFBhcnNlLkVycm9yLk9QRVJBVElPTl9GT1JCSURERU4sXG4gICAgICAgICAgICAnRGlyZWN0b3J5IGNhbiBvbmx5IGJlIHNldCB1c2luZyB0aGUgTWFzdGVyIEtleS4nXG4gICAgICAgICAgKVxuICAgICAgICApO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCBkaXJlY3RvcnlFcnJvciA9IEZpbGVzUm91dGVyLnZhbGlkYXRlRGlyZWN0b3J5KGRpcmVjdG9yeSk7XG4gICAgICBpZiAoZGlyZWN0b3J5RXJyb3IpIHtcbiAgICAgICAgbmV4dChkaXJlY3RvcnlFcnJvcik7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBEaXNwYXRjaCB0byB0aGUgYXBwcm9wcmlhdGUgaGFuZGxlciBiYXNlZCBvbiB3aGV0aGVyIHRoZSBib2R5IHdhcyBidWZmZXJlZFxuICAgIGlmIChCdWZmZXIuaXNCdWZmZXIocmVxLmJvZHkpKSB7XG4gICAgICByZXR1cm4gdGhpcy5faGFuZGxlQnVmZmVyZWRVcGxvYWQocmVxLCByZXMsIG5leHQpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5faGFuZGxlU3RyZWFtVXBsb2FkKHJlcSwgcmVzLCBuZXh0KTtcbiAgfVxuXG4gIGFzeW5jIF9oYW5kbGVCdWZmZXJlZFVwbG9hZChyZXEsIHJlcywgbmV4dCkge1xuICAgIGNvbnN0IGNvbmZpZyA9IHJlcS5jb25maWc7XG4gICAgY29uc3QgZmlsZXNDb250cm9sbGVyID0gY29uZmlnLmZpbGVzQ29udHJvbGxlcjtcbiAgICBjb25zdCB7IGZpbGVuYW1lIH0gPSByZXEucGFyYW1zO1xuICAgIGNvbnN0IGNvbnRlbnRUeXBlID0gcmVxLmdldCgnQ29udGVudC10eXBlJyk7XG5cbiAgICBpZiAoIXJlcS5ib2R5IHx8ICFyZXEuYm9keS5sZW5ndGgpIHtcbiAgICAgIG5leHQobmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLkZJTEVfU0FWRV9FUlJPUiwgJ0ludmFsaWQgZmlsZSB1cGxvYWQuJykpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGJhc2U2NCA9IHJlcS5ib2R5LnRvU3RyaW5nKCdiYXNlNjQnKTtcbiAgICBjb25zdCBmaWxlID0gbmV3IFBhcnNlLkZpbGUoZmlsZW5hbWUsIHsgYmFzZTY0IH0sIGNvbnRlbnRUeXBlKTtcbiAgICBjb25zdCB7IG1ldGFkYXRhID0ge30sIHRhZ3MgPSB7fSwgZGlyZWN0b3J5IH0gPSByZXEuZmlsZURhdGEgfHwge307XG4gICAgdHJ5IHtcbiAgICAgIC8vIFNjYW4gcmVxdWVzdCBkYXRhIGZvciBkZW5pZWQga2V5d29yZHNcbiAgICAgIFV0aWxzLmNoZWNrUHJvaGliaXRlZEtleXdvcmRzKGNvbmZpZywgbWV0YWRhdGEpO1xuICAgICAgVXRpbHMuY2hlY2tQcm9oaWJpdGVkS2V5d29yZHMoY29uZmlnLCB0YWdzKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbmV4dChuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuSU5WQUxJRF9LRVlfTkFNRSwgZXJyb3IpKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZmlsZS5zZXRUYWdzKHRhZ3MpO1xuICAgIGZpbGUuc2V0TWV0YWRhdGEobWV0YWRhdGEpO1xuICAgIGlmIChkaXJlY3RvcnkpIHtcbiAgICAgIGZpbGUuc2V0RGlyZWN0b3J5KGRpcmVjdG9yeSk7XG4gICAgfVxuICAgIGNvbnN0IGZpbGVTaXplID0gQnVmZmVyLmJ5dGVMZW5ndGgocmVxLmJvZHkpO1xuICAgIGNvbnN0IGZpbGVPYmplY3QgPSB7IGZpbGUsIGZpbGVTaXplIH07XG4gICAgdHJ5IHtcbiAgICAgIC8vIHJ1biBiZWZvcmVTYXZlRmlsZSB0cmlnZ2VyXG4gICAgICBjb25zdCB0cmlnZ2VyUmVzdWx0ID0gYXdhaXQgdHJpZ2dlcnMubWF5YmVSdW5GaWxlVHJpZ2dlcihcbiAgICAgICAgdHJpZ2dlcnMuVHlwZXMuYmVmb3JlU2F2ZSxcbiAgICAgICAgZmlsZU9iamVjdCxcbiAgICAgICAgY29uZmlnLFxuICAgICAgICByZXEuYXV0aFxuICAgICAgKTtcbiAgICAgIGxldCBzYXZlUmVzdWx0O1xuICAgICAgLy8gaWYgYSBuZXcgUGFyc2VGaWxlIGlzIHJldHVybmVkIGNoZWNrIGlmIGl0J3MgYW4gYWxyZWFkeSBzYXZlZCBmaWxlXG4gICAgICBpZiAodHJpZ2dlclJlc3VsdCBpbnN0YW5jZW9mIFBhcnNlLkZpbGUpIHtcbiAgICAgICAgZmlsZU9iamVjdC5maWxlID0gdHJpZ2dlclJlc3VsdDtcbiAgICAgICAgaWYgKHRyaWdnZXJSZXN1bHQudXJsKCkpIHtcbiAgICAgICAgICAvLyBzZXQgZmlsZVNpemUgdG8gbnVsbCBiZWNhdXNlIHdlIHdvbnQga25vdyBob3cgYmlnIGl0IGlzIGhlcmVcbiAgICAgICAgICBmaWxlT2JqZWN0LmZpbGVTaXplID0gbnVsbDtcbiAgICAgICAgICBzYXZlUmVzdWx0ID0ge1xuICAgICAgICAgICAgdXJsOiB0cmlnZ2VyUmVzdWx0LnVybCgpLFxuICAgICAgICAgICAgbmFtZTogdHJpZ2dlclJlc3VsdC5fbmFtZSxcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvLyBpZiB0aGUgZmlsZSByZXR1cm5lZCBieSB0aGUgdHJpZ2dlciBoYXMgYWxyZWFkeSBiZWVuIHNhdmVkIHNraXAgc2F2aW5nIGFueXRoaW5nXG4gICAgICBpZiAoIXNhdmVSZXN1bHQpIHtcbiAgICAgICAgLy8gdXBkYXRlIGZpbGVTaXplXG4gICAgICAgIGxldCBidWZmZXJEYXRhO1xuICAgICAgICBpZiAoZmlsZU9iamVjdC5maWxlLl9zb3VyY2U/LmZvcm1hdCA9PT0gJ2J1ZmZlcicpIHtcbiAgICAgICAgICBidWZmZXJEYXRhID0gZmlsZU9iamVjdC5maWxlLl9zb3VyY2UuYnVmZmVyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGJ1ZmZlckRhdGEgPSBCdWZmZXIuZnJvbShmaWxlT2JqZWN0LmZpbGUuX2RhdGEsICdiYXNlNjQnKTtcbiAgICAgICAgfVxuICAgICAgICBmaWxlT2JqZWN0LmZpbGVTaXplID0gQnVmZmVyLmJ5dGVMZW5ndGgoYnVmZmVyRGF0YSk7XG4gICAgICAgIC8vIHByZXBhcmUgZmlsZSBvcHRpb25zXG4gICAgICAgIGNvbnN0IGZpbGVPcHRpb25zID0ge1xuICAgICAgICAgIG1ldGFkYXRhOiBmaWxlT2JqZWN0LmZpbGUuX21ldGFkYXRhLFxuICAgICAgICB9O1xuICAgICAgICAvLyBzb21lIHMzLWNvbXBhdGlibGUgcHJvdmlkZXJzIChEaWdpdGFsT2NlYW4sIExpbm9kZSkgZG8gbm90IGFjY2VwdCB0YWdzXG4gICAgICAgIC8vIHNvIHdlIGRvIG5vdCBpbmNsdWRlIHRoZSB0YWdzIG9wdGlvbiBpZiBpdCBpcyBlbXB0eS5cbiAgICAgICAgY29uc3QgZmlsZVRhZ3MgPVxuICAgICAgICAgIE9iamVjdC5rZXlzKGZpbGVPYmplY3QuZmlsZS5fdGFncykubGVuZ3RoID4gMCA/IHsgdGFnczogZmlsZU9iamVjdC5maWxlLl90YWdzIH0gOiB7fTtcbiAgICAgICAgT2JqZWN0LmFzc2lnbihmaWxlT3B0aW9ucywgZmlsZVRhZ3MpO1xuICAgICAgICAvLyBpbmNsdWRlIGRpcmVjdG9yeSBpZiBzZXQgKGZyb20gY2xpZW50IHJlcXVlc3Qgb3IgYmVmb3JlU2F2ZUZpbGUgdHJpZ2dlcilcbiAgICAgICAgaWYgKGZpbGVPYmplY3QuZmlsZS5fZGlyZWN0b3J5KSB7XG4gICAgICAgICAgZmlsZU9wdGlvbnMuZGlyZWN0b3J5ID0gZmlsZU9iamVjdC5maWxlLl9kaXJlY3Rvcnk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gc2F2ZSBmaWxlXG4gICAgICAgIGNvbnN0IGNyZWF0ZUZpbGVSZXN1bHQgPSBhd2FpdCBmaWxlc0NvbnRyb2xsZXIuY3JlYXRlRmlsZShcbiAgICAgICAgICBjb25maWcsXG4gICAgICAgICAgZmlsZU9iamVjdC5maWxlLl9uYW1lLFxuICAgICAgICAgIGJ1ZmZlckRhdGEsXG4gICAgICAgICAgZmlsZU9iamVjdC5maWxlLl9zb3VyY2UudHlwZSxcbiAgICAgICAgICBmaWxlT3B0aW9uc1xuICAgICAgICApO1xuICAgICAgICAvLyB1cGRhdGUgZmlsZSB3aXRoIG5ldyBkYXRhXG4gICAgICAgIGZpbGVPYmplY3QuZmlsZS5fbmFtZSA9IGNyZWF0ZUZpbGVSZXN1bHQubmFtZTtcbiAgICAgICAgZmlsZU9iamVjdC5maWxlLl91cmwgPSBjcmVhdGVGaWxlUmVzdWx0LnVybDtcbiAgICAgICAgZmlsZU9iamVjdC5maWxlLl9yZXF1ZXN0VGFzayA9IG51bGw7XG4gICAgICAgIGZpbGVPYmplY3QuZmlsZS5fcHJldmlvdXNTYXZlID0gUHJvbWlzZS5yZXNvbHZlKGZpbGVPYmplY3QuZmlsZSk7XG4gICAgICAgIHNhdmVSZXN1bHQgPSB7XG4gICAgICAgICAgdXJsOiBjcmVhdGVGaWxlUmVzdWx0LnVybCxcbiAgICAgICAgICBuYW1lOiBjcmVhdGVGaWxlUmVzdWx0Lm5hbWUsXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICAvLyBydW4gYWZ0ZXJTYXZlRmlsZSB0cmlnZ2VyXG4gICAgICBhd2FpdCB0cmlnZ2Vycy5tYXliZVJ1bkZpbGVUcmlnZ2VyKHRyaWdnZXJzLlR5cGVzLmFmdGVyU2F2ZSwgZmlsZU9iamVjdCwgY29uZmlnLCByZXEuYXV0aCk7XG4gICAgICByZXMuc3RhdHVzKDIwMSk7XG4gICAgICByZXMuc2V0KCdMb2NhdGlvbicsIHNhdmVSZXN1bHQudXJsKTtcbiAgICAgIHJlcy5qc29uKHNhdmVSZXN1bHQpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGxvZ2dlci5lcnJvcignRXJyb3IgY3JlYXRpbmcgYSBmaWxlOiAnLCBlKTtcbiAgICAgIGNvbnN0IGVycm9yID0gdHJpZ2dlcnMucmVzb2x2ZUVycm9yKGUsIHtcbiAgICAgICAgY29kZTogUGFyc2UuRXJyb3IuRklMRV9TQVZFX0VSUk9SLFxuICAgICAgICBtZXNzYWdlOiBgQ291bGQgbm90IHN0b3JlIGZpbGU6ICR7ZmlsZU9iamVjdC5maWxlLl9uYW1lfS5gLFxuICAgICAgfSk7XG4gICAgICBuZXh0KGVycm9yKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBfaGFuZGxlU3RyZWFtVXBsb2FkKHJlcSwgcmVzLCBuZXh0KSB7XG4gICAgY29uc3QgY29uZmlnID0gcmVxLmNvbmZpZztcbiAgICBjb25zdCBmaWxlc0NvbnRyb2xsZXIgPSBjb25maWcuZmlsZXNDb250cm9sbGVyO1xuICAgIGNvbnN0IHsgZmlsZW5hbWUgfSA9IHJlcS5wYXJhbXM7XG4gICAgbGV0IGNvbnRlbnRUeXBlID0gcmVxLmdldCgnQ29udGVudC1UeXBlJyk7XG4gICAgY29uc3QgbWF4Qnl0ZXMgPSByZXEuX21heFVwbG9hZFNpemVCeXRlcztcbiAgICBsZXQgc3RyZWFtO1xuXG4gICAgdHJ5IHtcbiAgICAgIC8vIEVhcmx5IHJlamVjdGlvbiB2aWEgQ29udGVudC1MZW5ndGggaGVhZGVyXG4gICAgICBjb25zdCBjb250ZW50TGVuZ3RoID0gcmVxLmdldCgnQ29udGVudC1MZW5ndGgnKTtcbiAgICAgIGlmIChjb250ZW50TGVuZ3RoICYmIHBhcnNlSW50KGNvbnRlbnRMZW5ndGgsIDEwKSA+IG1heEJ5dGVzKSB7XG4gICAgICAgIHJlcS5yZXN1bWUoKTtcbiAgICAgICAgbmV4dChuZXcgUGFyc2UuRXJyb3IoXG4gICAgICAgICAgUGFyc2UuRXJyb3IuRklMRV9TQVZFX0VSUk9SLFxuICAgICAgICAgIGBGaWxlIHNpemUgZXhjZWVkcyBtYXhpbXVtIGFsbG93ZWQ6ICR7bWF4Qnl0ZXN9IGJ5dGVzLmBcbiAgICAgICAgKSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgbWltZSA9IChhd2FpdCBpbXBvcnQoJ21pbWUnKSkuZGVmYXVsdDtcblxuICAgICAgLy8gSW5mZXIgY29udGVudCB0eXBlIGZyb20gZXh0ZW5zaW9uIG9yIGFkZCBleHRlbnNpb24gZnJvbSBjb250ZW50IHR5cGVcbiAgICAgIGNvbnN0IGhhc0V4dGVuc2lvbiA9IGZpbGVuYW1lICYmIGZpbGVuYW1lLmluY2x1ZGVzKCcuJyk7XG4gICAgICBpZiAoaGFzRXh0ZW5zaW9uICYmICFjb250ZW50VHlwZSkge1xuICAgICAgICBjb250ZW50VHlwZSA9IG1pbWUuZ2V0VHlwZShmaWxlbmFtZSk7XG4gICAgICB9IGVsc2UgaWYgKCFoYXNFeHRlbnNpb24gJiYgY29udGVudFR5cGUpIHtcbiAgICAgICAgLy8gZXh0ZW5zaW9uIHdpbGwgYmUgYWRkZWQgYnkgZmlsZXNDb250cm9sbGVyLmNyZWF0ZUZpbGVcbiAgICAgIH1cblxuICAgICAgLy8gQ3JlYXRlIHNpemUtbGltaXRlZCBzdHJlYW0gd3JhcHBpbmcgdGhlIHJlcXVlc3RcbiAgICAgIHN0cmVhbSA9IGNyZWF0ZVNpemVMaW1pdGVkU3RyZWFtKHJlcSwgbWF4Qnl0ZXMpO1xuXG4gICAgICAvLyBCdWlsZCBhIFBhcnNlLkZpbGUgd2l0aCBubyBfZGF0YSAoc3RyZWFtaW5nIG1vZGUpXG4gICAgICBjb25zdCBmaWxlID0gbmV3IFBhcnNlLkZpbGUoZmlsZW5hbWUsIHsgYmFzZTY0OiAnJyB9LCBjb250ZW50VHlwZSk7XG4gICAgICBjb25zdCB7IG1ldGFkYXRhID0ge30sIHRhZ3MgPSB7fSwgZGlyZWN0b3J5IH0gPSByZXEuZmlsZURhdGEgfHwge307XG5cbiAgICAgIC8vIFZhbGlkYXRlIG1ldGFkYXRhIGFuZCB0YWdzIGZvciBwcm9oaWJpdGVkIGtleXdvcmRzXG4gICAgICB0cnkge1xuICAgICAgICBVdGlscy5jaGVja1Byb2hpYml0ZWRLZXl3b3Jkcyhjb25maWcsIG1ldGFkYXRhKTtcbiAgICAgICAgVXRpbHMuY2hlY2tQcm9oaWJpdGVkS2V5d29yZHMoY29uZmlnLCB0YWdzKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIHN0cmVhbS5kZXN0cm95KCk7XG4gICAgICAgIG5leHQobmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLklOVkFMSURfS0VZX05BTUUsIGVycm9yKSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgZmlsZS5zZXRUYWdzKHRhZ3MpO1xuICAgICAgZmlsZS5zZXRNZXRhZGF0YShtZXRhZGF0YSk7XG4gICAgICBpZiAoZGlyZWN0b3J5KSB7XG4gICAgICAgIGZpbGUuc2V0RGlyZWN0b3J5KGRpcmVjdG9yeSk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGZpbGVTaXplID0gcmVxLmdldCgnQ29udGVudC1MZW5ndGgnKVxuICAgICAgICA/IHBhcnNlSW50KHJlcS5nZXQoJ0NvbnRlbnQtTGVuZ3RoJyksIDEwKVxuICAgICAgICA6IG51bGw7XG4gICAgICBjb25zdCBmaWxlT2JqZWN0ID0geyBmaWxlLCBmaWxlU2l6ZSwgc3RyZWFtOiB0cnVlIH07XG5cbiAgICAgIC8vIFJ1biBiZWZvcmVTYXZlRmlsZSB0cmlnZ2VyXG4gICAgICBjb25zdCB0cmlnZ2VyUmVzdWx0ID0gYXdhaXQgdHJpZ2dlcnMubWF5YmVSdW5GaWxlVHJpZ2dlcihcbiAgICAgICAgdHJpZ2dlcnMuVHlwZXMuYmVmb3JlU2F2ZSxcbiAgICAgICAgZmlsZU9iamVjdCxcbiAgICAgICAgY29uZmlnLFxuICAgICAgICByZXEuYXV0aFxuICAgICAgKTtcblxuICAgICAgbGV0IHNhdmVSZXN1bHQ7XG4gICAgICAvLyBJZiBhIG5ldyBQYXJzZUZpbGUgaXMgcmV0dXJuZWQsIGNoZWNrIGlmIGl0J3MgYW4gYWxyZWFkeSBzYXZlZCBmaWxlXG4gICAgICBpZiAodHJpZ2dlclJlc3VsdCBpbnN0YW5jZW9mIFBhcnNlLkZpbGUpIHtcbiAgICAgICAgZmlsZU9iamVjdC5maWxlID0gdHJpZ2dlclJlc3VsdDtcbiAgICAgICAgaWYgKHRyaWdnZXJSZXN1bHQudXJsKCkpIHtcbiAgICAgICAgICBmaWxlT2JqZWN0LmZpbGVTaXplID0gbnVsbDtcbiAgICAgICAgICBzYXZlUmVzdWx0ID0ge1xuICAgICAgICAgICAgdXJsOiB0cmlnZ2VyUmVzdWx0LnVybCgpLFxuICAgICAgICAgICAgbmFtZTogdHJpZ2dlclJlc3VsdC5fbmFtZSxcbiAgICAgICAgICB9O1xuICAgICAgICAgIC8vIERlc3Ryb3kgc3RyZWFtIHRvIHJlbW92ZSBsaXN0ZW5lcnMgYW5kIGRyYWluIHJlcXVlc3RcbiAgICAgICAgICBzdHJlYW0uZGVzdHJveSgpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIElmIHRoZSBmaWxlIHJldHVybmVkIGJ5IHRoZSB0cmlnZ2VyIGhhcyBhbHJlYWR5IGJlZW4gc2F2ZWQsIHNraXAgc2F2aW5nXG4gICAgICBpZiAoIXNhdmVSZXN1bHQpIHtcbiAgICAgICAgLy8gUHJlcGFyZSBmaWxlIG9wdGlvbnNcbiAgICAgICAgY29uc3QgZmlsZU9wdGlvbnMgPSB7XG4gICAgICAgICAgbWV0YWRhdGE6IGZpbGVPYmplY3QuZmlsZS5fbWV0YWRhdGEsXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGZpbGVUYWdzID1cbiAgICAgICAgICBPYmplY3Qua2V5cyhmaWxlT2JqZWN0LmZpbGUuX3RhZ3MpLmxlbmd0aCA+IDAgPyB7IHRhZ3M6IGZpbGVPYmplY3QuZmlsZS5fdGFncyB9IDoge307XG4gICAgICAgIE9iamVjdC5hc3NpZ24oZmlsZU9wdGlvbnMsIGZpbGVUYWdzKTtcbiAgICAgICAgLy8gaW5jbHVkZSBkaXJlY3RvcnkgaWYgc2V0IChmcm9tIGNsaWVudCByZXF1ZXN0IG9yIGJlZm9yZVNhdmVGaWxlIHRyaWdnZXIpXG4gICAgICAgIGlmIChmaWxlT2JqZWN0LmZpbGUuX2RpcmVjdG9yeSkge1xuICAgICAgICAgIGZpbGVPcHRpb25zLmRpcmVjdG9yeSA9IGZpbGVPYmplY3QuZmlsZS5fZGlyZWN0b3J5O1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gUGFzcyBzdHJlYW0gZGlyZWN0bHkgdG8gZmlsZXNDb250cm9sbGVyIOKAlCBpdCB3aWxsIGJ1ZmZlciBpZiBhZGFwdGVyIGRvZXNuJ3Qgc3VwcG9ydCBzdHJlYW1pbmdcbiAgICAgICAgY29uc3Qgc291cmNlVHlwZSA9IGZpbGVPYmplY3QuZmlsZS5fc291cmNlPy50eXBlIHx8IGNvbnRlbnRUeXBlO1xuICAgICAgICBjb25zdCBjcmVhdGVGaWxlUmVzdWx0ID0gYXdhaXQgZmlsZXNDb250cm9sbGVyLmNyZWF0ZUZpbGUoXG4gICAgICAgICAgY29uZmlnLFxuICAgICAgICAgIGZpbGVPYmplY3QuZmlsZS5fbmFtZSxcbiAgICAgICAgICBzdHJlYW0sXG4gICAgICAgICAgc291cmNlVHlwZSxcbiAgICAgICAgICBmaWxlT3B0aW9uc1xuICAgICAgICApO1xuXG4gICAgICAgIC8vIFVwZGF0ZSBmaWxlIHdpdGggbmV3IGRhdGFcbiAgICAgICAgZmlsZU9iamVjdC5maWxlLl9uYW1lID0gY3JlYXRlRmlsZVJlc3VsdC5uYW1lO1xuICAgICAgICBmaWxlT2JqZWN0LmZpbGUuX3VybCA9IGNyZWF0ZUZpbGVSZXN1bHQudXJsO1xuICAgICAgICBmaWxlT2JqZWN0LmZpbGUuX3JlcXVlc3RUYXNrID0gbnVsbDtcbiAgICAgICAgZmlsZU9iamVjdC5maWxlLl9wcmV2aW91c1NhdmUgPSBQcm9taXNlLnJlc29sdmUoZmlsZU9iamVjdC5maWxlKTtcbiAgICAgICAgc2F2ZVJlc3VsdCA9IHtcbiAgICAgICAgICB1cmw6IGNyZWF0ZUZpbGVSZXN1bHQudXJsLFxuICAgICAgICAgIG5hbWU6IGNyZWF0ZUZpbGVSZXN1bHQubmFtZSxcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgLy8gUnVuIGFmdGVyU2F2ZUZpbGUgdHJpZ2dlclxuICAgICAgYXdhaXQgdHJpZ2dlcnMubWF5YmVSdW5GaWxlVHJpZ2dlcih0cmlnZ2Vycy5UeXBlcy5hZnRlclNhdmUsIGZpbGVPYmplY3QsIGNvbmZpZywgcmVxLmF1dGgpO1xuICAgICAgcmVzLnN0YXR1cygyMDEpO1xuICAgICAgcmVzLnNldCgnTG9jYXRpb24nLCBzYXZlUmVzdWx0LnVybCk7XG4gICAgICByZXMuanNvbihzYXZlUmVzdWx0KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvLyBEZXN0cm95IHN0cmVhbSB0byByZW1vdmUgbGlzdGVuZXJzIGFuZCBkcmFpbiByZXF1ZXN0LCBvciByZXN1bWUgZGlyZWN0bHlcbiAgICAgIGlmIChzdHJlYW0pIHtcbiAgICAgICAgc3RyZWFtLmRlc3Ryb3koKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlcS5yZXN1bWUoKTtcbiAgICAgIH1cbiAgICAgIGxvZ2dlci5lcnJvcignRXJyb3IgY3JlYXRpbmcgYSBmaWxlOiAnLCBlKTtcbiAgICAgIGNvbnN0IGVycm9yID0gdHJpZ2dlcnMucmVzb2x2ZUVycm9yKGUsIHtcbiAgICAgICAgY29kZTogUGFyc2UuRXJyb3IuRklMRV9TQVZFX0VSUk9SLFxuICAgICAgICBtZXNzYWdlOiBgQ291bGQgbm90IHN0b3JlIGZpbGU6ICR7ZmlsZW5hbWV9LmAsXG4gICAgICB9KTtcbiAgICAgIG5leHQoZXJyb3IpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZUhhbmRsZXIocmVxLCByZXMsIG5leHQpIHtcbiAgICBpZiAocmVxLmF1dGguaXNSZWFkT25seSkge1xuICAgICAgY29uc3QgZXJyb3IgPSBjcmVhdGVTYW5pdGl6ZWRIdHRwRXJyb3IoNDAzLCBcInJlYWQtb25seSBtYXN0ZXJLZXkgaXNuJ3QgYWxsb3dlZCB0byBkZWxldGUgYSBmaWxlLlwiLCByZXEuY29uZmlnKTtcbiAgICAgIHJlcy5zdGF0dXMoZXJyb3Iuc3RhdHVzKTtcbiAgICAgIHJlcy5lbmQoYHtcImVycm9yXCI6XCIke2Vycm9yLm1lc3NhZ2V9XCJ9YCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICBjb25zdCB7IGZpbGVzQ29udHJvbGxlciB9ID0gcmVxLmNvbmZpZztcbiAgICAgIGNvbnN0IGZpbGVuYW1lID0gRmlsZXNSb3V0ZXIuX2dldEZpbGVuYW1lRnJvbVBhcmFtcyhyZXEpO1xuICAgICAgLy8gcnVuIGJlZm9yZURlbGV0ZUZpbGUgdHJpZ2dlclxuICAgICAgY29uc3QgZmlsZSA9IG5ldyBQYXJzZS5GaWxlKGZpbGVuYW1lKTtcbiAgICAgIGZpbGUuX3VybCA9IGF3YWl0IGZpbGVzQ29udHJvbGxlci5hZGFwdGVyLmdldEZpbGVMb2NhdGlvbihyZXEuY29uZmlnLCBmaWxlbmFtZSk7XG4gICAgICBjb25zdCBmaWxlT2JqZWN0ID0geyBmaWxlLCBmaWxlU2l6ZTogbnVsbCB9O1xuICAgICAgYXdhaXQgdHJpZ2dlcnMubWF5YmVSdW5GaWxlVHJpZ2dlcihcbiAgICAgICAgdHJpZ2dlcnMuVHlwZXMuYmVmb3JlRGVsZXRlLFxuICAgICAgICBmaWxlT2JqZWN0LFxuICAgICAgICByZXEuY29uZmlnLFxuICAgICAgICByZXEuYXV0aFxuICAgICAgKTtcbiAgICAgIC8vIGRlbGV0ZSBmaWxlXG4gICAgICBhd2FpdCBmaWxlc0NvbnRyb2xsZXIuZGVsZXRlRmlsZShyZXEuY29uZmlnLCBmaWxlbmFtZSk7XG4gICAgICAvLyBydW4gYWZ0ZXJEZWxldGVGaWxlIHRyaWdnZXJcbiAgICAgIGF3YWl0IHRyaWdnZXJzLm1heWJlUnVuRmlsZVRyaWdnZXIoXG4gICAgICAgIHRyaWdnZXJzLlR5cGVzLmFmdGVyRGVsZXRlLFxuICAgICAgICBmaWxlT2JqZWN0LFxuICAgICAgICByZXEuY29uZmlnLFxuICAgICAgICByZXEuYXV0aFxuICAgICAgKTtcbiAgICAgIHJlcy5zdGF0dXMoMjAwKTtcbiAgICAgIC8vIFRPRE86IHJldHVybiB1c2VmdWwgSlNPTiBoZXJlP1xuICAgICAgcmVzLmVuZCgpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGxvZ2dlci5lcnJvcignRXJyb3IgZGVsZXRpbmcgYSBmaWxlOiAnLCBlKTtcbiAgICAgIGNvbnN0IGVycm9yID0gdHJpZ2dlcnMucmVzb2x2ZUVycm9yKGUsIHtcbiAgICAgICAgY29kZTogUGFyc2UuRXJyb3IuRklMRV9ERUxFVEVfRVJST1IsXG4gICAgICAgIG1lc3NhZ2U6ICdDb3VsZCBub3QgZGVsZXRlIGZpbGUuJyxcbiAgICAgIH0pO1xuICAgICAgbmV4dChlcnJvcik7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgbWV0YWRhdGFIYW5kbGVyKHJlcSwgcmVzKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGNvbmZpZyA9IENvbmZpZy5nZXQocmVxLnBhcmFtcy5hcHBJZCk7XG4gICAgICBpZiAoIWNvbmZpZykge1xuICAgICAgICByZXMuc3RhdHVzKDIwMCk7XG4gICAgICAgIHJlcy5qc29uKHt9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgeyBmaWxlc0NvbnRyb2xsZXIgfSA9IGNvbmZpZztcbiAgICAgIGxldCBmaWxlbmFtZSA9IEZpbGVzUm91dGVyLl9nZXRGaWxlbmFtZUZyb21QYXJhbXMocmVxKTtcbiAgICAgIGNvbnN0IGZpbGUgPSBuZXcgUGFyc2UuRmlsZShmaWxlbmFtZSwgeyBiYXNlNjQ6ICcnIH0pO1xuICAgICAgY29uc3QgdHJpZ2dlclJlc3VsdCA9IGF3YWl0IHRyaWdnZXJzLm1heWJlUnVuRmlsZVRyaWdnZXIoXG4gICAgICAgIHRyaWdnZXJzLlR5cGVzLmJlZm9yZUZpbmQsXG4gICAgICAgIHsgZmlsZSB9LFxuICAgICAgICBjb25maWcsXG4gICAgICAgIHJlcS5hdXRoXG4gICAgICApO1xuICAgICAgaWYgKHRyaWdnZXJSZXN1bHQ/LmZpbGU/Ll9uYW1lKSB7XG4gICAgICAgIGZpbGVuYW1lID0gdHJpZ2dlclJlc3VsdC5maWxlLl9uYW1lO1xuICAgICAgfVxuICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IGZpbGVzQ29udHJvbGxlci5nZXRNZXRhZGF0YShmaWxlbmFtZSkuY2F0Y2goKCkgPT4ge1xuICAgICAgICByZXMuc3RhdHVzKDIwMCk7XG4gICAgICAgIHJlcy5qc29uKHt9KTtcbiAgICAgIH0pO1xuICAgICAgaWYgKCFkYXRhKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGF3YWl0IHRyaWdnZXJzLm1heWJlUnVuRmlsZVRyaWdnZXIoXG4gICAgICAgIHRyaWdnZXJzLlR5cGVzLmFmdGVyRmluZCxcbiAgICAgICAgeyBmaWxlIH0sXG4gICAgICAgIGNvbmZpZyxcbiAgICAgICAgcmVxLmF1dGhcbiAgICAgICk7XG4gICAgICByZXMuc3RhdHVzKDIwMCk7XG4gICAgICByZXMuanNvbihkYXRhKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zdCBlcnIgPSB0cmlnZ2Vycy5yZXNvbHZlRXJyb3IoZSwge1xuICAgICAgICBjb2RlOiBQYXJzZS5FcnJvci5TQ1JJUFRfRkFJTEVELFxuICAgICAgICBtZXNzYWdlOiAnQ291bGQgbm90IGdldCBmaWxlIG1ldGFkYXRhLicsXG4gICAgICB9KTtcbiAgICAgIHJlcy5zdGF0dXMoNDAzKTtcbiAgICAgIHJlcy5qc29uKHsgY29kZTogZXJyLmNvZGUsIGVycm9yOiBlcnIubWVzc2FnZSB9KTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNGaWxlU3RyZWFtYWJsZShyZXEsIGZpbGVzQ29udHJvbGxlcikge1xuICBjb25zdCByYW5nZSA9IChyZXEuZ2V0KCdSYW5nZScpIHx8ICcvLS8nKS5zcGxpdCgnLScpO1xuICBjb25zdCBzdGFydCA9IE51bWJlcihyYW5nZVswXSk7XG4gIGNvbnN0IGVuZCA9IE51bWJlcihyYW5nZVsxXSk7XG4gIHJldHVybiAoXG4gICAgKCFpc05hTihzdGFydCkgfHwgIWlzTmFOKGVuZCkpICYmIHR5cGVvZiBmaWxlc0NvbnRyb2xsZXIuYWRhcHRlci5oYW5kbGVGaWxlU3RyZWFtID09PSAnZnVuY3Rpb24nXG4gICk7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQSxJQUFBQSxRQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxXQUFBLEdBQUFDLHVCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBRyxLQUFBLEdBQUFKLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBSSxPQUFBLEdBQUFMLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBSyxPQUFBLEdBQUFOLHNCQUFBLENBQUFDLE9BQUE7QUFHQSxJQUFBTSxPQUFBLEdBQUFOLE9BQUE7QUFDQSxJQUFBTyxNQUFBLEdBQUFQLE9BQUE7QUFBb0QsU0FBQUUsd0JBQUFNLENBQUEsRUFBQUMsQ0FBQSw2QkFBQUMsT0FBQSxNQUFBQyxDQUFBLE9BQUFELE9BQUEsSUFBQUUsQ0FBQSxPQUFBRixPQUFBLFlBQUFSLHVCQUFBLFlBQUFBLENBQUFNLENBQUEsRUFBQUMsQ0FBQSxTQUFBQSxDQUFBLElBQUFELENBQUEsSUFBQUEsQ0FBQSxDQUFBSyxVQUFBLFNBQUFMLENBQUEsTUFBQU0sQ0FBQSxFQUFBQyxDQUFBLEVBQUFDLENBQUEsS0FBQUMsU0FBQSxRQUFBQyxPQUFBLEVBQUFWLENBQUEsaUJBQUFBLENBQUEsdUJBQUFBLENBQUEseUJBQUFBLENBQUEsU0FBQVEsQ0FBQSxNQUFBRixDQUFBLEdBQUFMLENBQUEsR0FBQUcsQ0FBQSxHQUFBRCxDQUFBLFFBQUFHLENBQUEsQ0FBQUssR0FBQSxDQUFBWCxDQUFBLFVBQUFNLENBQUEsQ0FBQU0sR0FBQSxDQUFBWixDQUFB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