parse-server 9.4.1-alpha.3 → 9.5.0-alpha.1

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.
@@ -266,6 +266,38 @@ class FilesRouter {
266
266
  }
267
267
  }
268
268
 
269
+ // For streaming uploads, read file data from headers since the body is the raw stream
270
+ if (req.get('X-Parse-Upload-Mode') === 'stream') {
271
+ req.fileData = {};
272
+ if (req.get('X-Parse-File-Directory')) {
273
+ req.fileData.directory = req.get('X-Parse-File-Directory');
274
+ }
275
+ if (req.get('X-Parse-File-Metadata')) {
276
+ try {
277
+ const parsed = JSON.parse(req.get('X-Parse-File-Metadata'));
278
+ if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed)) {
279
+ throw new Error();
280
+ }
281
+ req.fileData.metadata = parsed;
282
+ } catch {
283
+ next(new _node.default.Error(_node.default.Error.INVALID_JSON, 'Invalid JSON in X-Parse-File-Metadata header.'));
284
+ return;
285
+ }
286
+ }
287
+ if (req.get('X-Parse-File-Tags')) {
288
+ try {
289
+ const parsed = JSON.parse(req.get('X-Parse-File-Tags'));
290
+ if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed)) {
291
+ throw new Error();
292
+ }
293
+ req.fileData.tags = parsed;
294
+ } catch {
295
+ next(new _node.default.Error(_node.default.Error.INVALID_JSON, 'Invalid JSON in X-Parse-File-Tags header.'));
296
+ return;
297
+ }
298
+ }
299
+ }
300
+
269
301
  // Validate directory option (requires master key)
270
302
  const directory = req.fileData?.directory;
