parse-server 9.9.1-alpha.9 → 9.10.0-alpha.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.
@@ -13,6 +13,9 @@ function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r
13
13
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
14
14
  class AggregateRouter extends _ClassesRouter.default {
15
15
  async handleFind(req) {
16
+ if (req.auth && req.auth.isReadOnly && req.config && !req.config.allowAggregationForReadOnlyMasterKey) {
17
+ throw new _node.default.Error(_node.default.Error.OPERATION_FORBIDDEN, 'Cannot run an aggregation pipeline when using the readOnlyMasterKey');
18
+ }
16
19
  const body = Object.assign(req.body || {}, _ClassesRouter.default.JSONFromQuery(req.query));
17
20
  const options = {};
18
21
  if (body.distinct) {
@@ -147,4 +150,4 @@ class AggregateRouter extends _ClassesRouter.default {
147
150
  }
148
151
  exports.AggregateRouter = AggregateRouter;
149
152
  var _default = exports.default = AggregateRouter;
150
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbm9kZSIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwibWlkZGxld2FyZSIsIl9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkIiwiX3Jlc3QiLCJfQ2xhc3Nlc1JvdXRlciIsIl9Vc2Vyc1JvdXRlciIsImUiLCJ0IiwiV2Vha01hcCIsInIiLCJuIiwiX19lc01vZHVsZSIsIm8iLCJpIiwiZiIsIl9fcHJvdG9fXyIsImRlZmF1bHQiLCJoYXMiLCJnZXQiLCJzZXQiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsIkFnZ3JlZ2F0ZVJvdXRlciIsIkNsYXNzZXNSb3V0ZXIiLCJoYW5kbGVGaW5kIiwicmVxIiwiYm9keSIsImFzc2lnbiIsIkpTT05Gcm9tUXVlcnkiLCJxdWVyeSIsIm9wdGlvbnMiLCJkaXN0aW5jdCIsIlN0cmluZyIsImhpbnQiLCJleHBsYWluIiwiY29tbWVudCIsInJlYWRQcmVmZXJlbmNlIiwicmF3VmFsdWVzIiwicmF3RmllbGROYW1lcyIsInF1ZXJ5T3B0aW9ucyIsImNvbmZpZyIsInVuZGVmaW5lZCIsImFnZ3JlZ2F0aW9uUmF3VmFsdWVzIiwiYWdncmVnYXRpb25SYXdGaWVsZE5hbWVzIiwicGlwZWxpbmUiLCJnZXRQaXBlbGluZSIsIndoZXJlIiwiSlNPTiIsInBhcnNlIiwiUGFyc2UiLCJFcnJvciIsIklOVkFMSURfSlNPTiIsInJlc3BvbnNlIiwicmVzdCIsImZpbmQiLCJhdXRoIiwiY2xhc3NOYW1lIiwiaW5mbyIsImNvbnRleHQiLCJyZXN1bHQiLCJyZXN1bHRzIiwiVXNlcnNSb3V0ZXIiLCJyZW1vdmVIaWRkZW5Qcm9wZXJ0aWVzIiwiSU5WQUxJRF9RVUVSWSIsIm1lc3NhZ2UiLCJBcnJheSIsImlzQXJyYXkiLCJrZXlzIiwiZmlsdGVyIiwia2V5IiwibWFwIiwic3RhZ2UiLCJsZW5ndGgiLCJqb2luIiwidHJhbnNmb3JtU3RhZ2UiLCJzdGFnZU5hbWUiLCJza2lwS2V5cyIsImluY2x1ZGVzIiwicHJvdG90eXBlIiwibW91bnRSb3V0ZXMiLCJyb3V0ZSIsInByb21pc2VFbmZvcmNlTWFzdGVyS2V5QWNjZXNzIiwiZXhwb3J0cyIsIl9kZWZhdWx0Il0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL1JvdXRlcnMvQWdncmVnYXRlUm91dGVyLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBQYXJzZSBmcm9tICdwYXJzZS9ub2RlJztcbmltcG9ydCAqIGFzIG1pZGRsZXdhcmUgZnJvbSAnLi4vbWlkZGxld2FyZXMnO1xuaW1wb3J0IHJlc3QgZnJvbSAnLi4vcmVzdCc7XG5pbXBvcnQgQ2xhc3Nlc1JvdXRlciBmcm9tICcuL0NsYXNzZXNSb3V0ZXInO1xuaW1wb3J0IFVzZXJzUm91dGVyIGZyb20gJy4vVXNlcnNSb3V0ZXInO1xuXG5leHBvcnQgY2xhc3MgQWdncmVnYXRlUm91dGVyIGV4dGVuZHMgQ2xhc3Nlc1JvdXRlciB7XG4gIGFzeW5jIGhhbmRsZUZpbmQocmVxKSB7XG4gICAgY29uc3QgYm9keSA9IE9iamVjdC5hc3NpZ24ocmVxLmJvZHkgfHwge30sIENsYXNzZXNSb3V0ZXIuSlNPTkZyb21RdWVyeShyZXEucXVlcnkpKTtcbiAgICBjb25zdCBvcHRpb25zID0ge307XG4gICAgaWYgKGJvZHkuZGlzdGluY3QpIHtcbiAgICAgIG9wdGlvbnMuZGlzdGluY3QgPSBTdHJpbmcoYm9keS5kaXN0aW5jdCk7XG4gICAgfVxuICAgIGlmIChib2R5LmhpbnQpIHtcbiAgICAgIG9wdGlvbnMuaGludCA9IGJvZHkuaGludDtcbiAgICAgIGRlbGV0ZSBib2R5LmhpbnQ7XG4gICAgfVxuICAgIGlmIChib2R5LmV4cGxhaW4pIHtcbiAgICAgIG9wdGlvbnMuZXhwbGFpbiA9IGJvZHkuZXhwbGFpbjtcbiAgICAgIGRlbGV0ZSBib2R5LmV4cGxhaW47XG4gICAgfVxuICAgIGlmIChib2R5LmNvbW1lbnQpIHtcbiAgICAgIG9wdGlvbnMuY29tbWVudCA9IGJvZHkuY29tbWVudDtcbiAgICAgIGRlbGV0ZSBib2R5LmNvbW1lbnQ7XG4gICAgfVxuICAgIGlmIChib2R5LnJlYWRQcmVmZXJlbmNlKSB7XG4gICAgICBvcHRpb25zLnJlYWRQcmVmZXJlbmNlID0gYm9keS5yZWFkUHJlZmVyZW5jZTtcbiAgICAgIGRlbGV0ZSBib2R5LnJlYWRQcmVmZXJlbmNlO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGJvZHkucmF3VmFsdWVzID09PSAnYm9vbGVhbicpIHtcbiAgICAgIG9wdGlvbnMucmF3VmFsdWVzID0gYm9keS5yYXdWYWx1ZXM7XG4gICAgICBkZWxldGUgYm9keS5yYXdWYWx1ZXM7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgYm9keS5yYXdGaWVsZE5hbWVzID09PSAnYm9vbGVhbicpIHtcbiAgICAgIG9wdGlvbnMucmF3RmllbGROYW1lcyA9IGJvZHkucmF3RmllbGROYW1lcztcbiAgICAgIGRlbGV0ZSBib2R5LnJhd0ZpZWxkTmFtZXM7XG4gICAgfVxuICAgIGNvbnN0IHF1ZXJ5T3B0aW9ucyA9IChyZXEuY29uZmlnICYmIHJlcS5jb25maWcucXVlcnkpIHx8IHt9O1xuICAgIGlmIChvcHRpb25zLnJhd1ZhbHVlcyA9PT0gdW5kZWZpbmVkICYmIHR5cGVvZiBxdWVyeU9wdGlvbnMuYWdncmVnYXRpb25SYXdWYWx1ZXMgPT09ICdib29sZWFuJykge1xuICAgICAgb3B0aW9ucy5yYXdWYWx1ZXMgPSBxdWVyeU9wdGlvbnMuYWdncmVnYXRpb25SYXdWYWx1ZXM7XG4gICAgfVxuICAgIGlmIChcbiAgICAgIG9wdGlvbnMucmF3RmllbGROYW1lcyA9PT0gdW5kZWZpbmVkICYmXG4gICAgICB0eXBlb2YgcXVlcnlPcHRpb25zLmFnZ3JlZ2F0aW9uUmF3RmllbGROYW1lcyA9PT0gJ2Jvb2xlYW4nXG4gICAgKSB7XG4gICAgICBvcHRpb25zLnJhd0ZpZWxkTmFtZXMgPSBxdWVyeU9wdGlvbnMuYWdncmVnYXRpb25SYXdGaWVsZE5hbWVzO1xuICAgIH1cbiAgICBvcHRpb25zLnBpcGVsaW5lID0gQWdncmVnYXRlUm91dGVyLmdldFBpcGVsaW5lKGJvZHkpO1xuICAgIGlmICh0eXBlb2YgYm9keS53aGVyZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGJvZHkud2hlcmUgPSBKU09OLnBhcnNlKGJvZHkud2hlcmUpO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5JTlZBTElEX0pTT04sICd3aGVyZSBwYXJhbWV0ZXIgaXMgbm90IHZhbGlkIEpTT04nKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgcmVzdC5maW5kKFxuICAgICAgICByZXEuY29uZmlnLFxuICAgICAgICByZXEuYXV0aCxcbiAgICAgICAgdGhpcy5jbGFzc05hbWUocmVxKSxcbiAgICAgICAgYm9keS53aGVyZSxcbiAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgcmVxLmluZm8uY29udGV4dFxuICAgICAgKTtcbiAgICAgIGlmICghb3B0aW9ucy5yYXdWYWx1ZXMgJiYgIW9wdGlvbnMucmF3RmllbGROYW1lcykge1xuICAgICAgICBmb3IgKGNvbnN0IHJlc3VsdCBvZiByZXNwb25zZS5yZXN1bHRzKSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiByZXN1bHQgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICBVc2Vyc1JvdXRlci5yZW1vdmVIaWRkZW5Qcm9wZXJ0aWVzKHJlc3VsdCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4geyByZXNwb25zZSB9O1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGlmIChlIGluc3RhbmNlb2YgUGFyc2UuRXJyb3IpIHtcbiAgICAgICAgdGhyb3cgZTtcbiAgICAgIH1cbiAgICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5JTlZBTElEX1FVRVJZLCBlLm1lc3NhZ2UpO1xuICAgIH1cbiAgfVxuXG4gIC8qIEJ1aWxkcyBhIHBpcGVsaW5lIGZyb20gdGhlIGJvZHkuIE9yaWdpbmFsbHkgdGhlIGJvZHkgY291bGQgYmUgcGFzc2VkIGFzIGEgc2luZ2xlIG9iamVjdCxcbiAgICogYW5kIG5vdyB3ZSBzdXBwb3J0IG1hbnkgb3B0aW9ucy5cbiAgICpcbiAgICogQXJyYXlcbiAgICpcbiAgICogYm9keTogW3tcbiAgICogICBncm91cDogeyBvYmplY3RJZDogJyRuYW1lJyB9LFxuICAgKiB9XVxuICAgKlxuICAgKiBPYmplY3RcbiAgICpcbiAgICogYm9keToge1xuICAgKiAgIGdyb3VwOiB7IG9iamVjdElkOiAnJG5hbWUnIH0sXG4gICAqIH1cbiAgICpcbiAgICpcbiAgICogUGlwZWxpbmUgT3BlcmF0b3Igd2l0aCBhbiBBcnJheSBvciBhbiBPYmplY3RcbiAgICpcbiAgICogYm9keToge1xuICAgKiAgIHBpcGVsaW5lOiB7XG4gICAqICAgICAkZ3JvdXA6IHsgb2JqZWN0SWQ6ICckbmFtZScgfSxcbiAgICogICB9XG4gICAqIH1cbiAgICpcbiAgICovXG4gIHN0YXRpYyBnZXRQaXBlbGluZShib2R5KSB7XG4gICAgbGV0IHBpcGVsaW5lID0gYm9keS5waXBlbGluZSB8fCBib2R5O1xuICAgIGlmICghQXJyYXkuaXNBcnJheShwaXBlbGluZSkpIHtcbiAgICAgIHBpcGVsaW5lID0gT2JqZWN0LmtleXMocGlwZWxpbmUpXG4gICAgICAgIC5maWx0ZXIoa2V5ID0+IHBpcGVsaW5lW2tleV0gIT09IHVuZGVmaW5lZClcbiAgICAgICAgLm1hcChrZXkgPT4ge1xuICAgICAgICAgIHJldHVybiB7IFtrZXldOiBwaXBlbGluZVtrZXldIH07XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBwaXBlbGluZS5tYXAoc3RhZ2UgPT4ge1xuICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHN0YWdlKTtcbiAgICAgIGlmIChrZXlzLmxlbmd0aCAhPT0gMSkge1xuICAgICAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoXG4gICAgICAgICAgUGFyc2UuRXJyb3IuSU5WQUxJRF9RVUVSWSxcbiAgICAgICAgICBgUGlwZWxpbmUgc3RhZ2VzIHNob3VsZCBvbmx5IGhhdmUgb25lIGtleSBidXQgZm91bmQgJHtrZXlzLmpvaW4oJywgJyl9LmBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBBZ2dyZWdhdGVSb3V0ZXIudHJhbnNmb3JtU3RhZ2Uoa2V5c1swXSwgc3RhZ2UpO1xuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIHRyYW5zZm9ybVN0YWdlKHN0YWdlTmFtZSwgc3RhZ2UpIHtcbiAgICBjb25zdCBza2lwS2V5cyA9IFsnZGlzdGluY3QnLCAnd2hlcmUnXTtcbiAgICBpZiAoc2tpcEtleXMuaW5jbHVkZXMoc3RhZ2VOYW1lKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoc3RhZ2VOYW1lWzBdICE9PSAnJCcpIHtcbiAgICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5JTlZBTElEX1FVRVJZLCBgSW52YWxpZCBhZ2dyZWdhdGUgc3RhZ2UgJyR7c3RhZ2VOYW1lfScuYCk7XG4gICAgfVxuICAgIGlmIChzdGFnZU5hbWUgPT09ICckZ3JvdXAnKSB7XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHN0YWdlW3N0YWdlTmFtZV0sICdvYmplY3RJZCcpKSB7XG4gICAgICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihcbiAgICAgICAgICBQYXJzZS5FcnJvci5JTlZBTElEX1FVRVJZLFxuICAgICAgICAgIGBDYW5ub3QgdXNlICdvYmplY3RJZCcgaW4gYWdncmVnYXRpb24gc3RhZ2UgJGdyb3VwLmBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHN0YWdlW3N0YWdlTmFtZV0sICdfaWQnKSkge1xuICAgICAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoXG4gICAgICAgICAgUGFyc2UuRXJyb3IuSU5WQUxJRF9RVUVSWSxcbiAgICAgICAgICBgSW52YWxpZCBwYXJhbWV0ZXIgZm9yIHF1ZXJ5OiBncm91cC4gTWlzc2luZyBrZXkgX2lkYFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4geyBbc3RhZ2VOYW1lXTogc3RhZ2Vbc3RhZ2VOYW1lXSB9O1xuICB9XG5cbiAgbW91bnRSb3V0ZXMoKSB7XG4gICAgdGhpcy5yb3V0ZSgnR0VUJywgJy9hZ2dyZWdhdGUvOmNsYXNzTmFtZScsIG1pZGRsZXdhcmUucHJvbWlzZUVuZm9yY2VNYXN0ZXJLZXlBY2Nlc3MsIHJlcSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5oYW5kbGVGaW5kKHJlcSk7XG4gICAgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQWdncmVnYXRlUm91dGVyO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxJQUFBQSxLQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxVQUFBLEdBQUFDLHVCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBRyxLQUFBLEdBQUFKLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBSSxjQUFBLEdBQUFMLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBSyxZQUFBLEdBQUFOLHNCQUFBLENBQUFDLE9BQUE7QUFBd0MsU0FBQUUsd0JBQUFJLENBQUEsRUFBQUMsQ0FBQSw2QkFBQUMsT0FBQSxNQUFBQyxDQUFBLE9BQUFELE9BQUEsSUFBQUUsQ0FBQSxPQUFBRixPQUFBLFlBQUFOLHVCQUFBLFlBQUFBLENBQUFJLENBQUEsRUFBQUMsQ0FBQSxTQUFBQSxDQUFBLElBQUFELENBQUEsSUFBQUEsQ0FBQSxDQUFBSyxVQUFBLFNBQUFMLENBQUEsTUFBQU0sQ0FBQSxFQUFBQyxDQUFBLEVBQUFDLENBQUEsS0FBQUMsU0FBQSxRQUFBQyxPQUFBLEVBQUFWLENBQUEsaUJBQUFBLENB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
153
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbm9kZSIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwibWlkZGxld2FyZSIsIl9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkIiwiX3Jlc3QiLCJfQ2xhc3Nlc1JvdXRlciIsIl9Vc2Vyc1JvdXRlciIsImUiLCJ0IiwiV2Vha01hcCIsInIiLCJuIiwiX19lc01vZHVsZSIsIm8iLCJpIiwiZiIsIl9fcHJvdG9fXyIsImRlZmF1bHQiLCJoYXMiLCJnZXQiLCJzZXQiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsIkFnZ3JlZ2F0ZVJvdXRlciIsIkNsYXNzZXNSb3V0ZXIiLCJoYW5kbGVGaW5kIiwicmVxIiwiYXV0aCIsImlzUmVhZE9ubHkiLCJjb25maWciLCJhbGxvd0FnZ3JlZ2F0aW9uRm9yUmVhZE9ubHlNYXN0ZXJLZXkiLCJQYXJzZSIsIkVycm9yIiwiT1BFUkFUSU9OX0ZPUkJJRERFTiIsImJvZHkiLCJhc3NpZ24iLCJKU09ORnJvbVF1ZXJ5IiwicXVlcnkiLCJvcHRpb25zIiwiZGlzdGluY3QiLCJTdHJpbmciLCJoaW50IiwiZXhwbGFpbiIsImNvbW1lbnQiLCJyZWFkUHJlZmVyZW5jZSIsInJhd1ZhbHVlcyIsInJhd0ZpZWxkTmFtZXMiLCJxdWVyeU9wdGlvbnMiLCJ1bmRlZmluZWQiLCJhZ2dyZWdhdGlvblJhd1ZhbHVlcyIsImFnZ3JlZ2F0aW9uUmF3RmllbGROYW1lcyIsInBpcGVsaW5lIiwiZ2V0UGlwZWxpbmUiLCJ3aGVyZSIsIkpTT04iLCJwYXJzZSIsIklOVkFMSURfSlNPTiIsInJlc3BvbnNlIiwicmVzdCIsImZpbmQiLCJjbGFzc05hbWUiLCJpbmZvIiwiY29udGV4dCIsInJlc3VsdCIsInJlc3VsdHMiLCJVc2Vyc1JvdXRlciIsInJlbW92ZUhpZGRlblByb3BlcnRpZXMiLCJJTlZBTElEX1FVRVJZIiwibWVzc2FnZSIsIkFycmF5IiwiaXNBcnJheSIsImtleXMiLCJmaWx0ZXIiLCJrZXkiLCJtYXAiLCJzdGFnZSIsImxlbmd0aCIsImpvaW4iLCJ0cmFuc2Zvcm1TdGFnZSIsInN0YWdlTmFtZSIsInNraXBLZXlzIiwiaW5jbHVkZXMiLCJwcm90b3R5cGUiLCJtb3VudFJvdXRlcyIsInJvdXRlIiwicHJvbWlzZUVuZm9yY2VNYXN0ZXJLZXlBY2Nlc3MiLCJleHBvcnRzIiwiX2RlZmF1bHQiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvUm91dGVycy9BZ2dyZWdhdGVSb3V0ZXIuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFBhcnNlIGZyb20gJ3BhcnNlL25vZGUnO1xuaW1wb3J0ICogYXMgbWlkZGxld2FyZSBmcm9tICcuLi9taWRkbGV3YXJlcyc7XG5pbXBvcnQgcmVzdCBmcm9tICcuLi9yZXN0JztcbmltcG9ydCBDbGFzc2VzUm91dGVyIGZyb20gJy4vQ2xhc3Nlc1JvdXRlcic7XG5pbXBvcnQgVXNlcnNSb3V0ZXIgZnJvbSAnLi9Vc2Vyc1JvdXRlcic7XG5cbmV4cG9ydCBjbGFzcyBBZ2dyZWdhdGVSb3V0ZXIgZXh0ZW5kcyBDbGFzc2VzUm91dGVyIHtcbiAgYXN5bmMgaGFuZGxlRmluZChyZXEpIHtcbiAgICBpZiAocmVxLmF1dGggJiYgcmVxLmF1dGguaXNSZWFkT25seSAmJiByZXEuY29uZmlnICYmICFyZXEuY29uZmlnLmFsbG93QWdncmVnYXRpb25Gb3JSZWFkT25seU1hc3RlcktleSkge1xuICAgICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFxuICAgICAgICBQYXJzZS5FcnJvci5PUEVSQVRJT05fRk9SQklEREVOLFxuICAgICAgICAnQ2Fubm90IHJ1biBhbiBhZ2dyZWdhdGlvbiBwaXBlbGluZSB3aGVuIHVzaW5nIHRoZSByZWFkT25seU1hc3RlcktleSdcbiAgICAgICk7XG4gICAgfVxuICAgIGNvbnN0IGJvZHkgPSBPYmplY3QuYXNzaWduKHJlcS5ib2R5IHx8IHt9LCBDbGFzc2VzUm91dGVyLkpTT05Gcm9tUXVlcnkocmVxLnF1ZXJ5KSk7XG4gICAgY29uc3Qgb3B0aW9ucyA9IHt9O1xuICAgIGlmIChib2R5LmRpc3RpbmN0KSB7XG4gICAgICBvcHRpb25zLmRpc3RpbmN0ID0gU3RyaW5nKGJvZHkuZGlzdGluY3QpO1xuICAgIH1cbiAgICBpZiAoYm9keS5oaW50KSB7XG4gICAgICBvcHRpb25zLmhpbnQgPSBib2R5LmhpbnQ7XG4gICAgICBkZWxldGUgYm9keS5oaW50O1xuICAgIH1cbiAgICBpZiAoYm9keS5leHBsYWluKSB7XG4gICAgICBvcHRpb25zLmV4cGxhaW4gPSBib2R5LmV4cGxhaW47XG4gICAgICBkZWxldGUgYm9keS5leHBsYWluO1xuICAgIH1cbiAgICBpZiAoYm9keS5jb21tZW50KSB7XG4gICAgICBvcHRpb25zLmNvbW1lbnQgPSBib2R5LmNvbW1lbnQ7XG4gICAgICBkZWxldGUgYm9keS5jb21tZW50O1xuICAgIH1cbiAgICBpZiAoYm9keS5yZWFkUHJlZmVyZW5jZSkge1xuICAgICAgb3B0aW9ucy5yZWFkUHJlZmVyZW5jZSA9IGJvZHkucmVhZFByZWZlcmVuY2U7XG4gICAgICBkZWxldGUgYm9keS5yZWFkUHJlZmVyZW5jZTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBib2R5LnJhd1ZhbHVlcyA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICBvcHRpb25zLnJhd1ZhbHVlcyA9IGJvZHkucmF3VmFsdWVzO1xuICAgICAgZGVsZXRlIGJvZHkucmF3VmFsdWVzO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGJvZHkucmF3RmllbGROYW1lcyA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICBvcHRpb25zLnJhd0ZpZWxkTmFtZXMgPSBib2R5LnJhd0ZpZWxkTmFtZXM7XG4gICAgICBkZWxldGUgYm9keS5yYXdGaWVsZE5hbWVzO1xuICAgIH1cbiAgICBjb25zdCBxdWVyeU9wdGlvbnMgPSAocmVxLmNvbmZpZyAmJiByZXEuY29uZmlnLnF1ZXJ5KSB8fCB7fTtcbiAgICBpZiAob3B0aW9ucy5yYXdWYWx1ZXMgPT09IHVuZGVmaW5lZCAmJiB0eXBlb2YgcXVlcnlPcHRpb25zLmFnZ3JlZ2F0aW9uUmF3VmFsdWVzID09PSAnYm9vbGVhbicpIHtcbiAgICAgIG9wdGlvbnMucmF3VmFsdWVzID0gcXVlcnlPcHRpb25zLmFnZ3JlZ2F0aW9uUmF3VmFsdWVzO1xuICAgIH1cbiAgICBpZiAoXG4gICAgICBvcHRpb25zLnJhd0ZpZWxkTmFtZXMgPT09IHVuZGVmaW5lZCAmJlxuICAgICAgdHlwZW9mIHF1ZXJ5T3B0aW9ucy5hZ2dyZWdhdGlvblJhd0ZpZWxkTmFtZXMgPT09ICdib29sZWFuJ1xuICAgICkge1xuICAgICAgb3B0aW9ucy5yYXdGaWVsZE5hbWVzID0gcXVlcnlPcHRpb25zLmFnZ3JlZ2F0aW9uUmF3RmllbGROYW1lcztcbiAgICB9XG4gICAgb3B0aW9ucy5waXBlbGluZSA9IEFnZ3JlZ2F0ZVJvdXRlci5nZXRQaXBlbGluZShib2R5KTtcbiAgICBpZiAodHlwZW9mIGJvZHkud2hlcmUgPT09ICdzdHJpbmcnKSB7XG4gICAgICB0cnkge1xuICAgICAgICBib2R5LndoZXJlID0gSlNPTi5wYXJzZShib2R5LndoZXJlKTtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuSU5WQUxJRF9KU09OLCAnd2hlcmUgcGFyYW1ldGVyIGlzIG5vdCB2YWxpZCBKU09OJyk7XG4gICAgICB9XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHJlc3QuZmluZChcbiAgICAgICAgcmVxLmNvbmZpZyxcbiAgICAgICAgcmVxLmF1dGgsXG4gICAgICAgIHRoaXMuY2xhc3NOYW1lKHJlcSksXG4gICAgICAgIGJvZHkud2hlcmUsXG4gICAgICAgIG9wdGlvbnMsXG4gICAgICAgIHJlcS5pbmZvLmNvbnRleHRcbiAgICAgICk7XG4gICAgICBpZiAoIW9wdGlvbnMucmF3VmFsdWVzICYmICFvcHRpb25zLnJhd0ZpZWxkTmFtZXMpIHtcbiAgICAgICAgZm9yIChjb25zdCByZXN1bHQgb2YgcmVzcG9uc2UucmVzdWx0cykge1xuICAgICAgICAgIGlmICh0eXBlb2YgcmVzdWx0ID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgVXNlcnNSb3V0ZXIucmVtb3ZlSGlkZGVuUHJvcGVydGllcyhyZXN1bHQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHsgcmVzcG9uc2UgfTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBpZiAoZSBpbnN0YW5jZW9mIFBhcnNlLkVycm9yKSB7XG4gICAgICAgIHRocm93IGU7XG4gICAgICB9XG4gICAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuSU5WQUxJRF9RVUVSWSwgZS5tZXNzYWdlKTtcbiAgICB9XG4gIH1cblxuICAvKiBCdWlsZHMgYSBwaXBlbGluZSBmcm9tIHRoZSBib2R5LiBPcmlnaW5hbGx5IHRoZSBib2R5IGNvdWxkIGJlIHBhc3NlZCBhcyBhIHNpbmdsZSBvYmplY3QsXG4gICAqIGFuZCBub3cgd2Ugc3VwcG9ydCBtYW55IG9wdGlvbnMuXG4gICAqXG4gICAqIEFycmF5XG4gICAqXG4gICAqIGJvZHk6IFt7XG4gICAqICAgZ3JvdXA6IHsgb2JqZWN0SWQ6ICckbmFtZScgfSxcbiAgICogfV1cbiAgICpcbiAgICogT2JqZWN0XG4gICAqXG4gICAqIGJvZHk6IHtcbiAgICogICBncm91cDogeyBvYmplY3RJZDogJyRuYW1lJyB9LFxuICAgKiB9XG4gICAqXG4gICAqXG4gICAqIFBpcGVsaW5lIE9wZXJhdG9yIHdpdGggYW4gQXJyYXkgb3IgYW4gT2JqZWN0XG4gICAqXG4gICAqIGJvZHk6IHtcbiAgICogICBwaXBlbGluZToge1xuICAgKiAgICAgJGdyb3VwOiB7IG9iamVjdElkOiAnJG5hbWUnIH0sXG4gICAqICAgfVxuICAgKiB9XG4gICAqXG4gICAqL1xuICBzdGF0aWMgZ2V0UGlwZWxpbmUoYm9keSkge1xuICAgIGxldCBwaXBlbGluZSA9IGJvZHkucGlwZWxpbmUgfHwgYm9keTtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkocGlwZWxpbmUpKSB7XG4gICAgICBwaXBlbGluZSA9IE9iamVjdC5rZXlzKHBpcGVsaW5lKVxuICAgICAgICAuZmlsdGVyKGtleSA9PiBwaXBlbGluZVtrZXldICE9PSB1bmRlZmluZWQpXG4gICAgICAgIC5tYXAoa2V5ID0+IHtcbiAgICAgICAgICByZXR1cm4geyBba2V5XTogcGlwZWxpbmVba2V5XSB9O1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGlwZWxpbmUubWFwKHN0YWdlID0+IHtcbiAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhzdGFnZSk7XG4gICAgICBpZiAoa2V5cy5sZW5ndGggIT09IDEpIHtcbiAgICAgICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFxuICAgICAgICAgIFBhcnNlLkVycm9yLklOVkFMSURfUVVFUlksXG4gICAgICAgICAgYFBpcGVsaW5lIHN0YWdlcyBzaG91bGQgb25seSBoYXZlIG9uZSBrZXkgYnV0IGZvdW5kICR7a2V5cy5qb2luKCcsICcpfS5gXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXR1cm4gQWdncmVnYXRlUm91dGVyLnRyYW5zZm9ybVN0YWdlKGtleXNbMF0sIHN0YWdlKTtcbiAgICB9KTtcbiAgfVxuXG4gIHN0YXRpYyB0cmFuc2Zvcm1TdGFnZShzdGFnZU5hbWUsIHN0YWdlKSB7XG4gICAgY29uc3Qgc2tpcEtleXMgPSBbJ2Rpc3RpbmN0JywgJ3doZXJlJ107XG4gICAgaWYgKHNraXBLZXlzLmluY2x1ZGVzKHN0YWdlTmFtZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHN0YWdlTmFtZVswXSAhPT0gJyQnKSB7XG4gICAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuSU5WQUxJRF9RVUVSWSwgYEludmFsaWQgYWdncmVnYXRlIHN0YWdlICcke3N0YWdlTmFtZX0nLmApO1xuICAgIH1cbiAgICBpZiAoc3RhZ2VOYW1lID09PSAnJGdyb3VwJykge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzdGFnZVtzdGFnZU5hbWVdLCAnb2JqZWN0SWQnKSkge1xuICAgICAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoXG4gICAgICAgICAgUGFyc2UuRXJyb3IuSU5WQUxJRF9RVUVSWSxcbiAgICAgICAgICBgQ2Fubm90IHVzZSAnb2JqZWN0SWQnIGluIGFnZ3JlZ2F0aW9uIHN0YWdlICRncm91cC5gXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzdGFnZVtzdGFnZU5hbWVdLCAnX2lkJykpIHtcbiAgICAgICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFxuICAgICAgICAgIFBhcnNlLkVycm9yLklOVkFMSURfUVVFUlksXG4gICAgICAgICAgYEludmFsaWQgcGFyYW1ldGVyIGZvciBxdWVyeTogZ3JvdXAuIE1pc3Npbmcga2V5IF9pZGBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHsgW3N0YWdlTmFtZV06IHN0YWdlW3N0YWdlTmFtZV0gfTtcbiAgfVxuXG4gIG1vdW50Um91dGVzKCkge1xuICAgIHRoaXMucm91dGUoJ0dFVCcsICcvYWdncmVnYXRlLzpjbGFzc05hbWUnLCBtaWRkbGV3YXJlLnByb21pc2VFbmZvcmNlTWFzdGVyS2V5QWNjZXNzLCByZXEgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlRmluZChyZXEpO1xuICAgIH0pO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEFnZ3JlZ2F0ZVJvdXRlcjtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsSUFBQUEsS0FBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsVUFBQSxHQUFBQyx1QkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQUcsS0FBQSxHQUFBSixzQkFB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
@@ -369,6 +369,7 @@ class FilesRouter {
369
369
  }
370
370
  const fileExtensions = config.fileUpload?.fileExtensions;
371
371
  if (!isMaster && fileExtensions) {
372
+ const mime = (await import('mime')).default;
372
373
  const isValidExtension = extension => {
373
374
  return fileExtensions.some(ext => {
374
375
  if (ext === '*') {
@@ -380,24 +381,61 @@ class FilesRouter {
380
381
  }
381
382
  });
382
383
  };
384
+ const rejectExtension = ext => {
385
+ next(new _node.default.Error(_node.default.Error.FILE_SAVE_ERROR, `File upload of extension ${ext} is disabled.`));
386
+ };
387
+
388
+ // Parse the filename extension token, stripping MIME parameters and whitespace.
383
389
  let extension = Utils.getFileExtension(filename);
384
- // Strip MIME parameters (e.g. ";charset=utf-8") and whitespace
385
390
  extension = extension?.split(';')[0]?.replace(/\s+/g, '');
386
- // If the filename has no usable extension (no dot, trailing dot, or
387
- // whitespace-only suffix), fall back to the Content-Type subtype — same
388
- // as a dotless filename.
389
- if (!extension && contentType && contentType.includes('/')) {
390
- extension = contentType.split('/')[1]?.split(';')[0]?.replace(/\s+/g, '');
391
- }
392
- // Last resort for malformed inputs (e.g. Content-Type without a slash):
393
- // use the raw Content-Type so the existing rejection path still fires.
394
- if (!extension && contentType) {
395
- extension = contentType.split(';')[0]?.replace(/\s+/g, '');
396
- }
391
+ const isExtensionRecognized = extension && mime.getType(filename);
397
392
  if (extension && !isValidExtension(extension)) {
398
- next(new _node.default.Error(_node.default.Error.FILE_SAVE_ERROR, `File upload of extension ${extension} is disabled.`));
393
+ rejectExtension(extension);
399
394
  return;
400
395
  }
396
+
397
+ // When the filename extension is not recognized by `mime`,
398
+ // `FilesController.createFile` cannot derive a Content-Type from the
399
+ // filename and preserves the client-supplied Content-Type verbatim, so the
400
+ // type the file is actually served as must be validated. Skip this when
401
+ // extension filtering is disabled (`*`).
402
+ const allowsAllExtensions = fileExtensions.includes('*');
403
+ if (!isExtensionRecognized && contentType && !allowsAllExtensions) {
404
+ const slashIndex = contentType.indexOf('/');
405
+ const type = slashIndex > 0 ? contentType.slice(0, slashIndex).trim() : '';
406
+ const subtype = slashIndex > 0 ? contentType.slice(slashIndex + 1).split(';')[0].trim() : '';
407
+ // A valid media type is `type/subtype` where both are non-empty `token`s
408
+ // (RFC 9110 §5.6.2). Reject anything else.
409
+ const token = /^[!#$%&'*+\-.^_`|~A-Za-z0-9]+$/;
410
+ if (!token.test(type) || !token.test(subtype)) {
411
+ // A Content-Type that does not parse as `type/subtype` with valid,
412
+ // non-empty type AND subtype tokens is malformed: there is no valid MIME
413
+ // type without a subtype (RFC 9110 §8.3.1), and malformed tokens such as
414
+ // `image//svg+xml` or `text/plain,text/html` are equally unparseable.
415
+ // Browsers cannot parse such values and fall back to MIME-sniffing the
416
+ // file body, which can render HTML/script markers as active content on
417
+ // storage adapters that serve the stored Content-Type (e.g. `image`,
418
+ // `image/`). Surface the precise blocklist message when the bare token
419
+ // names a blocked extension (e.g. a no-slash `svg`), otherwise reject the
420
+ // unparseable Content-Type.
421
+ const bareToken = (slashIndex < 0 ? contentType.split(';')[0] : type).replace(/\s+/g, '');
422
+ if (bareToken && !isValidExtension(bareToken)) {
423
+ rejectExtension(bareToken);
424
+ return;
425
+ }
426
+ next(new _node.default.Error(_node.default.Error.FILE_SAVE_ERROR, 'Invalid Content-Type.'));
427
+ return;
428
+ }
429
+ // Validate the well-formed Content-Type subtype against the blocklist, e.g.
430
+ // "image/svg+xml" -> "svg+xml", "image/svg+xml;charset=utf-8" -> "svg+xml".
431
+ // Valid custom/vendor types (e.g. "application/vnd.api+json") parse and are
432
+ // allowed; only blocked subtypes are rejected.
433
+ const contentTypeExtension = subtype.replace(/\s+/g, '');
434
+ if (!isValidExtension(contentTypeExtension)) {
435
+ rejectExtension(contentTypeExtension);
436
+ return;
437
+ }
438
+ }
401
439
  }
402
440
 
403
441
  // For streaming uploads, read file data from headers since the body is the raw stream
@@ -775,4 +813,4 @@ function isFileStreamable(req, filesController) {
775
813
  const end = Number(range[1]);
776
814
  return (!isNaN(start) || !isNaN(end)) && typeof filesController.adapter.handleFileStream === 'function';
777
815
  }
778
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZXhwcmVzcyIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiTWlkZGxld2FyZXMiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsIl9ub2RlIiwiX0NvbmZpZyIsIl9sb2dnZXIiLCJfc3RyZWFtIiwiX0Vycm9yIiwiZSIsInQiLCJXZWFrTWFwIiwiciIsIm4iLCJfX2VzTW9kdWxlIiwibyIsImkiLCJmIiwiX19wcm90b19fIiwiZGVmYXVsdCIsImhhcyIsImdldCIsInNldCIsImhhc093blByb3BlcnR5IiwiY2FsbCIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwidHJpZ2dlcnMiLCJVdGlscyIsImNyZWF0ZVNpemVMaW1pdGVkU3RyZWFtIiwic291cmNlIiwibWF4Qnl0ZXMiLCJ0b3RhbEJ5dGVzIiwic3RhcnRlZCIsInNvdXJjZUVuZGVkIiwib25EYXRhIiwib25FbmQiLCJvbkVycm9yIiwib3V0cHV0IiwiUmVhZGFibGUiLCJyZWFkIiwiY2h1bmsiLCJsZW5ndGgiLCJkZXN0cm95IiwiUGFyc2UiLCJFcnJvciIsIkZJTEVfU0FWRV9FUlJPUiIsInB1c2giLCJwYXVzZSIsImVyciIsIm9uIiwicmVzdW1lIiwiY2FsbGJhY2siLCJyZW1vdmVMaXN0ZW5lciIsIlJFU0VSVkVEX0RJUkVDVE9SWV9TRUdNRU5UUyIsImV4cG9ydHMiLCJGaWxlc1JvdXRlciIsImV4cHJlc3NSb3V0ZXIiLCJtYXhVcGxvYWRTaXplIiwicm91dGVyIiwiZXhwcmVzcyIsIlJvdXRlciIsImluaXRJbmZvIiwicmVxIiwicmVzIiwibmV4dCIsImluZm8iLCJzZXNzaW9uVG9rZW4iLCJpbnN0YWxsYXRpb25JZCIsImF1dGgiLCJpc01hc3RlciIsImhhbmRsZVBhcnNlU2Vzc2lvbiIsIm1ldGFkYXRhSGFuZGxlciIsImdldEhhbmRsZXIiLCJwb3N0IiwiSU5WQUxJRF9GSUxFX05BTUUiLCJfZWFybHlIZWFkZXJzTWlkZGxld2FyZSIsIl9ib2R5UGFyc2luZ01pZGRsZXdhcmUiLCJoYW5kbGVQYXJzZUhlYWRlcnMiLCJjcmVhdGVIYW5kbGVyIiwiYmluZCIsImRlbGV0ZSIsImVuZm9yY2VNYXN0ZXJLZXlBY2Nlc3MiLCJkZWxldGVIYW5kbGVyIiwiX2dldEZpbGVuYW1lRnJvbVBhcmFtcyIsInBhcnRzIiwicGFyYW1zIiwiZmlsZXBhdGgiLCJBcnJheSIsImlzQXJyYXkiLCJqb2luIiwidmFsaWRhdGVEaXJlY3RvcnkiLCJkaXJlY3RvcnkiLCJpbmNsdWRlcyIsInN0YXJ0c1dpdGgiLCJlbmRzV2l0aCIsImZpcnN0U2VnbWVudCIsInNwbGl0IiwiZGlyUmVnZXgiLCJ0ZXN0IiwiX3ZhbGlkYXRlRmlsZURvd25sb2FkIiwiY29uZmlnIiwiaXNNYWludGVuYW5jZSIsInVzZXIiLCJpc0xpbmtlZCIsIkFub255bW91c1V0aWxzIiwiZmlsZURvd25sb2FkIiwiZW5hYmxlRm9yQW5vbnltb3VzVXNlciIsIk9QRVJBVElPTl9GT1JCSURERU4iLCJlbmFibGVGb3JBdXRoZW50aWNhdGVkVXNlciIsImVuYWJsZUZvclB1YmxpYyIsIkNvbmZpZyIsImFwcElkIiwiZXJyb3IiLCJjcmVhdGVTYW5pdGl6ZWRIdHRwRXJyb3IiLCJzdGF0dXMiLCJqc29uIiwibWVzc2FnZSIsImZpbGVuYW1lIiwiZmlsZXNDb250cm9sbGVyIiwibWltZSIsImNvbnRlbnRUeXBlIiwiZ2V0VHlwZSIsImZpbGUiLCJGaWxlIiwiYmFzZTY0IiwiZmlsZUF1dGgiLCJ0cmlnZ2VyUmVzdWx0IiwibWF5YmVSdW5GaWxlVHJpZ2dlciIsIlR5cGVzIiwiYmVmb3JlRmluZCIsIl9uYW1lIiwiZGVmYXVsdFJlc3BvbnNlSGVhZGVycyIsImlzRmlsZVN0cmVhbWFibGUiLCJhZnRlckZpbmQiLCJmb3JjZURvd25sb2FkIiwicmVzcG9uc2VIZWFkZXJzIiwia2V5IiwidmFsdWUiLCJlbnRyaWVzIiwiaGFuZGxlRmlsZVN0cmVhbSIsImNhdGNoIiwiZW5kIiwiZGF0YSIsImdldEZpbGVEYXRhIiwidG9TdHJpbmciLCJCdWZmZXIiLCJmcm9tIiwiX2RhdGEiLCJyZXNvbHZlRXJyb3IiLCJjb2RlIiwiU0NSSVBUX0ZBSUxFRCIsIm1heFVwbG9hZFNpemVPdmVycmlkZSIsInVuZGVmaW5lZCIsIm1hc3RlcktleSIsImxvYWRNYXN0ZXJLZXkiLCJtYXN0ZXJLZXlJcHMiLCJjaGVja0lwIiwiaXAiLCJtYXN0ZXJLZXlJcHNTdG9yZSIsInBhcnNlZEJ5dGVzIiwicGFyc2VTaXplVG9CeXRlcyIsIl9tYXhVcGxvYWRTaXplT3ZlcnJpZGUiLCJkZWZhdWx0TWF4Qnl0ZXMiLCJfbWF4VXBsb2FkU2l6ZUJ5dGVzIiwibGltaXQiLCJyYXciLCJ0eXBlIiwiaXNSZWFkT25seSIsImZpbGVVcGxvYWQiLCJ2YWxpZGF0ZUZpbGVuYW1lIiwiZmlsZUV4dGVuc2lvbnMiLCJpc1ZhbGlkRXh0ZW5zaW9uIiwiZXh0ZW5zaW9uIiwic29tZSIsImV4dCIsInJlZ2V4IiwiUmVnRXhwIiwiZ2V0RmlsZUV4dGVuc2lvbiIsInJlcGxhY2UiLCJmaWxlRGF0YSIsInBhcnNlZCIsIkpTT04iLCJwYXJzZSIsIm1ldGFkYXRhIiwiSU5WQUxJRF9KU09OIiwidGFncyIsImRpcmVjdG9yeUVycm9yIiwiaXNCdWZmZXIiLCJib2R5IiwiX2hhbmRsZUJ1ZmZlcmVkVXBsb2FkIiwiX2hhbmRsZVN0cmVhbVVwbG9hZCIsImNoZWNrUHJvaGliaXRlZEtleXdvcmRzIiwiSU5WQUxJRF9LRVlfTkFNRSIsInNldFRhZ3MiLCJzZXRNZXRhZGF0YSIsInNldERpcmVjdG9yeSIsImZpbGVTaXplIiwiYnl0ZUxlbmd0aCIsImZpbGVPYmplY3QiLCJiZWZvcmVTYXZlIiwic2F2ZVJlc3VsdCIsInVybCIsIm5hbWUiLCJidWZmZXJEYXRhIiwiX3NvdXJjZSIsImZvcm1hdCIsImJ1ZmZlciIsImZpbGVPcHRpb25zIiwiX21ldGFkYXRhIiwiZmlsZVRhZ3MiLCJrZXlzIiwiX3RhZ3MiLCJhc3NpZ24iLCJfZGlyZWN0b3J5IiwiY3JlYXRlRmlsZVJlc3VsdCIsImNyZWF0ZUZpbGUiLCJfdXJsIiwiX3JlcXVlc3RUYXNrIiwiX3ByZXZpb3VzU2F2ZSIsIlByb21pc2UiLCJyZXNvbHZlIiwiYWZ0ZXJTYXZlIiwibG9nZ2VyIiwic3RyZWFtIiwiY29udGVudExlbmd0aCIsInBhcnNlSW50IiwiaGFzRXh0ZW5zaW9uIiwic291cmNlVHlwZSIsImFkYXB0ZXIiLCJnZXRGaWxlTG9jYXRpb24iLCJiZWZvcmVEZWxldGUiLCJkZWxldGVGaWxlIiwiYWZ0ZXJEZWxldGUiLCJGSUxFX0RFTEVURV9FUlJPUiIsImdldE1ldGFkYXRhIiwicmFuZ2UiLCJzdGFydCIsIk51bWJlciIsImlzTmFOIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL1JvdXRlcnMvRmlsZXNSb3V0ZXIuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGV4cHJlc3MgZnJvbSAnZXhwcmVzcyc7XG5pbXBvcnQgKiBhcyBNaWRkbGV3YXJlcyBmcm9tICcuLi9taWRkbGV3YXJlcyc7XG5pbXBvcnQgUGFyc2UgZnJvbSAncGFyc2Uvbm9kZSc7XG5pbXBvcnQgQ29uZmlnIGZyb20gJy4uL0NvbmZpZyc7XG5pbXBvcnQgbG9nZ2VyIGZyb20gJy4uL2xvZ2dlcic7XG5jb25zdCB0cmlnZ2VycyA9IHJlcXVpcmUoJy4uL3RyaWdnZXJzJyk7XG5jb25zdCBVdGlscyA9IHJlcXVpcmUoJy4uL1V0aWxzJyk7XG5pbXBvcnQgeyBSZWFkYWJsZSB9IGZyb20gJ3N0cmVhbSc7XG5pbXBvcnQgeyBjcmVhdGVTYW5pdGl6ZWRIdHRwRXJyb3IgfSBmcm9tICcuLi9FcnJvcic7XG5cbi8qKlxuICogV3JhcHMgYSByZWFkYWJsZSBzdHJlYW0gaW4gYSBSZWFkYWJsZSB0aGF0IGVuZm9yY2VzIGEgYnl0ZSBzaXplIGxpbWl0LlxuICogRGF0YSBmbG93IGlzIGxhenk6IHRoZSBzb3VyY2UgaXMgbm90IHJlYWQgdW50aWwgYSBjb25zdW1lciBzdGFydHMgcmVhZGluZ1xuICogZnJvbSB0aGUgcmV0dXJuZWQgc3RyZWFtICh2aWEgcGlwZSBvciAnZGF0YScgbGlzdGVuZXIpLiBUaGlzIGVuc3VyZXMgdGhlXG4gKiBjb25zdW1lcidzIGVycm9yIGxpc3RlbmVyIGlzIGF0dGFjaGVkIGJlZm9yZSBhbnkgZGF0YSAob3IgZXJyb3IpIGlzIGVtaXR0ZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVTaXplTGltaXRlZFN0cmVhbShzb3VyY2UsIG1heEJ5dGVzKSB7XG4gIGxldCB0b3RhbEJ5dGVzID0gMDtcbiAgbGV0IHN0YXJ0ZWQgPSBmYWxzZTtcbiAgbGV0IHNvdXJjZUVuZGVkID0gZmFsc2U7XG4gIGxldCBvbkRhdGEsIG9uRW5kLCBvbkVycm9yO1xuXG4gIGNvbnN0IG91dHB1dCA9IG5ldyBSZWFkYWJsZSh7XG4gICAgcmVhZCgpIHtcbiAgICAgIGlmICghc3RhcnRlZCkge1xuICAgICAgICBzdGFydGVkID0gdHJ1ZTtcblxuICAgICAgICBvbkRhdGEgPSAoY2h1bmspID0+IHtcbiAgICAgICAgICB0b3RhbEJ5dGVzICs9IGNodW5rLmxlbmd0aDtcbiAgICAgICAgICBpZiAodG90YWxCeXRlcyA+IG1heEJ5dGVzKSB7XG4gICAgICAgICAgICBvdXRwdXQuZGVzdHJveShcbiAgICAgICAgICAgICAgbmV3IFBhcnNlLkVycm9yKFxuICAgICAgICAgICAgICAgIFBhcnNlLkVycm9yLkZJTEVfU0FWRV9FUlJPUixcbiAgICAgICAgICAgICAgICBgRmlsZSBzaXplIGV4Y2VlZHMgbWF4aW11bSBhbGxvd2VkOiAke21heEJ5dGVzfSBieXRlcy5gXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghb3V0cHV0LnB1c2goY2h1bmspKSB7XG4gICAgICAgICAgICBzb3VyY2UucGF1c2UoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgb25FbmQgPSAoKSA9PiB7XG4gICAgICAgICAgc291cmNlRW5kZWQgPSB0cnVlO1xuICAgICAgICAgIG91dHB1dC5wdXNoKG51bGwpO1xuICAgICAgICB9O1xuXG4gICAgICAgIG9uRXJyb3IgPSAoZXJyKSA9PiBvdXRwdXQuZGVzdHJveShlcnIpO1xuXG4gICAgICAgIHNvdXJjZS5vbignZGF0YScsIG9uRGF0YSk7XG4gICAgICAgIHNvdXJjZS5vbignZW5kJywgb25FbmQpO1xuICAgICAgICBzb3VyY2Uub24oJ2Vycm9yJywgb25FcnJvcik7XG4gICAgICB9XG5cbiAgICAgIC8vIFJlc3VtZSBzb3VyY2UgaW4gY2FzZSBpdCB3YXMgcGF1c2VkIGR1ZSB0byBiYWNrcHJlc3N1cmVcbiAgICAgIGlmICghc291cmNlRW5kZWQpIHtcbiAgICAgICAgc291cmNlLnJlc3VtZSgpO1xuICAgICAgfVxuICAgIH0sXG4gICAgZGVzdHJveShlcnIsIGNhbGxiYWNrKSB7XG4gICAgICBpZiAob25EYXRhKSB7XG4gICAgICAgIHNvdXJjZS5yZW1vdmVMaXN0ZW5lcignZGF0YScsIG9uRGF0YSk7XG4gICAgICB9XG4gICAgICBpZiAob25FbmQpIHtcbiAgICAgICAgc291cmNlLnJlbW92ZUxpc3RlbmVyKCdlbmQnLCBvbkVuZCk7XG4gICAgICB9XG4gICAgICBpZiAob25FcnJvcikge1xuICAgICAgICBzb3VyY2UucmVtb3ZlTGlzdGVuZXIoJ2Vycm9yJywgb25FcnJvcik7XG4gICAgICB9XG4gICAgICAvLyBTdXBwcmVzcyBlcnJvcnMgZW1pdHRlZCBkdXJpbmcgZHJhaW4gKGUuZy4gY2xpZW50IGRpc2Nvbm5lY3QpXG4gICAgICBzb3VyY2Uub24oJ2Vycm9yJywgKCkgPT4ge30pO1xuICAgICAgaWYgKCFzb3VyY2VFbmRlZCkge1xuICAgICAgICBzb3VyY2UucmVzdW1lKCk7XG4gICAgICB9XG4gICAgICBjYWxsYmFjayhlcnIpO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIG91dHB1dDtcbn1cblxuLy8gU2VnbWVudHMgdGhhdCBjb25mbGljdCB3aXRoIHN1Yi1yb3V0ZXMgdW5kZXIgR0VUIC9maWxlcy86YXBwSWQvKi4gSWYgYSBmaWxlXG4vLyBkaXJlY3Rvcnkgc3RhcnRzIHdpdGggb25lIG9mIHRoZXNlLCBpdHMgVVJMIHdvdWxkIG1hdGNoIHRoZSB3cm9uZyByb3V0ZVxuLy8gaGFuZGxlci4gVXBkYXRlIHRoaXMgbGlzdCB3aGVuIGFkZGluZyBuZXcgc3ViLXJvdXRlcyB0byBleHByZXNzUm91dGVyKCkuXG5leHBvcnQgY29uc3QgUkVTRVJWRURfRElSRUNUT1JZX1NFR01FTlRTID0gWydtZXRhZGF0YSddO1xuXG5leHBvcnQgY2xhc3MgRmlsZXNSb3V0ZXIge1xuICBleHByZXNzUm91dGVyKHsgbWF4VXBsb2FkU2l6ZSA9ICcyME1iJyB9ID0ge30pIHtcbiAgICB2YXIgcm91dGVyID0gZXhwcmVzcy5Sb3V0ZXIoKTtcbiAgICAvLyBMaWdodHdlaWdodCBpbmZvIGluaXRpYWxpemVyIHNvIGhhbmRsZVBhcnNlU2Vzc2lvbiBjYW4gcmVzb2x2ZSBzZXNzaW9uIHRva2Vucy5cbiAgICAvLyBVbmxpa2UgUE9TVC9ERUxFVEUgcm91dGVzLCBHRVQgZmlsZSByb3V0ZXMgc2tpcCBoYW5kbGVQYXJzZUhlYWRlcnMgKHdoaWNoXG4gICAgLy8gbm9ybWFsbHkgc2V0cyByZXEuaW5mbykgYmVjYXVzZSB0aG9zZSByZXF1ZXN0cyBtYXkgbm90IGNhcnJ5IFBhcnNlIGhlYWRlcnMuXG4gICAgY29uc3QgaW5pdEluZm8gPSAocmVxLCByZXMsIG5leHQpID0+IHtcbiAgICAgIGlmICghcmVxLmluZm8pIHtcbiAgICAgICAgY29uc3Qgc2Vzc2lvblRva2VuID0gcmVxLmdldCgnWC1QYXJzZS1TZXNzaW9uLVRva2VuJyk7XG4gICAgICAgIHJlcS5pbmZvID0ge1xuICAgICAgICAgIHNlc3Npb25Ub2tlbixcbiAgICAgICAgICBpbnN0YWxsYXRpb25JZDogcmVxLmdldCgnWC1QYXJzZS1JbnN0YWxsYXRpb24tSWQnKSxcbiAgICAgICAgfTtcbiAgICAgICAgLy8gSWYgbm8gc2Vzc2lvbiB0b2tlbiBhbmQgbm8gYXV0aCB5ZXQgKHB1YmxpYyBhY2Nlc3MpLCBzZXQgYSBtaW5pbWFsXG4gICAgICAgIC8vIGF1dGggb2JqZWN0IHNvIGhhbmRsZVBhcnNlU2Vzc2lvbiBza2lwcyBzZXNzaW9uIHJlc29sdXRpb24uXG4gICAgICAgIGlmICghc2Vzc2lvblRva2VuICYmICFyZXEuYXV0aCkge1xuICAgICAgICAgIHJlcS5hdXRoID0geyBpc01hc3RlcjogZmFsc2UgfTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgbmV4dCgpO1xuICAgIH07XG4gICAgLy8gTWV0YWRhdGEgcm91dGUgbXVzdCBjb21lIGJlZm9yZSB0aGUgY2F0Y2gtYWxsIEdFVCByb3V0ZVxuICAgIHJvdXRlci5nZXQoJy9maWxlcy86YXBwSWQvbWV0YWRhdGEvKmZpbGVwYXRoJywgaW5pdEluZm8sIE1pZGRsZXdhcmVzLmhhbmRsZVBhcnNlU2Vzc2lvbiwgdGhpcy5tZXRhZGF0YUhhbmRsZXIpO1xuICAgIHJvdXRlci5nZXQoJy9maWxlcy86YXBwSWQvKmZpbGVwYXRoJywgaW5pdEluZm8sIE1pZGRsZXdhcmVzLmhhbmRsZVBhcnNlU2Vzc2lvbiwgdGhpcy5nZXRIYW5kbGVyKTtcblxuICAgIHJvdXRlci5wb3N0KCcvZmlsZXMnLCBmdW5jdGlvbiAocmVxLCByZXMsIG5leHQpIHtcbiAgICAgIG5leHQobmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLklOVkFMSURfRklMRV9OQU1FLCAnRmlsZW5hbWUgbm90IHByb3ZpZGVkLicpKTtcbiAgICB9KTtcblxuICAgIHJvdXRlci5wb3N0KFxuICAgICAgJy9maWxlcy86ZmlsZW5hbWUnLFxuICAgICAgdGhpcy5fZWFybHlIZWFkZXJzTWlkZGxld2FyZSgpLFxuICAgICAgdGhpcy5fYm9keVBhcnNpbmdNaWRkbGV3YXJlKG1heFVwbG9hZFNpemUpLFxuICAgICAgTWlkZGxld2FyZXMuaGFuZGxlUGFyc2VIZWFkZXJzLFxuICAgICAgTWlkZGxld2FyZXMuaGFuZGxlUGFyc2VTZXNzaW9uLFxuICAgICAgdGhpcy5jcmVhdGVIYW5kbGVyLmJpbmQodGhpcylcbiAgICApO1xuXG4gICAgcm91dGVyLmRlbGV0ZShcbiAgICAgICcvZmlsZXMvKmZpbGVwYXRoJyxcbiAgICAgIE1pZGRsZXdhcmVzLmhhbmRsZVBhcnNlSGVhZGVycyxcbiAgICAgIE1pZGRsZXdhcmVzLmhhbmRsZVBhcnNlU2Vzc2lvbixcbiAgICAgIE1pZGRsZXdhcmVzLmVuZm9yY2VNYXN0ZXJLZXlBY2Nlc3MsXG4gICAgICB0aGlzLmRlbGV0ZUhhbmRsZXJcbiAgICApO1xuICAgIHJldHVybiByb3V0ZXI7XG4gIH1cblxuICBzdGF0aWMgX2dldEZpbGVuYW1lRnJvbVBhcmFtcyhyZXEpIHtcbiAgICBjb25zdCBwYXJ0cyA9IHJlcS5wYXJhbXMuZmlsZXBhdGg7XG4gICAgcmV0dXJuIEFycmF5LmlzQXJyYXkocGFydHMpID8gcGFydHMuam9pbignLycpIDogcGFydHM7XG4gIH1cblxuICBzdGF0aWMgdmFsaWRhdGVEaXJlY3RvcnkoZGlyZWN0b3J5KSB7XG4gICAgaWYgKHR5cGVvZiBkaXJlY3RvcnkgIT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gbmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLklOVkFMSURfRklMRV9OQU1FLCAnRGlyZWN0b3J5IG11c3QgYmUgYSBzdHJpbmcuJyk7XG4gICAgfVxuICAgIGlmIChkaXJlY3RvcnkubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gbmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLklOVkFMSURfRklMRV9OQU1FLCAnRGlyZWN0b3J5IG11c3Qgbm90IGJlIGVtcHR5LicpO1xuICAgIH1cbiAgICBpZiAoZGlyZWN0b3J5Lmxlbmd0aCA+IDI1Nikge1xuICAgICAgcmV0dXJuIG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5JTlZBTElEX0ZJTEVfTkFNRSwgJ0RpcmVjdG9yeSBwYXRoIGlzIHRvbyBsb25nLicpO1xuICAgIH1cbiAgICBpZiAoZGlyZWN0b3J5LmluY2x1ZGVzKCcuLicpKSB7XG4gICAgICByZXR1cm4gbmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLklOVkFMSURfRklMRV9OQU1FLCAnRGlyZWN0b3J5IG11c3Qgbm90IGNvbnRhaW4gXCIuLlwiLicpO1xuICAgIH1cbiAgICBpZiAoZGlyZWN0b3J5LnN0YXJ0c1dpdGgoJy8nKSB8fCBkaXJlY3RvcnkuZW5kc1dpdGgoJy8nKSkge1xuICAgICAgcmV0dXJuIG5ldyBQYXJzZS5FcnJvcihcbiAgICAgICAgUGFyc2UuRXJyb3IuSU5WQUxJRF9GSUxFX05BTUUsXG4gICAgICAgICdEaXJlY3RvcnkgbXVzdCBub3Qgc3RhcnQgb3IgZW5kIHdpdGggXCIvXCIuJ1xuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKGRpcmVjdG9yeS5pbmNsdWRlcygnLy8nKSkge1xuICAgICAgcmV0dXJuIG5ldyBQYXJzZS5FcnJvcihcbiAgICAgICAgUGFyc2UuRXJyb3IuSU5WQUxJRF9GSUxFX05BTUUsXG4gICAgICAgICdEaXJlY3RvcnkgbXVzdCBub3QgY29udGFpbiBjb25zZWN1dGl2ZSBzbGFzaGVzLidcbiAgICAgICk7XG4gICAgfVxuICAgIGNvbnN0IGZpcnN0U2VnbWVudCA9IGRpcmVjdG9yeS5zcGxpdCgnLycpWzBdO1xuICAgIGlmIChSRVNFUlZFRF9ESVJFQ1RPUllfU0VHTUVOVFMuaW5jbHVkZXMoZmlyc3RTZWdtZW50KSkge1xuICAgICAgcmV0dXJuIG5ldyBQYXJzZS5FcnJvcihcbiAgICAgICAgUGFyc2UuRXJyb3IuSU5WQUxJRF9GSUxFX05BTUUsXG4gICAgICAgIGBEaXJlY3RvcnkgbXVzdCBub3Qgc3RhcnQgd2l0aCByZXNlcnZlZCBzZWdtZW50IFwiJHtmaXJzdFNlZ21lbnR9XCIuYFxuICAgICAgKTtcbiAgICB9XG4gICAgY29uc3QgZGlyUmVnZXggPSAvXlthLXpBLVowLTldW2EtekEtWjAtOV9cXC0vXSokLztcbiAgICBpZiAoIWRpclJlZ2V4LnRlc3QoZGlyZWN0b3J5KSkge1xuICAgICAgcmV0dXJuIG5ldyBQYXJzZS5FcnJvcihcbiAgICAgICAgUGFyc2UuRXJyb3IuSU5WQUxJRF9GSUxFX05BTUUsXG4gICAgICAgICdEaXJlY3RvcnkgY29udGFpbnMgaW52YWxpZCBjaGFyYWN0ZXJzLidcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgc3RhdGljIF92YWxpZGF0ZUZpbGVEb3dubG9hZChyZXEsIGNvbmZpZykge1xuICAgIGNvbnN0IGlzTWFzdGVyID0gcmVxLmF1dGg/LmlzTWFzdGVyO1xuICAgIGNvbnN0IGlzTWFpbnRlbmFuY2UgPSByZXEuYXV0aD8uaXNNYWludGVuYW5jZTtcbiAgICBpZiAoaXNNYXN0ZXIgfHwgaXNNYWludGVuYW5jZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCB1c2VyID0gcmVxLmF1dGg/LnVzZXI7XG4gICAgY29uc3QgaXNMaW5rZWQgPSB1c2VyICYmIFBhcnNlLkFub255bW91c1V0aWxzLmlzTGlua2VkKHVzZXIpO1xuICAgIGlmICghY29uZmlnLmZpbGVEb3dubG9hZC5lbmFibGVGb3JBbm9ueW1vdXNVc2VyICYmIGlzTGlua2VkKSB7XG4gICAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoXG4gICAgICAgIFBhcnNlLkVycm9yLk9QRVJBVElPTl9GT1JCSURERU4sXG4gICAgICAgICdGaWxlIGRvd25sb2FkIGJ5IGFub255bW91cyB1c2VyIGlzIGRpc2FibGVkLidcbiAgICAgICk7XG4gICAgfVxuICAgIGlmICghY29uZmlnLmZpbGVEb3dubG9hZC5lbmFibGVGb3JBdXRoZW50aWNhdGVkVXNlciAmJiAhaXNMaW5rZWQgJiYgdXNlcikge1xuICAgICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFxuICAgICAgICBQYXJzZS5FcnJvci5PUEVSQVRJT05fRk9SQklEREVOLFxuICAgICAgICAnRmlsZSBkb3dubG9hZCBieSBhdXRoZW50aWNhdGVkIHVzZXIgaXMgZGlzYWJsZWQuJ1xuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKCFjb25maWcuZmlsZURvd25sb2FkLmVuYWJsZUZvclB1YmxpYyAmJiAhdXNlcikge1xuICAgICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFxuICAgICAgICBQYXJzZS5FcnJvci5PUEVSQVRJT05fRk9SQklEREVOLFxuICAgICAgICAnRmlsZSBkb3dubG9hZCBieSBwdWJsaWMgaXMgZGlzYWJsZWQuJ1xuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBnZXRIYW5kbGVyKHJlcSwgcmVzKSB7XG4gICAgY29uc3QgY29uZmlnID0gQ29uZmlnLmdldChyZXEucGFyYW1zLmFwcElkKTtcbiAgICBpZiAoIWNvbmZpZykge1xuICAgICAgY29uc3QgZXJyb3IgPSBjcmVhdGVTYW5pdGl6ZWRIdHRwRXJyb3IoNDAzLCAnSW52YWxpZCBhcHBsaWNhdGlvbiBJRC4nLCBjb25maWcpO1xuICAgICAgcmVzLnN0YXR1cyhlcnJvci5zdGF0dXMpO1xuICAgICAgcmVzLmpzb24oeyBlcnJvcjogZXJyb3IubWVzc2FnZSB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBGaWxlc1JvdXRlci5fdmFsaWRhdGVGaWxlRG93bmxvYWQocmVxLCBjb25maWcpO1xuXG4gICAgbGV0IGZpbGVuYW1lID0gRmlsZXNSb3V0ZXIuX2dldEZpbGVuYW1lRnJvbVBhcmFtcyhyZXEpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBmaWxlc0NvbnRyb2xsZXIgPSBjb25maWcuZmlsZXNDb250cm9sbGVyO1xuICAgICAgY29uc3QgbWltZSA9IChhd2FpdCBpbXBvcnQoJ21pbWUnKSkuZGVmYXVsdDtcbiAgICAgIGxldCBjb250ZW50VHlwZSA9IG1pbWUuZ2V0VHlwZShmaWxlbmFtZSk7XG4gICAgICBsZXQgZmlsZSA9IG5ldyBQYXJzZS5GaWxlKGZpbGVuYW1lLCB7IGJhc2U2NDogJycgfSwgY29udGVudFR5cGUpO1xuICAgICAgY29uc3QgZmlsZUF1dGggPSByZXEuYXV0aDtcbiAgICAgIGNvbnN0IHRyaWdnZXJSZXN1bHQgPSBhd2FpdCB0cmlnZ2Vycy5tYXliZVJ1bkZpbGVUcmlnZ2VyKFxuICAgICAgICB0cmlnZ2Vycy5UeXBlcy5iZWZvcmVGaW5kLFxuICAgICAgICB7IGZpbGUgfSxcbiAgICAgICAgY29uZmlnLFxuICAgICAgICBmaWxlQXV0aFxuICAgICAgKTtcbiAgICAgIGlmICh0cmlnZ2VyUmVzdWx0Py5maWxlPy5fbmFtZSkge1xuICAgICAgICBmaWxlbmFtZSA9IHRyaWdnZXJSZXN1bHQ/LmZpbGU/Ll9uYW1lO1xuICAgICAgICBjb250ZW50VHlwZSA9IG1pbWUuZ2V0VHlwZShmaWxlbmFtZSk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGRlZmF1bHRSZXNwb25zZUhlYWRlcnMgPSB7ICdYLUNvbnRlbnQtVHlwZS1PcHRpb25zJzogJ25vc25pZmYnIH07XG5cbiAgICAgIGlmIChpc0ZpbGVTdHJlYW1hYmxlKHJlcSwgZmlsZXNDb250cm9sbGVyKSkge1xuICAgICAgICBjb25zdCBhZnRlckZpbmQgPSBhd2FpdCB0cmlnZ2Vycy5tYXliZVJ1bkZpbGVUcmlnZ2VyKFxuICAgICAgICAgIHRyaWdnZXJzLlR5cGVzLmFmdGVyRmluZCxcbiAgICAgICAgICB7IGZpbGUsIGZvcmNlRG93bmxvYWQ6IGZhbHNlLCByZXNwb25zZUhlYWRlcnM6IHsgLi4uZGVmYXVsdFJlc3BvbnNlSGVhZGVycyB9IH0sXG4gICAgICAgICAgY29uZmlnLFxuICAgICAgICAgIGZpbGVBdXRoXG4gICAgICAgICk7XG4gICAgICAgIGlmIChhZnRlckZpbmQ/LmZvcmNlRG93bmxvYWQpIHtcbiAgICAgICAgICByZXMuc2V0KCdDb250ZW50LURpc3Bvc2l0aW9uJywgYGF0dGFjaG1lbnQ7ZmlsZW5hbWU9JHthZnRlckZpbmQuZmlsZT8uX25hbWUgfHwgZmlsZW5hbWV9YCk7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoYWZ0ZXJGaW5kPy5yZXNwb25zZUhlYWRlcnMgPz8gZGVmYXVsdFJlc3BvbnNlSGVhZGVycykpIHtcbiAgICAgICAgICByZXMuc2V0KGtleSwgdmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGZpbGVzQ29udHJvbGxlci5oYW5kbGVGaWxlU3RyZWFtKGNvbmZpZywgZmlsZW5hbWUsIHJlcSwgcmVzLCBjb250ZW50VHlwZSkuY2F0Y2goKCkgPT4ge1xuICAgICAgICAgIHJlcy5zdGF0dXMoNDA0KTtcbiAgICAgICAgICByZXMuc2V0KCdDb250ZW50LVR5cGUnLCAndGV4dC9wbGFpbicpO1xuICAgICAgICAgIHJlcy5lbmQoJ0ZpbGUgbm90IGZvdW5kLicpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBsZXQgZGF0YSA9IGF3YWl0IGZpbGVzQ29udHJvbGxlci5nZXRGaWxlRGF0YShjb25maWcsIGZpbGVuYW1lKS5jYXRjaCgoKSA9PiB7XG4gICAgICAgIHJlcy5zdGF0dXMoNDA0KTtcbiAgICAgICAgcmVzLnNldCgnQ29udGVudC1UeXBlJywgJ3RleHQvcGxhaW4nKTtcbiAgICAgICAgcmVzLmVuZCgnRmlsZSBub3QgZm91bmQuJyk7XG4gICAgICB9KTtcbiAgICAgIGlmICghZGF0YSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBmaWxlID0gbmV3IFBhcnNlLkZpbGUoZmlsZW5hbWUsIHsgYmFzZTY0OiBkYXRhLnRvU3RyaW5nKCdiYXNlNjQnKSB9LCBjb250ZW50VHlwZSk7XG4gICAgICBjb25zdCBhZnRlckZpbmQgPSBhd2FpdCB0cmlnZ2Vycy5tYXliZVJ1bkZpbGVUcmlnZ2VyKFxuICAgICAgICB0cmlnZ2Vycy5UeXBlcy5hZnRlckZpbmQsXG4gICAgICAgIHsgZmlsZSwgZm9yY2VEb3dubG9hZDogZmFsc2UsIHJlc3BvbnNlSGVhZGVyczogeyAuLi5kZWZhdWx0UmVzcG9uc2VIZWFkZXJzIH0gfSxcbiAgICAgICAgY29uZmlnLFxuICAgICAgICBmaWxlQXV0aFxuICAgICAgKTtcblxuICAgICAgaWYgKGFmdGVyRmluZD8uZmlsZSkge1xuICAgICAgICBjb250ZW50VHlwZSA9IG1pbWUuZ2V0VHlwZShhZnRlckZpbmQuZmlsZS5fbmFtZSk7XG4gICAgICAgIGRhdGEgPSBCdWZmZXIuZnJvbShhZnRlckZpbmQuZmlsZS5fZGF0YSwgJ2Jhc2U2NCcpO1xuICAgICAgfVxuXG4gICAgICByZXMuc3RhdHVzKDIwMCk7XG4gICAgICByZXMuc2V0KCdDb250ZW50LVR5cGUnLCBjb250ZW50VHlwZSk7XG4gICAgICByZXMuc2V0KCdDb250ZW50LUxlbmd0aCcsIGRhdGEubGVuZ3RoKTtcbiAgICAgIGlmIChhZnRlckZpbmQuZm9yY2VEb3dubG9hZCkge1xuICAgICAgICByZXMuc2V0KCdDb250ZW50LURpc3Bvc2l0aW9uJywgYGF0dGFjaG1lbnQ7ZmlsZW5hbWU9JHthZnRlckZpbmQuZmlsZS5fbmFtZX1gKTtcbiAgICAgIH1cbiAgICAgIGlmIChhZnRlckZpbmQucmVzcG9uc2VIZWFkZXJzKSB7XG4gICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGFmdGVyRmluZC5yZXNwb25zZUhlYWRlcnMpKSB7XG4gICAgICAgICAgcmVzLnNldChrZXksIHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmVzLmVuZChkYXRhKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zdCBlcnIgPSB0cmlnZ2Vycy5yZXNvbHZlRXJyb3IoZSwge1xuICAgICAgICBjb2RlOiBQYXJzZS5FcnJvci5TQ1JJUFRfRkFJTEVELFxuICAgICAgICBtZXNzYWdlOiBgQ291bGQgbm90IGZpbmQgZmlsZTogJHtmaWxlbmFtZX0uYCxcbiAgICAgIH0pO1xuICAgICAgcmVzLnN0YXR1cyg0MDMpO1xuICAgICAgcmVzLmpzb24oeyBjb2RlOiBlcnIuY29kZSwgZXJyb3I6IGVyci5tZXNzYWdlIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBNaWRkbGV3YXJlIHRoYXQgcnVucyBiZWZvcmUgYm9keSBwYXJzaW5nIHRvIGhhbmRsZSBoZWFkZXJzIHRoYXQgbXVzdCBiZVxuICAgKiByZXNvbHZlZCBiZWZvcmUgdGhlIHJlcXVlc3QgYm9keSBpcyBjb25zdW1lZC4gQ3VycmVudGx5IHN1cHBvcnRzOlxuICAgKlxuICAgKiAtIGBYLVBhcnNlLUZpbGUtTWF4LVVwbG9hZC1TaXplYDogT3ZlcnJpZGVzIHRoZSBzZXJ2ZXItd2lkZSBgbWF4VXBsb2FkU2l6ZWBcbiAgICogICBmb3IgdGhpcyByZXF1ZXN0LiBSZXF1aXJlcyB0aGUgbWFzdGVyIGtleS4gVGhlIHZhbHVlIHVzZXMgdGhlIHNhbWUgZm9ybWF0XG4gICAqICAgYXMgdGhlIHNlcnZlciBvcHRpb24gKGUuZy4gYCc1MG1iJ2AsIGAnMWdiJ2ApLiBTZXRzIGByZXEuX21heFVwbG9hZFNpemVPdmVycmlkZWBcbiAgICogICAoaW4gYnl0ZXMpIGZvciBgX2JvZHlQYXJzaW5nTWlkZGxld2FyZWAgdG8gdXNlLlxuICAgKi9cbiAgX2Vhcmx5SGVhZGVyc01pZGRsZXdhcmUoKSB7XG4gICAgcmV0dXJuIGFzeW5jIChyZXEsIHJlcywgbmV4dCkgPT4ge1xuICAgICAgY29uc3QgbWF4VXBsb2FkU2l6ZU92ZXJyaWRlID0gcmVxLmdldCgnWC1QYXJzZS1GaWxlLU1heC1VcGxvYWQtU2l6ZScpO1xuICAgICAgaWYgKCFtYXhVcGxvYWRTaXplT3ZlcnJpZGUpIHtcbiAgICAgICAgcmV0dXJuIG5leHQoKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGFwcElkID0gcmVxLmdldCgnWC1QYXJzZS1BcHBsaWNhdGlvbi1JZCcpO1xuICAgICAgY29uc3QgY29uZmlnID0gQ29uZmlnLmdldChhcHBJZCk7XG4gICAgICBpZiAoIWNvbmZpZykge1xuICAgICAgICBjb25zdCBlcnJvciA9IGNyZWF0ZVNhbml0aXplZEh0dHBFcnJvcig0MDMsICdJbnZhbGlkIGFwcGxpY2F0aW9uIElELicsIHVuZGVmaW5lZCk7XG4gICAgICAgIHJlcy5zdGF0dXMoZXJyb3Iuc3RhdHVzKTtcbiAgICAgICAgcmVzLmpzb24oeyBlcnJvcjogZXJyb3IubWVzc2FnZSB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgbWFzdGVyS2V5ID0gYXdhaXQgY29uZmlnLmxvYWRNYXN0ZXJLZXkoKTtcbiAgICAgIGlmIChyZXEuZ2V0KCdYLVBhcnNlLU1hc3Rlci1LZXknKSAhPT0gbWFzdGVyS2V5KSB7XG4gICAgICAgIGNvbnN0IGVycm9yID0gY3JlYXRlU2FuaXRpemVkSHR0cEVycm9yKDQwMywgJ3VuYXV0aG9yaXplZDogbWFzdGVyIGtleSBpcyByZXF1aXJlZCcsIGNvbmZpZyk7XG4gICAgICAgIHJlcy5zdGF0dXMoZXJyb3Iuc3RhdHVzKTtcbiAgICAgICAgcmVzLmpzb24oeyBlcnJvcjogZXJyb3IubWVzc2FnZSB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKGNvbmZpZy5tYXN0ZXJLZXlJcHM/Lmxlbmd0aCAmJiAhTWlkZGxld2FyZXMuY2hlY2tJcChyZXEuaXAsIGNvbmZpZy5tYXN0ZXJLZXlJcHMsIGNvbmZpZy5tYXN0ZXJLZXlJcHNTdG9yZSkpIHtcbiAgICAgICAgY29uc3QgZXJyb3IgPSBjcmVhdGVTYW5pdGl6ZWRIdHRwRXJyb3IoNDAzLCAndW5hdXRob3JpemVkOiBtYXN0ZXIga2V5IGlzIHJlcXVpcmVkJywgY29uZmlnKTtcbiAgICAgICAgcmVzLnN0YXR1cyhlcnJvci5zdGF0dXMpO1xuICAgICAgICByZXMuanNvbih7IGVycm9yOiBlcnJvci5tZXNzYWdlIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBsZXQgcGFyc2VkQnl0ZXM7XG4gICAgICB0cnkge1xuICAgICAgICBwYXJzZWRCeXRlcyA9IFV0aWxzLnBhcnNlU2l6ZVRvQnl0ZXMobWF4VXBsb2FkU2l6ZU92ZXJyaWRlKTtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICByZXR1cm4gbmV4dChcbiAgICAgICAgICBuZXcgUGFyc2UuRXJyb3IoXG4gICAgICAgICAgICBQYXJzZS5FcnJvci5GSUxFX1NBVkVfRVJST1IsXG4gICAgICAgICAgICBgSW52YWxpZCBtYXhVcGxvYWRTaXplIG92ZXJyaWRlIHZhbHVlOiAke21heFVwbG9hZFNpemVPdmVycmlkZX1gXG4gICAgICAgICAgKVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgcmVxLl9tYXhVcGxvYWRTaXplT3ZlcnJpZGUgPSBwYXJzZWRCeXRlcztcbiAgICAgIG5leHQoKTtcbiAgICB9O1xuICB9XG5cbiAgX2JvZHlQYXJzaW5nTWlkZGxld2FyZShtYXhVcGxvYWRTaXplKSB7XG4gICAgY29uc3QgZGVmYXVsdE1heEJ5dGVzID0gVXRpbHMucGFyc2VTaXplVG9CeXRlcyhtYXhVcGxvYWRTaXplKTtcbiAgICByZXR1cm4gKHJlcSwgcmVzLCBuZXh0KSA9PiB7XG4gICAgICBpZiAocmVxLmdldCgnWC1QYXJzZS1VcGxvYWQtTW9kZScpID09PSAnc3RyZWFtJykge1xuICAgICAgICByZXEuX21heFVwbG9hZFNpemVCeXRlcyA9IHJlcS5fbWF4VXBsb2FkU2l6ZU92ZXJyaWRlID8/IGRlZmF1bHRNYXhCeXRlcztcbiAgICAgICAgcmV0dXJuIG5leHQoKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGxpbWl0ID0gcmVxLl9tYXhVcGxvYWRTaXplT3ZlcnJpZGUgPz8gbWF4VXBsb2FkU2l6ZTtcbiAgICAgIHJldHVybiBleHByZXNzLnJhdyh7IHR5cGU6ICgpID0+IHRydWUsIGxpbWl0IH0pKHJlcSwgcmVzLCBuZXh0KTtcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgY3JlYXRlSGFuZGxlcihyZXEsIHJlcywgbmV4dCkge1xuICAgIGlmIChyZXEuYXV0aC5pc1JlYWRPbmx5KSB7XG4gICAgICBjb25zdCBlcnJvciA9IGNyZWF0ZVNhbml0aXplZEh0dHBFcnJvcig0MDMsIFwicmVhZC1vbmx5IG1hc3RlcktleSBpc24ndCBhbGxvd2VkIHRvIGNyZWF0ZSBhIGZpbGUuXCIsIHJlcS5jb25maWcpO1xuICAgICAgcmVzLnN0YXR1cyhlcnJvci5zdGF0dXMpO1xuICAgICAgcmVzLmVuZChge1wiZXJyb3JcIjpcIiR7ZXJyb3IubWVzc2FnZX1cIn1gKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgY29uZmlnID0gcmVxLmNvbmZpZztcbiAgICBjb25zdCBpc01hc3RlciA9IHJlcS5hdXRoLmlzTWFzdGVyO1xuICAgIGNvbnN0IGlzTWFpbnRlbmFuY2UgPSByZXEuYXV0aC5pc01haW50ZW5hbmNlO1xuICAgIGlmICghaXNNYXN0ZXIgJiYgIWlzTWFpbnRlbmFuY2UpIHtcbiAgICAgIGNvbnN0IHVzZXIgPSByZXEuYXV0aC51c2VyO1xuICAgICAgY29uc3QgaXNMaW5rZWQgPSB1c2VyICYmIFBhcnNlLkFub255bW91c1V0aWxzLmlzTGlua2VkKHVzZXIpO1xuICAgICAgaWYgKCFjb25maWcuZmlsZVVwbG9hZC5lbmFibGVGb3JBbm9ueW1vdXNVc2VyICYmIGlzTGlua2VkKSB7XG4gICAgICAgIG5leHQoXG4gICAgICAgICAgbmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLkZJTEVfU0FWRV9FUlJPUiwgJ0ZpbGUgdXBsb2FkIGJ5IGFub255bW91cyB1c2VyIGlzIGRpc2FibGVkLicpXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICghY29uZmlnLmZpbGVVcGxvYWQuZW5hYmxlRm9yQXV0aGVudGljYXRlZFVzZXIgJiYgIWlzTGlua2VkICYmIHVzZXIpIHtcbiAgICAgICAgbmV4dChcbiAgICAgICAgICBuZXcgUGFyc2UuRXJyb3IoXG4gICAgICAgICAgICBQYXJzZS5FcnJvci5GSUxFX1NBVkVfRVJST1IsXG4gICAgICAgICAgICAnRmlsZSB1cGxvYWQgYnkgYXV0aGVudGljYXRlZCB1c2VyIGlzIGRpc2FibGVkLidcbiAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICghY29uZmlnLmZpbGVVcGxvYWQuZW5hYmxlRm9yUHVibGljICYmICF1c2VyKSB7XG4gICAgICAgIG5leHQobmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLkZJTEVfU0FWRV9FUlJPUiwgJ0ZpbGUgdXBsb2FkIGJ5IHB1YmxpYyBpcyBkaXNhYmxlZC4nKSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgZmlsZXNDb250cm9sbGVyID0gY29uZmlnLmZpbGVzQ29udHJvbGxlcjtcbiAgICBjb25zdCB7IGZpbGVuYW1lIH0gPSByZXEucGFyYW1zO1xuICAgIGNvbnN0IGNvbnRlbnRUeXBlID0gcmVxLmdldCgnQ29udGVudC10eXBlJyk7XG5cbiAgICBjb25zdCBlcnJvciA9IGZpbGVzQ29udHJvbGxlci52YWxpZGF0ZUZpbGVuYW1lKGZpbGVuYW1lKTtcbiAgICBpZiAoZXJyb3IpIHtcbiAgICAgIG5leHQoZXJyb3IpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGZpbGVFeHRlbnNpb25zID0gY29uZmlnLmZpbGVVcGxvYWQ/LmZpbGVFeHRlbnNpb25zO1xuICAgIGlmICghaXNNYXN0ZXIgJiYgZmlsZUV4dGVuc2lvbnMpIHtcbiAgICAgIGNvbnN0IGlzVmFsaWRFeHRlbnNpb24gPSBleHRlbnNpb24gPT4ge1xuICAgICAgICByZXR1cm4gZmlsZUV4dGVuc2lvbnMuc29tZShleHQgPT4ge1xuICAgICAgICAgIGlmIChleHQgPT09ICcqJykge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IHJlZ2V4ID0gbmV3IFJlZ0V4cChleHQpO1xuICAgICAgICAgIGlmIChyZWdleC50ZXN0KGV4dGVuc2lvbikpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgICAgbGV0IGV4dGVuc2lvbiA9IFV0aWxzLmdldEZpbGVFeHRlbnNpb24oZmlsZW5hbWUpO1xuICAgICAgLy8gU3RyaXAgTUlNRSBwYXJhbWV0ZXJzIChlLmcuIFwiO2NoYXJzZXQ9dXRmLThcIikgYW5kIHdoaXRlc3BhY2VcbiAgICAgIGV4dGVuc2lvbiA9IGV4dGVuc2lvbj8uc3BsaXQoJzsnKVswXT8ucmVwbGFjZSgvXFxzKy9nLCAnJyk7XG4gICAgICAvLyBJZiB0aGUgZmlsZW5hbWUgaGFzIG5vIHVzYWJsZSBleHRlbnNpb24gKG5vIGRvdCwgdHJhaWxpbmcgZG90LCBvclxuICAgICAgLy8gd2hpdGVzcGFjZS1vbmx5IHN1ZmZpeCksIGZhbGwgYmFjayB0byB0aGUgQ29udGVudC1UeXBlIHN1YnR5cGUg4oCUIHNhbWVcbiAgICAgIC8vIGFzIGEgZG90bGVzcyBmaWxlbmFtZS5cbiAgICAgIGlmICghZXh0ZW5zaW9uICYmIGNvbnRlbnRUeXBlICYmIGNvbnRlbnRUeXBlLmluY2x1ZGVzKCcvJykpIHtcbiAgICAgICAgZXh0ZW5zaW9uID0gY29udGVudFR5cGUuc3BsaXQoJy8nKVsxXT8uc3BsaXQoJzsnKVswXT8ucmVwbGFjZSgvXFxzKy9nLCAnJyk7XG4gICAgICB9XG4gICAgICAvLyBMYXN0IHJlc29ydCBmb3IgbWFsZm9ybWVkIGlucHV0cyAoZS5nLiBDb250ZW50LVR5cGUgd2l0aG91dCBhIHNsYXNoKTpcbiAgICAgIC8vIHVzZSB0aGUgcmF3IENvbnRlbnQtVHlwZSBzbyB0aGUgZXhpc3RpbmcgcmVqZWN0aW9uIHBhdGggc3RpbGwgZmlyZXMuXG4gICAgICBpZiAoIWV4dGVuc2lvbiAmJiBjb250ZW50VHlwZSkge1xuICAgICAgICBleHRlbnNpb24gPSBjb250ZW50VHlwZS5zcGxpdCgnOycpWzBdPy5yZXBsYWNlKC9cXHMrL2csICcnKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGV4dGVuc2lvbiAmJiAhaXNWYWxpZEV4dGVuc2lvbihleHRlbnNpb24pKSB7XG4gICAgICAgIG5leHQoXG4gICAgICAgICAgbmV3IFBhcnNlLkVycm9yKFxuICAgICAgICAgICAgUGFyc2UuRXJyb3IuRklMRV9TQVZFX0VSUk9SLFxuICAgICAgICAgICAgYEZpbGUgdXBsb2FkIG9mIGV4dGVuc2lvbiAke2V4dGVuc2lvbn0gaXMgZGlzYWJsZWQuYFxuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEZvciBzdHJlYW1pbmcgdXBsb2FkcywgcmVhZCBmaWxlIGRhdGEgZnJvbSBoZWFkZXJzIHNpbmNlIHRoZSBib2R5IGlzIHRoZSByYXcgc3RyZWFtXG4gICAgaWYgKHJlcS5nZXQoJ1gtUGFyc2UtVXBsb2FkLU1vZGUnKSA9PT0gJ3N0cmVhbScpIHtcbiAgICAgIHJlcS5maWxlRGF0YSA9IHt9O1xuICAgICAgaWYgKHJlcS5nZXQoJ1gtUGFyc2UtRmlsZS1EaXJlY3RvcnknKSkge1xuICAgICAgICByZXEuZmlsZURhdGEuZGlyZWN0b3J5ID0gcmVxLmdldCgnWC1QYXJzZS1GaWxlLURpcmVjdG9yeScpO1xuICAgICAgfVxuICAgICAgaWYgKHJlcS5nZXQoJ1gtUGFyc2UtRmlsZS1NZXRhZGF0YScpKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgcGFyc2VkID0gSlNPTi5wYXJzZShyZXEuZ2V0KCdYLVBhcnNlLUZpbGUtTWV0YWRhdGEnKSk7XG4gICAgICAgICAgaWYgKCFwYXJzZWQgfHwgdHlwZW9mIHBhcnNlZCAhPT0gJ29iamVjdCcgfHwgQXJyYXkuaXNBcnJheShwYXJzZWQpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmVxLmZpbGVEYXRhLm1ldGFkYXRhID0gcGFyc2VkO1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICBuZXh0KG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5JTlZBTElEX0pTT04sICdJbnZhbGlkIEpTT04gaW4gWC1QYXJzZS1GaWxlLU1ldGFkYXRhIGhlYWRlci4nKSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAocmVxLmdldCgnWC1QYXJzZS1GaWxlLVRhZ3MnKSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHBhcnNlZCA9IEpTT04ucGFyc2UocmVxLmdldCgnWC1QYXJzZS1GaWxlLVRhZ3MnKSk7XG4gICAgICAgICAgaWYgKCFwYXJzZWQgfHwgdHlwZW9mIHBhcnNlZCAhPT0gJ29iamVjdCcgfHwgQXJyYXkuaXNBcnJheShwYXJzZWQpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmVxLmZpbGVEYXRhLnRhZ3MgPSBwYXJzZWQ7XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgIG5leHQobmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLklOVkFMSURfSlNPTiwgJ0ludmFsaWQgSlNPTiBpbiBYLVBhcnNlLUZpbGUtVGFncyBoZWFkZXIuJykpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFZhbGlkYXRlIGRpcmVjdG9yeSBvcHRpb24gKHJlcXVpcmVzIG1hc3RlciBrZXkpXG4gICAgY29uc3QgZGlyZWN0b3J5ID0gcmVxLmZpbGVEYXRhPy5kaXJlY3Rvcnk7XG4gICAgaWYgKGRpcmVjdG9yeSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAoIWlzTWFzdGVyKSB7XG4gICAgICAgIG5leHQoXG4gICAgICAgICAgbmV3IFBhcnNlLkVycm9yKFxuICAgICAgICAgICAgUGFyc2UuRXJyb3IuT1BFUkFUSU9OX0ZPUkJJRERFTixcbiAgICAgICAgICAgICdEaXJlY3RvcnkgY2FuIG9ubHkgYmUgc2V0IHVzaW5nIHRoZSBNYXN0ZXIgS2V5LidcbiAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGRpcmVjdG9yeUVycm9yID0gRmlsZXNSb3V0ZXIudmFsaWRhdGVEaXJlY3RvcnkoZGlyZWN0b3J5KTtcbiAgICAgIGlmIChkaXJlY3RvcnlFcnJvcikge1xuICAgICAgICBuZXh0KGRpcmVjdG9yeUVycm9yKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIERpc3BhdGNoIHRvIHRoZSBhcHByb3ByaWF0ZSBoYW5kbGVyIGJhc2VkIG9uIHdoZXRoZXIgdGhlIGJvZHkgd2FzIGJ1ZmZlcmVkXG4gICAgaWYgKEJ1ZmZlci5pc0J1ZmZlcihyZXEuYm9keSkpIHtcbiAgICAgIHJldHVybiB0aGlzLl9oYW5kbGVCdWZmZXJlZFVwbG9hZChyZXEsIHJlcywgbmV4dCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9oYW5kbGVTdHJlYW1VcGxvYWQocmVxLCByZXMsIG5leHQpO1xuICB9XG5cbiAgYXN5bmMgX2hhbmRsZUJ1ZmZlcmVkVXBsb2FkKHJlcSwgcmVzLCBuZXh0KSB7XG4gICAgY29uc3QgY29uZmlnID0gcmVxLmNvbmZpZztcbiAgICBjb25zdCBmaWxlc0NvbnRyb2xsZXIgPSBjb25maWcuZmlsZXNDb250cm9sbGVyO1xuICAgIGNvbnN0IHsgZmlsZW5hbWUgfSA9IHJlcS5wYXJhbXM7XG4gICAgY29uc3QgY29udGVudFR5cGUgPSByZXEuZ2V0KCdDb250ZW50LXR5cGUnKTtcblxuICAgIGlmICghcmVxLmJvZHkgfHwgIXJlcS5ib2R5Lmxlbmd0aCkge1xuICAgICAgbmV4dChuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuRklMRV9TQVZFX0VSUk9SLCAnSW52YWxpZCBmaWxlIHVwbG9hZC4nKSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgYmFzZTY0ID0gcmVxLmJvZHkudG9TdHJpbmcoJ2Jhc2U2NCcpO1xuICAgIGNvbnN0IGZpbGUgPSBuZXcgUGFyc2UuRmlsZShmaWxlbmFtZSwgeyBiYXNlNjQgfSwgY29udGVudFR5cGUpO1xuICAgIGNvbnN0IHsgbWV0YWRhdGEgPSB7fSwgdGFncyA9IHt9LCBkaXJlY3RvcnkgfSA9IHJlcS5maWxlRGF0YSB8fCB7fTtcbiAgICB0cnkge1xuICAgICAgLy8gU2NhbiByZXF1ZXN0IGRhdGEgZm9yIGRlbmllZCBrZXl3b3Jkc1xuICAgICAgVXRpbHMuY2hlY2tQcm9oaWJpdGVkS2V5d29yZHMoY29uZmlnLCBtZXRhZGF0YSk7XG4gICAgICBVdGlscy5jaGVja1Byb2hpYml0ZWRLZXl3b3Jkcyhjb25maWcsIHRhZ3MpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBuZXh0KG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5JTlZBTElEX0tFWV9OQU1FLCBlcnJvcikpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBmaWxlLnNldFRhZ3ModGFncyk7XG4gICAgZmlsZS5zZXRNZXRhZGF0YShtZXRhZGF0YSk7XG4gICAgaWYgKGRpcmVjdG9yeSkge1xuICAgICAgZmlsZS5zZXREaXJlY3RvcnkoZGlyZWN0b3J5KTtcbiAgICB9XG4gICAgY29uc3QgZmlsZVNpemUgPSBCdWZmZXIuYnl0ZUxlbmd0aChyZXEuYm9keSk7XG4gICAgY29uc3QgZmlsZU9iamVjdCA9IHsgZmlsZSwgZmlsZVNpemUgfTtcbiAgICB0cnkge1xuICAgICAgLy8gcnVuIGJlZm9yZVNhdmVGaWxlIHRyaWdnZXJcbiAgICAgIGNvbnN0IHRyaWdnZXJSZXN1bHQgPSBhd2FpdCB0cmlnZ2Vycy5tYXliZVJ1bkZpbGVUcmlnZ2VyKFxuICAgICAgICB0cmlnZ2Vycy5UeXBlcy5iZWZvcmVTYXZlLFxuICAgICAgICBmaWxlT2JqZWN0LFxuICAgICAgICBjb25maWcsXG4gICAgICAgIHJlcS5hdXRoXG4gICAgICApO1xuICAgICAgbGV0IHNhdmVSZXN1bHQ7XG4gICAgICAvLyBpZiBhIG5ldyBQYXJzZUZpbGUgaXMgcmV0dXJuZWQgY2hlY2sgaWYgaXQncyBhbiBhbHJlYWR5IHNhdmVkIGZpbGVcbiAgICAgIGlmICh0cmlnZ2VyUmVzdWx0IGluc3RhbmNlb2YgUGFyc2UuRmlsZSkge1xuICAgICAgICBmaWxlT2JqZWN0LmZpbGUgPSB0cmlnZ2VyUmVzdWx0O1xuICAgICAgICBpZiAodHJpZ2dlclJlc3VsdC51cmwoKSkge1xuICAgICAgICAgIC8vIHNldCBmaWxlU2l6ZSB0byBudWxsIGJlY2F1c2Ugd2Ugd29udCBrbm93IGhvdyBiaWcgaXQgaXMgaGVyZVxuICAgICAgICAgIGZpbGVPYmplY3QuZmlsZVNpemUgPSBudWxsO1xuICAgICAgICAgIHNhdmVSZXN1bHQgPSB7XG4gICAgICAgICAgICB1cmw6IHRyaWdnZXJSZXN1bHQudXJsKCksXG4gICAgICAgICAgICBuYW1lOiB0cmlnZ2VyUmVzdWx0Ll9uYW1lLFxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIGlmIHRoZSBmaWxlIHJldHVybmVkIGJ5IHRoZSB0cmlnZ2VyIGhhcyBhbHJlYWR5IGJlZW4gc2F2ZWQgc2tpcCBzYXZpbmcgYW55dGhpbmdcbiAgICAgIGlmICghc2F2ZVJlc3VsdCkge1xuICAgICAgICAvLyB1cGRhdGUgZmlsZVNpemVcbiAgICAgICAgbGV0IGJ1ZmZlckRhdGE7XG4gICAgICAgIGlmIChmaWxlT2JqZWN0LmZpbGUuX3NvdXJjZT8uZm9ybWF0ID09PSAnYnVmZmVyJykge1xuICAgICAgICAgIGJ1ZmZlckRhdGEgPSBmaWxlT2JqZWN0LmZpbGUuX3NvdXJjZS5idWZmZXI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYnVmZmVyRGF0YSA9IEJ1ZmZlci5mcm9tKGZpbGVPYmplY3QuZmlsZS5fZGF0YSwgJ2Jhc2U2NCcpO1xuICAgICAgICB9XG4gICAgICAgIGZpbGVPYmplY3QuZmlsZVNpemUgPSBCdWZmZXIuYnl0ZUxlbmd0aChidWZmZXJEYXRhKTtcbiAgICAgICAgLy8gcHJlcGFyZSBmaWxlIG9wdGlvbnNcbiAgICAgICAgY29uc3QgZmlsZU9wdGlvbnMgPSB7XG4gICAgICAgICAgbWV0YWRhdGE6IGZpbGVPYmplY3QuZmlsZS5fbWV0YWRhdGEsXG4gICAgICAgIH07XG4gICAgICAgIC8vIHNvbWUgczMtY29tcGF0aWJsZSBwcm92aWRlcnMgKERpZ2l0YWxPY2VhbiwgTGlub2RlKSBkbyBub3QgYWNjZXB0IHRhZ3NcbiAgICAgICAgLy8gc28gd2UgZG8gbm90IGluY2x1ZGUgdGhlIHRhZ3Mgb3B0aW9uIGlmIGl0IGlzIGVtcHR5LlxuICAgICAgICBjb25zdCBmaWxlVGFncyA9XG4gICAgICAgICAgT2JqZWN0LmtleXMoZmlsZU9iamVjdC5maWxlLl90YWdzKS5sZW5ndGggPiAwID8geyB0YWdzOiBmaWxlT2JqZWN0LmZpbGUuX3RhZ3MgfSA6IHt9O1xuICAgICAgICBPYmplY3QuYXNzaWduKGZpbGVPcHRpb25zLCBmaWxlVGFncyk7XG4gICAgICAgIC8vIGluY2x1ZGUgZGlyZWN0b3J5IGlmIHNldCAoZnJvbSBjbGllbnQgcmVxdWVzdCBvciBiZWZvcmVTYXZlRmlsZSB0cmlnZ2VyKVxuICAgICAgICBpZiAoZmlsZU9iamVjdC5maWxlLl9kaXJlY3RvcnkpIHtcbiAgICAgICAgICBmaWxlT3B0aW9ucy5kaXJlY3RvcnkgPSBmaWxlT2JqZWN0LmZpbGUuX2RpcmVjdG9yeTtcbiAgICAgICAgfVxuICAgICAgICAvLyBzYXZlIGZpbGVcbiAgICAgICAgY29uc3QgY3JlYXRlRmlsZVJlc3VsdCA9IGF3YWl0IGZpbGVzQ29udHJvbGxlci5jcmVhdGVGaWxlKFxuICAgICAgICAgIGNvbmZpZyxcbiAgICAgICAgICBmaWxlT2JqZWN0LmZpbGUuX25hbWUsXG4gICAgICAgICAgYnVmZmVyRGF0YSxcbiAgICAgICAgICBmaWxlT2JqZWN0LmZpbGUuX3NvdXJjZS50eXBlLFxuICAgICAgICAgIGZpbGVPcHRpb25zXG4gICAgICAgICk7XG4gICAgICAgIC8vIHVwZGF0ZSBmaWxlIHdpdGggbmV3IGRhdGFcbiAgICAgICAgZmlsZU9iamVjdC5maWxlLl9uYW1lID0gY3JlYXRlRmlsZVJlc3VsdC5uYW1lO1xuICAgICAgICBmaWxlT2JqZWN0LmZpbGUuX3VybCA9IGNyZWF0ZUZpbGVSZXN1bHQudXJsO1xuICAgICAgICBmaWxlT2JqZWN0LmZpbGUuX3JlcXVlc3RUYXNrID0gbnVsbDtcbiAgICAgICAgZmlsZU9iamVjdC5maWxlLl9wcmV2aW91c1NhdmUgPSBQcm9taXNlLnJlc29sdmUoZmlsZU9iamVjdC5maWxlKTtcbiAgICAgICAgc2F2ZVJlc3VsdCA9IHtcbiAgICAgICAgICB1cmw6IGNyZWF0ZUZpbGVSZXN1bHQudXJsLFxuICAgICAgICAgIG5hbWU6IGNyZWF0ZUZpbGVSZXN1bHQubmFtZSxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIC8vIHJ1biBhZnRlclNhdmVGaWxlIHRyaWdnZXJcbiAgICAgIGF3YWl0IHRyaWdnZXJzLm1heWJlUnVuRmlsZVRyaWdnZXIodHJpZ2dlcnMuVHlwZXMuYWZ0ZXJTYXZlLCBmaWxlT2JqZWN0LCBjb25maWcsIHJlcS5hdXRoKTtcbiAgICAgIHJlcy5zdGF0dXMoMjAxKTtcbiAgICAgIHJlcy5zZXQoJ0xvY2F0aW9uJywgc2F2ZVJlc3VsdC51cmwpO1xuICAgICAgcmVzLmpzb24oc2F2ZVJlc3VsdCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgbG9nZ2VyLmVycm9yKCdFcnJvciBjcmVhdGluZyBhIGZpbGU6ICcsIGUpO1xuICAgICAgY29uc3QgZXJyb3IgPSB0cmlnZ2Vycy5yZXNvbHZlRXJyb3IoZSwge1xuICAgICAgICBjb2RlOiBQYXJzZS5FcnJvci5GSUxFX1NBVkVfRVJST1IsXG4gICAgICAgIG1lc3NhZ2U6IGBDb3VsZCBub3Qgc3RvcmUgZmlsZTogJHtmaWxlT2JqZWN0LmZpbGUuX25hbWV9LmAsXG4gICAgICB9KTtcbiAgICAgIG5leHQoZXJyb3IpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIF9oYW5kbGVTdHJlYW1VcGxvYWQocmVxLCByZXMsIG5leHQpIHtcbiAgICBjb25zdCBjb25maWcgPSByZXEuY29uZmlnO1xuICAgIGNvbnN0IGZpbGVzQ29udHJvbGxlciA9IGNvbmZpZy5maWxlc0NvbnRyb2xsZXI7XG4gICAgY29uc3QgeyBmaWxlbmFtZSB9ID0gcmVxLnBhcmFtcztcbiAgICBsZXQgY29udGVudFR5cGUgPSByZXEuZ2V0KCdDb250ZW50LVR5cGUnKTtcbiAgICBjb25zdCBtYXhCeXRlcyA9IHJlcS5fbWF4VXBsb2FkU2l6ZUJ5dGVzO1xuICAgIGxldCBzdHJlYW07XG5cbiAgICB0cnkge1xuICAgICAgLy8gRWFybHkgcmVqZWN0aW9uIHZpYSBDb250ZW50LUxlbmd0aCBoZWFkZXJcbiAgICAgIGNvbnN0IGNvbnRlbnRMZW5ndGggPSByZXEuZ2V0KCdDb250ZW50LUxlbmd0aCcpO1xuICAgICAgaWYgKGNvbnRlbnRMZW5ndGggJiYgcGFyc2VJbnQoY29udGVudExlbmd0aCwgMTApID4gbWF4Qnl0ZXMpIHtcbiAgICAgICAgcmVxLnJlc3VtZSgpO1xuICAgICAgICBuZXh0KG5ldyBQYXJzZS5FcnJvcihcbiAgICAgICAgICBQYXJzZS5FcnJvci5GSUxFX1NBVkVfRVJST1IsXG4gICAgICAgICAgYEZpbGUgc2l6ZSBleGNlZWRzIG1heGltdW0gYWxsb3dlZDogJHttYXhCeXRlc30gYnl0ZXMuYFxuICAgICAgICApKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBtaW1lID0gKGF3YWl0IGltcG9ydCgnbWltZScpKS5kZWZhdWx0O1xuXG4gICAgICAvLyBJbmZlciBjb250ZW50IHR5cGUgZnJvbSBleHRlbnNpb24gb3IgYWRkIGV4dGVuc2lvbiBmcm9tIGNvbnRlbnQgdHlwZVxuICAgICAgY29uc3QgaGFzRXh0ZW5zaW9uID0gZmlsZW5hbWUgJiYgZmlsZW5hbWUuaW5jbHVkZXMoJy4nKTtcbiAgICAgIGlmIChoYXNFeHRlbnNpb24gJiYgIWNvbnRlbnRUeXBlKSB7XG4gICAgICAgIGNvbnRlbnRUeXBlID0gbWltZS5nZXRUeXBlKGZpbGVuYW1lKTtcbiAgICAgIH0gZWxzZSBpZiAoIWhhc0V4dGVuc2lvbiAmJiBjb250ZW50VHlwZSkge1xuICAgICAgICAvLyBleHRlbnNpb24gd2lsbCBiZSBhZGRlZCBieSBmaWxlc0NvbnRyb2xsZXIuY3JlYXRlRmlsZVxuICAgICAgfVxuXG4gICAgICAvLyBDcmVhdGUgc2l6ZS1saW1pdGVkIHN0cmVhbSB3cmFwcGluZyB0aGUgcmVxdWVzdFxuICAgICAgc3RyZWFtID0gY3JlYXRlU2l6ZUxpbWl0ZWRTdHJlYW0ocmVxLCBtYXhCeXRlcyk7XG5cbiAgICAgIC8vIEJ1aWxkIGEgUGFyc2UuRmlsZSB3aXRoIG5vIF9kYXRhIChzdHJlYW1pbmcgbW9kZSlcbiAgICAgIGNvbnN0IGZpbGUgPSBuZXcgUGFyc2UuRmlsZShmaWxlbmFtZSwgeyBiYXNlNjQ6ICcnIH0sIGNvbnRlbnRUeXBlKTtcbiAgICAgIGNvbnN0IHsgbWV0YWRhdGEgPSB7fSwgdGFncyA9IHt9LCBkaXJlY3RvcnkgfSA9IHJlcS5maWxlRGF0YSB8fCB7fTtcblxuICAgICAgLy8gVmFsaWRhdGUgbWV0YWRhdGEgYW5kIHRhZ3MgZm9yIHByb2hpYml0ZWQga2V5d29yZHNcbiAgICAgIHRyeSB7XG4gICAgICAgIFV0aWxzLmNoZWNrUHJvaGliaXRlZEtleXdvcmRzKGNvbmZpZywgbWV0YWRhdGEpO1xuICAgICAgICBVdGlscy5jaGVja1Byb2hpYml0ZWRLZXl3b3Jkcyhjb25maWcsIHRhZ3MpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgc3RyZWFtLmRlc3Ryb3koKTtcbiAgICAgICAgbmV4dChuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuSU5WQUxJRF9LRVlfTkFNRSwgZXJyb3IpKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBmaWxlLnNldFRhZ3ModGFncyk7XG4gICAgICBmaWxlLnNldE1ldGFkYXRhKG1ldGFkYXRhKTtcbiAgICAgIGlmIChkaXJlY3RvcnkpIHtcbiAgICAgICAgZmlsZS5zZXREaXJlY3RvcnkoZGlyZWN0b3J5KTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZmlsZVNpemUgPSByZXEuZ2V0KCdDb250ZW50LUxlbmd0aCcpXG4gICAgICAgID8gcGFyc2VJbnQocmVxLmdldCgnQ29udGVudC1MZW5ndGgnKSwgMTApXG4gICAgICAgIDogbnVsbDtcbiAgICAgIGNvbnN0IGZpbGVPYmplY3QgPSB7IGZpbGUsIGZpbGVTaXplLCBzdHJlYW06IHRydWUgfTtcblxuICAgICAgLy8gUnVuIGJlZm9yZVNhdmVGaWxlIHRyaWdnZXJcbiAgICAgIGNvbnN0IHRyaWdnZXJSZXN1bHQgPSBhd2FpdCB0cmlnZ2Vycy5tYXliZVJ1bkZpbGVUcmlnZ2VyKFxuICAgICAgICB0cmlnZ2Vycy5UeXBlcy5iZWZvcmVTYXZlLFxuICAgICAgICBmaWxlT2JqZWN0LFxuICAgICAgICBjb25maWcsXG4gICAgICAgIHJlcS5hdXRoXG4gICAgICApO1xuXG4gICAgICBsZXQgc2F2ZVJlc3VsdDtcbiAgICAgIC8vIElmIGEgbmV3IFBhcnNlRmlsZSBpcyByZXR1cm5lZCwgY2hlY2sgaWYgaXQncyBhbiBhbHJlYWR5IHNhdmVkIGZpbGVcbiAgICAgIGlmICh0cmlnZ2VyUmVzdWx0IGluc3RhbmNlb2YgUGFyc2UuRmlsZSkge1xuICAgICAgICBmaWxlT2JqZWN0LmZpbGUgPSB0cmlnZ2VyUmVzdWx0O1xuICAgICAgICBpZiAodHJpZ2dlclJlc3VsdC51cmwoKSkge1xuICAgICAgICAgIGZpbGVPYmplY3QuZmlsZVNpemUgPSBudWxsO1xuICAgICAgICAgIHNhdmVSZXN1bHQgPSB7XG4gICAgICAgICAgICB1cmw6IHRyaWdnZXJSZXN1bHQudXJsKCksXG4gICAgICAgICAgICBuYW1lOiB0cmlnZ2VyUmVzdWx0Ll9uYW1lLFxuICAgICAgICAgIH07XG4gICAgICAgICAgLy8gRGVzdHJveSBzdHJlYW0gdG8gcmVtb3ZlIGxpc3RlbmVycyBhbmQgZHJhaW4gcmVxdWVzdFxuICAgICAgICAgIHN0cmVhbS5kZXN0cm95KCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gSWYgdGhlIGZpbGUgcmV0dXJuZWQgYnkgdGhlIHRyaWdnZXIgaGFzIGFscmVhZHkgYmVlbiBzYXZlZCwgc2tpcCBzYXZpbmdcbiAgICAgIGlmICghc2F2ZVJlc3VsdCkge1xuICAgICAgICAvLyBQcmVwYXJlIGZpbGUgb3B0aW9uc1xuICAgICAgICBjb25zdCBmaWxlT3B0aW9ucyA9IHtcbiAgICAgICAgICBtZXRhZGF0YTogZmlsZU9iamVjdC5maWxlLl9tZXRhZGF0YSxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgZmlsZVRhZ3MgPVxuICAgICAgICAgIE9iamVjdC5rZXlzKGZpbGVPYmplY3QuZmlsZS5fdGFncykubGVuZ3RoID4gMCA/IHsgdGFnczogZmlsZU9iamVjdC5maWxlLl90YWdzIH0gOiB7fTtcbiAgICAgICAgT2JqZWN0LmFzc2lnbihmaWxlT3B0aW9ucywgZmlsZVRhZ3MpO1xuICAgICAgICAvLyBpbmNsdWRlIGRpcmVjdG9yeSBpZiBzZXQgKGZyb20gY2xpZW50IHJlcXVlc3Qgb3IgYmVmb3JlU2F2ZUZpbGUgdHJpZ2dlcilcbiAgICAgICAgaWYgKGZpbGVPYmplY3QuZmlsZS5fZGlyZWN0b3J5KSB7XG4gICAgICAgICAgZmlsZU9wdGlvbnMuZGlyZWN0b3J5ID0gZmlsZU9iamVjdC5maWxlLl9kaXJlY3Rvcnk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBQYXNzIHN0cmVhbSBkaXJlY3RseSB0byBmaWxlc0NvbnRyb2xsZXIg4oCUIGl0IHdpbGwgYnVmZmVyIGlmIGFkYXB0ZXIgZG9lc24ndCBzdXBwb3J0IHN0cmVhbWluZ1xuICAgICAgICBjb25zdCBzb3VyY2VUeXBlID0gZmlsZU9iamVjdC5maWxlLl9zb3VyY2U/LnR5cGUgfHwgY29udGVudFR5cGU7XG4gICAgICAgIGNvbnN0IGNyZWF0ZUZpbGVSZXN1bHQgPSBhd2FpdCBmaWxlc0NvbnRyb2xsZXIuY3JlYXRlRmlsZShcbiAgICAgICAgICBjb25maWcsXG4gICAgICAgICAgZmlsZU9iamVjdC5maWxlLl9uYW1lLFxuICAgICAgICAgIHN0cmVhbSxcbiAgICAgICAgICBzb3VyY2VUeXBlLFxuICAgICAgICAgIGZpbGVPcHRpb25zXG4gICAgICAgICk7XG5cbiAgICAgICAgLy8gVXBkYXRlIGZpbGUgd2l0aCBuZXcgZGF0YVxuICAgICAgICBmaWxlT2JqZWN0LmZpbGUuX25hbWUgPSBjcmVhdGVGaWxlUmVzdWx0Lm5hbWU7XG4gICAgICAgIGZpbGVPYmplY3QuZmlsZS5fdXJsID0gY3JlYXRlRmlsZVJlc3VsdC51cmw7XG4gICAgICAgIGZpbGVPYmplY3QuZmlsZS5fcmVxdWVzdFRhc2sgPSBudWxsO1xuICAgICAgICBmaWxlT2JqZWN0LmZpbGUuX3ByZXZpb3VzU2F2ZSA9IFByb21pc2UucmVzb2x2ZShmaWxlT2JqZWN0LmZpbGUpO1xuICAgICAgICBzYXZlUmVzdWx0ID0ge1xuICAgICAgICAgIHVybDogY3JlYXRlRmlsZVJlc3VsdC51cmwsXG4gICAgICAgICAgbmFtZTogY3JlYXRlRmlsZVJlc3VsdC5uYW1lLFxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICAvLyBSdW4gYWZ0ZXJTYXZlRmlsZSB0cmlnZ2VyXG4gICAgICBhd2FpdCB0cmlnZ2Vycy5tYXliZVJ1bkZpbGVUcmlnZ2VyKHRyaWdnZXJzLlR5cGVzLmFmdGVyU2F2ZSwgZmlsZU9iamVjdCwgY29uZmlnLCByZXEuYXV0aCk7XG4gICAgICByZXMuc3RhdHVzKDIwMSk7XG4gICAgICByZXMuc2V0KCdMb2NhdGlvbicsIHNhdmVSZXN1bHQudXJsKTtcbiAgICAgIHJlcy5qc29uKHNhdmVSZXN1bHQpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIC8vIERlc3Ryb3kgc3RyZWFtIHRvIHJlbW92ZSBsaXN0ZW5lcnMgYW5kIGRyYWluIHJlcXVlc3QsIG9yIHJlc3VtZSBkaXJlY3RseVxuICAgICAgaWYgKHN0cmVhbSkge1xuICAgICAgICBzdHJlYW0uZGVzdHJveSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVxLnJlc3VtZSgpO1xuICAgICAgfVxuICAgICAgbG9nZ2VyLmVycm9yKCdFcnJvciBjcmVhdGluZyBhIGZpbGU6ICcsIGUpO1xuICAgICAgY29uc3QgZXJyb3IgPSB0cmlnZ2Vycy5yZXNvbHZlRXJyb3IoZSwge1xuICAgICAgICBjb2RlOiBQYXJzZS5FcnJvci5GSUxFX1NBVkVfRVJST1IsXG4gICAgICAgIG1lc3NhZ2U6IGBDb3VsZCBub3Qgc3RvcmUgZmlsZTogJHtmaWxlbmFtZX0uYCxcbiAgICAgIH0pO1xuICAgICAgbmV4dChlcnJvcik7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZGVsZXRlSGFuZGxlcihyZXEsIHJlcywgbmV4dCkge1xuICAgIGlmIChyZXEuYXV0aC5pc1JlYWRPbmx5KSB7XG4gICAgICBjb25zdCBlcnJvciA9IGNyZWF0ZVNhbml0aXplZEh0dHBFcnJvcig0MDMsIFwicmVhZC1vbmx5IG1hc3RlcktleSBpc24ndCBhbGxvd2VkIHRvIGRlbGV0ZSBhIGZpbGUuXCIsIHJlcS5jb25maWcpO1xuICAgICAgcmVzLnN0YXR1cyhlcnJvci5zdGF0dXMpO1xuICAgICAgcmVzLmVuZChge1wiZXJyb3JcIjpcIiR7ZXJyb3IubWVzc2FnZX1cIn1gKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHsgZmlsZXNDb250cm9sbGVyIH0gPSByZXEuY29uZmlnO1xuICAgICAgY29uc3QgZmlsZW5hbWUgPSBGaWxlc1JvdXRlci5fZ2V0RmlsZW5hbWVGcm9tUGFyYW1zKHJlcSk7XG4gICAgICAvLyBydW4gYmVmb3JlRGVsZXRlRmlsZSB0cmlnZ2VyXG4gICAgICBjb25zdCBmaWxlID0gbmV3IFBhcnNlLkZpbGUoZmlsZW5hbWUpO1xuICAgICAgZmlsZS5fdXJsID0gYXdhaXQgZmlsZXNDb250cm9sbGVyLmFkYXB0ZXIuZ2V0RmlsZUxvY2F0aW9uKHJlcS5jb25maWcsIGZpbGVuYW1lKTtcbiAgICAgIGNvbnN0IGZpbGVPYmplY3QgPSB7IGZpbGUsIGZpbGVTaXplOiBudWxsIH07XG4gICAgICBhd2FpdCB0cmlnZ2Vycy5tYXliZVJ1bkZpbGVUcmlnZ2VyKFxuICAgICAgICB0cmlnZ2Vycy5UeXBlcy5iZWZvcmVEZWxldGUsXG4gICAgICAgIGZpbGVPYmplY3QsXG4gICAgICAgIHJlcS5jb25maWcsXG4gICAgICAgIHJlcS5hdXRoXG4gICAgICApO1xuICAgICAgLy8gZGVsZXRlIGZpbGVcbiAgICAgIGF3YWl0IGZpbGVzQ29udHJvbGxlci5kZWxldGVGaWxlKHJlcS5jb25maWcsIGZpbGVuYW1lKTtcbiAgICAgIC8vIHJ1biBhZnRlckRlbGV0ZUZpbGUgdHJpZ2dlclxuICAgICAgYXdhaXQgdHJpZ2dlcnMubWF5YmVSdW5GaWxlVHJpZ2dlcihcbiAgICAgICAgdHJpZ2dlcnMuVHlwZXMuYWZ0ZXJEZWxldGUsXG4gICAgICAgIGZpbGVPYmplY3QsXG4gICAgICAgIHJlcS5jb25maWcsXG4gICAgICAgIHJlcS5hdXRoXG4gICAgICApO1xuICAgICAgcmVzLnN0YXR1cygyMDApO1xuICAgICAgLy8gVE9ETzogcmV0dXJuIHVzZWZ1bCBKU09OIGhlcmU/XG4gICAgICByZXMuZW5kKCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgbG9nZ2VyLmVycm9yKCdFcnJvciBkZWxldGluZyBhIGZpbGU6ICcsIGUpO1xuICAgICAgY29uc3QgZXJyb3IgPSB0cmlnZ2Vycy5yZXNvbHZlRXJyb3IoZSwge1xuICAgICAgICBjb2RlOiBQYXJzZS5FcnJvci5GSUxFX0RFTEVURV9FUlJPUixcbiAgICAgICAgbWVzc2FnZTogJ0NvdWxkIG5vdCBkZWxldGUgZmlsZS4nLFxuICAgICAgfSk7XG4gICAgICBuZXh0KGVycm9yKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBtZXRhZGF0YUhhbmRsZXIocmVxLCByZXMpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgY29uZmlnID0gQ29uZmlnLmdldChyZXEucGFyYW1zLmFwcElkKTtcbiAgICAgIGlmICghY29uZmlnKSB7XG4gICAgICAgIHJlcy5zdGF0dXMoMjAwKTtcbiAgICAgICAgcmVzLmpzb24oe30pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBGaWxlc1JvdXRlci5fdmFsaWRhdGVGaWxlRG93bmxvYWQocmVxLCBjb25maWcpO1xuICAgICAgY29uc3QgeyBmaWxlc0NvbnRyb2xsZXIgfSA9IGNvbmZpZztcbiAgICAgIGxldCBmaWxlbmFtZSA9IEZpbGVzUm91dGVyLl9nZXRGaWxlbmFtZUZyb21QYXJhbXMocmVxKTtcbiAgICAgIGNvbnN0IGZpbGUgPSBuZXcgUGFyc2UuRmlsZShmaWxlbmFtZSwgeyBiYXNlNjQ6ICcnIH0pO1xuICAgICAgY29uc3QgZmlsZUF1dGggPSByZXEuYXV0aDtcbiAgICAgIGNvbnN0IHRyaWdnZXJSZXN1bHQgPSBhd2FpdCB0cmlnZ2Vycy5tYXliZVJ1bkZpbGVUcmlnZ2VyKFxuICAgICAgICB0cmlnZ2Vycy5UeXBlcy5iZWZvcmVGaW5kLFxuICAgICAgICB7IGZpbGUgfSxcbiAgICAgICAgY29uZmlnLFxuICAgICAgICBmaWxlQXV0aFxuICAgICAgKTtcbiAgICAgIGlmICh0cmlnZ2VyUmVzdWx0Py5maWxlPy5fbmFtZSkge1xuICAgICAgICBmaWxlbmFtZSA9IHRyaWdnZXJSZXN1bHQuZmlsZS5fbmFtZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBmaWxlc0NvbnRyb2xsZXIuZ2V0TWV0YWRhdGEoZmlsZW5hbWUpLmNhdGNoKCgpID0+IHtcbiAgICAgICAgcmVzLnN0YXR1cygyMDApO1xuICAgICAgICByZXMuanNvbih7fSk7XG4gICAgICB9KTtcbiAgICAgIGlmICghZGF0YSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBhd2FpdCB0cmlnZ2Vycy5tYXliZVJ1bkZpbGVUcmlnZ2VyKFxuICAgICAgICB0cmlnZ2Vycy5UeXBlcy5hZnRlckZpbmQsXG4gICAgICAgIHsgZmlsZSB9LFxuICAgICAgICBjb25maWcsXG4gICAgICAgIGZpbGVBdXRoXG4gICAgICApO1xuICAgICAgcmVzLnN0YXR1cygyMDApO1xuICAgICAgcmVzLmpzb24oZGF0YSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc3QgZXJyID0gdHJpZ2dlcnMucmVzb2x2ZUVycm9yKGUsIHtcbiAgICAgICAgY29kZTogUGFyc2UuRXJyb3IuU0NSSVBUX0ZBSUxFRCxcbiAgICAgICAgbWVzc2FnZTogJ0NvdWxkIG5vdCBnZXQgZmlsZSBtZXRhZGF0YS4nLFxuICAgICAgfSk7XG4gICAgICByZXMuc3RhdHVzKDQwMyk7XG4gICAgICByZXMuanNvbih7IGNvZGU6IGVyci5jb2RlLCBlcnJvcjogZXJyLm1lc3NhZ2UgfSk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGlzRmlsZVN0cmVhbWFibGUocmVxLCBmaWxlc0NvbnRyb2xsZXIpIHtcbiAgY29uc3QgcmFuZ2UgPSAocmVxLmdldCgnUmFuZ2UnKSB8fCAnLy0vJykuc3BsaXQoJy0nKTtcbiAgY29uc3Qgc3RhcnQgPSBOdW1iZXIocmFuZ2VbMF0pO1xuICBjb25zdCBlbmQgPSBOdW1iZXIocmFuZ2VbMV0pO1xuICByZXR1cm4gKFxuICAgICghaXNOYU4oc3RhcnQpIHx8ICFpc05hTihlbmQpKSAmJiB0eXBlb2YgZmlsZXNDb250cm9sbGVyLmFkYXB0ZXIuaGFuZGxlRmlsZVN0cmVhbSA9PT0gJ2Z1bmN0aW9uJ1xuICApO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUEsSUFBQUEsUUFBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsV0FBQSxHQUFBQyx1QkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQUcsS0FBQSxHQUFBSixzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUksT0FBQSxHQUFBTCxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUssT0FBQSxHQUFBTixzQkFBQSxDQUFBQyxPQUFBO0FBR0EsSUFBQU0sT0FBQSxHQUFBTixPQUFBO0FBQ0EsSUFBQU8sTUFBQSxHQUFBUCxPQUFBO0FBQW9ELFNBQUFFLHdCQUFBTSxDQUFBLEVBQUFDLENBQUEsNkJBQUFDLE9BQUEsTUFBQUMsQ0FBQSxPQUFB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
816
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZXhwcmVzcyIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiTWlkZGxld2FyZXMiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsIl9ub2RlIiwiX0NvbmZpZyIsIl9sb2dnZXIiLCJfc3RyZWFtIiwiX0Vycm9yIiwiZSIsInQiLCJXZWFrTWFwIiwiciIsIm4iLCJfX2VzTW9kdWxlIiwibyIsImkiLCJmIiwiX19wcm90b19fIiwiZGVmYXVsdCIsImhhcyIsImdldCIsInNldCIsImhhc093blByb3BlcnR5IiwiY2FsbCIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwidHJpZ2dlcnMiLCJVdGlscyIsImNyZWF0ZVNpemVMaW1pdGVkU3RyZWFtIiwic291cmNlIiwibWF4Qnl0ZXMiLCJ0b3RhbEJ5dGVzIiwic3RhcnRlZCIsInNvdXJjZUVuZGVkIiwib25EYXRhIiwib25FbmQiLCJvbkVycm9yIiwib3V0cHV0IiwiUmVhZGFibGUiLCJyZWFkIiwiY2h1bmsiLCJsZW5ndGgiLCJkZXN0cm95IiwiUGFyc2UiLCJFcnJvciIsIkZJTEVfU0FWRV9FUlJPUiIsInB1c2giLCJwYXVzZSIsImVyciIsIm9uIiwicmVzdW1lIiwiY2FsbGJhY2siLCJyZW1vdmVMaXN0ZW5lciIsIlJFU0VSVkVEX0RJUkVDVE9SWV9TRUdNRU5UUyIsImV4cG9ydHMiLCJGaWxlc1JvdXRlciIsImV4cHJlc3NSb3V0ZXIiLCJtYXhVcGxvYWRTaXplIiwicm91dGVyIiwiZXhwcmVzcyIsIlJvdXRlciIsImluaXRJbmZvIiwicmVxIiwicmVzIiwibmV4dCIsImluZm8iLCJzZXNzaW9uVG9rZW4iLCJpbnN0YWxsYXRpb25JZCIsImF1dGgiLCJpc01hc3RlciIsImhhbmRsZVBhcnNlU2Vzc2lvbiIsIm1ldGFkYXRhSGFuZGxlciIsImdldEhhbmRsZXIiLCJwb3N0IiwiSU5WQUxJRF9GSUxFX05BTUUiLCJfZWFybHlIZWFkZXJzTWlkZGxld2FyZSIsIl9ib2R5UGFyc2luZ01pZGRsZXdhcmUiLCJoYW5kbGVQYXJzZUhlYWRlcnMiLCJjcmVhdGVIYW5kbGVyIiwiYmluZCIsImRlbGV0ZSIsImVuZm9yY2VNYXN0ZXJLZXlBY2Nlc3MiLCJkZWxldGVIYW5kbGVyIiwiX2dldEZpbGVuYW1lRnJvbVBhcmFtcyIsInBhcnRzIiwicGFyYW1zIiwiZmlsZXBhdGgiLCJBcnJheSIsImlzQXJyYXkiLCJqb2luIiwidmFsaWRhdGVEaXJlY3RvcnkiLCJkaXJlY3RvcnkiLCJpbmNsdWRlcyIsInN0YXJ0c1dpdGgiLCJlbmRzV2l0aCIsImZpcnN0U2VnbWVudCIsInNwbGl0IiwiZGlyUmVnZXgiLCJ0ZXN0IiwiX3ZhbGlkYXRlRmlsZURvd25sb2FkIiwiY29uZmlnIiwiaXNNYWludGVuYW5jZSIsInVzZXIiLCJpc0xpbmtlZCIsIkFub255bW91c1V0aWxzIiwiZmlsZURvd25sb2FkIiwiZW5hYmxlRm9yQW5vbnltb3VzVXNlciIsIk9QRVJBVElPTl9GT1JCSURERU4iLCJlbmFibGVGb3JBdXRoZW50aWNhdGVkVXNlciIsImVuYWJsZUZvclB1YmxpYyIsIkNvbmZpZyIsImFwcElkIiwiZXJyb3IiLCJjcmVhdGVTYW5pdGl6ZWRIdHRwRXJyb3IiLCJzdGF0dXMiLCJqc29uIiwibWVzc2FnZSIsImZpbGVuYW1lIiwiZmlsZXNDb250cm9sbGVyIiwibWltZSIsImNvbnRlbnRUeXBlIiwiZ2V0VHlwZSIsImZpbGUiLCJGaWxlIiwiYmFzZTY0IiwiZmlsZUF1dGgiLCJ0cmlnZ2VyUmVzdWx0IiwibWF5YmVSdW5GaWxlVHJpZ2dlciIsIlR5cGVzIiwiYmVmb3JlRmluZCIsIl9uYW1lIiwiZGVmYXVsdFJlc3BvbnNlSGVhZGVycyIsImlzRmlsZVN0cmVhbWFibGUiLCJhZnRlckZpbmQiLCJmb3JjZURvd25sb2FkIiwicmVzcG9uc2VIZWFkZXJzIiwia2V5IiwidmFsdWUiLCJlbnRyaWVzIiwiaGFuZGxlRmlsZVN0cmVhbSIsImNhdGNoIiwiZW5kIiwiZGF0YSIsImdldEZpbGVEYXRhIiwidG9TdHJpbmciLCJCdWZmZXIiLCJmcm9tIiwiX2RhdGEiLCJyZXNvbHZlRXJyb3IiLCJjb2RlIiwiU0NSSVBUX0ZBSUxFRCIsIm1heFVwbG9hZFNpemVPdmVycmlkZSIsInVuZGVmaW5lZCIsIm1hc3RlcktleSIsImxvYWRNYXN0ZXJLZXkiLCJtYXN0ZXJLZXlJcHMiLCJjaGVja0lwIiwiaXAiLCJtYXN0ZXJLZXlJcHNTdG9yZSIsInBhcnNlZEJ5dGVzIiwicGFyc2VTaXplVG9CeXRlcyIsIl9tYXhVcGxvYWRTaXplT3ZlcnJpZGUiLCJkZWZhdWx0TWF4Qnl0ZXMiLCJfbWF4VXBsb2FkU2l6ZUJ5dGVzIiwibGltaXQiLCJyYXciLCJ0eXBlIiwiaXNSZWFkT25seSIsImZpbGVVcGxvYWQiLCJ2YWxpZGF0ZUZpbGVuYW1lIiwiZmlsZUV4dGVuc2lvbnMiLCJpc1ZhbGlkRXh0ZW5zaW9uIiwiZXh0ZW5zaW9uIiwic29tZSIsImV4dCIsInJlZ2V4IiwiUmVnRXhwIiwicmVqZWN0RXh0ZW5zaW9uIiwiZ2V0RmlsZUV4dGVuc2lvbiIsInJlcGxhY2UiLCJpc0V4dGVuc2lvblJlY29nbml6ZWQiLCJhbGxvd3NBbGxFeHRlbnNpb25zIiwic2xhc2hJbmRleCIsImluZGV4T2YiLCJzbGljZSIsInRyaW0iLCJzdWJ0eXBlIiwidG9rZW4iLCJiYXJlVG9rZW4iLCJjb250ZW50VHlwZUV4dGVuc2lvbiIsImZpbGVEYXRhIiwicGFyc2VkIiwiSlNPTiIsInBhcnNlIiwibWV0YWRhdGEiLCJJTlZBTElEX0pTT04iLCJ0YWdzIiwiZGlyZWN0b3J5RXJyb3IiLCJpc0J1ZmZlciIsImJvZHkiLCJfaGFuZGxlQnVmZmVyZWRVcGxvYWQiLCJfaGFuZGxlU3RyZWFtVXBsb2FkIiwiY2hlY2tQcm9oaWJpdGVkS2V5d29yZHMiLCJJTlZBTElEX0tFWV9OQU1FIiwic2V0VGFncyIsInNldE1ldGFkYXRhIiwic2V0RGlyZWN0b3J5IiwiZmlsZVNpemUiLCJieXRlTGVuZ3RoIiwiZmlsZU9iamVjdCIsImJlZm9yZVNhdmUiLCJzYXZlUmVzdWx0IiwidXJsIiwibmFtZSIsImJ1ZmZlckRhdGEiLCJfc291cmNlIiwiZm9ybWF0IiwiYnVmZmVyIiwiZmlsZU9wdGlvbnMiLCJfbWV0YWRhdGEiLCJmaWxlVGFncyIsImtleXMiLCJfdGFncyIsImFzc2lnbiIsIl9kaXJlY3RvcnkiLCJjcmVhdGVGaWxlUmVzdWx0IiwiY3JlYXRlRmlsZSIsIl91cmwiLCJfcmVxdWVzdFRhc2siLCJfcHJldmlvdXNTYXZlIiwiUHJvbWlzZSIsInJlc29sdmUiLCJhZnRlclNhdmUiLCJsb2dnZXIiLCJzdHJlYW0iLCJjb250ZW50TGVuZ3RoIiwicGFyc2VJbnQiLCJoYXNFeHRlbnNpb24iLCJzb3VyY2VUeXBlIiwiYWRhcHRlciIsImdldEZpbGVMb2NhdGlvbiIsImJlZm9yZURlbGV0ZSIsImRlbGV0ZUZpbGUiLCJhZnRlckRlbGV0ZSIsIkZJTEVfREVMRVRFX0VSUk9SIiwiZ2V0TWV0YWRhdGEiLCJyYW5nZSIsInN0YXJ0IiwiTnVtYmVyIiwiaXNOYU4iXSwic291cmNlcyI6WyIuLi8uLi9zcmMvUm91dGVycy9GaWxlc1JvdXRlci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZXhwcmVzcyBmcm9tICdleHByZXNzJztcbmltcG9ydCAqIGFzIE1pZGRsZXdhcmVzIGZyb20gJy4uL21pZGRsZXdhcmVzJztcbmltcG9ydCBQYXJzZSBmcm9tICdwYXJzZS9ub2RlJztcbmltcG9ydCBDb25maWcgZnJvbSAnLi4vQ29uZmlnJztcbmltcG9ydCBsb2dnZXIgZnJvbSAnLi4vbG9nZ2VyJztcbmNvbnN0IHRyaWdnZXJzID0gcmVxdWlyZSgnLi4vdHJpZ2dlcnMnKTtcbmNvbnN0IFV0aWxzID0gcmVxdWlyZSgnLi4vVXRpbHMnKTtcbmltcG9ydCB7IFJlYWRhYmxlIH0gZnJvbSAnc3RyZWFtJztcbmltcG9ydCB7IGNyZWF0ZVNhbml0aXplZEh0dHBFcnJvciB9IGZyb20gJy4uL0Vycm9yJztcblxuLyoqXG4gKiBXcmFwcyBhIHJlYWRhYmxlIHN0cmVhbSBpbiBhIFJlYWRhYmxlIHRoYXQgZW5mb3JjZXMgYSBieXRlIHNpemUgbGltaXQuXG4gKiBEYXRhIGZsb3cgaXMgbGF6eTogdGhlIHNvdXJjZSBpcyBub3QgcmVhZCB1bnRpbCBhIGNvbnN1bWVyIHN0YXJ0cyByZWFkaW5nXG4gKiBmcm9tIHRoZSByZXR1cm5lZCBzdHJlYW0gKHZpYSBwaXBlIG9yICdkYXRhJyBsaXN0ZW5lcikuIFRoaXMgZW5zdXJlcyB0aGVcbiAqIGNvbnN1bWVyJ3MgZXJyb3IgbGlzdGVuZXIgaXMgYXR0YWNoZWQgYmVmb3JlIGFueSBkYXRhIChvciBlcnJvcikgaXMgZW1pdHRlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVNpemVMaW1pdGVkU3RyZWFtKHNvdXJjZSwgbWF4Qnl0ZXMpIHtcbiAgbGV0IHRvdGFsQnl0ZXMgPSAwO1xuICBsZXQgc3RhcnRlZCA9IGZhbHNlO1xuICBsZXQgc291cmNlRW5kZWQgPSBmYWxzZTtcbiAgbGV0IG9uRGF0YSwgb25FbmQsIG9uRXJyb3I7XG5cbiAgY29uc3Qgb3V0cHV0ID0gbmV3IFJlYWRhYmxlKHtcbiAgICByZWFkKCkge1xuICAgICAgaWYgKCFzdGFydGVkKSB7XG4gICAgICAgIHN0YXJ0ZWQgPSB0cnVlO1xuXG4gICAgICAgIG9uRGF0YSA9IChjaHVuaykgPT4ge1xuICAgICAgICAgIHRvdGFsQnl0ZXMgKz0gY2h1bmsubGVuZ3RoO1xuICAgICAgICAgIGlmICh0b3RhbEJ5dGVzID4gbWF4Qnl0ZXMpIHtcbiAgICAgICAgICAgIG91dHB1dC5kZXN0cm95KFxuICAgICAgICAgICAgICBuZXcgUGFyc2UuRXJyb3IoXG4gICAgICAgICAgICAgICAgUGFyc2UuRXJyb3IuRklMRV9TQVZFX0VSUk9SLFxuICAgICAgICAgICAgICAgIGBGaWxlIHNpemUgZXhjZWVkcyBtYXhpbXVtIGFsbG93ZWQ6ICR7bWF4Qnl0ZXN9IGJ5dGVzLmBcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCFvdXRwdXQucHVzaChjaHVuaykpIHtcbiAgICAgICAgICAgIHNvdXJjZS5wYXVzZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBvbkVuZCA9ICgpID0+IHtcbiAgICAgICAgICBzb3VyY2VFbmRlZCA9IHRydWU7XG4gICAgICAgICAgb3V0cHV0LnB1c2gobnVsbCk7XG4gICAgICAgIH07XG5cbiAgICAgICAgb25FcnJvciA9IChlcnIpID0+IG91dHB1dC5kZXN0cm95KGVycik7XG5cbiAgICAgICAgc291cmNlLm9uKCdkYXRhJywgb25EYXRhKTtcbiAgICAgICAgc291cmNlLm9uKCdlbmQnLCBvbkVuZCk7XG4gICAgICAgIHNvdXJjZS5vbignZXJyb3InLCBvbkVycm9yKTtcbiAgICAgIH1cblxuICAgICAgLy8gUmVzdW1lIHNvdXJjZSBpbiBjYXNlIGl0IHdhcyBwYXVzZWQgZHVlIHRvIGJhY2twcmVzc3VyZVxuICAgICAgaWYgKCFzb3VyY2VFbmRlZCkge1xuICAgICAgICBzb3VyY2UucmVzdW1lKCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBkZXN0cm95KGVyciwgY2FsbGJhY2spIHtcbiAgICAgIGlmIChvbkRhdGEpIHtcbiAgICAgICAgc291cmNlLnJlbW92ZUxpc3RlbmVyKCdkYXRhJywgb25EYXRhKTtcbiAgICAgIH1cbiAgICAgIGlmIChvbkVuZCkge1xuICAgICAgICBzb3VyY2UucmVtb3ZlTGlzdGVuZXIoJ2VuZCcsIG9uRW5kKTtcbiAgICAgIH1cbiAgICAgIGlmIChvbkVycm9yKSB7XG4gICAgICAgIHNvdXJjZS5yZW1vdmVMaXN0ZW5lcignZXJyb3InLCBvbkVycm9yKTtcbiAgICAgIH1cbiAgICAgIC8vIFN1cHByZXNzIGVycm9ycyBlbWl0dGVkIGR1cmluZyBkcmFpbiAoZS5nLiBjbGllbnQgZGlzY29ubmVjdClcbiAgICAgIHNvdXJjZS5vbignZXJyb3InLCAoKSA9PiB7fSk7XG4gICAgICBpZiAoIXNvdXJjZUVuZGVkKSB7XG4gICAgICAgIHNvdXJjZS5yZXN1bWUoKTtcbiAgICAgIH1cbiAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gb3V0cHV0O1xufVxuXG4vLyBTZWdtZW50cyB0aGF0IGNvbmZsaWN0IHdpdGggc3ViLXJvdXRlcyB1bmRlciBHRVQgL2ZpbGVzLzphcHBJZC8qLiBJZiBhIGZpbGVcbi8vIGRpcmVjdG9yeSBzdGFydHMgd2l0aCBvbmUgb2YgdGhlc2UsIGl0cyBVUkwgd291bGQgbWF0Y2ggdGhlIHdyb25nIHJvdXRlXG4vLyBoYW5kbGVyLiBVcGRhdGUgdGhpcyBsaXN0IHdoZW4gYWRkaW5nIG5ldyBzdWItcm91dGVzIHRvIGV4cHJlc3NSb3V0ZXIoKS5cbmV4cG9ydCBjb25zdCBSRVNFUlZFRF9ESVJFQ1RPUllfU0VHTUVOVFMgPSBbJ21ldGFkYXRhJ107XG5cbmV4cG9ydCBjbGFzcyBGaWxlc1JvdXRlciB7XG4gIGV4cHJlc3NSb3V0ZXIoeyBtYXhVcGxvYWRTaXplID0gJzIwTWInIH0gPSB7fSkge1xuICAgIHZhciByb3V0ZXIgPSBleHByZXNzLlJvdXRlcigpO1xuICAgIC8vIExpZ2h0d2VpZ2h0IGluZm8gaW5pdGlhbGl6ZXIgc28gaGFuZGxlUGFyc2VTZXNzaW9uIGNhbiByZXNvbHZlIHNlc3Npb24gdG9rZW5zLlxuICAgIC8vIFVubGlrZSBQT1NUL0RFTEVURSByb3V0ZXMsIEdFVCBmaWxlIHJvdXRlcyBza2lwIGhhbmRsZVBhcnNlSGVhZGVycyAod2hpY2hcbiAgICAvLyBub3JtYWxseSBzZXRzIHJlcS5pbmZvKSBiZWNhdXNlIHRob3NlIHJlcXVlc3RzIG1heSBub3QgY2FycnkgUGFyc2UgaGVhZGVycy5cbiAgICBjb25zdCBpbml0SW5mbyA9IChyZXEsIHJlcywgbmV4dCkgPT4ge1xuICAgICAgaWYgKCFyZXEuaW5mbykge1xuICAgICAgICBjb25zdCBzZXNzaW9uVG9rZW4gPSByZXEuZ2V0KCdYLVBhcnNlLVNlc3Npb24tVG9rZW4nKTtcbiAgICAgICAgcmVxLmluZm8gPSB7XG4gICAgICAgICAgc2Vzc2lvblRva2VuLFxuICAgICAgICAgIGluc3RhbGxhdGlvbklkOiByZXEuZ2V0KCdYLVBhcnNlLUluc3RhbGxhdGlvbi1JZCcpLFxuICAgICAgICB9O1xuICAgICAgICAvLyBJZiBubyBzZXNzaW9uIHRva2VuIGFuZCBubyBhdXRoIHlldCAocHVibGljIGFjY2VzcyksIHNldCBhIG1pbmltYWxcbiAgICAgICAgLy8gYXV0aCBvYmplY3Qgc28gaGFuZGxlUGFyc2VTZXNzaW9uIHNraXBzIHNlc3Npb24gcmVzb2x1dGlvbi5cbiAgICAgICAgaWYgKCFzZXNzaW9uVG9rZW4gJiYgIXJlcS5hdXRoKSB7XG4gICAgICAgICAgcmVxLmF1dGggPSB7IGlzTWFzdGVyOiBmYWxzZSB9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBuZXh0KCk7XG4gICAgfTtcbiAgICAvLyBNZXRhZGF0YSByb3V0ZSBtdXN0IGNvbWUgYmVmb3JlIHRoZSBjYXRjaC1hbGwgR0VUIHJvdXRlXG4gICAgcm91dGVyLmdldCgnL2ZpbGVzLzphcHBJZC9tZXRhZGF0YS8qZmlsZXBhdGgnLCBpbml0SW5mbywgTWlkZGxld2FyZXMuaGFuZGxlUGFyc2VTZXNzaW9uLCB0aGlzLm1ldGFkYXRhSGFuZGxlcik7XG4gICAgcm91dGVyLmdldCgnL2ZpbGVzLzphcHBJZC8qZmlsZXBhdGgnLCBpbml0SW5mbywgTWlkZGxld2FyZXMuaGFuZGxlUGFyc2VTZXNzaW9uLCB0aGlzLmdldEhhbmRsZXIpO1xuXG4gICAgcm91dGVyLnBvc3QoJy9maWxlcycsIGZ1bmN0aW9uIChyZXEsIHJlcywgbmV4dCkge1xuICAgICAgbmV4dChuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuSU5WQUxJRF9GSUxFX05BTUUsICdGaWxlbmFtZSBub3QgcHJvdmlkZWQuJykpO1xuICAgIH0pO1xuXG4gICAgcm91dGVyLnBvc3QoXG4gICAgICAnL2ZpbGVzLzpmaWxlbmFtZScsXG4gICAgICB0aGlzLl9lYXJseUhlYWRlcnNNaWRkbGV3YXJlKCksXG4gICAgICB0aGlzLl9ib2R5UGFyc2luZ01pZGRsZXdhcmUobWF4VXBsb2FkU2l6ZSksXG4gICAgICBNaWRkbGV3YXJlcy5oYW5kbGVQYXJzZUhlYWRlcnMsXG4gICAgICBNaWRkbGV3YXJlcy5oYW5kbGVQYXJzZVNlc3Npb24sXG4gICAgICB0aGlzLmNyZWF0ZUhhbmRsZXIuYmluZCh0aGlzKVxuICAgICk7XG5cbiAgICByb3V0ZXIuZGVsZXRlKFxuICAgICAgJy9maWxlcy8qZmlsZXBhdGgnLFxuICAgICAgTWlkZGxld2FyZXMuaGFuZGxlUGFyc2VIZWFkZXJzLFxuICAgICAgTWlkZGxld2FyZXMuaGFuZGxlUGFyc2VTZXNzaW9uLFxuICAgICAgTWlkZGxld2FyZXMuZW5mb3JjZU1hc3RlcktleUFjY2VzcyxcbiAgICAgIHRoaXMuZGVsZXRlSGFuZGxlclxuICAgICk7XG4gICAgcmV0dXJuIHJvdXRlcjtcbiAgfVxuXG4gIHN0YXRpYyBfZ2V0RmlsZW5hbWVGcm9tUGFyYW1zKHJlcSkge1xuICAgIGNvbnN0IHBhcnRzID0gcmVxLnBhcmFtcy5maWxlcGF0aDtcbiAgICByZXR1cm4gQXJyYXkuaXNBcnJheShwYXJ0cykgPyBwYXJ0cy5qb2luKCcvJykgOiBwYXJ0cztcbiAgfVxuXG4gIHN0YXRpYyB2YWxpZGF0ZURpcmVjdG9yeShkaXJlY3RvcnkpIHtcbiAgICBpZiAodHlwZW9mIGRpcmVjdG9yeSAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiBuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuSU5WQUxJRF9GSUxFX05BTUUsICdEaXJlY3RvcnkgbXVzdCBiZSBhIHN0cmluZy4nKTtcbiAgICB9XG4gICAgaWYgKGRpcmVjdG9yeS5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuSU5WQUxJRF9GSUxFX05BTUUsICdEaXJlY3RvcnkgbXVzdCBub3QgYmUgZW1wdHkuJyk7XG4gICAgfVxuICAgIGlmIChkaXJlY3RvcnkubGVuZ3RoID4gMjU2KSB7XG4gICAgICByZXR1cm4gbmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLklOVkFMSURfRklMRV9OQU1FLCAnRGlyZWN0b3J5IHBhdGggaXMgdG9vIGxvbmcuJyk7XG4gICAgfVxuICAgIGlmIChkaXJlY3RvcnkuaW5jbHVkZXMoJy4uJykpIHtcbiAgICAgIHJldHVybiBuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuSU5WQUxJRF9GSUxFX05BTUUsICdEaXJlY3RvcnkgbXVzdCBub3QgY29udGFpbiBcIi4uXCIuJyk7XG4gICAgfVxuICAgIGlmIChkaXJlY3Rvcnkuc3RhcnRzV2l0aCgnLycpIHx8IGRpcmVjdG9yeS5lbmRzV2l0aCgnLycpKSB7XG4gICAgICByZXR1cm4gbmV3IFBhcnNlLkVycm9yKFxuICAgICAgICBQYXJzZS5FcnJvci5JTlZBTElEX0ZJTEVfTkFNRSxcbiAgICAgICAgJ0RpcmVjdG9yeSBtdXN0IG5vdCBzdGFydCBvciBlbmQgd2l0aCBcIi9cIi4nXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoZGlyZWN0b3J5LmluY2x1ZGVzKCcvLycpKSB7XG4gICAgICByZXR1cm4gbmV3IFBhcnNlLkVycm9yKFxuICAgICAgICBQYXJzZS5FcnJvci5JTlZBTElEX0ZJTEVfTkFNRSxcbiAgICAgICAgJ0RpcmVjdG9yeSBtdXN0IG5vdCBjb250YWluIGNvbnNlY3V0aXZlIHNsYXNoZXMuJ1xuICAgICAgKTtcbiAgICB9XG4gICAgY29uc3QgZmlyc3RTZWdtZW50ID0gZGlyZWN0b3J5LnNwbGl0KCcvJylbMF07XG4gICAgaWYgKFJFU0VSVkVEX0RJUkVDVE9SWV9TRUdNRU5UUy5pbmNsdWRlcyhmaXJzdFNlZ21lbnQpKSB7XG4gICAgICByZXR1cm4gbmV3IFBhcnNlLkVycm9yKFxuICAgICAgICBQYXJzZS5FcnJvci5JTlZBTElEX0ZJTEVfTkFNRSxcbiAgICAgICAgYERpcmVjdG9yeSBtdXN0IG5vdCBzdGFydCB3aXRoIHJlc2VydmVkIHNlZ21lbnQgXCIke2ZpcnN0U2VnbWVudH1cIi5gXG4gICAgICApO1xuICAgIH1cbiAgICBjb25zdCBkaXJSZWdleCA9IC9eW2EtekEtWjAtOV1bYS16QS1aMC05X1xcLS9dKiQvO1xuICAgIGlmICghZGlyUmVnZXgudGVzdChkaXJlY3RvcnkpKSB7XG4gICAgICByZXR1cm4gbmV3IFBhcnNlLkVycm9yKFxuICAgICAgICBQYXJzZS5FcnJvci5JTlZBTElEX0ZJTEVfTkFNRSxcbiAgICAgICAgJ0RpcmVjdG9yeSBjb250YWlucyBpbnZhbGlkIGNoYXJhY3RlcnMuJ1xuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBzdGF0aWMgX3ZhbGlkYXRlRmlsZURvd25sb2FkKHJlcSwgY29uZmlnKSB7XG4gICAgY29uc3QgaXNNYXN0ZXIgPSByZXEuYXV0aD8uaXNNYXN0ZXI7XG4gICAgY29uc3QgaXNNYWludGVuYW5jZSA9IHJlcS5hdXRoPy5pc01haW50ZW5hbmNlO1xuICAgIGlmIChpc01hc3RlciB8fCBpc01haW50ZW5hbmNlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHVzZXIgPSByZXEuYXV0aD8udXNlcjtcbiAgICBjb25zdCBpc0xpbmtlZCA9IHVzZXIgJiYgUGFyc2UuQW5vbnltb3VzVXRpbHMuaXNMaW5rZWQodXNlcik7XG4gICAgaWYgKCFjb25maWcuZmlsZURvd25sb2FkLmVuYWJsZUZvckFub255bW91c1VzZXIgJiYgaXNMaW5rZWQpIHtcbiAgICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihcbiAgICAgICAgUGFyc2UuRXJyb3IuT1BFUkFUSU9OX0ZPUkJJRERFTixcbiAgICAgICAgJ0ZpbGUgZG93bmxvYWQgYnkgYW5vbnltb3VzIHVzZXIgaXMgZGlzYWJsZWQuJ1xuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKCFjb25maWcuZmlsZURvd25sb2FkLmVuYWJsZUZvckF1dGhlbnRpY2F0ZWRVc2VyICYmICFpc0xpbmtlZCAmJiB1c2VyKSB7XG4gICAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoXG4gICAgICAgIFBhcnNlLkVycm9yLk9QRVJBVElPTl9GT1JCSURERU4sXG4gICAgICAgICdGaWxlIGRvd25sb2FkIGJ5IGF1dGhlbnRpY2F0ZWQgdXNlciBpcyBkaXNhYmxlZC4nXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoIWNvbmZpZy5maWxlRG93bmxvYWQuZW5hYmxlRm9yUHVibGljICYmICF1c2VyKSB7XG4gICAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoXG4gICAgICAgIFBhcnNlLkVycm9yLk9QRVJBVElPTl9GT1JCSURERU4sXG4gICAgICAgICdGaWxlIGRvd25sb2FkIGJ5IHB1YmxpYyBpcyBkaXNhYmxlZC4nXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGdldEhhbmRsZXIocmVxLCByZXMpIHtcbiAgICBjb25zdCBjb25maWcgPSBDb25maWcuZ2V0KHJlcS5wYXJhbXMuYXBwSWQpO1xuICAgIGlmICghY29uZmlnKSB7XG4gICAgICBjb25zdCBlcnJvciA9IGNyZWF0ZVNhbml0aXplZEh0dHBFcnJvcig0MDMsICdJbnZhbGlkIGFwcGxpY2F0aW9uIElELicsIGNvbmZpZyk7XG4gICAgICByZXMuc3RhdHVzKGVycm9yLnN0YXR1cyk7XG4gICAgICByZXMuanNvbih7IGVycm9yOiBlcnJvci5tZXNzYWdlIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIEZpbGVzUm91dGVyLl92YWxpZGF0ZUZpbGVEb3dubG9hZChyZXEsIGNvbmZpZyk7XG5cbiAgICBsZXQgZmlsZW5hbWUgPSBGaWxlc1JvdXRlci5fZ2V0RmlsZW5hbWVGcm9tUGFyYW1zKHJlcSk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGZpbGVzQ29udHJvbGxlciA9IGNvbmZpZy5maWxlc0NvbnRyb2xsZXI7XG4gICAgICBjb25zdCBtaW1lID0gKGF3YWl0IGltcG9ydCgnbWltZScpKS5kZWZhdWx0O1xuICAgICAgbGV0IGNvbnRlbnRUeXBlID0gbWltZS5nZXRUeXBlKGZpbGVuYW1lKTtcbiAgICAgIGxldCBmaWxlID0gbmV3IFBhcnNlLkZpbGUoZmlsZW5hbWUsIHsgYmFzZTY0OiAnJyB9LCBjb250ZW50VHlwZSk7XG4gICAgICBjb25zdCBmaWxlQXV0aCA9IHJlcS5hdXRoO1xuICAgICAgY29uc3QgdHJpZ2dlclJlc3VsdCA9IGF3YWl0IHRyaWdnZXJzLm1heWJlUnVuRmlsZVRyaWdnZXIoXG4gICAgICAgIHRyaWdnZXJzLlR5cGVzLmJlZm9yZUZpbmQsXG4gICAgICAgIHsgZmlsZSB9LFxuICAgICAgICBjb25maWcsXG4gICAgICAgIGZpbGVBdXRoXG4gICAgICApO1xuICAgICAgaWYgKHRyaWdnZXJSZXN1bHQ/LmZpbGU/Ll9uYW1lKSB7XG4gICAgICAgIGZpbGVuYW1lID0gdHJpZ2dlclJlc3VsdD8uZmlsZT8uX25hbWU7XG4gICAgICAgIGNvbnRlbnRUeXBlID0gbWltZS5nZXRUeXBlKGZpbGVuYW1lKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZGVmYXVsdFJlc3BvbnNlSGVhZGVycyA9IHsgJ1gtQ29udGVudC1UeXBlLU9wdGlvbnMnOiAnbm9zbmlmZicgfTtcblxuICAgICAgaWYgKGlzRmlsZVN0cmVhbWFibGUocmVxLCBmaWxlc0NvbnRyb2xsZXIpKSB7XG4gICAgICAgIGNvbnN0IGFmdGVyRmluZCA9IGF3YWl0IHRyaWdnZXJzLm1heWJlUnVuRmlsZVRyaWdnZXIoXG4gICAgICAgICAgdHJpZ2dlcnMuVHlwZXMuYWZ0ZXJGaW5kLFxuICAgICAgICAgIHsgZmlsZSwgZm9yY2VEb3dubG9hZDogZmFsc2UsIHJlc3BvbnNlSGVhZGVyczogeyAuLi5kZWZhdWx0UmVzcG9uc2VIZWFkZXJzIH0gfSxcbiAgICAgICAgICBjb25maWcsXG4gICAgICAgICAgZmlsZUF1dGhcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKGFmdGVyRmluZD8uZm9yY2VEb3dubG9hZCkge1xuICAgICAgICAgIHJlcy5zZXQoJ0NvbnRlbnQtRGlzcG9zaXRpb24nLCBgYXR0YWNobWVudDtmaWxlbmFtZT0ke2FmdGVyRmluZC5maWxlPy5fbmFtZSB8fCBmaWxlbmFtZX1gKTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhhZnRlckZpbmQ/LnJlc3BvbnNlSGVhZGVycyA/PyBkZWZhdWx0UmVzcG9uc2VIZWFkZXJzKSkge1xuICAgICAgICAgIHJlcy5zZXQoa2V5LCB2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgZmlsZXNDb250cm9sbGVyLmhhbmRsZUZpbGVTdHJlYW0oY29uZmlnLCBmaWxlbmFtZSwgcmVxLCByZXMsIGNvbnRlbnRUeXBlKS5jYXRjaCgoKSA9PiB7XG4gICAgICAgICAgcmVzLnN0YXR1cyg0MDQpO1xuICAgICAgICAgIHJlcy5zZXQoJ0NvbnRlbnQtVHlwZScsICd0ZXh0L3BsYWluJyk7XG4gICAgICAgICAgcmVzLmVuZCgnRmlsZSBub3QgZm91bmQuJyk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGxldCBkYXRhID0gYXdhaXQgZmlsZXNDb250cm9sbGVyLmdldEZpbGVEYXRhKGNvbmZpZywgZmlsZW5hbWUpLmNhdGNoKCgpID0+IHtcbiAgICAgICAgcmVzLnN0YXR1cyg0MDQpO1xuICAgICAgICByZXMuc2V0KCdDb250ZW50LVR5cGUnLCAndGV4dC9wbGFpbicpO1xuICAgICAgICByZXMuZW5kKCdGaWxlIG5vdCBmb3VuZC4nKTtcbiAgICAgIH0pO1xuICAgICAgaWYgKCFkYXRhKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGZpbGUgPSBuZXcgUGFyc2UuRmlsZShmaWxlbmFtZSwgeyBiYXNlNjQ6IGRhdGEudG9TdHJpbmcoJ2Jhc2U2NCcpIH0sIGNvbnRlbnRUeXBlKTtcbiAgICAgIGNvbnN0IGFmdGVyRmluZCA9IGF3YWl0IHRyaWdnZXJzLm1heWJlUnVuRmlsZVRyaWdnZXIoXG4gICAgICAgIHRyaWdnZXJzLlR5cGVzLmFmdGVyRmluZCxcbiAgICAgICAgeyBmaWxlLCBmb3JjZURvd25sb2FkOiBmYWxzZSwgcmVzcG9uc2VIZWFkZXJzOiB7IC4uLmRlZmF1bHRSZXNwb25zZUhlYWRlcnMgfSB9LFxuICAgICAgICBjb25maWcsXG4gICAgICAgIGZpbGVBdXRoXG4gICAgICApO1xuXG4gICAgICBpZiAoYWZ0ZXJGaW5kPy5maWxlKSB7XG4gICAgICAgIGNvbnRlbnRUeXBlID0gbWltZS5nZXRUeXBlKGFmdGVyRmluZC5maWxlLl9uYW1lKTtcbiAgICAgICAgZGF0YSA9IEJ1ZmZlci5mcm9tKGFmdGVyRmluZC5maWxlLl9kYXRhLCAnYmFzZTY0Jyk7XG4gICAgICB9XG5cbiAgICAgIHJlcy5zdGF0dXMoMjAwKTtcbiAgICAgIHJlcy5zZXQoJ0NvbnRlbnQtVHlwZScsIGNvbnRlbnRUeXBlKTtcbiAgICAgIHJlcy5zZXQoJ0NvbnRlbnQtTGVuZ3RoJywgZGF0YS5sZW5ndGgpO1xuICAgICAgaWYgKGFmdGVyRmluZC5mb3JjZURvd25sb2FkKSB7XG4gICAgICAgIHJlcy5zZXQoJ0NvbnRlbnQtRGlzcG9zaXRpb24nLCBgYXR0YWNobWVudDtmaWxlbmFtZT0ke2FmdGVyRmluZC5maWxlLl9uYW1lfWApO1xuICAgICAgfVxuICAgICAgaWYgKGFmdGVyRmluZC5yZXNwb25zZUhlYWRlcnMpIHtcbiAgICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoYWZ0ZXJGaW5kLnJlc3BvbnNlSGVhZGVycykpIHtcbiAgICAgICAgICByZXMuc2V0KGtleSwgdmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXMuZW5kKGRhdGEpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnN0IGVyciA9IHRyaWdnZXJzLnJlc29sdmVFcnJvcihlLCB7XG4gICAgICAgIGNvZGU6IFBhcnNlLkVycm9yLlNDUklQVF9GQUlMRUQsXG4gICAgICAgIG1lc3NhZ2U6IGBDb3VsZCBub3QgZmluZCBmaWxlOiAke2ZpbGVuYW1lfS5gLFxuICAgICAgfSk7XG4gICAgICByZXMuc3RhdHVzKDQwMyk7XG4gICAgICByZXMuanNvbih7IGNvZGU6IGVyci5jb2RlLCBlcnJvcjogZXJyLm1lc3NhZ2UgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIE1pZGRsZXdhcmUgdGhhdCBydW5zIGJlZm9yZSBib2R5IHBhcnNpbmcgdG8gaGFuZGxlIGhlYWRlcnMgdGhhdCBtdXN0IGJlXG4gICAqIHJlc29sdmVkIGJlZm9yZSB0aGUgcmVxdWVzdCBib2R5IGlzIGNvbnN1bWVkLiBDdXJyZW50bHkgc3VwcG9ydHM6XG4gICAqXG4gICAqIC0gYFgtUGFyc2UtRmlsZS1NYXgtVXBsb2FkLVNpemVgOiBPdmVycmlkZXMgdGhlIHNlcnZlci13aWRlIGBtYXhVcGxvYWRTaXplYFxuICAgKiAgIGZvciB0aGlzIHJlcXVlc3QuIFJlcXVpcmVzIHRoZSBtYXN0ZXIga2V5LiBUaGUgdmFsdWUgdXNlcyB0aGUgc2FtZSBmb3JtYXRcbiAgICogICBhcyB0aGUgc2VydmVyIG9wdGlvbiAoZS5nLiBgJzUwbWInYCwgYCcxZ2InYCkuIFNldHMgYHJlcS5fbWF4VXBsb2FkU2l6ZU92ZXJyaWRlYFxuICAgKiAgIChpbiBieXRlcykgZm9yIGBfYm9keVBhcnNpbmdNaWRkbGV3YXJlYCB0byB1c2UuXG4gICAqL1xuICBfZWFybHlIZWFkZXJzTWlkZGxld2FyZSgpIHtcbiAgICByZXR1cm4gYXN5bmMgKHJlcSwgcmVzLCBuZXh0KSA9PiB7XG4gICAgICBjb25zdCBtYXhVcGxvYWRTaXplT3ZlcnJpZGUgPSByZXEuZ2V0KCdYLVBhcnNlLUZpbGUtTWF4LVVwbG9hZC1TaXplJyk7XG4gICAgICBpZiAoIW1heFVwbG9hZFNpemVPdmVycmlkZSkge1xuICAgICAgICByZXR1cm4gbmV4dCgpO1xuICAgICAgfVxuICAgICAgY29uc3QgYXBwSWQgPSByZXEuZ2V0KCdYLVBhcnNlLUFwcGxpY2F0aW9uLUlkJyk7XG4gICAgICBjb25zdCBjb25maWcgPSBDb25maWcuZ2V0KGFwcElkKTtcbiAgICAgIGlmICghY29uZmlnKSB7XG4gICAgICAgIGNvbnN0IGVycm9yID0gY3JlYXRlU2FuaXRpemVkSHR0cEVycm9yKDQwMywgJ0ludmFsaWQgYXBwbGljYXRpb24gSUQuJywgdW5kZWZpbmVkKTtcbiAgICAgICAgcmVzLnN0YXR1cyhlcnJvci5zdGF0dXMpO1xuICAgICAgICByZXMuanNvbih7IGVycm9yOiBlcnJvci5tZXNzYWdlIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCBtYXN0ZXJLZXkgPSBhd2FpdCBjb25maWcubG9hZE1hc3RlcktleSgpO1xuICAgICAgaWYgKHJlcS5nZXQoJ1gtUGFyc2UtTWFzdGVyLUtleScpICE9PSBtYXN0ZXJLZXkpIHtcbiAgICAgICAgY29uc3QgZXJyb3IgPSBjcmVhdGVTYW5pdGl6ZWRIdHRwRXJyb3IoNDAzLCAndW5hdXRob3JpemVkOiBtYXN0ZXIga2V5IGlzIHJlcXVpcmVkJywgY29uZmlnKTtcbiAgICAgICAgcmVzLnN0YXR1cyhlcnJvci5zdGF0dXMpO1xuICAgICAgICByZXMuanNvbih7IGVycm9yOiBlcnJvci5tZXNzYWdlIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoY29uZmlnLm1hc3RlcktleUlwcz8ubGVuZ3RoICYmICFNaWRkbGV3YXJlcy5jaGVja0lwKHJlcS5pcCwgY29uZmlnLm1hc3RlcktleUlwcywgY29uZmlnLm1hc3RlcktleUlwc1N0b3JlKSkge1xuICAgICAgICBjb25zdCBlcnJvciA9IGNyZWF0ZVNhbml0aXplZEh0dHBFcnJvcig0MDMsICd1bmF1dGhvcml6ZWQ6IG1hc3RlciBrZXkgaXMgcmVxdWlyZWQnLCBjb25maWcpO1xuICAgICAgICByZXMuc3RhdHVzKGVycm9yLnN0YXR1cyk7XG4gICAgICAgIHJlcy5qc29uKHsgZXJyb3I6IGVycm9yLm1lc3NhZ2UgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGxldCBwYXJzZWRCeXRlcztcbiAgICAgIHRyeSB7XG4gICAgICAgIHBhcnNlZEJ5dGVzID0gVXRpbHMucGFyc2VTaXplVG9CeXRlcyhtYXhVcGxvYWRTaXplT3ZlcnJpZGUpO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIHJldHVybiBuZXh0KFxuICAgICAgICAgIG5ldyBQYXJzZS5FcnJvcihcbiAgICAgICAgICAgIFBhcnNlLkVycm9yLkZJTEVfU0FWRV9FUlJPUixcbiAgICAgICAgICAgIGBJbnZhbGlkIG1heFVwbG9hZFNpemUgb3ZlcnJpZGUgdmFsdWU6ICR7bWF4VXBsb2FkU2l6ZU92ZXJyaWRlfWBcbiAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXEuX21heFVwbG9hZFNpemVPdmVycmlkZSA9IHBhcnNlZEJ5dGVzO1xuICAgICAgbmV4dCgpO1xuICAgIH07XG4gIH1cblxuICBfYm9keVBhcnNpbmdNaWRkbGV3YXJlKG1heFVwbG9hZFNpemUpIHtcbiAgICBjb25zdCBkZWZhdWx0TWF4Qnl0ZXMgPSBVdGlscy5wYXJzZVNpemVUb0J5dGVzKG1heFVwbG9hZFNpemUpO1xuICAgIHJldHVybiAocmVxLCByZXMsIG5leHQpID0+IHtcbiAgICAgIGlmIChyZXEuZ2V0KCdYLVBhcnNlLVVwbG9hZC1Nb2RlJykgPT09ICdzdHJlYW0nKSB7XG4gICAgICAgIHJlcS5fbWF4VXBsb2FkU2l6ZUJ5dGVzID0gcmVxLl9tYXhVcGxvYWRTaXplT3ZlcnJpZGUgPz8gZGVmYXVsdE1heEJ5dGVzO1xuICAgICAgICByZXR1cm4gbmV4dCgpO1xuICAgICAgfVxuICAgICAgY29uc3QgbGltaXQgPSByZXEuX21heFVwbG9hZFNpemVPdmVycmlkZSA/PyBtYXhVcGxvYWRTaXplO1xuICAgICAgcmV0dXJuIGV4cHJlc3MucmF3KHsgdHlwZTogKCkgPT4gdHJ1ZSwgbGltaXQgfSkocmVxLCByZXMsIG5leHQpO1xuICAgIH07XG4gIH1cblxuICBhc3luYyBjcmVhdGVIYW5kbGVyKHJlcSwgcmVzLCBuZXh0KSB7XG4gICAgaWYgKHJlcS5hdXRoLmlzUmVhZE9ubHkpIHtcbiAgICAgIGNvbnN0IGVycm9yID0gY3JlYXRlU2FuaXRpemVkSHR0cEVycm9yKDQwMywgXCJyZWFkLW9ubHkgbWFzdGVyS2V5IGlzbid0IGFsbG93ZWQgdG8gY3JlYXRlIGEgZmlsZS5cIiwgcmVxLmNvbmZpZyk7XG4gICAgICByZXMuc3RhdHVzKGVycm9yLnN0YXR1cyk7XG4gICAgICByZXMuZW5kKGB7XCJlcnJvclwiOlwiJHtlcnJvci5tZXNzYWdlfVwifWApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBjb25maWcgPSByZXEuY29uZmlnO1xuICAgIGNvbnN0IGlzTWFzdGVyID0gcmVxLmF1dGguaXNNYXN0ZXI7XG4gICAgY29uc3QgaXNNYWludGVuYW5jZSA9IHJlcS5hdXRoLmlzTWFpbnRlbmFuY2U7XG4gICAgaWYgKCFpc01hc3RlciAmJiAhaXNNYWludGVuYW5jZSkge1xuICAgICAgY29uc3QgdXNlciA9IHJlcS5hdXRoLnVzZXI7XG4gICAgICBjb25zdCBpc0xpbmtlZCA9IHVzZXIgJiYgUGFyc2UuQW5vbnltb3VzVXRpbHMuaXNMaW5rZWQodXNlcik7XG4gICAgICBpZiAoIWNvbmZpZy5maWxlVXBsb2FkLmVuYWJsZUZvckFub255bW91c1VzZXIgJiYgaXNMaW5rZWQpIHtcbiAgICAgICAgbmV4dChcbiAgICAgICAgICBuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuRklMRV9TQVZFX0VSUk9SLCAnRmlsZSB1cGxvYWQgYnkgYW5vbnltb3VzIHVzZXIgaXMgZGlzYWJsZWQuJylcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKCFjb25maWcuZmlsZVVwbG9hZC5lbmFibGVGb3JBdXRoZW50aWNhdGVkVXNlciAmJiAhaXNMaW5rZWQgJiYgdXNlcikge1xuICAgICAgICBuZXh0KFxuICAgICAgICAgIG5ldyBQYXJzZS5FcnJvcihcbiAgICAgICAgICAgIFBhcnNlLkVycm9yLkZJTEVfU0FWRV9FUlJPUixcbiAgICAgICAgICAgICdGaWxlIHVwbG9hZCBieSBhdXRoZW50aWNhdGVkIHVzZXIgaXMgZGlzYWJsZWQuJ1xuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKCFjb25maWcuZmlsZVVwbG9hZC5lbmFibGVGb3JQdWJsaWMgJiYgIXVzZXIpIHtcbiAgICAgICAgbmV4dChuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuRklMRV9TQVZFX0VSUk9SLCAnRmlsZSB1cGxvYWQgYnkgcHVibGljIGlzIGRpc2FibGVkLicpKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBmaWxlc0NvbnRyb2xsZXIgPSBjb25maWcuZmlsZXNDb250cm9sbGVyO1xuICAgIGNvbnN0IHsgZmlsZW5hbWUgfSA9IHJlcS5wYXJhbXM7XG4gICAgY29uc3QgY29udGVudFR5cGUgPSByZXEuZ2V0KCdDb250ZW50LXR5cGUnKTtcblxuICAgIGNvbnN0IGVycm9yID0gZmlsZXNDb250cm9sbGVyLnZhbGlkYXRlRmlsZW5hbWUoZmlsZW5hbWUpO1xuICAgIGlmIChlcnJvcikge1xuICAgICAgbmV4dChlcnJvcik7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZmlsZUV4dGVuc2lvbnMgPSBjb25maWcuZmlsZVVwbG9hZD8uZmlsZUV4dGVuc2lvbnM7XG4gICAgaWYgKCFpc01hc3RlciAmJiBmaWxlRXh0ZW5zaW9ucykge1xuICAgICAgY29uc3QgbWltZSA9IChhd2FpdCBpbXBvcnQoJ21pbWUnKSkuZGVmYXVsdDtcbiAgICAgIGNvbnN0IGlzVmFsaWRFeHRlbnNpb24gPSBleHRlbnNpb24gPT4ge1xuICAgICAgICByZXR1cm4gZmlsZUV4dGVuc2lvbnMuc29tZShleHQgPT4ge1xuICAgICAgICAgIGlmIChleHQgPT09ICcqJykge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IHJlZ2V4ID0gbmV3IFJlZ0V4cChleHQpO1xuICAgICAgICAgIGlmIChyZWdleC50ZXN0KGV4dGVuc2lvbikpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgICAgY29uc3QgcmVqZWN0RXh0ZW5zaW9uID0gZXh0ID0+IHtcbiAgICAgICAgbmV4dChcbiAgICAgICAgICBuZXcgUGFyc2UuRXJyb3IoXG4gICAgICAgICAgICBQYXJzZS5FcnJvci5GSUxFX1NBVkVfRVJST1IsXG4gICAgICAgICAgICBgRmlsZSB1cGxvYWQgb2YgZXh0ZW5zaW9uICR7ZXh0fSBpcyBkaXNhYmxlZC5gXG4gICAgICAgICAgKVxuICAgICAgICApO1xuICAgICAgfTtcblxuICAgICAgLy8gUGFyc2UgdGhlIGZpbGVuYW1lIGV4dGVuc2lvbiB0b2tlbiwgc3RyaXBwaW5nIE1JTUUgcGFyYW1ldGVycyBhbmQgd2hpdGVzcGFjZS5cbiAgICAgIGxldCBleHRlbnNpb24gPSBVdGlscy5nZXRGaWxlRXh0ZW5zaW9uKGZpbGVuYW1lKTtcbiAgICAgIGV4dGVuc2lvbiA9IGV4dGVuc2lvbj8uc3BsaXQoJzsnKVswXT8ucmVwbGFjZSgvXFxzKy9nLCAnJyk7XG5cbiAgICAgIGNvbnN0IGlzRXh0ZW5zaW9uUmVjb2duaXplZCA9IGV4dGVuc2lvbiAmJiBtaW1lLmdldFR5cGUoZmlsZW5hbWUpO1xuICAgICAgaWYgKGV4dGVuc2lvbiAmJiAhaXNWYWxpZEV4dGVuc2lvbihleHRlbnNpb24pKSB7XG4gICAgICAgIHJlamVjdEV4dGVuc2lvbihleHRlbnNpb24pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIFdoZW4gdGhlIGZpbGVuYW1lIGV4dGVuc2lvbiBpcyBub3QgcmVjb2duaXplZCBieSBgbWltZWAsXG4gICAgICAvLyBgRmlsZXNDb250cm9sbGVyLmNyZWF0ZUZpbGVgIGNhbm5vdCBkZXJpdmUgYSBDb250ZW50LVR5cGUgZnJvbSB0aGVcbiAgICAgIC8vIGZpbGVuYW1lIGFuZCBwcmVzZXJ2ZXMgdGhlIGNsaWVudC1zdXBwbGllZCBDb250ZW50LVR5cGUgdmVyYmF0aW0sIHNvIHRoZVxuICAgICAgLy8gdHlwZSB0aGUgZmlsZSBpcyBhY3R1YWxseSBzZXJ2ZWQgYXMgbXVzdCBiZSB2YWxpZGF0ZWQuIFNraXAgdGhpcyB3aGVuXG4gICAgICAvLyBleHRlbnNpb24gZmlsdGVyaW5nIGlzIGRpc2FibGVkIChgKmApLlxuICAgICAgY29uc3QgYWxsb3dzQWxsRXh0ZW5zaW9ucyA9IGZpbGVFeHRlbnNpb25zLmluY2x1ZGVzKCcqJyk7XG4gICAgICBpZiAoIWlzRXh0ZW5zaW9uUmVjb2duaXplZCAmJiBjb250ZW50VHlwZSAmJiAhYWxsb3dzQWxsRXh0ZW5zaW9ucykge1xuICAgICAgICBjb25zdCBzbGFzaEluZGV4ID0gY29udGVudFR5cGUuaW5kZXhPZignLycpO1xuICAgICAgICBjb25zdCB0eXBlID0gc2xhc2hJbmRleCA+IDAgPyBjb250ZW50VHlwZS5zbGljZSgwLCBzbGFzaEluZGV4KS50cmltKCkgOiAnJztcbiAgICAgICAgY29uc3Qgc3VidHlwZSA9XG4gICAgICAgICAgc2xhc2hJbmRleCA+IDAgPyBjb250ZW50VHlwZS5zbGljZShzbGFzaEluZGV4ICsgMSkuc3BsaXQoJzsnKVswXS50cmltKCkgOiAnJztcbiAgICAgICAgLy8gQSB2YWxpZCBtZWRpYSB0eXBlIGlzIGB0eXBlL3N1YnR5cGVgIHdoZXJlIGJvdGggYXJlIG5vbi1lbXB0eSBgdG9rZW5gc1xuICAgICAgICAvLyAoUkZDIDkxMTAgwqc1LjYuMikuIFJlamVjdCBhbnl0aGluZyBlbHNlLlxuICAgICAgICBjb25zdCB0b2tlbiA9IC9eWyEjJCUmJyorXFwtLl5fYHx+QS1aYS16MC05XSskLztcbiAgICAgICAgaWYgKCF0b2tlbi50ZXN0KHR5cGUpIHx8ICF0b2tlbi50ZXN0KHN1YnR5cGUpKSB7XG4gICAgICAgICAgLy8gQSBDb250ZW50LVR5cGUgdGhhdCBkb2VzIG5vdCBwYXJzZSBhcyBgdHlwZS9zdWJ0eXBlYCB3aXRoIHZhbGlkLFxuICAgICAgICAgIC8vIG5vbi1lbXB0eSB0eXBlIEFORCBzdWJ0eXBlIHRva2VucyBpcyBtYWxmb3JtZWQ6IHRoZXJlIGlzIG5vIHZhbGlkIE1JTUVcbiAgICAgICAgICAvLyB0eXBlIHdpdGhvdXQgYSBzdWJ0eXBlIChSRkMgOTExMCDCpzguMy4xKSwgYW5kIG1hbGZvcm1lZCB0b2tlbnMgc3VjaCBhc1xuICAgICAgICAgIC8vIGBpbWFnZS8vc3ZnK3htbGAgb3IgYHRleHQvcGxhaW4sdGV4dC9odG1sYCBhcmUgZXF1YWxseSB1bnBhcnNlYWJsZS5cbiAgICAgICAgICAvLyBCcm93c2VycyBjYW5ub3QgcGFyc2Ugc3VjaCB2YWx1ZXMgYW5kIGZhbGwgYmFjayB0byBNSU1FLXNuaWZmaW5nIHRoZVxuICAgICAgICAgIC8vIGZpbGUgYm9keSwgd2hpY2ggY2FuIHJlbmRlciBIVE1ML3NjcmlwdCBtYXJrZXJzIGFzIGFjdGl2ZSBjb250ZW50IG9uXG4gICAgICAgICAgLy8gc3RvcmFnZSBhZGFwdGVycyB0aGF0IHNlcnZlIHRoZSBzdG9yZWQgQ29udGVudC1UeXBlIChlLmcuIGBpbWFnZWAsXG4gICAgICAgICAgLy8gYGltYWdlL2ApLiBTdXJmYWNlIHRoZSBwcmVjaXNlIGJsb2NrbGlzdCBtZXNzYWdlIHdoZW4gdGhlIGJhcmUgdG9rZW5cbiAgICAgICAgICAvLyBuYW1lcyBhIGJsb2NrZWQgZXh0ZW5zaW9uIChlLmcuIGEgbm8tc2xhc2ggYHN2Z2ApLCBvdGhlcndpc2UgcmVqZWN0IHRoZVxuICAgICAgICAgIC8vIHVucGFyc2VhYmxlIENvbnRlbnQtVHlwZS5cbiAgICAgICAgICBjb25zdCBiYXJlVG9rZW4gPSAoc2xhc2hJbmRleCA8IDAgPyBjb250ZW50VHlwZS5zcGxpdCgnOycpWzBdIDogdHlwZSkucmVwbGFjZShcbiAgICAgICAgICAgIC9cXHMrL2csXG4gICAgICAgICAgICAnJ1xuICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKGJhcmVUb2tlbiAmJiAhaXNWYWxpZEV4dGVuc2lvbihiYXJlVG9rZW4pKSB7XG4gICAgICAgICAgICByZWplY3RFeHRlbnNpb24oYmFyZVRva2VuKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgbmV4dChuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuRklMRV9TQVZFX0VSUk9SLCAnSW52YWxpZCBDb250ZW50LVR5cGUuJykpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyBWYWxpZGF0ZSB0aGUgd2VsbC1mb3JtZWQgQ29udGVudC1UeXBlIHN1YnR5cGUgYWdhaW5zdCB0aGUgYmxvY2tsaXN0LCBlLmcuXG4gICAgICAgIC8vIFwiaW1hZ2Uvc3ZnK3htbFwiIC0+IFwic3ZnK3htbFwiLCBcImltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOFwiIC0+IFwic3ZnK3htbFwiLlxuICAgICAgICAvLyBWYWxpZCBjdXN0b20vdmVuZG9yIHR5cGVzIChlLmcuIFwiYXBwbGljYXRpb24vdm5kLmFwaStqc29uXCIpIHBhcnNlIGFuZCBhcmVcbiAgICAgICAgLy8gYWxsb3dlZDsgb25seSBibG9ja2VkIHN1YnR5cGVzIGFyZSByZWplY3RlZC5cbiAgICAgICAgY29uc3QgY29udGVudFR5cGVFeHRlbnNpb24gPSBzdWJ0eXBlLnJlcGxhY2UoL1xccysvZywgJycpO1xuICAgICAgICBpZiAoIWlzVmFsaWRFeHRlbnNpb24oY29udGVudFR5cGVFeHRlbnNpb24pKSB7XG4gICAgICAgICAgcmVqZWN0RXh0ZW5zaW9uKGNvbnRlbnRUeXBlRXh0ZW5zaW9uKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBGb3Igc3RyZWFtaW5nIHVwbG9hZHMsIHJlYWQgZmlsZSBkYXRhIGZyb20gaGVhZGVycyBzaW5jZSB0aGUgYm9keSBpcyB0aGUgcmF3IHN0cmVhbVxuICAgIGlmIChyZXEuZ2V0KCdYLVBhcnNlLVVwbG9hZC1Nb2RlJykgPT09ICdzdHJlYW0nKSB7XG4gICAgICByZXEuZmlsZURhdGEgPSB7fTtcbiAgICAgIGlmIChyZXEuZ2V0KCdYLVBhcnNlLUZpbGUtRGlyZWN0b3J5JykpIHtcbiAgICAgICAgcmVxLmZpbGVEYXRhLmRpcmVjdG9yeSA9IHJlcS5nZXQoJ1gtUGFyc2UtRmlsZS1EaXJlY3RvcnknKTtcbiAgICAgIH1cbiAgICAgIGlmIChyZXEuZ2V0KCdYLVBhcnNlLUZpbGUtTWV0YWRhdGEnKSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHBhcnNlZCA9IEpTT04ucGFyc2UocmVxLmdldCgnWC1QYXJzZS1GaWxlLU1ldGFkYXRhJykpO1xuICAgICAgICAgIGlmICghcGFyc2VkIHx8IHR5cGVvZiBwYXJzZWQgIT09ICdvYmplY3QnIHx8IEFycmF5LmlzQXJyYXkocGFyc2VkKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJlcS5maWxlRGF0YS5tZXRhZGF0YSA9IHBhcnNlZDtcbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgbmV4dChuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuSU5WQUxJRF9KU09OLCAnSW52YWxpZCBKU09OIGluIFgtUGFyc2UtRmlsZS1NZXRhZGF0YSBoZWFkZXIuJykpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHJlcS5nZXQoJ1gtUGFyc2UtRmlsZS1UYWdzJykpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBwYXJzZWQgPSBKU09OLnBhcnNlKHJlcS5nZXQoJ1gtUGFyc2UtRmlsZS1UYWdzJykpO1xuICAgICAgICAgIGlmICghcGFyc2VkIHx8IHR5cGVvZiBwYXJzZWQgIT09ICdvYmplY3QnIHx8IEFycmF5LmlzQXJyYXkocGFyc2VkKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJlcS5maWxlRGF0YS50YWdzID0gcGFyc2VkO1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICBuZXh0KG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5JTlZBTElEX0pTT04sICdJbnZhbGlkIEpTT04gaW4gWC1QYXJzZS1GaWxlLVRhZ3MgaGVhZGVyLicpKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBWYWxpZGF0ZSBkaXJlY3Rvcnkgb3B0aW9uIChyZXF1aXJlcyBtYXN0ZXIga2V5KVxuICAgIGNvbnN0IGRpcmVjdG9yeSA9IHJlcS5maWxlRGF0YT8uZGlyZWN0b3J5O1xuICAgIGlmIChkaXJlY3RvcnkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKCFpc01hc3Rlcikge1xuICAgICAgICBuZXh0KFxuICAgICAgICAgIG5ldyBQYXJzZS5FcnJvcihcbiAgICAgICAgICAgIFBhcnNlLkVycm9yLk9QRVJBVElPTl9GT1JCSURERU4sXG4gICAgICAgICAgICAnRGlyZWN0b3J5IGNhbiBvbmx5IGJlIHNldCB1c2luZyB0aGUgTWFzdGVyIEtleS4nXG4gICAgICAgICAgKVxuICAgICAgICApO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCBkaXJlY3RvcnlFcnJvciA9IEZpbGVzUm91dGVyLnZhbGlkYXRlRGlyZWN0b3J5KGRpcmVjdG9yeSk7XG4gICAgICBpZiAoZGlyZWN0b3J5RXJyb3IpIHtcbiAgICAgICAgbmV4dChkaXJlY3RvcnlFcnJvcik7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBEaXNwYXRjaCB0byB0aGUgYXBwcm9wcmlhdGUgaGFuZGxlciBiYXNlZCBvbiB3aGV0aGVyIHRoZSBib2R5IHdhcyBidWZmZXJlZFxuICAgIGlmIChCdWZmZXIuaXNCdWZmZXIocmVxLmJvZHkpKSB7XG4gICAgICByZXR1cm4gdGhpcy5faGFuZGxlQnVmZmVyZWRVcGxvYWQocmVxLCByZXMsIG5leHQpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5faGFuZGxlU3RyZWFtVXBsb2FkKHJlcSwgcmVzLCBuZXh0KTtcbiAgfVxuXG4gIGFzeW5jIF9oYW5kbGVCdWZmZXJlZFVwbG9hZChyZXEsIHJlcywgbmV4dCkge1xuICAgIGNvbnN0IGNvbmZpZyA9IHJlcS5jb25maWc7XG4gICAgY29uc3QgZmlsZXNDb250cm9sbGVyID0gY29uZmlnLmZpbGVzQ29udHJvbGxlcjtcbiAgICBjb25zdCB7IGZpbGVuYW1lIH0gPSByZXEucGFyYW1zO1xuICAgIGNvbnN0IGNvbnRlbnRUeXBlID0gcmVxLmdldCgnQ29udGVudC10eXBlJyk7XG5cbiAgICBpZiAoIXJlcS5ib2R5IHx8ICFyZXEuYm9keS5sZW5ndGgpIHtcbiAgICAgIG5leHQobmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLkZJTEVfU0FWRV9FUlJPUiwgJ0ludmFsaWQgZmlsZSB1cGxvYWQuJykpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGJhc2U2NCA9IHJlcS5ib2R5LnRvU3RyaW5nKCdiYXNlNjQnKTtcbiAgICBjb25zdCBmaWxlID0gbmV3IFBhcnNlLkZpbGUoZmlsZW5hbWUsIHsgYmFzZTY0IH0sIGNvbnRlbnRUeXBlKTtcbiAgICBjb25zdCB7IG1ldGFkYXRhID0ge30sIHRhZ3MgPSB7fSwgZGlyZWN0b3J5IH0gPSByZXEuZmlsZURhdGEgfHwge307XG4gICAgdHJ5IHtcbiAgICAgIC8vIFNjYW4gcmVxdWVzdCBkYXRhIGZvciBkZW5pZWQga2V5d29yZHNcbiAgICAgIFV0aWxzLmNoZWNrUHJvaGliaXRlZEtleXdvcmRzKGNvbmZpZywgbWV0YWRhdGEpO1xuICAgICAgVXRpbHMuY2hlY2tQcm9oaWJpdGVkS2V5d29yZHMoY29uZmlnLCB0YWdzKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbmV4dChuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuSU5WQUxJRF9LRVlfTkFNRSwgZXJyb3IpKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZmlsZS5zZXRUYWdzKHRhZ3MpO1xuICAgIGZpbGUuc2V0TWV0YWRhdGEobWV0YWRhdGEpO1xuICAgIGlmIChkaXJlY3RvcnkpIHtcbiAgICAgIGZpbGUuc2V0RGlyZWN0b3J5KGRpcmVjdG9yeSk7XG4gICAgfVxuICAgIGNvbnN0IGZpbGVTaXplID0gQnVmZmVyLmJ5dGVMZW5ndGgocmVxLmJvZHkpO1xuICAgIGNvbnN0IGZpbGVPYmplY3QgPSB7IGZpbGUsIGZpbGVTaXplIH07XG4gICAgdHJ5IHtcbiAgICAgIC8vIHJ1biBiZWZvcmVTYXZlRmlsZSB0cmlnZ2VyXG4gICAgICBjb25zdCB0cmlnZ2VyUmVzdWx0ID0gYXdhaXQgdHJpZ2dlcnMubWF5YmVSdW5GaWxlVHJpZ2dlcihcbiAgICAgICAgdHJpZ2dlcnMuVHlwZXMuYmVmb3JlU2F2ZSxcbiAgICAgICAgZmlsZU9iamVjdCxcbiAgICAgICAgY29uZmlnLFxuICAgICAgICByZXEuYXV0aFxuICAgICAgKTtcbiAgICAgIGxldCBzYXZlUmVzdWx0O1xuICAgICAgLy8gaWYgYSBuZXcgUGFyc2VGaWxlIGlzIHJldHVybmVkIGNoZWNrIGlmIGl0J3MgYW4gYWxyZWFkeSBzYXZlZCBmaWxlXG4gICAgICBpZiAodHJpZ2dlclJlc3VsdCBpbnN0YW5jZW9mIFBhcnNlLkZpbGUpIHtcbiAgICAgICAgZmlsZU9iamVjdC5maWxlID0gdHJpZ2dlclJlc3VsdDtcbiAgICAgICAgaWYgKHRyaWdnZXJSZXN1bHQudXJsKCkpIHtcbiAgICAgICAgICAvLyBzZXQgZmlsZVNpemUgdG8gbnVsbCBiZWNhdXNlIHdlIHdvbnQga25vdyBob3cgYmlnIGl0IGlzIGhlcmVcbiAgICAgICAgICBmaWxlT2JqZWN0LmZpbGVTaXplID0gbnVsbDtcbiAgICAgICAgICBzYXZlUmVzdWx0ID0ge1xuICAgICAgICAgICAgdXJsOiB0cmlnZ2VyUmVzdWx0LnVybCgpLFxuICAgICAgICAgICAgbmFtZTogdHJpZ2dlclJlc3VsdC5fbmFtZSxcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvLyBpZiB0aGUgZmlsZSByZXR1cm5lZCBieSB0aGUgdHJpZ2dlciBoYXMgYWxyZWFkeSBiZWVuIHNhdmVkIHNraXAgc2F2aW5nIGFueXRoaW5nXG4gICAgICBpZiAoIXNhdmVSZXN1bHQpIHtcbiAgICAgICAgLy8gdXBkYXRlIGZpbGVTaXplXG4gICAgICAgIGxldCBidWZmZXJEYXRhO1xuICAgICAgICBpZiAoZmlsZU9iamVjdC5maWxlLl9zb3VyY2U/LmZvcm1hdCA9PT0gJ2J1ZmZlcicpIHtcbiAgICAgICAgICBidWZmZXJEYXRhID0gZmlsZU9iamVjdC5maWxlLl9zb3VyY2UuYnVmZmVyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGJ1ZmZlckRhdGEgPSBCdWZmZXIuZnJvbShmaWxlT2JqZWN0LmZpbGUuX2RhdGEsICdiYXNlNjQnKTtcbiAgICAgICAgfVxuICAgICAgICBmaWxlT2JqZWN0LmZpbGVTaXplID0gQnVmZmVyLmJ5dGVMZW5ndGgoYnVmZmVyRGF0YSk7XG4gICAgICAgIC8vIHByZXBhcmUgZmlsZSBvcHRpb25zXG4gICAgICAgIGNvbnN0IGZpbGVPcHRpb25zID0ge1xuICAgICAgICAgIG1ldGFkYXRhOiBmaWxlT2JqZWN0LmZpbGUuX21ldGFkYXRhLFxuICAgICAgICB9O1xuICAgICAgICAvLyBzb21lIHMzLWNvbXBhdGlibGUgcHJvdmlkZXJzIChEaWdpdGFsT2NlYW4sIExpbm9kZSkgZG8gbm90IGFjY2VwdCB0YWdzXG4gICAgICAgIC8vIHNvIHdlIGRvIG5vdCBpbmNsdWRlIHRoZSB0YWdzIG9wdGlvbiBpZiBpdCBpcyBlbXB0eS5cbiAgICAgICAgY29uc3QgZmlsZVRhZ3MgPVxuICAgICAgICAgIE9iamVjdC5rZXlzKGZpbGVPYmplY3QuZmlsZS5fdGFncykubGVuZ3RoID4gMCA/IHsgdGFnczogZmlsZU9iamVjdC5maWxlLl90YWdzIH0gOiB7fTtcbiAgICAgICAgT2JqZWN0LmFzc2lnbihmaWxlT3B0aW9ucywgZmlsZVRhZ3MpO1xuICAgICAgICAvLyBpbmNsdWRlIGRpcmVjdG9yeSBpZiBzZXQgKGZyb20gY2xpZW50IHJlcXVlc3Qgb3IgYmVmb3JlU2F2ZUZpbGUgdHJpZ2dlcilcbiAgICAgICAgaWYgKGZpbGVPYmplY3QuZmlsZS5fZGlyZWN0b3J5KSB7XG4gICAgICAgICAgZmlsZU9wdGlvbnMuZGlyZWN0b3J5ID0gZmlsZU9iamVjdC5maWxlLl9kaXJlY3Rvcnk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gc2F2ZSBmaWxlXG4gICAgICAgIGNvbnN0IGNyZWF0ZUZpbGVSZXN1bHQgPSBhd2FpdCBmaWxlc0NvbnRyb2xsZXIuY3JlYXRlRmlsZShcbiAgICAgICAgICBjb25maWcsXG4gICAgICAgICAgZmlsZU9iamVjdC5maWxlLl9uYW1lLFxuICAgICAgICAgIGJ1ZmZlckRhdGEsXG4gICAgICAgICAgZmlsZU9iamVjdC5maWxlLl9zb3VyY2UudHlwZSxcbiAgICAgICAgICBmaWxlT3B0aW9uc1xuICAgICAgICApO1xuICAgICAgICAvLyB1cGRhdGUgZmlsZSB3aXRoIG5ldyBkYXRhXG4gICAgICAgIGZpbGVPYmplY3QuZmlsZS5fbmFtZSA9IGNyZWF0ZUZpbGVSZXN1bHQubmFtZTtcbiAgICAgICAgZmlsZU9iamVjdC5maWxlLl91cmwgPSBjcmVhdGVGaWxlUmVzdWx0LnVybDtcbiAgICAgICAgZmlsZU9iamVjdC5maWxlLl9yZXF1ZXN0VGFzayA9IG51bGw7XG4gICAgICAgIGZpbGVPYmplY3QuZmlsZS5fcHJldmlvdXNTYXZlID0gUHJvbWlzZS5yZXNvbHZlKGZpbGVPYmplY3QuZmlsZSk7XG4gICAgICAgIHNhdmVSZXN1bHQgPSB7XG4gICAgICAgICAgdXJsOiBjcmVhdGVGaWxlUmVzdWx0LnVybCxcbiAgICAgICAgICBuYW1lOiBjcmVhdGVGaWxlUmVzdWx0Lm5hbWUsXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICAvLyBydW4gYWZ0ZXJTYXZlRmlsZSB0cmlnZ2VyXG4gICAgICBhd2FpdCB0cmlnZ2Vycy5tYXliZVJ1bkZpbGVUcmlnZ2VyKHRyaWdnZXJzLlR5cGVzLmFmdGVyU2F2ZSwgZmlsZU9iamVjdCwgY29uZmlnLCByZXEuYXV0aCk7XG4gICAgICByZXMuc3RhdHVzKDIwMSk7XG4gICAgICByZXMuc2V0KCdMb2NhdGlvbicsIHNhdmVSZXN1bHQudXJsKTtcbiAgICAgIHJlcy5qc29uKHNhdmVSZXN1bHQpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGxvZ2dlci5lcnJvcignRXJyb3IgY3JlYXRpbmcgYSBmaWxlOiAnLCBlKTtcbiAgICAgIGNvbnN0IGVycm9yID0gdHJpZ2dlcnMucmVzb2x2ZUVycm9yKGUsIHtcbiAgICAgICAgY29kZTogUGFyc2UuRXJyb3IuRklMRV9TQVZFX0VSUk9SLFxuICAgICAgICBtZXNzYWdlOiBgQ291bGQgbm90IHN0b3JlIGZpbGU6ICR7ZmlsZU9iamVjdC5maWxlLl9uYW1lfS5gLFxuICAgICAgfSk7XG4gICAgICBuZXh0KGVycm9yKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBfaGFuZGxlU3RyZWFtVXBsb2FkKHJlcSwgcmVzLCBuZXh0KSB7XG4gICAgY29uc3QgY29uZmlnID0gcmVxLmNvbmZpZztcbiAgICBjb25zdCBmaWxlc0NvbnRyb2xsZXIgPSBjb25maWcuZmlsZXNDb250cm9sbGVyO1xuICAgIGNvbnN0IHsgZmlsZW5hbWUgfSA9IHJlcS5wYXJhbXM7XG4gICAgbGV0IGNvbnRlbnRUeXBlID0gcmVxLmdldCgnQ29udGVudC1UeXBlJyk7XG4gICAgY29uc3QgbWF4Qnl0ZXMgPSByZXEuX21heFVwbG9hZFNpemVCeXRlcztcbiAgICBsZXQgc3RyZWFtO1xuXG4gICAgdHJ5IHtcbiAgICAgIC8vIEVhcmx5IHJlamVjdGlvbiB2aWEgQ29udGVudC1MZW5ndGggaGVhZGVyXG4gICAgICBjb25zdCBjb250ZW50TGVuZ3RoID0gcmVxLmdldCgnQ29udGVudC1MZW5ndGgnKTtcbiAgICAgIGlmIChjb250ZW50TGVuZ3RoICYmIHBhcnNlSW50KGNvbnRlbnRMZW5ndGgsIDEwKSA+IG1heEJ5dGVzKSB7XG4gICAgICAgIHJlcS5yZXN1bWUoKTtcbiAgICAgICAgbmV4dChuZXcgUGFyc2UuRXJyb3IoXG4gICAgICAgICAgUGFyc2UuRXJyb3IuRklMRV9TQVZFX0VSUk9SLFxuICAgICAgICAgIGBGaWxlIHNpemUgZXhjZWVkcyBtYXhpbXVtIGFsbG93ZWQ6ICR7bWF4Qnl0ZXN9IGJ5dGVzLmBcbiAgICAgICAgKSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgbWltZSA9IChhd2FpdCBpbXBvcnQoJ21pbWUnKSkuZGVmYXVsdDtcblxuICAgICAgLy8gSW5mZXIgY29udGVudCB0eXBlIGZyb20gZXh0ZW5zaW9uIG9yIGFkZCBleHRlbnNpb24gZnJvbSBjb250ZW50IHR5cGVcbiAgICAgIGNvbnN0IGhhc0V4dGVuc2lvbiA9IGZpbGVuYW1lICYmIGZpbGVuYW1lLmluY2x1ZGVzKCcuJyk7XG4gICAgICBpZiAoaGFzRXh0ZW5zaW9uICYmICFjb250ZW50VHlwZSkge1xuICAgICAgICBjb250ZW50VHlwZSA9IG1pbWUuZ2V0VHlwZShmaWxlbmFtZSk7XG4gICAgICB9IGVsc2UgaWYgKCFoYXNFeHRlbnNpb24gJiYgY29udGVudFR5cGUpIHtcbiAgICAgICAgLy8gZXh0ZW5zaW9uIHdpbGwgYmUgYWRkZWQgYnkgZmlsZXNDb250cm9sbGVyLmNyZWF0ZUZpbGVcbiAgICAgIH1cblxuICAgICAgLy8gQ3JlYXRlIHNpemUtbGltaXRlZCBzdHJlYW0gd3JhcHBpbmcgdGhlIHJlcXVlc3RcbiAgICAgIHN0cmVhbSA9IGNyZWF0ZVNpemVMaW1pdGVkU3RyZWFtKHJlcSwgbWF4Qnl0ZXMpO1xuXG4gICAgICAvLyBCdWlsZCBhIFBhcnNlLkZpbGUgd2l0aCBubyBfZGF0YSAoc3RyZWFtaW5nIG1vZGUpXG4gICAgICBjb25zdCBmaWxlID0gbmV3IFBhcnNlLkZpbGUoZmlsZW5hbWUsIHsgYmFzZTY0OiAnJyB9LCBjb250ZW50VHlwZSk7XG4gICAgICBjb25zdCB7IG1ldGFkYXRhID0ge30sIHRhZ3MgPSB7fSwgZGlyZWN0b3J5IH0gPSByZXEuZmlsZURhdGEgfHwge307XG5cbiAgICAgIC8vIFZhbGlkYXRlIG1ldGFkYXRhIGFuZCB0YWdzIGZvciBwcm9oaWJpdGVkIGtleXdvcmRzXG4gICAgICB0cnkge1xuICAgICAgICBVdGlscy5jaGVja1Byb2hpYml0ZWRLZXl3b3Jkcyhjb25maWcsIG1ldGFkYXRhKTtcbiAgICAgICAgVXRpbHMuY2hlY2tQcm9oaWJpdGVkS2V5d29yZHMoY29uZmlnLCB0YWdzKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIHN0cmVhbS5kZXN0cm95KCk7XG4gICAgICAgIG5leHQobmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLklOVkFMSURfS0VZX05BTUUsIGVycm9yKSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgZmlsZS5zZXRUYWdzKHRhZ3MpO1xuICAgICAgZmlsZS5zZXRNZXRhZGF0YShtZXRhZGF0YSk7XG4gICAgICBpZiAoZGlyZWN0b3J5KSB7XG4gICAgICAgIGZpbGUuc2V0RGlyZWN0b3J5KGRpcmVjdG9yeSk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGZpbGVTaXplID0gcmVxLmdldCgnQ29udGVudC1MZW5ndGgnKVxuICAgICAgICA/IHBhcnNlSW50KHJlcS5nZXQoJ0NvbnRlbnQtTGVuZ3RoJyksIDEwKVxuICAgICAgICA6IG51bGw7XG4gICAgICBjb25zdCBmaWxlT2JqZWN0ID0geyBmaWxlLCBmaWxlU2l6ZSwgc3RyZWFtOiB0cnVlIH07XG5cbiAgICAgIC8vIFJ1biBiZWZvcmVTYXZlRmlsZSB0cmlnZ2VyXG4gICAgICBjb25zdCB0cmlnZ2VyUmVzdWx0ID0gYXdhaXQgdHJpZ2dlcnMubWF5YmVSdW5GaWxlVHJpZ2dlcihcbiAgICAgICAgdHJpZ2dlcnMuVHlwZXMuYmVmb3JlU2F2ZSxcbiAgICAgICAgZmlsZU9iamVjdCxcbiAgICAgICAgY29uZmlnLFxuICAgICAgICByZXEuYXV0aFxuICAgICAgKTtcblxuICAgICAgbGV0IHNhdmVSZXN1bHQ7XG4gICAgICAvLyBJZiBhIG5ldyBQYXJzZUZpbGUgaXMgcmV0dXJuZWQsIGNoZWNrIGlmIGl0J3MgYW4gYWxyZWFkeSBzYXZlZCBmaWxlXG4gICAgICBpZiAodHJpZ2dlclJlc3VsdCBpbnN0YW5jZW9mIFBhcnNlLkZpbGUpIHtcbiAgICAgICAgZmlsZU9iamVjdC5maWxlID0gdHJpZ2dlclJlc3VsdDtcbiAgICAgICAgaWYgKHRyaWdnZXJSZXN1bHQudXJsKCkpIHtcbiAgICAgICAgICBmaWxlT2JqZWN0LmZpbGVTaXplID0gbnVsbDtcbiAgICAgICAgICBzYXZlUmVzdWx0ID0ge1xuICAgICAgICAgICAgdXJsOiB0cmlnZ2VyUmVzdWx0LnVybCgpLFxuICAgICAgICAgICAgbmFtZTogdHJpZ2dlclJlc3VsdC5fbmFtZSxcbiAgICAgICAgICB9O1xuICAgICAgICAgIC8vIERlc3Ryb3kgc3RyZWFtIHRvIHJlbW92ZSBsaXN0ZW5lcnMgYW5kIGRyYWluIHJlcXVlc3RcbiAgICAgICAgICBzdHJlYW0uZGVzdHJveSgpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIElmIHRoZSBmaWxlIHJldHVybmVkIGJ5IHRoZSB0cmlnZ2VyIGhhcyBhbHJlYWR5IGJlZW4gc2F2ZWQsIHNraXAgc2F2aW5nXG4gICAgICBpZiAoIXNhdmVSZXN1bHQpIHtcbiAgICAgICAgLy8gUHJlcGFyZSBmaWxlIG9wdGlvbnNcbiAgICAgICAgY29uc3QgZmlsZU9wdGlvbnMgPSB7XG4gICAgICAgICAgbWV0YWRhdGE6IGZpbGVPYmplY3QuZmlsZS5fbWV0YWRhdGEsXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGZpbGVUYWdzID1cbiAgICAgICAgICBPYmplY3Qua2V5cyhmaWxlT2JqZWN0LmZpbGUuX3RhZ3MpLmxlbmd0aCA+IDAgPyB7IHRhZ3M6IGZpbGVPYmplY3QuZmlsZS5fdGFncyB9IDoge307XG4gICAgICAgIE9iamVjdC5hc3NpZ24oZmlsZU9wdGlvbnMsIGZpbGVUYWdzKTtcbiAgICAgICAgLy8gaW5jbHVkZSBkaXJlY3RvcnkgaWYgc2V0IChmcm9tIGNsaWVudCByZXF1ZXN0IG9yIGJlZm9yZVNhdmVGaWxlIHRyaWdnZXIpXG4gICAgICAgIGlmIChmaWxlT2JqZWN0LmZpbGUuX2RpcmVjdG9yeSkge1xuICAgICAgICAgIGZpbGVPcHRpb25zLmRpcmVjdG9yeSA9IGZpbGVPYmplY3QuZmlsZS5fZGlyZWN0b3J5O1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gUGFzcyBzdHJlYW0gZGlyZWN0bHkgdG8gZmlsZXNDb250cm9sbGVyIOKAlCBpdCB3aWxsIGJ1ZmZlciBpZiBhZGFwdGVyIGRvZXNuJ3Qgc3VwcG9ydCBzdHJlYW1pbmdcbiAgICAgICAgY29uc3Qgc291cmNlVHlwZSA9IGZpbGVPYmplY3QuZmlsZS5fc291cmNlPy50eXBlIHx8IGNvbnRlbnRUeXBlO1xuICAgICAgICBjb25zdCBjcmVhdGVGaWxlUmVzdWx0ID0gYXdhaXQgZmlsZXNDb250cm9sbGVyLmNyZWF0ZUZpbGUoXG4gICAgICAgICAgY29uZmlnLFxuICAgICAgICAgIGZpbGVPYmplY3QuZmlsZS5fbmFtZSxcbiAgICAgICAgICBzdHJlYW0sXG4gICAgICAgICAgc291cmNlVHlwZSxcbiAgICAgICAgICBmaWxlT3B0aW9uc1xuICAgICAgICApO1xuXG4gICAgICAgIC8vIFVwZGF0ZSBmaWxlIHdpdGggbmV3IGRhdGFcbiAgICAgICAgZmlsZU9iamVjdC5maWxlLl9uYW1lID0gY3JlYXRlRmlsZVJlc3VsdC5uYW1lO1xuICAgICAgICBmaWxlT2JqZWN0LmZpbGUuX3VybCA9IGNyZWF0ZUZpbGVSZXN1bHQudXJsO1xuICAgICAgICBmaWxlT2JqZWN0LmZpbGUuX3JlcXVlc3RUYXNrID0gbnVsbDtcbiAgICAgICAgZmlsZU9iamVjdC5maWxlLl9wcmV2aW91c1NhdmUgPSBQcm9taXNlLnJlc29sdmUoZmlsZU9iamVjdC5maWxlKTtcbiAgICAgICAgc2F2ZVJlc3VsdCA9IHtcbiAgICAgICAgICB1cmw6IGNyZWF0ZUZpbGVSZXN1bHQudXJsLFxuICAgICAgICAgIG5hbWU6IGNyZWF0ZUZpbGVSZXN1bHQubmFtZSxcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgLy8gUnVuIGFmdGVyU2F2ZUZpbGUgdHJpZ2dlclxuICAgICAgYXdhaXQgdHJpZ2dlcnMubWF5YmVSdW5GaWxlVHJpZ2dlcih0cmlnZ2Vycy5UeXBlcy5hZnRlclNhdmUsIGZpbGVPYmplY3QsIGNvbmZpZywgcmVxLmF1dGgpO1xuICAgICAgcmVzLnN0YXR1cygyMDEpO1xuICAgICAgcmVzLnNldCgnTG9jYXRpb24nLCBzYXZlUmVzdWx0LnVybCk7XG4gICAgICByZXMuanNvbihzYXZlUmVzdWx0KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvLyBEZXN0cm95IHN0cmVhbSB0byByZW1vdmUgbGlzdGVuZXJzIGFuZCBkcmFpbiByZXF1ZXN0LCBvciByZXN1bWUgZGlyZWN0bHlcbiAgICAgIGlmIChzdHJlYW0pIHtcbiAgICAgICAgc3RyZWFtLmRlc3Ryb3koKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlcS5yZXN1bWUoKTtcbiAgICAgIH1cbiAgICAgIGxvZ2dlci5lcnJvcignRXJyb3IgY3JlYXRpbmcgYSBmaWxlOiAnLCBlKTtcbiAgICAgIGNvbnN0IGVycm9yID0gdHJpZ2dlcnMucmVzb2x2ZUVycm9yKGUsIHtcbiAgICAgICAgY29kZTogUGFyc2UuRXJyb3IuRklMRV9TQVZFX0VSUk9SLFxuICAgICAgICBtZXNzYWdlOiBgQ291bGQgbm90IHN0b3JlIGZpbGU6ICR7ZmlsZW5hbWV9LmAsXG4gICAgICB9KTtcbiAgICAgIG5leHQoZXJyb3IpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZUhhbmRsZXIocmVxLCByZXMsIG5leHQpIHtcbiAgICBpZiAocmVxLmF1dGguaXNSZWFkT25seSkge1xuICAgICAgY29uc3QgZXJyb3IgPSBjcmVhdGVTYW5pdGl6ZWRIdHRwRXJyb3IoNDAzLCBcInJlYWQtb25seSBtYXN0ZXJLZXkgaXNuJ3QgYWxsb3dlZCB0byBkZWxldGUgYSBmaWxlLlwiLCByZXEuY29uZmlnKTtcbiAgICAgIHJlcy5zdGF0dXMoZXJyb3Iuc3RhdHVzKTtcbiAgICAgIHJlcy5lbmQoYHtcImVycm9yXCI6XCIke2Vycm9yLm1lc3NhZ2V9XCJ9YCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICBjb25zdCB7IGZpbGVzQ29udHJvbGxlciB9ID0gcmVxLmNvbmZpZztcbiAgICAgIGNvbnN0IGZpbGVuYW1lID0gRmlsZXNSb3V0ZXIuX2dldEZpbGVuYW1lRnJvbVBhcmFtcyhyZXEpO1xuICAgICAgLy8gcnVuIGJlZm9yZURlbGV0ZUZpbGUgdHJpZ2dlclxuICAgICAgY29uc3QgZmlsZSA9IG5ldyBQYXJzZS5GaWxlKGZpbGVuYW1lKTtcbiAgICAgIGZpbGUuX3VybCA9IGF3YWl0IGZpbGVzQ29udHJvbGxlci5hZGFwdGVyLmdldEZpbGVMb2NhdGlvbihyZXEuY29uZmlnLCBmaWxlbmFtZSk7XG4gICAgICBjb25zdCBmaWxlT2JqZWN0ID0geyBmaWxlLCBmaWxlU2l6ZTogbnVsbCB9O1xuICAgICAgYXdhaXQgdHJpZ2dlcnMubWF5YmVSdW5GaWxlVHJpZ2dlcihcbiAgICAgICAgdHJpZ2dlcnMuVHlwZXMuYmVmb3JlRGVsZXRlLFxuICAgICAgICBmaWxlT2JqZWN0LFxuICAgICAgICByZXEuY29uZmlnLFxuICAgICAgICByZXEuYXV0aFxuICAgICAgKTtcbiAgICAgIC8vIGRlbGV0ZSBmaWxlXG4gICAgICBhd2FpdCBmaWxlc0NvbnRyb2xsZXIuZGVsZXRlRmlsZShyZXEuY29uZmlnLCBmaWxlbmFtZSk7XG4gICAgICAvLyBydW4gYWZ0ZXJEZWxldGVGaWxlIHRyaWdnZXJcbiAgICAgIGF3YWl0IHRyaWdnZXJzLm1heWJlUnVuRmlsZVRyaWdnZXIoXG4gICAgICAgIHRyaWdnZXJzLlR5cGVzLmFmdGVyRGVsZXRlLFxuICAgICAgICBmaWxlT2JqZWN0LFxuICAgICAgICByZXEuY29uZmlnLFxuICAgICAgICByZXEuYXV0aFxuICAgICAgKTtcbiAgICAgIHJlcy5zdGF0dXMoMjAwKTtcbiAgICAgIC8vIFRPRE86IHJldHVybiB1c2VmdWwgSlNPTiBoZXJlP1xuICAgICAgcmVzLmVuZCgpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGxvZ2dlci5lcnJvcignRXJyb3IgZGVsZXRpbmcgYSBmaWxlOiAnLCBlKTtcbiAgICAgIGNvbnN0IGVycm9yID0gdHJpZ2dlcnMucmVzb2x2ZUVycm9yKGUsIHtcbiAgICAgICAgY29kZTogUGFyc2UuRXJyb3IuRklMRV9ERUxFVEVfRVJST1IsXG4gICAgICAgIG1lc3NhZ2U6ICdDb3VsZCBub3QgZGVsZXRlIGZpbGUuJyxcbiAgICAgIH0pO1xuICAgICAgbmV4dChlcnJvcik7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgbWV0YWRhdGFIYW5kbGVyKHJlcSwgcmVzKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGNvbmZpZyA9IENvbmZpZy5nZXQocmVxLnBhcmFtcy5hcHBJZCk7XG4gICAgICBpZiAoIWNvbmZpZykge1xuICAgICAgICByZXMuc3RhdHVzKDIwMCk7XG4gICAgICAgIHJlcy5qc29uKHt9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgRmlsZXNSb3V0ZXIuX3ZhbGlkYXRlRmlsZURvd25sb2FkKHJlcSwgY29uZmlnKTtcbiAgICAgIGNvbnN0IHsgZmlsZXNDb250cm9sbGVyIH0gPSBjb25maWc7XG4gICAgICBsZXQgZmlsZW5hbWUgPSBGaWxlc1JvdXRlci5fZ2V0RmlsZW5hbWVGcm9tUGFyYW1zKHJlcSk7XG4gICAgICBjb25zdCBmaWxlID0gbmV3IFBhcnNlLkZpbGUoZmlsZW5hbWUsIHsgYmFzZTY0OiAnJyB9KTtcbiAgICAgIGNvbnN0IGZpbGVBdXRoID0gcmVxLmF1dGg7XG4gICAgICBjb25zdCB0cmlnZ2VyUmVzdWx0ID0gYXdhaXQgdHJpZ2dlcnMubWF5YmVSdW5GaWxlVHJpZ2dlcihcbiAgICAgICAgdHJpZ2dlcnMuVHlwZXMuYmVmb3JlRmluZCxcbiAgICAgICAgeyBmaWxlIH0sXG4gICAgICAgIGNvbmZpZyxcbiAgICAgICAgZmlsZUF1dGhcbiAgICAgICk7XG4gICAgICBpZiAodHJpZ2dlclJlc3VsdD8uZmlsZT8uX25hbWUpIHtcbiAgICAgICAgZmlsZW5hbWUgPSB0cmlnZ2VyUmVzdWx0LmZpbGUuX25hbWU7XG4gICAgICB9XG4gICAgICBjb25zdCBkYXRhID0gYXdhaXQgZmlsZXNDb250cm9sbGVyLmdldE1ldGFkYXRhKGZpbGVuYW1lKS5jYXRjaCgoKSA9PiB7XG4gICAgICAgIHJlcy5zdGF0dXMoMjAwKTtcbiAgICAgICAgcmVzLmpzb24oe30pO1xuICAgICAgfSk7XG4gICAgICBpZiAoIWRhdGEpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgYXdhaXQgdHJpZ2dlcnMubWF5YmVSdW5GaWxlVHJpZ2dlcihcbiAgICAgICAgdHJpZ2dlcnMuVHlwZXMuYWZ0ZXJGaW5kLFxuICAgICAgICB7IGZpbGUgfSxcbiAgICAgICAgY29uZmlnLFxuICAgICAgICBmaWxlQXV0aFxuICAgICAgKTtcbiAgICAgIHJlcy5zdGF0dXMoMjAwKTtcbiAgICAgIHJlcy5qc29uKGRhdGEpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnN0IGVyciA9IHRyaWdnZXJzLnJlc29sdmVFcnJvcihlLCB7XG4gICAgICAgIGNvZGU6IFBhcnNlLkVycm9yLlNDUklQVF9GQUlMRUQsXG4gICAgICAgIG1lc3NhZ2U6ICdDb3VsZCBub3QgZ2V0IGZpbGUgbWV0YWRhdGEuJyxcbiAgICAgIH0pO1xuICAgICAgcmVzLnN0YXR1cyg0MDMpO1xuICAgICAgcmVzLmpzb24oeyBjb2RlOiBlcnIuY29kZSwgZXJyb3I6IGVyci5tZXNzYWdlIH0pO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBpc0ZpbGVTdHJlYW1hYmxlKHJlcSwgZmlsZXNDb250cm9sbGVyKSB7XG4gIGNvbnN0IHJhbmdlID0gKHJlcS5nZXQoJ1JhbmdlJykgfHwgJy8tLycpLnNwbGl0KCctJyk7XG4gIGNvbnN0IHN0YXJ0ID0gTnVtYmVyKHJhbmdlWzBdKTtcbiAgY29uc3QgZW5kID0gTnVtYmVyKHJhbmdlWzFdKTtcbiAgcmV0dXJuIChcbiAgICAoIWlzTmFOKHN0YXJ0KSB8fCAhaXNOYU4oZW5kKSkgJiYgdHlwZW9mIGZpbGVzQ29udHJvbGxlci5hZGFwdGVyLmhhbmRsZUZpbGVTdHJlYW0gPT09ICdmdW5jdGlvbidcbiAgKTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBLElBQUFBLFFBQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLFdBQUEsR0FBQUMsdUJBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFHLEtBQUEsR0FBQUosc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFJLE9BQUEsR0FBQUwsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFLLE9BQUEsR0FBQU4sc0JBQUEsQ0FBQUMsT0FBQTtBQUdBLElBQUFNLE9BQUEsR0FBQU4sT0FBQTtBQUNBLElBQUFPLE1BQUEsR0FBQVAsT0FBQTtBQUFvRCxTQUFBRSx3QkFBQU0sQ0FBQSxFQUFBQyxDQUFBLDZCQUFBQyxPQUFBLE1BQUFDLENBQUEsT0FBQUQsT0FBQSxJQUFBRSxDQUFBLE9BQUFGLE9BQUEsWUFBQVIsdUJBQUEsWUFBQUEsQ0FBQU0sQ0FBQSxFQUFBQyxDQUFBLFNBQUFBLENBQUEsSUFBQUQsQ0FBQSxJQUFBQSxDQUFBLENBQUFLLFVBQUEsU0FBQUwsQ0FBQSxNQUFBTSxDQUFBLEVBQUFDLENBQUEsRUFBQUMsQ0FBQSxLQUFBQyxTQUFBLFFBQUFDLE9BQUEsRUFBQVYsQ0FBQSxpQkFBQUEsQ0FBQSx1QkFBQUEsQ0FBQSx5QkFBQUEsQ0FBQSxT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