parse-server 6.2.1 → 6.2.2

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.
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+
3
+ const classesWithMasterOnlyAccess = ['_JobStatus', '_PushStatus', '_Hooks', '_GlobalConfig', '_JobSchedule', '_Idempotency'];
4
+ // Disallowing access to the _Role collection except by master key
5
+ function enforceRoleSecurity(method, className, auth) {
6
+ if (className === '_Installation' && !auth.isMaster && !auth.isMaintenance) {
7
+ if (method === 'delete' || method === 'find') {
8
+ const error = `Clients aren't allowed to perform the ${method} operation on the installation collection.`;
9
+ throw new Parse.Error(Parse.Error.OPERATION_FORBIDDEN, error);
10
+ }
11
+ }
12
+
13
+ //all volatileClasses are masterKey only
14
+ if (classesWithMasterOnlyAccess.indexOf(className) >= 0 && !auth.isMaster && !auth.isMaintenance) {
15
+ const error = `Clients aren't allowed to perform the ${method} operation on the ${className} collection.`;
16
+ throw new Parse.Error(Parse.Error.OPERATION_FORBIDDEN, error);
17
+ }
18
+
19
+ // readOnly masterKey is not allowed
20
+ if (auth.isReadOnly && (method === 'delete' || method === 'create' || method === 'update')) {
21
+ const error = `read-only masterKey isn't allowed to perform the ${method} operation.`;
22
+ throw new Parse.Error(Parse.Error.OPERATION_FORBIDDEN, error);
23
+ }
24
+ }
25
+ module.exports = {
26
+ enforceRoleSecurity
27
+ };
28
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjbGFzc2VzV2l0aE1hc3Rlck9ubHlBY2Nlc3MiLCJlbmZvcmNlUm9sZVNlY3VyaXR5IiwibWV0aG9kIiwiY2xhc3NOYW1lIiwiYXV0aCIsImlzTWFzdGVyIiwiaXNNYWludGVuYW5jZSIsImVycm9yIiwiUGFyc2UiLCJFcnJvciIsIk9QRVJBVElPTl9GT1JCSURERU4iLCJpbmRleE9mIiwiaXNSZWFkT25seSIsIm1vZHVsZSIsImV4cG9ydHMiXSwic291cmNlcyI6WyIuLi9zcmMvU2hhcmVkUmVzdC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCBjbGFzc2VzV2l0aE1hc3Rlck9ubHlBY2Nlc3MgPSBbXG4gICdfSm9iU3RhdHVzJyxcbiAgJ19QdXNoU3RhdHVzJyxcbiAgJ19Ib29rcycsXG4gICdfR2xvYmFsQ29uZmlnJyxcbiAgJ19Kb2JTY2hlZHVsZScsXG4gICdfSWRlbXBvdGVuY3knLFxuXTtcbi8vIERpc2FsbG93aW5nIGFjY2VzcyB0byB0aGUgX1JvbGUgY29sbGVjdGlvbiBleGNlcHQgYnkgbWFzdGVyIGtleVxuZnVuY3Rpb24gZW5mb3JjZVJvbGVTZWN1cml0eShtZXRob2QsIGNsYXNzTmFtZSwgYXV0aCkge1xuICBpZiAoY2xhc3NOYW1lID09PSAnX0luc3RhbGxhdGlvbicgJiYgIWF1dGguaXNNYXN0ZXIgJiYgIWF1dGguaXNNYWludGVuYW5jZSkge1xuICAgIGlmIChtZXRob2QgPT09ICdkZWxldGUnIHx8IG1ldGhvZCA9PT0gJ2ZpbmQnKSB7XG4gICAgICBjb25zdCBlcnJvciA9IGBDbGllbnRzIGFyZW4ndCBhbGxvd2VkIHRvIHBlcmZvcm0gdGhlICR7bWV0aG9kfSBvcGVyYXRpb24gb24gdGhlIGluc3RhbGxhdGlvbiBjb2xsZWN0aW9uLmA7XG4gICAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuT1BFUkFUSU9OX0ZPUkJJRERFTiwgZXJyb3IpO1xuICAgIH1cbiAgfVxuXG4gIC8vYWxsIHZvbGF0aWxlQ2xhc3NlcyBhcmUgbWFzdGVyS2V5IG9ubHlcbiAgaWYgKFxuICAgIGNsYXNzZXNXaXRoTWFzdGVyT25seUFjY2Vzcy5pbmRleE9mKGNsYXNzTmFtZSkgPj0gMCAmJlxuICAgICFhdXRoLmlzTWFzdGVyICYmXG4gICAgIWF1dGguaXNNYWludGVuYW5jZVxuICApIHtcbiAgICBjb25zdCBlcnJvciA9IGBDbGllbnRzIGFyZW4ndCBhbGxvd2VkIHRvIHBlcmZvcm0gdGhlICR7bWV0aG9kfSBvcGVyYXRpb24gb24gdGhlICR7Y2xhc3NOYW1lfSBjb2xsZWN0aW9uLmA7XG4gICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLk9QRVJBVElPTl9GT1JCSURERU4sIGVycm9yKTtcbiAgfVxuXG4gIC8vIHJlYWRPbmx5IG1hc3RlcktleSBpcyBub3QgYWxsb3dlZFxuICBpZiAoYXV0aC5pc1JlYWRPbmx5ICYmIChtZXRob2QgPT09ICdkZWxldGUnIHx8IG1ldGhvZCA9PT0gJ2NyZWF0ZScgfHwgbWV0aG9kID09PSAndXBkYXRlJykpIHtcbiAgICBjb25zdCBlcnJvciA9IGByZWFkLW9ubHkgbWFzdGVyS2V5IGlzbid0IGFsbG93ZWQgdG8gcGVyZm9ybSB0aGUgJHttZXRob2R9IG9wZXJhdGlvbi5gO1xuICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5PUEVSQVRJT05fRk9SQklEREVOLCBlcnJvcik7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGVuZm9yY2VSb2xlU2VjdXJpdHksXG59O1xuIl0sIm1hcHBpbmdzIjoiOztBQUFBLE1BQU1BLDJCQUEyQixHQUFHLENBQ2xDLFlBQVksRUFDWixhQUFhLEVBQ2IsUUFBUSxFQUNSLGVBQWUsRUFDZixjQUFjLEVBQ2QsY0FBYyxDQUNmO0FBQ0Q7QUFDQSxTQUFTQyxtQkFBbUIsQ0FBQ0MsTUFBTSxFQUFFQyxTQUFTLEVBQUVDLElBQUksRUFBRTtFQUNwRCxJQUFJRCxTQUFTLEtBQUssZUFBZSxJQUFJLENBQUNDLElBQUksQ0FBQ0MsUUFBUSxJQUFJLENBQUNELElBQUksQ0FBQ0UsYUFBYSxFQUFFO0lBQzFFLElBQUlKLE1BQU0sS0FBSyxRQUFRLElBQUlBLE1BQU0sS0FBSyxNQUFNLEVBQUU7TUFDNUMsTUFBTUssS0FBSyxHQUFJLHlDQUF3Q0wsTUFBTyw0Q0FBMkM7TUFDekcsTUFBTSxJQUFJTSxLQUFLLENBQUNDLEtBQUssQ0FBQ0QsS0FBSyxDQUFDQyxLQUFLLENBQUNDLG1CQUFtQixFQUFFSCxLQUFLLENBQUM7SUFDL0Q7RUFDRjs7RUFFQTtFQUNBLElBQ0VQLDJCQUEyQixDQUFDVyxPQUFPLENBQUNSLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFDbkQsQ0FBQ0MsSUFBSSxDQUFDQyxRQUFRLElBQ2QsQ0FBQ0QsSUFBSSxDQUFDRSxhQUFhLEVBQ25CO0lBQ0EsTUFBTUMsS0FBSyxHQUFJLHlDQUF3Q0wsTUFBTyxxQkFBb0JDLFNBQVUsY0FBYTtJQUN6RyxNQUFNLElBQUlLLEtBQUssQ0FBQ0MsS0FBSyxDQUFDRCxLQUFLLENBQUNDLEtBQUssQ0FBQ0MsbUJBQW1CLEVBQUVILEtBQUssQ0FBQztFQUMvRDs7RUFFQTtFQUNBLElBQUlILElBQUksQ0FBQ1EsVUFBVSxLQUFLVixNQUFNLEtBQUssUUFBUSxJQUFJQSxNQUFNLEtBQUssUUFBUSxJQUFJQSxNQUFNLEtBQUssUUFBUSxDQUFDLEVBQUU7SUFDMUYsTUFBTUssS0FBSyxHQUFJLG9EQUFtREwsTUFBTyxhQUFZO0lBQ3JGLE1BQU0sSUFBSU0sS0FBSyxDQUFDQyxLQUFLLENBQUNELEtBQUssQ0FBQ0MsS0FBSyxDQUFDQyxtQkFBbUIsRUFBRUgsS0FBSyxDQUFDO0VBQy9EO0FBQ0Y7QUFFQU0sTUFBTSxDQUFDQyxPQUFPLEdBQUc7RUFDZmI7QUFDRixDQUFDIn0=
package/lib/rest.js CHANGED
@@ -13,6 +13,9 @@ var Parse = require('parse/node').Parse;
13
13
  var RestQuery = require('./RestQuery');
14
14
  var RestWrite = require('./RestWrite');
15
15
  var triggers = require('./triggers');