271
303
  if (directory !== undefined) {
@@ -571,4 +603,4 @@ function isFileStreamable(req, filesController) {
571
603
  const end = Number(range[1]);
572
604
  return (!isNaN(start) || !isNaN(end)) && typeof filesController.adapter.handleFileStream === 'function';
573
605
  }
574
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZXhwcmVzcyIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiTWlkZGxld2FyZXMiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsIl9ub2RlIiwiX0NvbmZpZyIsIl9sb2dnZXIiLCJfc3RyZWFtIiwiX0Vycm9yIiwiZSIsInQiLCJXZWFrTWFwIiwiciIsIm4iLCJfX2VzTW9kdWxlIiwibyIsImkiLCJmIiwiX19wcm90b19fIiwiZGVmYXVsdCIsImhhcyIsImdldCIsInNldCIsImhhc093blByb3BlcnR5IiwiY2FsbCIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwidHJpZ2dlcnMiLCJVdGlscyIsImNyZWF0ZVNpemVMaW1pdGVkU3RyZWFtIiwic291cmNlIiwibWF4Qnl0ZXMiLCJ0b3RhbEJ5dGVzIiwic3RhcnRlZCIsInNvdXJjZUVuZGVkIiwib25EYXRhIiwib25FbmQiLCJvbkVycm9yIiwib3V0cHV0IiwiUmVhZGFibGUiLCJyZWFkIiwiY2h1bmsiLCJsZW5ndGgiLCJkZXN0cm95IiwiUGFyc2UiLCJFcnJvciIsIkZJTEVfU0FWRV9FUlJPUiIsInB1c2giLCJwYXVzZSIsImVyciIsIm9uIiwicmVzdW1lIiwiY2FsbGJhY2siLCJyZW1vdmVMaXN0ZW5lciIsIlJFU0VSVkVEX0RJUkVDVE9SWV9TRUdNRU5UUyIsImV4cG9ydHMiLCJGaWxlc1JvdXRlciIsImV4cHJlc3NSb3V0ZXIiLCJtYXhVcGxvYWRTaXplIiwicm91dGVyIiwiZXhwcmVzcyIsIlJvdXRlciIsIm1ldGFkYXRhSGFuZGxlciIsImdldEhhbmRsZXIiLCJwb3N0IiwicmVxIiwicmVzIiwibmV4dCIsIklOVkFMSURfRklMRV9OQU1FIiwiX2JvZHlQYXJzaW5nTWlkZGxld2FyZSIsImhhbmRsZVBhcnNlSGVhZGVycyIsImhhbmRsZVBhcnNlU2Vzc2lvbiIsImNyZWF0ZUhhbmRsZXIiLCJiaW5kIiwiZGVsZXRlIiwiZW5mb3JjZU1hc3RlcktleUFjY2VzcyIsImRlbGV0ZUhhbmRsZXIiLCJfZ2V0RmlsZW5hbWVGcm9tUGFyYW1zIiwicGFydHMiLCJwYXJhbXMiLCJmaWxlcGF0aCIsIkFycmF5IiwiaXNBcnJheSIsImpvaW4iLCJ2YWxpZGF0ZURpcmVjdG9yeSIsImRpcmVjdG9yeSIsImluY2x1ZGVzIiwic3RhcnRzV2l0aCIsImVuZHNXaXRoIiwiZmlyc3RTZWdtZW50Iiwic3BsaXQiLCJkaXJSZWdleCIsInRlc3QiLCJjb25maWciLCJDb25maWciLCJhcHBJZCIsImVycm9yIiwiY3JlYXRlU2FuaXRpemVkSHR0cEVycm9yIiwic3RhdHVzIiwianNvbiIsIm1lc3NhZ2UiLCJmaWxlbmFtZSIsImZpbGVzQ29udHJvbGxlciIsIm1pbWUiLCJjb250ZW50VHlwZSIsImdldFR5cGUiLCJmaWxlIiwiRmlsZSIsImJhc2U2NCIsInRyaWdnZXJSZXN1bHQiLCJtYXliZVJ1bkZpbGVUcmlnZ2VyIiwiVHlwZXMiLCJiZWZvcmVGaW5kIiwiYXV0aCIsIl9uYW1lIiwiaXNGaWxlU3RyZWFtYWJsZSIsImhhbmRsZUZpbGVTdHJlYW0iLCJjYXRjaCIsImVuZCIsImRhdGEiLCJnZXRGaWxlRGF0YSIsInRvU3RyaW5nIiwiYWZ0ZXJGaW5kIiwiZm9yY2VEb3dubG9hZCIsIkJ1ZmZlciIsImZyb20iLCJfZGF0YSIsInJlc29sdmVFcnJvciIsImNvZGUiLCJTQ1JJUFRfRkFJTEVEIiwicmF3UGFyc2VyIiwicmF3IiwidHlwZSIsImxpbWl0IiwiX21heFVwbG9hZFNpemVCeXRlcyIsInBhcnNlU2l6ZVRvQnl0ZXMiLCJ1c2VyIiwiaXNNYXN0ZXIiLCJpc0xpbmtlZCIsIkFub255bW91c1V0aWxzIiwiZmlsZVVwbG9hZCIsImVuYWJsZUZvckFub255bW91c1VzZXIiLCJlbmFibGVGb3JBdXRoZW50aWNhdGVkVXNlciIsImVuYWJsZUZvclB1YmxpYyIsInZhbGlkYXRlRmlsZW5hbWUiLCJmaWxlRXh0ZW5zaW9ucyIsImlzVmFsaWRFeHRlbnNpb24iLCJleHRlbnNpb24iLCJzb21lIiwiZXh0IiwicmVnZXgiLCJSZWdFeHAiLCJzdWJzdHJpbmciLCJsYXN0SW5kZXhPZiIsImZpbGVEYXRhIiwidW5kZWZpbmVkIiwiT1BFUkFUSU9OX0ZPUkJJRERFTiIsImRpcmVjdG9yeUVycm9yIiwiYm9keSIsIl9oYW5kbGVCdWZmZXJlZFVwbG9hZCIsIl9oYW5kbGVTdHJlYW1VcGxvYWQiLCJtZXRhZGF0YSIsInRhZ3MiLCJjaGVja1Byb2hpYml0ZWRLZXl3b3JkcyIsIklOVkFMSURfS0VZX05BTUUiLCJzZXRUYWdzIiwic2V0TWV0YWRhdGEiLCJzZXREaXJlY3RvcnkiLCJmaWxlU2l6ZSIsImJ5dGVMZW5ndGgiLCJmaWxlT2JqZWN0IiwiYmVmb3JlU2F2ZSIsInNhdmVSZXN1bHQiLCJ1cmwiLCJuYW1lIiwiYnVmZmVyRGF0YSIsIl9zb3VyY2UiLCJmb3JtYXQiLCJidWZmZXIiLCJmaWxlT3B0aW9ucyIsIl9tZXRhZGF0YSIsImZpbGVUYWdzIiwia2V5cyIsIl90YWdzIiwiYXNzaWduIiwiX2RpcmVjdG9yeSIsImNyZWF0ZUZpbGVSZXN1bHQiLCJjcmVhdGVGaWxlIiwiX3VybCIsIl9yZXF1ZXN0VGFzayIsIl9wcmV2aW91c1NhdmUiLCJQcm9taXNlIiwicmVzb2x2ZSIsImFmdGVyU2F2ZSIsImxvZ2dlciIsInN0cmVhbSIsImNvbnRlbnRMZW5ndGgiLCJwYXJzZUludCIsImhhc0V4dGVuc2lvbiIsInNvdXJjZVR5cGUiLCJhZGFwdGVyIiwiZ2V0RmlsZUxvY2F0aW9uIiwiYmVmb3JlRGVsZXRlIiwiZGVsZXRlRmlsZSIsImFmdGVyRGVsZXRlIiwiRklMRV9ERUxFVEVfRVJST1IiLCJnZXRNZXRhZGF0YSIsInJhbmdlIiwic3RhcnQiLCJOdW1iZXIiLCJpc05hTiJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9Sb3V0ZXJzL0ZpbGVzUm91dGVyLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBleHByZXNzIGZyb20gJ2V4cHJlc3MnO1xuaW1wb3J0ICogYXMgTWlkZGxld2FyZXMgZnJvbSAnLi4vbWlkZGxld2FyZXMnO1xuaW1wb3J0IFBhcnNlIGZyb20gJ3BhcnNlL25vZGUnO1xuaW1wb3J0IENvbmZpZyBmcm9tICcuLi9Db25maWcnO1xuaW1wb3J0IGxvZ2dlciBmcm9tICcuLi9sb2dnZXInO1xuY29uc3QgdHJpZ2dlcnMgPSByZXF1aXJlKCcuLi90cmlnZ2VycycpO1xuY29uc3QgVXRpbHMgPSByZXF1aXJlKCcuLi9VdGlscycpO1xuaW1wb3J0IHsgUmVhZGFibGUgfSBmcm9tICdzdHJlYW0nO1xuaW1wb3J0IHsgY3JlYXRlU2FuaXRpemVkSHR0cEVycm9yIH0gZnJvbSAnLi4vRXJyb3InO1xuXG4vKipcbiAqIFdyYXBzIGEgcmVhZGFibGUgc3RyZWFtIGluIGEgUmVhZGFibGUgdGhhdCBlbmZvcmNlcyBhIGJ5dGUgc2l6ZSBsaW1pdC5cbiAqIERhdGEgZmxvdyBpcyBsYXp5OiB0aGUgc291cmNlIGlzIG5vdCByZWFkIHVudGlsIGEgY29uc3VtZXIgc3RhcnRzIHJlYWRpbmdcbiAqIGZyb20gdGhlIHJldHVybmVkIHN0cmVhbSAodmlhIHBpcGUgb3IgJ2RhdGEnIGxpc3RlbmVyKS4gVGhpcyBlbnN1cmVzIHRoZVxuICogY29uc3VtZXIncyBlcnJvciBsaXN0ZW5lciBpcyBhdHRhY2hlZCBiZWZvcmUgYW55IGRhdGEgKG9yIGVycm9yKSBpcyBlbWl0dGVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlU2l6ZUxpbWl0ZWRTdHJlYW0oc291cmNlLCBtYXhCeXRlcykge1xuICBsZXQgdG90YWxCeXRlcyA9IDA7XG4gIGxldCBzdGFydGVkID0gZmFsc2U7XG4gIGxldCBzb3VyY2VFbmRlZCA9IGZhbHNlO1xuICBsZXQgb25EYXRhLCBvbkVuZCwgb25FcnJvcjtcblxuICBjb25zdCBvdXRwdXQgPSBuZXcgUmVhZGFibGUoe1xuICAgIHJlYWQoKSB7XG4gICAgICBpZiAoIXN0YXJ0ZWQpIHtcbiAgICAgICAgc3RhcnRlZCA9IHRydWU7XG5cbiAgICAgICAgb25EYXRhID0gKGNodW5rKSA9PiB7XG4gICAgICAgICAgdG90YWxCeXRlcyArPSBjaHVuay5sZW5ndGg7XG4gICAgICAgICAgaWYgKHRvdGFsQnl0ZXMgPiBtYXhCeXRlcykge1xuICAgICAgICAgICAgb3V0cHV0LmRlc3Ryb3koXG4gICAgICAgICAgICAgIG5ldyBQYXJzZS5FcnJvcihcbiAgICAgICAgICAgICAgICBQYXJzZS5FcnJvci5GSUxFX1NBVkVfRVJST1IsXG4gICAgICAgICAgICAgICAgYEZpbGUgc2l6ZSBleGNlZWRzIG1heGltdW0gYWxsb3dlZDogJHttYXhCeXRlc30gYnl0ZXMuYFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoIW91dHB1dC5wdXNoKGNodW5rKSkge1xuICAgICAgICAgICAgc291cmNlLnBhdXNlKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIG9uRW5kID0gKCkgPT4ge1xuICAgICAgICAgIHNvdXJjZUVuZGVkID0gdHJ1ZTtcbiAgICAgICAgICBvdXRwdXQucHVzaChudWxsKTtcbiAgICAgICAgfTtcblxuICAgICAgICBvbkVycm9yID0gKGVycikgPT4gb3V0cHV0LmRlc3Ryb3koZXJyKTtcblxuICAgICAgICBzb3VyY2Uub24oJ2RhdGEnLCBvbkRhdGEpO1xuICAgICAgICBzb3VyY2Uub24oJ2VuZCcsIG9uRW5kKTtcbiAgICAgICAgc291cmNlLm9uKCdlcnJvcicsIG9uRXJyb3IpO1xuICAgICAgfVxuXG4gICAgICAvLyBSZXN1bWUgc291cmNlIGluIGNhc2UgaXQgd2FzIHBhdXNlZCBkdWUgdG8gYmFja3ByZXNzdXJlXG4gICAgICBpZiAoIXNvdXJjZUVuZGVkKSB7XG4gICAgICAgIHNvdXJjZS5yZXN1bWUoKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGRlc3Ryb3koZXJyLCBjYWxsYmFjaykge1xuICAgICAgaWYgKG9uRGF0YSkge1xuICAgICAgICBzb3VyY2UucmVtb3ZlTGlzdGVuZXIoJ2RhdGEnLCBvbkRhdGEpO1xuICAgICAgfVxuICAgICAgaWYgKG9uRW5kKSB7XG4gICAgICAgIHNvdXJjZS5yZW1vdmVMaXN0ZW5lcignZW5kJywgb25FbmQpO1xuICAgICAgfVxuICAgICAgaWYgKG9uRXJyb3IpIHtcbiAgICAgICAgc291cmNlLnJlbW92ZUxpc3RlbmVyKCdlcnJvcicsIG9uRXJyb3IpO1xuICAgICAgfVxuICAgICAgLy8gU3VwcHJlc3MgZXJyb3JzIGVtaXR0ZWQgZHVyaW5nIGRyYWluIChlLmcuIGNsaWVudCBkaXNjb25uZWN0KVxuICAgICAgc291cmNlLm9uKCdlcnJvcicsICgpID0+IHt9KTtcbiAgICAgIGlmICghc291cmNlRW5kZWQpIHtcbiAgICAgICAgc291cmNlLnJlc3VtZSgpO1xuICAgICAgfVxuICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBvdXRwdXQ7XG59XG5cbi8vIFNlZ21lbnRzIHRoYXQgY29uZmxpY3Qgd2l0aCBzdWItcm91dGVzIHVuZGVyIEdFVCAvZmlsZXMvOmFwcElkLyouIElmIGEgZmlsZVxuLy8gZGlyZWN0b3J5IHN0YXJ0cyB3aXRoIG9uZSBvZiB0aGVzZSwgaXRzIFVSTCB3b3VsZCBtYXRjaCB0aGUgd3Jvbmcgcm91dGVcbi8vIGhhbmRsZXIuIFVwZGF0ZSB0aGlzIGxpc3Qgd2hlbiBhZGRpbmcgbmV3IHN1Yi1yb3V0ZXMgdG8gZXhwcmVzc1JvdXRlcigpLlxuZXhwb3J0IGNvbnN0IFJFU0VSVkVEX0RJUkVDVE9SWV9TRUdNRU5UUyA9IFsnbWV0YWRhdGEnXTtcblxuZXhwb3J0IGNsYXNzIEZpbGVzUm91dGVyIHtcbiAgZXhwcmVzc1JvdXRlcih7IG1heFVwbG9hZFNpemUgPSAnMjBNYicgfSA9IHt9KSB7XG4gICAgdmFyIHJvdXRlciA9IGV4cHJlc3MuUm91dGVyKCk7XG4gICAgLy8gTWV0YWRhdGEgcm91dGUgbXVzdCBjb21lIGJlZm9yZSB0aGUgY2F0Y2gtYWxsIEdFVCByb3V0ZVxuICAgIHJvdXRlci5nZXQoJy9maWxlcy86YXBwSWQvbWV0YWRhdGEvKmZpbGVwYXRoJywgdGhpcy5tZXRhZGF0YUhhbmRsZXIpO1xuICAgIHJvdXRlci5nZXQoJy9maWxlcy86YXBwSWQvKmZpbGVwYXRoJywgdGhpcy5nZXRIYW5kbGVyKTtcblxuICAgIHJvdXRlci5wb3N0KCcvZmlsZXMnLCBmdW5jdGlvbiAocmVxLCByZXMsIG5leHQpIHtcbiAgICAgIG5leHQobmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLklOVkFMSURfRklMRV9OQU1FLCAnRmlsZW5hbWUgbm90IHByb3ZpZGVkLicpKTtcbiAgICB9KTtcblxuICAgIHJvdXRlci5wb3N0KFxuICAgICAgJy9maWxlcy86ZmlsZW5hbWUnLFxuICAgICAgdGhpcy5fYm9keVBhcnNpbmdNaWRkbGV3YXJlKG1heFVwbG9hZFNpemUpLFxuICAgICAgTWlkZGxld2FyZXMuaGFuZGxlUGFyc2VIZWFkZXJzLFxuICAgICAgTWlkZGxld2FyZXMuaGFuZGxlUGFyc2VTZXNzaW9uLFxuICAgICAgdGhpcy5jcmVhdGVIYW5kbGVyLmJpbmQodGhpcylcbiAgICApO1xuXG4gICAgcm91dGVyLmRlbGV0ZShcbiAgICAgICcvZmlsZXMvKmZpbGVwYXRoJyxcbiAgICAgIE1pZGRsZXdhcmVzLmhhbmRsZVBhcnNlSGVhZGVycyxcbiAgICAgIE1pZGRsZXdhcmVzLmhhbmRsZVBhcnNlU2Vzc2lvbixcbiAgICAgIE1pZGRsZXdhcmVzLmVuZm9yY2VNYXN0ZXJLZXlBY2Nlc3MsXG4gICAgICB0aGlzLmRlbGV0ZUhhbmRsZXJcbiAgICApO1xuICAgIHJldHVybiByb3V0ZXI7XG4gIH1cblxuICBzdGF0aWMgX2dldEZpbGVuYW1lRnJvbVBhcmFtcyhyZXEpIHtcbiAgICBjb25zdCBwYXJ0cyA9IHJlcS5wYXJhbXMuZmlsZXBhdGg7XG4gICAgcmV0dXJuIEFycmF5LmlzQXJyYXkocGFydHMpID8gcGFydHMuam9pbignLycpIDogcGFydHM7XG4gIH1cblxuICBzdGF0aWMgdmFsaWRhdGVEaXJlY3RvcnkoZGlyZWN0b3J5KSB7XG4gICAgaWYgKHR5cGVvZiBkaXJlY3RvcnkgIT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gbmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLklOVkFMSURfRklMRV9OQU1FLCAnRGlyZWN0b3J5IG11c3QgYmUgYSBzdHJpbmcuJyk7XG4gICAgfVxuICAgIGlmIChkaXJlY3RvcnkubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gbmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLklOVkFMSURfRklMRV9OQU1FLCAnRGlyZWN0b3J5IG11c3Qgbm90IGJlIGVtcHR5LicpO1xuICAgIH1cbiAgICBpZiAoZGlyZWN0b3J5Lmxlbmd0aCA+IDI1Nikge1xuICAgICAgcmV0dXJuIG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5JTlZBTElEX0ZJTEVfTkFNRSwgJ0RpcmVjdG9yeSBwYXRoIGlzIHRvbyBsb25nLicpO1xuICAgIH1cbiAgICBpZiAoZGlyZWN0b3J5LmluY2x1ZGVzKCcuLicpKSB7XG4gICAgICByZXR1cm4gbmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLklOVkFMSURfRklMRV9OQU1FLCAnRGlyZWN0b3J5IG11c3Qgbm90IGNvbnRhaW4gXCIuLlwiLicpO1xuICAgIH1cbiAgICBpZiAoZGlyZWN0b3J5LnN0YXJ0c1dpdGgoJy8nKSB8fCBkaXJlY3RvcnkuZW5kc1dpdGgoJy8nKSkge1xuICAgICAgcmV0dXJuIG5ldyBQYXJzZS5FcnJvcihcbiAgICAgICAgUGFyc2UuRXJyb3IuSU5WQUxJRF9GSUxFX05BTUUsXG4gICAgICAgICdEaXJlY3RvcnkgbXVzdCBub3Qgc3RhcnQgb3IgZW5kIHdpdGggXCIvXCIuJ1xuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKGRpcmVjdG9yeS5pbmNsdWRlcygnLy8nKSkge1xuICAgICAgcmV0dXJuIG5ldyBQYXJzZS5FcnJvcihcbiAgICAgICAgUGFyc2UuRXJyb3IuSU5WQUxJRF9GSUxFX05BTUUsXG4gICAgICAgICdEaXJlY3RvcnkgbXVzdCBub3QgY29udGFpbiBjb25zZWN1dGl2ZSBzbGFzaGVzLidcbiAgICAgICk7XG4gICAgfVxuICAgIGNvbnN0IGZpcnN0U2VnbWVudCA9IGRpcmVjdG9yeS5zcGxpdCgnLycpWzBdO1xuICAgIGlmIChSRVNFUlZFRF9ESVJFQ1RPUllfU0VHTUVOVFMuaW5jbHVkZXMoZmlyc3RTZWdtZW50KSkge1xuICAgICAgcmV0dXJuIG5ldyBQYXJzZS5FcnJvcihcbiAgICAgICAgUGFyc2UuRXJyb3IuSU5WQUxJRF9GSUxFX05BTUUsXG4gICAgICAgIGBEaXJlY3RvcnkgbXVzdCBub3Qgc3RhcnQgd2l0aCByZXNlcnZlZCBzZWdtZW50IFwiJHtmaXJzdFNlZ21lbnR9XCIuYFxuICAgICAgKTtcbiAgICB9XG4gICAgY29uc3QgZGlyUmVnZXggPSAvXlthLXpBLVowLTldW2EtekEtWjAtOV9cXC0vXSokLztcbiAgICBpZiAoIWRpclJlZ2V4LnRlc3QoZGlyZWN0b3J5KSkge1xuICAgICAgcmV0dXJuIG5ldyBQYXJzZS5FcnJvcihcbiAgICAgICAgUGFyc2UuRXJyb3IuSU5WQUxJRF9GSUxFX05BTUUsXG4gICAgICAgICdEaXJlY3RvcnkgY29udGFpbnMgaW52YWxpZCBjaGFyYWN0ZXJzLidcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgYXN5bmMgZ2V0SGFuZGxlcihyZXEsIHJlcykge1xuICAgIGNvbnN0IGNvbmZpZyA9IENvbmZpZy5nZXQocmVxLnBhcmFtcy5hcHBJZCk7XG4gICAgaWYgKCFjb25maWcpIHtcbiAgICAgIGNvbnN0IGVycm9yID0gY3JlYXRlU2FuaXRpemVkSHR0cEVycm9yKDQwMywgJ0ludmFsaWQgYXBwbGljYXRpb24gSUQuJywgY29uZmlnKTtcbiAgICAgIHJlcy5zdGF0dXMoZXJyb3Iuc3RhdHVzKTtcbiAgICAgIHJlcy5qc29uKHsgZXJyb3I6IGVycm9yLm1lc3NhZ2UgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IGZpbGVuYW1lID0gRmlsZXNSb3V0ZXIuX2dldEZpbGVuYW1lRnJvbVBhcmFtcyhyZXEpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBmaWxlc0NvbnRyb2xsZXIgPSBjb25maWcuZmlsZXNDb250cm9sbGVyO1xuICAgICAgY29uc3QgbWltZSA9IChhd2FpdCBpbXBvcnQoJ21pbWUnKSkuZGVmYXVsdDtcbiAgICAgIGxldCBjb250ZW50VHlwZSA9IG1pbWUuZ2V0VHlwZShmaWxlbmFtZSk7XG4gICAgICBsZXQgZmlsZSA9IG5ldyBQYXJzZS5GaWxlKGZpbGVuYW1lLCB7IGJhc2U2NDogJycgfSwgY29udGVudFR5cGUpO1xuICAgICAgY29uc3QgdHJpZ2dlclJlc3VsdCA9IGF3YWl0IHRyaWdnZXJzLm1heWJlUnVuRmlsZVRyaWdnZXIoXG4gICAgICAgIHRyaWdnZXJzLlR5cGVzLmJlZm9yZUZpbmQsXG4gICAgICAgIHsgZmlsZSB9LFxuICAgICAgICBjb25maWcsXG4gICAgICAgIHJlcS5hdXRoXG4gICAgICApO1xuICAgICAgaWYgKHRyaWdnZXJSZXN1bHQ/LmZpbGU/Ll9uYW1lKSB7XG4gICAgICAgIGZpbGVuYW1lID0gdHJpZ2dlclJlc3VsdD8uZmlsZT8uX25hbWU7XG4gICAgICAgIGNvbnRlbnRUeXBlID0gbWltZS5nZXRUeXBlKGZpbGVuYW1lKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGlzRmlsZVN0cmVhbWFibGUocmVxLCBmaWxlc0NvbnRyb2xsZXIpKSB7XG4gICAgICAgIGZpbGVzQ29udHJvbGxlci5oYW5kbGVGaWxlU3RyZWFtKGNvbmZpZywgZmlsZW5hbWUsIHJlcSwgcmVzLCBjb250ZW50VHlwZSkuY2F0Y2goKCkgPT4ge1xuICAgICAgICAgIHJlcy5zdGF0dXMoNDA0KTtcbiAgICAgICAgICByZXMuc2V0KCdDb250ZW50LVR5cGUnLCAndGV4dC9wbGFpbicpO1xuICAgICAgICAgIHJlcy5lbmQoJ0ZpbGUgbm90IGZvdW5kLicpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBsZXQgZGF0YSA9IGF3YWl0IGZpbGVzQ29udHJvbGxlci5nZXRGaWxlRGF0YShjb25maWcsIGZpbGVuYW1lKS5jYXRjaCgoKSA9PiB7XG4gICAgICAgIHJlcy5zdGF0dXMoNDA0KTtcbiAgICAgICAgcmVzLnNldCgnQ29udGVudC1UeXBlJywgJ3RleHQvcGxhaW4nKTtcbiAgICAgICAgcmVzLmVuZCgnRmlsZSBub3QgZm91bmQuJyk7XG4gICAgICB9KTtcbiAgICAgIGlmICghZGF0YSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBmaWxlID0gbmV3IFBhcnNlLkZpbGUoZmlsZW5hbWUsIHsgYmFzZTY0OiBkYXRhLnRvU3RyaW5nKCdiYXNlNjQnKSB9LCBjb250ZW50VHlwZSk7XG4gICAgICBjb25zdCBhZnRlckZpbmQgPSBhd2FpdCB0cmlnZ2Vycy5tYXliZVJ1bkZpbGVUcmlnZ2VyKFxuICAgICAgICB0cmlnZ2Vycy5UeXBlcy5hZnRlckZpbmQsXG4gICAgICAgIHsgZmlsZSwgZm9yY2VEb3dubG9hZDogZmFsc2UgfSxcbiAgICAgICAgY29uZmlnLFxuICAgICAgICByZXEuYXV0aFxuICAgICAgKTtcblxuICAgICAgaWYgKGFmdGVyRmluZD8uZmlsZSkge1xuICAgICAgICBjb250ZW50VHlwZSA9IG1pbWUuZ2V0VHlwZShhZnRlckZpbmQuZmlsZS5fbmFtZSk7XG4gICAgICAgIGRhdGEgPSBCdWZmZXIuZnJvbShhZnRlckZpbmQuZmlsZS5fZGF0YSwgJ2Jhc2U2NCcpO1xuICAgICAgfVxuXG4gICAgICByZXMuc3RhdHVzKDIwMCk7XG4gICAgICByZXMuc2V0KCdDb250ZW50LVR5cGUnLCBjb250ZW50VHlwZSk7XG4gICAgICByZXMuc2V0KCdDb250ZW50LUxlbmd0aCcsIGRhdGEubGVuZ3RoKTtcbiAgICAgIGlmIChhZnRlckZpbmQuZm9yY2VEb3dubG9hZCkge1xuICAgICAgICByZXMuc2V0KCdDb250ZW50LURpc3Bvc2l0aW9uJywgYGF0dGFjaG1lbnQ7ZmlsZW5hbWU9JHthZnRlckZpbmQuZmlsZS5fbmFtZX1gKTtcbiAgICAgIH1cbiAgICAgIHJlcy5lbmQoZGF0YSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc3QgZXJyID0gdHJpZ2dlcnMucmVzb2x2ZUVycm9yKGUsIHtcbiAgICAgICAgY29kZTogUGFyc2UuRXJyb3IuU0NSSVBUX0ZBSUxFRCxcbiAgICAgICAgbWVzc2FnZTogYENvdWxkIG5vdCBmaW5kIGZpbGU6ICR7ZmlsZW5hbWV9LmAsXG4gICAgICB9KTtcbiAgICAgIHJlcy5zdGF0dXMoNDAzKTtcbiAgICAgIHJlcy5qc29uKHsgY29kZTogZXJyLmNvZGUsIGVycm9yOiBlcnIubWVzc2FnZSB9KTtcbiAgICB9XG4gIH1cblxuICBfYm9keVBhcnNpbmdNaWRkbGV3YXJlKG1heFVwbG9hZFNpemUpIHtcbiAgICBjb25zdCByYXdQYXJzZXIgPSBleHByZXNzLnJhdyh7XG4gICAgICB0eXBlOiAoKSA9PiB0cnVlLFxuICAgICAgbGltaXQ6IG1heFVwbG9hZFNpemUsXG4gICAgfSk7XG4gICAgcmV0dXJuIChyZXEsIHJlcywgbmV4dCkgPT4ge1xuICAgICAgaWYgKHJlcS5nZXQoJ1gtUGFyc2UtVXBsb2FkLU1vZGUnKSA9PT0gJ3N0cmVhbScpIHtcbiAgICAgICAgcmVxLl9tYXhVcGxvYWRTaXplQnl0ZXMgPSBVdGlscy5wYXJzZVNpemVUb0J5dGVzKG1heFVwbG9hZFNpemUpO1xuICAgICAgICByZXR1cm4gbmV4dCgpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJhd1BhcnNlcihyZXEsIHJlcywgbmV4dCk7XG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIGNyZWF0ZUhhbmRsZXIocmVxLCByZXMsIG5leHQpIHtcbiAgICBjb25zdCBjb25maWcgPSByZXEuY29uZmlnO1xuICAgIGNvbnN0IHVzZXIgPSByZXEuYXV0aC51c2VyO1xuICAgIGNvbnN0IGlzTWFzdGVyID0gcmVxLmF1dGguaXNNYXN0ZXI7XG4gICAgY29uc3QgaXNMaW5rZWQgPSB1c2VyICYmIFBhcnNlLkFub255bW91c1V0aWxzLmlzTGlua2VkKHVzZXIpO1xuICAgIGlmICghaXNNYXN0ZXIgJiYgIWNvbmZpZy5maWxlVXBsb2FkLmVuYWJsZUZvckFub255bW91c1VzZXIgJiYgaXNMaW5rZWQpIHtcbiAgICAgIG5leHQoXG4gICAgICAgIG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5GSUxFX1NBVkVfRVJST1IsICdGaWxlIHVwbG9hZCBieSBhbm9ueW1vdXMgdXNlciBpcyBkaXNhYmxlZC4nKVxuICAgICAgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCFpc01hc3RlciAmJiAhY29uZmlnLmZpbGVVcGxvYWQuZW5hYmxlRm9yQXV0aGVudGljYXRlZFVzZXIgJiYgIWlzTGlua2VkICYmIHVzZXIpIHtcbiAgICAgIG5leHQoXG4gICAgICAgIG5ldyBQYXJzZS5FcnJvcihcbiAgICAgICAgICBQYXJzZS5FcnJvci5GSUxFX1NBVkVfRVJST1IsXG4gICAgICAgICAgJ0ZpbGUgdXBsb2FkIGJ5IGF1dGhlbnRpY2F0ZWQgdXNlciBpcyBkaXNhYmxlZC4nXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICghaXNNYXN0ZXIgJiYgIWNvbmZpZy5maWxlVXBsb2FkLmVuYWJsZUZvclB1YmxpYyAmJiAhdXNlcikge1xuICAgICAgbmV4dChuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuRklMRV9TQVZFX0VSUk9SLCAnRmlsZSB1cGxvYWQgYnkgcHVibGljIGlzIGRpc2FibGVkLicpKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgZmlsZXNDb250cm9sbGVyID0gY29uZmlnLmZpbGVzQ29udHJvbGxlcjtcbiAgICBjb25zdCB7IGZpbGVuYW1lIH0gPSByZXEucGFyYW1zO1xuICAgIGNvbnN0IGNvbnRlbnRUeXBlID0gcmVxLmdldCgnQ29udGVudC10eXBlJyk7XG5cbiAgICBjb25zdCBlcnJvciA9IGZpbGVzQ29udHJvbGxlci52YWxpZGF0ZUZpbGVuYW1lKGZpbGVuYW1lKTtcbiAgICBpZiAoZXJyb3IpIHtcbiAgICAgIG5leHQoZXJyb3IpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGZpbGVFeHRlbnNpb25zID0gY29uZmlnLmZpbGVVcGxvYWQ/LmZpbGVFeHRlbnNpb25zO1xuICAgIGlmICghaXNNYXN0ZXIgJiYgZmlsZUV4dGVuc2lvbnMpIHtcbiAgICAgIGNvbnN0IGlzVmFsaWRFeHRlbnNpb24gPSBleHRlbnNpb24gPT4ge1xuICAgICAgICByZXR1cm4gZmlsZUV4dGVuc2lvbnMuc29tZShleHQgPT4ge1xuICAgICAgICAgIGlmIChleHQgPT09ICcqJykge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IHJlZ2V4ID0gbmV3IFJlZ0V4cChleHQpO1xuICAgICAgICAgIGlmIChyZWdleC50ZXN0KGV4dGVuc2lvbikpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgICAgbGV0IGV4dGVuc2lvbiA9IGNvbnRlbnRUeXBlO1xuICAgICAgaWYgKGZpbGVuYW1lICYmIGZpbGVuYW1lLmluY2x1ZGVzKCcuJykpIHtcbiAgICAgICAgZXh0ZW5zaW9uID0gZmlsZW5hbWUuc3Vic3RyaW5nKGZpbGVuYW1lLmxhc3RJbmRleE9mKCcuJykgKyAxKTtcbiAgICAgIH0gZWxzZSBpZiAoY29udGVudFR5cGUgJiYgY29udGVudFR5cGUuaW5jbHVkZXMoJy8nKSkge1xuICAgICAgICBleHRlbnNpb24gPSBjb250ZW50VHlwZS5zcGxpdCgnLycpWzFdO1xuICAgICAgfVxuICAgICAgZXh0ZW5zaW9uID0gZXh0ZW5zaW9uPy5zcGxpdCgnICcpPy5qb2luKCcnKTtcblxuICAgICAgaWYgKGV4dGVuc2lvbiAmJiAhaXNWYWxpZEV4dGVuc2lvbihleHRlbnNpb24pKSB7XG4gICAgICAgIG5leHQoXG4gICAgICAgICAgbmV3IFBhcnNlLkVycm9yKFxuICAgICAgICAgICAgUGFyc2UuRXJyb3IuRklMRV9TQVZFX0VSUk9SLFxuICAgICAgICAgICAgYEZpbGUgdXBsb2FkIG9mIGV4dGVuc2lvbiAke2V4dGVuc2lvbn0gaXMgZGlzYWJsZWQuYFxuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFZhbGlkYXRlIGRpcmVjdG9yeSBvcHRpb24gKHJlcXVpcmVzIG1hc3RlciBrZXkpXG4gICAgY29uc3QgZGlyZWN0b3J5ID0gcmVxLmZpbGVEYXRhPy5kaXJlY3Rvcnk7XG4gICAgaWYgKGRpcmVjdG9yeSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAoIWlzTWFzdGVyKSB7XG4gICAgICAgIG5leHQoXG4gICAgICAgICAgbmV3IFBhcnNlLkVycm9yKFxuICAgICAgICAgICAgUGFyc2UuRXJyb3IuT1BFUkFUSU9OX0ZPUkJJRERFTixcbiAgICAgICAgICAgICdEaXJlY3RvcnkgY2FuIG9ubHkgYmUgc2V0IHVzaW5nIHRoZSBNYXN0ZXIgS2V5LidcbiAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGRpcmVjdG9yeUVycm9yID0gRmlsZXNSb3V0ZXIudmFsaWRhdGVEaXJlY3RvcnkoZGlyZWN0b3J5KTtcbiAgICAgIGlmIChkaXJlY3RvcnlFcnJvcikge1xuICAgICAgICBuZXh0KGRpcmVjdG9yeUVycm9yKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIERpc3BhdGNoIHRvIHRoZSBhcHByb3ByaWF0ZSBoYW5kbGVyIGJhc2VkIG9uIHdoZXRoZXIgdGhlIGJvZHkgd2FzIGJ1ZmZlcmVkXG4gICAgaWYgKHJlcS5ib2R5IGluc3RhbmNlb2YgQnVmZmVyKSB7XG4gICAgICByZXR1cm4gdGhpcy5faGFuZGxlQnVmZmVyZWRVcGxvYWQocmVxLCByZXMsIG5leHQpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5faGFuZGxlU3RyZWFtVXBsb2FkKHJlcSwgcmVzLCBuZXh0KTtcbiAgfVxuXG4gIGFzeW5jIF9oYW5kbGVCdWZmZXJlZFVwbG9hZChyZXEsIHJlcywgbmV4dCkge1xuICAgIGNvbnN0IGNvbmZpZyA9IHJlcS5jb25maWc7XG4gICAgY29uc3QgZmlsZXNDb250cm9sbGVyID0gY29uZmlnLmZpbGVzQ29udHJvbGxlcjtcbiAgICBjb25zdCB7IGZpbGVuYW1lIH0gPSByZXEucGFyYW1zO1xuICAgIGNvbnN0IGNvbnRlbnRUeXBlID0gcmVxLmdldCgnQ29udGVudC10eXBlJyk7XG5cbiAgICBpZiAoIXJlcS5ib2R5IHx8ICFyZXEuYm9keS5sZW5ndGgpIHtcbiAgICAgIG5leHQobmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLkZJTEVfU0FWRV9FUlJPUiwgJ0ludmFsaWQgZmlsZSB1cGxvYWQuJykpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGJhc2U2NCA9IHJlcS5ib2R5LnRvU3RyaW5nKCdiYXNlNjQnKTtcbiAgICBjb25zdCBmaWxlID0gbmV3IFBhcnNlLkZpbGUoZmlsZW5hbWUsIHsgYmFzZTY0IH0sIGNvbnRlbnRUeXBlKTtcbiAgICBjb25zdCB7IG1ldGFkYXRhID0ge30sIHRhZ3MgPSB7fSwgZGlyZWN0b3J5IH0gPSByZXEuZmlsZURhdGEgfHwge307XG4gICAgdHJ5IHtcbiAgICAgIC8vIFNjYW4gcmVxdWVzdCBkYXRhIGZvciBkZW5pZWQga2V5d29yZHNcbiAgICAgIFV0aWxzLmNoZWNrUHJvaGliaXRlZEtleXdvcmRzKGNvbmZpZywgbWV0YWRhdGEpO1xuICAgICAgVXRpbHMuY2hlY2tQcm9oaWJpdGVkS2V5d29yZHMoY29uZmlnLCB0YWdzKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbmV4dChuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuSU5WQUxJRF9LRVlfTkFNRSwgZXJyb3IpKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZmlsZS5zZXRUYWdzKHRhZ3MpO1xuICAgIGZpbGUuc2V0TWV0YWRhdGEobWV0YWRhdGEpO1xuICAgIGlmIChkaXJlY3RvcnkpIHtcbiAgICAgIGZpbGUuc2V0RGlyZWN0b3J5KGRpcmVjdG9yeSk7XG4gICAgfVxuICAgIGNvbnN0IGZpbGVTaXplID0gQnVmZmVyLmJ5dGVMZW5ndGgocmVxLmJvZHkpO1xuICAgIGNvbnN0IGZpbGVPYmplY3QgPSB7IGZpbGUsIGZpbGVTaXplIH07XG4gICAgdHJ5IHtcbiAgICAgIC8vIHJ1biBiZWZvcmVTYXZlRmlsZSB0cmlnZ2VyXG4gICAgICBjb25zdCB0cmlnZ2VyUmVzdWx0ID0gYXdhaXQgdHJpZ2dlcnMubWF5YmVSdW5GaWxlVHJpZ2dlcihcbiAgICAgICAgdHJpZ2dlcnMuVHlwZXMuYmVmb3JlU2F2ZSxcbiAgICAgICAgZmlsZU9iamVjdCxcbiAgICAgICAgY29uZmlnLFxuICAgICAgICByZXEuYXV0aFxuICAgICAgKTtcbiAgICAgIGxldCBzYXZlUmVzdWx0O1xuICAgICAgLy8gaWYgYSBuZXcgUGFyc2VGaWxlIGlzIHJldHVybmVkIGNoZWNrIGlmIGl0J3MgYW4gYWxyZWFkeSBzYXZlZCBmaWxlXG4gICAgICBpZiAodHJpZ2dlclJlc3VsdCBpbnN0YW5jZW9mIFBhcnNlLkZpbGUpIHtcbiAgICAgICAgZmlsZU9iamVjdC5maWxlID0gdHJpZ2dlclJlc3VsdDtcbiAgICAgICAgaWYgKHRyaWdnZXJSZXN1bHQudXJsKCkpIHtcbiAgICAgICAgICAvLyBzZXQgZmlsZVNpemUgdG8gbnVsbCBiZWNhdXNlIHdlIHdvbnQga25vdyBob3cgYmlnIGl0IGlzIGhlcmVcbiAgICAgICAgICBmaWxlT2JqZWN0LmZpbGVTaXplID0gbnVsbDtcbiAgICAgICAgICBzYXZlUmVzdWx0ID0ge1xuICAgICAgICAgICAgdXJsOiB0cmlnZ2VyUmVzdWx0LnVybCgpLFxuICAgICAgICAgICAgbmFtZTogdHJpZ2dlclJlc3VsdC5fbmFtZSxcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvLyBpZiB0aGUgZmlsZSByZXR1cm5lZCBieSB0aGUgdHJpZ2dlciBoYXMgYWxyZWFkeSBiZWVuIHNhdmVkIHNraXAgc2F2aW5nIGFueXRoaW5nXG4gICAgICBpZiAoIXNhdmVSZXN1bHQpIHtcbiAgICAgICAgLy8gdXBkYXRlIGZpbGVTaXplXG4gICAgICAgIGxldCBidWZmZXJEYXRhO1xuICAgICAgICBpZiAoZmlsZU9iamVjdC5maWxlLl9zb3VyY2U/LmZvcm1hdCA9PT0gJ2J1ZmZlcicpIHtcbiAgICAgICAgICBidWZmZXJEYXRhID0gZmlsZU9iamVjdC5maWxlLl9zb3VyY2UuYnVmZmVyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGJ1ZmZlckRhdGEgPSBCdWZmZXIuZnJvbShmaWxlT2JqZWN0LmZpbGUuX2RhdGEsICdiYXNlNjQnKTtcbiAgICAgICAgfVxuICAgICAgICBmaWxlT2JqZWN0LmZpbGVTaXplID0gQnVmZmVyLmJ5dGVMZW5ndGgoYnVmZmVyRGF0YSk7XG4gICAgICAgIC8vIHByZXBhcmUgZmlsZSBvcHRpb25zXG4gICAgICAgIGNvbnN0IGZpbGVPcHRpb25zID0ge1xuICAgICAgICAgIG1ldGFkYXRhOiBmaWxlT2JqZWN0LmZpbGUuX21ldGFkYXRhLFxuICAgICAgICB9O1xuICAgICAgICAvLyBzb21lIHMzLWNvbXBhdGlibGUgcHJvdmlkZXJzIChEaWdpdGFsT2NlYW4sIExpbm9kZSkgZG8gbm90IGFjY2VwdCB0YWdzXG4gICAgICAgIC8vIHNvIHdlIGRvIG5vdCBpbmNsdWRlIHRoZSB0YWdzIG9wdGlvbiBpZiBpdCBpcyBlbXB0eS5cbiAgICAgICAgY29uc3QgZmlsZVRhZ3MgPVxuICAgICAgICAgIE9iamVjdC5rZXlzKGZpbGVPYmplY3QuZmlsZS5fdGFncykubGVuZ3RoID4gMCA/IHsgdGFnczogZmlsZU9iamVjdC5maWxlLl90YWdzIH0gOiB7fTtcbiAgICAgICAgT2JqZWN0LmFzc2lnbihmaWxlT3B0aW9ucywgZmlsZVRhZ3MpO1xuICAgICAgICAvLyBpbmNsdWRlIGRpcmVjdG9yeSBpZiBzZXQgKGZyb20gY2xpZW50IHJlcXVlc3Qgb3IgYmVmb3JlU2F2ZUZpbGUgdHJpZ2dlcilcbiAgICAgICAgaWYgKGZpbGVPYmplY3QuZmlsZS5fZGlyZWN0b3J5KSB7XG4gICAgICAgICAgZmlsZU9wdGlvbnMuZGlyZWN0b3J5ID0gZmlsZU9iamVjdC5maWxlLl9kaXJlY3Rvcnk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gc2F2ZSBmaWxlXG4gICAgICAgIGNvbnN0IGNyZWF0ZUZpbGVSZXN1bHQgPSBhd2FpdCBmaWxlc0NvbnRyb2xsZXIuY3JlYXRlRmlsZShcbiAgICAgICAgICBjb25maWcsXG4gICAgICAgICAgZmlsZU9iamVjdC5maWxlLl9uYW1lLFxuICAgICAgICAgIGJ1ZmZlckRhdGEsXG4gICAgICAgICAgZmlsZU9iamVjdC5maWxlLl9zb3VyY2UudHlwZSxcbiAgICAgICAgICBmaWxlT3B0aW9uc1xuICAgICAgICApO1xuICAgICAgICAvLyB1cGRhdGUgZmlsZSB3aXRoIG5ldyBkYXRhXG4gICAgICAgIGZpbGVPYmplY3QuZmlsZS5fbmFtZSA9IGNyZWF0ZUZpbGVSZXN1bHQubmFtZTtcbiAgICAgICAgZmlsZU9iamVjdC5maWxlLl91cmwgPSBjcmVhdGVGaWxlUmVzdWx0LnVybDtcbiAgICAgICAgZmlsZU9iamVjdC5maWxlLl9yZXF1ZXN0VGFzayA9IG51bGw7XG4gICAgICAgIGZpbGVPYmplY3QuZmlsZS5fcHJldmlvdXNTYXZlID0gUHJvbWlzZS5yZXNvbHZlKGZpbGVPYmplY3QuZmlsZSk7XG4gICAgICAgIHNhdmVSZXN1bHQgPSB7XG4gICAgICAgICAgdXJsOiBjcmVhdGVGaWxlUmVzdWx0LnVybCxcbiAgICAgICAgICBuYW1lOiBjcmVhdGVGaWxlUmVzdWx0Lm5hbWUsXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICAvLyBydW4gYWZ0ZXJTYXZlRmlsZSB0cmlnZ2VyXG4gICAgICBhd2FpdCB0cmlnZ2Vycy5tYXliZVJ1bkZpbGVUcmlnZ2VyKHRyaWdnZXJzLlR5cGVzLmFmdGVyU2F2ZSwgZmlsZU9iamVjdCwgY29uZmlnLCByZXEuYXV0aCk7XG4gICAgICByZXMuc3RhdHVzKDIwMSk7XG4gICAgICByZXMuc2V0KCdMb2NhdGlvbicsIHNhdmVSZXN1bHQudXJsKTtcbiAgICAgIHJlcy5qc29uKHNhdmVSZXN1bHQpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGxvZ2dlci5lcnJvcignRXJyb3IgY3JlYXRpbmcgYSBmaWxlOiAnLCBlKTtcbiAgICAgIGNvbnN0IGVycm9yID0gdHJpZ2dlcnMucmVzb2x2ZUVycm9yKGUsIHtcbiAgICAgICAgY29kZTogUGFyc2UuRXJyb3IuRklMRV9TQVZFX0VSUk9SLFxuICAgICAgICBtZXNzYWdlOiBgQ291bGQgbm90IHN0b3JlIGZpbGU6ICR7ZmlsZU9iamVjdC5maWxlLl9uYW1lfS5gLFxuICAgICAgfSk7XG4gICAgICBuZXh0KGVycm9yKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBfaGFuZGxlU3RyZWFtVXBsb2FkKHJlcSwgcmVzLCBuZXh0KSB7XG4gICAgY29uc3QgY29uZmlnID0gcmVxLmNvbmZpZztcbiAgICBjb25zdCBmaWxlc0NvbnRyb2xsZXIgPSBjb25maWcuZmlsZXNDb250cm9sbGVyO1xuICAgIGNvbnN0IHsgZmlsZW5hbWUgfSA9IHJlcS5wYXJhbXM7XG4gICAgbGV0IGNvbnRlbnRUeXBlID0gcmVxLmdldCgnQ29udGVudC1UeXBlJyk7XG4gICAgY29uc3QgbWF4Qnl0ZXMgPSByZXEuX21heFVwbG9hZFNpemVCeXRlcztcbiAgICBsZXQgc3RyZWFtO1xuXG4gICAgdHJ5IHtcbiAgICAgIC8vIEVhcmx5IHJlamVjdGlvbiB2aWEgQ29udGVudC1MZW5ndGggaGVhZGVyXG4gICAgICBjb25zdCBjb250ZW50TGVuZ3RoID0gcmVxLmdldCgnQ29udGVudC1MZW5ndGgnKTtcbiAgICAgIGlmIChjb250ZW50TGVuZ3RoICYmIHBhcnNlSW50KGNvbnRlbnRMZW5ndGgsIDEwKSA+IG1heEJ5dGVzKSB7XG4gICAgICAgIHJlcS5yZXN1bWUoKTtcbiAgICAgICAgbmV4dChuZXcgUGFyc2UuRXJyb3IoXG4gICAgICAgICAgUGFyc2UuRXJyb3IuRklMRV9TQVZFX0VSUk9SLFxuICAgICAgICAgIGBGaWxlIHNpemUgZXhjZWVkcyBtYXhpbXVtIGFsbG93ZWQ6ICR7bWF4Qnl0ZXN9IGJ5dGVzLmBcbiAgICAgICAgKSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgbWltZSA9IChhd2FpdCBpbXBvcnQoJ21pbWUnKSkuZGVmYXVsdDtcblxuICAgICAgLy8gSW5mZXIgY29udGVudCB0eXBlIGZyb20gZXh0ZW5zaW9uIG9yIGFkZCBleHRlbnNpb24gZnJvbSBjb250ZW50IHR5cGVcbiAgICAgIGNvbnN0IGhhc0V4dGVuc2lvbiA9IGZpbGVuYW1lICYmIGZpbGVuYW1lLmluY2x1ZGVzKCcuJyk7XG4gICAgICBpZiAoaGFzRXh0ZW5zaW9uICYmICFjb250ZW50VHlwZSkge1xuICAgICAgICBjb250ZW50VHlwZSA9IG1pbWUuZ2V0VHlwZShmaWxlbmFtZSk7XG4gICAgICB9IGVsc2UgaWYgKCFoYXNFeHRlbnNpb24gJiYgY29udGVudFR5cGUpIHtcbiAgICAgICAgLy8gZXh0ZW5zaW9uIHdpbGwgYmUgYWRkZWQgYnkgZmlsZXNDb250cm9sbGVyLmNyZWF0ZUZpbGVcbiAgICAgIH1cblxuICAgICAgLy8gQ3JlYXRlIHNpemUtbGltaXRlZCBzdHJlYW0gd3JhcHBpbmcgdGhlIHJlcXVlc3RcbiAgICAgIHN0cmVhbSA9IGNyZWF0ZVNpemVMaW1pdGVkU3RyZWFtKHJlcSwgbWF4Qnl0ZXMpO1xuXG4gICAgICAvLyBCdWlsZCBhIFBhcnNlLkZpbGUgd2l0aCBubyBfZGF0YSAoc3RyZWFtaW5nIG1vZGUpXG4gICAgICBjb25zdCBmaWxlID0gbmV3IFBhcnNlLkZpbGUoZmlsZW5hbWUsIHsgYmFzZTY0OiAnJyB9LCBjb250ZW50VHlwZSk7XG4gICAgICBjb25zdCB7IG1ldGFkYXRhID0ge30sIHRhZ3MgPSB7fSwgZGlyZWN0b3J5IH0gPSByZXEuZmlsZURhdGEgfHwge307XG5cbiAgICAgIC8vIFZhbGlkYXRlIG1ldGFkYXRhIGFuZCB0YWdzIGZvciBwcm9oaWJpdGVkIGtleXdvcmRzXG4gICAgICB0cnkge1xuICAgICAgICBVdGlscy5jaGVja1Byb2hpYml0ZWRLZXl3b3Jkcyhjb25maWcsIG1ldGFkYXRhKTtcbiAgICAgICAgVXRpbHMuY2hlY2tQcm9oaWJpdGVkS2V5d29yZHMoY29uZmlnLCB0YWdzKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIHN0cmVhbS5kZXN0cm95KCk7XG4gICAgICAgIG5leHQobmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLklOVkFMSURfS0VZX05BTUUsIGVycm9yKSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgZmlsZS5zZXRUYWdzKHRhZ3MpO1xuICAgICAgZmlsZS5zZXRNZXRhZGF0YShtZXRhZGF0YSk7XG4gICAgICBpZiAoZGlyZWN0b3J5KSB7XG4gICAgICAgIGZpbGUuc2V0RGlyZWN0b3J5KGRpcmVjdG9yeSk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGZpbGVTaXplID0gcmVxLmdldCgnQ29udGVudC1MZW5ndGgnKVxuICAgICAgICA/IHBhcnNlSW50KHJlcS5nZXQoJ0NvbnRlbnQtTGVuZ3RoJyksIDEwKVxuICAgICAgICA6IG51bGw7XG4gICAgICBjb25zdCBmaWxlT2JqZWN0ID0geyBmaWxlLCBmaWxlU2l6ZSwgc3RyZWFtOiB0cnVlIH07XG5cbiAgICAgIC8vIFJ1biBiZWZvcmVTYXZlRmlsZSB0cmlnZ2VyXG4gICAgICBjb25zdCB0cmlnZ2VyUmVzdWx0ID0gYXdhaXQgdHJpZ2dlcnMubWF5YmVSdW5GaWxlVHJpZ2dlcihcbiAgICAgICAgdHJpZ2dlcnMuVHlwZXMuYmVmb3JlU2F2ZSxcbiAgICAgICAgZmlsZU9iamVjdCxcbiAgICAgICAgY29uZmlnLFxuICAgICAgICByZXEuYXV0aFxuICAgICAgKTtcblxuICAgICAgbGV0IHNhdmVSZXN1bHQ7XG4gICAgICAvLyBJZiBhIG5ldyBQYXJzZUZpbGUgaXMgcmV0dXJuZWQsIGNoZWNrIGlmIGl0J3MgYW4gYWxyZWFkeSBzYXZlZCBmaWxlXG4gICAgICBpZiAodHJpZ2dlclJlc3VsdCBpbnN0YW5jZW9mIFBhcnNlLkZpbGUpIHtcbiAgICAgICAgZmlsZU9iamVjdC5maWxlID0gdHJpZ2dlclJlc3VsdDtcbiAgICAgICAgaWYgKHRyaWdnZXJSZXN1bHQudXJsKCkpIHtcbiAgICAgICAgICBmaWxlT2JqZWN0LmZpbGVTaXplID0gbnVsbDtcbiAgICAgICAgICBzYXZlUmVzdWx0ID0ge1xuICAgICAgICAgICAgdXJsOiB0cmlnZ2VyUmVzdWx0LnVybCgpLFxuICAgICAgICAgICAgbmFtZTogdHJpZ2dlclJlc3VsdC5fbmFtZSxcbiAgICAgICAgICB9O1xuICAgICAgICAgIC8vIERlc3Ryb3kgc3RyZWFtIHRvIHJlbW92ZSBsaXN0ZW5lcnMgYW5kIGRyYWluIHJlcXVlc3RcbiAgICAgICAgICBzdHJlYW0uZGVzdHJveSgpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIElmIHRoZSBmaWxlIHJldHVybmVkIGJ5IHRoZSB0cmlnZ2VyIGhhcyBhbHJlYWR5IGJlZW4gc2F2ZWQsIHNraXAgc2F2aW5nXG4gICAgICBpZiAoIXNhdmVSZXN1bHQpIHtcbiAgICAgICAgLy8gUHJlcGFyZSBmaWxlIG9wdGlvbnNcbiAgICAgICAgY29uc3QgZmlsZU9wdGlvbnMgPSB7XG4gICAgICAgICAgbWV0YWRhdGE6IGZpbGVPYmplY3QuZmlsZS5fbWV0YWRhdGEsXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGZpbGVUYWdzID1cbiAgICAgICAgICBPYmplY3Qua2V5cyhmaWxlT2JqZWN0LmZpbGUuX3RhZ3MpLmxlbmd0aCA+IDAgPyB7IHRhZ3M6IGZpbGVPYmplY3QuZmlsZS5fdGFncyB9IDoge307XG4gICAgICAgIE9iamVjdC5hc3NpZ24oZmlsZU9wdGlvbnMsIGZpbGVUYWdzKTtcbiAgICAgICAgLy8gaW5jbHVkZSBkaXJlY3RvcnkgaWYgc2V0IChmcm9tIGNsaWVudCByZXF1ZXN0IG9yIGJlZm9yZVNhdmVGaWxlIHRyaWdnZXIpXG4gICAgICAgIGlmIChmaWxlT2JqZWN0LmZpbGUuX2RpcmVjdG9yeSkge1xuICAgICAgICAgIGZpbGVPcHRpb25zLmRpcmVjdG9yeSA9IGZpbGVPYmplY3QuZmlsZS5fZGlyZWN0b3J5O1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gUGFzcyBzdHJlYW0gZGlyZWN0bHkgdG8gZmlsZXNDb250cm9sbGVyIOKAlCBpdCB3aWxsIGJ1ZmZlciBpZiBhZGFwdGVyIGRvZXNuJ3Qgc3VwcG9ydCBzdHJlYW1pbmdcbiAgICAgICAgY29uc3Qgc291cmNlVHlwZSA9IGZpbGVPYmplY3QuZmlsZS5fc291cmNlPy50eXBlIHx8IGNvbnRlbnRUeXBlO1xuICAgICAgICBjb25zdCBjcmVhdGVGaWxlUmVzdWx0ID0gYXdhaXQgZmlsZXNDb250cm9sbGVyLmNyZWF0ZUZpbGUoXG4gICAgICAgICAgY29uZmlnLFxuICAgICAgICAgIGZpbGVPYmplY3QuZmlsZS5fbmFtZSxcbiAgICAgICAgICBzdHJlYW0sXG4gICAgICAgICAgc291cmNlVHlwZSxcbiAgICAgICAgICBmaWxlT3B0aW9uc1xuICAgICAgICApO1xuXG4gICAgICAgIC8vIFVwZGF0ZSBmaWxlIHdpdGggbmV3IGRhdGFcbiAgICAgICAgZmlsZU9iamVjdC5maWxlLl9uYW1lID0gY3JlYXRlRmlsZVJlc3VsdC5uYW1lO1xuICAgICAgICBmaWxlT2JqZWN0LmZpbGUuX3VybCA9IGNyZWF0ZUZpbGVSZXN1bHQudXJsO1xuICAgICAgICBmaWxlT2JqZWN0LmZpbGUuX3JlcXVlc3RUYXNrID0gbnVsbDtcbiAgICAgICAgZmlsZU9iamVjdC5maWxlLl9wcmV2aW91c1NhdmUgPSBQcm9taXNlLnJlc29sdmUoZmlsZU9iamVjdC5maWxlKTtcbiAgICAgICAgc2F2ZVJlc3VsdCA9IHtcbiAgICAgICAgICB1cmw6IGNyZWF0ZUZpbGVSZXN1bHQudXJsLFxuICAgICAgICAgIG5hbWU6IGNyZWF0ZUZpbGVSZXN1bHQubmFtZSxcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgLy8gUnVuIGFmdGVyU2F2ZUZpbGUgdHJpZ2dlclxuICAgICAgYXdhaXQgdHJpZ2dlcnMubWF5YmVSdW5GaWxlVHJpZ2dlcih0cmlnZ2Vycy5UeXBlcy5hZnRlclNhdmUsIGZpbGVPYmplY3QsIGNvbmZpZywgcmVxLmF1dGgpO1xuICAgICAgcmVzLnN0YXR1cygyMDEpO1xuICAgICAgcmVzLnNldCgnTG9jYXRpb24nLCBzYXZlUmVzdWx0LnVybCk7XG4gICAgICByZXMuanNvbihzYXZlUmVzdWx0KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvLyBEZXN0cm95IHN0cmVhbSB0byByZW1vdmUgbGlzdGVuZXJzIGFuZCBkcmFpbiByZXF1ZXN0LCBvciByZXN1bWUgZGlyZWN0bHlcbiAgICAgIGlmIChzdHJlYW0pIHtcbiAgICAgICAgc3RyZWFtLmRlc3Ryb3koKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlcS5yZXN1bWUoKTtcbiAgICAgIH1cbiAgICAgIGxvZ2dlci5lcnJvcignRXJyb3IgY3JlYXRpbmcgYSBmaWxlOiAnLCBlKTtcbiAgICAgIGNvbnN0IGVycm9yID0gdHJpZ2dlcnMucmVzb2x2ZUVycm9yKGUsIHtcbiAgICAgICAgY29kZTogUGFyc2UuRXJyb3IuRklMRV9TQVZFX0VSUk9SLFxuICAgICAgICBtZXNzYWdlOiBgQ291bGQgbm90IHN0b3JlIGZpbGU6ICR7ZmlsZW5hbWV9LmAsXG4gICAgICB9KTtcbiAgICAgIG5leHQoZXJyb3IpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZUhhbmRsZXIocmVxLCByZXMsIG5leHQpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgeyBmaWxlc0NvbnRyb2xsZXIgfSA9IHJlcS5jb25maWc7XG4gICAgICBjb25zdCBmaWxlbmFtZSA9IEZpbGVzUm91dGVyLl9nZXRGaWxlbmFtZUZyb21QYXJhbXMocmVxKTtcbiAgICAgIC8vIHJ1biBiZWZvcmVEZWxldGVGaWxlIHRyaWdnZXJcbiAgICAgIGNvbnN0IGZpbGUgPSBuZXcgUGFyc2UuRmlsZShmaWxlbmFtZSk7XG4gICAgICBmaWxlLl91cmwgPSBhd2FpdCBmaWxlc0NvbnRyb2xsZXIuYWRhcHRlci5nZXRGaWxlTG9jYXRpb24ocmVxLmNvbmZpZywgZmlsZW5hbWUpO1xuICAgICAgY29uc3QgZmlsZU9iamVjdCA9IHsgZmlsZSwgZmlsZVNpemU6IG51bGwgfTtcbiAgICAgIGF3YWl0IHRyaWdnZXJzLm1heWJlUnVuRmlsZVRyaWdnZXIoXG4gICAgICAgIHRyaWdnZXJzLlR5cGVzLmJlZm9yZURlbGV0ZSxcbiAgICAgICAgZmlsZU9iamVjdCxcbiAgICAgICAgcmVxLmNvbmZpZyxcbiAgICAgICAgcmVxLmF1dGhcbiAgICAgICk7XG4gICAgICAvLyBkZWxldGUgZmlsZVxuICAgICAgYXdhaXQgZmlsZXNDb250cm9sbGVyLmRlbGV0ZUZpbGUocmVxLmNvbmZpZywgZmlsZW5hbWUpO1xuICAgICAgLy8gcnVuIGFmdGVyRGVsZXRlRmlsZSB0cmlnZ2VyXG4gICAgICBhd2FpdCB0cmlnZ2Vycy5tYXliZVJ1bkZpbGVUcmlnZ2VyKFxuICAgICAgICB0cmlnZ2Vycy5UeXBlcy5hZnRlckRlbGV0ZSxcbiAgICAgICAgZmlsZU9iamVjdCxcbiAgICAgICAgcmVxLmNvbmZpZyxcbiAgICAgICAgcmVxLmF1dGhcbiAgICAgICk7XG4gICAgICByZXMuc3RhdHVzKDIwMCk7XG4gICAgICAvLyBUT0RPOiByZXR1cm4gdXNlZnVsIEpTT04gaGVyZT9cbiAgICAgIHJlcy5lbmQoKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoJ0Vycm9yIGRlbGV0aW5nIGEgZmlsZTogJywgZSk7XG4gICAgICBjb25zdCBlcnJvciA9IHRyaWdnZXJzLnJlc29sdmVFcnJvcihlLCB7XG4gICAgICAgIGNvZGU6IFBhcnNlLkVycm9yLkZJTEVfREVMRVRFX0VSUk9SLFxuICAgICAgICBtZXNzYWdlOiAnQ291bGQgbm90IGRlbGV0ZSBmaWxlLicsXG4gICAgICB9KTtcbiAgICAgIG5leHQoZXJyb3IpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIG1ldGFkYXRhSGFuZGxlcihyZXEsIHJlcykge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBjb25maWcgPSBDb25maWcuZ2V0KHJlcS5wYXJhbXMuYXBwSWQpO1xuICAgICAgY29uc3QgeyBmaWxlc0NvbnRyb2xsZXIgfSA9IGNvbmZpZztcbiAgICAgIGNvbnN0IGZpbGVuYW1lID0gRmlsZXNSb3V0ZXIuX2dldEZpbGVuYW1lRnJvbVBhcmFtcyhyZXEpO1xuICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IGZpbGVzQ29udHJvbGxlci5nZXRNZXRhZGF0YShmaWxlbmFtZSk7XG4gICAgICByZXMuc3RhdHVzKDIwMCk7XG4gICAgICByZXMuanNvbihkYXRhKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJlcy5zdGF0dXMoMjAwKTtcbiAgICAgIHJlcy5qc29uKHt9KTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNGaWxlU3RyZWFtYWJsZShyZXEsIGZpbGVzQ29udHJvbGxlcikge1xuICBjb25zdCByYW5nZSA9IChyZXEuZ2V0KCdSYW5nZScpIHx8ICcvLS8nKS5zcGxpdCgnLScpO1xuICBjb25zdCBzdGFydCA9IE51bWJlcihyYW5nZVswXSk7XG4gIGNvbnN0IGVuZCA9IE51bWJlcihyYW5nZVsxXSk7XG4gIHJldHVybiAoXG4gICAgKCFpc05hTihzdGFydCkgfHwgIWlzTmFOKGVuZCkpICYmIHR5cGVvZiBmaWxlc0NvbnRyb2xsZXIuYWRhcHRlci5oYW5kbGVGaWxlU3RyZWFtID09PSAnZnVuY3Rpb24nXG4gICk7XG59XG4iXSwibWFw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
606
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZXhwcmVzcyIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiTWlkZGxld2FyZXMiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsIl9ub2RlIiwiX0NvbmZpZyIsIl9sb2dnZXIiLCJfc3RyZWFtIiwiX0Vycm9yIiwiZSIsInQiLCJXZWFrTWFwIiwiciIsIm4iLCJfX2VzTW9kdWxlIiwibyIsImkiLCJmIiwiX19wcm90b19fIiwiZGVmYXVsdCIsImhhcyIsImdldCIsInNldCIsImhhc093blByb3BlcnR5IiwiY2FsbCIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwidHJpZ2dlcnMiLCJVdGlscyIsImNyZWF0ZVNpemVMaW1pdGVkU3RyZWFtIiwic291cmNlIiwibWF4Qnl0ZXMiLCJ0b3RhbEJ5dGVzIiwic3RhcnRlZCIsInNvdXJjZUVuZGVkIiwib25EYXRhIiwib25FbmQiLCJvbkVycm9yIiwib3V0cHV0IiwiUmVhZGFibGUiLCJyZWFkIiwiY2h1bmsiLCJsZW5ndGgiLCJkZXN0cm95IiwiUGFyc2UiLCJFcnJvciIsIkZJTEVfU0FWRV9FUlJPUiIsInB1c2giLCJwYXVzZSIsImVyciIsIm9uIiwicmVzdW1lIiwiY2FsbGJhY2siLCJyZW1vdmVMaXN0ZW5lciIsIlJFU0VSVkVEX0RJUkVDVE9SWV9TRUdNRU5UUyIsImV4cG9ydHMiLCJGaWxlc1JvdXRlciIsImV4cHJlc3NSb3V0ZXIiLCJtYXhVcGxvYWRTaXplIiwicm91dGVyIiwiZXhwcmVzcyIsIlJvdXRlciIsIm1ldGFkYXRhSGFuZGxlciIsImdldEhhbmRsZXIiLCJwb3N0IiwicmVxIiwicmVzIiwibmV4dCIsIklOVkFMSURfRklMRV9OQU1FIiwiX2JvZHlQYXJzaW5nTWlkZGxld2FyZSIsImhhbmRsZVBhcnNlSGVhZGVycyIsImhhbmRsZVBhcnNlU2Vzc2lvbiIsImNyZWF0ZUhhbmRsZXIiLCJiaW5kIiwiZGVsZXRlIiwiZW5mb3JjZU1hc3RlcktleUFjY2VzcyIsImRlbGV0ZUhhbmRsZXIiLCJfZ2V0RmlsZW5hbWVGcm9tUGFyYW1zIiwicGFydHMiLCJwYXJhbXMiLCJmaWxlcGF0aCIsIkFycmF5IiwiaXNBcnJheSIsImpvaW4iLCJ2YWxpZGF0ZURpcmVjdG9yeSIsImRpcmVjdG9yeSIsImluY2x1ZGVzIiwic3RhcnRzV2l0aCIsImVuZHNXaXRoIiwiZmlyc3RTZWdtZW50Iiwic3BsaXQiLCJkaXJSZWdleCIsInRlc3QiLCJjb25maWciLCJDb25maWciLCJhcHBJZCIsImVycm9yIiwiY3JlYXRlU2FuaXRpemVkSHR0cEVycm9yIiwic3RhdHVzIiwianNvbiIsIm1lc3NhZ2UiLCJmaWxlbmFtZSIsImZpbGVzQ29udHJvbGxlciIsIm1pbWUiLCJjb250ZW50VHlwZSIsImdldFR5cGUiLCJmaWxlIiwiRmlsZSIsImJhc2U2NCIsInRyaWdnZXJSZXN1bHQiLCJtYXliZVJ1bkZpbGVUcmlnZ2VyIiwiVHlwZXMiLCJiZWZvcmVGaW5kIiwiYXV0aCIsIl9uYW1lIiwiaXNGaWxlU3RyZWFtYWJsZSIsImhhbmRsZUZpbGVTdHJlYW0iLCJjYXRjaCIsImVuZCIsImRhdGEiLCJnZXRGaWxlRGF0YSIsInRvU3RyaW5nIiwiYWZ0ZXJGaW5kIiwiZm9yY2VEb3dubG9hZCIsIkJ1ZmZlciIsImZyb20iLCJfZGF0YSIsInJlc29sdmVFcnJvciIsImNvZGUiLCJTQ1JJUFRfRkFJTEVEIiwicmF3UGFyc2VyIiwicmF3IiwidHlwZSIsImxpbWl0IiwiX21heFVwbG9hZFNpemVCeXRlcyIsInBhcnNlU2l6ZVRvQnl0ZXMiLCJ1c2VyIiwiaXNNYXN0ZXIiLCJpc0xpbmtlZCIsIkFub255bW91c1V0aWxzIiwiZmlsZVVwbG9hZCIsImVuYWJsZUZvckFub255bW91c1VzZXIiLCJlbmFibGVGb3JBdXRoZW50aWNhdGVkVXNlciIsImVuYWJsZUZvclB1YmxpYyIsInZhbGlkYXRlRmlsZW5hbWUiLCJmaWxlRXh0ZW5zaW9ucyIsImlzVmFsaWRFeHRlbnNpb24iLCJleHRlbnNpb24iLCJzb21lIiwiZXh0IiwicmVnZXgiLCJSZWdFeHAiLCJzdWJzdHJpbmciLCJsYXN0SW5kZXhPZiIsImZpbGVEYXRhIiwicGFyc2VkIiwiSlNPTiIsInBhcnNlIiwibWV0YWRhdGEiLCJJTlZBTElEX0pTT04iLCJ0YWdzIiwidW5kZWZpbmVkIiwiT1BFUkFUSU9OX0ZPUkJJRERFTiIsImRpcmVjdG9yeUVycm9yIiwiYm9keSIsIl9oYW5kbGVCdWZmZXJlZFVwbG9hZCIsIl9oYW5kbGVTdHJlYW1VcGxvYWQiLCJjaGVja1Byb2hpYml0ZWRLZXl3b3JkcyIsIklOVkFMSURfS0VZX05BTUUiLCJzZXRUYWdzIiwic2V0TWV0YWRhdGEiLCJzZXREaXJlY3RvcnkiLCJmaWxlU2l6ZSIsImJ5dGVMZW5ndGgiLCJmaWxlT2JqZWN0IiwiYmVmb3JlU2F2ZSIsInNhdmVSZXN1bHQiLCJ1cmwiLCJuYW1lIiwiYnVmZmVyRGF0YSIsIl9zb3VyY2UiLCJmb3JtYXQiLCJidWZmZXIiLCJmaWxlT3B0aW9ucyIsIl9tZXRhZGF0YSIsImZpbGVUYWdzIiwia2V5cyIsIl90YWdzIiwiYXNzaWduIiwiX2RpcmVjdG9yeSIsImNyZWF0ZUZpbGVSZXN1bHQiLCJjcmVhdGVGaWxlIiwiX3VybCIsIl9yZXF1ZXN0VGFzayIsIl9wcmV2aW91c1NhdmUiLCJQcm9taXNlIiwicmVzb2x2ZSIsImFmdGVyU2F2ZSIsImxvZ2dlciIsInN0cmVhbSIsImNvbnRlbnRMZW5ndGgiLCJwYXJzZUludCIsImhhc0V4dGVuc2lvbiIsInNvdXJjZVR5cGUiLCJhZGFwdGVyIiwiZ2V0RmlsZUxvY2F0aW9uIiwiYmVmb3JlRGVsZXRlIiwiZGVsZXRlRmlsZSIsImFmdGVyRGVsZXRlIiwiRklMRV9ERUxFVEVfRVJST1IiLCJnZXRNZXRhZGF0YSIsInJhbmdlIiwic3RhcnQiLCJOdW1iZXIiLCJpc05hTiJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9Sb3V0ZXJzL0ZpbGVzUm91dGVyLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBleHByZXNzIGZyb20gJ2V4cHJlc3MnO1xuaW1wb3J0ICogYXMgTWlkZGxld2FyZXMgZnJvbSAnLi4vbWlkZGxld2FyZXMnO1xuaW1wb3J0IFBhcnNlIGZyb20gJ3BhcnNlL25vZGUnO1xuaW1wb3J0IENvbmZpZyBmcm9tICcuLi9Db25maWcnO1xuaW1wb3J0IGxvZ2dlciBmcm9tICcuLi9sb2dnZXInO1xuY29uc3QgdHJpZ2dlcnMgPSByZXF1aXJlKCcuLi90cmlnZ2VycycpO1xuY29uc3QgVXRpbHMgPSByZXF1aXJlKCcuLi9VdGlscycpO1xuaW1wb3J0IHsgUmVhZGFibGUgfSBmcm9tICdzdHJlYW0nO1xuaW1wb3J0IHsgY3JlYXRlU2FuaXRpemVkSHR0cEVycm9yIH0gZnJvbSAnLi4vRXJyb3InO1xuXG4vKipcbiAqIFdyYXBzIGEgcmVhZGFibGUgc3RyZWFtIGluIGEgUmVhZGFibGUgdGhhdCBlbmZvcmNlcyBhIGJ5dGUgc2l6ZSBsaW1pdC5cbiAqIERhdGEgZmxvdyBpcyBsYXp5OiB0aGUgc291cmNlIGlzIG5vdCByZWFkIHVudGlsIGEgY29uc3VtZXIgc3RhcnRzIHJlYWRpbmdcbiAqIGZyb20gdGhlIHJldHVybmVkIHN0cmVhbSAodmlhIHBpcGUgb3IgJ2RhdGEnIGxpc3RlbmVyKS4gVGhpcyBlbnN1cmVzIHRoZVxuICogY29uc3VtZXIncyBlcnJvciBsaXN0ZW5lciBpcyBhdHRhY2hlZCBiZWZvcmUgYW55IGRhdGEgKG9yIGVycm9yKSBpcyBlbWl0dGVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlU2l6ZUxpbWl0ZWRTdHJlYW0oc291cmNlLCBtYXhCeXRlcykge1xuICBsZXQgdG90YWxCeXRlcyA9IDA7XG4gIGxldCBzdGFydGVkID0gZmFsc2U7XG4gIGxldCBzb3VyY2VFbmRlZCA9IGZhbHNlO1xuICBsZXQgb25EYXRhLCBvbkVuZCwgb25FcnJvcjtcblxuICBjb25zdCBvdXRwdXQgPSBuZXcgUmVhZGFibGUoe1xuICAgIHJlYWQoKSB7XG4gICAgICBpZiAoIXN0YXJ0ZWQpIHtcbiAgICAgICAgc3RhcnRlZCA9IHRydWU7XG5cbiAgICAgICAgb25EYXRhID0gKGNodW5rKSA9PiB7XG4gICAgICAgICAgdG90YWxCeXRlcyArPSBjaHVuay5sZW5ndGg7XG4gICAgICAgICAgaWYgKHRvdGFsQnl0ZXMgPiBtYXhCeXRlcykge1xuICAgICAgICAgICAgb3V0cHV0LmRlc3Ryb3koXG4gICAgICAgICAgICAgIG5ldyBQYXJzZS5FcnJvcihcbiAgICAgICAgICAgICAgICBQYXJzZS5FcnJvci5GSUxFX1NBVkVfRVJST1IsXG4gICAgICAgICAgICAgICAgYEZpbGUgc2l6ZSBleGNlZWRzIG1heGltdW0gYWxsb3dlZDogJHttYXhCeXRlc30gYnl0ZXMuYFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoIW91dHB1dC5wdXNoKGNodW5rKSkge1xuICAgICAgICAgICAgc291cmNlLnBhdXNlKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIG9uRW5kID0gKCkgPT4ge1xuICAgICAgICAgIHNvdXJjZUVuZGVkID0gdHJ1ZTtcbiAgICAgICAgICBvdXRwdXQucHVzaChudWxsKTtcbiAgICAgICAgfTtcblxuICAgICAgICBvbkVycm9yID0gKGVycikgPT4gb3V0cHV0LmRlc3Ryb3koZXJyKTtcblxuICAgICAgICBzb3VyY2Uub24oJ2RhdGEnLCBvbkRhdGEpO1xuICAgICAgICBzb3VyY2Uub24oJ2VuZCcsIG9uRW5kKTtcbiAgICAgICAgc291cmNlLm9uKCdlcnJvcicsIG9uRXJyb3IpO1xuICAgICAgfVxuXG4gICAgICAvLyBSZXN1bWUgc291cmNlIGluIGNhc2UgaXQgd2FzIHBhdXNlZCBkdWUgdG8gYmFja3ByZXNzdXJlXG4gICAgICBpZiAoIXNvdXJjZUVuZGVkKSB7XG4gICAgICAgIHNvdXJjZS5yZXN1bWUoKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGRlc3Ryb3koZXJyLCBjYWxsYmFjaykge1xuICAgICAgaWYgKG9uRGF0YSkge1xuICAgICAgICBzb3VyY2UucmVtb3ZlTGlzdGVuZXIoJ2RhdGEnLCBvbkRhdGEpO1xuICAgICAgfVxuICAgICAgaWYgKG9uRW5kKSB7XG4gICAgICAgIHNvdXJjZS5yZW1vdmVMaXN0ZW5lcignZW5kJywgb25FbmQpO1xuICAgICAgfVxuICAgICAgaWYgKG9uRXJyb3IpIHtcbiAgICAgICAgc291cmNlLnJlbW92ZUxpc3RlbmVyKCdlcnJvcicsIG9uRXJyb3IpO1xuICAgICAgfVxuICAgICAgLy8gU3VwcHJlc3MgZXJyb3JzIGVtaXR0ZWQgZHVyaW5nIGRyYWluIChlLmcuIGNsaWVudCBkaXNjb25uZWN0KVxuICAgICAgc291cmNlLm9uKCdlcnJvcicsICgpID0+IHt9KTtcbiAgICAgIGlmICghc291cmNlRW5kZWQpIHtcbiAgICAgICAgc291cmNlLnJlc3VtZSgpO1xuICAgICAgfVxuICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBvdXRwdXQ7XG59XG5cbi8vIFNlZ21lbnRzIHRoYXQgY29uZmxpY3Qgd2l0aCBzdWItcm91dGVzIHVuZGVyIEdFVCAvZmlsZXMvOmFwcElkLyouIElmIGEgZmlsZVxuLy8gZGlyZWN0b3J5IHN0YXJ0cyB3aXRoIG9uZSBvZiB0aGVzZSwgaXRzIFVSTCB3b3VsZCBtYXRjaCB0aGUgd3Jvbmcgcm91dGVcbi8vIGhhbmRsZXIuIFVwZGF0ZSB0aGlzIGxpc3Qgd2hlbiBhZGRpbmcgbmV3IHN1Yi1yb3V0ZXMgdG8gZXhwcmVzc1JvdXRlcigpLlxuZXhwb3J0IGNvbnN0IFJFU0VSVkVEX0RJUkVDVE9SWV9TRUdNRU5UUyA9IFsnbWV0YWRhdGEnXTtcblxuZXhwb3J0IGNsYXNzIEZpbGVzUm91dGVyIHtcbiAgZXhwcmVzc1JvdXRlcih7IG1heFVwbG9hZFNpemUgPSAnMjBNYicgfSA9IHt9KSB7XG4gICAgdmFyIHJvdXRlciA9IGV4cHJlc3MuUm91dGVyKCk7XG4gICAgLy8gTWV0YWRhdGEgcm91dGUgbXVzdCBjb21lIGJlZm9yZSB0aGUgY2F0Y2gtYWxsIEdFVCByb3V0ZVxuICAgIHJvdXRlci5nZXQoJy9maWxlcy86YXBwSWQvbWV0YWRhdGEvKmZpbGVwYXRoJywgdGhpcy5tZXRhZGF0YUhhbmRsZXIpO1xuICAgIHJvdXRlci5nZXQoJy9maWxlcy86YXBwSWQvKmZpbGVwYXRoJywgdGhpcy5nZXRIYW5kbGVyKTtcblxuICAgIHJvdXRlci5wb3N0KCcvZmlsZXMnLCBmdW5jdGlvbiAocmVxLCByZXMsIG5leHQpIHtcbiAgICAgIG5leHQobmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLklOVkFMSURfRklMRV9OQU1FLCAnRmlsZW5hbWUgbm90IHByb3ZpZGVkLicpKTtcbiAgICB9KTtcblxuICAgIHJvdXRlci5wb3N0KFxuICAgICAgJy9maWxlcy86ZmlsZW5hbWUnLFxuICAgICAgdGhpcy5fYm9keVBhcnNpbmdNaWRkbGV3YXJlKG1heFVwbG9hZFNpemUpLFxuICAgICAgTWlkZGxld2FyZXMuaGFuZGxlUGFyc2VIZWFkZXJzLFxuICAgICAgTWlkZGxld2FyZXMuaGFuZGxlUGFyc2VTZXNzaW9uLFxuICAgICAgdGhpcy5jcmVhdGVIYW5kbGVyLmJpbmQodGhpcylcbiAgICApO1xuXG4gICAgcm91dGVyLmRlbGV0ZShcbiAgICAgICcvZmlsZXMvKmZpbGVwYXRoJyxcbiAgICAgIE1pZGRsZXdhcmVzLmhhbmRsZVBhcnNlSGVhZGVycyxcbiAgICAgIE1pZGRsZXdhcmVzLmhhbmRsZVBhcnNlU2Vzc2lvbixcbiAgICAgIE1pZGRsZXdhcmVzLmVuZm9yY2VNYXN0ZXJLZXlBY2Nlc3MsXG4gICAgICB0aGlzLmRlbGV0ZUhhbmRsZXJcbiAgICApO1xuICAgIHJldHVybiByb3V0ZXI7XG4gIH1cblxuICBzdGF0aWMgX2dldEZpbGVuYW1lRnJvbVBhcmFtcyhyZXEpIHtcbiAgICBjb25zdCBwYXJ0cyA9IHJlcS5wYXJhbXMuZmlsZXBhdGg7XG4gICAgcmV0dXJuIEFycmF5LmlzQXJyYXkocGFydHMpID8gcGFydHMuam9pbignLycpIDogcGFydHM7XG4gIH1cblxuICBzdGF0aWMgdmFsaWRhdGVEaXJlY3RvcnkoZGlyZWN0b3J5KSB7XG4gICAgaWYgKHR5cGVvZiBkaXJlY3RvcnkgIT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gbmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLklOVkFMSURfRklMRV9OQU1FLCAnRGlyZWN0b3J5IG11c3QgYmUgYSBzdHJpbmcuJyk7XG4gICAgfVxuICAgIGlmIChkaXJlY3RvcnkubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gbmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLklOVkFMSURfRklMRV9OQU1FLCAnRGlyZWN0b3J5IG11c3Qgbm90IGJlIGVtcHR5LicpO1xuICAgIH1cbiAgICBpZiAoZGlyZWN0b3J5Lmxlbmd0aCA+IDI1Nikge1xuICAgICAgcmV0dXJuIG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5JTlZBTElEX0ZJTEVfTkFNRSwgJ0RpcmVjdG9yeSBwYXRoIGlzIHRvbyBsb25nLicpO1xuICAgIH1cbiAgICBpZiAoZGlyZWN0b3J5LmluY2x1ZGVzKCcuLicpKSB7XG4gICAgICByZXR1cm4gbmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLklOVkFMSURfRklMRV9OQU1FLCAnRGlyZWN0b3J5IG11c3Qgbm90IGNvbnRhaW4gXCIuLlwiLicpO1xuICAgIH1cbiAgICBpZiAoZGlyZWN0b3J5LnN0YXJ0c1dpdGgoJy8nKSB8fCBkaXJlY3RvcnkuZW5kc1dpdGgoJy8nKSkge1xuICAgICAgcmV0dXJuIG5ldyBQYXJzZS5FcnJvcihcbiAgICAgICAgUGFyc2UuRXJyb3IuSU5WQUxJRF9GSUxFX05BTUUsXG4gICAgICAgICdEaXJlY3RvcnkgbXVzdCBub3Qgc3RhcnQgb3IgZW5kIHdpdGggXCIvXCIuJ1xuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKGRpcmVjdG9yeS5pbmNsdWRlcygnLy8nKSkge1xuICAgICAgcmV0dXJuIG5ldyBQYXJzZS5FcnJvcihcbiAgICAgICAgUGFyc2UuRXJyb3IuSU5WQUxJRF9GSUxFX05BTUUsXG4gICAgICAgICdEaXJlY3RvcnkgbXVzdCBub3QgY29udGFpbiBjb25zZWN1dGl2ZSBzbGFzaGVzLidcbiAgICAgICk7XG4gICAgfVxuICAgIGNvbnN0IGZpcnN0U2VnbWVudCA9IGRpcmVjdG9yeS5zcGxpdCgnLycpWzBdO1xuICAgIGlmIChSRVNFUlZFRF9ESVJFQ1RPUllfU0VHTUVOVFMuaW5jbHVkZXMoZmlyc3RTZWdtZW50KSkge1xuICAgICAgcmV0dXJuIG5ldyBQYXJzZS5FcnJvcihcbiAgICAgICAgUGFyc2UuRXJyb3IuSU5WQUxJRF9GSUxFX05BTUUsXG4gICAgICAgIGBEaXJlY3RvcnkgbXVzdCBub3Qgc3RhcnQgd2l0aCByZXNlcnZlZCBzZWdtZW50IFwiJHtmaXJzdFNlZ21lbnR9XCIuYFxuICAgICAgKTtcbiAgICB9XG4gICAgY29uc3QgZGlyUmVnZXggPSAvXlthLXpBLVowLTldW2EtekEtWjAtOV9cXC0vXSokLztcbiAgICBpZiAoIWRpclJlZ2V4LnRlc3QoZGlyZWN0b3J5KSkge1xuICAgICAgcmV0dXJuIG5ldyBQYXJzZS5FcnJvcihcbiAgICAgICAgUGFyc2UuRXJyb3IuSU5WQUxJRF9GSUxFX05BTUUsXG4gICAgICAgICdEaXJlY3RvcnkgY29udGFpbnMgaW52YWxpZCBjaGFyYWN0ZXJzLidcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgYXN5bmMgZ2V0SGFuZGxlcihyZXEsIHJlcykge1xuICAgIGNvbnN0IGNvbmZpZyA9IENvbmZpZy5nZXQocmVxLnBhcmFtcy5hcHBJZCk7XG4gICAgaWYgKCFjb25maWcpIHtcbiAgICAgIGNvbnN0IGVycm9yID0gY3JlYXRlU2FuaXRpemVkSHR0cEVycm9yKDQwMywgJ0ludmFsaWQgYXBwbGljYXRpb24gSUQuJywgY29uZmlnKTtcbiAgICAgIHJlcy5zdGF0dXMoZXJyb3Iuc3RhdHVzKTtcbiAgICAgIHJlcy5qc29uKHsgZXJyb3I6IGVycm9yLm1lc3NhZ2UgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IGZpbGVuYW1lID0gRmlsZXNSb3V0ZXIuX2dldEZpbGVuYW1lRnJvbVBhcmFtcyhyZXEpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBmaWxlc0NvbnRyb2xsZXIgPSBjb25maWcuZmlsZXNDb250cm9sbGVyO1xuICAgICAgY29uc3QgbWltZSA9IChhd2FpdCBpbXBvcnQoJ21pbWUnKSkuZGVmYXVsdDtcbiAgICAgIGxldCBjb250ZW50VHlwZSA9IG1pbWUuZ2V0VHlwZShmaWxlbmFtZSk7XG4gICAgICBsZXQgZmlsZSA9IG5ldyBQYXJzZS5GaWxlKGZpbGVuYW1lLCB7IGJhc2U2NDogJycgfSwgY29udGVudFR5cGUpO1xuICAgICAgY29uc3QgdHJpZ2dlclJlc3VsdCA9IGF3YWl0IHRyaWdnZXJzLm1heWJlUnVuRmlsZVRyaWdnZXIoXG4gICAgICAgIHRyaWdnZXJzLlR5cGVzLmJlZm9yZUZpbmQsXG4gICAgICAgIHsgZmlsZSB9LFxuICAgICAgICBjb25maWcsXG4gICAgICAgIHJlcS5hdXRoXG4gICAgICApO1xuICAgICAgaWYgKHRyaWdnZXJSZXN1bHQ/LmZpbGU/Ll9uYW1lKSB7XG4gICAgICAgIGZpbGVuYW1lID0gdHJpZ2dlclJlc3VsdD8uZmlsZT8uX25hbWU7XG4gICAgICAgIGNvbnRlbnRUeXBlID0gbWltZS5nZXRUeXBlKGZpbGVuYW1lKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGlzRmlsZVN0cmVhbWFibGUocmVxLCBmaWxlc0NvbnRyb2xsZXIpKSB7XG4gICAgICAgIGZpbGVzQ29udHJvbGxlci5oYW5kbGVGaWxlU3RyZWFtKGNvbmZpZywgZmlsZW5hbWUsIHJlcSwgcmVzLCBjb250ZW50VHlwZSkuY2F0Y2goKCkgPT4ge1xuICAgICAgICAgIHJlcy5zdGF0dXMoNDA0KTtcbiAgICAgICAgICByZXMuc2V0KCdDb250ZW50LVR5cGUnLCAndGV4dC9wbGFpbicpO1xuICAgICAgICAgIHJlcy5lbmQoJ0ZpbGUgbm90IGZvdW5kLicpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBsZXQgZGF0YSA9IGF3YWl0IGZpbGVzQ29udHJvbGxlci5nZXRGaWxlRGF0YShjb25maWcsIGZpbGVuYW1lKS5jYXRjaCgoKSA9PiB7XG4gICAgICAgIHJlcy5zdGF0dXMoNDA0KTtcbiAgICAgICAgcmVzLnNldCgnQ29udGVudC1UeXBlJywgJ3RleHQvcGxhaW4nKTtcbiAgICAgICAgcmVzLmVuZCgnRmlsZSBub3QgZm91bmQuJyk7XG4gICAgICB9KTtcbiAgICAgIGlmICghZGF0YSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBmaWxlID0gbmV3IFBhcnNlLkZpbGUoZmlsZW5hbWUsIHsgYmFzZTY0OiBkYXRhLnRvU3RyaW5nKCdiYXNlNjQnKSB9LCBjb250ZW50VHlwZSk7XG4gICAgICBjb25zdCBhZnRlckZpbmQgPSBhd2FpdCB0cmlnZ2Vycy5tYXliZVJ1bkZpbGVUcmlnZ2VyKFxuICAgICAgICB0cmlnZ2Vycy5UeXBlcy5hZnRlckZpbmQsXG4gICAgICAgIHsgZmlsZSwgZm9yY2VEb3dubG9hZDogZmFsc2UgfSxcbiAgICAgICAgY29uZmlnLFxuICAgICAgICByZXEuYXV0aFxuICAgICAgKTtcblxuICAgICAgaWYgKGFmdGVyRmluZD8uZmlsZSkge1xuICAgICAgICBjb250ZW50VHlwZSA9IG1pbWUuZ2V0VHlwZShhZnRlckZpbmQuZmlsZS5fbmFtZSk7XG4gICAgICAgIGRhdGEgPSBCdWZmZXIuZnJvbShhZnRlckZpbmQuZmlsZS5fZGF0YSwgJ2Jhc2U2NCcpO1xuICAgICAgfVxuXG4gICAgICByZXMuc3RhdHVzKDIwMCk7XG4gICAgICByZXMuc2V0KCdDb250ZW50LVR5cGUnLCBjb250ZW50VHlwZSk7XG4gICAgICByZXMuc2V0KCdDb250ZW50LUxlbmd0aCcsIGRhdGEubGVuZ3RoKTtcbiAgICAgIGlmIChhZnRlckZpbmQuZm9yY2VEb3dubG9hZCkge1xuICAgICAgICByZXMuc2V0KCdDb250ZW50LURpc3Bvc2l0aW9uJywgYGF0dGFjaG1lbnQ7ZmlsZW5hbWU9JHthZnRlckZpbmQuZmlsZS5fbmFtZX1gKTtcbiAgICAgIH1cbiAgICAgIHJlcy5lbmQoZGF0YSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc3QgZXJyID0gdHJpZ2dlcnMucmVzb2x2ZUVycm9yKGUsIHtcbiAgICAgICAgY29kZTogUGFyc2UuRXJyb3IuU0NSSVBUX0ZBSUxFRCxcbiAgICAgICAgbWVzc2FnZTogYENvdWxkIG5vdCBmaW5kIGZpbGU6ICR7ZmlsZW5hbWV9LmAsXG4gICAgICB9KTtcbiAgICAgIHJlcy5zdGF0dXMoNDAzKTtcbiAgICAgIHJlcy5qc29uKHsgY29kZTogZXJyLmNvZGUsIGVycm9yOiBlcnIubWVzc2FnZSB9KTtcbiAgICB9XG4gIH1cblxuICBfYm9keVBhcnNpbmdNaWRkbGV3YXJlKG1heFVwbG9hZFNpemUpIHtcbiAgICBjb25zdCByYXdQYXJzZXIgPSBleHByZXNzLnJhdyh7XG4gICAgICB0eXBlOiAoKSA9PiB0cnVlLFxuICAgICAgbGltaXQ6IG1heFVwbG9hZFNpemUsXG4gICAgfSk7XG4gICAgcmV0dXJuIChyZXEsIHJlcywgbmV4dCkgPT4ge1xuICAgICAgaWYgKHJlcS5nZXQoJ1gtUGFyc2UtVXBsb2FkLU1vZGUnKSA9PT0gJ3N0cmVhbScpIHtcbiAgICAgICAgcmVxLl9tYXhVcGxvYWRTaXplQnl0ZXMgPSBVdGlscy5wYXJzZVNpemVUb0J5dGVzKG1heFVwbG9hZFNpemUpO1xuICAgICAgICByZXR1cm4gbmV4dCgpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJhd1BhcnNlcihyZXEsIHJlcywgbmV4dCk7XG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIGNyZWF0ZUhhbmRsZXIocmVxLCByZXMsIG5leHQpIHtcbiAgICBjb25zdCBjb25maWcgPSByZXEuY29uZmlnO1xuICAgIGNvbnN0IHVzZXIgPSByZXEuYXV0aC51c2VyO1xuICAgIGNvbnN0IGlzTWFzdGVyID0gcmVxLmF1dGguaXNNYXN0ZXI7XG4gICAgY29uc3QgaXNMaW5rZWQgPSB1c2VyICYmIFBhcnNlLkFub255bW91c1V0aWxzLmlzTGlua2VkKHVzZXIpO1xuICAgIGlmICghaXNNYXN0ZXIgJiYgIWNvbmZpZy5maWxlVXBsb2FkLmVuYWJsZUZvckFub255bW91c1VzZXIgJiYgaXNMaW5rZWQpIHtcbiAgICAgIG5leHQoXG4gICAgICAgIG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5GSUxFX1NBVkVfRVJST1IsICdGaWxlIHVwbG9hZCBieSBhbm9ueW1vdXMgdXNlciBpcyBkaXNhYmxlZC4nKVxuICAgICAgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCFpc01hc3RlciAmJiAhY29uZmlnLmZpbGVVcGxvYWQuZW5hYmxlRm9yQXV0aGVudGljYXRlZFVzZXIgJiYgIWlzTGlua2VkICYmIHVzZXIpIHtcbiAgICAgIG5leHQoXG4gICAgICAgIG5ldyBQYXJzZS5FcnJvcihcbiAgICAgICAgICBQYXJzZS5FcnJvci5GSUxFX1NBVkVfRVJST1IsXG4gICAgICAgICAgJ0ZpbGUgdXBsb2FkIGJ5IGF1dGhlbnRpY2F0ZWQgdXNlciBpcyBkaXNhYmxlZC4nXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICghaXNNYXN0ZXIgJiYgIWNvbmZpZy5maWxlVXBsb2FkLmVuYWJsZUZvclB1YmxpYyAmJiAhdXNlcikge1xuICAgICAgbmV4dChuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuRklMRV9TQVZFX0VSUk9SLCAnRmlsZSB1cGxvYWQgYnkgcHVibGljIGlzIGRpc2FibGVkLicpKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgZmlsZXNDb250cm9sbGVyID0gY29uZmlnLmZpbGVzQ29udHJvbGxlcjtcbiAgICBjb25zdCB7IGZpbGVuYW1lIH0gPSByZXEucGFyYW1zO1xuICAgIGNvbnN0IGNvbnRlbnRUeXBlID0gcmVxLmdldCgnQ29udGVudC10eXBlJyk7XG5cbiAgICBjb25zdCBlcnJvciA9IGZpbGVzQ29udHJvbGxlci52YWxpZGF0ZUZpbGVuYW1lKGZpbGVuYW1lKTtcbiAgICBpZiAoZXJyb3IpIHtcbiAgICAgIG5leHQoZXJyb3IpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGZpbGVFeHRlbnNpb25zID0gY29uZmlnLmZpbGVVcGxvYWQ/LmZpbGVFeHRlbnNpb25zO1xuICAgIGlmICghaXNNYXN0ZXIgJiYgZmlsZUV4dGVuc2lvbnMpIHtcbiAgICAgIGNvbnN0IGlzVmFsaWRFeHRlbnNpb24gPSBleHRlbnNpb24gPT4ge1xuICAgICAgICByZXR1cm4gZmlsZUV4dGVuc2lvbnMuc29tZShleHQgPT4ge1xuICAgICAgICAgIGlmIChleHQgPT09ICcqJykge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IHJlZ2V4ID0gbmV3IFJlZ0V4cChleHQpO1xuICAgICAgICAgIGlmIChyZWdleC50ZXN0KGV4dGVuc2lvbikpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgICAgbGV0IGV4dGVuc2lvbiA9IGNvbnRlbnRUeXBlO1xuICAgICAgaWYgKGZpbGVuYW1lICYmIGZpbGVuYW1lLmluY2x1ZGVzKCcuJykpIHtcbiAgICAgICAgZXh0ZW5zaW9uID0gZmlsZW5hbWUuc3Vic3RyaW5nKGZpbGVuYW1lLmxhc3RJbmRleE9mKCcuJykgKyAxKTtcbiAgICAgIH0gZWxzZSBpZiAoY29udGVudFR5cGUgJiYgY29udGVudFR5cGUuaW5jbHVkZXMoJy8nKSkge1xuICAgICAgICBleHRlbnNpb24gPSBjb250ZW50VHlwZS5zcGxpdCgnLycpWzFdO1xuICAgICAgfVxuICAgICAgZXh0ZW5zaW9uID0gZXh0ZW5zaW9uPy5zcGxpdCgnICcpPy5qb2luKCcnKTtcblxuICAgICAgaWYgKGV4dGVuc2lvbiAmJiAhaXNWYWxpZEV4dGVuc2lvbihleHRlbnNpb24pKSB7XG4gICAgICAgIG5leHQoXG4gICAgICAgICAgbmV3IFBhcnNlLkVycm9yKFxuICAgICAgICAgICAgUGFyc2UuRXJyb3IuRklMRV9TQVZFX0VSUk9SLFxuICAgICAgICAgICAgYEZpbGUgdXBsb2FkIG9mIGV4dGVuc2lvbiAke2V4dGVuc2lvbn0gaXMgZGlzYWJsZWQuYFxuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEZvciBzdHJlYW1pbmcgdXBsb2FkcywgcmVhZCBmaWxlIGRhdGEgZnJvbSBoZWFkZXJzIHNpbmNlIHRoZSBib2R5IGlzIHRoZSByYXcgc3RyZWFtXG4gICAgaWYgKHJlcS5nZXQoJ1gtUGFyc2UtVXBsb2FkLU1vZGUnKSA9PT0gJ3N0cmVhbScpIHtcbiAgICAgIHJlcS5maWxlRGF0YSA9IHt9O1xuICAgICAgaWYgKHJlcS5nZXQoJ1gtUGFyc2UtRmlsZS1EaXJlY3RvcnknKSkge1xuICAgICAgICByZXEuZmlsZURhdGEuZGlyZWN0b3J5ID0gcmVxLmdldCgnWC1QYXJzZS1GaWxlLURpcmVjdG9yeScpO1xuICAgICAgfVxuICAgICAgaWYgKHJlcS5nZXQoJ1gtUGFyc2UtRmlsZS1NZXRhZGF0YScpKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgcGFyc2VkID0gSlNPTi5wYXJzZShyZXEuZ2V0KCdYLVBhcnNlLUZpbGUtTWV0YWRhdGEnKSk7XG4gICAgICAgICAgaWYgKCFwYXJzZWQgfHwgdHlwZW9mIHBhcnNlZCAhPT0gJ29iamVjdCcgfHwgQXJyYXkuaXNBcnJheShwYXJzZWQpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmVxLmZpbGVEYXRhLm1ldGFkYXRhID0gcGFyc2VkO1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICBuZXh0KG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5JTlZBTElEX0pTT04sICdJbnZhbGlkIEpTT04gaW4gWC1QYXJzZS1GaWxlLU1ldGFkYXRhIGhlYWRlci4nKSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAocmVxLmdldCgnWC1QYXJzZS1GaWxlLVRhZ3MnKSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHBhcnNlZCA9IEpTT04ucGFyc2UocmVxLmdldCgnWC1QYXJzZS1GaWxlLVRhZ3MnKSk7XG4gICAgICAgICAgaWYgKCFwYXJzZWQgfHwgdHlwZW9mIHBhcnNlZCAhPT0gJ29iamVjdCcgfHwgQXJyYXkuaXNBcnJheShwYXJzZWQpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmVxLmZpbGVEYXRhLnRhZ3MgPSBwYXJzZWQ7XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgIG5leHQobmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLklOVkFMSURfSlNPTiwgJ0ludmFsaWQgSlNPTiBpbiBYLVBhcnNlLUZpbGUtVGFncyBoZWFkZXIuJykpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFZhbGlkYXRlIGRpcmVjdG9yeSBvcHRpb24gKHJlcXVpcmVzIG1hc3RlciBrZXkpXG4gICAgY29uc3QgZGlyZWN0b3J5ID0gcmVxLmZpbGVEYXRhPy5kaXJlY3Rvcnk7XG4gICAgaWYgKGRpcmVjdG9yeSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAoIWlzTWFzdGVyKSB7XG4gICAgICAgIG5leHQoXG4gICAgICAgICAgbmV3IFBhcnNlLkVycm9yKFxuICAgICAgICAgICAgUGFyc2UuRXJyb3IuT1BFUkFUSU9OX0ZPUkJJRERFTixcbiAgICAgICAgICAgICdEaXJlY3RvcnkgY2FuIG9ubHkgYmUgc2V0IHVzaW5nIHRoZSBNYXN0ZXIgS2V5LidcbiAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGRpcmVjdG9yeUVycm9yID0gRmlsZXNSb3V0ZXIudmFsaWRhdGVEaXJlY3RvcnkoZGlyZWN0b3J5KTtcbiAgICAgIGlmIChkaXJlY3RvcnlFcnJvcikge1xuICAgICAgICBuZXh0KGRpcmVjdG9yeUVycm9yKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIERpc3BhdGNoIHRvIHRoZSBhcHByb3ByaWF0ZSBoYW5kbGVyIGJhc2VkIG9uIHdoZXRoZXIgdGhlIGJvZHkgd2FzIGJ1ZmZlcmVkXG4gICAgaWYgKHJlcS5ib2R5IGluc3RhbmNlb2YgQnVmZmVyKSB7XG4gICAgICByZXR1cm4gdGhpcy5faGFuZGxlQnVmZmVyZWRVcGxvYWQocmVxLCByZXMsIG5leHQpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5faGFuZGxlU3RyZWFtVXBsb2FkKHJlcSwgcmVzLCBuZXh0KTtcbiAgfVxuXG4gIGFzeW5jIF9oYW5kbGVCdWZmZXJlZFVwbG9hZChyZXEsIHJlcywgbmV4dCkge1xuICAgIGNvbnN0IGNvbmZpZyA9IHJlcS5jb25maWc7XG4gICAgY29uc3QgZmlsZXNDb250cm9sbGVyID0gY29uZmlnLmZpbGVzQ29udHJvbGxlcjtcbiAgICBjb25zdCB7IGZpbGVuYW1lIH0gPSByZXEucGFyYW1zO1xuICAgIGNvbnN0IGNvbnRlbnRUeXBlID0gcmVxLmdldCgnQ29udGVudC10eXBlJyk7XG5cbiAgICBpZiAoIXJlcS5ib2R5IHx8ICFyZXEuYm9keS5sZW5ndGgpIHtcbiAgICAgIG5leHQobmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLkZJTEVfU0FWRV9FUlJPUiwgJ0ludmFsaWQgZmlsZSB1cGxvYWQuJykpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGJhc2U2NCA9IHJlcS5ib2R5LnRvU3RyaW5nKCdiYXNlNjQnKTtcbiAgICBjb25zdCBmaWxlID0gbmV3IFBhcnNlLkZpbGUoZmlsZW5hbWUsIHsgYmFzZTY0IH0sIGNvbnRlbnRUeXBlKTtcbiAgICBjb25zdCB7IG1ldGFkYXRhID0ge30sIHRhZ3MgPSB7fSwgZGlyZWN0b3J5IH0gPSByZXEuZmlsZURhdGEgfHwge307XG4gICAgdHJ5IHtcbiAgICAgIC8vIFNjYW4gcmVxdWVzdCBkYXRhIGZvciBkZW5pZWQga2V5d29yZHNcbiAgICAgIFV0aWxzLmNoZWNrUHJvaGliaXRlZEtleXdvcmRzKGNvbmZpZywgbWV0YWRhdGEpO1xuICAgICAgVXRpbHMuY2hlY2tQcm9oaWJpdGVkS2V5d29yZHMoY29uZmlnLCB0YWdzKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbmV4dChuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuSU5WQUxJRF9LRVlfTkFNRSwgZXJyb3IpKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZmlsZS5zZXRUYWdzKHRhZ3MpO1xuICAgIGZpbGUuc2V0TWV0YWRhdGEobWV0YWRhdGEpO1xuICAgIGlmIChkaXJlY3RvcnkpIHtcbiAgICAgIGZpbGUuc2V0RGlyZWN0b3J5KGRpcmVjdG9yeSk7XG4gICAgfVxuICAgIGNvbnN0IGZpbGVTaXplID0gQnVmZmVyLmJ5dGVMZW5ndGgocmVxLmJvZHkpO1xuICAgIGNvbnN0IGZpbGVPYmplY3QgPSB7IGZpbGUsIGZpbGVTaXplIH07XG4gICAgdHJ5IHtcbiAgICAgIC8vIHJ1biBiZWZvcmVTYXZlRmlsZSB0cmlnZ2VyXG4gICAgICBjb25zdCB0cmlnZ2VyUmVzdWx0ID0gYXdhaXQgdHJpZ2dlcnMubWF5YmVSdW5GaWxlVHJpZ2dlcihcbiAgICAgICAgdHJpZ2dlcnMuVHlwZXMuYmVmb3JlU2F2ZSxcbiAgICAgICAgZmlsZU9iamVjdCxcbiAgICAgICAgY29uZmlnLFxuICAgICAgICByZXEuYXV0aFxuICAgICAgKTtcbiAgICAgIGxldCBzYXZlUmVzdWx0O1xuICAgICAgLy8gaWYgYSBuZXcgUGFyc2VGaWxlIGlzIHJldHVybmVkIGNoZWNrIGlmIGl0J3MgYW4gYWxyZWFkeSBzYXZlZCBmaWxlXG4gICAgICBpZiAodHJpZ2dlclJlc3VsdCBpbnN0YW5jZW9mIFBhcnNlLkZpbGUpIHtcbiAgICAgICAgZmlsZU9iamVjdC5maWxlID0gdHJpZ2dlclJlc3VsdDtcbiAgICAgICAgaWYgKHRyaWdnZXJSZXN1bHQudXJsKCkpIHtcbiAgICAgICAgICAvLyBzZXQgZmlsZVNpemUgdG8gbnVsbCBiZWNhdXNlIHdlIHdvbnQga25vdyBob3cgYmlnIGl0IGlzIGhlcmVcbiAgICAgICAgICBmaWxlT2JqZWN0LmZpbGVTaXplID0gbnVsbDtcbiAgICAgICAgICBzYXZlUmVzdWx0ID0ge1xuICAgICAgICAgICAgdXJsOiB0cmlnZ2VyUmVzdWx0LnVybCgpLFxuICAgICAgICAgICAgbmFtZTogdHJpZ2dlclJlc3VsdC5fbmFtZSxcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvLyBpZiB0aGUgZmlsZSByZXR1cm5lZCBieSB0aGUgdHJpZ2dlciBoYXMgYWxyZWFkeSBiZWVuIHNhdmVkIHNraXAgc2F2aW5nIGFueXRoaW5nXG4gICAgICBpZiAoIXNhdmVSZXN1bHQpIHtcbiAgICAgICAgLy8gdXBkYXRlIGZpbGVTaXplXG4gICAgICAgIGxldCBidWZmZXJEYXRhO1xuICAgICAgICBpZiAoZmlsZU9iamVjdC5maWxlLl9zb3VyY2U/LmZvcm1hdCA9PT0gJ2J1ZmZlcicpIHtcbiAgICAgICAgICBidWZmZXJEYXRhID0gZmlsZU9iamVjdC5maWxlLl9zb3VyY2UuYnVmZmVyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGJ1ZmZlckRhdGEgPSBCdWZmZXIuZnJvbShmaWxlT2JqZWN0LmZpbGUuX2RhdGEsICdiYXNlNjQnKTtcbiAgICAgICAgfVxuICAgICAgICBmaWxlT2JqZWN0LmZpbGVTaXplID0gQnVmZmVyLmJ5dGVMZW5ndGgoYnVmZmVyRGF0YSk7XG4gICAgICAgIC8vIHByZXBhcmUgZmlsZSBvcHRpb25zXG4gICAgICAgIGNvbnN0IGZpbGVPcHRpb25zID0ge1xuICAgICAgICAgIG1ldGFkYXRhOiBmaWxlT2JqZWN0LmZpbGUuX21ldGFkYXRhLFxuICAgICAgICB9O1xuICAgICAgICAvLyBzb21lIHMzLWNvbXBhdGlibGUgcHJvdmlkZXJzIChEaWdpdGFsT2NlYW4sIExpbm9kZSkgZG8gbm90IGFjY2VwdCB0YWdzXG4gICAgICAgIC8vIHNvIHdlIGRvIG5vdCBpbmNsdWRlIHRoZSB0YWdzIG9wdGlvbiBpZiBpdCBpcyBlbXB0eS5cbiAgICAgICAgY29uc3QgZmlsZVRhZ3MgPVxuICAgICAgICAgIE9iamVjdC5rZXlzKGZpbGVPYmplY3QuZmlsZS5fdGFncykubGVuZ3RoID4gMCA/IHsgdGFnczogZmlsZU9iamVjdC5maWxlLl90YWdzIH0gOiB7fTtcbiAgICAgICAgT2JqZWN0LmFzc2lnbihmaWxlT3B0aW9ucywgZmlsZVRhZ3MpO1xuICAgICAgICAvLyBpbmNsdWRlIGRpcmVjdG9yeSBpZiBzZXQgKGZyb20gY2xpZW50IHJlcXVlc3Qgb3IgYmVmb3JlU2F2ZUZpbGUgdHJpZ2dlcilcbiAgICAgICAgaWYgKGZpbGVPYmplY3QuZmlsZS5fZGlyZWN0b3J5KSB7XG4gICAgICAgICAgZmlsZU9wdGlvbnMuZGlyZWN0b3J5ID0gZmlsZU9iamVjdC5maWxlLl9kaXJlY3Rvcnk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gc2F2ZSBmaWxlXG4gICAgICAgIGNvbnN0IGNyZWF0ZUZpbGVSZXN1bHQgPSBhd2FpdCBmaWxlc0NvbnRyb2xsZXIuY3JlYXRlRmlsZShcbiAgICAgICAgICBjb25maWcsXG4gICAgICAgICAgZmlsZU9iamVjdC5maWxlLl9uYW1lLFxuICAgICAgICAgIGJ1ZmZlckRhdGEsXG4gICAgICAgICAgZmlsZU9iamVjdC5maWxlLl9zb3VyY2UudHlwZSxcbiAgICAgICAgICBmaWxlT3B0aW9uc1xuICAgICAgICApO1xuICAgICAgICAvLyB1cGRhdGUgZmlsZSB3aXRoIG5ldyBkYXRhXG4gICAgICAgIGZpbGVPYmplY3QuZmlsZS5fbmFtZSA9IGNyZWF0ZUZpbGVSZXN1bHQubmFtZTtcbiAgICAgICAgZmlsZU9iamVjdC5maWxlLl91cmwgPSBjcmVhdGVGaWxlUmVzdWx0LnVybDtcbiAgICAgICAgZmlsZU9iamVjdC5maWxlLl9yZXF1ZXN0VGFzayA9IG51bGw7XG4gICAgICAgIGZpbGVPYmplY3QuZmlsZS5fcHJldmlvdXNTYXZlID0gUHJvbWlzZS5yZXNvbHZlKGZpbGVPYmplY3QuZmlsZSk7XG4gICAgICAgIHNhdmVSZXN1bHQgPSB7XG4gICAgICAgICAgdXJsOiBjcmVhdGVGaWxlUmVzdWx0LnVybCxcbiAgICAgICAgICBuYW1lOiBjcmVhdGVGaWxlUmVzdWx0Lm5hbWUsXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICAvLyBydW4gYWZ0ZXJTYXZlRmlsZSB0cmlnZ2VyXG4gICAgICBhd2FpdCB0cmlnZ2Vycy5tYXliZVJ1bkZpbGVUcmlnZ2VyKHRyaWdnZXJzLlR5cGVzLmFmdGVyU2F2ZSwgZmlsZU9iamVjdCwgY29uZmlnLCByZXEuYXV0aCk7XG4gICAgICByZXMuc3RhdHVzKDIwMSk7XG4gICAgICByZXMuc2V0KCdMb2NhdGlvbicsIHNhdmVSZXN1bHQudXJsKTtcbiAgICAgIHJlcy5qc29uKHNhdmVSZXN1bHQpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGxvZ2dlci5lcnJvcignRXJyb3IgY3JlYXRpbmcgYSBmaWxlOiAnLCBlKTtcbiAgICAgIGNvbnN0IGVycm9yID0gdHJpZ2dlcnMucmVzb2x2ZUVycm9yKGUsIHtcbiAgICAgICAgY29kZTogUGFyc2UuRXJyb3IuRklMRV9TQVZFX0VSUk9SLFxuICAgICAgICBtZXNzYWdlOiBgQ291bGQgbm90IHN0b3JlIGZpbGU6ICR7ZmlsZU9iamVjdC5maWxlLl9uYW1lfS5gLFxuICAgICAgfSk7XG4gICAgICBuZXh0KGVycm9yKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBfaGFuZGxlU3RyZWFtVXBsb2FkKHJlcSwgcmVzLCBuZXh0KSB7XG4gICAgY29uc3QgY29uZmlnID0gcmVxLmNvbmZpZztcbiAgICBjb25zdCBmaWxlc0NvbnRyb2xsZXIgPSBjb25maWcuZmlsZXNDb250cm9sbGVyO1xuICAgIGNvbnN0IHsgZmlsZW5hbWUgfSA9IHJlcS5wYXJhbXM7XG4gICAgbGV0IGNvbnRlbnRUeXBlID0gcmVxLmdldCgnQ29udGVudC1UeXBlJyk7XG4gICAgY29uc3QgbWF4Qnl0ZXMgPSByZXEuX21heFVwbG9hZFNpemVCeXRlcztcbiAgICBsZXQgc3RyZWFtO1xuXG4gICAgdHJ5IHtcbiAgICAgIC8vIEVhcmx5IHJlamVjdGlvbiB2aWEgQ29udGVudC1MZW5ndGggaGVhZGVyXG4gICAgICBjb25zdCBjb250ZW50TGVuZ3RoID0gcmVxLmdldCgnQ29udGVudC1MZW5ndGgnKTtcbiAgICAgIGlmIChjb250ZW50TGVuZ3RoICYmIHBhcnNlSW50KGNvbnRlbnRMZW5ndGgsIDEwKSA+IG1heEJ5dGVzKSB7XG4gICAgICAgIHJlcS5yZXN1bWUoKTtcbiAgICAgICAgbmV4dChuZXcgUGFyc2UuRXJyb3IoXG4gICAgICAgICAgUGFyc2UuRXJyb3IuRklMRV9TQVZFX0VSUk9SLFxuICAgICAgICAgIGBGaWxlIHNpemUgZXhjZWVkcyBtYXhpbXVtIGFsbG93ZWQ6ICR7bWF4Qnl0ZXN9IGJ5dGVzLmBcbiAgICAgICAgKSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgbWltZSA9IChhd2FpdCBpbXBvcnQoJ21pbWUnKSkuZGVmYXVsdDtcblxuICAgICAgLy8gSW5mZXIgY29udGVudCB0eXBlIGZyb20gZXh0ZW5zaW9uIG9yIGFkZCBleHRlbnNpb24gZnJvbSBjb250ZW50IHR5cGVcbiAgICAgIGNvbnN0IGhhc0V4dGVuc2lvbiA9IGZpbGVuYW1lICYmIGZpbGVuYW1lLmluY2x1ZGVzKCcuJyk7XG4gICAgICBpZiAoaGFzRXh0ZW5zaW9uICYmICFjb250ZW50VHlwZSkge1xuICAgICAgICBjb250ZW50VHlwZSA9IG1pbWUuZ2V0VHlwZShmaWxlbmFtZSk7XG4gICAgICB9IGVsc2UgaWYgKCFoYXNFeHRlbnNpb24gJiYgY29udGVudFR5cGUpIHtcbiAgICAgICAgLy8gZXh0ZW5zaW9uIHdpbGwgYmUgYWRkZWQgYnkgZmlsZXNDb250cm9sbGVyLmNyZWF0ZUZpbGVcbiAgICAgIH1cblxuICAgICAgLy8gQ3JlYXRlIHNpemUtbGltaXRlZCBzdHJlYW0gd3JhcHBpbmcgdGhlIHJlcXVlc3RcbiAgICAgIHN0cmVhbSA9IGNyZWF0ZVNpemVMaW1pdGVkU3RyZWFtKHJlcSwgbWF4Qnl0ZXMpO1xuXG4gICAgICAvLyBCdWlsZCBhIFBhcnNlLkZpbGUgd2l0aCBubyBfZGF0YSAoc3RyZWFtaW5nIG1vZGUpXG4gICAgICBjb25zdCBmaWxlID0gbmV3IFBhcnNlLkZpbGUoZmlsZW5hbWUsIHsgYmFzZTY0OiAnJyB9LCBjb250ZW50VHlwZSk7XG4gICAgICBjb25zdCB7IG1ldGFkYXRhID0ge30sIHRhZ3MgPSB7fSwgZGlyZWN0b3J5IH0gPSByZXEuZmlsZURhdGEgfHwge307XG5cbiAgICAgIC8vIFZhbGlkYXRlIG1ldGFkYXRhIGFuZCB0YWdzIGZvciBwcm9oaWJpdGVkIGtleXdvcmRzXG4gICAgICB0cnkge1xuICAgICAgICBVdGlscy5jaGVja1Byb2hpYml0ZWRLZXl3b3Jkcyhjb25maWcsIG1ldGFkYXRhKTtcbiAgICAgICAgVXRpbHMuY2hlY2tQcm9oaWJpdGVkS2V5d29yZHMoY29uZmlnLCB0YWdzKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIHN0cmVhbS5kZXN0cm95KCk7XG4gICAgICAgIG5leHQobmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLklOVkFMSURfS0VZX05BTUUsIGVycm9yKSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgZmlsZS5zZXRUYWdzKHRhZ3MpO1xuICAgICAgZmlsZS5zZXRNZXRhZGF0YShtZXRhZGF0YSk7XG4gICAgICBpZiAoZGlyZWN0b3J5KSB7XG4gICAgICAgIGZpbGUuc2V0RGlyZWN0b3J5KGRpcmVjdG9yeSk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGZpbGVTaXplID0gcmVxLmdldCgnQ29udGVudC1MZW5ndGgnKVxuICAgICAgICA/IHBhcnNlSW50KHJlcS5nZXQoJ0NvbnRlbnQtTGVuZ3RoJyksIDEwKVxuICAgICAgICA6IG51bGw7XG4gICAgICBjb25zdCBmaWxlT2JqZWN0ID0geyBmaWxlLCBmaWxlU2l6ZSwgc3RyZWFtOiB0cnVlIH07XG5cbiAgICAgIC8vIFJ1biBiZWZvcmVTYXZlRmlsZSB0cmlnZ2VyXG4gICAgICBjb25zdCB0cmlnZ2VyUmVzdWx0ID0gYXdhaXQgdHJpZ2dlcnMubWF5YmVSdW5GaWxlVHJpZ2dlcihcbiAgICAgICAgdHJpZ2dlcnMuVHlwZXMuYmVmb3JlU2F2ZSxcbiAgICAgICAgZmlsZU9iamVjdCxcbiAgICAgICAgY29uZmlnLFxuICAgICAgICByZXEuYXV0aFxuICAgICAgKTtcblxuICAgICAgbGV0IHNhdmVSZXN1bHQ7XG4gICAgICAvLyBJZiBhIG5ldyBQYXJzZUZpbGUgaXMgcmV0dXJuZWQsIGNoZWNrIGlmIGl0J3MgYW4gYWxyZWFkeSBzYXZlZCBmaWxlXG4gICAgICBpZiAodHJpZ2dlclJlc3VsdCBpbnN0YW5jZW9mIFBhcnNlLkZpbGUpIHtcbiAgICAgICAgZmlsZU9iamVjdC5maWxlID0gdHJpZ2dlclJlc3VsdDtcbiAgICAgICAgaWYgKHRyaWdnZXJSZXN1bHQudXJsKCkpIHtcbiAgICAgICAgICBmaWxlT2JqZWN0LmZpbGVTaXplID0gbnVsbDtcbiAgICAgICAgICBzYXZlUmVzdWx0ID0ge1xuICAgICAgICAgICAgdXJsOiB0cmlnZ2VyUmVzdWx0LnVybCgpLFxuICAgICAgICAgICAgbmFtZTogdHJpZ2dlclJlc3VsdC5fbmFtZSxcbiAgICAgICAgICB9O1xuICAgICAgICAgIC8vIERlc3Ryb3kgc3RyZWFtIHRvIHJlbW92ZSBsaXN0ZW5lcnMgYW5kIGRyYWluIHJlcXVlc3RcbiAgICAgICAgICBzdHJlYW0uZGVzdHJveSgpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIElmIHRoZSBmaWxlIHJldHVybmVkIGJ5IHRoZSB0cmlnZ2VyIGhhcyBhbHJlYWR5IGJlZW4gc2F2ZWQsIHNraXAgc2F2aW5nXG4gICAgICBpZiAoIXNhdmVSZXN1bHQpIHtcbiAgICAgICAgLy8gUHJlcGFyZSBmaWxlIG9wdGlvbnNcbiAgICAgICAgY29uc3QgZmlsZU9wdGlvbnMgPSB7XG4gICAgICAgICAgbWV0YWRhdGE6IGZpbGVPYmplY3QuZmlsZS5fbWV0YWRhdGEsXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGZpbGVUYWdzID1cbiAgICAgICAgICBPYmplY3Qua2V5cyhmaWxlT2JqZWN0LmZpbGUuX3RhZ3MpLmxlbmd0aCA+IDAgPyB7IHRhZ3M6IGZpbGVPYmplY3QuZmlsZS5fdGFncyB9IDoge307XG4gICAgICAgIE9iamVjdC5hc3NpZ24oZmlsZU9wdGlvbnMsIGZpbGVUYWdzKTtcbiAgICAgICAgLy8gaW5jbHVkZSBkaXJlY3RvcnkgaWYgc2V0IChmcm9tIGNsaWVudCByZXF1ZXN0IG9yIGJlZm9yZVNhdmVGaWxlIHRyaWdnZXIpXG4gICAgICAgIGlmIChmaWxlT2JqZWN0LmZpbGUuX2RpcmVjdG9yeSkge1xuICAgICAgICAgIGZpbGVPcHRpb25zLmRpcmVjdG9yeSA9IGZpbGVPYmplY3QuZmlsZS5fZGlyZWN0b3J5O1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gUGFzcyBzdHJlYW0gZGlyZWN0bHkgdG8gZmlsZXNDb250cm9sbGVyIOKAlCBpdCB3aWxsIGJ1ZmZlciBpZiBhZGFwdGVyIGRvZXNuJ3Qgc3VwcG9ydCBzdHJlYW1pbmdcbiAgICAgICAgY29uc3Qgc291cmNlVHlwZSA9IGZpbGVPYmplY3QuZmlsZS5fc291cmNlPy50eXBlIHx8IGNvbnRlbnRUeXBlO1xuICAgICAgICBjb25zdCBjcmVhdGVGaWxlUmVzdWx0ID0gYXdhaXQgZmlsZXNDb250cm9sbGVyLmNyZWF0ZUZpbGUoXG4gICAgICAgICAgY29uZmlnLFxuICAgICAgICAgIGZpbGVPYmplY3QuZmlsZS5fbmFtZSxcbiAgICAgICAgICBzdHJlYW0sXG4gICAgICAgICAgc291cmNlVHlwZSxcbiAgICAgICAgICBmaWxlT3B0aW9uc1xuICAgICAgICApO1xuXG4gICAgICAgIC8vIFVwZGF0ZSBmaWxlIHdpdGggbmV3IGRhdGFcbiAgICAgICAgZmlsZU9iamVjdC5maWxlLl9uYW1lID0gY3JlYXRlRmlsZVJlc3VsdC5uYW1lO1xuICAgICAgICBmaWxlT2JqZWN0LmZpbGUuX3VybCA9IGNyZWF0ZUZpbGVSZXN1bHQudXJsO1xuICAgICAgICBmaWxlT2JqZWN0LmZpbGUuX3JlcXVlc3RUYXNrID0gbnVsbDtcbiAgICAgICAgZmlsZU9iamVjdC5maWxlLl9wcmV2aW91c1NhdmUgPSBQcm9taXNlLnJlc29sdmUoZmlsZU9iamVjdC5maWxlKTtcbiAgICAgICAgc2F2ZVJlc3VsdCA9IHtcbiAgICAgICAgICB1cmw6IGNyZWF0ZUZpbGVSZXN1bHQudXJsLFxuICAgICAgICAgIG5hbWU6IGNyZWF0ZUZpbGVSZXN1bHQubmFtZSxcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgLy8gUnVuIGFmdGVyU2F2ZUZpbGUgdHJpZ2dlclxuICAgICAgYXdhaXQgdHJpZ2dlcnMubWF5YmVSdW5GaWxlVHJpZ2dlcih0cmlnZ2Vycy5UeXBlcy5hZnRlclNhdmUsIGZpbGVPYmplY3QsIGNvbmZpZywgcmVxLmF1dGgpO1xuICAgICAgcmVzLnN0YXR1cygyMDEpO1xuICAgICAgcmVzLnNldCgnTG9jYXRpb24nLCBzYXZlUmVzdWx0LnVybCk7XG4gICAgICByZXMuanNvbihzYXZlUmVzdWx0KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvLyBEZXN0cm95IHN0cmVhbSB0byByZW1vdmUgbGlzdGVuZXJzIGFuZCBkcmFpbiByZXF1ZXN0LCBvciByZXN1bWUgZGlyZWN0bHlcbiAgICAgIGlmIChzdHJlYW0pIHtcbiAgICAgICAgc3RyZWFtLmRlc3Ryb3koKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlcS5yZXN1bWUoKTtcbiAgICAgIH1cbiAgICAgIGxvZ2dlci5lcnJvcignRXJyb3IgY3JlYXRpbmcgYSBmaWxlOiAnLCBlKTtcbiAgICAgIGNvbnN0IGVycm9yID0gdHJpZ2dlcnMucmVzb2x2ZUVycm9yKGUsIHtcbiAgICAgICAgY29kZTogUGFyc2UuRXJyb3IuRklMRV9TQVZFX0VSUk9SLFxuICAgICAgICBtZXNzYWdlOiBgQ291bGQgbm90IHN0b3JlIGZpbGU6ICR7ZmlsZW5hbWV9LmAsXG4gICAgICB9KTtcbiAgICAgIG5leHQoZXJyb3IpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZUhhbmRsZXIocmVxLCByZXMsIG5leHQpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgeyBmaWxlc0NvbnRyb2xsZXIgfSA9IHJlcS5jb25maWc7XG4gICAgICBjb25zdCBmaWxlbmFtZSA9IEZpbGVzUm91dGVyLl9nZXRGaWxlbmFtZUZyb21QYXJhbXMocmVxKTtcbiAgICAgIC8vIHJ1biBiZWZvcmVEZWxldGVGaWxlIHRyaWdnZXJcbiAgICAgIGNvbnN0IGZpbGUgPSBuZXcgUGFyc2UuRmlsZShmaWxlbmFtZSk7XG4gICAgICBmaWxlLl91cmwgPSBhd2FpdCBmaWxlc0NvbnRyb2xsZXIuYWRhcHRlci5nZXRGaWxlTG9jYXRpb24ocmVxLmNvbmZpZywgZmlsZW5hbWUpO1xuICAgICAgY29uc3QgZmlsZU9iamVjdCA9IHsgZmlsZSwgZmlsZVNpemU6IG51bGwgfTtcbiAgICAgIGF3YWl0IHRyaWdnZXJzLm1heWJlUnVuRmlsZVRyaWdnZXIoXG4gICAgICAgIHRyaWdnZXJzLlR5cGVzLmJlZm9yZURlbGV0ZSxcbiAgICAgICAgZmlsZU9iamVjdCxcbiAgICAgICAgcmVxLmNvbmZpZyxcbiAgICAgICAgcmVxLmF1dGhcbiAgICAgICk7XG4gICAgICAvLyBkZWxldGUgZmlsZVxuICAgICAgYXdhaXQgZmlsZXNDb250cm9sbGVyLmRlbGV0ZUZpbGUocmVxLmNvbmZpZywgZmlsZW5hbWUpO1xuICAgICAgLy8gcnVuIGFmdGVyRGVsZXRlRmlsZSB0cmlnZ2VyXG4gICAgICBhd2FpdCB0cmlnZ2Vycy5tYXliZVJ1bkZpbGVUcmlnZ2VyKFxuICAgICAgICB0cmlnZ2Vycy5UeXBlcy5hZnRlckRlbGV0ZSxcbiAgICAgICAgZmlsZU9iamVjdCxcbiAgICAgICAgcmVxLmNvbmZpZyxcbiAgICAgICAgcmVxLmF1dGhcbiAgICAgICk7XG4gICAgICByZXMuc3RhdHVzKDIwMCk7XG4gICAgICAvLyBUT0RPOiByZXR1cm4gdXNlZnVsIEpTT04gaGVyZT9cbiAgICAgIHJlcy5lbmQoKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoJ0Vycm9yIGRlbGV0aW5nIGEgZmlsZTogJywgZSk7XG4gICAgICBjb25zdCBlcnJvciA9IHRyaWdnZXJzLnJlc29sdmVFcnJvcihlLCB7XG4gICAgICAgIGNvZGU6IFBhcnNlLkVycm9yLkZJTEVfREVMRVRFX0VSUk9SLFxuICAgICAgICBtZXNzYWdlOiAnQ291bGQgbm90IGRlbGV0ZSBmaWxlLicsXG4gICAgICB9KTtcbiAgICAgIG5leHQoZXJyb3IpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIG1ldGFkYXRhSGFuZGxlcihyZXEsIHJlcykge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBjb25maWcgPSBDb25maWcuZ2V0KHJlcS5wYXJhbXMuYXBwSWQpO1xuICAgICAgY29uc3QgeyBmaWxlc0NvbnRyb2xsZXIgfSA9IGNvbmZpZztcbiAgICAgIGNvbnN0IGZpbGVuYW1lID0gRmlsZXNSb3V0ZXIuX2dldEZpbGVuYW1lRnJvbVBhcmFtcyhyZXEpO1xuICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IGZpbGVzQ29udHJvbGxlci5nZXRNZXRhZGF0YShmaWxlbmFtZSk7XG4gICAgICByZXMuc3RhdHVzKDIwMCk7XG4gICAgICByZXMuanNvbihkYXRhKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJlcy5zdGF0dXMoMjAwKTtcbiAgICAgIHJlcy5qc29uKHt9KTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNGaWxlU3RyZWFtYWJsZShyZXEsIGZpbGVzQ29udHJvbGxlcikge1xuICBjb25zdCByYW5nZSA9IChyZXEuZ2V0KCdSYW5nZScpIHx8ICcvLS8nKS5zcGxpdCgnLScpO1xuICBjb25zdCBzdGFydCA9IE51bWJlcihyYW5nZVswXSk7XG4gIGNvbnN0IGVuZCA9IE51bWJlcihyYW5nZVsxXSk7XG4gIHJldHVybiAoXG4gICAgKCFpc05hTihzdGFydCkgfHwgIWlzTmFOKGVuZCkpICYmIHR5cGVvZiBmaWxlc0NvbnRyb2xsZXIuYWRhcHRlci5oYW5kbGVGaWxlU3RyZWFtID09PSAnZnVuY3Rpb24nXG4gICk7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQSxJQUFBQSxRQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxXQUFBLEdBQUFDLHVCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBRyxLQUFBLEdBQUFKLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBSSxPQUFBLEdBQUFMLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBSyxPQUFBLEdBQUFOLHNCQUFBLENBQUFDLE9BQUE7QUFHQSxJQUFBTSxPQUFBLEdBQUFOLE9BQUE7QUFDQSxJQUFBTyxNQUFBLEdBQUFQLE9BQUE7QUFBb0QsU0FBQUUsd0JBQUFNLENBQUEsRUFBQUMsQ0FBQSw2QkFBQUMsT0FBQSxNQUFBQyxDQUFBLE9BQUFELE9BQUEsSUFBQUUsQ0FBQSxPQUFBRixPQUFBLFlBQUFSLHVCQUFBLFlBQUFBLENBQUFNLENBQUEsRUFBQUMsQ0FBQSxTQUFBQSxDQUFBLElBQUFELENBQUEsSUFBQUEsQ0FBQSxDQUFBSyxVQUFBLFNBQUFMLENBQUEsTUFBQU0sQ0FBQSxFQUFBQyxDQUFBLEVBQUFDLENBQUEsS0FBQUMsU0FBQSxRQUFBQyxPQUFBLEVBQUFWLENBQUEsaUJBQUFBLENBQUEs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
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "parse-server",
3
- "version": "9.4.1-alpha.3",
3
+ "version": "9.5.0-alpha.1",
4
4
  "description": "An express module providing a Parse-compatible API server",
5
5
  "main": "lib/index.js",
6
6
  "repository": {
@@ -48,7 +48,7 @@
48
48
  "mongodb": "7.1.0",
49
49
  "mustache": "4.2.0",
50
50
  "otpauth": "9.4.0",
51
- "parse": "8.3.0",
51
+ "parse": "8.4.0",
52
52
  "path-to-regexp": "8.3.0",
53
53
  "pg-monitor": "3.1.0",
54
54
  "pg-promise": "12.6.0",