parse-server 9.0.0-alpha.1 → 9.0.0-alpha.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -7,7 +7,7 @@ exports.ParseGraphQLServer = void 0;
7
7
  var _cors = _interopRequireDefault(require("cors"));
8
8
  var _graphqlUploadExpress = _interopRequireDefault(require("graphql-upload/graphqlUploadExpress.js"));
9
9
  var _server = require("@apollo/server");
10
- var _express = require("@apollo/server/express4");
10
+ var _express = require("@as-integrations/express5");
11
11
  var _disabled = require("@apollo/server/plugin/disabled");
12
12
  var _express2 = _interopRequireDefault(require("express"));
13
13
  var _graphql = require("graphql");
@@ -19,6 +19,40 @@ var _ParseGraphQLSchema = require("./ParseGraphQLSchema");
19
19
  var _ParseGraphQLController = _interopRequireWildcard(require("../Controllers/ParseGraphQLController"));
20
20
  function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
21
21
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
22
+ const hasTypeIntrospection = query => {
23
+ try {
24
+ const ast = (0, _graphql.parse)(query);
25
+ // Check only root-level fields in the query
26
+ // Note: selection.name.value is the actual field name, so this correctly handles
27
+ // aliases like "myAlias: __type(...)" where name.value === "__type"
28
+ for (const definition of ast.definitions) {
29
+ if ((definition.kind === 'OperationDefinition' || definition.kind === 'FragmentDefinition') && definition.selectionSet) {
30
+ for (const selection of definition.selectionSet.selections) {
31
+ if (selection.kind === 'Field' && selection.name.value === '__type') {
32
+ // GraphQL's introspection __type field requires a 'name' argument
33
+ // This distinguishes it from potential user-defined __type fields
34
+ if (selection.arguments && selection.arguments.length > 0) {
35
+ return true;
36
+ }
37
+ }
38
+ }
39
+ }
40
+ }
41
+ return false;
42
+ } catch {
43
+ // If parsing fails, we assume it's not a valid query and let Apollo handle it
44
+ return false;
45
+ }
46
+ };
47
+ const throwIntrospectionError = () => {
48
+ throw new _graphql.GraphQLError('Introspection is not allowed', {
49
+ extensions: {
50
+ http: {
51
+ status: 403
52
+ }
53
+ }
54
+ });
55
+ };
22
56
  const IntrospectionControlPlugin = publicIntrospection => ({
23
57
  requestDidStart: requestContext => ({
24
58
  didResolveOperation: async () => {
@@ -30,20 +64,19 @@ const IntrospectionControlPlugin = publicIntrospection => ({
30
64
  if (isMasterOrMaintenance) {
31
65
  return;
32
66
  }
67
+ const query = requestContext.request.query;
33
68
 
34
- // Now we check if the query is an introspection query
35
- // this check strategy should work in 99.99% cases
36
- // we can have an issue if a user name a field or class __schemaSomething
37
- // we want to avoid a full AST check
38
- const isIntrospectionQuery = requestContext.request.query?.includes('__schema');
39
- if (isIntrospectionQuery) {
40
- throw new _graphql.GraphQLError('Introspection is not allowed', {
41
- extensions: {
42
- http: {
43
- status: 403
44
- }
45
- }
46
- });
69
+ // Fast path: simple string check for __schema
70
+ // This avoids parsing the query in most cases
71
+ if (query?.includes('__schema')) {
72
+ return throwIntrospectionError();
73
+ }
74
+
75
+ // Smart check for __type: only parse if the string is present
76
+ // This avoids false positives (e.g., "__type" in strings or comments)
77
+ // while still being efficient for the common case
78
+ if (query?.includes('__type') && hasTypeIntrospection(query)) {
79
+ return throwIntrospectionError();
47
80
  }
48
81
  }
49
82
  })
@@ -211,4 +244,4 @@ class ParseGraphQLServer {
211
244
  }
212
245
  }
213
246
  exports.ParseGraphQLServer = ParseGraphQLServer;
214
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfY29ycyIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX2dyYXBocWxVcGxvYWRFeHByZXNzIiwiX3NlcnZlciIsIl9leHByZXNzIiwiX2Rpc2FibGVkIiwiX2V4cHJlc3MyIiwiX2dyYXBocWwiLCJfc3Vic2NyaXB0aW9uc1RyYW5zcG9ydFdzIiwiX21pZGRsZXdhcmVzIiwiX3JlcXVpcmVkUGFyYW1ldGVyIiwiX2xvZ2dlciIsIl9QYXJzZUdyYXBoUUxTY2hlbWEiLCJfUGFyc2VHcmFwaFFMQ29udHJvbGxlciIsIl9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkIiwiZSIsInQiLCJXZWFrTWFwIiwiciIsIm4iLCJfX2VzTW9kdWxlIiwibyIsImkiLCJmIiwiX19wcm90b19fIiwiZGVmYXVsdCIsImhhcyIsImdldCIsInNldCIsImhhc093blByb3BlcnR5IiwiY2FsbCIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiSW50cm9zcGVjdGlvbkNvbnRyb2xQbHVnaW4iLCJwdWJsaWNJbnRyb3NwZWN0aW9uIiwicmVxdWVzdERpZFN0YXJ0IiwicmVxdWVzdENvbnRleHQiLCJkaWRSZXNvbHZlT3BlcmF0aW9uIiwiaXNNYXN0ZXJPck1haW50ZW5hbmNlIiwiY29udGV4dFZhbHVlIiwiYXV0aCIsImlzTWFzdGVyIiwiaXNNYWludGVuYW5jZSIsImlzSW50cm9zcGVjdGlvblF1ZXJ5IiwicmVxdWVzdCIsInF1ZXJ5IiwiaW5jbHVkZXMiLCJHcmFwaFFMRXJyb3IiLCJleHRlbnNpb25zIiwiaHR0cCIsInN0YXR1cyIsIlBhcnNlR3JhcGhRTFNlcnZlciIsImNvbnN0cnVjdG9yIiwicGFyc2VTZXJ2ZXIiLCJjb25maWciLCJyZXF1aXJlZFBhcmFtZXRlciIsImdyYXBoUUxQYXRoIiwicGFyc2VHcmFwaFFMQ29udHJvbGxlciIsImxvZyIsImxvZ2dlckNvbnRyb2xsZXIiLCJkZWZhdWx0TG9nZ2VyIiwicGFyc2VHcmFwaFFMU2NoZW1hIiwiUGFyc2VHcmFwaFFMU2NoZW1hIiwiZGF0YWJhc2VDb250cm9sbGVyIiwiZ3JhcGhRTEN1c3RvbVR5cGVEZWZzIiwiYXBwSWQiLCJfZ2V0R3JhcGhRTE9wdGlvbnMiLCJzY2hlbWEiLCJsb2FkIiwiY29udGV4dCIsInJlcSIsInJlcyIsImluZm8iLCJlcnJvciIsInN0YWNrIiwidG9TdHJpbmciLCJfZ2V0U2VydmVyIiwic2NoZW1hUmVmIiwiZ3JhcGhRTFNjaGVtYSIsIm5ld1NjaGVtYVJlZiIsIl9zY2hlbWFSZWZNdXRleCIsImNyZWF0ZVNlcnZlciIsImFwb2xsbyIsIkFwb2xsb1NlcnZlciIsImNzcmZQcmV2ZW50aW9uIiwicmVxdWVzdEhlYWRlcnMiLCJpbnRyb3NwZWN0aW9uIiwiZ3JhcGhRTFB1YmxpY0ludHJvc3BlY3Rpb24iLCJwbHVnaW5zIiwiQXBvbGxvU2VydmVyUGx1Z2luQ2FjaGVDb250cm9sRGlzYWJsZWQiLCJzdGFydCIsImV4cHJlc3NNaWRkbGV3YXJlIiwiX3RyYW5zZm9ybU1heFVwbG9hZFNpemVUb0J5dGVzIiwibWF4VXBsb2FkU2l6ZSIsInVuaXRNYXAiLCJrYiIsIm1iIiwiZ2IiLCJOdW1iZXIiLCJzbGljZSIsIk1hdGgiLCJwb3ciLCJ0b0xvd2VyQ2FzZSIsImFwcGx5UmVxdWVzdENvbnRleHRNaWRkbGV3YXJlIiwiYXBpIiwib3B0aW9ucyIsInJlcXVlc3RDb250ZXh0TWlkZGxld2FyZSIsIkVycm9yIiwidXNlIiwiYXBwbHlHcmFwaFFMIiwiYXBwIiwiY29yc01pZGRsZXdhcmUiLCJoYW5kbGVQYXJzZUhlYWRlcnMiLCJoYW5kbGVQYXJzZVNlc3Npb24iLCJoYW5kbGVQYXJzZUVycm9ycyIsImdyYXBocWxVcGxvYWRFeHByZXNzIiwibWF4RmlsZVNpemUiLCJleHByZXNzIiwianNvbiIsIm5leHQiLCJzZXJ2ZXIiLCJhcHBseVBsYXlncm91bmQiLCJwbGF5Z3JvdW5kUGF0aCIsIl9yZXEiLCJzZXRIZWFkZXIiLCJ3cml0ZSIsIkpTT04iLCJzdHJpbmdpZnkiLCJtYXN0ZXJLZXkiLCJlbmQiLCJjcmVhdGVTdWJzY3JpcHRpb25zIiwiU3Vic2NyaXB0aW9uU2VydmVyIiwiY3JlYXRlIiwiZXhlY3V0ZSIsInN1YnNjcmliZSIsIm9uT3BlcmF0aW9uIiwiX21lc3NhZ2UiLCJwYXJhbXMiLCJ3ZWJTb2NrZXQiLCJhc3NpZ24iLCJ1cGdyYWRlUmVxIiwicGF0aCIsInN1YnNjcmlwdGlvbnNQYXRoIiwic2V0R3JhcGhRTENvbmZpZyIsImdyYXBoUUxDb25maWciLCJ1cGRhdGVHcmFwaFFMQ29uZmlnIiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9HcmFwaFFML1BhcnNlR3JhcGhRTFNlcnZlci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgY29yc01pZGRsZXdhcmUgZnJvbSAnY29ycyc7XG5pbXBvcnQgZ3JhcGhxbFVwbG9hZEV4cHJlc3MgZnJvbSAnZ3JhcGhxbC11cGxvYWQvZ3JhcGhxbFVwbG9hZEV4cHJlc3MuanMnO1xuaW1wb3J0IHsgQXBvbGxvU2VydmVyIH0gZnJvbSAnQGFwb2xsby9zZXJ2ZXInO1xuaW1wb3J0IHsgZXhwcmVzc01pZGRsZXdhcmUgfSBmcm9tICdAYXBvbGxvL3NlcnZlci9leHByZXNzNCc7XG5pbXBvcnQgeyBBcG9sbG9TZXJ2ZXJQbHVnaW5DYWNoZUNvbnRyb2xEaXNhYmxlZCB9IGZyb20gJ0BhcG9sbG8vc2VydmVyL3BsdWdpbi9kaXNhYmxlZCc7XG5pbXBvcnQgZXhwcmVzcyBmcm9tICdleHByZXNzJztcbmltcG9ydCB7IGV4ZWN1dGUsIHN1YnNjcmliZSwgR3JhcGhRTEVycm9yIH0gZnJvbSAnZ3JhcGhxbCc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb25TZXJ2ZXIgfSBmcm9tICdzdWJzY3JpcHRpb25zLXRyYW5zcG9ydC13cyc7XG5pbXBvcnQgeyBoYW5kbGVQYXJzZUVycm9ycywgaGFuZGxlUGFyc2VIZWFkZXJzLCBoYW5kbGVQYXJzZVNlc3Npb24gfSBmcm9tICcuLi9taWRkbGV3YXJlcyc7XG5pbXBvcnQgcmVxdWlyZWRQYXJhbWV0ZXIgZnJvbSAnLi4vcmVxdWlyZWRQYXJhbWV0ZXInO1xuaW1wb3J0IGRlZmF1bHRMb2dnZXIgZnJvbSAnLi4vbG9nZ2VyJztcbmltcG9ydCB7IFBhcnNlR3JhcGhRTFNjaGVtYSB9IGZyb20gJy4vUGFyc2VHcmFwaFFMU2NoZW1hJztcbmltcG9ydCBQYXJzZUdyYXBoUUxDb250cm9sbGVyLCB7IFBhcnNlR3JhcGhRTENvbmZpZyB9IGZyb20gJy4uL0NvbnRyb2xsZXJzL1BhcnNlR3JhcGhRTENvbnRyb2xsZXInO1xuXG5cbmNvbnN0IEludHJvc3BlY3Rpb25Db250cm9sUGx1Z2luID0gKHB1YmxpY0ludHJvc3BlY3Rpb24pID0+ICh7XG5cblxuICByZXF1ZXN0RGlkU3RhcnQ6IChyZXF1ZXN0Q29udGV4dCkgPT4gKHtcblxuICAgIGRpZFJlc29sdmVPcGVyYXRpb246IGFzeW5jICgpID0+IHtcbiAgICAgIC8vIElmIHB1YmxpYyBpbnRyb3NwZWN0aW9uIGlzIGVuYWJsZWQsIHdlIGFsbG93IGFsbCBpbnRyb3NwZWN0aW9uIHF1ZXJpZXNcbiAgICAgIGlmIChwdWJsaWNJbnRyb3NwZWN0aW9uKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgaXNNYXN0ZXJPck1haW50ZW5hbmNlID0gcmVxdWVzdENvbnRleHQuY29udGV4dFZhbHVlLmF1dGg/LmlzTWFzdGVyIHx8IHJlcXVlc3RDb250ZXh0LmNvbnRleHRWYWx1ZS5hdXRoPy5pc01haW50ZW5hbmNlXG4gICAgICBpZiAoaXNNYXN0ZXJPck1haW50ZW5hbmNlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gTm93IHdlIGNoZWNrIGlmIHRoZSBxdWVyeSBpcyBhbiBpbnRyb3NwZWN0aW9uIHF1ZXJ5XG4gICAgICAvLyB0aGlzIGNoZWNrIHN0cmF0ZWd5IHNob3VsZCB3b3JrIGluIDk5Ljk5JSBjYXNlc1xuICAgICAgLy8gd2UgY2FuIGhhdmUgYW4gaXNzdWUgaWYgYSB1c2VyIG5hbWUgYSBmaWVsZCBvciBjbGFzcyBfX3NjaGVtYVNvbWV0aGluZ1xuICAgICAgLy8gd2Ugd2FudCB0byBhdm9pZCBhIGZ1bGwgQVNUIGNoZWNrXG4gICAgICBjb25zdCBpc0ludHJvc3BlY3Rpb25RdWVyeSA9XG4gICAgICAgIHJlcXVlc3RDb250ZXh0LnJlcXVlc3QucXVlcnk/LmluY2x1ZGVzKCdfX3NjaGVtYScpXG5cbiAgICAgIGlmIChpc0ludHJvc3BlY3Rpb25RdWVyeSkge1xuICAgICAgICB0aHJvdyBuZXcgR3JhcGhRTEVycm9yKCdJbnRyb3NwZWN0aW9uIGlzIG5vdCBhbGxvd2VkJywge1xuICAgICAgICAgIGV4dGVuc2lvbnM6IHtcbiAgICAgICAgICAgIGh0dHA6IHtcbiAgICAgICAgICAgICAgc3RhdHVzOiA0MDMsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSxcblxuICB9KVxuXG59KTtcblxuY2xhc3MgUGFyc2VHcmFwaFFMU2VydmVyIHtcbiAgcGFyc2VHcmFwaFFMQ29udHJvbGxlcjogUGFyc2VHcmFwaFFMQ29udHJvbGxlcjtcblxuICBjb25zdHJ1Y3RvcihwYXJzZVNlcnZlciwgY29uZmlnKSB7XG4gICAgdGhpcy5wYXJzZVNlcnZlciA9IHBhcnNlU2VydmVyIHx8IHJlcXVpcmVkUGFyYW1ldGVyKCdZb3UgbXVzdCBwcm92aWRlIGEgcGFyc2VTZXJ2ZXIgaW5zdGFuY2UhJyk7XG4gICAgaWYgKCFjb25maWcgfHwgIWNvbmZpZy5ncmFwaFFMUGF0aCkge1xuICAgICAgcmVxdWlyZWRQYXJhbWV0ZXIoJ1lvdSBtdXN0IHByb3ZpZGUgYSBjb25maWcuZ3JhcGhRTFBhdGghJyk7XG4gICAgfVxuICAgIHRoaXMuY29uZmlnID0gY29uZmlnO1xuICAgIHRoaXMucGFyc2VHcmFwaFFMQ29udHJvbGxlciA9IHRoaXMucGFyc2VTZXJ2ZXIuY29uZmlnLnBhcnNlR3JhcGhRTENvbnRyb2xsZXI7XG4gICAgdGhpcy5sb2cgPVxuICAgICAgKHRoaXMucGFyc2VTZXJ2ZXIuY29uZmlnICYmIHRoaXMucGFyc2VTZXJ2ZXIuY29uZmlnLmxvZ2dlckNvbnRyb2xsZXIpIHx8IGRlZmF1bHRMb2dnZXI7XG4gICAgdGhpcy5wYXJzZUdyYXBoUUxTY2hlbWEgPSBuZXcgUGFyc2VHcmFwaFFMU2NoZW1hKHtcbiAgICAgIHBhcnNlR3JhcGhRTENvbnRyb2xsZXI6IHRoaXMucGFyc2VHcmFwaFFMQ29udHJvbGxlcixcbiAgICAgIGRhdGFiYXNlQ29udHJvbGxlcjogdGhpcy5wYXJzZVNlcnZlci5jb25maWcuZGF0YWJhc2VDb250cm9sbGVyLFxuICAgICAgbG9nOiB0aGlzLmxvZyxcbiAgICAgIGdyYXBoUUxDdXN0b21UeXBlRGVmczogdGhpcy5jb25maWcuZ3JhcGhRTEN1c3RvbVR5cGVEZWZzLFxuICAgICAgYXBwSWQ6IHRoaXMucGFyc2VTZXJ2ZXIuY29uZmlnLmFwcElkLFxuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgX2dldEdyYXBoUUxPcHRpb25zKCkge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzY2hlbWE6IGF3YWl0IHRoaXMucGFyc2VHcmFwaFFMU2NoZW1hLmxvYWQoKSxcbiAgICAgICAgY29udGV4dDogYXN5bmMgKHsgcmVxLCByZXMgfSkgPT4ge1xuICAgICAgICAgIHJlcy5zZXQoJ2FjY2Vzcy1jb250cm9sLWFsbG93LW9yaWdpbicsIHJlcS5nZXQoJ29yaWdpbicpIHx8ICcqJyk7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGluZm86IHJlcS5pbmZvLFxuICAgICAgICAgICAgY29uZmlnOiByZXEuY29uZmlnLFxuICAgICAgICAgICAgYXV0aDogcmVxLmF1dGgsXG4gICAgICAgICAgfTtcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5sb2cuZXJyb3IoZS5zdGFjayB8fCAodHlwZW9mIGUudG9TdHJpbmcgPT09ICdmdW5jdGlvbicgJiYgZS50b1N0cmluZygpKSB8fCBlKTtcbiAgICAgIHRocm93IGU7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgX2dldFNlcnZlcigpIHtcbiAgICBjb25zdCBzY2hlbWFSZWYgPSB0aGlzLnBhcnNlR3JhcGhRTFNjaGVtYS5ncmFwaFFMU2NoZW1hO1xuICAgIGNvbnN0IG5ld1NjaGVtYVJlZiA9IGF3YWl0IHRoaXMucGFyc2VHcmFwaFFMU2NoZW1hLmxvYWQoKTtcbiAgICBpZiAoc2NoZW1hUmVmID09PSBuZXdTY2hlbWFSZWYgJiYgdGhpcy5fc2VydmVyKSB7XG4gICAgICByZXR1cm4gdGhpcy5fc2VydmVyO1xuICAgIH1cbiAgICAvLyBJdCBtZWFucyBhIHBhcmFsbGVsIF9nZXRTZXJ2ZXIgY2FsbCBpcyBhbHJlYWR5IGluIHByb2dyZXNzXG4gICAgaWYgKHRoaXMuX3NjaGVtYVJlZk11dGV4ID09PSBuZXdTY2hlbWFSZWYpIHtcbiAgICAgIHJldHVybiB0aGlzLl9zZXJ2ZXI7XG4gICAgfVxuICAgIC8vIFVwZGF0ZSB0aGUgc2NoZW1hIHJlZiBtdXRleCB0byBhdm9pZCBwYXJhbGxlbCBfZ2V0U2VydmVyIGNhbGxzXG4gICAgdGhpcy5fc2NoZW1hUmVmTXV0ZXggPSBuZXdTY2hlbWFSZWY7XG4gICAgY29uc3QgY3JlYXRlU2VydmVyID0gYXN5bmMgKCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgeyBzY2hlbWEsIGNvbnRleHQgfSA9IGF3YWl0IHRoaXMuX2dldEdyYXBoUUxPcHRpb25zKCk7XG4gICAgICAgIGNvbnN0IGFwb2xsbyA9IG5ldyBBcG9sbG9TZXJ2ZXIoe1xuICAgICAgICAgIGNzcmZQcmV2ZW50aW9uOiB7XG4gICAgICAgICAgICAvLyBTZWUgaHR0cHM6Ly93d3cuYXBvbGxvZ3JhcGhxbC5jb20vZG9jcy9yb3V0ZXIvY29uZmlndXJhdGlvbi9jc3JmL1xuICAgICAgICAgICAgLy8gbmVlZGVkIHNpbmNlIHdlIHVzZSBncmFwaHFsIHVwbG9hZFxuICAgICAgICAgICAgcmVxdWVzdEhlYWRlcnM6IFsnWC1QYXJzZS1BcHBsaWNhdGlvbi1JZCddLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgaW50cm9zcGVjdGlvbjogdGhpcy5jb25maWcuZ3JhcGhRTFB1YmxpY0ludHJvc3BlY3Rpb24sXG4gICAgICAgICAgcGx1Z2luczogW0Fwb2xsb1NlcnZlclBsdWdpbkNhY2hlQ29udHJvbERpc2FibGVkKCksIEludHJvc3BlY3Rpb25Db250cm9sUGx1Z2luKHRoaXMuY29uZmlnLmdyYXBoUUxQdWJsaWNJbnRyb3NwZWN0aW9uKV0sXG4gICAgICAgICAgc2NoZW1hLFxuICAgICAgICB9KTtcbiAgICAgICAgYXdhaXQgYXBvbGxvLnN0YXJ0KCk7XG4gICAgICAgIHJldHVybiBleHByZXNzTWlkZGxld2FyZShhcG9sbG8sIHtcbiAgICAgICAgICBjb250ZXh0LFxuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgLy8gUmVzZXQgYWxsIG11dGV4ZXMgYW5kIGZvcndhcmQgdGhlIGVycm9yXG4gICAgICAgIHRoaXMuX3NlcnZlciA9IG51bGw7XG4gICAgICAgIHRoaXMuX3NjaGVtYVJlZk11dGV4ID0gbnVsbDtcbiAgICAgICAgdGhyb3cgZTtcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gRG8gbm90IGF3YWl0IHNvIHBhcmFsbGVsIHJlcXVlc3Qgd2lsbCB3YWl0IHRoZSBzYW1lIHByb21pc2UgcmVmXG4gICAgdGhpcy5fc2VydmVyID0gY3JlYXRlU2VydmVyKCk7XG4gICAgcmV0dXJuIHRoaXMuX3NlcnZlcjtcbiAgfVxuXG4gIF90cmFuc2Zvcm1NYXhVcGxvYWRTaXplVG9CeXRlcyhtYXhVcGxvYWRTaXplKSB7XG4gICAgY29uc3QgdW5pdE1hcCA9IHtcbiAgICAgIGtiOiAxLFxuICAgICAgbWI6IDIsXG4gICAgICBnYjogMyxcbiAgICB9O1xuXG4gICAgcmV0dXJuIChcbiAgICAgIE51bWJlcihtYXhVcGxvYWRTaXplLnNsaWNlKDAsIC0yKSkgKlxuICAgICAgTWF0aC5wb3coMTAyNCwgdW5pdE1hcFttYXhVcGxvYWRTaXplLnNsaWNlKC0yKS50b0xvd2VyQ2FzZSgpXSlcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEBzdGF0aWNcbiAgICogQWxsb3cgZGV2ZWxvcGVycyB0byBjdXN0b21pemUgZWFjaCByZXF1ZXN0IHdpdGggaW52ZXJzaW9uIG9mIGNvbnRyb2wvZGVwZW5kZW5jeSBpbmplY3Rpb25cbiAgICovXG4gIGFwcGx5UmVxdWVzdENvbnRleHRNaWRkbGV3YXJlKGFwaSwgb3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zLnJlcXVlc3RDb250ZXh0TWlkZGxld2FyZSkge1xuICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLnJlcXVlc3RDb250ZXh0TWlkZGxld2FyZSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3JlcXVlc3RDb250ZXh0TWlkZGxld2FyZSBtdXN0IGJlIGEgZnVuY3Rpb24nKTtcbiAgICAgIH1cbiAgICAgIGFwaS51c2UodGhpcy5jb25maWcuZ3JhcGhRTFBhdGgsIG9wdGlvbnMucmVxdWVzdENvbnRleHRNaWRkbGV3YXJlKTtcbiAgICB9XG4gIH1cblxuICBhcHBseUdyYXBoUUwoYXBwKSB7XG4gICAgaWYgKCFhcHAgfHwgIWFwcC51c2UpIHtcbiAgICAgIHJlcXVpcmVkUGFyYW1ldGVyKCdZb3UgbXVzdCBwcm92aWRlIGFuIEV4cHJlc3MuanMgYXBwIGluc3RhbmNlIScpO1xuICAgIH1cbiAgICBhcHAudXNlKHRoaXMuY29uZmlnLmdyYXBoUUxQYXRoLCBjb3JzTWlkZGxld2FyZSgpKTtcbiAgICBhcHAudXNlKHRoaXMuY29uZmlnLmdyYXBoUUxQYXRoLCBoYW5kbGVQYXJzZUhlYWRlcnMpO1xuICAgIGFwcC51c2UodGhpcy5jb25maWcuZ3JhcGhRTFBhdGgsIGhhbmRsZVBhcnNlU2Vzc2lvbik7XG4gICAgdGhpcy5hcHBseVJlcXVlc3RDb250ZXh0TWlkZGxld2FyZShhcHAsIHRoaXMucGFyc2VTZXJ2ZXIuY29uZmlnKTtcbiAgICBhcHAudXNlKHRoaXMuY29uZmlnLmdyYXBoUUxQYXRoLCBoYW5kbGVQYXJzZUVycm9ycyk7XG4gICAgYXBwLnVzZShcbiAgICAgIHRoaXMuY29uZmlnLmdyYXBoUUxQYXRoLFxuICAgICAgZ3JhcGhxbFVwbG9hZEV4cHJlc3Moe1xuICAgICAgICBtYXhGaWxlU2l6ZTogdGhpcy5fdHJhbnNmb3JtTWF4VXBsb2FkU2l6ZVRvQnl0ZXMoXG4gICAgICAgICAgdGhpcy5wYXJzZVNlcnZlci5jb25maWcubWF4VXBsb2FkU2l6ZSB8fCAnMjBtYidcbiAgICAgICAgKSxcbiAgICAgIH0pXG4gICAgKTtcbiAgICBhcHAudXNlKHRoaXMuY29uZmlnLmdyYXBoUUxQYXRoLCBleHByZXNzLmpzb24oKSwgYXN5bmMgKHJlcSwgcmVzLCBuZXh0KSA9PiB7XG4gICAgICBjb25zdCBzZXJ2ZXIgPSBhd2FpdCB0aGlzLl9nZXRTZXJ2ZXIoKTtcbiAgICAgIHJldHVybiBzZXJ2ZXIocmVxLCByZXMsIG5leHQpO1xuICAgIH0pO1xuICB9XG5cbiAgYXBwbHlQbGF5Z3JvdW5kKGFwcCkge1xuICAgIGlmICghYXBwIHx8ICFhcHAuZ2V0KSB7XG4gICAgICByZXF1aXJlZFBhcmFtZXRlcignWW91IG11c3QgcHJvdmlkZSBhbiBFeHByZXNzLmpzIGFwcCBpbnN0YW5jZSEnKTtcbiAgICB9XG5cbiAgICBhcHAuZ2V0KFxuICAgICAgdGhpcy5jb25maWcucGxheWdyb3VuZFBhdGggfHxcbiAgICAgIHJlcXVpcmVkUGFyYW1ldGVyKCdZb3UgbXVzdCBwcm92aWRlIGEgY29uZmlnLnBsYXlncm91bmRQYXRoIHRvIGFwcGx5UGxheWdyb3VuZCEnKSxcbiAgICAgIChfcmVxLCByZXMpID0+IHtcbiAgICAgICAgcmVzLnNldEhlYWRlcignQ29udGVudC1UeXBlJywgJ3RleHQvaHRtbCcpO1xuICAgICAgICByZXMud3JpdGUoXG4gICAgICAgICAgYDxkaXYgaWQ9XCJzYW5kYm94XCIgc3R5bGU9XCJwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtyaWdodDowO2JvdHRvbTowO2xlZnQ6MFwiPjwvZGl2PlxuICAgICAgICAgIDxzY3JpcHQgc3JjPVwiaHR0cHM6Ly9lbWJlZGRhYmxlLXNhbmRib3guY2RuLmFwb2xsb2dyYXBocWwuY29tL19sYXRlc3QvZW1iZWRkYWJsZS1zYW5kYm94LnVtZC5wcm9kdWN0aW9uLm1pbi5qc1wiPjwvc2NyaXB0PlxuICAgICAgICAgIDxzY3JpcHQ+XG4gICAgICAgICAgIG5ldyB3aW5kb3cuRW1iZWRkZWRTYW5kYm94KHtcbiAgICAgICAgICAgICB0YXJnZXQ6IFwiI3NhbmRib3hcIixcbiAgICAgICAgICAgICBlbmRwb2ludElzRWRpdGFibGU6IGZhbHNlLFxuICAgICAgICAgICAgIGluaXRpYWxFbmRwb2ludDogJHtKU09OLnN0cmluZ2lmeSh0aGlzLmNvbmZpZy5ncmFwaFFMUGF0aCl9LFxuICAgICAgICAgICAgIGhhbmRsZVJlcXVlc3Q6IChlbmRwb2ludFVybCwgb3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgICByZXR1cm4gZmV0Y2goZW5kcG9pbnRVcmwsIHtcbiAgICAgICAgICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICAgICAgLi4ub3B0aW9ucy5oZWFkZXJzLFxuICAgICAgICAgICAgICAgICAgICAnWC1QYXJzZS1BcHBsaWNhdGlvbi1JZCc6ICR7SlNPTi5zdHJpbmdpZnkodGhpcy5wYXJzZVNlcnZlci5jb25maWcuYXBwSWQpfSxcbiAgICAgICAgICAgICAgICAgICAgJ1gtUGFyc2UtTWFzdGVyLUtleSc6ICR7SlNPTi5zdHJpbmdpZnkodGhpcy5wYXJzZVNlcnZlci5jb25maWcubWFzdGVyS2V5KX0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgIH0pO1xuICAgICAgICAgICAvLyBhZHZhbmNlZCBvcHRpb25zOiBodHRwczovL3d3dy5hcG9sbG9ncmFwaHFsLmNvbS9kb2NzL3N0dWRpby9leHBsb3Jlci9zYW5kYm94I2VtYmVkZGluZy1zYW5kYm94XG4gICAgICAgICAgPC9zY3JpcHQ+YFxuICAgICAgICApO1xuICAgICAgICByZXMuZW5kKCk7XG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIGNyZWF0ZVN1YnNjcmlwdGlvbnMoc2VydmVyKSB7XG4gICAgU3Vic2NyaXB0aW9uU2VydmVyLmNyZWF0ZShcbiAgICAgIHtcbiAgICAgICAgZXhlY3V0ZSxcbiAgICAgICAgc3Vic2NyaWJlLFxuICAgICAgICBvbk9wZXJhdGlvbjogYXN5bmMgKF9tZXNzYWdlLCBwYXJhbXMsIHdlYlNvY2tldCkgPT5cbiAgICAgICAgICBPYmplY3QuYXNzaWduKHt9LCBwYXJhbXMsIGF3YWl0IHRoaXMuX2dldEdyYXBoUUxPcHRpb25zKHdlYlNvY2tldC51cGdyYWRlUmVxKSksXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBzZXJ2ZXIsXG4gICAgICAgIHBhdGg6XG4gICAgICAgICAgdGhpcy5jb25maWcuc3Vic2NyaXB0aW9uc1BhdGggfHxcbiAgICAgICAgICByZXF1aXJlZFBhcmFtZXRlcignWW91IG11c3QgcHJvdmlkZSBhIGNvbmZpZy5zdWJzY3JpcHRpb25zUGF0aCB0byBjcmVhdGVTdWJzY3JpcHRpb25zIScpLFxuICAgICAgfVxuICAgICk7XG4gIH1cblxuICBzZXRHcmFwaFFMQ29uZmlnKGdyYXBoUUxDb25maWc6IFBhcnNlR3JhcGhRTENvbmZpZyk6IFByb21pc2Uge1xuICAgIHJldHVybiB0aGlzLnBhcnNlR3JhcGhRTENvbnRyb2xsZXIudXBkYXRlR3JhcGhRTENvbmZpZyhncmFwaFFMQ29uZmlnKTtcbiAgfVxufVxuXG5leHBvcnQgeyBQYXJzZUdyYXBoUUxTZXJ2ZXIgfTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsSUFBQUEsS0FBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMscUJBQUEsR0FBQUYsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFFLE9BQUEsR0FBQUYsT0FBQTtBQUNBLElBQUFHLFFBQUEsR0FBQUgsT0FBQTtBQUNBLElBQUFJLFNBQUEsR0FBQUosT0FBQTtBQUNBLElBQUFLLFNBQUEsR0FBQU4sc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFNLFFBQUEsR0FBQU4sT0FBQTtBQUNBLElBQUFPLHlCQUFBLEdBQUFQLE9BQUE7QUFDQSxJQUFBUSxZQUFBLEdBQUFSLE9BQUE7QUFDQSxJQUFBUyxrQkFBQSxHQUFBVixzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQVUsT0FBQSxHQUFBWCxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQVcsbUJBQUEsR0FBQVgsT0FBQTtBQUNBLElBQUFZLHVCQUFBLEdBQUFDLHVCQUFBLENBQUFiLE9BQUE7QUFBbUcsU0FBQWEsd0JBQUFDLENBQUEsRUFBQUMsQ0FBQSw2QkFBQUMsT0FBQSxNQUFBQyxDQUFBLE9BQUFELE9BQUEsSUFBQUUsQ0FBQSxPQUFBRixPQUFBLFlBQUFILHVCQUFBLFlBQUFBLENBQUFDLENBQUEsRUFBQUMsQ0FBQSxTQUFBQSxDQUFBLElBQUFELENBQUEsSUFBQUEsQ0FBQSxDQUFBSyxVQUFBLFNBQUFMLENBQUEsTUFBQU0sQ0FBQSxFQUFBQyxDQUFBLEVBQUFDLENBQUEsS0FBQUMsU0FBQSxRQUFBQyxPQUFBLEVBQUFWLENBQUEsaUJBQUFBLENBQUEsdUJBQUFBLENBQUEseUJBQUFBLENBQUEsU0FBQVEsQ0FBQSxNQUFBRixDQUFBLEdBQUFMLENBQUEsR0FBQUcsQ0FBQSxHQUFBRCxDQUFBLFFBQUFHLENBQUEsQ0FBQUssR0FBQSxDQUFBWCxDQUFBLFVBQUFNLENBQUEsQ0FBQU0sR0FBQSxDQUFBWixDQUFBLEdBQUFNLENBQUEsQ0FBQU8sR0FBQSxDQUFBYixDQUFBLEVBQUFRLENBQUEsZ0JBQUFQLENBQUEsSUFBQUQsQ0FBQSxnQkFBQUMsQ0FBQSxPQUFBYSxjQUFBLENBQUFDLElBQUEsQ0FBQWYsQ0FBQSxFQUFBQyxDQUFBLE9BQUFNLENBQUEsSUFBQUQsQ0FBQSxHQUFBVSxNQUFBLENBQUFDLGNBQUEsS0FBQUQsTUFBQSxDQUFBRSx3QkFBQSxDQUFBbEIsQ0FBQSxFQUFBQyxDQUFBLE9BQUFNLENBQUEsQ0FBQUssR0FBQSxJQUFBTCxDQUFBLENBQUFNLEdBQUEsSUFBQVAsQ0FBQSxDQUFBRSxDQUFBLEVBQUFQLENBQUEsRUFBQU0sQ0FBQSxJQUFBQyxDQUFBLENBQUFQLENBQUEsSUFBQUQsQ0FBQSxDQUFBQyxDQUFBLFdBQUFPLENBQUEsS0FBQVIsQ0FBQSxFQUFBQyxDQUFBO0FBQUEsU0FBQWhCLHVCQUFBZSxDQUFBLFdBQUFBLENBQUEsSUFBQUEsQ0FBQSxDQUFBSyxVQUFBLEdBQUFMLENBQUEsS0FBQVUsT0FBQSxFQUFBVixDQUFBO0FBR25HLE1BQU1tQiwwQkFBMEIsR0FBSUMsbUJBQW1CLEtBQU07RUFHM0RDLGVBQWUsRUFBR0MsY0FBYyxLQUFNO0lBRXBDQyxtQkFBbUIsRUFBRSxNQUFBQSxDQUFBLEtBQVk7TUFDL0I7TUFDQSxJQUFJSCxtQkFBbUIsRUFBRTtRQUN2QjtNQUNGO01BRUEsTUFBTUkscUJBQXFCLEdBQUdGLGNBQWMsQ0FBQ0csWUFBWSxDQUFDQyxJQUFJLEVBQUVDLFFBQVEsSUFBSUwsY0FBYyxDQUFDRyxZQUFZLENBQUNDLElBQUksRUFBRUUsYUFBYTtNQUMzSCxJQUFJSixxQkFBcUIsRUFBRTtRQUN6QjtNQUNGOztNQUVBO01BQ0E7TUFDQTtNQUNBO01BQ0EsTUFBTUssb0JBQW9CLEdBQ3hCUCxjQUFjLENBQUNRLE9BQU8sQ0FBQ0MsS0FBSyxFQUFFQyxRQUFRLENBQUMsVUFBVSxDQUFDO01BRXBELElBQUlILG9CQUFvQixFQUFFO1FBQ3hCLE1BQU0sSUFBSUkscUJBQVksQ0FBQyw4QkFBOEIsRUFBRTtVQUNyREMsVUFBVSxFQUFFO1lBQ1ZDLElBQUksRUFBRTtjQUNKQyxNQUFNLEVBQUU7WUFDVjtVQUNGO1FBQ0YsQ0FBQyxDQUFDO01BQ0o7SUFDRjtFQUVGLENBQUM7QUFFSCxDQUFDLENBQUM7QUFFRixNQUFNQyxrQkFBa0IsQ0FBQztFQUd2QkMsV0FBV0EsQ0FBQ0MsV0FBVyxFQUFFQyxNQUFNLEVBQUU7SUFDL0IsSUFBSSxDQUFDRCxXQUFXLEdBQUdBLFdBQVcsSUFBSSxJQUFBRSwwQkFBaUIsRUFBQywwQ0FBMEMsQ0FBQztJQUMvRixJQUFJLENBQUNELE1BQU0sSUFBSSxDQUFDQSxNQUFNLENBQUNFLFdBQVcsRUFBRTtNQUNsQyxJQUFBRCwwQkFBaUIsRUFBQyx3Q0FBd0MsQ0FBQztJQUM3RDtJQUNBLElBQUksQ0FBQ0QsTUFBTSxHQUFHQSxNQUFNO0lBQ3BCLElBQUksQ0FBQ0csc0JBQXNCLEdBQUcsSUFBSSxDQUFDSixXQUFXLENBQUNDLE1BQU0sQ0FBQ0csc0JBQXNCO0lBQzVFLElBQUksQ0FBQ0MsR0FBRyxHQUNMLElBQUksQ0FBQ0wsV0FBVyxDQUFDQyxNQUFNLElBQUksSUFBSSxDQUFDRCxXQUFXLENBQUNDLE1BQU0sQ0FBQ0ssZ0JBQWdCLElBQUtDLGVBQWE7SUFDeEYsSUFBSSxDQUFDQyxrQkFBa0IsR0FBRyxJQUFJQyxzQ0FBa0IsQ0FBQztNQUMvQ0wsc0JBQXNCLEVBQUUsSUFBSSxDQUFDQSxzQkFBc0I7TUFDbkRNLGtCQUFrQixFQUFFLElBQUksQ0FBQ1YsV0FBVyxDQUFDQyxNQUFNLENBQUNTLGtCQUFrQjtNQUM5REwsR0FBRyxFQUFFLElBQUksQ0FBQ0EsR0FBRztNQUNiTSxxQkFBcUIsRUFBRSxJQUFJLENBQUNWLE1BQU0sQ0FBQ1UscUJBQXFCO01BQ3hEQyxLQUFLLEVBQUUsSUFBSSxDQUFDWixXQUFXLENBQUNDLE1BQU0sQ0FBQ1c7SUFDakMsQ0FBQyxDQUFDO0VBQ0o7RUFFQSxNQUFNQyxrQkFBa0JBLENBQUEsRUFBRztJQUN6QixJQUFJO01BQ0YsT0FBTztRQUNMQyxNQUFNLEVBQUUsTUFBTSxJQUFJLENBQUNOLGtCQUFrQixDQUFDTyxJQUFJLENBQUMsQ0FBQztRQUM1Q0MsT0FBTyxFQUFFLE1BQUFBLENBQU87VUFBRUMsR0FBRztVQUFFQztRQUFJLENBQUMsS0FBSztVQUMvQkEsR0FBRyxDQUFDNUMsR0FBRyxDQUFDLDZCQUE2QixFQUFFMkMsR0FBRyxDQUFDNUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEdBQUcsQ0FBQztVQUNoRSxPQUFPO1lBQ0w4QyxJQUFJLEVBQUVGLEdBQUcsQ0FBQ0UsSUFBSTtZQUNkbEIsTUFBTSxFQUFFZ0IsR0FBRyxDQUFDaEIsTUFBTTtZQUNsQmQsSUFBSSxFQUFFOEIsR0FBRyxDQUFDOUI7VUFDWixDQUFDO1FBQ0g7TUFDRixDQUFDO0lBQ0gsQ0FBQyxDQUFDLE9BQU8xQixDQUFDLEVBQUU7TUFDVixJQUFJLENBQUM0QyxHQUFHLENBQUNlLEtBQUssQ0FBQzNELENBQUMsQ0FBQzRELEtBQUssSUFBSyxPQUFPNUQsQ0FBQyxDQUFDNkQsUUFBUSxLQUFLLFVBQVUsSUFBSTdELENBQUMsQ0FBQzZELFFBQVEsQ0FBQyxDQUFFLElBQUk3RCxDQUFDLENBQUM7TUFDbEYsTUFBTUEsQ0FBQztJQUNUO0VBQ0Y7RUFFQSxNQUFNOEQsVUFBVUEsQ0FBQSxFQUFHO0lBQ2pCLE1BQU1DLFNBQVMsR0FBRyxJQUFJLENBQUNoQixrQkFBa0IsQ0FBQ2lCLGFBQWE7SUFDdkQsTUFBTUMsWUFBWSxHQUFHLE1BQU0sSUFBSSxDQUFDbEIsa0JBQWtCLENBQUNPLElBQUksQ0FBQyxDQUFDO0lBQ3pELElBQUlTLFNBQVMsS0FBS0UsWUFBWSxJQUFJLElBQUksQ0FBQzdFLE9BQU8sRUFBRTtNQUM5QyxPQUFPLElBQUksQ0FBQ0EsT0FBTztJQUNyQjtJQUNBO0lBQ0EsSUFBSSxJQUFJLENBQUM4RSxlQUFlLEtBQUtELFlBQVksRUFBRTtNQUN6QyxPQUFPLElBQUksQ0FBQzdFLE9BQU87SUFDckI7SUFDQTtJQUNBLElBQUksQ0FBQzhFLGVBQWUsR0FBR0QsWUFBWTtJQUNuQyxNQUFNRSxZQUFZLEdBQUcsTUFBQUEsQ0FBQSxLQUFZO01BQy9CLElBQUk7UUFDRixNQUFNO1VBQUVkLE1BQU07VUFBRUU7UUFBUSxDQUFDLEdBQUcsTUFBTSxJQUFJLENBQUNILGtCQUFrQixDQUFDLENBQUM7UUFDM0QsTUFBTWdCLE1BQU0sR0FBRyxJQUFJQyxvQkFBWSxDQUFDO1VBQzlCQyxjQUFjLEVBQUU7WUFDZDtZQUNBO1lBQ0FDLGNBQWMsRUFBRSxDQUFDLHdCQUF3QjtVQUMzQyxDQUFDO1VBQ0RDLGFBQWEsRUFBRSxJQUFJLENBQUNoQyxNQUFNLENBQUNpQywwQkFBMEI7VUFDckRDLE9BQU8sRUFBRSxDQUFDLElBQUFDLGdEQUFzQyxFQUFDLENBQUMsRUFBRXhELDBCQUEwQixDQUFDLElBQUksQ0FBQ3FCLE1BQU0sQ0FBQ2lDLDBCQUEwQixDQUFDLENBQUM7VUFDdkhwQjtRQUNGLENBQUMsQ0FBQztRQUNGLE1BQU1lLE1BQU0sQ0FBQ1EsS0FBSyxDQUFDLENBQUM7UUFDcEIsT0FBTyxJQUFBQywwQkFBaUIsRUFBQ1QsTUFBTSxFQUFFO1VBQy9CYjtRQUNGLENBQUMsQ0FBQztNQUNKLENBQUMsQ0FBQyxPQUFPdkQsQ0FBQyxFQUFFO1FBQ1Y7UUFDQSxJQUFJLENBQUNaLE9BQU8sR0FBRyxJQUFJO1FBQ25CLElBQUksQ0FBQzhFLGVBQWUsR0FBRyxJQUFJO1FBQzNCLE1BQU1sRSxDQUFDO01BQ1Q7SUFDRixDQUFDO0lBQ0Q7SUFDQSxJQUFJLENBQUNaLE9BQU8sR0FBRytFLFlBQVksQ0FBQyxDQUFDO0lBQzdCLE9BQU8sSUFBSSxDQUFDL0UsT0FBTztFQUNyQjtFQUVBMEYsOEJBQThCQSxDQUFDQyxhQUFhLEVBQUU7SUFDNUMsTUFBTUMsT0FBTyxHQUFHO01BQ2RDLEVBQUUsRUFBRSxDQUFDO01BQ0xDLEVBQUUsRUFBRSxDQUFDO01BQ0xDLEVBQUUsRUFBRTtJQUNOLENBQUM7SUFFRCxPQUNFQyxNQUFNLENBQUNMLGFBQWEsQ0FBQ00sS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQ2xDQyxJQUFJLENBQUNDLEdBQUcsQ0FBQyxJQUFJLEVBQUVQLE9BQU8sQ0FBQ0QsYUFBYSxDQUFDTSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ0csV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBRWxFOztFQUVBO0FBQ0Y7QUFDQTtBQUNBO0VBQ0VDLDZCQUE2QkEsQ0FBQ0MsR0FBRyxFQUFFQyxPQUFPLEVBQUU7SUFDMUMsSUFBSUEsT0FBTyxDQUFDQyx3QkFBd0IsRUFBRTtNQUNwQyxJQUFJLE9BQU9ELE9BQU8sQ0FBQ0Msd0JBQXdCLEtBQUssVUFBVSxFQUFFO1FBQzFELE1BQU0sSUFBSUMsS0FBSyxDQUFDLDZDQUE2QyxDQUFDO01BQ2hFO01BQ0FILEdBQUcsQ0FBQ0ksR0FBRyxDQUFDLElBQUksQ0FBQ3RELE1BQU0sQ0FBQ0UsV0FBVyxFQUFFaUQsT0FBTyxDQUFDQyx3QkFBd0IsQ0FBQztJQUNwRTtFQUNGO0VBRUFHLFlBQVlBLENBQUNDLEdBQUcsRUFBRTtJQUNoQixJQUFJLENBQUNBLEdBQUcsSUFBSSxDQUFDQSxHQUFHLENBQUNGLEdBQUcsRUFBRTtNQUNwQixJQUFBckQsMEJBQWlCLEVBQUMsOENBQThDLENBQUM7SUFDbkU7SUFDQXVELEdBQUcsQ0FBQ0YsR0FBRyxDQUFDLElBQUksQ0FBQ3RELE1BQU0sQ0FBQ0UsV0FBVyxFQUFFLElBQUF1RCxhQUFjLEVBQUMsQ0FBQyxDQUFDO0lBQ2xERCxHQUFHLENBQUNGLEdBQUcsQ0FBQyxJQUFJLENBQUN0RCxNQUFNLENBQUNFLFdBQVcsRUFBRXdELCtCQUFrQixDQUFDO0lBQ3BERixHQUFHLENBQUNGLEdBQUcsQ0FBQyxJQUFJLENBQUN0RCxNQUFNLENBQUNFLFdBQVcsRUFBRXlELCtCQUFrQixDQUFDO0lBQ3BELElBQUksQ0FBQ1YsNkJBQTZCLENBQUNPLEdBQUcsRUFBRSxJQUFJLENBQUN6RCxXQUFXLENBQUNDLE1BQU0sQ0FBQztJQUNoRXdELEdBQUcsQ0FBQ0YsR0FBRyxDQUFDLElBQUksQ0FBQ3RELE1BQU0sQ0FBQ0UsV0FBVyxFQUFFMEQsOEJBQWlCLENBQUM7SUFDbkRKLEdBQUcsQ0FBQ0YsR0FBRyxDQUNMLElBQUksQ0FBQ3RELE1BQU0sQ0FBQ0UsV0FBVyxFQUN2QixJQUFBMkQsNkJBQW9CLEVBQUM7TUFDbkJDLFdBQVcsRUFBRSxJQUFJLENBQUN4Qiw4QkFBOEIsQ0FDOUMsSUFBSSxDQUFDdkMsV0FBVyxDQUFDQyxNQUFNLENBQUN1QyxhQUFhLElBQUksTUFDM0M7SUFDRixDQUFDLENBQ0gsQ0FBQztJQUNEaUIsR0FBRyxDQUFDRixHQUFHLENBQUMsSUFBSSxDQUFDdEQsTUFBTSxDQUFDRSxXQUFXLEVBQUU2RCxpQkFBTyxDQUFDQyxJQUFJLENBQUMsQ0FBQyxFQUFFLE9BQU9oRCxHQUFHLEVBQUVDLEdBQUcsRUFBRWdELElBQUksS0FBSztNQUN6RSxNQUFNQyxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUM1QyxVQUFVLENBQUMsQ0FBQztNQUN0QyxPQUFPNEMsTUFBTSxDQUFDbEQsR0FBRyxFQUFFQyxHQUFHLEVBQUVnRCxJQUFJLENBQUM7SUFDL0IsQ0FBQyxDQUFDO0VBQ0o7RUFFQUUsZUFBZUEsQ0FBQ1gsR0FBRyxFQUFFO0lBQ25CLElBQUksQ0FBQ0EsR0FBRyxJQUFJLENBQUNBLEdBQUcsQ0FBQ3BGLEdBQUcsRUFBRTtNQUNwQixJQUFBNkIsMEJBQWlCLEVBQUMsOENBQThDLENBQUM7SUFDbkU7SUFFQXVELEdBQUcsQ0FBQ3BGLEdBQUcsQ0FDTCxJQUFJLENBQUM0QixNQUFNLENBQUNvRSxjQUFjLElBQzFCLElBQUFuRSwwQkFBaUIsRUFBQyw4REFBOEQsQ0FBQyxFQUNqRixDQUFDb0UsSUFBSSxFQUFFcEQsR0FBRyxLQUFLO01BQ2JBLEdBQUcsQ0FBQ3FELFNBQVMsQ0FBQyxjQUFjLEVBQUUsV0FBVyxDQUFDO01BQzFDckQsR0FBRyxDQUFDc0QsS0FBSyxDQUNQO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdDQUFnQ0MsSUFBSSxDQUFDQyxTQUFTLENBQUMsSUFBSSxDQUFDekUsTUFBTSxDQUFDRSxXQUFXLENBQUM7QUFDdkU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdEQUFnRHNFLElBQUksQ0FBQ0MsU0FBUyxDQUFDLElBQUksQ0FBQzFFLFdBQVcsQ0FBQ0MsTUFBTSxDQUFDVyxLQUFLLENBQUM7QUFDN0YsNENBQTRDNkQsSUFBSSxDQUFDQyxTQUFTLENBQUMsSUFBSSxDQUFDMUUsV0FBVyxDQUFDQyxNQUFNLENBQUMwRSxTQUFTLENBQUM7QUFDN0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUNRLENBQUM7TUFDRHpELEdBQUcsQ0FBQzBELEdBQUcsQ0FBQyxDQUFDO0lBQ1gsQ0FDRixDQUFDO0VBQ0g7RUFFQUMsbUJBQW1CQSxDQUFDVixNQUFNLEVBQUU7SUFDMUJXLDRDQUFrQixDQUFDQyxNQUFNLENBQ3ZCO01BQ0VDLE9BQU8sRUFBUEEsZ0JBQU87TUFDUEMsU0FBUyxFQUFUQSxrQkFBUztNQUNUQyxXQUFXLEVBQUUsTUFBQUEsQ0FBT0MsUUFBUSxFQUFFQyxNQUFNLEVBQUVDLFNBQVMsS0FDN0M1RyxNQUFNLENBQUM2RyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUVGLE1BQU0sRUFBRSxNQUFNLElBQUksQ0FBQ3ZFLGtCQUFrQixDQUFDd0UsU0FBUyxDQUFDRSxVQUFVLENBQUM7SUFDakYsQ0FBQyxFQUNEO01BQ0VwQixNQUFNO01BQ05xQixJQUFJLEVBQ0YsSUFBSSxDQUFDdkYsTUFBTSxDQUFDd0YsaUJBQWlCLElBQzdCLElBQUF2RiwwQkFBaUIsRUFBQyxxRUFBcUU7SUFDM0YsQ0FDRixDQUFDO0VBQ0g7RUFFQXdGLGdCQUFnQkEsQ0FBQ0MsYUFBaUMsRUFBVztJQUMzRCxPQUFPLElBQUksQ0FBQ3ZGLHNCQUFzQixDQUFDd0YsbUJBQW1CLENBQUNELGFBQWEsQ0FBQztFQUN2RTtBQUNGO0FBQUNFLE9BQUEsQ0FBQS9GLGtCQUFBLEdBQUFBLGtCQUFBIiwiaWdub3JlTGlzdCI6W119
247
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfY29ycyIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX2dyYXBocWxVcGxvYWRFeHByZXNzIiwiX3NlcnZlciIsIl9leHByZXNzIiwiX2Rpc2FibGVkIiwiX2V4cHJlc3MyIiwiX2dyYXBocWwiLCJfc3Vic2NyaXB0aW9uc1RyYW5zcG9ydFdzIiwiX21pZGRsZXdhcmVzIiwiX3JlcXVpcmVkUGFyYW1ldGVyIiwiX2xvZ2dlciIsIl9QYXJzZUdyYXBoUUxTY2hlbWEiLCJfUGFyc2VHcmFwaFFMQ29udHJvbGxlciIsIl9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkIiwiZSIsInQiLCJXZWFrTWFwIiwiciIsIm4iLCJfX2VzTW9kdWxlIiwibyIsImkiLCJmIiwiX19wcm90b19fIiwiZGVmYXVsdCIsImhhcyIsImdldCIsInNldCIsImhhc093blByb3BlcnR5IiwiY2FsbCIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiaGFzVHlwZUludHJvc3BlY3Rpb24iLCJxdWVyeSIsImFzdCIsInBhcnNlIiwiZGVmaW5pdGlvbiIsImRlZmluaXRpb25zIiwia2luZCIsInNlbGVjdGlvblNldCIsInNlbGVjdGlvbiIsInNlbGVjdGlvbnMiLCJuYW1lIiwidmFsdWUiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJ0aHJvd0ludHJvc3BlY3Rpb25FcnJvciIsIkdyYXBoUUxFcnJvciIsImV4dGVuc2lvbnMiLCJodHRwIiwic3RhdHVzIiwiSW50cm9zcGVjdGlvbkNvbnRyb2xQbHVnaW4iLCJwdWJsaWNJbnRyb3NwZWN0aW9uIiwicmVxdWVzdERpZFN0YXJ0IiwicmVxdWVzdENvbnRleHQiLCJkaWRSZXNvbHZlT3BlcmF0aW9uIiwiaXNNYXN0ZXJPck1haW50ZW5hbmNlIiwiY29udGV4dFZhbHVlIiwiYXV0aCIsImlzTWFzdGVyIiwiaXNNYWludGVuYW5jZSIsInJlcXVlc3QiLCJpbmNsdWRlcyIsIlBhcnNlR3JhcGhRTFNlcnZlciIsImNvbnN0cnVjdG9yIiwicGFyc2VTZXJ2ZXIiLCJjb25maWciLCJyZXF1aXJlZFBhcmFtZXRlciIsImdyYXBoUUxQYXRoIiwicGFyc2VHcmFwaFFMQ29udHJvbGxlciIsImxvZyIsImxvZ2dlckNvbnRyb2xsZXIiLCJkZWZhdWx0TG9nZ2VyIiwicGFyc2VHcmFwaFFMU2NoZW1hIiwiUGFyc2VHcmFwaFFMU2NoZW1hIiwiZGF0YWJhc2VDb250cm9sbGVyIiwiZ3JhcGhRTEN1c3RvbVR5cGVEZWZzIiwiYXBwSWQiLCJfZ2V0R3JhcGhRTE9wdGlvbnMiLCJzY2hlbWEiLCJsb2FkIiwiY29udGV4dCIsInJlcSIsInJlcyIsImluZm8iLCJlcnJvciIsInN0YWNrIiwidG9TdHJpbmciLCJfZ2V0U2VydmVyIiwic2NoZW1hUmVmIiwiZ3JhcGhRTFNjaGVtYSIsIm5ld1NjaGVtYVJlZiIsIl9zY2hlbWFSZWZNdXRleCIsImNyZWF0ZVNlcnZlciIsImFwb2xsbyIsIkFwb2xsb1NlcnZlciIsImNzcmZQcmV2ZW50aW9uIiwicmVxdWVzdEhlYWRlcnMiLCJpbnRyb3NwZWN0aW9uIiwiZ3JhcGhRTFB1YmxpY0ludHJvc3BlY3Rpb24iLCJwbHVnaW5zIiwiQXBvbGxvU2VydmVyUGx1Z2luQ2FjaGVDb250cm9sRGlzYWJsZWQiLCJzdGFydCIsImV4cHJlc3NNaWRkbGV3YXJlIiwiX3RyYW5zZm9ybU1heFVwbG9hZFNpemVUb0J5dGVzIiwibWF4VXBsb2FkU2l6ZSIsInVuaXRNYXAiLCJrYiIsIm1iIiwiZ2IiLCJOdW1iZXIiLCJzbGljZSIsIk1hdGgiLCJwb3ciLCJ0b0xvd2VyQ2FzZSIsImFwcGx5UmVxdWVzdENvbnRleHRNaWRkbGV3YXJlIiwiYXBpIiwib3B0aW9ucyIsInJlcXVlc3RDb250ZXh0TWlkZGxld2FyZSIsIkVycm9yIiwidXNlIiwiYXBwbHlHcmFwaFFMIiwiYXBwIiwiY29yc01pZGRsZXdhcmUiLCJoYW5kbGVQYXJzZUhlYWRlcnMiLCJoYW5kbGVQYXJzZVNlc3Npb24iLCJoYW5kbGVQYXJzZUVycm9ycyIsImdyYXBocWxVcGxvYWRFeHByZXNzIiwibWF4RmlsZVNpemUiLCJleHByZXNzIiwianNvbiIsIm5leHQiLCJzZXJ2ZXIiLCJhcHBseVBsYXlncm91bmQiLCJwbGF5Z3JvdW5kUGF0aCIsIl9yZXEiLCJzZXRIZWFkZXIiLCJ3cml0ZSIsIkpTT04iLCJzdHJpbmdpZnkiLCJtYXN0ZXJLZXkiLCJlbmQiLCJjcmVhdGVTdWJzY3JpcHRpb25zIiwiU3Vic2NyaXB0aW9uU2VydmVyIiwiY3JlYXRlIiwiZXhlY3V0ZSIsInN1YnNjcmliZSIsIm9uT3BlcmF0aW9uIiwiX21lc3NhZ2UiLCJwYXJhbXMiLCJ3ZWJTb2NrZXQiLCJhc3NpZ24iLCJ1cGdyYWRlUmVxIiwicGF0aCIsInN1YnNjcmlwdGlvbnNQYXRoIiwic2V0R3JhcGhRTENvbmZpZyIsImdyYXBoUUxDb25maWciLCJ1cGRhdGVHcmFwaFFMQ29uZmlnIiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9HcmFwaFFML1BhcnNlR3JhcGhRTFNlcnZlci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgY29yc01pZGRsZXdhcmUgZnJvbSAnY29ycyc7XG5pbXBvcnQgZ3JhcGhxbFVwbG9hZEV4cHJlc3MgZnJvbSAnZ3JhcGhxbC11cGxvYWQvZ3JhcGhxbFVwbG9hZEV4cHJlc3MuanMnO1xuaW1wb3J0IHsgQXBvbGxvU2VydmVyIH0gZnJvbSAnQGFwb2xsby9zZXJ2ZXInO1xuaW1wb3J0IHsgZXhwcmVzc01pZGRsZXdhcmUgfSBmcm9tICdAYXMtaW50ZWdyYXRpb25zL2V4cHJlc3M1JztcbmltcG9ydCB7IEFwb2xsb1NlcnZlclBsdWdpbkNhY2hlQ29udHJvbERpc2FibGVkIH0gZnJvbSAnQGFwb2xsby9zZXJ2ZXIvcGx1Z2luL2Rpc2FibGVkJztcbmltcG9ydCBleHByZXNzIGZyb20gJ2V4cHJlc3MnO1xuaW1wb3J0IHsgZXhlY3V0ZSwgc3Vic2NyaWJlLCBHcmFwaFFMRXJyb3IsIHBhcnNlIH0gZnJvbSAnZ3JhcGhxbCc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb25TZXJ2ZXIgfSBmcm9tICdzdWJzY3JpcHRpb25zLXRyYW5zcG9ydC13cyc7XG5pbXBvcnQgeyBoYW5kbGVQYXJzZUVycm9ycywgaGFuZGxlUGFyc2VIZWFkZXJzLCBoYW5kbGVQYXJzZVNlc3Npb24gfSBmcm9tICcuLi9taWRkbGV3YXJlcyc7XG5pbXBvcnQgcmVxdWlyZWRQYXJhbWV0ZXIgZnJvbSAnLi4vcmVxdWlyZWRQYXJhbWV0ZXInO1xuaW1wb3J0IGRlZmF1bHRMb2dnZXIgZnJvbSAnLi4vbG9nZ2VyJztcbmltcG9ydCB7IFBhcnNlR3JhcGhRTFNjaGVtYSB9IGZyb20gJy4vUGFyc2VHcmFwaFFMU2NoZW1hJztcbmltcG9ydCBQYXJzZUdyYXBoUUxDb250cm9sbGVyLCB7IFBhcnNlR3JhcGhRTENvbmZpZyB9IGZyb20gJy4uL0NvbnRyb2xsZXJzL1BhcnNlR3JhcGhRTENvbnRyb2xsZXInO1xuXG5cbmNvbnN0IGhhc1R5cGVJbnRyb3NwZWN0aW9uID0gKHF1ZXJ5KSA9PiB7XG4gIHRyeSB7XG4gICAgY29uc3QgYXN0ID0gcGFyc2UocXVlcnkpO1xuICAgIC8vIENoZWNrIG9ubHkgcm9vdC1sZXZlbCBmaWVsZHMgaW4gdGhlIHF1ZXJ5XG4gICAgLy8gTm90ZTogc2VsZWN0aW9uLm5hbWUudmFsdWUgaXMgdGhlIGFjdHVhbCBmaWVsZCBuYW1lLCBzbyB0aGlzIGNvcnJlY3RseSBoYW5kbGVzXG4gICAgLy8gYWxpYXNlcyBsaWtlIFwibXlBbGlhczogX190eXBlKC4uLilcIiB3aGVyZSBuYW1lLnZhbHVlID09PSBcIl9fdHlwZVwiXG4gICAgZm9yIChjb25zdCBkZWZpbml0aW9uIG9mIGFzdC5kZWZpbml0aW9ucykge1xuICAgICAgaWYgKChkZWZpbml0aW9uLmtpbmQgPT09ICdPcGVyYXRpb25EZWZpbml0aW9uJyB8fCBkZWZpbml0aW9uLmtpbmQgPT09ICdGcmFnbWVudERlZmluaXRpb24nKSAmJiBkZWZpbml0aW9uLnNlbGVjdGlvblNldCkge1xuICAgICAgICBmb3IgKGNvbnN0IHNlbGVjdGlvbiBvZiBkZWZpbml0aW9uLnNlbGVjdGlvblNldC5zZWxlY3Rpb25zKSB7XG4gICAgICAgICAgaWYgKHNlbGVjdGlvbi5raW5kID09PSAnRmllbGQnICYmIHNlbGVjdGlvbi5uYW1lLnZhbHVlID09PSAnX190eXBlJykge1xuICAgICAgICAgICAgLy8gR3JhcGhRTCdzIGludHJvc3BlY3Rpb24gX190eXBlIGZpZWxkIHJlcXVpcmVzIGEgJ25hbWUnIGFyZ3VtZW50XG4gICAgICAgICAgICAvLyBUaGlzIGRpc3Rpbmd1aXNoZXMgaXQgZnJvbSBwb3RlbnRpYWwgdXNlci1kZWZpbmVkIF9fdHlwZSBmaWVsZHNcbiAgICAgICAgICAgIGlmIChzZWxlY3Rpb24uYXJndW1lbnRzICYmIHNlbGVjdGlvbi5hcmd1bWVudHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9IGNhdGNoIHtcbiAgICAvLyBJZiBwYXJzaW5nIGZhaWxzLCB3ZSBhc3N1bWUgaXQncyBub3QgYSB2YWxpZCBxdWVyeSBhbmQgbGV0IEFwb2xsbyBoYW5kbGUgaXRcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn07XG5cbmNvbnN0IHRocm93SW50cm9zcGVjdGlvbkVycm9yID0gKCkgPT4ge1xuICB0aHJvdyBuZXcgR3JhcGhRTEVycm9yKCdJbnRyb3NwZWN0aW9uIGlzIG5vdCBhbGxvd2VkJywge1xuICAgIGV4dGVuc2lvbnM6IHtcbiAgICAgIGh0dHA6IHtcbiAgICAgICAgc3RhdHVzOiA0MDMsXG4gICAgICB9LFxuICAgIH1cbiAgfSk7XG59O1xuXG5jb25zdCBJbnRyb3NwZWN0aW9uQ29udHJvbFBsdWdpbiA9IChwdWJsaWNJbnRyb3NwZWN0aW9uKSA9PiAoe1xuXG5cbiAgcmVxdWVzdERpZFN0YXJ0OiAocmVxdWVzdENvbnRleHQpID0+ICh7XG5cbiAgICBkaWRSZXNvbHZlT3BlcmF0aW9uOiBhc3luYyAoKSA9PiB7XG4gICAgICAvLyBJZiBwdWJsaWMgaW50cm9zcGVjdGlvbiBpcyBlbmFibGVkLCB3ZSBhbGxvdyBhbGwgaW50cm9zcGVjdGlvbiBxdWVyaWVzXG4gICAgICBpZiAocHVibGljSW50cm9zcGVjdGlvbikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGlzTWFzdGVyT3JNYWludGVuYW5jZSA9IHJlcXVlc3RDb250ZXh0LmNvbnRleHRWYWx1ZS5hdXRoPy5pc01hc3RlciB8fCByZXF1ZXN0Q29udGV4dC5jb250ZXh0VmFsdWUuYXV0aD8uaXNNYWludGVuYW5jZVxuICAgICAgaWYgKGlzTWFzdGVyT3JNYWludGVuYW5jZSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHF1ZXJ5ID0gcmVxdWVzdENvbnRleHQucmVxdWVzdC5xdWVyeTtcblxuXG4gICAgICAvLyBGYXN0IHBhdGg6IHNpbXBsZSBzdHJpbmcgY2hlY2sgZm9yIF9fc2NoZW1hXG4gICAgICAvLyBUaGlzIGF2b2lkcyBwYXJzaW5nIHRoZSBxdWVyeSBpbiBtb3N0IGNhc2VzXG4gICAgICBpZiAocXVlcnk/LmluY2x1ZGVzKCdfX3NjaGVtYScpKSB7XG4gICAgICAgIHJldHVybiB0aHJvd0ludHJvc3BlY3Rpb25FcnJvcigpO1xuICAgICAgfVxuXG4gICAgICAvLyBTbWFydCBjaGVjayBmb3IgX190eXBlOiBvbmx5IHBhcnNlIGlmIHRoZSBzdHJpbmcgaXMgcHJlc2VudFxuICAgICAgLy8gVGhpcyBhdm9pZHMgZmFsc2UgcG9zaXRpdmVzIChlLmcuLCBcIl9fdHlwZVwiIGluIHN0cmluZ3Mgb3IgY29tbWVudHMpXG4gICAgICAvLyB3aGlsZSBzdGlsbCBiZWluZyBlZmZpY2llbnQgZm9yIHRoZSBjb21tb24gY2FzZVxuICAgICAgaWYgKHF1ZXJ5Py5pbmNsdWRlcygnX190eXBlJykgJiYgaGFzVHlwZUludHJvc3BlY3Rpb24ocXVlcnkpKSB7XG4gICAgICAgIHJldHVybiB0aHJvd0ludHJvc3BlY3Rpb25FcnJvcigpO1xuICAgICAgfVxuICAgIH0sXG5cbiAgfSlcblxufSk7XG5cbmNsYXNzIFBhcnNlR3JhcGhRTFNlcnZlciB7XG4gIHBhcnNlR3JhcGhRTENvbnRyb2xsZXI6IFBhcnNlR3JhcGhRTENvbnRyb2xsZXI7XG5cbiAgY29uc3RydWN0b3IocGFyc2VTZXJ2ZXIsIGNvbmZpZykge1xuICAgIHRoaXMucGFyc2VTZXJ2ZXIgPSBwYXJzZVNlcnZlciB8fCByZXF1aXJlZFBhcmFtZXRlcignWW91IG11c3QgcHJvdmlkZSBhIHBhcnNlU2VydmVyIGluc3RhbmNlIScpO1xuICAgIGlmICghY29uZmlnIHx8ICFjb25maWcuZ3JhcGhRTFBhdGgpIHtcbiAgICAgIHJlcXVpcmVkUGFyYW1ldGVyKCdZb3UgbXVzdCBwcm92aWRlIGEgY29uZmlnLmdyYXBoUUxQYXRoIScpO1xuICAgIH1cbiAgICB0aGlzLmNvbmZpZyA9IGNvbmZpZztcbiAgICB0aGlzLnBhcnNlR3JhcGhRTENvbnRyb2xsZXIgPSB0aGlzLnBhcnNlU2VydmVyLmNvbmZpZy5wYXJzZUdyYXBoUUxDb250cm9sbGVyO1xuICAgIHRoaXMubG9nID1cbiAgICAgICh0aGlzLnBhcnNlU2VydmVyLmNvbmZpZyAmJiB0aGlzLnBhcnNlU2VydmVyLmNvbmZpZy5sb2dnZXJDb250cm9sbGVyKSB8fCBkZWZhdWx0TG9nZ2VyO1xuICAgIHRoaXMucGFyc2VHcmFwaFFMU2NoZW1hID0gbmV3IFBhcnNlR3JhcGhRTFNjaGVtYSh7XG4gICAgICBwYXJzZUdyYXBoUUxDb250cm9sbGVyOiB0aGlzLnBhcnNlR3JhcGhRTENvbnRyb2xsZXIsXG4gICAgICBkYXRhYmFzZUNvbnRyb2xsZXI6IHRoaXMucGFyc2VTZXJ2ZXIuY29uZmlnLmRhdGFiYXNlQ29udHJvbGxlcixcbiAgICAgIGxvZzogdGhpcy5sb2csXG4gICAgICBncmFwaFFMQ3VzdG9tVHlwZURlZnM6IHRoaXMuY29uZmlnLmdyYXBoUUxDdXN0b21UeXBlRGVmcyxcbiAgICAgIGFwcElkOiB0aGlzLnBhcnNlU2VydmVyLmNvbmZpZy5hcHBJZCxcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIF9nZXRHcmFwaFFMT3B0aW9ucygpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc2NoZW1hOiBhd2FpdCB0aGlzLnBhcnNlR3JhcGhRTFNjaGVtYS5sb2FkKCksXG4gICAgICAgIGNvbnRleHQ6IGFzeW5jICh7IHJlcSwgcmVzIH0pID0+IHtcbiAgICAgICAgICByZXMuc2V0KCdhY2Nlc3MtY29udHJvbC1hbGxvdy1vcmlnaW4nLCByZXEuZ2V0KCdvcmlnaW4nKSB8fCAnKicpO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBpbmZvOiByZXEuaW5mbyxcbiAgICAgICAgICAgIGNvbmZpZzogcmVxLmNvbmZpZyxcbiAgICAgICAgICAgIGF1dGg6IHJlcS5hdXRoLFxuICAgICAgICAgIH07XG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMubG9nLmVycm9yKGUuc3RhY2sgfHwgKHR5cGVvZiBlLnRvU3RyaW5nID09PSAnZnVuY3Rpb24nICYmIGUudG9TdHJpbmcoKSkgfHwgZSk7XG4gICAgICB0aHJvdyBlO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIF9nZXRTZXJ2ZXIoKSB7XG4gICAgY29uc3Qgc2NoZW1hUmVmID0gdGhpcy5wYXJzZUdyYXBoUUxTY2hlbWEuZ3JhcGhRTFNjaGVtYTtcbiAgICBjb25zdCBuZXdTY2hlbWFSZWYgPSBhd2FpdCB0aGlzLnBhcnNlR3JhcGhRTFNjaGVtYS5sb2FkKCk7XG4gICAgaWYgKHNjaGVtYVJlZiA9PT0gbmV3U2NoZW1hUmVmICYmIHRoaXMuX3NlcnZlcikge1xuICAgICAgcmV0dXJuIHRoaXMuX3NlcnZlcjtcbiAgICB9XG4gICAgLy8gSXQgbWVhbnMgYSBwYXJhbGxlbCBfZ2V0U2VydmVyIGNhbGwgaXMgYWxyZWFkeSBpbiBwcm9ncmVzc1xuICAgIGlmICh0aGlzLl9zY2hlbWFSZWZNdXRleCA9PT0gbmV3U2NoZW1hUmVmKSB7XG4gICAgICByZXR1cm4gdGhpcy5fc2VydmVyO1xuICAgIH1cbiAgICAvLyBVcGRhdGUgdGhlIHNjaGVtYSByZWYgbXV0ZXggdG8gYXZvaWQgcGFyYWxsZWwgX2dldFNlcnZlciBjYWxsc1xuICAgIHRoaXMuX3NjaGVtYVJlZk11dGV4ID0gbmV3U2NoZW1hUmVmO1xuICAgIGNvbnN0IGNyZWF0ZVNlcnZlciA9IGFzeW5jICgpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHsgc2NoZW1hLCBjb250ZXh0IH0gPSBhd2FpdCB0aGlzLl9nZXRHcmFwaFFMT3B0aW9ucygpO1xuICAgICAgICBjb25zdCBhcG9sbG8gPSBuZXcgQXBvbGxvU2VydmVyKHtcbiAgICAgICAgICBjc3JmUHJldmVudGlvbjoge1xuICAgICAgICAgICAgLy8gU2VlIGh0dHBzOi8vd3d3LmFwb2xsb2dyYXBocWwuY29tL2RvY3Mvcm91dGVyL2NvbmZpZ3VyYXRpb24vY3NyZi9cbiAgICAgICAgICAgIC8vIG5lZWRlZCBzaW5jZSB3ZSB1c2UgZ3JhcGhxbCB1cGxvYWRcbiAgICAgICAgICAgIHJlcXVlc3RIZWFkZXJzOiBbJ1gtUGFyc2UtQXBwbGljYXRpb24tSWQnXSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGludHJvc3BlY3Rpb246IHRoaXMuY29uZmlnLmdyYXBoUUxQdWJsaWNJbnRyb3NwZWN0aW9uLFxuICAgICAgICAgIHBsdWdpbnM6IFtBcG9sbG9TZXJ2ZXJQbHVnaW5DYWNoZUNvbnRyb2xEaXNhYmxlZCgpLCBJbnRyb3NwZWN0aW9uQ29udHJvbFBsdWdpbih0aGlzLmNvbmZpZy5ncmFwaFFMUHVibGljSW50cm9zcGVjdGlvbildLFxuICAgICAgICAgIHNjaGVtYSxcbiAgICAgICAgfSk7XG4gICAgICAgIGF3YWl0IGFwb2xsby5zdGFydCgpO1xuICAgICAgICByZXR1cm4gZXhwcmVzc01pZGRsZXdhcmUoYXBvbGxvLCB7XG4gICAgICAgICAgY29udGV4dCxcbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIC8vIFJlc2V0IGFsbCBtdXRleGVzIGFuZCBmb3J3YXJkIHRoZSBlcnJvclxuICAgICAgICB0aGlzLl9zZXJ2ZXIgPSBudWxsO1xuICAgICAgICB0aGlzLl9zY2hlbWFSZWZNdXRleCA9IG51bGw7XG4gICAgICAgIHRocm93IGU7XG4gICAgICB9XG4gICAgfVxuICAgIC8vIERvIG5vdCBhd2FpdCBzbyBwYXJhbGxlbCByZXF1ZXN0IHdpbGwgd2FpdCB0aGUgc2FtZSBwcm9taXNlIHJlZlxuICAgIHRoaXMuX3NlcnZlciA9IGNyZWF0ZVNlcnZlcigpO1xuICAgIHJldHVybiB0aGlzLl9zZXJ2ZXI7XG4gIH1cblxuICBfdHJhbnNmb3JtTWF4VXBsb2FkU2l6ZVRvQnl0ZXMobWF4VXBsb2FkU2l6ZSkge1xuICAgIGNvbnN0IHVuaXRNYXAgPSB7XG4gICAgICBrYjogMSxcbiAgICAgIG1iOiAyLFxuICAgICAgZ2I6IDMsXG4gICAgfTtcblxuICAgIHJldHVybiAoXG4gICAgICBOdW1iZXIobWF4VXBsb2FkU2l6ZS5zbGljZSgwLCAtMikpICpcbiAgICAgIE1hdGgucG93KDEwMjQsIHVuaXRNYXBbbWF4VXBsb2FkU2l6ZS5zbGljZSgtMikudG9Mb3dlckNhc2UoKV0pXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAc3RhdGljXG4gICAqIEFsbG93IGRldmVsb3BlcnMgdG8gY3VzdG9taXplIGVhY2ggcmVxdWVzdCB3aXRoIGludmVyc2lvbiBvZiBjb250cm9sL2RlcGVuZGVuY3kgaW5qZWN0aW9uXG4gICAqL1xuICBhcHBseVJlcXVlc3RDb250ZXh0TWlkZGxld2FyZShhcGksIG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucy5yZXF1ZXN0Q29udGV4dE1pZGRsZXdhcmUpIHtcbiAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5yZXF1ZXN0Q29udGV4dE1pZGRsZXdhcmUgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdyZXF1ZXN0Q29udGV4dE1pZGRsZXdhcmUgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG4gICAgICB9XG4gICAgICBhcGkudXNlKHRoaXMuY29uZmlnLmdyYXBoUUxQYXRoLCBvcHRpb25zLnJlcXVlc3RDb250ZXh0TWlkZGxld2FyZSk7XG4gICAgfVxuICB9XG5cbiAgYXBwbHlHcmFwaFFMKGFwcCkge1xuICAgIGlmICghYXBwIHx8ICFhcHAudXNlKSB7XG4gICAgICByZXF1aXJlZFBhcmFtZXRlcignWW91IG11c3QgcHJvdmlkZSBhbiBFeHByZXNzLmpzIGFwcCBpbnN0YW5jZSEnKTtcbiAgICB9XG4gICAgYXBwLnVzZSh0aGlzLmNvbmZpZy5ncmFwaFFMUGF0aCwgY29yc01pZGRsZXdhcmUoKSk7XG4gICAgYXBwLnVzZSh0aGlzLmNvbmZpZy5ncmFwaFFMUGF0aCwgaGFuZGxlUGFyc2VIZWFkZXJzKTtcbiAgICBhcHAudXNlKHRoaXMuY29uZmlnLmdyYXBoUUxQYXRoLCBoYW5kbGVQYXJzZVNlc3Npb24pO1xuICAgIHRoaXMuYXBwbHlSZXF1ZXN0Q29udGV4dE1pZGRsZXdhcmUoYXBwLCB0aGlzLnBhcnNlU2VydmVyLmNvbmZpZyk7XG4gICAgYXBwLnVzZSh0aGlzLmNvbmZpZy5ncmFwaFFMUGF0aCwgaGFuZGxlUGFyc2VFcnJvcnMpO1xuICAgIGFwcC51c2UoXG4gICAgICB0aGlzLmNvbmZpZy5ncmFwaFFMUGF0aCxcbiAgICAgIGdyYXBocWxVcGxvYWRFeHByZXNzKHtcbiAgICAgICAgbWF4RmlsZVNpemU6IHRoaXMuX3RyYW5zZm9ybU1heFVwbG9hZFNpemVUb0J5dGVzKFxuICAgICAgICAgIHRoaXMucGFyc2VTZXJ2ZXIuY29uZmlnLm1heFVwbG9hZFNpemUgfHwgJzIwbWInXG4gICAgICAgICksXG4gICAgICB9KVxuICAgICk7XG4gICAgYXBwLnVzZSh0aGlzLmNvbmZpZy5ncmFwaFFMUGF0aCwgZXhwcmVzcy5qc29uKCksIGFzeW5jIChyZXEsIHJlcywgbmV4dCkgPT4ge1xuICAgICAgY29uc3Qgc2VydmVyID0gYXdhaXQgdGhpcy5fZ2V0U2VydmVyKCk7XG4gICAgICByZXR1cm4gc2VydmVyKHJlcSwgcmVzLCBuZXh0KTtcbiAgICB9KTtcbiAgfVxuXG4gIGFwcGx5UGxheWdyb3VuZChhcHApIHtcbiAgICBpZiAoIWFwcCB8fCAhYXBwLmdldCkge1xuICAgICAgcmVxdWlyZWRQYXJhbWV0ZXIoJ1lvdSBtdXN0IHByb3ZpZGUgYW4gRXhwcmVzcy5qcyBhcHAgaW5zdGFuY2UhJyk7XG4gICAgfVxuXG4gICAgYXBwLmdldChcbiAgICAgIHRoaXMuY29uZmlnLnBsYXlncm91bmRQYXRoIHx8XG4gICAgICByZXF1aXJlZFBhcmFtZXRlcignWW91IG11c3QgcHJvdmlkZSBhIGNvbmZpZy5wbGF5Z3JvdW5kUGF0aCB0byBhcHBseVBsYXlncm91bmQhJyksXG4gICAgICAoX3JlcSwgcmVzKSA9PiB7XG4gICAgICAgIHJlcy5zZXRIZWFkZXIoJ0NvbnRlbnQtVHlwZScsICd0ZXh0L2h0bWwnKTtcbiAgICAgICAgcmVzLndyaXRlKFxuICAgICAgICAgIGA8ZGl2IGlkPVwic2FuZGJveFwiIHN0eWxlPVwicG9zaXRpb246YWJzb2x1dGU7dG9wOjA7cmlnaHQ6MDtib3R0b206MDtsZWZ0OjBcIj48L2Rpdj5cbiAgICAgICAgICA8c2NyaXB0IHNyYz1cImh0dHBzOi8vZW1iZWRkYWJsZS1zYW5kYm94LmNkbi5hcG9sbG9ncmFwaHFsLmNvbS9fbGF0ZXN0L2VtYmVkZGFibGUtc2FuZGJveC51bWQucHJvZHVjdGlvbi5taW4uanNcIj48L3NjcmlwdD5cbiAgICAgICAgICA8c2NyaXB0PlxuICAgICAgICAgICBuZXcgd2luZG93LkVtYmVkZGVkU2FuZGJveCh7XG4gICAgICAgICAgICAgdGFyZ2V0OiBcIiNzYW5kYm94XCIsXG4gICAgICAgICAgICAgZW5kcG9pbnRJc0VkaXRhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgICBpbml0aWFsRW5kcG9pbnQ6ICR7SlNPTi5zdHJpbmdpZnkodGhpcy5jb25maWcuZ3JhcGhRTFBhdGgpfSxcbiAgICAgICAgICAgICBoYW5kbGVSZXF1ZXN0OiAoZW5kcG9pbnRVcmwsIG9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIGZldGNoKGVuZHBvaW50VXJsLCB7XG4gICAgICAgICAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICAgICAgIC4uLm9wdGlvbnMuaGVhZGVycyxcbiAgICAgICAgICAgICAgICAgICAgJ1gtUGFyc2UtQXBwbGljYXRpb24tSWQnOiAke0pTT04uc3RyaW5naWZ5KHRoaXMucGFyc2VTZXJ2ZXIuY29uZmlnLmFwcElkKX0sXG4gICAgICAgICAgICAgICAgICAgICdYLVBhcnNlLU1hc3Rlci1LZXknOiAke0pTT04uc3RyaW5naWZ5KHRoaXMucGFyc2VTZXJ2ZXIuY29uZmlnLm1hc3RlcktleSl9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICB9KTtcbiAgICAgICAgICAgLy8gYWR2YW5jZWQgb3B0aW9uczogaHR0cHM6Ly93d3cuYXBvbGxvZ3JhcGhxbC5jb20vZG9jcy9zdHVkaW8vZXhwbG9yZXIvc2FuZGJveCNlbWJlZGRpbmctc2FuZGJveFxuICAgICAgICAgIDwvc2NyaXB0PmBcbiAgICAgICAgKTtcbiAgICAgICAgcmVzLmVuZCgpO1xuICAgICAgfVxuICAgICk7XG4gIH1cblxuICBjcmVhdGVTdWJzY3JpcHRpb25zKHNlcnZlcikge1xuICAgIFN1YnNjcmlwdGlvblNlcnZlci5jcmVhdGUoXG4gICAgICB7XG4gICAgICAgIGV4ZWN1dGUsXG4gICAgICAgIHN1YnNjcmliZSxcbiAgICAgICAgb25PcGVyYXRpb246IGFzeW5jIChfbWVzc2FnZSwgcGFyYW1zLCB3ZWJTb2NrZXQpID0+XG4gICAgICAgICAgT2JqZWN0LmFzc2lnbih7fSwgcGFyYW1zLCBhd2FpdCB0aGlzLl9nZXRHcmFwaFFMT3B0aW9ucyh3ZWJTb2NrZXQudXBncmFkZVJlcSkpLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgc2VydmVyLFxuICAgICAgICBwYXRoOlxuICAgICAgICAgIHRoaXMuY29uZmlnLnN1YnNjcmlwdGlvbnNQYXRoIHx8XG4gICAgICAgICAgcmVxdWlyZWRQYXJhbWV0ZXIoJ1lvdSBtdXN0IHByb3ZpZGUgYSBjb25maWcuc3Vic2NyaXB0aW9uc1BhdGggdG8gY3JlYXRlU3Vic2NyaXB0aW9ucyEnKSxcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgc2V0R3JhcGhRTENvbmZpZyhncmFwaFFMQ29uZmlnOiBQYXJzZUdyYXBoUUxDb25maWcpOiBQcm9taXNlIHtcbiAgICByZXR1cm4gdGhpcy5wYXJzZUdyYXBoUUxDb250cm9sbGVyLnVwZGF0ZUdyYXBoUUxDb25maWcoZ3JhcGhRTENvbmZpZyk7XG4gIH1cbn1cblxuZXhwb3J0IHsgUGFyc2VHcmFwaFFMU2VydmVyIH07XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLElBQUFBLEtBQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLHFCQUFBLEdBQUFGLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBRSxPQUFBLEdBQUFGLE9BQUE7QUFDQSxJQUFBRyxRQUFBLEdBQUFILE9BQUE7QUFDQSxJQUFBSSxTQUFBLEdBQUFKLE9BQUE7QUFDQSxJQUFBSyxTQUFBLEdBQUFOLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBTSxRQUFBLEdBQUFOLE9BQUE7QUFDQSxJQUFBTyx5QkFBQSxHQUFBUCxPQUFBO0FBQ0EsSUFBQVEsWUFBQSxHQUFBUixPQUFBO0FBQ0EsSUFBQVMsa0JBQUEsR0FBQVYsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFVLE9BQUEsR0FBQVgsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFXLG1CQUFBLEdBQUFYLE9B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
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "parse-server",
3
- "version": "9.0.0-alpha.1",
3
+ "version": "9.0.0-alpha.3",
4
4
  "description": "An express module providing a Parse-compatible API server",
5
5
  "main": "lib/index.js",
6
6
  "repository": {
@@ -20,7 +20,8 @@
20
20
  ],
21
21
  "license": "Apache-2.0",
22
22
  "dependencies": {
23
- "@apollo/server": "4.12.1",
23
+ "@apollo/server": "5.0.0",
24
+ "@as-integrations/express5": "1.1.2",
24
25
  "@graphql-tools/merge": "9.0.24",
25
26
  "@graphql-tools/schema": "10.0.23",
26
27
  "@graphql-tools/utils": "10.8.6",
@@ -47,7 +48,7 @@
47
48
  "mongodb": "6.20.0",
48
49
  "mustache": "4.2.0",
49
50
  "otpauth": "9.4.0",
50
- "parse": "7.1.2",
51
+ "parse": "8.0.0",
51
52
  "path-to-regexp": "6.3.0",
52
53
  "pg-monitor": "3.0.0",
53
54
  "pg-promise": "12.2.0",