16
+ const {
17
+ enforceRoleSecurity
18
+ } = require('./SharedRest');
16
19
  function checkTriggers(className, config, types) {
17
20
  return types.some(triggerType => {
18
21
  return triggers.getTrigger(className, triggers.Types[triggerType], config.applicationId);
@@ -23,28 +26,36 @@ function checkLiveQuery(className, config) {
23
26
  }
24
27
 
25
28
  // Returns a promise for an object with optional keys 'results' and 'count'.
26
- function find(config, auth, className, restWhere, restOptions, clientSDK, context) {
27
- enforceRoleSecurity('find', className, auth);
28
- return triggers.maybeRunQueryTrigger(triggers.Types.beforeFind, className, restWhere, restOptions, config, auth, context).then(result => {
29
- restWhere = result.restWhere || restWhere;
30
- restOptions = result.restOptions || restOptions;
31
- const query = new RestQuery(config, auth, className, restWhere, restOptions, clientSDK, true, context);
32
- return query.execute();
29
+ const find = async (config, auth, className, restWhere, restOptions, clientSDK, context) => {
30
+ const query = await RestQuery({
31
+ method: RestQuery.Method.find,
32
+ config,
33
+ auth,
34
+ className,
35
+ restWhere,
36
+ restOptions,
37
+ clientSDK,
38
+ context
33
39
  });
34
- }
40
+ return query.execute();
41
+ };
35
42
 
36
43
  // get is just like find but only queries an objectId.
37
- const get = (config, auth, className, objectId, restOptions, clientSDK, context) => {
44
+ const get = async (config, auth, className, objectId, restOptions, clientSDK, context) => {
38
45
  var restWhere = {
39
46
  objectId
40
47
  };
41
- enforceRoleSecurity('get', className, auth);
42
- return triggers.maybeRunQueryTrigger(triggers.Types.beforeFind, className, restWhere, restOptions, config, auth, context, true).then(result => {
43
- restWhere = result.restWhere || restWhere;
44
- restOptions = result.restOptions || restOptions;
45
- const query = new RestQuery(config, auth, className, restWhere, restOptions, clientSDK, true, context);
46
- return query.execute();
48
+ const query = await RestQuery({
49
+ method: RestQuery.Method.get,
50
+ config,
51
+ auth,
52
+ className,
53
+ restWhere,
54
+ restOptions,
55
+ clientSDK,
56
+ context
47
57
  });
58
+ return query.execute();
48
59
  };
49
60
 
50
61
  // Returns a promise that doesn't resolve to any useful value.
@@ -58,13 +69,20 @@ function del(config, auth, className, objectId, context) {
58
69
  enforceRoleSecurity('delete', className, auth);
59
70
  let inflatedObject;
60
71
  let schemaController;
61
- return Promise.resolve().then(() => {
72
+ return Promise.resolve().then(async () => {
62
73
  const hasTriggers = checkTriggers(className, config, ['beforeDelete', 'afterDelete']);
63
74
  const hasLiveQuery = checkLiveQuery(className, config);
64
75
  if (hasTriggers || hasLiveQuery || className == '_Session') {
65
- return new RestQuery(config, auth, className, {
66
- objectId
67
- }).execute({
76
+ const query = await RestQuery({
77
+ method: RestQuery.Method.get,
78
+ config,
79
+ auth,
80
+ className,
81
+ restWhere: {
82
+ objectId
83
+ }
84
+ });
85
+ return query.execute({
68
86
  op: 'delete'
69
87
  }).then(response => {
70
88
  if (response && response.results && response.results.length) {
@@ -125,12 +143,22 @@ function create(config, auth, className, restObject, clientSDK, context) {
125
143
  // Usually, this is just updatedAt.
126
144
  function update(config, auth, className, restWhere, restObject, clientSDK, context) {
127
145
  enforceRoleSecurity('update', className, auth);
128
- return Promise.resolve().then(() => {
146
+ return Promise.resolve().then(async () => {
129
147
  const hasTriggers = checkTriggers(className, config, ['beforeSave', 'afterSave']);
130
148
  const hasLiveQuery = checkLiveQuery(className, config);
131
149
  if (hasTriggers || hasLiveQuery) {
132
150
  // Do not use find, as it runs the before finds
133
- return new RestQuery(config, auth, className, restWhere, undefined, undefined, false, context).execute({
151
+ const query = await RestQuery({
152
+ method: RestQuery.Method.get,
153
+ config,
154
+ auth,
155
+ className,
156
+ restWhere,
157
+ runAfterFind: false,
158
+ runBeforeFind: false,
159
+ context
160
+ });
161
+ return query.execute({
134
162
  op: 'update'
135
163
  });
136
164
  }
@@ -154,28 +182,6 @@ function handleSessionMissingError(error, className, auth) {
154
182
  }
155
183
  throw error;
156
184
  }
157
- const classesWithMasterOnlyAccess = ['_JobStatus', '_PushStatus', '_Hooks', '_GlobalConfig', '_JobSchedule', '_Idempotency'];
158
- // Disallowing access to the _Role collection except by master key
159
- function enforceRoleSecurity(method, className, auth) {
160
- if (className === '_Installation' && !auth.isMaster && !auth.isMaintenance) {
161
- if (method === 'delete' || method === 'find') {
162
- const error = `Clients aren't allowed to perform the ${method} operation on the installation collection.`;
163
- throw new Parse.Error(Parse.Error.OPERATION_FORBIDDEN, error);
164
- }
165
- }
166
-
167
- //all volatileClasses are masterKey only
168
- if (classesWithMasterOnlyAccess.indexOf(className) >= 0 && !auth.isMaster && !auth.isMaintenance) {
169
- const error = `Clients aren't allowed to perform the ${method} operation on the ${className} collection.`;
170
- throw new Parse.Error(Parse.Error.OPERATION_FORBIDDEN, error);
171
- }
172
-
173
- // readOnly masterKey is not allowed
174
- if (auth.isReadOnly && (method === 'delete' || method === 'create' || method === 'update')) {
175
- const error = `read-only masterKey isn't allowed to perform the ${method} operation.`;
176
- throw new Parse.Error(Parse.Error.OPERATION_FORBIDDEN, error);
177
- }
178
- }
179
185
  module.exports = {
180
186
  create,
181
187
  del,
@@ -183,4 +189,4 @@ module.exports = {
183
189
  get,
184
190
  update
185
191
  };
186
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJQYXJzZSIsInJlcXVpcmUiLCJSZXN0UXVlcnkiLCJSZXN0V3JpdGUiLCJ0cmlnZ2VycyIsImNoZWNrVHJpZ2dlcnMiLCJjbGFzc05hbWUiLCJjb25maWciLCJ0eXBlcyIsInNvbWUiLCJ0cmlnZ2VyVHlwZSIsImdldFRyaWdnZXIiLCJUeXBlcyIsImFwcGxpY2F0aW9uSWQiLCJjaGVja0xpdmVRdWVyeSIsImxpdmVRdWVyeUNvbnRyb2xsZXIiLCJoYXNMaXZlUXVlcnkiLCJmaW5kIiwiYXV0aCIsInJlc3RXaGVyZSIsInJlc3RPcHRpb25zIiwiY2xpZW50U0RLIiwiY29udGV4dCIsImVuZm9yY2VSb2xlU2VjdXJpdHkiLCJtYXliZVJ1blF1ZXJ5VHJpZ2dlciIsImJlZm9yZUZpbmQiLCJ0aGVuIiwicmVzdWx0IiwicXVlcnkiLCJleGVjdXRlIiwiZ2V0Iiwib2JqZWN0SWQiLCJkZWwiLCJFcnJvciIsIklOVkFMSURfSlNPTiIsImlzVW5hdXRoZW50aWNhdGVkIiwiU0VTU0lPTl9NSVNTSU5HIiwiaW5mbGF0ZWRPYmplY3QiLCJzY2hlbWFDb250cm9sbGVyIiwiUHJvbWlzZSIsInJlc29sdmUiLCJoYXNUcmlnZ2VycyIsIm9wIiwicmVzcG9uc2UiLCJyZXN1bHRzIiwibGVuZ3RoIiwiZmlyc3RSZXN1bHQiLCJpc01hc3RlciIsImlzTWFpbnRlbmFuY2UiLCJ1c2VyIiwiaWQiLCJJTlZBTElEX1NFU1NJT05fVE9LRU4iLCJjYWNoZUFkYXB0ZXIiLCJjYWNoZUNvbnRyb2xsZXIiLCJzZXNzaW9uVG9rZW4iLCJPYmplY3QiLCJmcm9tSlNPTiIsIm1heWJlUnVuVHJpZ2dlciIsImJlZm9yZURlbGV0ZSIsIk9CSkVDVF9OT1RfRk9VTkQiLCJnZXRVc2VyUm9sZXMiLCJkYXRhYmFzZSIsImxvYWRTY2hlbWEiLCJzIiwib3B0aW9ucyIsImFjbCIsInB1c2giLCJjb25jYXQiLCJ1c2VyUm9sZXMiLCJkZXN0cm95IiwicGVybXMiLCJnZXRDbGFzc0xldmVsUGVybWlzc2lvbnMiLCJvbkFmdGVyRGVsZXRlIiwiYWZ0ZXJEZWxldGUiLCJjYXRjaCIsImVycm9yIiwiaGFuZGxlU2Vzc2lvbk1pc3NpbmdFcnJvciIsImNyZWF0ZSIsInJlc3RPYmplY3QiLCJ3cml0ZSIsInVwZGF0ZSIsInVuZGVmaW5lZCIsIm9yaWdpbmFsUmVzdE9iamVjdCIsImNvZGUiLCJjbGFzc2VzV2l0aE1hc3Rlck9ubHlBY2Nlc3MiLCJtZXRob2QiLCJPUEVSQVRJT05fRk9SQklEREVOIiwiaW5kZXhPZiIsImlzUmVhZE9ubHkiLCJtb2R1bGUiLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vc3JjL3Jlc3QuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gVGhpcyBmaWxlIGNvbnRhaW5zIGhlbHBlcnMgZm9yIHJ1bm5pbmcgb3BlcmF0aW9ucyBpbiBSRVNUIGZvcm1hdC5cbi8vIFRoZSBnb2FsIGlzIHRoYXQgaGFuZGxlcnMgdGhhdCBleHBsaWNpdGx5IGhhbmRsZSBhbiBleHByZXNzIHJvdXRlXG4vLyBzaG91bGQganVzdCBiZSBzaGFsbG93IHdyYXBwZXJzIGFyb3VuZCB0aGluZ3MgaW4gdGhpcyBmaWxlLCBidXRcbi8vIHRoZXNlIGZ1bmN0aW9ucyBzaG91bGQgbm90IGV4cGxpY2l0bHkgZGVwZW5kIG9uIHRoZSByZXF1ZXN0XG4vLyBvYmplY3QuXG4vLyBUaGlzIG1lYW5zIHRoYXQgb25lIG9mIHRoZXNlIGhhbmRsZXJzIGNhbiBzdXBwb3J0IG11bHRpcGxlXG4vLyByb3V0ZXMuIFRoYXQncyB1c2VmdWwgZm9yIHRoZSByb3V0ZXMgdGhhdCBkbyByZWFsbHkgc2ltaWxhclxuLy8gdGhpbmdzLlxuXG52YXIgUGFyc2UgPSByZXF1aXJlKCdwYXJzZS9ub2RlJykuUGFyc2U7XG5cbnZhciBSZXN0UXVlcnkgPSByZXF1aXJlKCcuL1Jlc3RRdWVyeScpO1xudmFyIFJlc3RXcml0ZSA9IHJlcXVpcmUoJy4vUmVzdFdyaXRlJyk7XG52YXIgdHJpZ2dlcnMgPSByZXF1aXJlKCcuL3RyaWdnZXJzJyk7XG5cbmZ1bmN0aW9uIGNoZWNrVHJpZ2dlcnMoY2xhc3NOYW1lLCBjb25maWcsIHR5cGVzKSB7XG4gIHJldHVybiB0eXBlcy5zb21lKHRyaWdnZXJUeXBlID0+IHtcbiAgICByZXR1cm4gdHJpZ2dlcnMuZ2V0VHJpZ2dlcihjbGFzc05hbWUsIHRyaWdnZXJzLlR5cGVzW3RyaWdnZXJUeXBlXSwgY29uZmlnLmFwcGxpY2F0aW9uSWQpO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gY2hlY2tMaXZlUXVlcnkoY2xhc3NOYW1lLCBjb25maWcpIHtcbiAgcmV0dXJuIGNvbmZpZy5saXZlUXVlcnlDb250cm9sbGVyICYmIGNvbmZpZy5saXZlUXVlcnlDb250cm9sbGVyLmhhc0xpdmVRdWVyeShjbGFzc05hbWUpO1xufVxuXG4vLyBSZXR1cm5zIGEgcHJvbWlzZSBmb3IgYW4gb2JqZWN0IHdpdGggb3B0aW9uYWwga2V5cyAncmVzdWx0cycgYW5kICdjb3VudCcuXG5mdW5jdGlvbiBmaW5kKGNvbmZpZywgYXV0aCwgY2xhc3NOYW1lLCByZXN0V2hlcmUsIHJlc3RPcHRpb25zLCBjbGllbnRTREssIGNvbnRleHQpIHtcbiAgZW5mb3JjZVJvbGVTZWN1cml0eSgnZmluZCcsIGNsYXNzTmFtZSwgYXV0aCk7XG4gIHJldHVybiB0cmlnZ2Vyc1xuICAgIC5tYXliZVJ1blF1ZXJ5VHJpZ2dlcihcbiAgICAgIHRyaWdnZXJzLlR5cGVzLmJlZm9yZUZpbmQsXG4gICAgICBjbGFzc05hbWUsXG4gICAgICByZXN0V2hlcmUsXG4gICAgICByZXN0T3B0aW9ucyxcbiAgICAgIGNvbmZpZyxcbiAgICAgIGF1dGgsXG4gICAgICBjb250ZXh0XG4gICAgKVxuICAgIC50aGVuKHJlc3VsdCA9PiB7XG4gICAgICByZXN0V2hlcmUgPSByZXN1bHQucmVzdFdoZXJlIHx8IHJlc3RXaGVyZTtcbiAgICAgIHJlc3RPcHRpb25zID0gcmVzdWx0LnJlc3RPcHRpb25zIHx8IHJlc3RPcHRpb25zO1xuICAgICAgY29uc3QgcXVlcnkgPSBuZXcgUmVzdFF1ZXJ5KFxuICAgICAgICBjb25maWcsXG4gICAgICAgIGF1dGgsXG4gICAgICAgIGNsYXNzTmFtZSxcbiAgICAgICAgcmVzdFdoZXJlLFxuICAgICAgICByZXN0T3B0aW9ucyxcbiAgICAgICAgY2xpZW50U0RLLFxuICAgICAgICB0cnVlLFxuICAgICAgICBjb250ZXh0XG4gICAgICApO1xuICAgICAgcmV0dXJuIHF1ZXJ5LmV4ZWN1dGUoKTtcbiAgICB9KTtcbn1cblxuLy8gZ2V0IGlzIGp1c3QgbGlrZSBmaW5kIGJ1dCBvbmx5IHF1ZXJpZXMgYW4gb2JqZWN0SWQuXG5jb25zdCBnZXQgPSAoY29uZmlnLCBhdXRoLCBjbGFzc05hbWUsIG9iamVjdElkLCByZXN0T3B0aW9ucywgY2xpZW50U0RLLCBjb250ZXh0KSA9PiB7XG4gIHZhciByZXN0V2hlcmUgPSB7IG9iamVjdElkIH07XG4gIGVuZm9yY2VSb2xlU2VjdXJpdHkoJ2dldCcsIGNsYXNzTmFtZSwgYXV0aCk7XG4gIHJldHVybiB0cmlnZ2Vyc1xuICAgIC5tYXliZVJ1blF1ZXJ5VHJpZ2dlcihcbiAgICAgIHRyaWdnZXJzLlR5cGVzLmJlZm9yZUZpbmQsXG4gICAgICBjbGFzc05hbWUsXG4gICAgICByZXN0V2hlcmUsXG4gICAgICByZXN0T3B0aW9ucyxcbiAgICAgIGNvbmZpZyxcbiAgICAgIGF1dGgsXG4gICAgICBjb250ZXh0LFxuICAgICAgdHJ1ZVxuICAgIClcbiAgICAudGhlbihyZXN1bHQgPT4ge1xuICAgICAgcmVzdFdoZXJlID0gcmVzdWx0LnJlc3RXaGVyZSB8fCByZXN0V2hlcmU7XG4gICAgICByZXN0T3B0aW9ucyA9IHJlc3VsdC5yZXN0T3B0aW9ucyB8fCByZXN0T3B0aW9ucztcbiAgICAgIGNvbnN0IHF1ZXJ5ID0gbmV3IFJlc3RRdWVyeShcbiAgICAgICAgY29uZmlnLFxuICAgICAgICBhdXRoLFxuICAgICAgICBjbGFzc05hbWUsXG4gICAgICAgIHJlc3RXaGVyZSxcbiAgICAgICAgcmVzdE9wdGlvbnMsXG4gICAgICAgIGNsaWVudFNESyxcbiAgICAgICAgdHJ1ZSxcbiAgICAgICAgY29udGV4dFxuICAgICAgKTtcbiAgICAgIHJldHVybiBxdWVyeS5leGVjdXRlKCk7XG4gICAgfSk7XG59O1xuXG4vLyBSZXR1cm5zIGEgcHJvbWlzZSB0aGF0IGRvZXNuJ3QgcmVzb2x2ZSB0byBhbnkgdXNlZnVsIHZhbHVlLlxuZnVuY3Rpb24gZGVsKGNvbmZpZywgYXV0aCwgY2xhc3NOYW1lLCBvYmplY3RJZCwgY29udGV4dCkge1xuICBpZiAodHlwZW9mIG9iamVjdElkICE9PSAnc3RyaW5nJykge1xuICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5JTlZBTElEX0pTT04sICdiYWQgb2JqZWN0SWQnKTtcbiAgfVxuXG4gIGlmIChjbGFzc05hbWUgPT09ICdfVXNlcicgJiYgYXV0aC5pc1VuYXV0aGVudGljYXRlZCgpKSB7XG4gICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLlNFU1NJT05fTUlTU0lORywgJ0luc3VmZmljaWVudCBhdXRoIHRvIGRlbGV0ZSB1c2VyJyk7XG4gIH1cblxuICBlbmZvcmNlUm9sZVNlY3VyaXR5KCdkZWxldGUnLCBjbGFzc05hbWUsIGF1dGgpO1xuXG4gIGxldCBpbmZsYXRlZE9iamVjdDtcbiAgbGV0IHNjaGVtYUNvbnRyb2xsZXI7XG5cbiAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpXG4gICAgLnRoZW4oKCkgPT4ge1xuICAgICAgY29uc3QgaGFzVHJpZ2dlcnMgPSBjaGVja1RyaWdnZXJzKGNsYXNzTmFtZSwgY29uZmlnLCBbJ2JlZm9yZURlbGV0ZScsICdhZnRlckRlbGV0ZSddKTtcbiAgICAgIGNvbnN0IGhhc0xpdmVRdWVyeSA9IGNoZWNrTGl2ZVF1ZXJ5KGNsYXNzTmFtZSwgY29uZmlnKTtcbiAgICAgIGlmIChoYXNUcmlnZ2VycyB8fCBoYXNMaXZlUXVlcnkgfHwgY2xhc3NOYW1lID09ICdfU2Vzc2lvbicpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBSZXN0UXVlcnkoY29uZmlnLCBhdXRoLCBjbGFzc05hbWUsIHsgb2JqZWN0SWQgfSlcbiAgICAgICAgICAuZXhlY3V0ZSh7IG9wOiAnZGVsZXRlJyB9KVxuICAgICAgICAgIC50aGVuKHJlc3BvbnNlID0+IHtcbiAgICAgICAgICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS5yZXN1bHRzICYmIHJlc3BvbnNlLnJlc3VsdHMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGZpcnN0UmVzdWx0ID0gcmVzcG9uc2UucmVzdWx0c1swXTtcbiAgICAgICAgICAgICAgZmlyc3RSZXN1bHQuY2xhc3NOYW1lID0gY2xhc3NOYW1lO1xuICAgICAgICAgICAgICBpZiAoY2xhc3NOYW1lID09PSAnX1Nlc3Npb24nICYmICFhdXRoLmlzTWFzdGVyICYmICFhdXRoLmlzTWFpbnRlbmFuY2UpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWF1dGgudXNlciB8fCBmaXJzdFJlc3VsdC51c2VyLm9iamVjdElkICE9PSBhdXRoLnVzZXIuaWQpIHtcbiAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5JTlZBTElEX1NFU1NJT05fVE9LRU4sICdJbnZhbGlkIHNlc3Npb24gdG9rZW4nKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgdmFyIGNhY2hlQWRhcHRlciA9IGNvbmZpZy5jYWNoZUNvbnRyb2xsZXI7XG4gICAgICAgICAgICAgIGNhY2hlQWRhcHRlci51c2VyLmRlbChmaXJzdFJlc3VsdC5zZXNzaW9uVG9rZW4pO1xuICAgICAgICAgICAgICBpbmZsYXRlZE9iamVjdCA9IFBhcnNlLk9iamVjdC5mcm9tSlNPTihmaXJzdFJlc3VsdCk7XG4gICAgICAgICAgICAgIHJldHVybiB0cmlnZ2Vycy5tYXliZVJ1blRyaWdnZXIoXG4gICAgICAgICAgICAgICAgdHJpZ2dlcnMuVHlwZXMuYmVmb3JlRGVsZXRlLFxuICAgICAgICAgICAgICAgIGF1dGgsXG4gICAgICAgICAgICAgICAgaW5mbGF0ZWRPYmplY3QsXG4gICAgICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgICAgICBjb25maWcsXG4gICAgICAgICAgICAgICAgY29udGV4dFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLk9CSkVDVF9OT1RfRk9VTkQsICdPYmplY3Qgbm90IGZvdW5kIGZvciBkZWxldGUuJyk7XG4gICAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHt9KTtcbiAgICB9KVxuICAgIC50aGVuKCgpID0+IHtcbiAgICAgIGlmICghYXV0aC5pc01hc3RlciAmJiAhYXV0aC5pc01haW50ZW5hbmNlKSB7XG4gICAgICAgIHJldHVybiBhdXRoLmdldFVzZXJSb2xlcygpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH0pXG4gICAgLnRoZW4oKCkgPT4gY29uZmlnLmRhdGFiYXNlLmxvYWRTY2hlbWEoKSlcbiAgICAudGhlbihzID0+IHtcbiAgICAgIHNjaGVtYUNvbnRyb2xsZXIgPSBzO1xuICAgICAgY29uc3Qgb3B0aW9ucyA9IHt9O1xuICAgICAgaWYgKCFhdXRoLmlzTWFzdGVyICYmICFhdXRoLmlzTWFpbnRlbmFuY2UpIHtcbiAgICAgICAgb3B0aW9ucy5hY2wgPSBbJyonXTtcbiAgICAgICAgaWYgKGF1dGgudXNlcikge1xuICAgICAgICAgIG9wdGlvbnMuYWNsLnB1c2goYXV0aC51c2VyLmlkKTtcbiAgICAgICAgICBvcHRpb25zLmFjbCA9IG9wdGlvbnMuYWNsLmNvbmNhdChhdXRoLnVzZXJSb2xlcyk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNvbmZpZy5kYXRhYmFzZS5kZXN0cm95KFxuICAgICAgICBjbGFzc05hbWUsXG4gICAgICAgIHtcbiAgICAgICAgICBvYmplY3RJZDogb2JqZWN0SWQsXG4gICAgICAgIH0sXG4gICAgICAgIG9wdGlvbnMsXG4gICAgICAgIHNjaGVtYUNvbnRyb2xsZXJcbiAgICAgICk7XG4gICAgfSlcbiAgICAudGhlbigoKSA9PiB7XG4gICAgICAvLyBOb3RpZnkgTGl2ZVF1ZXJ5IHNlcnZlciBpZiBwb3NzaWJsZVxuICAgICAgY29uc3QgcGVybXMgPSBzY2hlbWFDb250cm9sbGVyLmdldENsYXNzTGV2ZWxQZXJtaXNzaW9ucyhjbGFzc05hbWUpO1xuICAgICAgY29uZmlnLmxpdmVRdWVyeUNvbnRyb2xsZXIub25BZnRlckRlbGV0ZShjbGFzc05hbWUsIGluZmxhdGVkT2JqZWN0LCBudWxsLCBwZXJtcyk7XG4gICAgICByZXR1cm4gdHJpZ2dlcnMubWF5YmVSdW5UcmlnZ2VyKFxuICAgICAgICB0cmlnZ2Vycy5UeXBlcy5hZnRlckRlbGV0ZSxcbiAgICAgICAgYXV0aCxcbiAgICAgICAgaW5mbGF0ZWRPYmplY3QsXG4gICAgICAgIG51bGwsXG4gICAgICAgIGNvbmZpZyxcbiAgICAgICAgY29udGV4dFxuICAgICAgKTtcbiAgICB9KVxuICAgIC5jYXRjaChlcnJvciA9PiB7XG4gICAgICBoYW5kbGVTZXNzaW9uTWlzc2luZ0Vycm9yKGVycm9yLCBjbGFzc05hbWUsIGF1dGgpO1xuICAgIH0pO1xufVxuXG4vLyBSZXR1cm5zIGEgcHJvbWlzZSBmb3IgYSB7cmVzcG9uc2UsIHN0YXR1cywgbG9jYXRpb259IG9iamVjdC5cbmZ1bmN0aW9uIGNyZWF0ZShjb25maWcsIGF1dGgsIGNsYXNzTmFtZSwgcmVzdE9iamVjdCwgY2xpZW50U0RLLCBjb250ZXh0KSB7XG4gIGVuZm9yY2VSb2xlU2VjdXJpdHkoJ2NyZWF0ZScsIGNsYXNzTmFtZSwgYXV0aCk7XG4gIHZhciB3cml0ZSA9IG5ldyBSZXN0V3JpdGUoY29uZmlnLCBhdXRoLCBjbGFzc05hbWUsIG51bGwsIHJlc3RPYmplY3QsIG51bGwsIGNsaWVudFNESywgY29udGV4dCk7XG4gIHJldHVybiB3cml0ZS5leGVjdXRlKCk7XG59XG5cbi8vIFJldHVybnMgYSBwcm9taXNlIHRoYXQgY29udGFpbnMgdGhlIGZpZWxkcyBvZiB0aGUgdXBkYXRlIHRoYXQgdGhlXG4vLyBSRVNUIEFQSSBpcyBzdXBwb3NlZCB0byByZXR1cm4uXG4vLyBVc3VhbGx5LCB0aGlzIGlzIGp1c3QgdXBkYXRlZEF0LlxuZnVuY3Rpb24gdXBkYXRlKGNvbmZpZywgYXV0aCwgY2xhc3NOYW1lLCByZXN0V2hlcmUsIHJlc3RPYmplY3QsIGNsaWVudFNESywgY29udGV4dCkge1xuICBlbmZvcmNlUm9sZVNlY3VyaXR5KCd1cGRhdGUnLCBjbGFzc05hbWUsIGF1dGgpO1xuXG4gIHJldHVybiBQcm9taXNlLnJlc29sdmUoKVxuICAgIC50aGVuKCgpID0+IHtcbiAgICAgIGNvbnN0IGhhc1RyaWdnZXJzID0gY2hlY2tUcmlnZ2VycyhjbGFzc05hbWUsIGNvbmZpZywgWydiZWZvcmVTYXZlJywgJ2FmdGVyU2F2ZSddKTtcbiAgICAgIGNvbnN0IGhhc0xpdmVRdWVyeSA9IGNoZWNrTGl2ZVF1ZXJ5KGNsYXNzTmFtZSwgY29uZmlnKTtcbiAgICAgIGlmIChoYXNUcmlnZ2VycyB8fCBoYXNMaXZlUXVlcnkpIHtcbiAgICAgICAgLy8gRG8gbm90IHVzZSBmaW5kLCBhcyBpdCBydW5zIHRoZSBiZWZvcmUgZmluZHNcbiAgICAgICAgcmV0dXJuIG5ldyBSZXN0UXVlcnkoXG4gICAgICAgICAgY29uZmlnLFxuICAgICAgICAgIGF1dGgsXG4gICAgICAgICAgY2xhc3NOYW1lLFxuICAgICAgICAgIHJlc3RXaGVyZSxcbiAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgIGNvbnRleHRcbiAgICAgICAgKS5leGVjdXRlKHtcbiAgICAgICAgICBvcDogJ3VwZGF0ZScsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7fSk7XG4gICAgfSlcbiAgICAudGhlbigoeyByZXN1bHRzIH0pID0+IHtcbiAgICAgIHZhciBvcmlnaW5hbFJlc3RPYmplY3Q7XG4gICAgICBpZiAocmVzdWx0cyAmJiByZXN1bHRzLmxlbmd0aCkge1xuICAgICAgICBvcmlnaW5hbFJlc3RPYmplY3QgPSByZXN1bHRzWzBdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG5ldyBSZXN0V3JpdGUoXG4gICAgICAgIGNvbmZpZyxcbiAgICAgICAgYXV0aCxcbiAgICAgICAgY2xhc3NOYW1lLFxuICAgICAgICByZXN0V2hlcmUsXG4gICAgICAgIHJlc3RPYmplY3QsXG4gICAgICAgIG9yaWdpbmFsUmVzdE9iamVjdCxcbiAgICAgICAgY2xpZW50U0RLLFxuICAgICAgICBjb250ZXh0LFxuICAgICAgICAndXBkYXRlJ1xuICAgICAgKS5leGVjdXRlKCk7XG4gICAgfSlcbiAgICAuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgaGFuZGxlU2Vzc2lvbk1pc3NpbmdFcnJvcihlcnJvciwgY2xhc3NOYW1lLCBhdXRoKTtcbiAgICB9KTtcbn1cblxuZnVuY3Rpb24gaGFuZGxlU2Vzc2lvbk1pc3NpbmdFcnJvcihlcnJvciwgY2xhc3NOYW1lLCBhdXRoKSB7XG4gIC8vIElmIHdlJ3JlIHRyeWluZyB0byB1cGRhdGUgYSB1c2VyIHdpdGhvdXQgLyB3aXRoIGJhZCBzZXNzaW9uIHRva2VuXG4gIGlmIChcbiAgICBjbGFzc05hbWUgPT09ICdfVXNlcicgJiZcbiAgICBlcnJvci5jb2RlID09PSBQYXJzZS5FcnJvci5PQkpFQ1RfTk9UX0ZPVU5EICYmXG4gICAgIWF1dGguaXNNYXN0ZXIgJiZcbiAgICAhYXV0aC5pc01haW50ZW5hbmNlXG4gICkge1xuICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5TRVNTSU9OX01JU1NJTkcsICdJbnN1ZmZpY2llbnQgYXV0aC4nKTtcbiAgfVxuICB0aHJvdyBlcnJvcjtcbn1cblxuY29uc3QgY2xhc3Nlc1dpdGhNYXN0ZXJPbmx5QWNjZXNzID0gW1xuICAnX0pvYlN0YXR1cycsXG4gICdfUHVzaFN0YXR1cycsXG4gICdfSG9va3MnLFxuICAnX0dsb2JhbENvbmZpZycsXG4gICdfSm9iU2NoZWR1bGUnLFxuICAnX0lkZW1wb3RlbmN5Jyxcbl07XG4vLyBEaXNhbGxvd2luZyBhY2Nlc3MgdG8gdGhlIF9Sb2xlIGNvbGxlY3Rpb24gZXhjZXB0IGJ5IG1hc3RlciBrZXlcbmZ1bmN0aW9uIGVuZm9yY2VSb2xlU2VjdXJpdHkobWV0aG9kLCBjbGFzc05hbWUsIGF1dGgpIHtcbiAgaWYgKGNsYXNzTmFtZSA9PT0gJ19JbnN0YWxsYXRpb24nICYmICFhdXRoLmlzTWFzdGVyICYmICFhdXRoLmlzTWFpbnRlbmFuY2UpIHtcbiAgICBpZiAobWV0aG9kID09PSAnZGVsZXRlJyB8fCBtZXRob2QgPT09ICdmaW5kJykge1xuICAgICAgY29uc3QgZXJyb3IgPSBgQ2xpZW50cyBhcmVuJ3QgYWxsb3dlZCB0byBwZXJmb3JtIHRoZSAke21ldGhvZH0gb3BlcmF0aW9uIG9uIHRoZSBpbnN0YWxsYXRpb24gY29sbGVjdGlvbi5gO1xuICAgICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLk9QRVJBVElPTl9GT1JCSURERU4sIGVycm9yKTtcbiAgICB9XG4gIH1cblxuICAvL2FsbCB2b2xhdGlsZUNsYXNzZXMgYXJlIG1hc3RlcktleSBvbmx5XG4gIGlmIChcbiAgICBjbGFzc2VzV2l0aE1hc3Rlck9ubHlBY2Nlc3MuaW5kZXhPZihjbGFzc05hbWUpID49IDAgJiZcbiAgICAhYXV0aC5pc01hc3RlciAmJlxuICAgICFhdXRoLmlzTWFpbnRlbmFuY2VcbiAgKSB7XG4gICAgY29uc3QgZXJyb3IgPSBgQ2xpZW50cyBhcmVuJ3QgYWxsb3dlZCB0byBwZXJmb3JtIHRoZSAke21ldGhvZH0gb3BlcmF0aW9uIG9uIHRoZSAke2NsYXNzTmFtZX0gY29sbGVjdGlvbi5gO1xuICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5PUEVSQVRJT05fRk9SQklEREVOLCBlcnJvcik7XG4gIH1cblxuICAvLyByZWFkT25seSBtYXN0ZXJLZXkgaXMgbm90IGFsbG93ZWRcbiAgaWYgKGF1dGguaXNSZWFkT25seSAmJiAobWV0aG9kID09PSAnZGVsZXRlJyB8fCBtZXRob2QgPT09ICdjcmVhdGUnIHx8IG1ldGhvZCA9PT0gJ3VwZGF0ZScpKSB7XG4gICAgY29uc3QgZXJyb3IgPSBgcmVhZC1vbmx5IG1hc3RlcktleSBpc24ndCBhbGxvd2VkIHRvIHBlcmZvcm0gdGhlICR7bWV0aG9kfSBvcGVyYXRpb24uYDtcbiAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuT1BFUkFUSU9OX0ZPUkJJRERFTiwgZXJyb3IpO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBjcmVhdGUsXG4gIGRlbCxcbiAgZmluZCxcbiAgZ2V0LFxuICB1cGRhdGUsXG59O1xuIl0sIm1hcHBpbmdzIjoiOztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsSUFBSUEsS0FBSyxHQUFHQyxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUNELEtBQUs7QUFFdkMsSUFBSUUsU0FBUyxHQUFHRCxPQUFPLENBQUMsYUFBYSxDQUFDO0FBQ3RDLElBQUlFLFNBQVMsR0FBR0YsT0FBTyxDQUFDLGFBQWEsQ0FBQztBQUN0QyxJQUFJRyxRQUFRLEdBQUdILE9BQU8sQ0FBQyxZQUFZLENBQUM7QUFFcEMsU0FBU0ksYUFBYSxDQUFDQyxTQUFTLEVBQUVDLE1BQU0sRUFBRUMsS0FBSyxFQUFFO0VBQy9DLE9BQU9BLEtBQUssQ0FBQ0MsSUFBSSxDQUFDQyxXQUFXLElBQUk7SUFDL0IsT0FBT04sUUFBUSxDQUFDTyxVQUFVLENBQUNMLFNBQVMsRUFBRUYsUUFBUSxDQUFDUSxLQUFLLENBQUNGLFdBQVcsQ0FBQyxFQUFFSCxNQUFNLENBQUNNLGFBQWEsQ0FBQztFQUMxRixDQUFDLENBQUM7QUFDSjtBQUVBLFNBQVNDLGNBQWMs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
192
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJQYXJzZSIsInJlcXVpcmUiLCJSZXN0UXVlcnkiLCJSZXN0V3JpdGUiLCJ0cmlnZ2VycyIsImVuZm9yY2VSb2xlU2VjdXJpdHkiLCJjaGVja1RyaWdnZXJzIiwiY2xhc3NOYW1lIiwiY29uZmlnIiwidHlwZXMiLCJzb21lIiwidHJpZ2dlclR5cGUiLCJnZXRUcmlnZ2VyIiwiVHlwZXMiLCJhcHBsaWNhdGlvbklkIiwiY2hlY2tMaXZlUXVlcnkiLCJsaXZlUXVlcnlDb250cm9sbGVyIiwiaGFzTGl2ZVF1ZXJ5IiwiZmluZCIsImF1dGgiLCJyZXN0V2hlcmUiLCJyZXN0T3B0aW9ucyIsImNsaWVudFNESyIsImNvbnRleHQiLCJxdWVyeSIsIm1ldGhvZCIsIk1ldGhvZCIsImV4ZWN1dGUiLCJnZXQiLCJvYmplY3RJZCIsImRlbCIsIkVycm9yIiwiSU5WQUxJRF9KU09OIiwiaXNVbmF1dGhlbnRpY2F0ZWQiLCJTRVNTSU9OX01JU1NJTkciLCJpbmZsYXRlZE9iamVjdCIsInNjaGVtYUNvbnRyb2xsZXIiLCJQcm9taXNlIiwicmVzb2x2ZSIsInRoZW4iLCJoYXNUcmlnZ2VycyIsIm9wIiwicmVzcG9uc2UiLCJyZXN1bHRzIiwibGVuZ3RoIiwiZmlyc3RSZXN1bHQiLCJpc01hc3RlciIsImlzTWFpbnRlbmFuY2UiLCJ1c2VyIiwiaWQiLCJJTlZBTElEX1NFU1NJT05fVE9LRU4iLCJjYWNoZUFkYXB0ZXIiLCJjYWNoZUNvbnRyb2xsZXIiLCJzZXNzaW9uVG9rZW4iLCJPYmplY3QiLCJmcm9tSlNPTiIsIm1heWJlUnVuVHJpZ2dlciIsImJlZm9yZURlbGV0ZSIsIk9CSkVDVF9OT1RfRk9VTkQiLCJnZXRVc2VyUm9sZXMiLCJkYXRhYmFzZSIsImxvYWRTY2hlbWEiLCJzIiwib3B0aW9ucyIsImFjbCIsInB1c2giLCJjb25jYXQiLCJ1c2VyUm9sZXMiLCJkZXN0cm95IiwicGVybXMiLCJnZXRDbGFzc0xldmVsUGVybWlzc2lvbnMiLCJvbkFmdGVyRGVsZXRlIiwiYWZ0ZXJEZWxldGUiLCJjYXRjaCIsImVycm9yIiwiaGFuZGxlU2Vzc2lvbk1pc3NpbmdFcnJvciIsImNyZWF0ZSIsInJlc3RPYmplY3QiLCJ3cml0ZSIsInVwZGF0ZSIsInJ1bkFmdGVyRmluZCIsInJ1bkJlZm9yZUZpbmQiLCJvcmlnaW5hbFJlc3RPYmplY3QiLCJjb2RlIiwibW9kdWxlIiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uL3NyYy9yZXN0LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFRoaXMgZmlsZSBjb250YWlucyBoZWxwZXJzIGZvciBydW5uaW5nIG9wZXJhdGlvbnMgaW4gUkVTVCBmb3JtYXQuXG4vLyBUaGUgZ29hbCBpcyB0aGF0IGhhbmRsZXJzIHRoYXQgZXhwbGljaXRseSBoYW5kbGUgYW4gZXhwcmVzcyByb3V0ZVxuLy8gc2hvdWxkIGp1c3QgYmUgc2hhbGxvdyB3cmFwcGVycyBhcm91bmQgdGhpbmdzIGluIHRoaXMgZmlsZSwgYnV0XG4vLyB0aGVzZSBmdW5jdGlvbnMgc2hvdWxkIG5vdCBleHBsaWNpdGx5IGRlcGVuZCBvbiB0aGUgcmVxdWVzdFxuLy8gb2JqZWN0LlxuLy8gVGhpcyBtZWFucyB0aGF0IG9uZSBvZiB0aGVzZSBoYW5kbGVycyBjYW4gc3VwcG9ydCBtdWx0aXBsZVxuLy8gcm91dGVzLiBUaGF0J3MgdXNlZnVsIGZvciB0aGUgcm91dGVzIHRoYXQgZG8gcmVhbGx5IHNpbWlsYXJcbi8vIHRoaW5ncy5cblxudmFyIFBhcnNlID0gcmVxdWlyZSgncGFyc2Uvbm9kZScpLlBhcnNlO1xuXG52YXIgUmVzdFF1ZXJ5ID0gcmVxdWlyZSgnLi9SZXN0UXVlcnknKTtcbnZhciBSZXN0V3JpdGUgPSByZXF1aXJlKCcuL1Jlc3RXcml0ZScpO1xudmFyIHRyaWdnZXJzID0gcmVxdWlyZSgnLi90cmlnZ2VycycpO1xuY29uc3QgeyBlbmZvcmNlUm9sZVNlY3VyaXR5IH0gPSByZXF1aXJlKCcuL1NoYXJlZFJlc3QnKTtcblxuZnVuY3Rpb24gY2hlY2tUcmlnZ2VycyhjbGFzc05hbWUsIGNvbmZpZywgdHlwZXMpIHtcbiAgcmV0dXJuIHR5cGVzLnNvbWUodHJpZ2dlclR5cGUgPT4ge1xuICAgIHJldHVybiB0cmlnZ2Vycy5nZXRUcmlnZ2VyKGNsYXNzTmFtZSwgdHJpZ2dlcnMuVHlwZXNbdHJpZ2dlclR5cGVdLCBjb25maWcuYXBwbGljYXRpb25JZCk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBjaGVja0xpdmVRdWVyeShjbGFzc05hbWUsIGNvbmZpZykge1xuICByZXR1cm4gY29uZmlnLmxpdmVRdWVyeUNvbnRyb2xsZXIgJiYgY29uZmlnLmxpdmVRdWVyeUNvbnRyb2xsZXIuaGFzTGl2ZVF1ZXJ5KGNsYXNzTmFtZSk7XG59XG5cbi8vIFJldHVybnMgYSBwcm9taXNlIGZvciBhbiBvYmplY3Qgd2l0aCBvcHRpb25hbCBrZXlzICdyZXN1bHRzJyBhbmQgJ2NvdW50Jy5cbmNvbnN0IGZpbmQgPSBhc3luYyAoY29uZmlnLCBhdXRoLCBjbGFzc05hbWUsIHJlc3RXaGVyZSwgcmVzdE9wdGlvbnMsIGNsaWVudFNESywgY29udGV4dCkgPT4ge1xuICBjb25zdCBxdWVyeSA9IGF3YWl0IFJlc3RRdWVyeSh7XG4gICAgbWV0aG9kOiBSZXN0UXVlcnkuTWV0aG9kLmZpbmQsXG4gICAgY29uZmlnLFxuICAgIGF1dGgsXG4gICAgY2xhc3NOYW1lLFxuICAgIHJlc3RXaGVyZSxcbiAgICByZXN0T3B0aW9ucyxcbiAgICBjbGllbnRTREssXG4gICAgY29udGV4dCxcbiAgfSk7XG4gIHJldHVybiBxdWVyeS5leGVjdXRlKCk7XG59O1xuXG4vLyBnZXQgaXMganVzdCBsaWtlIGZpbmQgYnV0IG9ubHkgcXVlcmllcyBhbiBvYmplY3RJZC5cbmNvbnN0IGdldCA9IGFzeW5jIChjb25maWcsIGF1dGgsIGNsYXNzTmFtZSwgb2JqZWN0SWQsIHJlc3RPcHRpb25zLCBjbGllbnRTREssIGNvbnRleHQpID0+IHtcbiAgdmFyIHJlc3RXaGVyZSA9IHsgb2JqZWN0SWQgfTtcbiAgY29uc3QgcXVlcnkgPSBhd2FpdCBSZXN0UXVlcnkoe1xuICAgIG1ldGhvZDogUmVzdFF1ZXJ5Lk1ldGhvZC5nZXQsXG4gICAgY29uZmlnLFxuICAgIGF1dGgsXG4gICAgY2xhc3NOYW1lLFxuICAgIHJlc3RXaGVyZSxcbiAgICByZXN0T3B0aW9ucyxcbiAgICBjbGllbnRTREssXG4gICAgY29udGV4dCxcbiAgfSk7XG4gIHJldHVybiBxdWVyeS5leGVjdXRlKCk7XG59O1xuXG4vLyBSZXR1cm5zIGEgcHJvbWlzZSB0aGF0IGRvZXNuJ3QgcmVzb2x2ZSB0byBhbnkgdXNlZnVsIHZhbHVlLlxuZnVuY3Rpb24gZGVsKGNvbmZpZywgYXV0aCwgY2xhc3NOYW1lLCBvYmplY3RJZCwgY29udGV4dCkge1xuICBpZiAodHlwZW9mIG9iamVjdElkICE9PSAnc3RyaW5nJykge1xuICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5JTlZBTElEX0pTT04sICdiYWQgb2JqZWN0SWQnKTtcbiAgfVxuXG4gIGlmIChjbGFzc05hbWUgPT09ICdfVXNlcicgJiYgYXV0aC5pc1VuYXV0aGVudGljYXRlZCgpKSB7XG4gICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLlNFU1NJT05fTUlTU0lORywgJ0luc3VmZmljaWVudCBhdXRoIHRvIGRlbGV0ZSB1c2VyJyk7XG4gIH1cblxuICBlbmZvcmNlUm9sZVNlY3VyaXR5KCdkZWxldGUnLCBjbGFzc05hbWUsIGF1dGgpO1xuXG4gIGxldCBpbmZsYXRlZE9iamVjdDtcbiAgbGV0IHNjaGVtYUNvbnRyb2xsZXI7XG5cbiAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpXG4gICAgLnRoZW4oYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgaGFzVHJpZ2dlcnMgPSBjaGVja1RyaWdnZXJzKGNsYXNzTmFtZSwgY29uZmlnLCBbJ2JlZm9yZURlbGV0ZScsICdhZnRlckRlbGV0ZSddKTtcbiAgICAgIGNvbnN0IGhhc0xpdmVRdWVyeSA9IGNoZWNrTGl2ZVF1ZXJ5KGNsYXNzTmFtZSwgY29uZmlnKTtcbiAgICAgIGlmIChoYXNUcmlnZ2VycyB8fCBoYXNMaXZlUXVlcnkgfHwgY2xhc3NOYW1lID09ICdfU2Vzc2lvbicpIHtcbiAgICAgICAgY29uc3QgcXVlcnkgPSBhd2FpdCBSZXN0UXVlcnkoe1xuICAgICAgICAgIG1ldGhvZDogUmVzdFF1ZXJ5Lk1ldGhvZC5nZXQsXG4gICAgICAgICAgY29uZmlnLFxuICAgICAgICAgIGF1dGgsXG4gICAgICAgICAgY2xhc3NOYW1lLFxuICAgICAgICAgIHJlc3RXaGVyZTogeyBvYmplY3RJZCB9LFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHF1ZXJ5LmV4ZWN1dGUoeyBvcDogJ2RlbGV0ZScgfSkudGhlbihyZXNwb25zZSA9PiB7XG4gICAgICAgICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLnJlc3VsdHMgJiYgcmVzcG9uc2UucmVzdWx0cy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbnN0IGZpcnN0UmVzdWx0ID0gcmVzcG9uc2UucmVzdWx0c1swXTtcbiAgICAgICAgICAgIGZpcnN0UmVzdWx0LmNsYXNzTmFtZSA9IGNsYXNzTmFtZTtcbiAgICAgICAgICAgIGlmIChjbGFzc05hbWUgPT09ICdfU2Vzc2lvbicgJiYgIWF1dGguaXNNYXN0ZXIgJiYgIWF1dGguaXNNYWludGVuYW5jZSkge1xuICAgICAgICAgICAgICBpZiAoIWF1dGgudXNlciB8fCBmaXJzdFJlc3VsdC51c2VyLm9iamVjdElkICE9PSBhdXRoLnVzZXIuaWQpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuSU5WQUxJRF9TRVNTSU9OX1RPS0VOLCAnSW52YWxpZCBzZXNzaW9uIHRva2VuJyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBjYWNoZUFkYXB0ZXIgPSBjb25maWcuY2FjaGVDb250cm9sbGVyO1xuICAgICAgICAgICAgY2FjaGVBZGFwdGVyLnVzZXIuZGVsKGZpcnN0UmVzdWx0LnNlc3Npb25Ub2tlbik7XG4gICAgICAgICAgICBpbmZsYXRlZE9iamVjdCA9IFBhcnNlLk9iamVjdC5mcm9tSlNPTihmaXJzdFJlc3VsdCk7XG4gICAgICAgICAgICByZXR1cm4gdHJpZ2dlcnMubWF5YmVSdW5UcmlnZ2VyKFxuICAgICAgICAgICAgICB0cmlnZ2Vycy5UeXBlcy5iZWZvcmVEZWxldGUsXG4gICAgICAgICAgICAgIGF1dGgsXG4gICAgICAgICAgICAgIGluZmxhdGVkT2JqZWN0LFxuICAgICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgICBjb25maWcsXG4gICAgICAgICAgICAgIGNvbnRleHRcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5PQkpFQ1RfTk9UX0ZPVU5ELCAnT2JqZWN0IG5vdCBmb3VuZCBmb3IgZGVsZXRlLicpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoe30pO1xuICAgIH0pXG4gICAgLnRoZW4oKCkgPT4ge1xuICAgICAgaWYgKCFhdXRoLmlzTWFzdGVyICYmICFhdXRoLmlzTWFpbnRlbmFuY2UpIHtcbiAgICAgICAgcmV0dXJuIGF1dGguZ2V0VXNlclJvbGVzKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfSlcbiAgICAudGhlbigoKSA9PiBjb25maWcuZGF0YWJhc2UubG9hZFNjaGVtYSgpKVxuICAgIC50aGVuKHMgPT4ge1xuICAgICAgc2NoZW1hQ29udHJvbGxlciA9IHM7XG4gICAgICBjb25zdCBvcHRpb25zID0ge307XG4gICAgICBpZiAoIWF1dGguaXNNYXN0ZXIgJiYgIWF1dGguaXNNYWludGVuYW5jZSkge1xuICAgICAgICBvcHRpb25zLmFjbCA9IFsnKiddO1xuICAgICAgICBpZiAoYXV0aC51c2VyKSB7XG4gICAgICAgICAgb3B0aW9ucy5hY2wucHVzaChhdXRoLnVzZXIuaWQpO1xuICAgICAgICAgIG9wdGlvbnMuYWNsID0gb3B0aW9ucy5hY2wuY29uY2F0KGF1dGgudXNlclJvbGVzKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29uZmlnLmRhdGFiYXNlLmRlc3Ryb3koXG4gICAgICAgIGNsYXNzTmFtZSxcbiAgICAgICAge1xuICAgICAgICAgIG9iamVjdElkOiBvYmplY3RJZCxcbiAgICAgICAgfSxcbiAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgc2NoZW1hQ29udHJvbGxlclxuICAgICAgKTtcbiAgICB9KVxuICAgIC50aGVuKCgpID0+IHtcbiAgICAgIC8vIE5vdGlmeSBMaXZlUXVlcnkgc2VydmVyIGlmIHBvc3NpYmxlXG4gICAgICBjb25zdCBwZXJtcyA9IHNjaGVtYUNvbnRyb2xsZXIuZ2V0Q2xhc3NMZXZlbFBlcm1pc3Npb25zKGNsYXNzTmFtZSk7XG4gICAgICBjb25maWcubGl2ZVF1ZXJ5Q29udHJvbGxlci5vbkFmdGVyRGVsZXRlKGNsYXNzTmFtZSwgaW5mbGF0ZWRPYmplY3QsIG51bGwsIHBlcm1zKTtcbiAgICAgIHJldHVybiB0cmlnZ2Vycy5tYXliZVJ1blRyaWdnZXIoXG4gICAgICAgIHRyaWdnZXJzLlR5cGVzLmFmdGVyRGVsZXRlLFxuICAgICAgICBhdXRoLFxuICAgICAgICBpbmZsYXRlZE9iamVjdCxcbiAgICAgICAgbnVsbCxcbiAgICAgICAgY29uZmlnLFxuICAgICAgICBjb250ZXh0XG4gICAgICApO1xuICAgIH0pXG4gICAgLmNhdGNoKGVycm9yID0+IHtcbiAgICAgIGhhbmRsZVNlc3Npb25NaXNzaW5nRXJyb3IoZXJyb3IsIGNsYXNzTmFtZSwgYXV0aCk7XG4gICAgfSk7XG59XG5cbi8vIFJldHVybnMgYSBwcm9taXNlIGZvciBhIHtyZXNwb25zZSwgc3RhdHVzLCBsb2NhdGlvbn0gb2JqZWN0LlxuZnVuY3Rpb24gY3JlYXRlKGNvbmZpZywgYXV0aCwgY2xhc3NOYW1lLCByZXN0T2JqZWN0LCBjbGllbnRTREssIGNvbnRleHQpIHtcbiAgZW5mb3JjZVJvbGVTZWN1cml0eSgnY3JlYXRlJywgY2xhc3NOYW1lLCBhdXRoKTtcbiAgdmFyIHdyaXRlID0gbmV3IFJlc3RXcml0ZShjb25maWcsIGF1dGgsIGNsYXNzTmFtZSwgbnVsbCwgcmVzdE9iamVjdCwgbnVsbCwgY2xpZW50U0RLLCBjb250ZXh0KTtcbiAgcmV0dXJuIHdyaXRlLmV4ZWN1dGUoKTtcbn1cblxuLy8gUmV0dXJucyBhIHByb21pc2UgdGhhdCBjb250YWlucyB0aGUgZmllbGRzIG9mIHRoZSB1cGRhdGUgdGhhdCB0aGVcbi8vIFJFU1QgQVBJIGlzIHN1cHBvc2VkIHRvIHJldHVybi5cbi8vIFVzdWFsbHksIHRoaXMgaXMganVzdCB1cGRhdGVkQXQuXG5mdW5jdGlvbiB1cGRhdGUoY29uZmlnLCBhdXRoLCBjbGFzc05hbWUsIHJlc3RXaGVyZSwgcmVzdE9iamVjdCwgY2xpZW50U0RLLCBjb250ZXh0KSB7XG4gIGVuZm9yY2VSb2xlU2VjdXJpdHkoJ3VwZGF0ZScsIGNsYXNzTmFtZSwgYXV0aCk7XG5cbiAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpXG4gICAgLnRoZW4oYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgaGFzVHJpZ2dlcnMgPSBjaGVja1RyaWdnZXJzKGNsYXNzTmFtZSwgY29uZmlnLCBbJ2JlZm9yZVNhdmUnLCAnYWZ0ZXJTYXZlJ10pO1xuICAgICAgY29uc3QgaGFzTGl2ZVF1ZXJ5ID0gY2hlY2tMaXZlUXVlcnkoY2xhc3NOYW1lLCBjb25maWcpO1xuICAgICAgaWYgKGhhc1RyaWdnZXJzIHx8IGhhc0xpdmVRdWVyeSkge1xuICAgICAgICAvLyBEbyBub3QgdXNlIGZpbmQsIGFzIGl0IHJ1bnMgdGhlIGJlZm9yZSBmaW5kc1xuICAgICAgICBjb25zdCBxdWVyeSA9IGF3YWl0IFJlc3RRdWVyeSh7XG4gICAgICAgICAgbWV0aG9kOiBSZXN0UXVlcnkuTWV0aG9kLmdldCxcbiAgICAgICAgICBjb25maWcsXG4gICAgICAgICAgYXV0aCxcbiAgICAgICAgICBjbGFzc05hbWUsXG4gICAgICAgICAgcmVzdFdoZXJlLFxuICAgICAgICAgIHJ1bkFmdGVyRmluZDogZmFsc2UsXG4gICAgICAgICAgcnVuQmVmb3JlRmluZDogZmFsc2UsXG4gICAgICAgICAgY29udGV4dCxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBxdWVyeS5leGVjdXRlKHtcbiAgICAgICAgICBvcDogJ3VwZGF0ZScsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7fSk7XG4gICAgfSlcbiAgICAudGhlbigoeyByZXN1bHRzIH0pID0+IHtcbiAgICAgIHZhciBvcmlnaW5hbFJlc3RPYmplY3Q7XG4gICAgICBpZiAocmVzdWx0cyAmJiByZXN1bHRzLmxlbmd0aCkge1xuICAgICAgICBvcmlnaW5hbFJlc3RPYmplY3QgPSByZXN1bHRzWzBdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG5ldyBSZXN0V3JpdGUoXG4gICAgICAgIGNvbmZpZyxcbiAgICAgICAgYXV0aCxcbiAgICAgICAgY2xhc3NOYW1lLFxuICAgICAgICByZXN0V2hlcmUsXG4gICAgICAgIHJlc3RPYmplY3QsXG4gICAgICAgIG9yaWdpbmFsUmVzdE9iamVjdCxcbiAgICAgICAgY2xpZW50U0RLLFxuICAgICAgICBjb250ZXh0LFxuICAgICAgICAndXBkYXRlJ1xuICAgICAgKS5leGVjdXRlKCk7XG4gICAgfSlcbiAgICAuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgaGFuZGxlU2Vzc2lvbk1pc3NpbmdFcnJvcihlcnJvciwgY2xhc3NOYW1lLCBhdXRoKTtcbiAgICB9KTtcbn1cblxuZnVuY3Rpb24gaGFuZGxlU2Vzc2lvbk1pc3NpbmdFcnJvcihlcnJvciwgY2xhc3NOYW1lLCBhdXRoKSB7XG4gIC8vIElmIHdlJ3JlIHRyeWluZyB0byB1cGRhdGUgYSB1c2VyIHdpdGhvdXQgLyB3aXRoIGJhZCBzZXNzaW9uIHRva2VuXG4gIGlmIChcbiAgICBjbGFzc05hbWUgPT09ICdfVXNlcicgJiZcbiAgICBlcnJvci5jb2RlID09PSBQYXJzZS5FcnJvci5PQkpFQ1RfTk9UX0ZPVU5EICYmXG4gICAgIWF1dGguaXNNYXN0ZXIgJiZcbiAgICAhYXV0aC5pc01haW50ZW5hbmNlXG4gICkge1xuICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5TRVNTSU9OX01JU1NJTkcsICdJbnN1ZmZpY2llbnQgYXV0aC4nKTtcbiAgfVxuICB0aHJvdyBlcnJvcjtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGNyZWF0ZSxcbiAgZGVsLFxuICBmaW5kLFxuICBnZXQsXG4gIHVwZGF0ZSxcbn07XG4iXSwibWFwcGluZ3MiOiI7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxJQUFJQSxLQUFLLEdBQUdDLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQ0QsS0FBSztBQUV2QyxJQUFJRSxTQUFTLEdBQUdELE9BQU8sQ0FBQyxhQUFhLENBQUM7QUFDdEMsSUFBSUUsU0FBUyxHQUFHRixPQUFPLENBQUMsYUFBYSxDQUFDO0FBQ3RDLElBQUlHLFFBQVEsR0FBR0gsT0FBTyxDQUFDLFlBQVksQ0FBQztBQUNwQyxNQUFNO0VBQUVJO0FBQW9CLENBQUMsR0FBR0osT0FBTyxDQUFDLGNBQWMsQ0FBQztBQUV2RCxTQUFTSyxhQUFhLENBQUNDLFNBQVMsRUFBRUMsTUFBTSxFQUFFQyxLQUFLLEVBQUU7RUFDL0MsT0FBT0EsS0FBSyxDQUFDQyxJQUFJLENBQUNDLFdBQVcsSUFBSTtJQUMvQixPQUFPUCxRQUFRLENBQUNRLFVBQVUsQ0FBQ0wsU0FBUyxFQUFFSCxRQUFRLENBQUNTLEtBQUssQ0FBQ0YsV0FBVyxDQUFDLEVBQUVILE1BQU0sQ0FBQ00sYUFBYSxDQUFDO0VBQzFGLENBQUMsQ0FBQztBQUNKO0FBRUEsU0FBU0MsY0FBYyxDQUFDUixTQUFTLEVBQUVDLE1BQU0sRUFBRTtFQUN6QyxPQUFPQSxNQUFNLENBQUNRLG1CQUFtQixJQUFJUixNQUFNLENBQUNRLG1CQUFtQixDQUFDQyxZQUFZLENBQUNWLFNBQVMsQ0FBQztBQUN6Rjs7QUFFQTtBQUNBLE1BQU1XLElBQUksR0FBRyxPQUFPVixNQUFNLEVBQUVXLElBQUksRUFBRVosU0FBUyxFQUFFYSxTQUFTLEVBQUVDLFdBQVcsRUFBRUMsU0FBUyxFQUFFQyxPQUFPLEtBQUs7RUFDMUYsTUFBTUMsS0FBSyxHQUFHLE1BQU10QixTQUFTLENBQUM7SUFDNUJ1QixNQUFNLEVBQUV2QixTQUFTLENBQUN3QixNQUFNLENBQUNSLElBQUk7SUFDN0JWLE1BQU07SUFDTlcsSUFBSTtJQUNKWixTQUFTO0lBQ1RhLFNBQVM7SUFDVEMsV0FBVztJQUNYQyxTQUFTO0lBQ1RDO0VBQ0YsQ0FBQyxDQUFDO0VBQ0YsT0FBT0MsS0FBSyxDQUFDRyxPQUFPLEVBQUU7QUFDeEIsQ0FBQzs7QUFFRDtBQUNBLE1BQU1DLEdBQUcsR0FBRyxPQUFPcEIsTUFBTSxFQUFFVyxJQUFJLEVBQUVaLFNBQVMsRUFBRXNCLFFBQVEsRUFBRVIsV0FBVyxFQUFFQyxTQUFTLEVBQUVDLE9BQU8sS0FBSztFQUN4RixJQUFJSCxTQUFTLEdBQUc7SUFBRVM7RUFBUyxDQUFDO0VBQzVCLE1BQU1MLEtBQUssR0FBRyxNQUFNdEIsU0FBUyxDQUFDO0lBQzVCdUIsTUFBTSxFQUFFdkIsU0FBUyxDQUFDd0IsTUFBTSxDQUFDRSxHQUFHO0lBQzVCcEIsTUFBTTtJQUNOVyxJQUFJO0lBQ0paLFNBQVM7SUFDVGEsU0FBUztJQUNUQyxXQUFXO0lBQ1hDLFNBQVM7SUFDVEM7RUFDRixDQUFDLENBQUM7RUFDRixPQUFPQyxLQUFLLENBQUNHLE9BQU8sRUFBRTtBQUN4QixDQUFDOztBQUVEO0FBQ0EsU0FBU0csR0FBRyxDQUFDdEIsTUFBTSxFQUFFVyxJQUFJLEVBQUVaLFNBQVMsRUFBRXNCLFFBQVEsRUFBRU4sT0FBTyxFQUFFO0VBQ3ZELElBQUksT0FBT00sUUFBUSxLQUFLLFFBQVEsRUFBRTtJQUNoQyxNQUFNLElBQUk3QixLQUFLLENBQUMrQixLQUFLLENBQUMvQixLQUFLLENBQUMrQixLQUFLLENBQUNDLFlBQVksRUFBRSxjQUFjLENBQUM7RUFDakU7RUFFQSxJQUFJekIsU0FBUyxLQUFLLE9BQU8sSUFBSVksSUFBSSxDQUFDYyxpQkFBaUIsRUFBRSxFQUFFO0lBQ3JELE1BQU0sSUFBSWpDLEtBQUssQ0FBQytCLEtBQUssQ0FBQy9CLEtBQUssQ0FBQytCLEtBQUssQ0FBQ0csZUFBZSxFQUFFLGtDQUFrQyxDQUFDO0VBQ3hGO0VBRUE3QixtQkFBbUIsQ0FBQyxRQUFRLEVBQUVFLFNBQVMsRUFBRVksSUFBSSxDQUFDO0VBRTlDLElBQUlnQixjQUFjO0VBQ2xCLElBQUlDLGdCQUFnQjtFQUVwQixPQUFPQyxPQUFPLENBQUNDLE9BQU8sRUFBRSxDQUNyQkMsSUFBSSxDQUFDLFlBQVk7SUFDaEIsTUFBTUMsV0FBVyxHQUFHbEMsYUFBYSxDQUFDQyxTQUFTLEVBQUVDLE1BQU0sRUFBRSxDQUFDLGNBQWMsRUFBRSxhQUFhLENBQUMsQ0FBQztJQUNyRixNQUFNUyxZQUFZLEdBQUdGLGNBQWMsQ0FBQ1IsU0FBUyxFQUFFQyxNQUFNLENBQUM7SUFDdEQsSUFBSWdDLFdBQVcsSUFBSXZCLFlBQVksSUFBSVYsU0FBUyxJQUFJLFVBQVUsRUFBRTtNQUMxRCxNQUFNaUIsS0FBSyxHQUFHLE1BQU10QixTQUFTLENBQUM7UUFDNUJ1QixNQUFNLEVBQUV2QixTQUFTLENBQUN3QixNQUFNLENBQUNFLEdBQUc7UUFDNUJwQixNQUFNO1FBQ05XLElBQUk7UUFDSlosU0FBUztRQUNUYSxTQUFTLEVBQUU7VUFBRVM7UUFBUztNQUN4QixDQUFDLENBQUM7TUFDRixPQUFPTCxLQUFLLENBQUNHLE9BQU8sQ0FBQztRQUFFYyxFQUFFLEVBQUU7TUFBUyxDQUFDLENBQUMsQ0FBQ0YsSUFBSSxDQUFDRyxRQUFRLElBQUk7UUFDdEQsSUFBSUEsUUFBUSxJQUFJQSxRQUFRLENBQUNDLE9BQU8sSUFBSUQsUUFBUSxDQUFDQyxPQUFPLENBQUNDLE1BQU0sRUFBRTtVQUMzRCxNQUFNQyxXQUFXLEdBQUdILFFBQVEsQ0FBQ0MsT0FBTyxDQUFDLENBQUMsQ0FBQztVQUN2Q0UsV0FBVyxDQUFDdEMsU0FBUyxHQUFHQSxTQUFTO1VBQ2pDLElBQUlBLFNBQVMsS0FBSyxVQUFVLElBQUksQ0FBQ1ksSUFBSSxDQUFDMkIsUUFBUSxJQUFJLENBQUMzQixJQUFJLENBQUM0QixhQUFhLEVBQUU7WUFDckUsSUFBSSxDQUFDNUIsSUFBSSxDQUFDNkIsSUFBSSxJQUFJSCxXQUFXLENBQUNHLElBQUksQ0FBQ25CLFFBQVEsS0FBS1YsSUFBSSxDQUFDNkIsSUFBSSxDQUFDQyxFQUFFLEVBQUU7Y0FDNUQsTUFBTSxJQUFJakQsS0FBSyxDQUFDK0IsS0FBSyxDQUFDL0IsS0FBSyxDQUFDK0IsS0FBSyxDQUFDbUIscUJBQXFCLEVBQUUsdUJBQXVCLENBQUM7WUFDbkY7VUFDRjtVQUNBLElBQUlDLFlBQVksR0FBRzNDLE1BQU0sQ0FBQzRDLGVBQWU7VUFDekNELFlBQVksQ0FBQ0gsSUFBSSxDQUFDbEIsR0FBRyxDQUFDZSxXQUFXLENBQUNRLFlBQVksQ0FBQztVQUMvQ2xCLGNBQWMsR0FBR25DLEtBQUssQ0FBQ3NELE1BQU0sQ0FBQ0MsUUFBUSxDQUFDVixXQUFXLENBQUM7VUFDbkQsT0FBT3pDLFFBQVEsQ0FBQ29ELGVBQWUsQ0FDN0JwRCxRQUFRLENBQUNTLEtBQUssQ0FBQzRDLFlBQVksRUFDM0J0QyxJQUFJLEVBQ0pnQixjQUFjLEVBQ2QsSUFBSSxFQUNKM0IsTUFBTSxFQUNOZSxPQUFPLENBQ1I7UUFDSDtRQUNBLE1BQU0sSUFBSXZCLEtBQUssQ0FBQytCLEtBQUssQ0FBQy9CLEtBQUssQ0FBQytCLEtBQUssQ0FBQzJCLGdCQUFnQixFQUFFLDhCQUE4QixDQUFDO01BQ3JGLENBQUMsQ0FBQztJQUNKO0lBQ0EsT0FBT3JCLE9BQU8sQ0FBQ0MsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQzVCLENBQUMsQ0FBQyxDQUNEQyxJQUFJLENBQUMsTUFBTTtJQUNWLElBQUksQ0FBQ3BCLElBQUksQ0FBQzJCLFFBQVEsSUFBSSxDQUFDM0IsSUFBSSxDQUFDNEIsYUFBYSxFQUFFO01BQ3pDLE9BQU81QixJQUFJLENBQUN3QyxZQUFZLEVBQUU7SUFDNUIsQ0FBQyxNQUFNO01BQ0w7SUFDRjtFQUNGLENBQUMsQ0FBQyxDQUNEcEIsSUFBSSxDQUFDLE1BQU0vQixNQUFNLENBQUNvRCxRQUFRLENBQUNDLFVBQVUsRUFBRSxDQUFDLENBQ3hDdEIsSUFBSSxDQUFDdUIsQ0FBQyxJQUFJO0lBQ1QxQixnQkFBZ0IsR0FBRzBCLENBQUM7SUFDcEIsTUFBTUMsT0FBTyxHQUFHLENBQUMsQ0FBQztJQUNsQixJQUFJLENBQUM1QyxJQUFJLENBQUMyQixRQUFRLElBQUksQ0FBQzNCLElBQUksQ0FBQzRCLGFBQWEsRUFBRTtNQUN6Q2dCLE9BQU8sQ0FBQ0MsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDO01BQ25CLElBQUk3QyxJQUFJLENBQUM2QixJQUFJLEVBQUU7UUFDYmUsT0FBTyxDQUFDQyxHQUFHLENBQUNDLElBQUksQ0FBQzlDLElBQUksQ0FBQzZCLElBQUksQ0FBQ0MsRUFBRSxDQUFDO1FBQzlCYyxPQUFPLENBQUNDLEdBQUcsR0FBR0QsT0FBTyxDQUFDQyxHQUFHLENBQUNFLE1BQU0sQ0FBQy9DLElBQUksQ0FBQ2dELFNBQVMsQ0FBQztNQUNsRDtJQUNGO0lBRUEsT0FBTzNELE1BQU0sQ0FBQ29ELFFBQVEsQ0FBQ1EsT0FBTyxDQUM1QjdELFNBQVMsRUFDVDtNQUNFc0IsUUFBUSxFQUFFQTtJQUNaLENBQUMsRUFDRGtDLE9BQU8sRUFDUDNCLGdCQUFnQixDQUNqQjtFQUNILENBQUMsQ0FBQyxDQUNERyxJQUFJLENBQUMsTUFBTTtJQUNWO0lBQ0EsTUFBTThCLEtBQUssR0FBR2pDLGdCQUFnQixDQUFDa0Msd0JBQXdCLENBQUMvRCxTQUFTLENBQUM7SUFDbEVDLE1BQU0sQ0FBQ1EsbUJBQW1CLENBQUN1RCxhQUFhLENBQUNoRSxTQUFTLEVBQUU0QixjQUFjLEVBQUUsSUFBSSxFQUFFa0MsS0FBSyxDQUFDO0lBQ2hGLE9BQU9qRSxRQUFRLENBQUNvRCxlQUFlLENBQzdCcEQsUUFBUSxDQUFDUyxLQUFLLENBQUMyRCxXQUFXLEVBQzFCckQsSUFBSSxFQUNKZ0IsY0FBYyxFQUNkLElBQUksRUFDSjNCLE1BQU0sRUFDTmUsT0FBTyxDQUNSO0VBQ0gsQ0FBQyxDQUFDLENBQ0RrRCxLQUFLLENBQUNDLEtBQUssSUFBSTtJQUNkQyx5QkFBeUIsQ0FBQ0QsS0FBSyxFQUFFbkUsU0FBUyxFQUFFWSxJQUFJLENBQUM7RUFDbkQsQ0FBQyxDQUFDO0FBQ047O0FBRUE7QUFDQSxTQUFTeUQsTUFBTSxDQUFDcEUsTUFBTSxFQUFFVyxJQUFJLEVBQUVaLFNBQVMsRUFBRXNFLFVBQVUsRUFBRXZELFNBQVMsRUFBRUMsT0FBTyxFQUFFO0VBQ3ZFbEIsbUJBQW1CLENBQUMsUUFBUSxFQUFFRSxTQUFTLEVBQUVZLElBQUksQ0FBQztFQUM5QyxJQUFJMkQsS0FBSyxHQUFHLElBQUkzRSxTQUFTLENBQUNLLE1BQU0sRUFBRVcsSUFBSSxFQUFFWixTQUFTLEVBQUUsSUFBSSxFQUFFc0UsVUFBVSxFQUFFLElBQUksRUFBRXZELFNBQVMsRUFBRUMsT0FBTyxDQUFDO0VBQzlGLE9BQU91RCxLQUFLLENBQUNuRCxPQUFPLEVBQUU7QUFDeEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBU29ELE1BQU0sQ0FBQ3ZFLE1BQU0sRUFBRVcsSUFBSSxFQUFFWixTQUFTLEVBQUVhLFNBQVMsRUFBRXlELFVBQVUsRUFBRXZELFNBQVMsRUFBRUMsT0FBTyxFQUFFO0VBQ2xGbEIsbUJBQW1CLENBQUMsUUFBUSxFQUFFRSxTQUFTLEVBQUVZLElBQUksQ0FBQztFQUU5QyxPQUFPa0IsT0FBTyxDQUFDQyxPQUFPLEVBQUUsQ0FDckJDLElBQUksQ0FBQyxZQUFZO0lBQ2hCLE1BQU1DLFdBQVcsR0FBR2xDLGFBQWEsQ0FBQ0MsU0FBUyxFQUFFQyxNQUFNLEVBQUUsQ0FBQyxZQUFZLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDakYsTUFBTVMsWUFBWSxHQUFHRixjQUFjLENBQUNSLFNBQVMsRUFBRUMsTUFBTSxDQUFDO0lBQ3RELElBQUlnQyxXQUFXLElBQUl2QixZQUFZLEVBQUU7TUFDL0I7TUFDQSxNQUFNTyxLQUFLLEdBQUcsTUFBTXRCLFNBQVMsQ0FBQztRQUM1QnVCLE1BQU0sRUFBRXZCLFNBQVMsQ0FBQ3dCLE1BQU0sQ0FBQ0UsR0FBRztRQUM1QnBCLE1BQU07UUFDTlcsSUFBSTtRQUNKWixTQUFTO1FBQ1RhLFNBQVM7UUFDVDRELFlBQVksRUFBRSxLQUFLO1FBQ25CQyxhQUFhLEVBQUUsS0FBSztRQUNwQjFEO01BQ0YsQ0FBQyxDQUFDO01BQ0YsT0FBT0MsS0FBSyxDQUFDRyxPQUFPLENBQUM7UUFDbkJjLEVBQUUsRUFBRTtNQUNOLENBQUMsQ0FBQztJQUNKO0lBQ0EsT0FBT0osT0FBTyxDQUFDQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDNUIsQ0FBQyxDQUFDLENBQ0RDLElBQUksQ0FBQyxDQUFDO0lBQUVJO0VBQVEsQ0FBQyxLQUFLO0lBQ3JCLElBQUl1QyxrQkFBa0I7SUFDdEIsSUFBSXZDLE9BQU8sSUFBSUEsT0FBTyxDQUFDQyxNQUFNLEVBQUU7TUFDN0JzQyxrQkFBa0IsR0FBR3ZDLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFDakM7SUFDQSxPQUFPLElBQUl4QyxTQUFTLENBQ2xCSyxNQUFNLEVBQ05XLElBQUksRUFDSlosU0FBUyxFQUNUYSxTQUFTLEVBQ1R5RCxVQUFVLEVBQ1ZLLGtCQUFrQixFQUNsQjVELFNBQVMsRUFDVEMsT0FBTyxFQUNQLFFBQVEsQ0FDVCxDQUFDSSxPQUFPLEVBQUU7RUFDYixDQUFDLENBQUMsQ0FDRDhDLEtBQUssQ0FBQ0MsS0FBSyxJQUFJO0lBQ2RDLHlCQUF5QixDQUFDRCxLQUFLLEVBQUVuRSxTQUFTLEVBQUVZLElBQUksQ0FBQztFQUNuRCxDQUFDLENBQUM7QUFDTjtBQUVBLFNBQVN3RCx5QkFBeUIsQ0FBQ0QsS0FBSyxFQUFFbkUsU0FBUyxFQUFFWSxJQUFJLEVBQUU7RUFDekQ7RUFDQSxJQUNFWixTQUFTLEtBQUssT0FBTyxJQUNyQm1FLEtBQUssQ0FBQ1MsSUFBSSxLQUFLbkYsS0FBSyxDQUFDK0IsS0FBSyxDQUFDMkIsZ0JBQWdCLElBQzNDLENBQUN2QyxJQUFJLENBQUMyQixRQUFRLElBQ2QsQ0FBQzNCLElBQUksQ0FBQzRCLGFBQWEsRUFDbkI7SUFDQSxNQUFNLElBQUkvQyxLQUFLLENBQUMrQixLQUFLLENBQUMvQixLQUFLLENBQUMrQixLQUFLLENBQUNHLGVBQWUsRUFBRSxvQkFBb0IsQ0FBQztFQUMxRTtFQUNBLE1BQU13QyxLQUFLO0FBQ2I7QUFFQVUsTUFBTSxDQUFDQyxPQUFPLEdBQUc7RUFDZlQsTUFBTTtFQUNOOUMsR0FBRztFQUNIWixJQUFJO0VBQ0pVLEdBQUc7RUFDSG1EO0FBQ0YsQ0FBQyJ9
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "parse-server",
3
- "version": "6.2.1",
3
+ "version": "6.2.2",
4
4
  "description": "An express module providing a Parse-compatible API server",
5
5
  "main": "lib/index.js",
6
6
  "repository": {