@agilemotion/oui-react-js 2.0.13 → 2.0.15

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.
@@ -157,14 +157,22 @@ class RestService {
157
157
  // Body is passed through; the fetch layer drops it for verbs that
158
158
  // forbid one. DELETE with a body is uncommon but permitted by
159
159
  // HTTP — we don't block it here.
160
+ // Pre-auth flows (registration wizard endpoints) must not
161
+ // attach a bearer token — Spring Security's BearerTokenAuthenticationFilter
162
+ // validates *any* attached token even on permitAll() paths,
163
+ // so an empty/stale token would 401 a whitelisted endpoint.
164
+ // Path-prefix detection matches the equivalent fix in
165
+ // RouteActionHandler for /view/public/get.
166
+ const isPublicRegistration = service.url && /\/api\/v[0-9]+\/registration\//.test(service.url);
160
167
  this.fetchWithCustomConfig({
161
168
  viewId: request.viewId,
162
169
  url,
163
170
  serviceType: request.service.type,
164
171
  method,
165
- secure: !service.url.startsWith('http://'),
172
+ secure: !isPublicRegistration && !service.url.startsWith('http://'),
166
173
  body: requestBody,
167
- headers
174
+ headers,
175
+ track: request.track !== false
168
176
  }).then(response => {
169
177
  let path = _Utils.default.getPropertyChainPath(request.returnValueBinding);
170
178
  if (!_Utils.default.isNull(path.valueObject) && !_Utils.default.isNull(path.property)) {
@@ -229,7 +237,7 @@ class RestService {
229
237
  secure: true,
230
238
  method: 'POST',
231
239
  body: rpcRequest,
232
- track: true,
240
+ track: request.track !== false,
233
241
  contentType: 'application/json',
234
242
  headers
235
243
  }).then(response => {
@@ -404,4 +412,4 @@ const invokeRest = request => {
404
412
  return instance.invokeRest(request);
405
413
  };
406
414
  exports.invokeRest = invokeRest;
407
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfVXRpbHMiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9yZWFjdFByb21pc2VUcmFja2VyIiwiX0FwcGxpY2F0aW9uTWFuYWdlciIsIl9FdmVudCIsIl9PYnNlcnZhYmxlIiwiX0V2ZW50VHlwZSIsIl9wcm9wVHlwZXMiLCJfUmVzdFV0aWxzIiwiZSIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0Iiwib3duS2V5cyIsInIiLCJ0IiwiT2JqZWN0Iiwia2V5cyIsImdldE93blByb3BlcnR5U3ltYm9scyIsIm8iLCJmaWx0ZXIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJlbnVtZXJhYmxlIiwicHVzaCIsImFwcGx5IiwiX29iamVjdFNwcmVhZCIsImFyZ3VtZW50cyIsImxlbmd0aCIsImZvckVhY2giLCJfZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwiZGVmaW5lUHJvcGVydGllcyIsImRlZmluZVByb3BlcnR5IiwiX3RvUHJvcGVydHlLZXkiLCJ2YWx1ZSIsImNvbmZpZ3VyYWJsZSIsIndyaXRhYmxlIiwiaSIsIl90b1ByaW1pdGl2ZSIsIlN5bWJvbCIsInRvUHJpbWl0aXZlIiwiY2FsbCIsIlR5cGVFcnJvciIsIlN0cmluZyIsIk51bWJlciIsImxvY2F0aW9uIiwiZXhwb3J0cyIsIndpbmRvdyIsInByb3RvY29sIiwiaG9zdG5hbWUiLCJzdGF0dXMiLCJyZXNwb25zZSIsIm9rIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJqc29uIiwidGV4dCIsIlJlc3RTZXJ2aWNlIiwiaXNQYXJhbVZhbHVlTnVsbCIsInBhcmFtVmFsdWUiLCJVdGlscyIsImlzTnVsbCIsImhhc093blByb3BlcnR5IiwiaW52b2tlUmVzdCIsInJlcXVlc3QiLCJzZXJ2aWNlIiwidXJsIiwic3RhcnRzV2l0aCIsImNvbmNhdCIsImFwcGxpY2F0aW9uTWFuYWdlciIsImdldENvbnRleHRSb290IiwicmVxdWVzdEJvZHkiLCJoZWFkZXJzIiwicGFyYW1ldGVycyIsInF1ZXJ5U3RyaW5nIiwicGF0aFBhcmFtZXRlcnMiLCJyZXF1ZXN0Qm9keVBhcmFtRm91bmQiLCJwYXJhbWV0ZXIiLCJwYXJhbWV0ZXJWYWx1ZSIsInJlc29sdmVQYXJhbWV0ZXJWYWx1ZSIsImV2ZW50IiwiZGF0YSIsInZhbGlkYXRvciIsIm51bGxhYmxlIiwiZXZhbHVhdGVCb29sZWFuRXhwcmVzc2lvbiIsIm5hbWUiLCJyZXF1aXJlZCIsImVycm9yVHlwZSIsImh0dHBQYXJhbWV0ZXJUeXBlIiwiaW5jbHVkZVBhcmFtZXRlclR5cGVzIiwidHlwZSIsIkpTT04iLCJzdHJpbmdpZnkiLCJyZXNvbHZlZFZhbHVlIiwiZW5jb2RlIiwiZW5jb2RlVVJJQ29tcG9uZW50IiwiaW5zdGFuY2VUeXBlIiwiaW5kZXhPZiIsInJlcGxhY2UiLCJFcnJvciIsImNvbnRlbnRUeXBlIiwibWV0aG9kIiwidG9VcHBlckNhc2UiLCJmZXRjaFdpdGhDdXN0b21Db25maWciLCJ2aWV3SWQiLCJzZXJ2aWNlVHlwZSIsInNlY3VyZSIsImRvd25sb2FkIiwidGhlbiIsImNhdGNoIiwiYm9keSIsInBhdGgiLCJnZXRQcm9wZXJ0eUNoYWluUGF0aCIsInJldHVyblZhbHVlQmluZGluZyIsInZhbHVlT2JqZWN0IiwicHJvcGVydHkiLCJwcm9jZXNzU3VjY2Vzc2Z1bFJlc3BvbnNlRGF0YSIsImNvbXBvbmVudCIsInN1Y2Nlc3NNZXNzYWdlIiwiaW52b2tlUnBjIiwicnBjUmVxdWVzdCIsImlkIiwic3BsaXQiLCJzZXJ2aWNlSWQiLCJwcm9jZWR1cmVOYW1lIiwibW9kdWxlIiwidG9Mb3dlckNhc2UiLCJwYXJhbWV0ZXJDb25maWciLCJpbmRleCIsInZhbCIsInRyYWNrIiwiYWNjZXNzVG9rZW4iLCJzZXNzaW9uU3RvcmFnZSIsImdldEl0ZW0iLCJpZFRva2VuIiwiRm9ybURhdGEiLCJmZXRjaENvbmZpZyIsImNvbmZpZyIsImFjY2VwdCIsImdldEFwcGxpY2F0aW9uUHJpbWFyeUNvbG9yIiwiZ2V0QXBwbGljYXRpb25TZWNvbmRhcnlDb2xvciIsImZldGNoIiwiZXJyb3JEYXRhIiwibWVzc2FnZSIsInN0YXR1c1RleHQiLCJjb250ZW50RGlzcG9zaXRpb24iLCJnZXQiLCJmaWxlbmFtZSIsImluY2x1ZGVzIiwidHJpbSIsImJsb2IiLCJfcmVmIiwiVVJMIiwiY3JlYXRlT2JqZWN0VVJMIiwiYSIsImRvY3VtZW50IiwiY3JlYXRlRWxlbWVudCIsImhyZWYiLCJhcHBlbmRDaGlsZCIsImNsaWNrIiwicmVtb3ZlQ2hpbGQiLCJyZXZva2VPYmplY3RVUkwiLCJlcnJvciIsImNvbnNvbGUiLCJ0cmFja1Byb21pc2UiLCJleGVjdXRlRmV0Y2giLCJlbmNvZGVVUkkiLCJlbmRzV2l0aCIsImNsZWFyIiwibmF2aWdhdGUiLCJ0b1N0cmluZyIsInBhcnNlIiwiaWdub3JlZCIsImRhdGFUeXBlIiwiRXZlbnQiLCJldmVudE1hbmFnZXIiLCJmaXJlRXZlbnQiLCJFdmVudFR5cGUiLCJNRVNTQUdFX0FSUklWRUQiLCJtZXNzYWdlVHlwZSIsInBvcHVsYXRlVGVtcGxhdGUiLCJpbnN0YW5jZSJdLCJzb3VyY2VzIjpbIi4uL3NyYy9saWIvUmVzdFNlcnZpY2UuanMiXSwic291cmNlc0NvbnRlbnQiOlsi77u/aW1wb3J0IFV0aWxzIGZyb20gJy4vVXRpbHMnO1xuaW1wb3J0IHt0cmFja1Byb21pc2V9IGZyb20gJ3JlYWN0LXByb21pc2UtdHJhY2tlcic7XG5pbXBvcnQgYXBwbGljYXRpb25NYW5hZ2VyIGZyb20gJy4vQXBwbGljYXRpb25NYW5hZ2VyJztcbmltcG9ydCBFdmVudCBmcm9tICcuL2V2ZW50L0V2ZW50JztcbmltcG9ydCBldmVudE1hbmFnZXIgZnJvbSAnLi9ldmVudC9PYnNlcnZhYmxlJztcbmltcG9ydCBFdmVudFR5cGUgZnJvbSAnLi9ldmVudC9FdmVudFR5cGUnO1xuaW1wb3J0IHtpbnN0YW5jZU9mfSBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IHtkb3dubG9hZCwgcG9zdERhdGEsIHNlbmRSZXF1ZXN0fSBmcm9tIFwiLi9SZXN0VXRpbHNcIjtcblxuZXhwb3J0IGNvbnN0IGxvY2F0aW9uID0gd2luZG93LmxvY2F0aW9uLnByb3RvY29sICsgJy8vJyArIHdpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZTtcbmNvbnN0IHN0YXR1cyA9IChyZXNwb25zZSkgPT4ge1xuICAgIGlmIChyZXNwb25zZS5vaykge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHJlc3BvbnNlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QocmVzcG9uc2UpO1xuICAgIH1cbn07XG5cbmNvbnN0IGpzb24gPSAocmVzcG9uc2UpID0+IHtcbiAgICByZXR1cm4gcmVzcG9uc2UudGV4dCgpO1xufTtcblxuY2xhc3MgUmVzdFNlcnZpY2Uge1xuICAgIGlzUGFyYW1WYWx1ZU51bGwocGFyYW1WYWx1ZSkge1xuICAgICAgICBpZiAoVXRpbHMuaXNOdWxsKHBhcmFtVmFsdWUpKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBwYXJhbVZhbHVlLmhhc093blByb3BlcnR5KCd2YWx1ZScpID8gVXRpbHMuaXNOdWxsKHBhcmFtVmFsdWUudmFsdWUpIDogZmFsc2U7XG4gICAgfVxuXG4gICAgaW52b2tlUmVzdChyZXF1ZXN0KSB7XG4gICAgICAgIGxldCBzZXJ2aWNlID0gcmVxdWVzdC5zZXJ2aWNlO1xuICAgICAgICBsZXQgdXJsID0gc2VydmljZS51cmwuc3RhcnRzV2l0aCgnaHR0cDovLycpIHx8IHNlcnZpY2UudXJsLnN0YXJ0c1dpdGgoJ2h0dHBzOi8vJykgP1xuICAgICAgICAgICAgc2VydmljZS51cmwgOiBsb2NhdGlvbiArIGAke2FwcGxpY2F0aW9uTWFuYWdlci5nZXRDb250ZXh0Um9vdCgpICsgc2VydmljZS51cmx9YDtcbiAgICAgICAgbGV0IHJlcXVlc3RCb2R5ID0gbnVsbDtcbiAgICAgICAgbGV0IGhlYWRlcnMgPSBzZXJ2aWNlLmhlYWRlcnM7XG5cbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIGlmICghVXRpbHMuaXNOdWxsKHNlcnZpY2UucGFyYW1ldGVycykpIHtcbiAgICAgICAgICAgICAgICBsZXQgcXVlcnlTdHJpbmcgPSAnJztcbiAgICAgICAgICAgICAgICBsZXQgcGF0aFBhcmFtZXRlcnMgPSAnJztcbiAgICAgICAgICAgICAgICBsZXQgcmVxdWVzdEJvZHlQYXJhbUZvdW5kID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBwYXJhbWV0ZXIgb2Ygc2VydmljZS5wYXJhbWV0ZXJzKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBwYXJhbWV0ZXJWYWx1ZSA9IGFwcGxpY2F0aW9uTWFuYWdlci5yZXNvbHZlUGFyYW1ldGVyVmFsdWUocGFyYW1ldGVyLCByZXF1ZXN0LmV2ZW50ID8gcmVxdWVzdC5ldmVudC5kYXRhIDogbnVsbCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghVXRpbHMuaXNOdWxsKHBhcmFtZXRlci52YWxpZGF0b3IpXG4gICAgICAgICAgICAgICAgICAgICAgICAmJiAoKHBhcmFtZXRlci52YWxpZGF0b3IubnVsbGFibGUgJiYgIVV0aWxzLmV2YWx1YXRlQm9vbGVhbkV4cHJlc3Npb24ocGFyYW1ldGVyLnZhbGlkYXRvci5udWxsYWJsZSwgcGFyYW1ldGVyLm5hbWUpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICgoVXRpbHMuZXZhbHVhdGVCb29sZWFuRXhwcmVzc2lvbihwYXJhbWV0ZXIudmFsaWRhdG9yLnJlcXVpcmVkICYmIFV0aWxzLmV2YWx1YXRlQm9vbGVhbkV4cHJlc3Npb24ocGFyYW1ldGVyLnZhbGlkYXRvci5yZXF1aXJlZCwgcGFyYW1ldGVyLm5hbWUpKSkpKVxuICAgICAgICAgICAgICAgICAgICAgICAgJiYgdGhpcy5pc1BhcmFtVmFsdWVOdWxsKHBhcmFtZXRlclZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvclR5cGU6ICdJTlZBTElEX1BBUkFNRVRFUicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBsZXQgaHR0cFBhcmFtZXRlclR5cGUgPSBwYXJhbWV0ZXIuaHR0cFBhcmFtZXRlclR5cGU7XG4gICAgICAgICAgICAgICAgICAgIGlmIChVdGlscy5pc051bGwoaHR0cFBhcmFtZXRlclR5cGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBodHRwUGFyYW1ldGVyVHlwZSA9ICdRVUVSWV9QQVJBTUVURVInO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGh0dHBQYXJhbWV0ZXJUeXBlID09PSAnUVVFUllfUEFSQU1FVEVSJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwocGFyYW1ldGVyVmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHF1ZXJ5U3RyaW5nLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVlcnlTdHJpbmcgKz0gJyYnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghVXRpbHMuaXNOdWxsKHNlcnZpY2UuaW5jbHVkZVBhcmFtZXRlclR5cGVzKSAmJiBzZXJ2aWNlLmluY2x1ZGVQYXJhbWV0ZXJUeXBlcyA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWVyeVN0cmluZyArPSBwYXJhbWV0ZXJWYWx1ZS50eXBlICsgJzonO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5U3RyaW5nICs9IHBhcmFtZXRlci5uYW1lICsgJz0nO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5U3RyaW5nICs9ICh0eXBlb2YgcGFyYW1ldGVyVmFsdWUudmFsdWUgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBwYXJhbWV0ZXJWYWx1ZS52YWx1ZSA9PT0gJ251bWJlcicgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJWYWx1ZS52YWx1ZSA6IEpTT04uc3RyaW5naWZ5KHBhcmFtZXRlclZhbHVlLnZhbHVlKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZiAoaHR0cFBhcmFtZXRlclR5cGUgPT09ICdQQVRIX1ZBUklBQkxFJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwocGFyYW1ldGVyVmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHJlc29sdmVkVmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhcmFtZXRlci5lbmNvZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZWRWYWx1ZSA9IHR5cGVvZiBwYXJhbWV0ZXJWYWx1ZS52YWx1ZSA9PT0gJ29iamVjdCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gZW5jb2RlVVJJQ29tcG9uZW50KEpTT04uc3RyaW5naWZ5KHBhcmFtZXRlclZhbHVlLnZhbHVlKSkgOiBwYXJhbWV0ZXJWYWx1ZS5pbnN0YW5jZVR5cGUgPT09ICdUeXBlZFZhbHVlJyA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5jb2RlVVJJQ29tcG9uZW50KHBhcmFtZXRlclZhbHVlLnZhbHVlKSA6IGVuY29kZVVSSUNvbXBvbmVudChwYXJhbWV0ZXJWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZWRWYWx1ZSA9IHR5cGVvZiBwYXJhbWV0ZXJWYWx1ZS52YWx1ZSA9PT0gJ29iamVjdCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gSlNPTi5zdHJpbmdpZnkocGFyYW1ldGVyVmFsdWUudmFsdWUpIDogcGFyYW1ldGVyVmFsdWUuaW5zdGFuY2VUeXBlID09PSAnVHlwZWRWYWx1ZScgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlclZhbHVlLnZhbHVlIDogcGFyYW1ldGVyVmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgdGhlIHBhcmFtZXRlciBoYXMgYSBuYW1lIGFuZCB0aGUgVVJMIGNvbnRhaW5zIHtuYW1lfSwgcmVwbGFjZSB0aGUgcGxhY2Vob2xkZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChwYXJhbWV0ZXIubmFtZSkgJiYgdXJsLmluZGV4T2YoJ3snICsgcGFyYW1ldGVyLm5hbWUgKyAnfScpID49IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsID0gdXJsLnJlcGxhY2UoJ3snICsgcGFyYW1ldGVyLm5hbWUgKyAnfScsIHJlc29sdmVkVmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEJhY2t3YXJkIGNvbXBhdGliaWxpdHk6IGFwcGVuZCB0byBlbmQgb2YgVVJMXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGhQYXJhbWV0ZXJzICs9ICcvJyArIHJlc29sdmVkVmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGh0dHBQYXJhbWV0ZXJUeXBlID09PSAnSEVBREVSJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwocGFyYW1ldGVyVmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFoZWFkZXJzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnMgPSB7fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnNbcGFyYW1ldGVyLm5hbWVdID0gcGFyYW1ldGVyVmFsdWUudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZiAoaHR0cFBhcmFtZXRlclR5cGUgPT09ICdSRVFVRVNUX0JPRFknKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVxdWVzdEJvZHlQYXJhbUZvdW5kKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihcIk9ubHkgb25lIHJlcXVlc3QgYm9keSBpcyBwZXJtaXR0ZWRcIikpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIE1hcmsgdGhlIHNsb3QgYXMgdGFrZW4gcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRoZSB2YWx1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gaXMgbnVsbC4gQSBzZWNvbmQgUkVRVUVTVF9CT0RZIHBhcmFtIGlzIGEgY29uZmlnIGJ1Z1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZWl0aGVyIHdheSwgYW5kIHdlIHdhbnQgaXQgdG8gc3VyZmFjZSBsb3VkbHkuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0Qm9keVBhcmFtRm91bmQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmlzUGFyYW1WYWx1ZU51bGwocGFyYW1ldGVyVmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdEJvZHkgPSBwYXJhbWV0ZXJWYWx1ZS5pbnN0YW5jZVR5cGUgPT09ICdUeXBlZFZhbHVlJyA/IHBhcmFtZXRlclZhbHVlLnZhbHVlIDogcGFyYW1ldGVyVmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAocGF0aFBhcmFtZXRlcnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICB1cmwgKz0gcGF0aFBhcmFtZXRlcnM7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHF1ZXJ5U3RyaW5nLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgdXJsICs9ICc/JztcbiAgICAgICAgICAgICAgICAgICAgdXJsICs9IHF1ZXJ5U3RyaW5nO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGV0IGNvbnRlbnRUeXBlID0gbnVsbDtcblxuICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwoaGVhZGVycykpIHtcbiAgICAgICAgICAgICAgICBjb250ZW50VHlwZSA9IGhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBSZXNvbHZlIHRoZSBIVFRQIG1ldGhvZC4gSG9ub3Igc2VydmljZS5tZXRob2Qgd2hlbiBwcm92aWRlZCBzb1xuICAgICAgICAgICAgLy8gY2FsbGVycyBjYW4gaXNzdWUgREVMRVRFLCBQVVQsIFBBVENIIChub3QganVzdCBHRVQvUE9TVCkuXG4gICAgICAgICAgICAvLyBEZWZhdWx0OiBQT1NUIHdoZW4gYSBib2R5IHdhcyBib3VuZCwgR0VUIG90aGVyd2lzZSDigJQgcHJlc2VydmVzXG4gICAgICAgICAgICAvLyB0aGUgaGlzdG9yaWNhbCBiZWhhdmlvdXIgZm9yIGNhbGxlcnMgdGhhdCBvbWl0IHNlcnZpY2UubWV0aG9kLlxuICAgICAgICAgICAgY29uc3QgbWV0aG9kID0gc2VydmljZS5tZXRob2RcbiAgICAgICAgICAgICAgICA/IHNlcnZpY2UubWV0aG9kLnRvVXBwZXJDYXNlKClcbiAgICAgICAgICAgICAgICA6IChyZXF1ZXN0Qm9keSAhPT0gbnVsbCA/ICdQT1NUJyA6ICdHRVQnKTtcblxuICAgICAgICAgICAgaWYgKHJlcXVlc3RCb2R5ICE9PSBudWxsICYmIG1ldGhvZCA9PT0gJ0dFVCcpIHtcbiAgICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKCdBIHJlcXVlc3QgYm9keSBwYXJhbWV0ZXIgY2Fubm90IGJlIHNwZWNpZmllZCBmb3IgYSBHRVQgcmVxdWVzdCcpKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIERvd25sb2FkIHBhdGggKFBERiAvIEV4Y2VsKSBpcyBHRVQtb25seSBhbmQgdXNlcyBhIHNlcGFyYXRlXG4gICAgICAgICAgICAvLyBmZXRjaCBzaGFwZSAoYmxvYiBoYW5kbGluZyk7IGJyYW5jaCBmaXJzdC5cbiAgICAgICAgICAgIGlmIChtZXRob2QgPT09ICdHRVQnICYmIChjb250ZW50VHlwZSA9PT0gJ2FwcGxpY2F0aW9uL3BkZicgfHwgY29udGVudFR5cGUgPT09ICdhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwnKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZmV0Y2hXaXRoQ3VzdG9tQ29uZmlnKHtcbiAgICAgICAgICAgICAgICAgICAgdmlld0lkOiByZXF1ZXN0LnZpZXdJZCxcbiAgICAgICAgICAgICAgICAgICAgdXJsLFxuICAgICAgICAgICAgICAgICAgICBzZXJ2aWNlVHlwZTogcmVxdWVzdC5zZXJ2aWNlLnR5cGUsXG4gICAgICAgICAgICAgICAgICAgIHNlY3VyZTogcmVxdWVzdC5zZWN1cmUsXG4gICAgICAgICAgICAgICAgICAgIG1ldGhvZDogJ0dFVCcsXG4gICAgICAgICAgICAgICAgICAgIGRvd25sb2FkOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBoZWFkZXJzXG4gICAgICAgICAgICAgICAgfSkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICB9KS5jYXRjaCgoZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZWplY3QoZSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBTaW5nbGUgZGlzcGF0Y2ggZm9yIEdFVCAvIFBPU1QgLyBQVVQgLyBQQVRDSCAvIERFTEVURSAvIGV0Yy5cbiAgICAgICAgICAgIC8vIEJvZHkgaXMgcGFzc2VkIHRocm91Z2g7IHRoZSBmZXRjaCBsYXllciBkcm9wcyBpdCBmb3IgdmVyYnMgdGhhdFxuICAgICAgICAgICAgLy8gZm9yYmlkIG9uZS4gREVMRVRFIHdpdGggYSBib2R5IGlzIHVuY29tbW9uIGJ1dCBwZXJtaXR0ZWQgYnlcbiAgICAgICAgICAgIC8vIEhUVFAg4oCUIHdlIGRvbid0IGJsb2NrIGl0IGhlcmUuXG4gICAgICAgICAgICB0aGlzLmZldGNoV2l0aEN1c3RvbUNvbmZpZyh7XG4gICAgICAgICAgICAgICAgdmlld0lkOiByZXF1ZXN0LnZpZXdJZCxcbiAgICAgICAgICAgICAgICB1cmwsXG4gICAgICAgICAgICAgICAgc2VydmljZVR5cGU6IHJlcXVlc3Quc2VydmljZS50eXBlLFxuICAgICAgICAgICAgICAgIG1ldGhvZCxcbiAgICAgICAgICAgICAgICBzZWN1cmU6ICFzZXJ2aWNlLnVybC5zdGFydHNXaXRoKCdodHRwOi8vJyksXG4gICAgICAgICAgICAgICAgYm9keTogcmVxdWVzdEJvZHksXG4gICAgICAgICAgICAgICAgaGVhZGVyc1xuICAgICAgICAgICAgfSkudGhlbigocmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgcGF0aCA9IFV0aWxzLmdldFByb3BlcnR5Q2hhaW5QYXRoKHJlcXVlc3QucmV0dXJuVmFsdWVCaW5kaW5nKTtcbiAgICAgICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChwYXRoLnZhbHVlT2JqZWN0KSAmJiAhVXRpbHMuaXNOdWxsKHBhdGgucHJvcGVydHkpKSB7XG4gICAgICAgICAgICAgICAgICAgIHBhdGgudmFsdWVPYmplY3RbcGF0aC5wcm9wZXJ0eV0gPSByZXNwb25zZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXNvbHZlKHRoaXMucHJvY2Vzc1N1Y2Nlc3NmdWxSZXNwb25zZURhdGEocmVxdWVzdC5jb21wb25lbnQsIHJlc3BvbnNlLCByZXF1ZXN0LnZpZXdJZCwgcmVxdWVzdC5zdWNjZXNzTWVzc2FnZSkpO1xuICAgICAgICAgICAgfSkuY2F0Y2goKGUpID0+IHtcbiAgICAgICAgICAgICAgICByZWplY3QoZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgaW52b2tlUnBjKHJlcXVlc3QpIHtcbiAgICAgICAgbGV0IHJwY1JlcXVlc3QgPSB7fTtcbiAgICAgICAgcnBjUmVxdWVzdC5pZCA9IHJlcXVlc3Qudmlld0lkO1xuXG4gICAgICAgIGxldCBzcGxpdCA9IHJlcXVlc3Quc2VydmljZS5zZXJ2aWNlSWQuc3BsaXQoJy4nKTtcbiAgICAgICAgcnBjUmVxdWVzdC5zZXJ2aWNlID0gc3BsaXRbMV07XG4gICAgICAgIHJwY1JlcXVlc3QubWV0aG9kID0gcmVxdWVzdC5zZXJ2aWNlLnByb2NlZHVyZU5hbWU7XG5cbiAgICAgICAgbGV0IG1vZHVsZSA9IHNwbGl0WzBdLnRvTG93ZXJDYXNlKCk7XG5cbiAgICAgICAgbGV0IGhlYWRlcnMgPSB7fTtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIGlmICghVXRpbHMuaXNOdWxsKHJlcXVlc3Quc2VydmljZS5wYXJhbWV0ZXJzKSAmJiByZXF1ZXN0LnNlcnZpY2UucGFyYW1ldGVycy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgcnBjUmVxdWVzdC5wYXJhbWV0ZXJzID0gW107XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByZXF1ZXN0LnNlcnZpY2UucGFyYW1ldGVycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBsZXQgcGFyYW1ldGVyQ29uZmlnID0gcmVxdWVzdC5zZXJ2aWNlLnBhcmFtZXRlcnNbaV07XG4gICAgICAgICAgICAgICAgICAgIGxldCBwYXJhbWV0ZXIgPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyLm5hbWUgPSBwYXJhbWV0ZXJDb25maWcubmFtZTtcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyLmluZGV4ID0gcGFyYW1ldGVyQ29uZmlnLmluZGV4O1xuXG4gICAgICAgICAgICAgICAgICAgIGxldCB2YWwgPSBhcHBsaWNhdGlvbk1hbmFnZXIucmVzb2x2ZVBhcmFtZXRlclZhbHVlKHBhcmFtZXRlckNvbmZpZywgcmVxdWVzdC5ldmVudCA/IHJlcXVlc3QuZXZlbnQuZGF0YSA6IG51bGwpO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmICghVXRpbHMuaXNOdWxsKHZhbCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlci52YWx1ZSA9IHZhbC52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlci50eXBlID0gdmFsLnR5cGU7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHBhcmFtZXRlci52YWx1ZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlci52YWx1ZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZiAoVXRpbHMuaXNOdWxsKHBhcmFtZXRlci50eXBlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyLnR5cGUgPSAnU3RyaW5nJztcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmICghVXRpbHMuaXNOdWxsKHBhcmFtZXRlci52YWxpZGF0b3IpXG4gICAgICAgICAgICAgICAgICAgICAgICAmJiAoKHBhcmFtZXRlci52YWxpZGF0b3IubnVsbGFibGUgJiYgIVV0aWxzLmV2YWx1YXRlQm9vbGVhbkV4cHJlc3Npb24ocGFyYW1ldGVyLnZhbGlkYXRvci5udWxsYWJsZSwgcGFyYW1ldGVyLm5hbWUpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICgoVXRpbHMuZXZhbHVhdGVCb29sZWFuRXhwcmVzc2lvbihwYXJhbWV0ZXIudmFsaWRhdG9yLnJlcXVpcmVkICYmIFV0aWxzLmV2YWx1YXRlQm9vbGVhbkV4cHJlc3Npb24ocGFyYW1ldGVyLnZhbGlkYXRvci5yZXF1aXJlZCwgcGFyYW1ldGVyLm5hbWUpKSkpKVxuICAgICAgICAgICAgICAgICAgICAgICAgJiYgdGhpcy5pc1BhcmFtVmFsdWVOdWxsKHBhcmFtZXRlci52YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JUeXBlOiAnSU5WQUxJRF9QQVJBTUVURVInLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlclxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHBhcmFtZXRlckNvbmZpZy5odHRwUGFyYW1ldGVyVHlwZSA9PT0gJ0hFQURFUicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghVXRpbHMuaXNOdWxsKHBhcmFtZXRlci52YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWhlYWRlcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVycyA9IHt9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyc1twYXJhbWV0ZXIubmFtZV0gPSBwYXJhbWV0ZXIudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBycGNSZXF1ZXN0LnBhcmFtZXRlcnMucHVzaChwYXJhbWV0ZXIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmZldGNoV2l0aEN1c3RvbUNvbmZpZyh7XG4gICAgICAgICAgICAgICAgdmlld0lkOiByZXF1ZXN0LnZpZXdJZCxcbiAgICAgICAgICAgICAgICB1cmw6IGxvY2F0aW9uICsgYXBwbGljYXRpb25NYW5hZ2VyLmdldENvbnRleHRSb290KCkgKyAnLycgKyBtb2R1bGUgKyAnL2FwaS92MS9ycGMvaW52b2tlJyxcbiAgICAgICAgICAgICAgICBzZXJ2aWNlVHlwZTogcmVxdWVzdC5zZXJ2aWNlLnR5cGUsXG4gICAgICAgICAgICAgICAgc2VjdXJlOiB0cnVlLFxuICAgICAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICAgICAgICAgIGJvZHk6IHJwY1JlcXVlc3QsXG4gICAgICAgICAgICAgICAgdHJhY2s6IHRydWUsXG4gICAgICAgICAgICAgICAgY29udGVudFR5cGU6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgICAgICAgICBoZWFkZXJzXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC50aGVuKChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVxdWVzdC5yZXR1cm5WYWx1ZUJpbmRpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBwYXRoID0gVXRpbHMuZ2V0UHJvcGVydHlDaGFpblBhdGgocmVxdWVzdC5yZXR1cm5WYWx1ZUJpbmRpbmcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwocGF0aC52YWx1ZU9iamVjdCkgJiYgIVV0aWxzLmlzTnVsbChwYXRoLnByb3BlcnR5KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGgudmFsdWVPYmplY3RbcGF0aC5wcm9wZXJ0eV0gPSByZXNwb25zZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUodGhpcy5wcm9jZXNzU3VjY2Vzc2Z1bFJlc3BvbnNlRGF0YShyZXF1ZXN0LmNvbXBvbmVudCwgcmVzcG9uc2UsIHJlcXVlc3Qudmlld0lkLCByZXF1ZXN0LnN1Y2Nlc3NNZXNzYWdlKSk7XG4gICAgICAgICAgICAgICAgfSkuY2F0Y2goKGUpID0+IHtcbiAgICAgICAgICAgICAgICByZWplY3QoZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICBmZXRjaFdpdGhDdXN0b21Db25maWcocmVxdWVzdCkge1xuICAgICAgICBjb25zdCBhY2Nlc3NUb2tlbiA9IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oJ2FjY2Vzc1Rva2VuJyk7XG4gICAgICAgIGNvbnN0IGlkVG9rZW4gPSBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKCdpZFRva2VuJyk7XG5cbiAgICAgICAgbGV0IGRhdGEgPSByZXF1ZXN0LmJvZHkgPyAocmVxdWVzdC5ib2R5IGluc3RhbmNlb2YgRm9ybURhdGEpID8gcmVxdWVzdC5ib2R5IDogSlNPTi5zdHJpbmdpZnkocmVxdWVzdC5ib2R5KSA6IG51bGw7XG4gICAgICAgIGxldCBmZXRjaENvbmZpZyA9IHJlcXVlc3QuY29uZmlnO1xuXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICBpZiAoVXRpbHMuaXNOdWxsKGZldGNoQ29uZmlnKSkge1xuICAgICAgICAgICAgICAgIGlmIChVdGlscy5pc051bGwocmVxdWVzdC5zZWN1cmUpIHx8IHJlcXVlc3Quc2VjdXJlID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgIGZldGNoQ29uZmlnID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiBVdGlscy5pc051bGwocmVxdWVzdC5tZXRob2QpID8gJ0dFVCcgOiByZXF1ZXN0Lm1ldGhvZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5yZXF1ZXN0LmhlYWRlcnMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6IHJlcXVlc3QuY29udGVudFR5cGUgPyByZXF1ZXN0LmNvbnRlbnRUeXBlIDogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0F1dGhvcml6YXRpb24nOiAnQmVhcmVyICcgKyBhY2Nlc3NUb2tlbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaWRUb2tlbic6IGlkVG9rZW5cblxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvZHk6IGRhdGFcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBmZXRjaENvbmZpZyA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZDogVXRpbHMuaXNOdWxsKHJlcXVlc3QubWV0aG9kKSA/ICdHRVQnIDogcmVxdWVzdC5tZXRob2QsXG4gICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4ucmVxdWVzdC5oZWFkZXJzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiByZXF1ZXN0LmNvbnRlbnRUeXBlID8gcmVxdWVzdC5jb250ZW50VHlwZSA6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQWNjZXB0JzogcmVxdWVzdC5hY2NlcHQgPyByZXF1ZXN0LmFjY2VwdCA6ICdhcHBsaWNhdGlvbi9qc29uJ1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvZHk6IGRhdGFcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoJ3Jlc3QnID09PSByZXF1ZXN0LnNlcnZpY2VUeXBlICYmICEocmVxdWVzdC5ib2R5IGluc3RhbmNlb2YgRm9ybURhdGEpKSB7XG4gICAgICAgICAgICAgICAgICAgIGZldGNoQ29uZmlnLmhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddID0gcmVxdWVzdC5jb250ZW50VHlwZSA/IHJlcXVlc3QuY29udGVudFR5cGUgOiAnYXBwbGljYXRpb24vanNvbjsgY2hhcnNldD11dGYtOCc7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKChyZXF1ZXN0LmJvZHkgaW5zdGFuY2VvZiBGb3JtRGF0YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGZldGNoQ29uZmlnLmhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddO1xuICAgICAgICAgICAgICAgICAgICBmZXRjaENvbmZpZy5oZWFkZXJzWydBY2NlcHQnXSA9IHJlcXVlc3QuYWNjZXB0ID8gcmVxdWVzdC5hY2NlcHQgOiAnYXBwbGljYXRpb24vanNvbic7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAocmVxdWVzdC5jb250ZW50VHlwZSkge1xuICAgICAgICAgICAgICAgIGZldGNoQ29uZmlnLmhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddID0gcmVxdWVzdC5jb250ZW50VHlwZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGV0IHVybCA9IHJlcXVlc3QudXJsO1xuICAgICAgICAgICAgaWYgKHJlcXVlc3QuZG93bmxvYWQpIHtcbiAgICAgICAgICAgICAgICBpZiAodXJsLmluZGV4T2YoJz8nKSA8IDApIHtcbiAgICAgICAgICAgICAgICAgICAgdXJsICs9ICc/JztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB1cmwgKz0gJyYnO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8vdXJsICs9ICdhY2Nlc3NfdG9rZW49JyArIGFjY2Vzc1Rva2VuO1xuICAgICAgICAgICAgICAgIC8vdXJsICs9ICcmaWRUb2tlbj0nICsgaWRUb2tlbjtcbiAgICAgICAgICAgICAgICB1cmwgKz0gJyZ0aGVtZVByaW1hcnlDb2xvcj0nICsgZW5jb2RlVVJJQ29tcG9uZW50KGFwcGxpY2F0aW9uTWFuYWdlci5nZXRBcHBsaWNhdGlvblByaW1hcnlDb2xvcigpKTtcbiAgICAgICAgICAgICAgICB1cmwgKz0gJyZ0aGVtZVNlY29uZGFyeUNvbG9yPScgKyBlbmNvZGVVUklDb21wb25lbnQoYXBwbGljYXRpb25NYW5hZ2VyLmdldEFwcGxpY2F0aW9uU2Vjb25kYXJ5Q29sb3IoKSk7XG5cbiAgICAgICAgICAgICAgICBmZXRjaCh1cmwsIHtcbiAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiBcIkdFVFwiLFxuICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5yZXF1ZXN0LmhlYWRlcnMsXG4gICAgICAgICAgICAgICAgICAgICAgICAnQXV0aG9yaXphdGlvbic6ICdCZWFyZXIgJyArIGFjY2Vzc1Rva2VuLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2lkVG9rZW4nOiBpZFRva2VuXG5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIC50aGVuKHJlc3BvbnNlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2UuanNvbigpLnRoZW4oZXJyb3JEYXRhID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBFcnJvciAke3Jlc3BvbnNlLnN0YXR1c306ICR7ZXJyb3JEYXRhLm1lc3NhZ2UgfHwgcmVzcG9uc2Uuc3RhdHVzVGV4dH1gKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNvbnRlbnREaXNwb3NpdGlvbiA9IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KFwiQ29udGVudC1EaXNwb3NpdGlvblwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBmaWxlbmFtZSA9IFwiZG93bmxvYWRlZC1maWxlXCI7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb250ZW50RGlzcG9zaXRpb24gJiYgY29udGVudERpc3Bvc2l0aW9uLmluY2x1ZGVzKFwiZmlsZW5hbWU9XCIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZW5hbWUgPSBjb250ZW50RGlzcG9zaXRpb24uc3BsaXQoXCJmaWxlbmFtZT1cIilbMV0udHJpbSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVuYW1lID0gZmlsZW5hbWUucmVwbGFjZSgvW1wiJ10vZywgXCJcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZS5ibG9iKCkudGhlbihibG9iID0+ICh7YmxvYiwgZmlsZW5hbWV9KSk7XG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIC50aGVuKCh7YmxvYiwgZmlsZW5hbWV9KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1cmwgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJhXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYS5ocmVmID0gdXJsO1xuICAgICAgICAgICAgICAgICAgICAgICAgYS5kb3dubG9hZCA9IGZpbGVuYW1lO1xuICAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGEuY2xpY2soKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoYSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBVUkwucmV2b2tlT2JqZWN0VVJMKHVybCk7XG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIC5jYXRjaChlcnJvciA9PiBjb25zb2xlLmVycm9yKFwiRG93bmxvYWQgZmFpbGVkOlwiLCBlcnJvcikpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoVXRpbHMuaXNOdWxsKHJlcXVlc3QudHJhY2spIHx8IHJlcXVlc3QudHJhY2sgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgdHJhY2tQcm9taXNlKFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5leGVjdXRlRmV0Y2godXJsLCBmZXRjaENvbmZpZywgcmVxdWVzdC52aWV3SWQsIHJlcXVlc3Quc3VjY2Vzc01lc3NhZ2UpLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShyZXNwb25zZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KS5jYXRjaCgoZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5leGVjdXRlRmV0Y2godXJsLCBmZXRjaENvbmZpZywgcmVxdWVzdC52aWV3SWQsIHJlcXVlc3Quc3VjY2Vzc01lc3NhZ2UpLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHJlc3BvbnNlKTtcbiAgICAgICAgICAgICAgICAgICAgfSkuY2F0Y2goKGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChlKTtcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgZXhlY3V0ZUZldGNoKHVybCwgZmV0Y2hDb25maWcsIHZpZXdJZCwgc3VjY2Vzc01lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIGZldGNoKGVuY29kZVVSSSh1cmwpLCBmZXRjaENvbmZpZylcbiAgICAgICAgICAgICAgICAudGhlbihzdGF0dXMpXG4gICAgICAgICAgICAgICAgLnRoZW4oanNvbilcbiAgICAgICAgICAgICAgICAudGhlbigoZGF0YSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHRoaXMucHJvY2Vzc1N1Y2Nlc3NmdWxSZXNwb25zZURhdGEobnVsbCwgZGF0YSwgdmlld0lkLCBzdWNjZXNzTWVzc2FnZSkpO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLmNhdGNoKChlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlLnN0YXR1cyA9PT0gNDAxICYmICF1cmwuZW5kc1dpdGgoJy9sb2dvdXQnKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXBwbGljYXRpb25NYW5hZ2VyLmNsZWFyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcHBsaWNhdGlvbk1hbmFnZXIubmF2aWdhdGUoJy9sb2dpbicpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICB9KVxuICAgIH1cblxuICAgIHByb2Nlc3NTdWNjZXNzZnVsUmVzcG9uc2VEYXRhKGNvbXBvbmVudCwgZGF0YSwgdmlld0lkLCBzdWNjZXNzTWVzc2FnZSkge1xuICAgICAgICBsZXQgcmVzcG9uc2U7XG5cbiAgICAgICAgaWYgKHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyB8fCBVdGlscy5pc051bGwoZGF0YSkgfHwgZGF0YS50b1N0cmluZygpXG4gICAgICAgICAgICAudHJpbSgpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmVzcG9uc2UgPSBkYXRhO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICByZXNwb25zZSA9IEpTT04ucGFyc2UoZGF0YSk7XG4gICAgICAgICAgICB9IGNhdGNoIChpZ25vcmVkKSB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2UgPSBkYXRhO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLmRhdGFUeXBlID09PSAnbWVzc2FnZScpIHtcbiAgICAgICAgICAgIGxldCBldmVudCA9IG5ldyBFdmVudChhcHBsaWNhdGlvbk1hbmFnZXIsIHZpZXdJZCwgcmVzcG9uc2UpO1xuICAgICAgICAgICAgZXZlbnRNYW5hZ2VyLmZpcmVFdmVudChFdmVudFR5cGUuTUVTU0FHRV9BUlJJVkVELCBldmVudCk7XG5cbiAgICAgICAgICAgIGlmIChjb21wb25lbnQgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBldmVudCA9IG5ldyBFdmVudChjb21wb25lbnQsIHZpZXdJZCwgcmVzcG9uc2UpO1xuICAgICAgICAgICAgICAgIGV2ZW50TWFuYWdlci5maXJlRXZlbnQoRXZlbnRUeXBlLk1FU1NBR0VfQVJSSVZFRCwgZXZlbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKCFVdGlscy5pc051bGwoc3VjY2Vzc01lc3NhZ2UpKSB7XG4gICAgICAgICAgICBsZXQgbWVzc2FnZSA9IHtcbiAgICAgICAgICAgICAgICBtZXNzYWdlVHlwZTogJ1NVQ0NFU1MnLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGFwcGxpY2F0aW9uTWFuYWdlci5wb3B1bGF0ZVRlbXBsYXRlKHN1Y2Nlc3NNZXNzYWdlLCByZXNwb25zZSlcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGxldCBldmVudCA9IG5ldyBFdmVudChhcHBsaWNhdGlvbk1hbmFnZXIsIHZpZXdJZCwgbWVzc2FnZSk7XG4gICAgICAgICAgICBldmVudE1hbmFnZXIuZmlyZUV2ZW50KEV2ZW50VHlwZS5NRVNTQUdFX0FSUklWRUQsIGV2ZW50KTtcblxuICAgICAgICAgICAgaWYgKGNvbXBvbmVudCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGV2ZW50ID0gbmV3IEV2ZW50KGNvbXBvbmVudCwgdmlld0lkLCBtZXNzYWdlKTtcbiAgICAgICAgICAgICAgICBldmVudE1hbmFnZXIuZmlyZUV2ZW50KEV2ZW50VHlwZS5NRVNTQUdFX0FSUklWRUQsIGV2ZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICB9XG59XG5cbmNvbnN0IGluc3RhbmNlID0gbmV3IFJlc3RTZXJ2aWNlKCk7XG5cbmV4cG9ydCBjb25zdCBpbnZva2VScGMgPSAocmVxdWVzdCkgPT4ge1xuICAgIHJldHVybiBpbnN0YW5jZS5pbnZva2VScGMocmVxdWVzdCk7XG59O1xuXG5leHBvcnQgY29uc3QgaW52b2tlUmVzdCA9IChyZXF1ZXN0KSA9PiB7XG4gICAgcmV0dXJuIGluc3RhbmNlLmludm9rZVJlc3QocmVxdWVzdCk7XG59O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQyxJQUFBQSxNQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFDRCxJQUFBQyxvQkFBQSxHQUFBRCxPQUFBO0FBQ0EsSUFBQUUsbUJBQUEsR0FBQUgsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFHLE1BQUEsR0FBQUosc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFJLFdBQUEsR0FBQUwsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFLLFVBQUEsR0FBQU4sc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFNLFVBQUEsR0FBQU4sT0FBQTtBQUNBLElBQUFPLFVBQUEsR0FBQVAsT0FBQTtBQUE0RCxTQUFBRCx1QkFBQVMsQ0FBQSxXQUFBQSxDQUFB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
415
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfVXRpbHMiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9yZWFjdFByb21pc2VUcmFja2VyIiwiX0FwcGxpY2F0aW9uTWFuYWdlciIsIl9FdmVudCIsIl9PYnNlcnZhYmxlIiwiX0V2ZW50VHlwZSIsIl9wcm9wVHlwZXMiLCJfUmVzdFV0aWxzIiwiZSIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0Iiwib3duS2V5cyIsInIiLCJ0IiwiT2JqZWN0Iiwia2V5cyIsImdldE93blByb3BlcnR5U3ltYm9scyIsIm8iLCJmaWx0ZXIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJlbnVtZXJhYmxlIiwicHVzaCIsImFwcGx5IiwiX29iamVjdFNwcmVhZCIsImFyZ3VtZW50cyIsImxlbmd0aCIsImZvckVhY2giLCJfZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwiZGVmaW5lUHJvcGVydGllcyIsImRlZmluZVByb3BlcnR5IiwiX3RvUHJvcGVydHlLZXkiLCJ2YWx1ZSIsImNvbmZpZ3VyYWJsZSIsIndyaXRhYmxlIiwiaSIsIl90b1ByaW1pdGl2ZSIsIlN5bWJvbCIsInRvUHJpbWl0aXZlIiwiY2FsbCIsIlR5cGVFcnJvciIsIlN0cmluZyIsIk51bWJlciIsImxvY2F0aW9uIiwiZXhwb3J0cyIsIndpbmRvdyIsInByb3RvY29sIiwiaG9zdG5hbWUiLCJzdGF0dXMiLCJyZXNwb25zZSIsIm9rIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJqc29uIiwidGV4dCIsIlJlc3RTZXJ2aWNlIiwiaXNQYXJhbVZhbHVlTnVsbCIsInBhcmFtVmFsdWUiLCJVdGlscyIsImlzTnVsbCIsImhhc093blByb3BlcnR5IiwiaW52b2tlUmVzdCIsInJlcXVlc3QiLCJzZXJ2aWNlIiwidXJsIiwic3RhcnRzV2l0aCIsImNvbmNhdCIsImFwcGxpY2F0aW9uTWFuYWdlciIsImdldENvbnRleHRSb290IiwicmVxdWVzdEJvZHkiLCJoZWFkZXJzIiwicGFyYW1ldGVycyIsInF1ZXJ5U3RyaW5nIiwicGF0aFBhcmFtZXRlcnMiLCJyZXF1ZXN0Qm9keVBhcmFtRm91bmQiLCJwYXJhbWV0ZXIiLCJwYXJhbWV0ZXJWYWx1ZSIsInJlc29sdmVQYXJhbWV0ZXJWYWx1ZSIsImV2ZW50IiwiZGF0YSIsInZhbGlkYXRvciIsIm51bGxhYmxlIiwiZXZhbHVhdGVCb29sZWFuRXhwcmVzc2lvbiIsIm5hbWUiLCJyZXF1aXJlZCIsImVycm9yVHlwZSIsImh0dHBQYXJhbWV0ZXJUeXBlIiwiaW5jbHVkZVBhcmFtZXRlclR5cGVzIiwidHlwZSIsIkpTT04iLCJzdHJpbmdpZnkiLCJyZXNvbHZlZFZhbHVlIiwiZW5jb2RlIiwiZW5jb2RlVVJJQ29tcG9uZW50IiwiaW5zdGFuY2VUeXBlIiwiaW5kZXhPZiIsInJlcGxhY2UiLCJFcnJvciIsImNvbnRlbnRUeXBlIiwibWV0aG9kIiwidG9VcHBlckNhc2UiLCJmZXRjaFdpdGhDdXN0b21Db25maWciLCJ2aWV3SWQiLCJzZXJ2aWNlVHlwZSIsInNlY3VyZSIsImRvd25sb2FkIiwidGhlbiIsImNhdGNoIiwiaXNQdWJsaWNSZWdpc3RyYXRpb24iLCJ0ZXN0IiwiYm9keSIsInRyYWNrIiwicGF0aCIsImdldFByb3BlcnR5Q2hhaW5QYXRoIiwicmV0dXJuVmFsdWVCaW5kaW5nIiwidmFsdWVPYmplY3QiLCJwcm9wZXJ0eSIsInByb2Nlc3NTdWNjZXNzZnVsUmVzcG9uc2VEYXRhIiwiY29tcG9uZW50Iiwic3VjY2Vzc01lc3NhZ2UiLCJpbnZva2VScGMiLCJycGNSZXF1ZXN0IiwiaWQiLCJzcGxpdCIsInNlcnZpY2VJZCIsInByb2NlZHVyZU5hbWUiLCJtb2R1bGUiLCJ0b0xvd2VyQ2FzZSIsInBhcmFtZXRlckNvbmZpZyIsImluZGV4IiwidmFsIiwiYWNjZXNzVG9rZW4iLCJzZXNzaW9uU3RvcmFnZSIsImdldEl0ZW0iLCJpZFRva2VuIiwiRm9ybURhdGEiLCJmZXRjaENvbmZpZyIsImNvbmZpZyIsImFjY2VwdCIsImdldEFwcGxpY2F0aW9uUHJpbWFyeUNvbG9yIiwiZ2V0QXBwbGljYXRpb25TZWNvbmRhcnlDb2xvciIsImZldGNoIiwiZXJyb3JEYXRhIiwibWVzc2FnZSIsInN0YXR1c1RleHQiLCJjb250ZW50RGlzcG9zaXRpb24iLCJnZXQiLCJmaWxlbmFtZSIsImluY2x1ZGVzIiwidHJpbSIsImJsb2IiLCJfcmVmIiwiVVJMIiwiY3JlYXRlT2JqZWN0VVJMIiwiYSIsImRvY3VtZW50IiwiY3JlYXRlRWxlbWVudCIsImhyZWYiLCJhcHBlbmRDaGlsZCIsImNsaWNrIiwicmVtb3ZlQ2hpbGQiLCJyZXZva2VPYmplY3RVUkwiLCJlcnJvciIsImNvbnNvbGUiLCJ0cmFja1Byb21pc2UiLCJleGVjdXRlRmV0Y2giLCJlbmNvZGVVUkkiLCJlbmRzV2l0aCIsImNsZWFyIiwibmF2aWdhdGUiLCJ0b1N0cmluZyIsInBhcnNlIiwiaWdub3JlZCIsImRhdGFUeXBlIiwiRXZlbnQiLCJldmVudE1hbmFnZXIiLCJmaXJlRXZlbnQiLCJFdmVudFR5cGUiLCJNRVNTQUdFX0FSUklWRUQiLCJtZXNzYWdlVHlwZSIsInBvcHVsYXRlVGVtcGxhdGUiLCJpbnN0YW5jZSJdLCJzb3VyY2VzIjpbIi4uL3NyYy9saWIvUmVzdFNlcnZpY2UuanMiXSwic291cmNlc0NvbnRlbnQiOlsi77u/aW1wb3J0IFV0aWxzIGZyb20gJy4vVXRpbHMnO1xuaW1wb3J0IHt0cmFja1Byb21pc2V9IGZyb20gJ3JlYWN0LXByb21pc2UtdHJhY2tlcic7XG5pbXBvcnQgYXBwbGljYXRpb25NYW5hZ2VyIGZyb20gJy4vQXBwbGljYXRpb25NYW5hZ2VyJztcbmltcG9ydCBFdmVudCBmcm9tICcuL2V2ZW50L0V2ZW50JztcbmltcG9ydCBldmVudE1hbmFnZXIgZnJvbSAnLi9ldmVudC9PYnNlcnZhYmxlJztcbmltcG9ydCBFdmVudFR5cGUgZnJvbSAnLi9ldmVudC9FdmVudFR5cGUnO1xuaW1wb3J0IHtpbnN0YW5jZU9mfSBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IHtkb3dubG9hZCwgcG9zdERhdGEsIHNlbmRSZXF1ZXN0fSBmcm9tIFwiLi9SZXN0VXRpbHNcIjtcblxuZXhwb3J0IGNvbnN0IGxvY2F0aW9uID0gd2luZG93LmxvY2F0aW9uLnByb3RvY29sICsgJy8vJyArIHdpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZTtcbmNvbnN0IHN0YXR1cyA9IChyZXNwb25zZSkgPT4ge1xuICAgIGlmIChyZXNwb25zZS5vaykge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHJlc3BvbnNlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QocmVzcG9uc2UpO1xuICAgIH1cbn07XG5cbmNvbnN0IGpzb24gPSAocmVzcG9uc2UpID0+IHtcbiAgICByZXR1cm4gcmVzcG9uc2UudGV4dCgpO1xufTtcblxuY2xhc3MgUmVzdFNlcnZpY2Uge1xuICAgIGlzUGFyYW1WYWx1ZU51bGwocGFyYW1WYWx1ZSkge1xuICAgICAgICBpZiAoVXRpbHMuaXNOdWxsKHBhcmFtVmFsdWUpKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBwYXJhbVZhbHVlLmhhc093blByb3BlcnR5KCd2YWx1ZScpID8gVXRpbHMuaXNOdWxsKHBhcmFtVmFsdWUudmFsdWUpIDogZmFsc2U7XG4gICAgfVxuXG4gICAgaW52b2tlUmVzdChyZXF1ZXN0KSB7XG4gICAgICAgIGxldCBzZXJ2aWNlID0gcmVxdWVzdC5zZXJ2aWNlO1xuICAgICAgICBsZXQgdXJsID0gc2VydmljZS51cmwuc3RhcnRzV2l0aCgnaHR0cDovLycpIHx8IHNlcnZpY2UudXJsLnN0YXJ0c1dpdGgoJ2h0dHBzOi8vJykgP1xuICAgICAgICAgICAgc2VydmljZS51cmwgOiBsb2NhdGlvbiArIGAke2FwcGxpY2F0aW9uTWFuYWdlci5nZXRDb250ZXh0Um9vdCgpICsgc2VydmljZS51cmx9YDtcbiAgICAgICAgbGV0IHJlcXVlc3RCb2R5ID0gbnVsbDtcbiAgICAgICAgbGV0IGhlYWRlcnMgPSBzZXJ2aWNlLmhlYWRlcnM7XG5cbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIGlmICghVXRpbHMuaXNOdWxsKHNlcnZpY2UucGFyYW1ldGVycykpIHtcbiAgICAgICAgICAgICAgICBsZXQgcXVlcnlTdHJpbmcgPSAnJztcbiAgICAgICAgICAgICAgICBsZXQgcGF0aFBhcmFtZXRlcnMgPSAnJztcbiAgICAgICAgICAgICAgICBsZXQgcmVxdWVzdEJvZHlQYXJhbUZvdW5kID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBwYXJhbWV0ZXIgb2Ygc2VydmljZS5wYXJhbWV0ZXJzKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBwYXJhbWV0ZXJWYWx1ZSA9IGFwcGxpY2F0aW9uTWFuYWdlci5yZXNvbHZlUGFyYW1ldGVyVmFsdWUocGFyYW1ldGVyLCByZXF1ZXN0LmV2ZW50ID8gcmVxdWVzdC5ldmVudC5kYXRhIDogbnVsbCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghVXRpbHMuaXNOdWxsKHBhcmFtZXRlci52YWxpZGF0b3IpXG4gICAgICAgICAgICAgICAgICAgICAgICAmJiAoKHBhcmFtZXRlci52YWxpZGF0b3IubnVsbGFibGUgJiYgIVV0aWxzLmV2YWx1YXRlQm9vbGVhbkV4cHJlc3Npb24ocGFyYW1ldGVyLnZhbGlkYXRvci5udWxsYWJsZSwgcGFyYW1ldGVyLm5hbWUpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICgoVXRpbHMuZXZhbHVhdGVCb29sZWFuRXhwcmVzc2lvbihwYXJhbWV0ZXIudmFsaWRhdG9yLnJlcXVpcmVkICYmIFV0aWxzLmV2YWx1YXRlQm9vbGVhbkV4cHJlc3Npb24ocGFyYW1ldGVyLnZhbGlkYXRvci5yZXF1aXJlZCwgcGFyYW1ldGVyLm5hbWUpKSkpKVxuICAgICAgICAgICAgICAgICAgICAgICAgJiYgdGhpcy5pc1BhcmFtVmFsdWVOdWxsKHBhcmFtZXRlclZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvclR5cGU6ICdJTlZBTElEX1BBUkFNRVRFUicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBsZXQgaHR0cFBhcmFtZXRlclR5cGUgPSBwYXJhbWV0ZXIuaHR0cFBhcmFtZXRlclR5cGU7XG4gICAgICAgICAgICAgICAgICAgIGlmIChVdGlscy5pc051bGwoaHR0cFBhcmFtZXRlclR5cGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBodHRwUGFyYW1ldGVyVHlwZSA9ICdRVUVSWV9QQVJBTUVURVInO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGh0dHBQYXJhbWV0ZXJUeXBlID09PSAnUVVFUllfUEFSQU1FVEVSJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwocGFyYW1ldGVyVmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHF1ZXJ5U3RyaW5nLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVlcnlTdHJpbmcgKz0gJyYnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghVXRpbHMuaXNOdWxsKHNlcnZpY2UuaW5jbHVkZVBhcmFtZXRlclR5cGVzKSAmJiBzZXJ2aWNlLmluY2x1ZGVQYXJhbWV0ZXJUeXBlcyA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWVyeVN0cmluZyArPSBwYXJhbWV0ZXJWYWx1ZS50eXBlICsgJzonO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5U3RyaW5nICs9IHBhcmFtZXRlci5uYW1lICsgJz0nO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5U3RyaW5nICs9ICh0eXBlb2YgcGFyYW1ldGVyVmFsdWUudmFsdWUgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBwYXJhbWV0ZXJWYWx1ZS52YWx1ZSA9PT0gJ251bWJlcicgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJWYWx1ZS52YWx1ZSA6IEpTT04uc3RyaW5naWZ5KHBhcmFtZXRlclZhbHVlLnZhbHVlKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZiAoaHR0cFBhcmFtZXRlclR5cGUgPT09ICdQQVRIX1ZBUklBQkxFJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwocGFyYW1ldGVyVmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHJlc29sdmVkVmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhcmFtZXRlci5lbmNvZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZWRWYWx1ZSA9IHR5cGVvZiBwYXJhbWV0ZXJWYWx1ZS52YWx1ZSA9PT0gJ29iamVjdCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gZW5jb2RlVVJJQ29tcG9uZW50KEpTT04uc3RyaW5naWZ5KHBhcmFtZXRlclZhbHVlLnZhbHVlKSkgOiBwYXJhbWV0ZXJWYWx1ZS5pbnN0YW5jZVR5cGUgPT09ICdUeXBlZFZhbHVlJyA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5jb2RlVVJJQ29tcG9uZW50KHBhcmFtZXRlclZhbHVlLnZhbHVlKSA6IGVuY29kZVVSSUNvbXBvbmVudChwYXJhbWV0ZXJWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZWRWYWx1ZSA9IHR5cGVvZiBwYXJhbWV0ZXJWYWx1ZS52YWx1ZSA9PT0gJ29iamVjdCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gSlNPTi5zdHJpbmdpZnkocGFyYW1ldGVyVmFsdWUudmFsdWUpIDogcGFyYW1ldGVyVmFsdWUuaW5zdGFuY2VUeXBlID09PSAnVHlwZWRWYWx1ZScgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlclZhbHVlLnZhbHVlIDogcGFyYW1ldGVyVmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgdGhlIHBhcmFtZXRlciBoYXMgYSBuYW1lIGFuZCB0aGUgVVJMIGNvbnRhaW5zIHtuYW1lfSwgcmVwbGFjZSB0aGUgcGxhY2Vob2xkZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChwYXJhbWV0ZXIubmFtZSkgJiYgdXJsLmluZGV4T2YoJ3snICsgcGFyYW1ldGVyLm5hbWUgKyAnfScpID49IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsID0gdXJsLnJlcGxhY2UoJ3snICsgcGFyYW1ldGVyLm5hbWUgKyAnfScsIHJlc29sdmVkVmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEJhY2t3YXJkIGNvbXBhdGliaWxpdHk6IGFwcGVuZCB0byBlbmQgb2YgVVJMXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGhQYXJhbWV0ZXJzICs9ICcvJyArIHJlc29sdmVkVmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGh0dHBQYXJhbWV0ZXJUeXBlID09PSAnSEVBREVSJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwocGFyYW1ldGVyVmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFoZWFkZXJzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnMgPSB7fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnNbcGFyYW1ldGVyLm5hbWVdID0gcGFyYW1ldGVyVmFsdWUudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZiAoaHR0cFBhcmFtZXRlclR5cGUgPT09ICdSRVFVRVNUX0JPRFknKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVxdWVzdEJvZHlQYXJhbUZvdW5kKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihcIk9ubHkgb25lIHJlcXVlc3QgYm9keSBpcyBwZXJtaXR0ZWRcIikpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIE1hcmsgdGhlIHNsb3QgYXMgdGFrZW4gcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRoZSB2YWx1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gaXMgbnVsbC4gQSBzZWNvbmQgUkVRVUVTVF9CT0RZIHBhcmFtIGlzIGEgY29uZmlnIGJ1Z1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZWl0aGVyIHdheSwgYW5kIHdlIHdhbnQgaXQgdG8gc3VyZmFjZSBsb3VkbHkuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0Qm9keVBhcmFtRm91bmQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmlzUGFyYW1WYWx1ZU51bGwocGFyYW1ldGVyVmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdEJvZHkgPSBwYXJhbWV0ZXJWYWx1ZS5pbnN0YW5jZVR5cGUgPT09ICdUeXBlZFZhbHVlJyA/IHBhcmFtZXRlclZhbHVlLnZhbHVlIDogcGFyYW1ldGVyVmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAocGF0aFBhcmFtZXRlcnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICB1cmwgKz0gcGF0aFBhcmFtZXRlcnM7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHF1ZXJ5U3RyaW5nLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgdXJsICs9ICc/JztcbiAgICAgICAgICAgICAgICAgICAgdXJsICs9IHF1ZXJ5U3RyaW5nO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGV0IGNvbnRlbnRUeXBlID0gbnVsbDtcblxuICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwoaGVhZGVycykpIHtcbiAgICAgICAgICAgICAgICBjb250ZW50VHlwZSA9IGhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBSZXNvbHZlIHRoZSBIVFRQIG1ldGhvZC4gSG9ub3Igc2VydmljZS5tZXRob2Qgd2hlbiBwcm92aWRlZCBzb1xuICAgICAgICAgICAgLy8gY2FsbGVycyBjYW4gaXNzdWUgREVMRVRFLCBQVVQsIFBBVENIIChub3QganVzdCBHRVQvUE9TVCkuXG4gICAgICAgICAgICAvLyBEZWZhdWx0OiBQT1NUIHdoZW4gYSBib2R5IHdhcyBib3VuZCwgR0VUIG90aGVyd2lzZSDigJQgcHJlc2VydmVzXG4gICAgICAgICAgICAvLyB0aGUgaGlzdG9yaWNhbCBiZWhhdmlvdXIgZm9yIGNhbGxlcnMgdGhhdCBvbWl0IHNlcnZpY2UubWV0aG9kLlxuICAgICAgICAgICAgY29uc3QgbWV0aG9kID0gc2VydmljZS5tZXRob2RcbiAgICAgICAgICAgICAgICA/IHNlcnZpY2UubWV0aG9kLnRvVXBwZXJDYXNlKClcbiAgICAgICAgICAgICAgICA6IChyZXF1ZXN0Qm9keSAhPT0gbnVsbCA/ICdQT1NUJyA6ICdHRVQnKTtcblxuICAgICAgICAgICAgaWYgKHJlcXVlc3RCb2R5ICE9PSBudWxsICYmIG1ldGhvZCA9PT0gJ0dFVCcpIHtcbiAgICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKCdBIHJlcXVlc3QgYm9keSBwYXJhbWV0ZXIgY2Fubm90IGJlIHNwZWNpZmllZCBmb3IgYSBHRVQgcmVxdWVzdCcpKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIERvd25sb2FkIHBhdGggKFBERiAvIEV4Y2VsKSBpcyBHRVQtb25seSBhbmQgdXNlcyBhIHNlcGFyYXRlXG4gICAgICAgICAgICAvLyBmZXRjaCBzaGFwZSAoYmxvYiBoYW5kbGluZyk7IGJyYW5jaCBmaXJzdC5cbiAgICAgICAgICAgIGlmIChtZXRob2QgPT09ICdHRVQnICYmIChjb250ZW50VHlwZSA9PT0gJ2FwcGxpY2F0aW9uL3BkZicgfHwgY29udGVudFR5cGUgPT09ICdhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwnKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZmV0Y2hXaXRoQ3VzdG9tQ29uZmlnKHtcbiAgICAgICAgICAgICAgICAgICAgdmlld0lkOiByZXF1ZXN0LnZpZXdJZCxcbiAgICAgICAgICAgICAgICAgICAgdXJsLFxuICAgICAgICAgICAgICAgICAgICBzZXJ2aWNlVHlwZTogcmVxdWVzdC5zZXJ2aWNlLnR5cGUsXG4gICAgICAgICAgICAgICAgICAgIHNlY3VyZTogcmVxdWVzdC5zZWN1cmUsXG4gICAgICAgICAgICAgICAgICAgIG1ldGhvZDogJ0dFVCcsXG4gICAgICAgICAgICAgICAgICAgIGRvd25sb2FkOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBoZWFkZXJzXG4gICAgICAgICAgICAgICAgfSkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICB9KS5jYXRjaCgoZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZWplY3QoZSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBTaW5nbGUgZGlzcGF0Y2ggZm9yIEdFVCAvIFBPU1QgLyBQVVQgLyBQQVRDSCAvIERFTEVURSAvIGV0Yy5cbiAgICAgICAgICAgIC8vIEJvZHkgaXMgcGFzc2VkIHRocm91Z2g7IHRoZSBmZXRjaCBsYXllciBkcm9wcyBpdCBmb3IgdmVyYnMgdGhhdFxuICAgICAgICAgICAgLy8gZm9yYmlkIG9uZS4gREVMRVRFIHdpdGggYSBib2R5IGlzIHVuY29tbW9uIGJ1dCBwZXJtaXR0ZWQgYnlcbiAgICAgICAgICAgIC8vIEhUVFAg4oCUIHdlIGRvbid0IGJsb2NrIGl0IGhlcmUuXG4gICAgICAgICAgICAvLyBQcmUtYXV0aCBmbG93cyAocmVnaXN0cmF0aW9uIHdpemFyZCBlbmRwb2ludHMpIG11c3Qgbm90XG4gICAgICAgICAgICAgICAgLy8gYXR0YWNoIGEgYmVhcmVyIHRva2VuIOKAlCBTcHJpbmcgU2VjdXJpdHkncyBCZWFyZXJUb2tlbkF1dGhlbnRpY2F0aW9uRmlsdGVyXG4gICAgICAgICAgICAgICAgLy8gdmFsaWRhdGVzICphbnkqIGF0dGFjaGVkIHRva2VuIGV2ZW4gb24gcGVybWl0QWxsKCkgcGF0aHMsXG4gICAgICAgICAgICAgICAgLy8gc28gYW4gZW1wdHkvc3RhbGUgdG9rZW4gd291bGQgNDAxIGEgd2hpdGVsaXN0ZWQgZW5kcG9pbnQuXG4gICAgICAgICAgICAgICAgLy8gUGF0aC1wcmVmaXggZGV0ZWN0aW9uIG1hdGNoZXMgdGhlIGVxdWl2YWxlbnQgZml4IGluXG4gICAgICAgICAgICAgICAgLy8gUm91dGVBY3Rpb25IYW5kbGVyIGZvciAvdmlldy9wdWJsaWMvZ2V0LlxuICAgICAgICAgICAgY29uc3QgaXNQdWJsaWNSZWdpc3RyYXRpb24gPSBzZXJ2aWNlLnVybFxuICAgICAgICAgICAgICAgICAgICAmJiAvXFwvYXBpXFwvdlswLTldK1xcL3JlZ2lzdHJhdGlvblxcLy8udGVzdChzZXJ2aWNlLnVybCk7XG4gICAgICAgICAgICB0aGlzLmZldGNoV2l0aEN1c3RvbUNvbmZpZyh7XG4gICAgICAgICAgICAgICAgdmlld0lkOiByZXF1ZXN0LnZpZXdJZCxcbiAgICAgICAgICAgICAgICB1cmwsXG4gICAgICAgICAgICAgICAgc2VydmljZVR5cGU6IHJlcXVlc3Quc2VydmljZS50eXBlLFxuICAgICAgICAgICAgICAgIG1ldGhvZCxcbiAgICAgICAgICAgICAgICBzZWN1cmU6ICFpc1B1YmxpY1JlZ2lzdHJhdGlvbiAmJiAhc2VydmljZS51cmwuc3RhcnRzV2l0aCgnaHR0cDovLycpLFxuICAgICAgICAgICAgICAgIGJvZHk6IHJlcXVlc3RCb2R5LFxuICAgICAgICAgICAgICAgIGhlYWRlcnMsXG4gICAgICAgICAgICAgICAgdHJhY2s6IHJlcXVlc3QudHJhY2sgIT09IGZhbHNlXG4gICAgICAgICAgICB9KS50aGVuKChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgICAgIGxldCBwYXRoID0gVXRpbHMuZ2V0UHJvcGVydHlDaGFpblBhdGgocmVxdWVzdC5yZXR1cm5WYWx1ZUJpbmRpbmcpO1xuICAgICAgICAgICAgICAgIGlmICghVXRpbHMuaXNOdWxsKHBhdGgudmFsdWVPYmplY3QpICYmICFVdGlscy5pc051bGwocGF0aC5wcm9wZXJ0eSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcGF0aC52YWx1ZU9iamVjdFtwYXRoLnByb3BlcnR5XSA9IHJlc3BvbnNlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJlc29sdmUodGhpcy5wcm9jZXNzU3VjY2Vzc2Z1bFJlc3BvbnNlRGF0YShyZXF1ZXN0LmNvbXBvbmVudCwgcmVzcG9uc2UsIHJlcXVlc3Qudmlld0lkLCByZXF1ZXN0LnN1Y2Nlc3NNZXNzYWdlKSk7XG4gICAgICAgICAgICB9KS5jYXRjaCgoZSkgPT4ge1xuICAgICAgICAgICAgICAgIHJlamVjdChlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBpbnZva2VScGMocmVxdWVzdCkge1xuICAgICAgICBsZXQgcnBjUmVxdWVzdCA9IHt9O1xuICAgICAgICBycGNSZXF1ZXN0LmlkID0gcmVxdWVzdC52aWV3SWQ7XG5cbiAgICAgICAgbGV0IHNwbGl0ID0gcmVxdWVzdC5zZXJ2aWNlLnNlcnZpY2VJZC5zcGxpdCgnLicpO1xuICAgICAgICBycGNSZXF1ZXN0LnNlcnZpY2UgPSBzcGxpdFsxXTtcbiAgICAgICAgcnBjUmVxdWVzdC5tZXRob2QgPSByZXF1ZXN0LnNlcnZpY2UucHJvY2VkdXJlTmFtZTtcblxuICAgICAgICBsZXQgbW9kdWxlID0gc3BsaXRbMF0udG9Mb3dlckNhc2UoKTtcblxuICAgICAgICBsZXQgaGVhZGVycyA9IHt9O1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwocmVxdWVzdC5zZXJ2aWNlLnBhcmFtZXRlcnMpICYmIHJlcXVlc3Quc2VydmljZS5wYXJhbWV0ZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBycGNSZXF1ZXN0LnBhcmFtZXRlcnMgPSBbXTtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlcXVlc3Quc2VydmljZS5wYXJhbWV0ZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBwYXJhbWV0ZXJDb25maWcgPSByZXF1ZXN0LnNlcnZpY2UucGFyYW1ldGVyc1tpXTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHBhcmFtZXRlciA9IHt9O1xuICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXIubmFtZSA9IHBhcmFtZXRlckNvbmZpZy5uYW1lO1xuICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXIuaW5kZXggPSBwYXJhbWV0ZXJDb25maWcuaW5kZXg7XG5cbiAgICAgICAgICAgICAgICAgICAgbGV0IHZhbCA9IGFwcGxpY2F0aW9uTWFuYWdlci5yZXNvbHZlUGFyYW1ldGVyVmFsdWUocGFyYW1ldGVyQ29uZmlnLCByZXF1ZXN0LmV2ZW50ID8gcmVxdWVzdC5ldmVudC5kYXRhIDogbnVsbCk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwodmFsKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyLnZhbHVlID0gdmFsLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyLnR5cGUgPSB2YWwudHlwZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcGFyYW1ldGVyLnZhbHVlID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyLnZhbHVlID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmIChVdGlscy5pc051bGwocGFyYW1ldGVyLnR5cGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXIudHlwZSA9ICdTdHJpbmcnO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwocGFyYW1ldGVyLnZhbGlkYXRvcilcbiAgICAgICAgICAgICAgICAgICAgICAgICYmICgocGFyYW1ldGVyLnZhbGlkYXRvci5udWxsYWJsZSAmJiAhVXRpbHMuZXZhbHVhdGVCb29sZWFuRXhwcmVzc2lvbihwYXJhbWV0ZXIudmFsaWRhdG9yLm51bGxhYmxlLCBwYXJhbWV0ZXIubmFtZSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKChVdGlscy5ldmFsdWF0ZUJvb2xlYW5FeHByZXNzaW9uKHBhcmFtZXRlci52YWxpZGF0b3IucmVxdWlyZWQgJiYgVXRpbHMuZXZhbHVhdGVCb29sZWFuRXhwcmVzc2lvbihwYXJhbWV0ZXIudmFsaWRhdG9yLnJlcXVpcmVkLCBwYXJhbWV0ZXIubmFtZSkpKSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAmJiB0aGlzLmlzUGFyYW1WYWx1ZU51bGwocGFyYW1ldGVyLnZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvclR5cGU6ICdJTlZBTElEX1BBUkFNRVRFUicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZiAocGFyYW1ldGVyQ29uZmlnLmh0dHBQYXJhbWV0ZXJUeXBlID09PSAnSEVBREVSJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwocGFyYW1ldGVyLnZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaGVhZGVycykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzID0ge31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzW3BhcmFtZXRlci5uYW1lXSA9IHBhcmFtZXRlci52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJwY1JlcXVlc3QucGFyYW1ldGVycy5wdXNoKHBhcmFtZXRlcik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuZmV0Y2hXaXRoQ3VzdG9tQ29uZmlnKHtcbiAgICAgICAgICAgICAgICB2aWV3SWQ6IHJlcXVlc3Qudmlld0lkLFxuICAgICAgICAgICAgICAgIHVybDogbG9jYXRpb24gKyBhcHBsaWNhdGlvbk1hbmFnZXIuZ2V0Q29udGV4dFJvb3QoKSArICcvJyArIG1vZHVsZSArICcvYXBpL3YxL3JwYy9pbnZva2UnLFxuICAgICAgICAgICAgICAgIHNlcnZpY2VUeXBlOiByZXF1ZXN0LnNlcnZpY2UudHlwZSxcbiAgICAgICAgICAgICAgICBzZWN1cmU6IHRydWUsXG4gICAgICAgICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgICAgICAgICAgYm9keTogcnBjUmVxdWVzdCxcbiAgICAgICAgICAgICAgICB0cmFjazogcmVxdWVzdC50cmFjayAhPT0gZmFsc2UsXG4gICAgICAgICAgICAgICAgY29udGVudFR5cGU6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgICAgICAgICBoZWFkZXJzXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC50aGVuKChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVxdWVzdC5yZXR1cm5WYWx1ZUJpbmRpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBwYXRoID0gVXRpbHMuZ2V0UHJvcGVydHlDaGFpblBhdGgocmVxdWVzdC5yZXR1cm5WYWx1ZUJpbmRpbmcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwocGF0aC52YWx1ZU9iamVjdCkgJiYgIVV0aWxzLmlzTnVsbChwYXRoLnByb3BlcnR5KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGgudmFsdWVPYmplY3RbcGF0aC5wcm9wZXJ0eV0gPSByZXNwb25zZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUodGhpcy5wcm9jZXNzU3VjY2Vzc2Z1bFJlc3BvbnNlRGF0YShyZXF1ZXN0LmNvbXBvbmVudCwgcmVzcG9uc2UsIHJlcXVlc3Qudmlld0lkLCByZXF1ZXN0LnN1Y2Nlc3NNZXNzYWdlKSk7XG4gICAgICAgICAgICAgICAgfSkuY2F0Y2goKGUpID0+IHtcbiAgICAgICAgICAgICAgICByZWplY3QoZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICBmZXRjaFdpdGhDdXN0b21Db25maWcocmVxdWVzdCkge1xuICAgICAgICBjb25zdCBhY2Nlc3NUb2tlbiA9IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oJ2FjY2Vzc1Rva2VuJyk7XG4gICAgICAgIGNvbnN0IGlkVG9rZW4gPSBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKCdpZFRva2VuJyk7XG5cbiAgICAgICAgbGV0IGRhdGEgPSByZXF1ZXN0LmJvZHkgPyAocmVxdWVzdC5ib2R5IGluc3RhbmNlb2YgRm9ybURhdGEpID8gcmVxdWVzdC5ib2R5IDogSlNPTi5zdHJpbmdpZnkocmVxdWVzdC5ib2R5KSA6IG51bGw7XG4gICAgICAgIGxldCBmZXRjaENvbmZpZyA9IHJlcXVlc3QuY29uZmlnO1xuXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICBpZiAoVXRpbHMuaXNOdWxsKGZldGNoQ29uZmlnKSkge1xuICAgICAgICAgICAgICAgIGlmIChVdGlscy5pc051bGwocmVxdWVzdC5zZWN1cmUpIHx8IHJlcXVlc3Quc2VjdXJlID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgIGZldGNoQ29uZmlnID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiBVdGlscy5pc051bGwocmVxdWVzdC5tZXRob2QpID8gJ0dFVCcgOiByZXF1ZXN0Lm1ldGhvZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5yZXF1ZXN0LmhlYWRlcnMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6IHJlcXVlc3QuY29udGVudFR5cGUgPyByZXF1ZXN0LmNvbnRlbnRUeXBlIDogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0F1dGhvcml6YXRpb24nOiAnQmVhcmVyICcgKyBhY2Nlc3NUb2tlbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaWRUb2tlbic6IGlkVG9rZW5cblxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvZHk6IGRhdGFcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBmZXRjaENvbmZpZyA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZDogVXRpbHMuaXNOdWxsKHJlcXVlc3QubWV0aG9kKSA/ICdHRVQnIDogcmVxdWVzdC5tZXRob2QsXG4gICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4ucmVxdWVzdC5oZWFkZXJzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiByZXF1ZXN0LmNvbnRlbnRUeXBlID8gcmVxdWVzdC5jb250ZW50VHlwZSA6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQWNjZXB0JzogcmVxdWVzdC5hY2NlcHQgPyByZXF1ZXN0LmFjY2VwdCA6ICdhcHBsaWNhdGlvbi9qc29uJ1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvZHk6IGRhdGFcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoJ3Jlc3QnID09PSByZXF1ZXN0LnNlcnZpY2VUeXBlICYmICEocmVxdWVzdC5ib2R5IGluc3RhbmNlb2YgRm9ybURhdGEpKSB7XG4gICAgICAgICAgICAgICAgICAgIGZldGNoQ29uZmlnLmhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddID0gcmVxdWVzdC5jb250ZW50VHlwZSA/IHJlcXVlc3QuY29udGVudFR5cGUgOiAnYXBwbGljYXRpb24vanNvbjsgY2hhcnNldD11dGYtOCc7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKChyZXF1ZXN0LmJvZHkgaW5zdGFuY2VvZiBGb3JtRGF0YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGZldGNoQ29uZmlnLmhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddO1xuICAgICAgICAgICAgICAgICAgICBmZXRjaENvbmZpZy5oZWFkZXJzWydBY2NlcHQnXSA9IHJlcXVlc3QuYWNjZXB0ID8gcmVxdWVzdC5hY2NlcHQgOiAnYXBwbGljYXRpb24vanNvbic7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAocmVxdWVzdC5jb250ZW50VHlwZSkge1xuICAgICAgICAgICAgICAgIGZldGNoQ29uZmlnLmhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddID0gcmVxdWVzdC5jb250ZW50VHlwZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGV0IHVybCA9IHJlcXVlc3QudXJsO1xuICAgICAgICAgICAgaWYgKHJlcXVlc3QuZG93bmxvYWQpIHtcbiAgICAgICAgICAgICAgICBpZiAodXJsLmluZGV4T2YoJz8nKSA8IDApIHtcbiAgICAgICAgICAgICAgICAgICAgdXJsICs9ICc/JztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB1cmwgKz0gJyYnO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8vdXJsICs9ICdhY2Nlc3NfdG9rZW49JyArIGFjY2Vzc1Rva2VuO1xuICAgICAgICAgICAgICAgIC8vdXJsICs9ICcmaWRUb2tlbj0nICsgaWRUb2tlbjtcbiAgICAgICAgICAgICAgICB1cmwgKz0gJyZ0aGVtZVByaW1hcnlDb2xvcj0nICsgZW5jb2RlVVJJQ29tcG9uZW50KGFwcGxpY2F0aW9uTWFuYWdlci5nZXRBcHBsaWNhdGlvblByaW1hcnlDb2xvcigpKTtcbiAgICAgICAgICAgICAgICB1cmwgKz0gJyZ0aGVtZVNlY29uZGFyeUNvbG9yPScgKyBlbmNvZGVVUklDb21wb25lbnQoYXBwbGljYXRpb25NYW5hZ2VyLmdldEFwcGxpY2F0aW9uU2Vjb25kYXJ5Q29sb3IoKSk7XG5cbiAgICAgICAgICAgICAgICBmZXRjaCh1cmwsIHtcbiAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiBcIkdFVFwiLFxuICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5yZXF1ZXN0LmhlYWRlcnMsXG4gICAgICAgICAgICAgICAgICAgICAgICAnQXV0aG9yaXphdGlvbic6ICdCZWFyZXIgJyArIGFjY2Vzc1Rva2VuLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2lkVG9rZW4nOiBpZFRva2VuXG5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIC50aGVuKHJlc3BvbnNlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2UuanNvbigpLnRoZW4oZXJyb3JEYXRhID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBFcnJvciAke3Jlc3BvbnNlLnN0YXR1c306ICR7ZXJyb3JEYXRhLm1lc3NhZ2UgfHwgcmVzcG9uc2Uuc3RhdHVzVGV4dH1gKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNvbnRlbnREaXNwb3NpdGlvbiA9IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KFwiQ29udGVudC1EaXNwb3NpdGlvblwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBmaWxlbmFtZSA9IFwiZG93bmxvYWRlZC1maWxlXCI7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb250ZW50RGlzcG9zaXRpb24gJiYgY29udGVudERpc3Bvc2l0aW9uLmluY2x1ZGVzKFwiZmlsZW5hbWU9XCIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZW5hbWUgPSBjb250ZW50RGlzcG9zaXRpb24uc3BsaXQoXCJmaWxlbmFtZT1cIilbMV0udHJpbSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVuYW1lID0gZmlsZW5hbWUucmVwbGFjZSgvW1wiJ10vZywgXCJcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZS5ibG9iKCkudGhlbihibG9iID0+ICh7YmxvYiwgZmlsZW5hbWV9KSk7XG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIC50aGVuKCh7YmxvYiwgZmlsZW5hbWV9KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1cmwgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJhXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYS5ocmVmID0gdXJsO1xuICAgICAgICAgICAgICAgICAgICAgICAgYS5kb3dubG9hZCA9IGZpbGVuYW1lO1xuICAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGEuY2xpY2soKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoYSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBVUkwucmV2b2tlT2JqZWN0VVJMKHVybCk7XG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIC5jYXRjaChlcnJvciA9PiBjb25zb2xlLmVycm9yKFwiRG93bmxvYWQgZmFpbGVkOlwiLCBlcnJvcikpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoVXRpbHMuaXNOdWxsKHJlcXVlc3QudHJhY2spIHx8IHJlcXVlc3QudHJhY2sgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgdHJhY2tQcm9taXNlKFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5leGVjdXRlRmV0Y2godXJsLCBmZXRjaENvbmZpZywgcmVxdWVzdC52aWV3SWQsIHJlcXVlc3Quc3VjY2Vzc01lc3NhZ2UpLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShyZXNwb25zZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KS5jYXRjaCgoZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5leGVjdXRlRmV0Y2godXJsLCBmZXRjaENvbmZpZywgcmVxdWVzdC52aWV3SWQsIHJlcXVlc3Quc3VjY2Vzc01lc3NhZ2UpLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHJlc3BvbnNlKTtcbiAgICAgICAgICAgICAgICAgICAgfSkuY2F0Y2goKGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChlKTtcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgZXhlY3V0ZUZldGNoKHVybCwgZmV0Y2hDb25maWcsIHZpZXdJZCwgc3VjY2Vzc01lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIGZldGNoKGVuY29kZVVSSSh1cmwpLCBmZXRjaENvbmZpZylcbiAgICAgICAgICAgICAgICAudGhlbihzdGF0dXMpXG4gICAgICAgICAgICAgICAgLnRoZW4oanNvbilcbiAgICAgICAgICAgICAgICAudGhlbigoZGF0YSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHRoaXMucHJvY2Vzc1N1Y2Nlc3NmdWxSZXNwb25zZURhdGEobnVsbCwgZGF0YSwgdmlld0lkLCBzdWNjZXNzTWVzc2FnZSkpO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLmNhdGNoKChlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlLnN0YXR1cyA9PT0gNDAxICYmICF1cmwuZW5kc1dpdGgoJy9sb2dvdXQnKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXBwbGljYXRpb25NYW5hZ2VyLmNsZWFyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcHBsaWNhdGlvbk1hbmFnZXIubmF2aWdhdGUoJy9sb2dpbicpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICB9KVxuICAgIH1cblxuICAgIHByb2Nlc3NTdWNjZXNzZnVsUmVzcG9uc2VEYXRhKGNvbXBvbmVudCwgZGF0YSwgdmlld0lkLCBzdWNjZXNzTWVzc2FnZSkge1xuICAgICAgICBsZXQgcmVzcG9uc2U7XG5cbiAgICAgICAgaWYgKHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyB8fCBVdGlscy5pc051bGwoZGF0YSkgfHwgZGF0YS50b1N0cmluZygpXG4gICAgICAgICAgICAudHJpbSgpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmVzcG9uc2UgPSBkYXRhO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICByZXNwb25zZSA9IEpTT04ucGFyc2UoZGF0YSk7XG4gICAgICAgICAgICB9IGNhdGNoIChpZ25vcmVkKSB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2UgPSBkYXRhO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLmRhdGFUeXBlID09PSAnbWVzc2FnZScpIHtcbiAgICAgICAgICAgIGxldCBldmVudCA9IG5ldyBFdmVudChhcHBsaWNhdGlvbk1hbmFnZXIsIHZpZXdJZCwgcmVzcG9uc2UpO1xuICAgICAgICAgICAgZXZlbnRNYW5hZ2VyLmZpcmVFdmVudChFdmVudFR5cGUuTUVTU0FHRV9BUlJJVkVELCBldmVudCk7XG5cbiAgICAgICAgICAgIGlmIChjb21wb25lbnQgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBldmVudCA9IG5ldyBFdmVudChjb21wb25lbnQsIHZpZXdJZCwgcmVzcG9uc2UpO1xuICAgICAgICAgICAgICAgIGV2ZW50TWFuYWdlci5maXJlRXZlbnQoRXZlbnRUeXBlLk1FU1NBR0VfQVJSSVZFRCwgZXZlbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKCFVdGlscy5pc051bGwoc3VjY2Vzc01lc3NhZ2UpKSB7XG4gICAgICAgICAgICBsZXQgbWVzc2FnZSA9IHtcbiAgICAgICAgICAgICAgICBtZXNzYWdlVHlwZTogJ1NVQ0NFU1MnLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGFwcGxpY2F0aW9uTWFuYWdlci5wb3B1bGF0ZVRlbXBsYXRlKHN1Y2Nlc3NNZXNzYWdlLCByZXNwb25zZSlcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGxldCBldmVudCA9IG5ldyBFdmVudChhcHBsaWNhdGlvbk1hbmFnZXIsIHZpZXdJZCwgbWVzc2FnZSk7XG4gICAgICAgICAgICBldmVudE1hbmFnZXIuZmlyZUV2ZW50KEV2ZW50VHlwZS5NRVNTQUdFX0FSUklWRUQsIGV2ZW50KTtcblxuICAgICAgICAgICAgaWYgKGNvbXBvbmVudCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGV2ZW50ID0gbmV3IEV2ZW50KGNvbXBvbmVudCwgdmlld0lkLCBtZXNzYWdlKTtcbiAgICAgICAgICAgICAgICBldmVudE1hbmFnZXIuZmlyZUV2ZW50KEV2ZW50VHlwZS5NRVNTQUdFX0FSUklWRUQsIGV2ZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICB9XG59XG5cbmNvbnN0IGluc3RhbmNlID0gbmV3IFJlc3RTZXJ2aWNlKCk7XG5cbmV4cG9ydCBjb25zdCBpbnZva2VScGMgPSAocmVxdWVzdCkgPT4ge1xuICAgIHJldHVybiBpbnN0YW5jZS5pbnZva2VScGMocmVxdWVzdCk7XG59O1xuXG5leHBvcnQgY29uc3QgaW52b2tlUmVzdCA9IChyZXF1ZXN0KSA9PiB7XG4gICAgcmV0dXJuIGluc3RhbmNlLmludm9rZVJlc3QocmVxdWVzdCk7XG59O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQyxJQUFBQSxNQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFDRCxJQUFBQyxvQkFBQSxHQUFBRCxPQUFBO0FBQ0EsSUFBQUUsbUJBQUEsR0FBQUgsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFHLE1BQUEsR0FBQUosc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFJLFdBQUEsR0FBQUwsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFLLFVBQUEsR0FBQU4sc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFNLFVBQUEsR0FBQU4sT0FBQTtBQUNBLElBQUFPLFVBQUEsR0FBQVAsT0FBQTtBQUE0RCxTQUFBRCx1QkFBQVMsQ0FBQSxXQUFBQSxDQUFBLElBQUFBLENBQUEsQ0FBQUMsVUFBQSxHQUFBRCxDQUFBLEtBQUFFLE9BQUEsRUFBQUYsQ0FBQTtBQUFBLFNBQUFHLFFBQUFILENBQUEsRUFBQUksQ0FBQSxRQUFBQyxDQUFBLEdBQUFDLE1BQUEsQ0FBQUMsSUFBQSxDQUFBUCxDQUFBLE9BQUFNLE1BQUEsQ0FBQUUscUJBQUEsUUFBQUMsQ0FBQSxHQUFBSCxNQUFBLENBQUFFLHFC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
package/dist/RestUtils.js CHANGED
@@ -173,7 +173,6 @@ class RestUtils {
173
173
  request.method = rpcDetails.procedureName;
174
174
  let config = {};
175
175
  config.headers = {};
176
- config.headers['tenant'] = 'COJ';
177
176
  let module = split[0].toLowerCase();
178
177
  if (!_Utils.default.isNull(rpcDetails.parameters) && rpcDetails.parameters.length > 0) {
179
178
  request.parameters = [];
@@ -351,12 +350,42 @@ class RestUtils {
351
350
  }
352
351
  }
353
352
  const instance = new RestUtils();
353
+ // CDUI UI-asset URLs (view / menu / dashboard) are served wrapped in a
354
+ // {_cdui_z: "<base64(gzip(json))>"} envelope by oui-server's
355
+ // wireCompression util — see oui-server/src/web/util/wireCompression.ts.
356
+ // Decode transparently here so every loader downstream sees the raw
357
+ // CDUI JSON regardless of whether the server has compression enabled.
358
+ // Gated on the /ui/api/v*/ path so non-UI fetches are unaffected.
359
+ const UI_ASSET_URL_PATTERN = /\/ui\/api\/v[0-9]+\//;
360
+
361
+ // Wraps a success callback with the wire-envelope decoder when the URL
362
+ // matches the UI-asset pattern. Both sendRequest (GET / doFetch path)
363
+ // and postData (POST / doPostData path) need this — menus and
364
+ // dashboards are sometimes loaded via POST with criteria bodies, so
365
+ // they hit oui-server's compression too.
366
+ const wrapDecodeIfUiAsset = (url, successCallback, opLabel) => {
367
+ if (!url || !UI_ASSET_URL_PATTERN.test(url) || !successCallback) {
368
+ return successCallback;
369
+ }
370
+ return async raw => {
371
+ try {
372
+ const decoded = await _Utils.default.maybeDecodeWire(raw);
373
+ successCallback(decoded);
374
+ } catch (e) {
375
+ console.error("[".concat(opLabel, "] CDUI wire decode failed for"), url, e);
376
+ // Fall back to raw so the caller still gets *something*;
377
+ // missing _cdui_z and decode failures both flow through
378
+ // maybeDecodeWire's own pass-through behaviour.
379
+ successCallback(raw);
380
+ }
381
+ };
382
+ };
354
383
  const postData = (url, successCallback, errorCallback, secure, data) => {
355
- instance.doPostData(url, successCallback, errorCallback, secure, data);
384
+ instance.doPostData(url, wrapDecodeIfUiAsset(url, successCallback, 'postData'), errorCallback, secure, data);
356
385
  };
357
386
  exports.postData = postData;
358
387
  const sendRequest = (url, successCallback, errorCallback, secure, track) => {
359
- instance.doFetch(url, successCallback, errorCallback, secure, null, null, null, null, null, track);
388
+ instance.doFetch(url, wrapDecodeIfUiAsset(url, successCallback, 'sendRequest'), errorCallback, secure, null, null, null, null, null, track);
360
389
  };
361
390
  exports.sendRequest = sendRequest;
362
391
  const download = (url, successCallback, errorCallback, secure) => {
@@ -373,4 +402,4 @@ const invokeRest = function (serviceConfig, component, viewId, successCallback,
373
402
  instance.invokeRest(serviceConfig, component, viewId, successCallback, errorCallback, invalidParamCallback, returnValueBinding, successMessage, event);
374
403
  };
375
404
  exports.invokeRest = invokeRest;
376
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfVXRpbHMiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9yZWFjdFByb21pc2VUcmFja2VyIiwiX0FwcGxpY2F0aW9uTWFuYWdlciIsIl9FdmVudCIsIl9PYnNlcnZhYmxlIiwiX0V2ZW50VHlwZSIsIl9wcm9wVHlwZXMiLCJfSGVhZGVyIiwiZSIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0IiwibG9jYXRpb24iLCJleHBvcnRzIiwid2luZG93IiwicHJvdG9jb2wiLCJob3N0bmFtZSIsInN0YXR1cyIsInJlc3BvbnNlIiwib2siLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsImpzb24iLCJ0ZXh0IiwiUmVzdFV0aWxzIiwiaXNQYXJhbVZhbHVlTnVsbCIsInBhcmFtVmFsdWUiLCJVdGlscyIsImlzTnVsbCIsImhhc093blByb3BlcnR5IiwidmFsdWUiLCJpbnZva2VSZXN0Iiwic2VydmljZSIsImNvbXBvbmVudCIsInZpZXdJZCIsInN1Y2Nlc3NDYWxsYmFjayIsImVycm9yQ2FsbGJhY2siLCJpbnZhbGlkUGFyYW1DYWxsYmFjayIsInJldHVyblZhbHVlQmluZGluZyIsInN1Y2Nlc3NNZXNzYWdlIiwiZXZlbnQiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJ1bmRlZmluZWQiLCJ1cmwiLCJzdGFydHNXaXRoIiwiY29uY2F0IiwiYXBwbGljYXRpb25NYW5hZ2VyIiwiZ2V0Q29udGV4dFJvb3QiLCJyZXF1ZXN0Qm9keSIsImhlYWRlcnMiLCJwYXJhbWV0ZXJzIiwicXVlcnlTdHJpbmciLCJwYXRoUGFyYW1ldGVycyIsInJlcXVlc3RCb2R5UGFyYW1Gb3VuZCIsInBhcmFtZXRlciIsInBhcmFtZXRlclZhbHVlIiwicmVzb2x2ZVBhcmFtZXRlclZhbHVlIiwiZGF0YSIsInZhbGlkYXRvciIsImV2YWx1YXRlQm9vbGVhbkV4cHJlc3Npb24iLCJudWxsYWJsZSIsIm5hbWUiLCJjb25zb2xlIiwiZXJyb3IiLCJodHRwUGFyYW1ldGVyVHlwZSIsImluY2x1ZGVQYXJhbWV0ZXJUeXBlcyIsInR5cGUiLCJKU09OIiwic3RyaW5naWZ5IiwicmVzb2x2ZWRWYWx1ZSIsImVuY29kZSIsImVuY29kZVVSSUNvbXBvbmVudCIsImluc3RhbmNlVHlwZSIsImluZGV4T2YiLCJyZXBsYWNlIiwiY29udGVudFR5cGUiLCJtZXRob2QiLCJFcnJvciIsImxvZyIsInBvc3REYXRhIiwicHJvY2Vzc1N1Y2Nlc3NmdWxSZXNwb25zZURhdGEiLCJwYXRoIiwiZ2V0UHJvcGVydHlDaGFpblBhdGgiLCJ2YWx1ZU9iamVjdCIsInByb3BlcnR5IiwiZmlyZUV2ZW50IiwiRXZlbnRUeXBlIiwiU0VSVklDRV9DQUxMX1NVQ0NFU1MiLCJTRVJWSUNFX0NBTExfRkFJTFVSRSIsImRvd25sb2FkIiwic2VuZFJlcXVlc3QiLCJpbnZva2VScGMiLCJycGNEZXRhaWxzIiwicmVxdWVzdCIsImlkIiwic3BsaXQiLCJzZXJ2aWNlSWQiLCJwcm9jZWR1cmVOYW1lIiwiY29uZmlnIiwibW9kdWxlIiwidG9Mb3dlckNhc2UiLCJpIiwicGFyYW1ldGVyQ29uZmlnIiwiaW5kZXgiLCJ2YWwiLCJwdXNoIiwiZG9GZXRjaCIsIndhcm4iLCJkb1Bvc3REYXRhIiwic2VjdXJlIiwiZmV0Y2hXaXRoQ3VzdG9tQ29uZmlnIiwiYm9keSIsInRyYWNrIiwic2VydmljZVR5cGUiLCJhY2Nlc3NUb2tlbiIsInNlc3Npb25TdG9yYWdlIiwiZ2V0SXRlbSIsImlkVG9rZW4iLCJGb3JtRGF0YSIsImZldGNoQ29uZmlnIiwiZ2V0QXBwbGljYXRpb25QcmltYXJ5Q29sb3IiLCJnZXRBcHBsaWNhdGlvblNlY29uZGFyeUNvbG9yIiwib3BlbiIsImVuY29kZVVSSSIsInRyYWNrUHJvbWlzZSIsImV4ZWN1dGVGZXRjaCIsImZldGNoIiwidGhlbiIsImNhdGNoIiwiZW5kc1dpdGgiLCJjbGVhciIsIm5hdmlnYXRlIiwidG9TdHJpbmciLCJ0cmltIiwicGFyc2UiLCJpZ25vcmVkIiwiZGF0YVR5cGUiLCJFdmVudCIsImV2ZW50TWFuYWdlciIsIk1FU1NBR0VfQVJSSVZFRCIsIm1lc3NhZ2UiLCJtZXNzYWdlVHlwZSIsInBvcHVsYXRlVGVtcGxhdGUiLCJldmVudFR5cGUiLCJpbnN0YW5jZSIsInNlcnZpY2VDb25maWciXSwic291cmNlcyI6WyIuLi9zcmMvbGliL1Jlc3RVdGlscy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyLvu79pbXBvcnQgVXRpbHMgZnJvbSAnLi9VdGlscyc7XG5pbXBvcnQge3RyYWNrUHJvbWlzZX0gZnJvbSAncmVhY3QtcHJvbWlzZS10cmFja2VyJztcbmltcG9ydCBhcHBsaWNhdGlvbk1hbmFnZXIgZnJvbSAnLi9BcHBsaWNhdGlvbk1hbmFnZXInO1xuaW1wb3J0IEV2ZW50IGZyb20gJy4vZXZlbnQvRXZlbnQnO1xuaW1wb3J0IGV2ZW50TWFuYWdlciBmcm9tICcuL2V2ZW50L09ic2VydmFibGUnO1xuaW1wb3J0IEV2ZW50VHlwZSBmcm9tICcuL2V2ZW50L0V2ZW50VHlwZSc7XG5pbXBvcnQge2luc3RhbmNlT2Z9IGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgaGVhZGVyIGZyb20gXCIuL2NvbXBvbmVudHMvZGFzaGJvYXJkL2NvbXBvbmVudHMvSGVhZGVyXCI7XG5cbmV4cG9ydCBjb25zdCBsb2NhdGlvbiA9IHdpbmRvdy5sb2NhdGlvbi5wcm90b2NvbCArICcvLycgKyB3aW5kb3cubG9jYXRpb24uaG9zdG5hbWU7XG5jb25zdCBzdGF0dXMgPSAocmVzcG9uc2UpID0+IHtcbiAgICBpZiAocmVzcG9uc2Uub2spIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShyZXNwb25zZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KHJlc3BvbnNlKTtcbiAgICB9XG59O1xuXG5jb25zdCBqc29uID0gKHJlc3BvbnNlKSA9PiB7XG4gICAgcmV0dXJuIHJlc3BvbnNlLnRleHQoKTtcbn07XG5cbmNsYXNzIFJlc3RVdGlscyB7XG4gICAgaXNQYXJhbVZhbHVlTnVsbChwYXJhbVZhbHVlKSB7XG4gICAgICAgIGlmIChVdGlscy5pc051bGwocGFyYW1WYWx1ZSkpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHBhcmFtVmFsdWUuaGFzT3duUHJvcGVydHkoJ3ZhbHVlJykgPyBVdGlscy5pc051bGwocGFyYW1WYWx1ZS52YWx1ZSkgOiBmYWxzZTtcbiAgICB9XG5cbiAgICBpbnZva2VSZXN0KHNlcnZpY2UsIGNvbXBvbmVudCwgdmlld0lkLCBzdWNjZXNzQ2FsbGJhY2ssIGVycm9yQ2FsbGJhY2ssIGludmFsaWRQYXJhbUNhbGxiYWNrLCByZXR1cm5WYWx1ZUJpbmRpbmcsIHN1Y2Nlc3NNZXNzYWdlLCBldmVudCA9IG51bGwpIHtcbiAgICAgICAgbGV0IHVybCA9IHNlcnZpY2UudXJsLnN0YXJ0c1dpdGgoJ2h0dHA6Ly8nKSB8fCBzZXJ2aWNlLnVybC5zdGFydHNXaXRoKCdodHRwczovLycpID8gc2VydmljZS51cmwgOiBsb2NhdGlvbiArIGAke2FwcGxpY2F0aW9uTWFuYWdlci5nZXRDb250ZXh0Um9vdCgpICsgc2VydmljZS51cmx9YDtcbiAgICAgICAgbGV0IHJlcXVlc3RCb2R5ID0gbnVsbDtcbiAgICAgICAgbGV0IGhlYWRlcnMgPSBzZXJ2aWNlLmhlYWRlcnM7XG5cbiAgICAgICAgaWYgKCFVdGlscy5pc051bGwoc2VydmljZS5wYXJhbWV0ZXJzKSkge1xuICAgICAgICAgICAgbGV0IHF1ZXJ5U3RyaW5nID0gJyc7XG4gICAgICAgICAgICBsZXQgcGF0aFBhcmFtZXRlcnMgPSAnJztcbiAgICAgICAgICAgIGxldCByZXF1ZXN0Qm9keVBhcmFtRm91bmQgPSBmYWxzZTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgcGFyYW1ldGVyIG9mIHNlcnZpY2UucGFyYW1ldGVycykge1xuICAgICAgICAgICAgICAgIGxldCBwYXJhbWV0ZXJWYWx1ZSA9IGFwcGxpY2F0aW9uTWFuYWdlci5yZXNvbHZlUGFyYW1ldGVyVmFsdWUocGFyYW1ldGVyLCBldmVudCA/IGV2ZW50LmRhdGEgOiBudWxsKTtcbiAgICAgICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChwYXJhbWV0ZXIudmFsaWRhdG9yKVxuICAgICAgICAgICAgICAgICAgICAmJiAhVXRpbHMuZXZhbHVhdGVCb29sZWFuRXhwcmVzc2lvbihwYXJhbWV0ZXIudmFsaWRhdG9yLm51bGxhYmxlLCBwYXJhbWV0ZXIubmFtZSlcbiAgICAgICAgICAgICAgICAgICAgJiYgdGhpcy5pc1BhcmFtVmFsdWVOdWxsKHBhcmFtZXRlclZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChpbnZhbGlkUGFyYW1DYWxsYmFjaykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0lOVkFMSUQgUEFSQU1FVEVSIDogJywgcGFyYW1ldGVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGludmFsaWRQYXJhbUNhbGxiYWNrKHBhcmFtZXRlcik7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgbGV0IGh0dHBQYXJhbWV0ZXJUeXBlID0gcGFyYW1ldGVyLmh0dHBQYXJhbWV0ZXJUeXBlO1xuICAgICAgICAgICAgICAgIGlmIChVdGlscy5pc051bGwoaHR0cFBhcmFtZXRlclR5cGUpKSB7XG4gICAgICAgICAgICAgICAgICAgIGh0dHBQYXJhbWV0ZXJUeXBlID0gJ1FVRVJZX1BBUkFNRVRFUic7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGh0dHBQYXJhbWV0ZXJUeXBlID09PSAnUVVFUllfUEFSQU1FVEVSJykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChwYXJhbWV0ZXJWYWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChxdWVyeVN0cmluZy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVlcnlTdHJpbmcgKz0gJyYnO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChzZXJ2aWNlLmluY2x1ZGVQYXJhbWV0ZXJUeXBlcykgJiYgc2VydmljZS5pbmNsdWRlUGFyYW1ldGVyVHlwZXMgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWVyeVN0cmluZyArPSBwYXJhbWV0ZXJWYWx1ZS50eXBlICsgJzonO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFyYW1ldGVyVmFsdWUudHlwZSA9PT0gJ01hcE9iamVjdCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJWYWx1ZS52YWx1ZS50eXBlID0gJ01hcEVudGl0eUR0byc7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5U3RyaW5nICs9IHBhcmFtZXRlci5uYW1lICsgJz0nO1xuICAgICAgICAgICAgICAgICAgICAgICAgcXVlcnlTdHJpbmcgKz0gKHR5cGVvZiBwYXJhbWV0ZXJWYWx1ZS52YWx1ZSA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIHBhcmFtZXRlclZhbHVlLnZhbHVlID09PSAnbnVtYmVyJyA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyVmFsdWUudmFsdWUgOiBKU09OLnN0cmluZ2lmeShwYXJhbWV0ZXJWYWx1ZS52YWx1ZSkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGh0dHBQYXJhbWV0ZXJUeXBlID09PSAnUEFUSF9WQVJJQUJMRScpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwocGFyYW1ldGVyVmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgcmVzb2x2ZWRWYWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJhbWV0ZXIuZW5jb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZWRWYWx1ZSA9IHR5cGVvZiBwYXJhbWV0ZXJWYWx1ZS52YWx1ZSA9PT0gJ29iamVjdCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBlbmNvZGVVUklDb21wb25lbnQoSlNPTi5zdHJpbmdpZnkocGFyYW1ldGVyVmFsdWUudmFsdWUpKSA6IHBhcmFtZXRlclZhbHVlLmluc3RhbmNlVHlwZSA9PT0gJ1R5cGVkVmFsdWUnID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuY29kZVVSSUNvbXBvbmVudChwYXJhbWV0ZXJWYWx1ZS52YWx1ZSkgOiBlbmNvZGVVUklDb21wb25lbnQocGFyYW1ldGVyVmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlZFZhbHVlID0gdHlwZW9mIHBhcmFtZXRlclZhbHVlLnZhbHVlID09PSAnb2JqZWN0J1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IEpTT04uc3RyaW5naWZ5KHBhcmFtZXRlclZhbHVlLnZhbHVlKSA6IHBhcmFtZXRlclZhbHVlLmluc3RhbmNlVHlwZSA9PT0gJ1R5cGVkVmFsdWUnID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlclZhbHVlLnZhbHVlIDogcGFyYW1ldGVyVmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIHRoZSBwYXJhbWV0ZXIgaGFzIGEgbmFtZSBhbmQgdGhlIFVSTCBjb250YWlucyB7bmFtZX0sIHJlcGxhY2UgdGhlIHBsYWNlaG9sZGVyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChwYXJhbWV0ZXIubmFtZSkgJiYgdXJsLmluZGV4T2YoJ3snICsgcGFyYW1ldGVyLm5hbWUgKyAnfScpID49IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmwgPSB1cmwucmVwbGFjZSgneycgKyBwYXJhbWV0ZXIubmFtZSArICd9JywgcmVzb2x2ZWRWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEJhY2t3YXJkIGNvbXBhdGliaWxpdHk6IGFwcGVuZCB0byBlbmQgb2YgVVJMXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aFBhcmFtZXRlcnMgKz0gJy8nICsgcmVzb2x2ZWRWYWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChodHRwUGFyYW1ldGVyVHlwZSA9PT0gJ0hFQURFUicpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwocGFyYW1ldGVyVmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWhlYWRlcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzID0ge31cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyc1twYXJhbWV0ZXIubmFtZV0gPSBwYXJhbWV0ZXJWYWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChodHRwUGFyYW1ldGVyVHlwZSA9PT0gJ1JFUVVFU1RfQk9EWScpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlcXVlc3RCb2R5UGFyYW1Gb3VuZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignT25seSBvbmUgcmVxdWVzdCBib2R5IGlzIHBlcm1pdHRlZCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmlzUGFyYW1WYWx1ZU51bGwocGFyYW1ldGVyVmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdEJvZHkgPSBwYXJhbWV0ZXJWYWx1ZS5pbnN0YW5jZVR5cGUgPT09ICdUeXBlZFZhbHVlJyA/IHBhcmFtZXRlclZhbHVlLnZhbHVlIDogcGFyYW1ldGVyVmFsdWU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFyYW1ldGVyVmFsdWUudHlwZSA9PT0gJ01hcE9iamVjdCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdEJvZHkudHlwZSA9ICdNYXBFbnRpdHlEdG8nO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcmVxdWVzdEJvZHkgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0Qm9keS50eXBlID0gcGFyYW1ldGVyVmFsdWUudHlwZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHBhdGhQYXJhbWV0ZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICB1cmwgKz0gcGF0aFBhcmFtZXRlcnM7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChxdWVyeVN0cmluZy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgdXJsICs9ICc/JztcbiAgICAgICAgICAgICAgICB1cmwgKz0gcXVlcnlTdHJpbmc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgY29udGVudFR5cGUgPSBudWxsO1xuXG4gICAgICAgIGlmICghVXRpbHMuaXNOdWxsKGhlYWRlcnMpKSB7XG4gICAgICAgICAgICBjb250ZW50VHlwZSA9IGhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHJlcXVlc3RCb2R5ICE9PSBudWxsICYmIHNlcnZpY2UubWV0aG9kID09PSAnR0VUJykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdBIHJlcXVlc3QgYm9keSBwYXJhbWV0ZXIgY2Fubm90IGJlIHNwZWNpZmllZCBmb3IgYSBHRVQgcmVxdWVzdCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHJlcXVlc3RCb2R5ICE9PSBudWxsIHx8IHNlcnZpY2UubWV0aG9kID09PSAnUE9TVCcpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiUE9TVElORyBSRVNUIFJFUVVFU1QgQk9EWSA6IFwiLCByZXF1ZXN0Qm9keSk7XG4gICAgICAgICAgICBwb3N0RGF0YSh1cmwsIChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMucHJvY2Vzc1N1Y2Nlc3NmdWxSZXNwb25zZURhdGEoY29tcG9uZW50LCByZXNwb25zZSwgc3VjY2Vzc0NhbGxiYWNrLCB2aWV3SWQsIHN1Y2Nlc3NNZXNzYWdlKTtcblxuICAgICAgICAgICAgICAgIGxldCBwYXRoID0gVXRpbHMuZ2V0UHJvcGVydHlDaGFpblBhdGgocmV0dXJuVmFsdWVCaW5kaW5nKTtcbiAgICAgICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChwYXRoLnZhbHVlT2JqZWN0KSAmJiAhVXRpbHMuaXNOdWxsKHBhdGgucHJvcGVydHkpKSB7XG4gICAgICAgICAgICAgICAgICAgIHBhdGgudmFsdWVPYmplY3RbcGF0aC5wcm9wZXJ0eV0gPSByZXNwb25zZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLmZpcmVFdmVudCh2aWV3SWQsIGNvbXBvbmVudCwgRXZlbnRUeXBlLlNFUlZJQ0VfQ0FMTF9TVUNDRVNTLCByZXNwb25zZSk7XG4gICAgICAgICAgICB9LCAoZSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghVXRpbHMuaXNOdWxsKGVycm9yQ2FsbGJhY2spKSB7XG4gICAgICAgICAgICAgICAgICAgIGVycm9yQ2FsbGJhY2soZSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy5maXJlRXZlbnQodmlld0lkLCBjb21wb25lbnQsIEV2ZW50VHlwZS5TRVJWSUNFX0NBTExfRkFJTFVSRSk7XG4gICAgICAgICAgICB9LCAhc2VydmljZS51cmwuc3RhcnRzV2l0aCgnaHR0cDovLycpLCByZXF1ZXN0Qm9keSk7XG4gICAgICAgIH0gZWxzZSBpZiAoY29udGVudFR5cGUgPT09ICdhcHBsaWNhdGlvbi9wZGYnIHx8IGNvbnRlbnRUeXBlID09PSAnYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsJykge1xuICAgICAgICAgICAgZG93bmxvYWQodXJsLCAoZGF0YSkgPT4ge1xuICAgICAgICAgICAgfSwgKGUpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChlcnJvckNhbGxiYWNrKSkge1xuICAgICAgICAgICAgICAgICAgICBlcnJvckNhbGxiYWNrKGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc2VuZFJlcXVlc3QodXJsLCAoZGF0YSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMucHJvY2Vzc1N1Y2Nlc3NmdWxSZXNwb25zZURhdGEoY29tcG9uZW50LCBkYXRhLCBzdWNjZXNzQ2FsbGJhY2ssIHZpZXdJZCwgc3VjY2Vzc01lc3NhZ2UpO1xuICAgICAgICAgICAgICAgIGxldCBwYXRoID0gVXRpbHMuZ2V0UHJvcGVydHlDaGFpblBhdGgocmV0dXJuVmFsdWVCaW5kaW5nKTtcbiAgICAgICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChwYXRoLnZhbHVlT2JqZWN0KSAmJiAhVXRpbHMuaXNOdWxsKHBhdGgucHJvcGVydHkpKSB7XG4gICAgICAgICAgICAgICAgICAgIHBhdGgudmFsdWVPYmplY3RbcGF0aC5wcm9wZXJ0eV0gPSBkYXRhO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMuZmlyZUV2ZW50KHZpZXdJZCwgY29tcG9uZW50LCBFdmVudFR5cGUuU0VSVklDRV9DQUxMX1NVQ0NFU1MsIGRhdGEpO1xuICAgICAgICAgICAgfSwgKGUpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmZpcmVFdmVudCh2aWV3SWQsIGNvbXBvbmVudCwgRXZlbnRUeXBlLlNFUlZJQ0VfQ0FMTF9GQUlMVVJFKTtcbiAgICAgICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChlcnJvckNhbGxiYWNrKSkge1xuICAgICAgICAgICAgICAgICAgICBlcnJvckNhbGxiYWNrKGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sICFzZXJ2aWNlLnVybC5zdGFydHNXaXRoKCdodHRwOi8vJykpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaW52b2tlUnBjKHJwY0RldGFpbHMsIGNvbXBvbmVudCwgdmlld0lkLCBzdWNjZXNzQ2FsbGJhY2ssIGVycm9yQ2FsbGJhY2ssIGludmFsaWRQYXJhbUNhbGxiYWNrLCByZXR1cm5WYWx1ZUJpbmRpbmcsIHN1Y2Nlc3NNZXNzYWdlLCBldmVudCA9IG51bGwpIHtcbiAgICAgICAgbGV0IHJlcXVlc3QgPSB7fTtcbiAgICAgICAgcmVxdWVzdC5pZCA9IHZpZXdJZDtcblxuICAgICAgICBsZXQgc3BsaXQgPSBycGNEZXRhaWxzLnNlcnZpY2VJZC5zcGxpdCgnLicpO1xuICAgICAgICByZXF1ZXN0LnNlcnZpY2UgPSBzcGxpdFsxXTtcbiAgICAgICAgcmVxdWVzdC5tZXRob2QgPSBycGNEZXRhaWxzLnByb2NlZHVyZU5hbWU7XG5cbiAgICAgICAgbGV0IGNvbmZpZyA9IHt9O1xuICAgICAgICBjb25maWcuaGVhZGVycyA9IHt9O1xuICAgICAgICBjb25maWcuaGVhZGVyc1sndGVuYW50J10gPSAnQ09KJztcblxuICAgICAgICBsZXQgbW9kdWxlID0gc3BsaXRbMF0udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgaWYgKCFVdGlscy5pc051bGwocnBjRGV0YWlscy5wYXJhbWV0ZXJzKSAmJiBycGNEZXRhaWxzLnBhcmFtZXRlcnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgcmVxdWVzdC5wYXJhbWV0ZXJzID0gW107XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJwY0RldGFpbHMucGFyYW1ldGVycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGxldCBwYXJhbWV0ZXJDb25maWcgPSBycGNEZXRhaWxzLnBhcmFtZXRlcnNbaV07XG4gICAgICAgICAgICAgICAgbGV0IHBhcmFtZXRlciA9IHt9O1xuICAgICAgICAgICAgICAgIHBhcmFtZXRlci5uYW1lID0gcGFyYW1ldGVyQ29uZmlnLm5hbWU7XG4gICAgICAgICAgICAgICAgcGFyYW1ldGVyLmluZGV4ID0gcGFyYW1ldGVyQ29uZmlnLmluZGV4O1xuXG4gICAgICAgICAgICAgICAgbGV0IHZhbCA9IGFwcGxpY2F0aW9uTWFuYWdlci5yZXNvbHZlUGFyYW1ldGVyVmFsdWUocGFyYW1ldGVyQ29uZmlnLCBldmVudCA/IGV2ZW50LmRhdGEgOiBudWxsKTtcblxuICAgICAgICAgICAgICAgIGlmICghVXRpbHMuaXNOdWxsKHZhbCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyLnZhbHVlID0gdmFsLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXIudHlwZSA9IHZhbC50eXBlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcGFyYW1ldGVyLnZhbHVlID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXIudmFsdWUgPSBudWxsO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChVdGlscy5pc051bGwocGFyYW1ldGVyLnR5cGUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlci50eXBlID0gJ1N0cmluZyc7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwocGFyYW1ldGVyQ29uZmlnLnZhbGlkYXRvcilcbiAgICAgICAgICAgICAgICAgICAgJiYgVXRpbHMuZXZhbHVhdGVCb29sZWFuRXhwcmVzc2lvbihwYXJhbWV0ZXJDb25maWcudmFsaWRhdG9yLm51bGxhYmxlLCBwYXJhbWV0ZXJDb25maWcubmFtZSkgPT09IGZhbHNlICYmIHRoaXMuaXNQYXJhbVZhbHVlTnVsbChwYXJhbWV0ZXIpKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghVXRpbHMuaXNOdWxsKGludmFsaWRQYXJhbUNhbGxiYWNrKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignSU5WQUxJRCBQQVJBTUVURVIgOiAnLCBwYXJhbWV0ZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaW52YWxpZFBhcmFtQ2FsbGJhY2socGFyYW1ldGVyKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXF1ZXN0LnBhcmFtZXRlcnMucHVzaChwYXJhbWV0ZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5kb0ZldGNoKGxvY2F0aW9uICsgYXBwbGljYXRpb25NYW5hZ2VyLmdldENvbnRleHRSb290KCkgKyAnLycgKyBtb2R1bGUgKyAnL2FwaS92MS9ycGMvaW52b2tlJyxcbiAgICAgICAgICAgIChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghVXRpbHMuaXNOdWxsKHZpZXdJZCkgJiYgIVV0aWxzLmlzTnVsbChjb21wb25lbnQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmlyZUV2ZW50KHZpZXdJZCwgY29tcG9uZW50LCBFdmVudFR5cGUuU0VSVklDRV9DQUxMX1NVQ0NFU1MsIHJlc3BvbnNlKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oXCJObyB2aWV3IGlkIG9yIGNvbXBvbmVudCBzcGVjaWZpZWQgd2hpbGUgZXhlY3V0aW5nIFtcIiArIG1vZHVsZSArIFwiXSBycGMgOiBcIiwgcnBjRGV0YWlscyk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHJldHVyblZhbHVlQmluZGluZykge1xuICAgICAgICAgICAgICAgICAgICBsZXQgcGF0aCA9IFV0aWxzLmdldFByb3BlcnR5Q2hhaW5QYXRoKHJldHVyblZhbHVlQmluZGluZyk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghVXRpbHMuaXNOdWxsKHBhdGgudmFsdWVPYmplY3QpICYmICFVdGlscy5pc051bGwocGF0aC5wcm9wZXJ0eSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhdGgudmFsdWVPYmplY3RbcGF0aC5wcm9wZXJ0eV0gPSByZXNwb25zZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChzdWNjZXNzQ2FsbGJhY2sgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgc3VjY2Vzc0NhbGxiYWNrKHJlc3BvbnNlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCAoZSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChlcnJvckNhbGxiYWNrICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIGVycm9yQ2FsbGJhY2soZSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwodmlld0lkKSAmJiAhVXRpbHMuaXNOdWxsKGNvbXBvbmVudCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5maXJlRXZlbnQodmlld0lkLCBjb21wb25lbnQsIEV2ZW50VHlwZS5TRVJWSUNFX0NBTExfRkFJTFVSRSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgdHJ1ZSwgJ1BPU1QnLCBmYWxzZSwgcmVxdWVzdCwgdmlld0lkLCBzdWNjZXNzTWVzc2FnZSwgdHJ1ZSwgJ2FwcGxpY2F0aW9uL2pzb24nLCBjb25maWcpO1xuICAgIH1cblxuICAgIGRvUG9zdERhdGEodXJsLCBzdWNjZXNzQ2FsbGJhY2ssIGVycm9yQ2FsbGJhY2ssIHNlY3VyZSwgZGF0YSwgdmlld0lkLCBzdWNjZXNzTWVzc2FnZSkge1xuICAgICAgICB0aGlzLmZldGNoV2l0aEN1c3RvbUNvbmZpZyh1cmwsIHN1Y2Nlc3NDYWxsYmFjaywgZXJyb3JDYWxsYmFjaywgc2VjdXJlLCBudWxsLCAnUE9TVCcsIGZhbHNlLCBkYXRhLCAncmVzdCcpO1xuICAgIH1cblxuICAgIGRvRmV0Y2godXJsLCBzdWNjZXNzQ2FsbGJhY2ssIGVycm9yQ2FsbGJhY2ssIHNlY3VyZSwgbWV0aG9kLCBkb3dubG9hZCwgYm9keSwgdmlld0lkLCBzdWNjZXNzTWVzc2FnZSwgdHJhY2ssIGNvbnRlbnRUeXBlID0gbnVsbCwgY29uZmlnID0gbnVsbCkge1xuICAgICAgICB0aGlzLmZldGNoV2l0aEN1c3RvbUNvbmZpZyh1cmwsIHN1Y2Nlc3NDYWxsYmFjaywgZXJyb3JDYWxsYmFjaywgc2VjdXJlLCBjb25maWcsIG1ldGhvZCwgZG93bmxvYWQsXG4gICAgICAgICAgICBib2R5LCBudWxsLCB2aWV3SWQsIHN1Y2Nlc3NNZXNzYWdlLCB0cmFjaywgY29udGVudFR5cGUpO1xuICAgIH1cblxuICAgIGZldGNoV2l0aEN1c3RvbUNvbmZpZyh1cmwsIHN1Y2Nlc3NDYWxsYmFjaywgZXJyb3JDYWxsYmFjaywgc2VjdXJlLCBjb25maWcsIG1ldGhvZCwgZG93bmxvYWQsIGJvZHksIHNlcnZpY2VUeXBlLCB2aWV3SWQsIHN1Y2Nlc3NNZXNzYWdlLCB0cmFjaywgY29udGVudFR5cGUpIHtcbiAgICAgICAgY29uc3QgYWNjZXNzVG9rZW4gPSBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKCdhY2Nlc3NUb2tlbicpO1xuICAgICAgICBjb25zdCBpZFRva2VuID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgnaWRUb2tlbicpO1xuXG4gICAgICAgIGxldCBkYXRhID0gYm9keSA/IChib2R5IGluc3RhbmNlb2YgRm9ybURhdGEpID8gYm9keSA6IEpTT04uc3RyaW5naWZ5KGJvZHkpIDogbnVsbDtcbiAgICAgICAgbGV0IGZldGNoQ29uZmlnID0gY29uZmlnO1xuXG5cblxuXG5cblxuICAgICAgICBpZiAoVXRpbHMuaXNOdWxsKGZldGNoQ29uZmlnKSkge1xuICAgICAgICAgICAgaWYgKFV0aWxzLmlzTnVsbChzZWN1cmUpIHx8IHNlY3VyZSA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgIGZldGNoQ29uZmlnID0ge1xuICAgICAgICAgICAgICAgICAgICBtZXRob2Q6IFV0aWxzLmlzTnVsbChtZXRob2QpID8gJ0dFVCcgOiBtZXRob2QsXG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICdBdXRob3JpemF0aW9uJzogJ0JlYXJlciAnICsgYWNjZXNzVG9rZW4sXG4gICAgICAgICAgICAgICAgICAgICAgICAnaWRUb2tlbic6IGlkVG9rZW5cblxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBib2R5OiBkYXRhXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZmV0Y2hDb25maWcgPSB7XG4gICAgICAgICAgICAgICAgICAgIG1ldGhvZDogVXRpbHMuaXNOdWxsKG1ldGhvZCkgPyAnR0VUJyA6IG1ldGhvZCxcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICdBY2NlcHQnOiAnYXBwbGljYXRpb24vanNvbidcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgYm9keTogZGF0YVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICgncmVzdCcgPT09IHNlcnZpY2VUeXBlICYmICEoYm9keSBpbnN0YW5jZW9mIEZvcm1EYXRhKSkge1xuICAgICAgICAgICAgICAgIGZldGNoQ29uZmlnLmhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddID0gJ2FwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQ9dXRmLTgnO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoKGJvZHkgaW5zdGFuY2VvZiBGb3JtRGF0YSkpIHtcbiAgICAgICAgICAgICAgICBkZWxldGUgZmV0Y2hDb25maWcuaGVhZGVyc1snQ29udGVudC1UeXBlJ107XG4gICAgICAgICAgICAgICAgZmV0Y2hDb25maWcuaGVhZGVyc1snQWNjZXB0J10gPSAnYXBwbGljYXRpb24vanNvbic7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29udGVudFR5cGUpIHtcbiAgICAgICAgICAgIGZldGNoQ29uZmlnLmhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddID0gY29udGVudFR5cGU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZG93bmxvYWQpIHtcbiAgICAgICAgICAgIGlmICh1cmwuaW5kZXhPZignPycpIDwgMCkge1xuICAgICAgICAgICAgICAgIHVybCArPSAnPyc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHVybCArPSAnJic7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHVybCArPSAnYWNjZXNzX3Rva2VuPScgKyBhY2Nlc3NUb2tlbjtcbiAgICAgICAgICAgIHVybCArPSAnJmlkVG9rZW49JyArIGlkVG9rZW47XG4gICAgICAgICAgICB1cmwgKz0gJyZ0aGVtZVByaW1hcnlDb2xvcj0nICsgZW5jb2RlVVJJQ29tcG9uZW50KGFwcGxpY2F0aW9uTWFuYWdlci5nZXRBcHBsaWNhdGlvblByaW1hcnlDb2xvcigpKTtcbiAgICAgICAgICAgIHVybCArPSAnJnRoZW1lU2Vjb25kYXJ5Q29sb3I9JyArIGVuY29kZVVSSUNvbXBvbmVudChhcHBsaWNhdGlvbk1hbmFnZXIuZ2V0QXBwbGljYXRpb25TZWNvbmRhcnlDb2xvcigpKTtcblxuICAgICAgICAgICAgd2luZG93Lm9wZW4oZW5jb2RlVVJJKHVybCksICdfYmxhbmsnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChVdGlscy5pc051bGwodHJhY2spIHx8IHRyYWNrID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgdHJhY2tQcm9taXNlKFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmV4ZWN1dGVGZXRjaCh1cmwsIGZldGNoQ29uZmlnLCBzdWNjZXNzQ2FsbGJhY2ssIHZpZXdJZCwgc3VjY2Vzc01lc3NhZ2UsIGVycm9yQ2FsbGJhY2spXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5leGVjdXRlRmV0Y2godXJsLCBmZXRjaENvbmZpZywgc3VjY2Vzc0NhbGxiYWNrLCB2aWV3SWQsIHN1Y2Nlc3NNZXNzYWdlLCBlcnJvckNhbGxiYWNrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGV4ZWN1dGVGZXRjaCh1cmwsIGZldGNoQ29uZmlnLCBzdWNjZXNzQ2FsbGJhY2ssIHZpZXdJZCwgc3VjY2Vzc01lc3NhZ2UsIGVycm9yQ2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIGZldGNoKGVuY29kZVVSSSh1cmwpLCBmZXRjaENvbmZpZylcbiAgICAgICAgICAgIC50aGVuKHN0YXR1cylcbiAgICAgICAgICAgIC50aGVuKGpzb24pXG4gICAgICAgICAgICAudGhlbigoZGF0YSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMucHJvY2Vzc1N1Y2Nlc3NmdWxSZXNwb25zZURhdGEobnVsbCwgZGF0YSwgc3VjY2Vzc0NhbGxiYWNrLCB2aWV3SWQsIHN1Y2Nlc3NNZXNzYWdlKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuY2F0Y2goKGUpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIkVSUk9SIEZFVENISU5HIEZST00gVVJMIFtcIiArIHVybCArIFwiXVwiKTtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgICAgICAgICAgICAgIGlmKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGUuc3RhdHVzID09PSA0MDEgJiYgIXVybC5lbmRzV2l0aCgnL2xvZ291dCcpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlcnJvckNhbGxiYWNrKGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXBwbGljYXRpb25NYW5hZ2VyLmNsZWFyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcHBsaWNhdGlvbk1hbmFnZXIubmF2aWdhdGUoJy9sb2dpbicpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yQ2FsbGJhY2sgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yQ2FsbGJhY2soZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcm9jZXNzU3VjY2Vzc2Z1bFJlc3BvbnNlRGF0YShjb21wb25lbnQsIGRhdGEsIHN1Y2Nlc3NDYWxsYmFjaywgdmlld0lkLCBzdWNjZXNzTWVzc2FnZSkge1xuICAgICAgICBsZXQgcmVzcG9uc2U7XG5cbiAgICAgICAgaWYgKCFVdGlscy5pc051bGwoZGF0YSkgJiYgZGF0YS50b1N0cmluZygpXG4gICAgICAgICAgICAudHJpbSgpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmVzcG9uc2UgPSBudWxsO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyB8fCBVdGlscy5pc051bGwoZGF0YSkgfHwgZGF0YS50b1N0cmluZygpXG4gICAgICAgICAgICAudHJpbSgpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmVzcG9uc2UgPSBkYXRhO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICByZXNwb25zZSA9IEpTT04ucGFyc2UoZGF0YSk7XG4gICAgICAgICAgICB9IGNhdGNoIChpZ25vcmVkKSB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2UgPSBkYXRhO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLmRhdGFUeXBlID09PSAnbWVzc2FnZScpIHtcbiAgICAgICAgICAgIGxldCBldmVudCA9IG5ldyBFdmVudChhcHBsaWNhdGlvbk1hbmFnZXIsIHZpZXdJZCwgcmVzcG9uc2UpO1xuICAgICAgICAgICAgZXZlbnRNYW5hZ2VyLmZpcmVFdmVudChFdmVudFR5cGUuTUVTU0FHRV9BUlJJVkVELCBldmVudCk7XG5cbiAgICAgICAgICAgIGlmIChjb21wb25lbnQgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBldmVudCA9IG5ldyBFdmVudChjb21wb25lbnQsIHZpZXdJZCwgcmVzcG9uc2UpO1xuICAgICAgICAgICAgICAgIGV2ZW50TWFuYWdlci5maXJlRXZlbnQoRXZlbnRUeXBlLk1FU1NBR0VfQVJSSVZFRCwgZXZlbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKCFVdGlscy5pc051bGwoc3VjY2Vzc01lc3NhZ2UpKSB7XG4gICAgICAgICAgICBsZXQgbWVzc2FnZSA9IHtcbiAgICAgICAgICAgICAgICBtZXNzYWdlVHlwZTogJ1NVQ0NFU1MnLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGFwcGxpY2F0aW9uTWFuYWdlci5wb3B1bGF0ZVRlbXBsYXRlKHN1Y2Nlc3NNZXNzYWdlLCByZXNwb25zZSlcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGxldCBldmVudCA9IG5ldyBFdmVudChhcHBsaWNhdGlvbk1hbmFnZXIsIHZpZXdJZCwgbWVzc2FnZSk7XG4gICAgICAgICAgICBldmVudE1hbmFnZXIuZmlyZUV2ZW50KEV2ZW50VHlwZS5NRVNTQUdFX0FSUklWRUQsIGV2ZW50KTtcblxuICAgICAgICAgICAgaWYgKGNvbXBvbmVudCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGV2ZW50ID0gbmV3IEV2ZW50KGNvbXBvbmVudCwgdmlld0lkLCBtZXNzYWdlKTtcbiAgICAgICAgICAgICAgICBldmVudE1hbmFnZXIuZmlyZUV2ZW50KEV2ZW50VHlwZS5NRVNTQUdFX0FSUklWRUQsIGV2ZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzdWNjZXNzQ2FsbGJhY2sgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHN1Y2Nlc3NDYWxsYmFjayhyZXNwb25zZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmaXJlRXZlbnQodmlld0lkLCBjb21wb25lbnQsIGV2ZW50VHlwZSwgcmVzcG9uc2UpIHtcbiAgICAgICAgbGV0IGV2ZW50ID0gbmV3IEV2ZW50KGNvbXBvbmVudCwgdmlld0lkLCByZXNwb25zZSk7XG4gICAgICAgIGV2ZW50TWFuYWdlci5maXJlRXZlbnQoZXZlbnRUeXBlLCBldmVudCk7XG4gICAgfVxufVxuXG5jb25zdCBpbnN0YW5jZSA9IG5ldyBSZXN0VXRpbHMoKTtcbmV4cG9ydCBjb25zdCBwb3N0RGF0YSA9ICh1cmwsIHN1Y2Nlc3NDYWxsYmFjaywgZXJyb3JDYWxsYmFjaywgc2VjdXJlLCBkYXRhKSA9PiB7XG4gICAgaW5zdGFuY2UuZG9Qb3N0RGF0YSh1cmwsIHN1Y2Nlc3NDYWxsYmFjaywgZXJyb3JDYWxsYmFjaywgc2VjdXJlLCBkYXRhKTtcbn07XG5cbmV4cG9ydCBjb25zdCBzZW5kUmVxdWVzdCA9ICh1cmwsIHN1Y2Nlc3NDYWxsYmFjaywgZXJyb3JDYWxsYmFjaywgc2VjdXJlLCB0cmFjaykgPT4ge1xuICAgIGluc3RhbmNlLmRvRmV0Y2godXJsLCBzdWNjZXNzQ2FsbGJhY2ssIGVycm9yQ2FsbGJhY2ssIHNlY3VyZSwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCxcbiAgICAgICAgbnVsbCwgdHJhY2spO1xufTtcblxuZXhwb3J0IGNvbnN0IGRvd25sb2FkID0gKHVybCwgc3VjY2Vzc0NhbGxiYWNrLCBlcnJvckNhbGxiYWNrLCBzZWN1cmUpID0+IHtcbiAgICBpbnN0YW5jZS5kb0ZldGNoKHVybCwgc3VjY2Vzc0NhbGxiYWNrLCBlcnJvckNhbGxiYWNrLCBzZWN1cmUsICdHRVQnLCB0cnVlKTtcbn07XG5cbmV4cG9ydCBjb25zdCBpbnZva2VScGMgPSAocnBjRGV0YWlscywgY29tcG9uZW50LCB2aWV3SWQsIHN1Y2Nlc3NDYWxsYmFjaywgZXJyb3JDYWxsYmFjaywgaW52YWxpZFBhcmFtQ2FsbGJhY2ssIHJldHVyblZhbHVlQmluZGluZywgc3VjY2Vzc01lc3NhZ2UsIGV2ZW50ID0gbnVsbCkgPT4ge1xuICAgIGluc3RhbmNlLmludm9rZVJwYyhycGNEZXRhaWxzLCBjb21wb25lbnQsIHZpZXdJZCwgc3VjY2Vzc0NhbGxiYWNrLCBlcnJvckNhbGxiYWNrLCBpbnZhbGlkUGFyYW1DYWxsYmFjaywgcmV0dXJuVmFsdWVCaW5kaW5nLCBzdWNjZXNzTWVzc2FnZSwgZXZlbnQpO1xufTtcblxuZXhwb3J0IGNvbnN0IGludm9rZVJlc3QgPSAoc2VydmljZUNvbmZpZywgY29tcG9uZW50LCB2aWV3SWQsIHN1Y2Nlc3NDYWxsYmFjaywgZXJyb3JDYWxsYmFjaywgaW52YWxpZFBhcmFtQ2FsbGJhY2ssIHJldHVyblZhbHVlQmluZGluZywgc3VjY2Vzc01lc3NhZ2UsIGV2ZW50ID0gbnVsbCkgPT4ge1xuICAgIGluc3RhbmNlLmludm9rZVJlc3Qoc2VydmljZUNvbmZpZywgY29tcG9uZW50LCB2aWV3SWQsIHN1Y2Nlc3NDYWxsYmFjaywgZXJyb3JDYWxsYmFjaywgaW52YWxpZFBhcmFtQ2FsbGJhY2ssIHJldHVyblZhbHVlQmluZGluZywgc3VjY2Vzc01lc3NhZ2UsIGV2ZW50KTtcbn07XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFDLElBQUFBLE1BQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUNELElBQUFDLG9CQUFBLEdBQUFELE9BQUE7QUFDQSxJQUFBRSxtQkFBQSxHQUFBSCxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUcsTUFBQSxHQUFBSixzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUksV0FBQSxHQUFBTCxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUssVUFBQSxHQUFBTixzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQU0sVUFBQSxHQUFBTixPQUFBO0FBQ0EsSUFBQU8sT0FBQSxHQUFBUixzQkFBQSxDQUFB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LEtBQUssQ0FBQztBQUNwQixDQUFDO0FBQUNyRyxPQUFBLENBQUErRSxXQUFBLEdBQUFBLFdBQUE7QUFFSyxNQUFNRCxRQUFRLEdBQUdBLENBQUM5QyxHQUFHLEVBQUVULGVBQWUsRUFBRUMsYUFBYSxFQUFFMEUsTUFBTSxLQUFLO0VBQ3JFbUMsUUFBUSxDQUFDdEMsT0FBTyxDQUFDL0QsR0FBRyxFQUFFVCxlQUFlLEVBQUVDLGFBQWEsRUFBRTBFLE1BQU0sRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDO0FBQzlFLENBQUM7QUFBQ2xHLE9BQUEsQ0FBQThFLFFBQUEsR0FBQUEsUUFBQTtBQUVLLE1BQU1FLFNBQVMsR0FBRyxTQUFBQSxDQUFDQyxVQUFVLEVBQUU1RCxTQUFTLEVBQUVDLE1BQU0sRUFBRUMsZUFBZSxFQUFFQyxhQUFhLEVBQUVDLG9CQUFvQixFQUFFQyxrQkFBa0IsRUFBRUMsY0FBYyxFQUFtQjtFQUFBLElBQWpCQyxLQUFLLEdBQUFDLFNBQUEsQ0FBQUMsTUFBQSxRQUFBRCxTQUFBLFFBQUFFLFNBQUEsR0FBQUYsU0FBQSxNQUFHLElBQUk7RUFDM0p3RyxRQUFRLENBQUNyRCxTQUFTLENBQUNDLFVBQVUsRUFBRTVELFNBQVMsRUFBRUMsTUFBTSxFQUFFQyxlQUFlLEVBQUVDLGFBQWEsRUFBRUMsb0JBQW9CLEVBQUVDLGtCQUFrQixFQUFFQyxjQUFjLEVBQUVDLEtBQUssQ0FBQztBQUN0SixDQUFDO0FBQUM1QixPQUFBLENBQUFnRixTQUFBLEdBQUFBLFNBQUE7QUFFSyxNQUFNN0QsVUFBVSxHQUFHLFNBQUFBLENBQUNtSCxhQUFhLEVBQUVqSCxTQUFTLEVBQUVDLE1BQU0sRUFBRUMsZUFBZSxFQUFFQyxhQUFhLEVBQUVDLG9CQUFvQixFQUFFQyxrQkFBa0IsRUFBRUMsY0FBYyxFQUFtQjtFQUFBLElBQWpCQyxLQUFLLEdBQUFDLFNBQUEsQ0FBQUMsTUFBQSxRQUFBRCxTQUFBLFFBQUFFLFNBQUEsR0FBQUYsU0FBQSxNQUFHLElBQUk7RUFDL0p3RyxRQUFRLENBQUNsSCxVQUFVLENBQUNtSCxhQUFhLEVBQUVqSCxTQUFTLEVBQUVDLE1BQU0sRUFBRUMsZUFBZSxFQUFFQyxhQUFhLEVBQUVDLG9CQUFvQixFQUFFQyxrQkFBa0IsRUFBRUMsY0FBYyxFQUFFQyxLQUFLLENBQUM7QUFDMUosQ0FBQztBQUFDNUIsT0FBQSxDQUFBbUIsVUFBQSxHQUFBQSxVQUFBIiwiaWdub3JlTGlzdCI6W119
405
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfVXRpbHMiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9yZWFjdFByb21pc2VUcmFja2VyIiwiX0FwcGxpY2F0aW9uTWFuYWdlciIsIl9FdmVudCIsIl9PYnNlcnZhYmxlIiwiX0V2ZW50VHlwZSIsIl9wcm9wVHlwZXMiLCJfSGVhZGVyIiwiZSIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0IiwibG9jYXRpb24iLCJleHBvcnRzIiwid2luZG93IiwicHJvdG9jb2wiLCJob3N0bmFtZSIsInN0YXR1cyIsInJlc3BvbnNlIiwib2siLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsImpzb24iLCJ0ZXh0IiwiUmVzdFV0aWxzIiwiaXNQYXJhbVZhbHVlTnVsbCIsInBhcmFtVmFsdWUiLCJVdGlscyIsImlzTnVsbCIsImhhc093blByb3BlcnR5IiwidmFsdWUiLCJpbnZva2VSZXN0Iiwic2VydmljZSIsImNvbXBvbmVudCIsInZpZXdJZCIsInN1Y2Nlc3NDYWxsYmFjayIsImVycm9yQ2FsbGJhY2siLCJpbnZhbGlkUGFyYW1DYWxsYmFjayIsInJldHVyblZhbHVlQmluZGluZyIsInN1Y2Nlc3NNZXNzYWdlIiwiZXZlbnQiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJ1bmRlZmluZWQiLCJ1cmwiLCJzdGFydHNXaXRoIiwiY29uY2F0IiwiYXBwbGljYXRpb25NYW5hZ2VyIiwiZ2V0Q29udGV4dFJvb3QiLCJyZXF1ZXN0Qm9keSIsImhlYWRlcnMiLCJwYXJhbWV0ZXJzIiwicXVlcnlTdHJpbmciLCJwYXRoUGFyYW1ldGVycyIsInJlcXVlc3RCb2R5UGFyYW1Gb3VuZCIsInBhcmFtZXRlciIsInBhcmFtZXRlclZhbHVlIiwicmVzb2x2ZVBhcmFtZXRlclZhbHVlIiwiZGF0YSIsInZhbGlkYXRvciIsImV2YWx1YXRlQm9vbGVhbkV4cHJlc3Npb24iLCJudWxsYWJsZSIsIm5hbWUiLCJjb25zb2xlIiwiZXJyb3IiLCJodHRwUGFyYW1ldGVyVHlwZSIsImluY2x1ZGVQYXJhbWV0ZXJUeXBlcyIsInR5cGUiLCJKU09OIiwic3RyaW5naWZ5IiwicmVzb2x2ZWRWYWx1ZSIsImVuY29kZSIsImVuY29kZVVSSUNvbXBvbmVudCIsImluc3RhbmNlVHlwZSIsImluZGV4T2YiLCJyZXBsYWNlIiwiY29udGVudFR5cGUiLCJtZXRob2QiLCJFcnJvciIsImxvZyIsInBvc3REYXRhIiwicHJvY2Vzc1N1Y2Nlc3NmdWxSZXNwb25zZURhdGEiLCJwYXRoIiwiZ2V0UHJvcGVydHlDaGFpblBhdGgiLCJ2YWx1ZU9iamVjdCIsInByb3BlcnR5IiwiZmlyZUV2ZW50IiwiRXZlbnRUeXBlIiwiU0VSVklDRV9DQUxMX1NVQ0NFU1MiLCJTRVJWSUNFX0NBTExfRkFJTFVSRSIsImRvd25sb2FkIiwic2VuZFJlcXVlc3QiLCJpbnZva2VScGMiLCJycGNEZXRhaWxzIiwicmVxdWVzdCIsImlkIiwic3BsaXQiLCJzZXJ2aWNlSWQiLCJwcm9jZWR1cmVOYW1lIiwiY29uZmlnIiwibW9kdWxlIiwidG9Mb3dlckNhc2UiLCJpIiwicGFyYW1ldGVyQ29uZmlnIiwiaW5kZXgiLCJ2YWwiLCJwdXNoIiwiZG9GZXRjaCIsIndhcm4iLCJkb1Bvc3REYXRhIiwic2VjdXJlIiwiZmV0Y2hXaXRoQ3VzdG9tQ29uZmlnIiwiYm9keSIsInRyYWNrIiwic2VydmljZVR5cGUiLCJhY2Nlc3NUb2tlbiIsInNlc3Npb25TdG9yYWdlIiwiZ2V0SXRlbSIsImlkVG9rZW4iLCJGb3JtRGF0YSIsImZldGNoQ29uZmlnIiwiZ2V0QXBwbGljYXRpb25QcmltYXJ5Q29sb3IiLCJnZXRBcHBsaWNhdGlvblNlY29uZGFyeUNvbG9yIiwib3BlbiIsImVuY29kZVVSSSIsInRyYWNrUHJvbWlzZSIsImV4ZWN1dGVGZXRjaCIsImZldGNoIiwidGhlbiIsImNhdGNoIiwiZW5kc1dpdGgiLCJjbGVhciIsIm5hdmlnYXRlIiwidG9TdHJpbmciLCJ0cmltIiwicGFyc2UiLCJpZ25vcmVkIiwiZGF0YVR5cGUiLCJFdmVudCIsImV2ZW50TWFuYWdlciIsIk1FU1NBR0VfQVJSSVZFRCIsIm1lc3NhZ2UiLCJtZXNzYWdlVHlwZSIsInBvcHVsYXRlVGVtcGxhdGUiLCJldmVudFR5cGUiLCJpbnN0YW5jZSIsIlVJX0FTU0VUX1VSTF9QQVRURVJOIiwid3JhcERlY29kZUlmVWlBc3NldCIsIm9wTGFiZWwiLCJ0ZXN0IiwicmF3IiwiZGVjb2RlZCIsIm1heWJlRGVjb2RlV2lyZSIsInNlcnZpY2VDb25maWciXSwic291cmNlcyI6WyIuLi9zcmMvbGliL1Jlc3RVdGlscy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyLvu79pbXBvcnQgVXRpbHMgZnJvbSAnLi9VdGlscyc7XG5pbXBvcnQge3RyYWNrUHJvbWlzZX0gZnJvbSAncmVhY3QtcHJvbWlzZS10cmFja2VyJztcbmltcG9ydCBhcHBsaWNhdGlvbk1hbmFnZXIgZnJvbSAnLi9BcHBsaWNhdGlvbk1hbmFnZXInO1xuaW1wb3J0IEV2ZW50IGZyb20gJy4vZXZlbnQvRXZlbnQnO1xuaW1wb3J0IGV2ZW50TWFuYWdlciBmcm9tICcuL2V2ZW50L09ic2VydmFibGUnO1xuaW1wb3J0IEV2ZW50VHlwZSBmcm9tICcuL2V2ZW50L0V2ZW50VHlwZSc7XG5pbXBvcnQge2luc3RhbmNlT2Z9IGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgaGVhZGVyIGZyb20gXCIuL2NvbXBvbmVudHMvZGFzaGJvYXJkL2NvbXBvbmVudHMvSGVhZGVyXCI7XG5cbmV4cG9ydCBjb25zdCBsb2NhdGlvbiA9IHdpbmRvdy5sb2NhdGlvbi5wcm90b2NvbCArICcvLycgKyB3aW5kb3cubG9jYXRpb24uaG9zdG5hbWU7XG5jb25zdCBzdGF0dXMgPSAocmVzcG9uc2UpID0+IHtcbiAgICBpZiAocmVzcG9uc2Uub2spIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShyZXNwb25zZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KHJlc3BvbnNlKTtcbiAgICB9XG59O1xuXG5jb25zdCBqc29uID0gKHJlc3BvbnNlKSA9PiB7XG4gICAgcmV0dXJuIHJlc3BvbnNlLnRleHQoKTtcbn07XG5cbmNsYXNzIFJlc3RVdGlscyB7XG4gICAgaXNQYXJhbVZhbHVlTnVsbChwYXJhbVZhbHVlKSB7XG4gICAgICAgIGlmIChVdGlscy5pc051bGwocGFyYW1WYWx1ZSkpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHBhcmFtVmFsdWUuaGFzT3duUHJvcGVydHkoJ3ZhbHVlJykgPyBVdGlscy5pc051bGwocGFyYW1WYWx1ZS52YWx1ZSkgOiBmYWxzZTtcbiAgICB9XG5cbiAgICBpbnZva2VSZXN0KHNlcnZpY2UsIGNvbXBvbmVudCwgdmlld0lkLCBzdWNjZXNzQ2FsbGJhY2ssIGVycm9yQ2FsbGJhY2ssIGludmFsaWRQYXJhbUNhbGxiYWNrLCByZXR1cm5WYWx1ZUJpbmRpbmcsIHN1Y2Nlc3NNZXNzYWdlLCBldmVudCA9IG51bGwpIHtcbiAgICAgICAgbGV0IHVybCA9IHNlcnZpY2UudXJsLnN0YXJ0c1dpdGgoJ2h0dHA6Ly8nKSB8fCBzZXJ2aWNlLnVybC5zdGFydHNXaXRoKCdodHRwczovLycpID8gc2VydmljZS51cmwgOiBsb2NhdGlvbiArIGAke2FwcGxpY2F0aW9uTWFuYWdlci5nZXRDb250ZXh0Um9vdCgpICsgc2VydmljZS51cmx9YDtcbiAgICAgICAgbGV0IHJlcXVlc3RCb2R5ID0gbnVsbDtcbiAgICAgICAgbGV0IGhlYWRlcnMgPSBzZXJ2aWNlLmhlYWRlcnM7XG5cbiAgICAgICAgaWYgKCFVdGlscy5pc051bGwoc2VydmljZS5wYXJhbWV0ZXJzKSkge1xuICAgICAgICAgICAgbGV0IHF1ZXJ5U3RyaW5nID0gJyc7XG4gICAgICAgICAgICBsZXQgcGF0aFBhcmFtZXRlcnMgPSAnJztcbiAgICAgICAgICAgIGxldCByZXF1ZXN0Qm9keVBhcmFtRm91bmQgPSBmYWxzZTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgcGFyYW1ldGVyIG9mIHNlcnZpY2UucGFyYW1ldGVycykge1xuICAgICAgICAgICAgICAgIGxldCBwYXJhbWV0ZXJWYWx1ZSA9IGFwcGxpY2F0aW9uTWFuYWdlci5yZXNvbHZlUGFyYW1ldGVyVmFsdWUocGFyYW1ldGVyLCBldmVudCA/IGV2ZW50LmRhdGEgOiBudWxsKTtcbiAgICAgICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChwYXJhbWV0ZXIudmFsaWRhdG9yKVxuICAgICAgICAgICAgICAgICAgICAmJiAhVXRpbHMuZXZhbHVhdGVCb29sZWFuRXhwcmVzc2lvbihwYXJhbWV0ZXIudmFsaWRhdG9yLm51bGxhYmxlLCBwYXJhbWV0ZXIubmFtZSlcbiAgICAgICAgICAgICAgICAgICAgJiYgdGhpcy5pc1BhcmFtVmFsdWVOdWxsKHBhcmFtZXRlclZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChpbnZhbGlkUGFyYW1DYWxsYmFjaykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0lOVkFMSUQgUEFSQU1FVEVSIDogJywgcGFyYW1ldGVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGludmFsaWRQYXJhbUNhbGxiYWNrKHBhcmFtZXRlcik7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgbGV0IGh0dHBQYXJhbWV0ZXJUeXBlID0gcGFyYW1ldGVyLmh0dHBQYXJhbWV0ZXJUeXBlO1xuICAgICAgICAgICAgICAgIGlmIChVdGlscy5pc051bGwoaHR0cFBhcmFtZXRlclR5cGUpKSB7XG4gICAgICAgICAgICAgICAgICAgIGh0dHBQYXJhbWV0ZXJUeXBlID0gJ1FVRVJZX1BBUkFNRVRFUic7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGh0dHBQYXJhbWV0ZXJUeXBlID09PSAnUVVFUllfUEFSQU1FVEVSJykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChwYXJhbWV0ZXJWYWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChxdWVyeVN0cmluZy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVlcnlTdHJpbmcgKz0gJyYnO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChzZXJ2aWNlLmluY2x1ZGVQYXJhbWV0ZXJUeXBlcykgJiYgc2VydmljZS5pbmNsdWRlUGFyYW1ldGVyVHlwZXMgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWVyeVN0cmluZyArPSBwYXJhbWV0ZXJWYWx1ZS50eXBlICsgJzonO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFyYW1ldGVyVmFsdWUudHlwZSA9PT0gJ01hcE9iamVjdCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJWYWx1ZS52YWx1ZS50eXBlID0gJ01hcEVudGl0eUR0byc7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5U3RyaW5nICs9IHBhcmFtZXRlci5uYW1lICsgJz0nO1xuICAgICAgICAgICAgICAgICAgICAgICAgcXVlcnlTdHJpbmcgKz0gKHR5cGVvZiBwYXJhbWV0ZXJWYWx1ZS52YWx1ZSA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIHBhcmFtZXRlclZhbHVlLnZhbHVlID09PSAnbnVtYmVyJyA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyVmFsdWUudmFsdWUgOiBKU09OLnN0cmluZ2lmeShwYXJhbWV0ZXJWYWx1ZS52YWx1ZSkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGh0dHBQYXJhbWV0ZXJUeXBlID09PSAnUEFUSF9WQVJJQUJMRScpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwocGFyYW1ldGVyVmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgcmVzb2x2ZWRWYWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJhbWV0ZXIuZW5jb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZWRWYWx1ZSA9IHR5cGVvZiBwYXJhbWV0ZXJWYWx1ZS52YWx1ZSA9PT0gJ29iamVjdCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBlbmNvZGVVUklDb21wb25lbnQoSlNPTi5zdHJpbmdpZnkocGFyYW1ldGVyVmFsdWUudmFsdWUpKSA6IHBhcmFtZXRlclZhbHVlLmluc3RhbmNlVHlwZSA9PT0gJ1R5cGVkVmFsdWUnID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuY29kZVVSSUNvbXBvbmVudChwYXJhbWV0ZXJWYWx1ZS52YWx1ZSkgOiBlbmNvZGVVUklDb21wb25lbnQocGFyYW1ldGVyVmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlZFZhbHVlID0gdHlwZW9mIHBhcmFtZXRlclZhbHVlLnZhbHVlID09PSAnb2JqZWN0J1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IEpTT04uc3RyaW5naWZ5KHBhcmFtZXRlclZhbHVlLnZhbHVlKSA6IHBhcmFtZXRlclZhbHVlLmluc3RhbmNlVHlwZSA9PT0gJ1R5cGVkVmFsdWUnID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlclZhbHVlLnZhbHVlIDogcGFyYW1ldGVyVmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIHRoZSBwYXJhbWV0ZXIgaGFzIGEgbmFtZSBhbmQgdGhlIFVSTCBjb250YWlucyB7bmFtZX0sIHJlcGxhY2UgdGhlIHBsYWNlaG9sZGVyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChwYXJhbWV0ZXIubmFtZSkgJiYgdXJsLmluZGV4T2YoJ3snICsgcGFyYW1ldGVyLm5hbWUgKyAnfScpID49IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmwgPSB1cmwucmVwbGFjZSgneycgKyBwYXJhbWV0ZXIubmFtZSArICd9JywgcmVzb2x2ZWRWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEJhY2t3YXJkIGNvbXBhdGliaWxpdHk6IGFwcGVuZCB0byBlbmQgb2YgVVJMXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aFBhcmFtZXRlcnMgKz0gJy8nICsgcmVzb2x2ZWRWYWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChodHRwUGFyYW1ldGVyVHlwZSA9PT0gJ0hFQURFUicpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwocGFyYW1ldGVyVmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWhlYWRlcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzID0ge31cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyc1twYXJhbWV0ZXIubmFtZV0gPSBwYXJhbWV0ZXJWYWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChodHRwUGFyYW1ldGVyVHlwZSA9PT0gJ1JFUVVFU1RfQk9EWScpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlcXVlc3RCb2R5UGFyYW1Gb3VuZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignT25seSBvbmUgcmVxdWVzdCBib2R5IGlzIHBlcm1pdHRlZCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmlzUGFyYW1WYWx1ZU51bGwocGFyYW1ldGVyVmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdEJvZHkgPSBwYXJhbWV0ZXJWYWx1ZS5pbnN0YW5jZVR5cGUgPT09ICdUeXBlZFZhbHVlJyA/IHBhcmFtZXRlclZhbHVlLnZhbHVlIDogcGFyYW1ldGVyVmFsdWU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFyYW1ldGVyVmFsdWUudHlwZSA9PT0gJ01hcE9iamVjdCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdEJvZHkudHlwZSA9ICdNYXBFbnRpdHlEdG8nO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcmVxdWVzdEJvZHkgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0Qm9keS50eXBlID0gcGFyYW1ldGVyVmFsdWUudHlwZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHBhdGhQYXJhbWV0ZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICB1cmwgKz0gcGF0aFBhcmFtZXRlcnM7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChxdWVyeVN0cmluZy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgdXJsICs9ICc/JztcbiAgICAgICAgICAgICAgICB1cmwgKz0gcXVlcnlTdHJpbmc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgY29udGVudFR5cGUgPSBudWxsO1xuXG4gICAgICAgIGlmICghVXRpbHMuaXNOdWxsKGhlYWRlcnMpKSB7XG4gICAgICAgICAgICBjb250ZW50VHlwZSA9IGhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHJlcXVlc3RCb2R5ICE9PSBudWxsICYmIHNlcnZpY2UubWV0aG9kID09PSAnR0VUJykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdBIHJlcXVlc3QgYm9keSBwYXJhbWV0ZXIgY2Fubm90IGJlIHNwZWNpZmllZCBmb3IgYSBHRVQgcmVxdWVzdCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHJlcXVlc3RCb2R5ICE9PSBudWxsIHx8IHNlcnZpY2UubWV0aG9kID09PSAnUE9TVCcpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiUE9TVElORyBSRVNUIFJFUVVFU1QgQk9EWSA6IFwiLCByZXF1ZXN0Qm9keSk7XG4gICAgICAgICAgICBwb3N0RGF0YSh1cmwsIChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMucHJvY2Vzc1N1Y2Nlc3NmdWxSZXNwb25zZURhdGEoY29tcG9uZW50LCByZXNwb25zZSwgc3VjY2Vzc0NhbGxiYWNrLCB2aWV3SWQsIHN1Y2Nlc3NNZXNzYWdlKTtcblxuICAgICAgICAgICAgICAgIGxldCBwYXRoID0gVXRpbHMuZ2V0UHJvcGVydHlDaGFpblBhdGgocmV0dXJuVmFsdWVCaW5kaW5nKTtcbiAgICAgICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChwYXRoLnZhbHVlT2JqZWN0KSAmJiAhVXRpbHMuaXNOdWxsKHBhdGgucHJvcGVydHkpKSB7XG4gICAgICAgICAgICAgICAgICAgIHBhdGgudmFsdWVPYmplY3RbcGF0aC5wcm9wZXJ0eV0gPSByZXNwb25zZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLmZpcmVFdmVudCh2aWV3SWQsIGNvbXBvbmVudCwgRXZlbnRUeXBlLlNFUlZJQ0VfQ0FMTF9TVUNDRVNTLCByZXNwb25zZSk7XG4gICAgICAgICAgICB9LCAoZSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghVXRpbHMuaXNOdWxsKGVycm9yQ2FsbGJhY2spKSB7XG4gICAgICAgICAgICAgICAgICAgIGVycm9yQ2FsbGJhY2soZSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy5maXJlRXZlbnQodmlld0lkLCBjb21wb25lbnQsIEV2ZW50VHlwZS5TRVJWSUNFX0NBTExfRkFJTFVSRSk7XG4gICAgICAgICAgICB9LCAhc2VydmljZS51cmwuc3RhcnRzV2l0aCgnaHR0cDovLycpLCByZXF1ZXN0Qm9keSk7XG4gICAgICAgIH0gZWxzZSBpZiAoY29udGVudFR5cGUgPT09ICdhcHBsaWNhdGlvbi9wZGYnIHx8IGNvbnRlbnRUeXBlID09PSAnYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsJykge1xuICAgICAgICAgICAgZG93bmxvYWQodXJsLCAoZGF0YSkgPT4ge1xuICAgICAgICAgICAgfSwgKGUpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChlcnJvckNhbGxiYWNrKSkge1xuICAgICAgICAgICAgICAgICAgICBlcnJvckNhbGxiYWNrKGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc2VuZFJlcXVlc3QodXJsLCAoZGF0YSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMucHJvY2Vzc1N1Y2Nlc3NmdWxSZXNwb25zZURhdGEoY29tcG9uZW50LCBkYXRhLCBzdWNjZXNzQ2FsbGJhY2ssIHZpZXdJZCwgc3VjY2Vzc01lc3NhZ2UpO1xuICAgICAgICAgICAgICAgIGxldCBwYXRoID0gVXRpbHMuZ2V0UHJvcGVydHlDaGFpblBhdGgocmV0dXJuVmFsdWVCaW5kaW5nKTtcbiAgICAgICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChwYXRoLnZhbHVlT2JqZWN0KSAmJiAhVXRpbHMuaXNOdWxsKHBhdGgucHJvcGVydHkpKSB7XG4gICAgICAgICAgICAgICAgICAgIHBhdGgudmFsdWVPYmplY3RbcGF0aC5wcm9wZXJ0eV0gPSBkYXRhO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMuZmlyZUV2ZW50KHZpZXdJZCwgY29tcG9uZW50LCBFdmVudFR5cGUuU0VSVklDRV9DQUxMX1NVQ0NFU1MsIGRhdGEpO1xuICAgICAgICAgICAgfSwgKGUpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmZpcmVFdmVudCh2aWV3SWQsIGNvbXBvbmVudCwgRXZlbnRUeXBlLlNFUlZJQ0VfQ0FMTF9GQUlMVVJFKTtcbiAgICAgICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChlcnJvckNhbGxiYWNrKSkge1xuICAgICAgICAgICAgICAgICAgICBlcnJvckNhbGxiYWNrKGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sICFzZXJ2aWNlLnVybC5zdGFydHNXaXRoKCdodHRwOi8vJykpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaW52b2tlUnBjKHJwY0RldGFpbHMsIGNvbXBvbmVudCwgdmlld0lkLCBzdWNjZXNzQ2FsbGJhY2ssIGVycm9yQ2FsbGJhY2ssIGludmFsaWRQYXJhbUNhbGxiYWNrLCByZXR1cm5WYWx1ZUJpbmRpbmcsIHN1Y2Nlc3NNZXNzYWdlLCBldmVudCA9IG51bGwpIHtcbiAgICAgICAgbGV0IHJlcXVlc3QgPSB7fTtcbiAgICAgICAgcmVxdWVzdC5pZCA9IHZpZXdJZDtcblxuICAgICAgICBsZXQgc3BsaXQgPSBycGNEZXRhaWxzLnNlcnZpY2VJZC5zcGxpdCgnLicpO1xuICAgICAgICByZXF1ZXN0LnNlcnZpY2UgPSBzcGxpdFsxXTtcbiAgICAgICAgcmVxdWVzdC5tZXRob2QgPSBycGNEZXRhaWxzLnByb2NlZHVyZU5hbWU7XG5cbiAgICAgICAgbGV0IGNvbmZpZyA9IHt9O1xuICAgICAgICBjb25maWcuaGVhZGVycyA9IHt9O1xuICAgICAgICBsZXQgbW9kdWxlID0gc3BsaXRbMF0udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgaWYgKCFVdGlscy5pc051bGwocnBjRGV0YWlscy5wYXJhbWV0ZXJzKSAmJiBycGNEZXRhaWxzLnBhcmFtZXRlcnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgcmVxdWVzdC5wYXJhbWV0ZXJzID0gW107XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJwY0RldGFpbHMucGFyYW1ldGVycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGxldCBwYXJhbWV0ZXJDb25maWcgPSBycGNEZXRhaWxzLnBhcmFtZXRlcnNbaV07XG4gICAgICAgICAgICAgICAgbGV0IHBhcmFtZXRlciA9IHt9O1xuICAgICAgICAgICAgICAgIHBhcmFtZXRlci5uYW1lID0gcGFyYW1ldGVyQ29uZmlnLm5hbWU7XG4gICAgICAgICAgICAgICAgcGFyYW1ldGVyLmluZGV4ID0gcGFyYW1ldGVyQ29uZmlnLmluZGV4O1xuXG4gICAgICAgICAgICAgICAgbGV0IHZhbCA9IGFwcGxpY2F0aW9uTWFuYWdlci5yZXNvbHZlUGFyYW1ldGVyVmFsdWUocGFyYW1ldGVyQ29uZmlnLCBldmVudCA/IGV2ZW50LmRhdGEgOiBudWxsKTtcblxuICAgICAgICAgICAgICAgIGlmICghVXRpbHMuaXNOdWxsKHZhbCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyLnZhbHVlID0gdmFsLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXIudHlwZSA9IHZhbC50eXBlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcGFyYW1ldGVyLnZhbHVlID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXIudmFsdWUgPSBudWxsO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChVdGlscy5pc051bGwocGFyYW1ldGVyLnR5cGUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlci50eXBlID0gJ1N0cmluZyc7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwocGFyYW1ldGVyQ29uZmlnLnZhbGlkYXRvcilcbiAgICAgICAgICAgICAgICAgICAgJiYgVXRpbHMuZXZhbHVhdGVCb29sZWFuRXhwcmVzc2lvbihwYXJhbWV0ZXJDb25maWcudmFsaWRhdG9yLm51bGxhYmxlLCBwYXJhbWV0ZXJDb25maWcubmFtZSkgPT09IGZhbHNlICYmIHRoaXMuaXNQYXJhbVZhbHVlTnVsbChwYXJhbWV0ZXIpKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghVXRpbHMuaXNOdWxsKGludmFsaWRQYXJhbUNhbGxiYWNrKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignSU5WQUxJRCBQQVJBTUVURVIgOiAnLCBwYXJhbWV0ZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaW52YWxpZFBhcmFtQ2FsbGJhY2socGFyYW1ldGVyKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXF1ZXN0LnBhcmFtZXRlcnMucHVzaChwYXJhbWV0ZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5kb0ZldGNoKGxvY2F0aW9uICsgYXBwbGljYXRpb25NYW5hZ2VyLmdldENvbnRleHRSb290KCkgKyAnLycgKyBtb2R1bGUgKyAnL2FwaS92MS9ycGMvaW52b2tlJyxcbiAgICAgICAgICAgIChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghVXRpbHMuaXNOdWxsKHZpZXdJZCkgJiYgIVV0aWxzLmlzTnVsbChjb21wb25lbnQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmlyZUV2ZW50KHZpZXdJZCwgY29tcG9uZW50LCBFdmVudFR5cGUuU0VSVklDRV9DQUxMX1NVQ0NFU1MsIHJlc3BvbnNlKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oXCJObyB2aWV3IGlkIG9yIGNvbXBvbmVudCBzcGVjaWZpZWQgd2hpbGUgZXhlY3V0aW5nIFtcIiArIG1vZHVsZSArIFwiXSBycGMgOiBcIiwgcnBjRGV0YWlscyk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHJldHVyblZhbHVlQmluZGluZykge1xuICAgICAgICAgICAgICAgICAgICBsZXQgcGF0aCA9IFV0aWxzLmdldFByb3BlcnR5Q2hhaW5QYXRoKHJldHVyblZhbHVlQmluZGluZyk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghVXRpbHMuaXNOdWxsKHBhdGgudmFsdWVPYmplY3QpICYmICFVdGlscy5pc051bGwocGF0aC5wcm9wZXJ0eSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhdGgudmFsdWVPYmplY3RbcGF0aC5wcm9wZXJ0eV0gPSByZXNwb25zZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChzdWNjZXNzQ2FsbGJhY2sgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgc3VjY2Vzc0NhbGxiYWNrKHJlc3BvbnNlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCAoZSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChlcnJvckNhbGxiYWNrICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIGVycm9yQ2FsbGJhY2soZSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwodmlld0lkKSAmJiAhVXRpbHMuaXNOdWxsKGNvbXBvbmVudCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5maXJlRXZlbnQodmlld0lkLCBjb21wb25lbnQsIEV2ZW50VHlwZS5TRVJWSUNFX0NBTExfRkFJTFVSRSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgdHJ1ZSwgJ1BPU1QnLCBmYWxzZSwgcmVxdWVzdCwgdmlld0lkLCBzdWNjZXNzTWVzc2FnZSwgdHJ1ZSwgJ2FwcGxpY2F0aW9uL2pzb24nLCBjb25maWcpO1xuICAgIH1cblxuICAgIGRvUG9zdERhdGEodXJsLCBzdWNjZXNzQ2FsbGJhY2ssIGVycm9yQ2FsbGJhY2ssIHNlY3VyZSwgZGF0YSwgdmlld0lkLCBzdWNjZXNzTWVzc2FnZSkge1xuICAgICAgICB0aGlzLmZldGNoV2l0aEN1c3RvbUNvbmZpZyh1cmwsIHN1Y2Nlc3NDYWxsYmFjaywgZXJyb3JDYWxsYmFjaywgc2VjdXJlLCBudWxsLCAnUE9TVCcsIGZhbHNlLCBkYXRhLCAncmVzdCcpO1xuICAgIH1cblxuICAgIGRvRmV0Y2godXJsLCBzdWNjZXNzQ2FsbGJhY2ssIGVycm9yQ2FsbGJhY2ssIHNlY3VyZSwgbWV0aG9kLCBkb3dubG9hZCwgYm9keSwgdmlld0lkLCBzdWNjZXNzTWVzc2FnZSwgdHJhY2ssIGNvbnRlbnRUeXBlID0gbnVsbCwgY29uZmlnID0gbnVsbCkge1xuICAgICAgICB0aGlzLmZldGNoV2l0aEN1c3RvbUNvbmZpZyh1cmwsIHN1Y2Nlc3NDYWxsYmFjaywgZXJyb3JDYWxsYmFjaywgc2VjdXJlLCBjb25maWcsIG1ldGhvZCwgZG93bmxvYWQsXG4gICAgICAgICAgICBib2R5LCBudWxsLCB2aWV3SWQsIHN1Y2Nlc3NNZXNzYWdlLCB0cmFjaywgY29udGVudFR5cGUpO1xuICAgIH1cblxuICAgIGZldGNoV2l0aEN1c3RvbUNvbmZpZyh1cmwsIHN1Y2Nlc3NDYWxsYmFjaywgZXJyb3JDYWxsYmFjaywgc2VjdXJlLCBjb25maWcsIG1ldGhvZCwgZG93bmxvYWQsIGJvZHksIHNlcnZpY2VUeXBlLCB2aWV3SWQsIHN1Y2Nlc3NNZXNzYWdlLCB0cmFjaywgY29udGVudFR5cGUpIHtcbiAgICAgICAgY29uc3QgYWNjZXNzVG9rZW4gPSBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKCdhY2Nlc3NUb2tlbicpO1xuICAgICAgICBjb25zdCBpZFRva2VuID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgnaWRUb2tlbicpO1xuXG4gICAgICAgIGxldCBkYXRhID0gYm9keSA/IChib2R5IGluc3RhbmNlb2YgRm9ybURhdGEpID8gYm9keSA6IEpTT04uc3RyaW5naWZ5KGJvZHkpIDogbnVsbDtcbiAgICAgICAgbGV0IGZldGNoQ29uZmlnID0gY29uZmlnO1xuXG4gICAgICAgIGlmIChVdGlscy5pc051bGwoZmV0Y2hDb25maWcpKSB7XG4gICAgICAgICAgICBpZiAoVXRpbHMuaXNOdWxsKHNlY3VyZSkgfHwgc2VjdXJlID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgZmV0Y2hDb25maWcgPSB7XG4gICAgICAgICAgICAgICAgICAgIG1ldGhvZDogVXRpbHMuaXNOdWxsKG1ldGhvZCkgPyAnR0VUJyA6IG1ldGhvZCxcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ0F1dGhvcml6YXRpb24nOiAnQmVhcmVyICcgKyBhY2Nlc3NUb2tlbixcbiAgICAgICAgICAgICAgICAgICAgICAgICdpZFRva2VuJzogaWRUb2tlblxuXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGJvZHk6IGRhdGFcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBmZXRjaENvbmZpZyA9IHtcbiAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiBVdGlscy5pc051bGwobWV0aG9kKSA/ICdHRVQnIDogbWV0aG9kLFxuICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ0FjY2VwdCc6ICdhcHBsaWNhdGlvbi9qc29uJ1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBib2R5OiBkYXRhXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCdyZXN0JyA9PT0gc2VydmljZVR5cGUgJiYgIShib2R5IGluc3RhbmNlb2YgRm9ybURhdGEpKSB7XG4gICAgICAgICAgICAgICAgZmV0Y2hDb25maWcuaGVhZGVyc1snQ29udGVudC1UeXBlJ10gPSAnYXBwbGljYXRpb24vanNvbjsgY2hhcnNldD11dGYtOCc7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICgoYm9keSBpbnN0YW5jZW9mIEZvcm1EYXRhKSkge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBmZXRjaENvbmZpZy5oZWFkZXJzWydDb250ZW50LVR5cGUnXTtcbiAgICAgICAgICAgICAgICBmZXRjaENvbmZpZy5oZWFkZXJzWydBY2NlcHQnXSA9ICdhcHBsaWNhdGlvbi9qc29uJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjb250ZW50VHlwZSkge1xuICAgICAgICAgICAgZmV0Y2hDb25maWcuaGVhZGVyc1snQ29udGVudC1UeXBlJ10gPSBjb250ZW50VHlwZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChkb3dubG9hZCkge1xuICAgICAgICAgICAgaWYgKHVybC5pbmRleE9mKCc/JykgPCAwKSB7XG4gICAgICAgICAgICAgICAgdXJsICs9ICc/JztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdXJsICs9ICcmJztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdXJsICs9ICdhY2Nlc3NfdG9rZW49JyArIGFjY2Vzc1Rva2VuO1xuICAgICAgICAgICAgdXJsICs9ICcmaWRUb2tlbj0nICsgaWRUb2tlbjtcbiAgICAgICAgICAgIHVybCArPSAnJnRoZW1lUHJpbWFyeUNvbG9yPScgKyBlbmNvZGVVUklDb21wb25lbnQoYXBwbGljYXRpb25NYW5hZ2VyLmdldEFwcGxpY2F0aW9uUHJpbWFyeUNvbG9yKCkpO1xuICAgICAgICAgICAgdXJsICs9ICcmdGhlbWVTZWNvbmRhcnlDb2xvcj0nICsgZW5jb2RlVVJJQ29tcG9uZW50KGFwcGxpY2F0aW9uTWFuYWdlci5nZXRBcHBsaWNhdGlvblNlY29uZGFyeUNvbG9yKCkpO1xuXG4gICAgICAgICAgICB3aW5kb3cub3BlbihlbmNvZGVVUkkodXJsKSwgJ19ibGFuaycpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKFV0aWxzLmlzTnVsbCh0cmFjaykgfHwgdHJhY2sgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICB0cmFja1Byb21pc2UoXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZXhlY3V0ZUZldGNoKHVybCwgZmV0Y2hDb25maWcsIHN1Y2Nlc3NDYWxsYmFjaywgdmlld0lkLCBzdWNjZXNzTWVzc2FnZSwgZXJyb3JDYWxsYmFjaylcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmV4ZWN1dGVGZXRjaCh1cmwsIGZldGNoQ29uZmlnLCBzdWNjZXNzQ2FsbGJhY2ssIHZpZXdJZCwgc3VjY2Vzc01lc3NhZ2UsIGVycm9yQ2FsbGJhY2spO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZXhlY3V0ZUZldGNoKHVybCwgZmV0Y2hDb25maWcsIHN1Y2Nlc3NDYWxsYmFjaywgdmlld0lkLCBzdWNjZXNzTWVzc2FnZSwgZXJyb3JDYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gZmV0Y2goZW5jb2RlVVJJKHVybCksIGZldGNoQ29uZmlnKVxuICAgICAgICAgICAgLnRoZW4oc3RhdHVzKVxuICAgICAgICAgICAgLnRoZW4oanNvbilcbiAgICAgICAgICAgIC50aGVuKChkYXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5wcm9jZXNzU3VjY2Vzc2Z1bFJlc3BvbnNlRGF0YShudWxsLCBkYXRhLCBzdWNjZXNzQ2FsbGJhY2ssIHZpZXdJZCwgc3VjY2Vzc01lc3NhZ2UpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5jYXRjaCgoZSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiRVJST1IgRkVUQ0hJTkcgRlJPTSBVUkwgW1wiICsgdXJsICsgXCJdXCIpO1xuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgICAgICAgICAgICAgaWYoZSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZS5zdGF0dXMgPT09IDQwMSAmJiAhdXJsLmVuZHNXaXRoKCcvbG9nb3V0JykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yQ2FsbGJhY2soZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcHBsaWNhdGlvbk1hbmFnZXIuY2xlYXIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFwcGxpY2F0aW9uTWFuYWdlci5uYXZpZ2F0ZSgnL2xvZ2luJyk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZiAoZXJyb3JDYWxsYmFjayAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JDYWxsYmFjayhlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByb2Nlc3NTdWNjZXNzZnVsUmVzcG9uc2VEYXRhKGNvbXBvbmVudCwgZGF0YSwgc3VjY2Vzc0NhbGxiYWNrLCB2aWV3SWQsIHN1Y2Nlc3NNZXNzYWdlKSB7XG4gICAgICAgIGxldCByZXNwb25zZTtcblxuICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChkYXRhKSAmJiBkYXRhLnRvU3RyaW5nKClcbiAgICAgICAgICAgIC50cmltKCkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXNwb25zZSA9IG51bGw7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGRhdGEgPT09ICdvYmplY3QnIHx8IFV0aWxzLmlzTnVsbChkYXRhKSB8fCBkYXRhLnRvU3RyaW5nKClcbiAgICAgICAgICAgIC50cmltKCkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXNwb25zZSA9IGRhdGE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHJlc3BvbnNlID0gSlNPTi5wYXJzZShkYXRhKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGlnbm9yZWQpIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZSA9IGRhdGE7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UuZGF0YVR5cGUgPT09ICdtZXNzYWdlJykge1xuICAgICAgICAgICAgbGV0IGV2ZW50ID0gbmV3IEV2ZW50KGFwcGxpY2F0aW9uTWFuYWdlciwgdmlld0lkLCByZXNwb25zZSk7XG4gICAgICAgICAgICBldmVudE1hbmFnZXIuZmlyZUV2ZW50KEV2ZW50VHlwZS5NRVNTQUdFX0FSUklWRUQsIGV2ZW50KTtcblxuICAgICAgICAgICAgaWYgKGNvbXBvbmVudCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGV2ZW50ID0gbmV3IEV2ZW50KGNvbXBvbmVudCwgdmlld0lkLCByZXNwb25zZSk7XG4gICAgICAgICAgICAgICAgZXZlbnRNYW5hZ2VyLmZpcmVFdmVudChFdmVudFR5cGUuTUVTU0FHRV9BUlJJVkVELCBldmVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoIVV0aWxzLmlzTnVsbChzdWNjZXNzTWVzc2FnZSkpIHtcbiAgICAgICAgICAgIGxldCBtZXNzYWdlID0ge1xuICAgICAgICAgICAgICAgIG1lc3NhZ2VUeXBlOiAnU1VDQ0VTUycsXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogYXBwbGljYXRpb25NYW5hZ2VyLnBvcHVsYXRlVGVtcGxhdGUoc3VjY2Vzc01lc3NhZ2UsIHJlc3BvbnNlKVxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgbGV0IGV2ZW50ID0gbmV3IEV2ZW50KGFwcGxpY2F0aW9uTWFuYWdlciwgdmlld0lkLCBtZXNzYWdlKTtcbiAgICAgICAgICAgIGV2ZW50TWFuYWdlci5maXJlRXZlbnQoRXZlbnRUeXBlLk1FU1NBR0VfQVJSSVZFRCwgZXZlbnQpO1xuXG4gICAgICAgICAgICBpZiAoY29tcG9uZW50ICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgZXZlbnQgPSBuZXcgRXZlbnQoY29tcG9uZW50LCB2aWV3SWQsIG1lc3NhZ2UpO1xuICAgICAgICAgICAgICAgIGV2ZW50TWFuYWdlci5maXJlRXZlbnQoRXZlbnRUeXBlLk1FU1NBR0VfQVJSSVZFRCwgZXZlbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN1Y2Nlc3NDYWxsYmFjayAhPT0gbnVsbCkge1xuICAgICAgICAgICAgc3VjY2Vzc0NhbGxiYWNrKHJlc3BvbnNlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZpcmVFdmVudCh2aWV3SWQsIGNvbXBvbmVudCwgZXZlbnRUeXBlLCByZXNwb25zZSkge1xuICAgICAgICBsZXQgZXZlbnQgPSBuZXcgRXZlbnQoY29tcG9uZW50LCB2aWV3SWQsIHJlc3BvbnNlKTtcbiAgICAgICAgZXZlbnRNYW5hZ2VyLmZpcmVFdmVudChldmVudFR5cGUsIGV2ZW50KTtcbiAgICB9XG59XG5cbmNvbnN0IGluc3RhbmNlID0gbmV3IFJlc3RVdGlscygpO1xuLy8gQ0RVSSBVSS1hc3NldCBVUkxzICh2aWV3IC8gbWVudSAvIGRhc2hib2FyZCkgYXJlIHNlcnZlZCB3cmFwcGVkIGluIGFcbi8vIHtfY2R1aV96OiBcIjxiYXNlNjQoZ3ppcChqc29uKSk+XCJ9IGVudmVsb3BlIGJ5IG91aS1zZXJ2ZXInc1xuLy8gd2lyZUNvbXByZXNzaW9uIHV0aWwg4oCUIHNlZSBvdWktc2VydmVyL3NyYy93ZWIvdXRpbC93aXJlQ29tcHJlc3Npb24udHMuXG4vLyBEZWNvZGUgdHJhbnNwYXJlbnRseSBoZXJlIHNvIGV2ZXJ5IGxvYWRlciBkb3duc3RyZWFtIHNlZXMgdGhlIHJhd1xuLy8gQ0RVSSBKU09OIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0aGUgc2VydmVyIGhhcyBjb21wcmVzc2lvbiBlbmFibGVkLlxuLy8gR2F0ZWQgb24gdGhlIC91aS9hcGkvdiovIHBhdGggc28gbm9uLVVJIGZldGNoZXMgYXJlIHVuYWZmZWN0ZWQuXG5jb25zdCBVSV9BU1NFVF9VUkxfUEFUVEVSTiA9IC9cXC91aVxcL2FwaVxcL3ZbMC05XStcXC8vO1xuXG4vLyBXcmFwcyBhIHN1Y2Nlc3MgY2FsbGJhY2sgd2l0aCB0aGUgd2lyZS1lbnZlbG9wZSBkZWNvZGVyIHdoZW4gdGhlIFVSTFxuLy8gbWF0Y2hlcyB0aGUgVUktYXNzZXQgcGF0dGVybi4gQm90aCBzZW5kUmVxdWVzdCAoR0VUIC8gZG9GZXRjaCBwYXRoKVxuLy8gYW5kIHBvc3REYXRhIChQT1NUIC8gZG9Qb3N0RGF0YSBwYXRoKSBuZWVkIHRoaXMg4oCUIG1lbnVzIGFuZFxuLy8gZGFzaGJvYXJkcyBhcmUgc29tZXRpbWVzIGxvYWRlZCB2aWEgUE9TVCB3aXRoIGNyaXRlcmlhIGJvZGllcywgc29cbi8vIHRoZXkgaGl0IG91aS1zZXJ2ZXIncyBjb21wcmVzc2lvbiB0b28uXG5jb25zdCB3cmFwRGVjb2RlSWZVaUFzc2V0ID0gKHVybCwgc3VjY2Vzc0NhbGxiYWNrLCBvcExhYmVsKSA9PiB7XG4gICAgaWYgKCF1cmwgfHwgIVVJX0FTU0VUX1VSTF9QQVRURVJOLnRlc3QodXJsKSB8fCAhc3VjY2Vzc0NhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiBzdWNjZXNzQ2FsbGJhY2s7XG4gICAgfVxuICAgIHJldHVybiBhc3luYyAocmF3KSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBkZWNvZGVkID0gYXdhaXQgVXRpbHMubWF5YmVEZWNvZGVXaXJlKHJhdyk7XG4gICAgICAgICAgICBzdWNjZXNzQ2FsbGJhY2soZGVjb2RlZCk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYFske29wTGFiZWx9XSBDRFVJIHdpcmUgZGVjb2RlIGZhaWxlZCBmb3JgLCB1cmwsIGUpO1xuICAgICAgICAgICAgLy8gRmFsbCBiYWNrIHRvIHJhdyBzbyB0aGUgY2FsbGVyIHN0aWxsIGdldHMgKnNvbWV0aGluZyo7XG4gICAgICAgICAgICAvLyBtaXNzaW5nIF9jZHVpX3ogYW5kIGRlY29kZSBmYWlsdXJlcyBib3RoIGZsb3cgdGhyb3VnaFxuICAgICAgICAgICAgLy8gbWF5YmVEZWNvZGVXaXJlJ3Mgb3duIHBhc3MtdGhyb3VnaCBiZWhhdmlvdXIuXG4gICAgICAgICAgICBzdWNjZXNzQ2FsbGJhY2socmF3KTtcbiAgICAgICAgfVxuICAgIH07XG59O1xuXG5leHBvcnQgY29uc3QgcG9zdERhdGEgPSAodXJsLCBzdWNjZXNzQ2FsbGJhY2ssIGVycm9yQ2FsbGJhY2ssIHNlY3VyZSwgZGF0YSkgPT4ge1xuICAgIGluc3RhbmNlLmRvUG9zdERhdGEodXJsLCB3cmFwRGVjb2RlSWZVaUFzc2V0KHVybCwgc3VjY2Vzc0NhbGxiYWNrLCAncG9zdERhdGEnKSwgZXJyb3JDYWxsYmFjaywgc2VjdXJlLCBkYXRhKTtcbn07XG5cbmV4cG9ydCBjb25zdCBzZW5kUmVxdWVzdCA9ICh1cmwsIHN1Y2Nlc3NDYWxsYmFjaywgZXJyb3JDYWxsYmFjaywgc2VjdXJlLCB0cmFjaykgPT4ge1xuICAgIGluc3RhbmNlLmRvRmV0Y2godXJsLCB3cmFwRGVjb2RlSWZVaUFzc2V0KHVybCwgc3VjY2Vzc0NhbGxiYWNrLCAnc2VuZFJlcXVlc3QnKSxcbiAgICAgICAgZXJyb3JDYWxsYmFjaywgc2VjdXJlLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCB0cmFjayk7XG59O1xuXG5leHBvcnQgY29uc3QgZG93bmxvYWQgPSAodXJsLCBzdWNjZXNzQ2FsbGJhY2ssIGVycm9yQ2FsbGJhY2ssIHNlY3VyZSkgPT4ge1xuICAgIGluc3RhbmNlLmRvRmV0Y2godXJsLCBzdWNjZXNzQ2FsbGJhY2ssIGVycm9yQ2FsbGJhY2ssIHNlY3VyZSwgJ0dFVCcsIHRydWUpO1xufTtcblxuZXhwb3J0IGNvbnN0IGludm9rZVJwYyA9IChycGNEZXRhaWxzLCBjb21wb25lbnQsIHZpZXdJZCwgc3VjY2Vzc0NhbGxiYWNrLCBlcnJvckNhbGxiYWNrLCBpbnZhbGlkUGFyYW1DYWxsYmFjaywgcmV0dXJuVmFsdWVCaW5kaW5nLCBzdWNjZXNzTWVzc2FnZSwgZXZlbnQgPSBudWxsKSA9PiB7XG4gICAgaW5zdGFuY2UuaW52b2tlUnBjKHJwY0RldGFpbHMsIGNvbXBvbmVudCwgdmlld0lkLCBzdWNjZXNzQ2FsbGJhY2ssIGVycm9yQ2FsbGJhY2ssIGludmFsaWRQYXJhbUNhbGxiYWNrLCByZXR1cm5WYWx1ZUJpbmRpbmcsIHN1Y2Nlc3NNZXNzYWdlLCBldmVudCk7XG59O1xuXG5leHBvcnQgY29uc3QgaW52b2tlUmVzdCA9IChzZXJ2aWNlQ29uZmlnLCBjb21wb25lbnQsIHZpZXdJZCwgc3VjY2Vzc0NhbGxiYWNrLCBlcnJvckNhbGxiYWNrLCBpbnZhbGlkUGFyYW1DYWxsYmFjaywgcmV0dXJuVmFsdWVCaW5kaW5nLCBzdWNjZXNzTWVzc2FnZSwgZXZlbnQgPSBudWxsKSA9PiB7XG4gICAgaW5zdGFuY2UuaW52b2tlUmVzdChzZXJ2aWNlQ29uZmlnLCBjb21wb25lbnQsIHZpZXdJZCwgc3VjY2Vzc0NhbGxiYWNrLCBlcnJvckNhbGxiYWNrLCBpbnZhbGlkUGFyYW1DYWxsYmFjaywgcmV0dXJuVmFsdWVCaW5kaW5nLCBzdWNjZXNzTWVzc2FnZSwgZXZlbnQpO1xufTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUMsSUFBQUEsTUFBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQ0QsSUFBQUMsb0JBQUEsR0FBQUQsT0FBQTtBQUNBLElBQUFFLG1CQUFBLEdBQUFILHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBRyxNQUFBLEdBQUFKLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBSSxXQUFBLEdBQUFMLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBSyxVQUFBLEdBQUFOLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBTSxVQUFBLEdBQUFOLE9BQUE7QUFDQSxJQUFBTyxPQUFBLEdBQUFSLHNCQUFBLENBQUFDLE9BQUE7QUFBOEQsU0FBQUQsdUJBQUFTLENBQUEsV0FBQUEsQ0FBQSxJQUFBQSxDQUFBLENBQUFDLFVBQUEsR0FBQUQsQ0FBQSxLQUFBRSxPQUFBLEVBQUFGLENBQUE7QUFFdkQsTUFBTUcsUUFBUSxHQUFBQyxPQUFBLENBQUFELFFBQUEsR0FBR0UsTUFBTSxDQUFDRixRQUFRLENBQUNHLFFBQVEsR0FBRyxJQUFJLEdB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