parse-server 9.8.0-alpha.9 → 9.8.0

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.
package/lib/Config.js CHANGED
@@ -615,7 +615,12 @@ class Config {
615
615
  for (const key of validKeys) {
616
616
  if (requestComplexity[key] !== undefined) {
617
617
  const value = requestComplexity[key];
618
- if (!Number.isInteger(value) || value < 1 && value !== -1) {
618
+ const def = _Definitions.RequestComplexityOptions[key];
619
+ if (typeof def.default === 'boolean') {
620
+ if (typeof value !== 'boolean') {
621
+ throw new Error(`requestComplexity.${key} must be a boolean.`);
622
+ }
623
+ } else if (!Number.isInteger(value) || value < 1 && value !== -1) {
619
624
  throw new Error(`requestComplexity.${key} must be a positive integer or -1 to disable.`);
620
625
  }
621
626
  } else {
@@ -838,4 +843,4 @@ class Config {
838
843
  exports.Config = Config;
839
844
  var _default = exports.default = Config;
840
845
  module.exports = Config;
841
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbG9kYXNoIiwicmVxdWlyZSIsIl9wYXRoVG9SZWdleHAiLCJfbmV0IiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsIl9jYWNoZSIsIl9EYXRhYmFzZUNvbnRyb2xsZXIiLCJfTG9nZ2VyQ29udHJvbGxlciIsIl9wYWNrYWdlIiwiX0RlZmluaXRpb25zIiwiX1BhcnNlIiwiX0RlcHJlY2F0b3IiLCJfVXRpbHMiLCJlIiwiX19lc01vZHVsZSIsImRlZmF1bHQiLCJyZW1vdmVUcmFpbGluZ1NsYXNoIiwic3RyIiwiZW5kc1dpdGgiLCJzdWJzdHJpbmciLCJsZW5ndGgiLCJhc3luY0tleXMiLCJDb25maWciLCJnZXQiLCJhcHBsaWNhdGlvbklkIiwibW91bnQiLCJjYWNoZUluZm8iLCJBcHBDYWNoZSIsImNvbmZpZyIsIk9iamVjdCIsImtleXMiLCJmb3JFYWNoIiwia2V5IiwiZGF0YWJhc2UiLCJEYXRhYmFzZUNvbnRyb2xsZXIiLCJkYXRhYmFzZUNvbnRyb2xsZXIiLCJhZGFwdGVyIiwiZ2VuZXJhdGVTZXNzaW9uRXhwaXJlc0F0IiwiYmluZCIsImdlbmVyYXRlRW1haWxWZXJpZnlUb2tlbkV4cGlyZXNBdCIsInZlcnNpb24iLCJsb2FkS2V5cyIsIlByb21pc2UiLCJhbGwiLCJtYXAiLCJlcnJvciIsIkVycm9yIiwibWVzc2FnZSIsImNhY2hlZENvbmZpZyIsImFwcElkIiwidXBkYXRlZENvbmZpZyIsInB1dCIsInRyYW5zZm9ybUNvbmZpZ3VyYXRpb24iLCJzZXJ2ZXJDb25maWd1cmF0aW9uIiwiaW5jbHVkZXMiLCJ2YWxpZGF0ZU9wdGlvbnMiLCJ2YWxpZGF0ZUNvbnRyb2xsZXJzIiwicm91dGVBbGxvd0xpc3QiLCJfcm91dGVBbGxvd0xpc3RSZWdleCIsInBhdHRlcm4iLCJSZWdFeHAiLCJzZXR1cFBhc3N3b3JkVmFsaWRhdG9yIiwicGFzc3dvcmRQb2xpY3kiLCJjdXN0b21QYWdlcyIsInB1YmxpY1NlcnZlclVSTCIsInJldm9rZVNlc3Npb25PblBhc3N3b3JkUmVzZXQiLCJleHBpcmVJbmFjdGl2ZVNlc3Npb25zIiwic2Vzc2lvbkxlbmd0aCIsImRlZmF1bHRMaW1pdCIsIm1heExpbWl0IiwiYWNjb3VudExvY2tvdXQiLCJtYXN0ZXJLZXlJcHMiLCJtYXN0ZXJLZXkiLCJtYWludGVuYW5jZUtleSIsIm1haW50ZW5hbmNlS2V5SXBzIiwicmVhZE9ubHlNYXN0ZXJLZXkiLCJyZWFkT25seU1hc3RlcktleUlwcyIsImFsbG93SGVhZGVycyIsImlkZW1wb3RlbmN5T3B0aW9ucyIsImZpbGVVcGxvYWQiLCJmaWxlRG93bmxvYWQiLCJwYWdlcyIsInNlY3VyaXR5IiwiZW5mb3JjZVByaXZhdGVVc2VycyIsImVuYWJsZUluc2VjdXJlQXV0aEFkYXB0ZXJzIiwic2NoZW1hIiwicmVxdWVzdEtleXdvcmREZW55bGlzdCIsImFsbG93RXhwaXJlZEF1dGhEYXRhVG9rZW4iLCJsb2dMZXZlbHMiLCJyYXRlTGltaXQiLCJkYXRhYmFzZU9wdGlvbnMiLCJleHRlbmRTZXNzaW9uT25Vc2UiLCJhbGxvd0NsaWVudENsYXNzQ3JlYXRpb24iLCJyZXF1ZXN0Q29tcGxleGl0eSIsImxpdmVRdWVyeSIsInZhbGlkYXRlQWNjb3VudExvY2tvdXRQb2xpY3kiLCJ2YWxpZGF0ZVBhc3N3b3JkUG9saWN5IiwidmFsaWRhdGVGaWxlVXBsb2FkT3B0aW9ucyIsImFyZ3VtZW50cyIsInZhbGlkYXRlRmlsZURvd25sb2FkT3B0aW9ucyIsInZhbGlkYXRlUHVibGljU2VydmVyVVJMIiwidmFsaWRhdGVTZXNzaW9uQ29uZmlndXJhdGlvbiIsInZhbGlkYXRlSXBzIiwidmFsaWRhdGVEZWZhdWx0TGltaXQiLCJ2YWxpZGF0ZU1heExpbWl0IiwidmFsaWRhdGVBbGxvd0hlYWRlcnMiLCJ2YWxpZGF0ZUlkZW1wb3RlbmN5T3B0aW9ucyIsInZhbGlkYXRlUGFnZXNPcHRpb25zIiwidmFsaWRhdGVTZWN1cml0eU9wdGlvbnMiLCJ2YWxpZGF0ZVNjaGVtYU9wdGlvbnMiLCJ2YWxpZGF0ZUVuZm9yY2VQcml2YXRlVXNlcnMiLCJ2YWxpZGF0ZUVuYWJsZUluc2VjdXJlQXV0aEFkYXB0ZXJzIiwidmFsaWRhdGVBbGxvd0V4cGlyZWRBdXRoRGF0YVRva2VuIiwidmFsaWRhdGVSZXF1ZXN0S2V5d29yZERlbnlsaXN0IiwidmFsaWRhdGVSYXRlTGltaXQiLCJ2YWxpZGF0ZUxvZ0xldmVscyIsInZhbGlkYXRlRGF0YWJhc2VPcHRpb25zIiwidmFsaWRhdGVDdXN0b21QYWdlcyIsInZhbGlkYXRlQWxsb3dDbGllbnRDbGFzc0NyZWF0aW9uIiwidmFsaWRhdGVSZXF1ZXN0Q29tcGxleGl0eSIsInZhbGlkYXRlTGl2ZVF1ZXJ5T3B0aW9ucyIsInZhbGlkYXRlUm91dGVBbGxvd0xpc3QiLCJwcm90b3R5cGUiLCJ0b1N0cmluZyIsImNhbGwiLCJ2ZXJpZnlVc2VyRW1haWxzIiwidXNlckNvbnRyb2xsZXIiLCJhcHBOYW1lIiwiX3B1YmxpY1NlcnZlclVSTCIsImVtYWlsVmVyaWZ5VG9rZW5WYWxpZGl0eUR1cmF0aW9uIiwiZW1haWxWZXJpZnlUb2tlblJldXNlSWZWYWxpZCIsImVtYWlsVmVyaWZ5U3VjY2Vzc09uSW52YWxpZEVtYWlsIiwiZW1haWxBZGFwdGVyIiwidmFsaWRhdGVFbWFpbENvbmZpZ3VyYXRpb24iLCJ1bmRlZmluZWQiLCJBcnJheSIsImlzQXJyYXkiLCJlbmFibGVDaGVjayIsIlNlY3VyaXR5T3B0aW9ucyIsImlzQm9vbGVhbiIsImVuYWJsZUNoZWNrTG9nIiwiZGVmaW5pdGlvbnMiLCJTY2hlbWFPcHRpb25zIiwic3RyaWN0IiwiZGVsZXRlRXh0cmFGaWVsZHMiLCJyZWNyZWF0ZU1vZGlmaWVkRmllbGRzIiwibG9ja1NjaGVtYXMiLCJiZWZvcmVNaWdyYXRpb24iLCJhZnRlck1pZ3JhdGlvbiIsImVuYWJsZUxvY2FsaXphdGlvbiIsIlBhZ2VzT3B0aW9ucyIsImxvY2FsaXphdGlvbkpzb25QYXRoIiwiaXNTdHJpbmciLCJsb2NhbGl6YXRpb25GYWxsYmFja0xvY2FsZSIsInBsYWNlaG9sZGVycyIsImZvcmNlUmVkaXJlY3QiLCJwYWdlc1BhdGgiLCJwYWdlc0VuZHBvaW50IiwiY3VzdG9tVXJscyIsImN1c3RvbVJvdXRlcyIsImVuY29kZVBhZ2VQYXJhbUhlYWRlcnMiLCJ0dGwiLCJJZGVtcG90ZW5jeU9wdGlvbnMiLCJpc05hTiIsInBhdGhzIiwiZHVyYXRpb24iLCJOdW1iZXIiLCJpc0ludGVnZXIiLCJ0aHJlc2hvbGQiLCJ1bmxvY2tPblBhc3N3b3JkUmVzZXQiLCJBY2NvdW50TG9ja291dE9wdGlvbnMiLCJtYXhQYXNzd29yZEFnZSIsInJlc2V0VG9rZW5WYWxpZGl0eUR1cmF0aW9uIiwidmFsaWRhdG9yUGF0dGVybiIsIlV0aWxzIiwiaXNSZWdFeHAiLCJ2YWxpZGF0b3JDYWxsYmFjayIsImRvTm90QWxsb3dVc2VybmFtZSIsIm1heFBhc3N3b3JkSGlzdG9yeSIsInJlc2V0VG9rZW5SZXVzZUlmVmFsaWQiLCJyZXNldFBhc3N3b3JkU3VjY2Vzc09uSW52YWxpZEVtYWlsIiwicGF0dGVyblZhbGlkYXRvciIsInZhbHVlIiwidGVzdCIsInJlcXVpcmVkIiwidHlwZSIsInN0YXJ0c1dpdGgiLCJSZWZlcmVuY2VFcnJvciIsImVuYWJsZUZvckFub255bW91c1VzZXIiLCJGaWxlVXBsb2FkT3B0aW9ucyIsImVuYWJsZUZvclB1YmxpYyIsImVuYWJsZUZvckF1dGhlbnRpY2F0ZWRVc2VyIiwiZmlsZUV4dGVuc2lvbnMiLCJhbGxvd2VkRmlsZVVybERvbWFpbnMiLCJkb21haW4iLCJGaWxlRG93bmxvYWRPcHRpb25zIiwiZmllbGQiLCJpcCIsInNwbGl0IiwibmV0IiwiaXNJUCIsIkRlcHJlY2F0b3IiLCJsb2dSdW50aW1lRGVwcmVjYXRpb24iLCJ1c2FnZSIsIl9tb3VudCIsIm5ld1ZhbHVlIiwiUGFyc2VTZXJ2ZXJPcHRpb25zIiwidmFsaWRLZXlzIiwiUmVxdWVzdENvbXBsZXhpdHlPcHRpb25zIiwiaGVhZGVyIiwidHJpbSIsIkxvZ0xldmVscyIsInZhbGlkTG9nTGV2ZWxzIiwiaW5kZXhPZiIsIkpTT04iLCJzdHJpbmdpZnkiLCJlbmFibGVTY2hlbWFIb29rcyIsIkRhdGFiYXNlT3B0aW9ucyIsInNjaGVtYUNhY2hlVHRsIiwiYWxsb3dQdWJsaWNFeHBsYWluIiwicmVnZXhUaW1lb3V0IiwiTGl2ZVF1ZXJ5T3B0aW9ucyIsIm9wdGlvbnMiLCJvcHRpb24iLCJyZXF1ZXN0UGF0aCIsInBhdGhUb1JlZ2V4cCIsInJlcXVlc3RUaW1lV2luZG93IiwiaW5jbHVkZUludGVybmFsUmVxdWVzdHMiLCJyZXF1ZXN0Q291bnQiLCJlcnJvclJlc3BvbnNlTWVzc2FnZSIsIlBhcnNlU2VydmVyIiwiUmF0ZUxpbWl0Wm9uZSIsInpvbmUiLCJmb3JtYXR0ZXIiLCJJbnRsIiwiTGlzdEZvcm1hdCIsInN0eWxlIiwiZm9ybWF0Iiwibm93IiwiRGF0ZSIsImdldFRpbWUiLCJnZW5lcmF0ZVBhc3N3b3JkUmVzZXRUb2tlbkV4cGlyZXNBdCIsInVucmVnaXN0ZXJSYXRlTGltaXRlcnMiLCJpIiwicmF0ZUxpbWl0cyIsImxpbWl0IiwiY2xvdWQiLCJzcGxpY2UiLCJpbnZhbGlkTGlua1VSTCIsImludmFsaWRMaW5rIiwiaW52YWxpZFZlcmlmaWNhdGlvbkxpbmtVUkwiLCJpbnZhbGlkVmVyaWZpY2F0aW9uTGluayIsImxpbmtTZW5kU3VjY2Vzc1VSTCIsImxpbmtTZW5kU3VjY2VzcyIsImxpbmtTZW5kRmFpbFVSTCIsImxpbmtTZW5kRmFpbCIsInZlcmlmeUVtYWlsU3VjY2Vzc1VSTCIsInZlcmlmeUVtYWlsU3VjY2VzcyIsImNob29zZVBhc3N3b3JkVVJMIiwiY2hvb3NlUGFzc3dvcmQiLCJyZXF1ZXN0UmVzZXRQYXNzd29yZFVSTCIsInBhc3N3b3JkUmVzZXRTdWNjZXNzVVJMIiwicGFzc3dvcmRSZXNldFN1Y2Nlc3MiLCJwYXJzZUZyYW1lVVJMIiwidmVyaWZ5RW1haWxVUkwiLCJsb2FkTWFzdGVyS2V5IiwidHRsSXNFbXB0eSIsIm1hc3RlcktleVR0bCIsImlzRXhwaXJlZCIsIm1hc3RlcktleUNhY2hlIiwiZXhwaXJlc0F0IiwiZXhwb3J0cyIsIl9kZWZhdWx0IiwibW9kdWxlIl0sInNvdXJjZXMiOlsiLi4vc3JjL0NvbmZpZy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBBIENvbmZpZyBvYmplY3QgcHJvdmlkZXMgaW5mb3JtYXRpb24gYWJvdXQgaG93IGEgc3BlY2lmaWMgYXBwIGlzXG4vLyBjb25maWd1cmVkLlxuLy8gbW91bnQgaXMgdGhlIFVSTCBmb3IgdGhlIHJvb3Qgb2YgdGhlIEFQSTsgaW5jbHVkZXMgaHR0cCwgZG9tYWluLCBldGMuXG5cbmltcG9ydCB7IGlzQm9vbGVhbiwgaXNTdHJpbmcgfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgcGF0aFRvUmVnZXhwIH0gZnJvbSAncGF0aC10by1yZWdleHAnO1xuaW1wb3J0IG5ldCBmcm9tICduZXQnO1xuaW1wb3J0IEFwcENhY2hlIGZyb20gJy4vY2FjaGUnO1xuaW1wb3J0IERhdGFiYXNlQ29udHJvbGxlciBmcm9tICcuL0NvbnRyb2xsZXJzL0RhdGFiYXNlQ29udHJvbGxlcic7XG5pbXBvcnQgeyBsb2dMZXZlbHMgYXMgdmFsaWRMb2dMZXZlbHMgfSBmcm9tICcuL0NvbnRyb2xsZXJzL0xvZ2dlckNvbnRyb2xsZXInO1xuaW1wb3J0IHsgdmVyc2lvbiB9IGZyb20gJy4uL3BhY2thZ2UuanNvbic7XG5pbXBvcnQge1xuICBBY2NvdW50TG9ja291dE9wdGlvbnMsXG4gIERhdGFiYXNlT3B0aW9ucyxcbiAgRmlsZURvd25sb2FkT3B0aW9ucyxcbiAgRmlsZVVwbG9hZE9wdGlvbnMsXG4gIElkZW1wb3RlbmN5T3B0aW9ucyxcbiAgTGl2ZVF1ZXJ5T3B0aW9ucyxcbiAgTG9nTGV2ZWxzLFxuICBQYWdlc09wdGlvbnMsXG4gIFBhcnNlU2VydmVyT3B0aW9ucyxcbiAgU2NoZW1hT3B0aW9ucyxcbiAgUmVxdWVzdENvbXBsZXhpdHlPcHRpb25zLFxuICBTZWN1cml0eU9wdGlvbnMsXG59IGZyb20gJy4vT3B0aW9ucy9EZWZpbml0aW9ucyc7XG5pbXBvcnQgUGFyc2VTZXJ2ZXIgZnJvbSAnLi9jbG91ZC1jb2RlL1BhcnNlLlNlcnZlcic7XG5pbXBvcnQgRGVwcmVjYXRvciBmcm9tICcuL0RlcHJlY2F0b3IvRGVwcmVjYXRvcic7XG5pbXBvcnQgVXRpbHMgZnJvbSAnLi9VdGlscyc7XG5cbmZ1bmN0aW9uIHJlbW92ZVRyYWlsaW5nU2xhc2goc3RyKSB7XG4gIGlmICghc3RyKSB7XG4gICAgcmV0dXJuIHN0cjtcbiAgfVxuICBpZiAoc3RyLmVuZHNXaXRoKCcvJykpIHtcbiAgICBzdHIgPSBzdHIuc3Vic3RyaW5nKDAsIHN0ci5sZW5ndGggLSAxKTtcbiAgfVxuICByZXR1cm4gc3RyO1xufVxuXG4vKipcbiAqIENvbmZpZyBrZXlzIHRoYXQgbmVlZCB0byBiZSBsb2FkZWQgYXN5bmNocm9ub3VzbHkuXG4gKi9cbmNvbnN0IGFzeW5jS2V5cyA9IFsncHVibGljU2VydmVyVVJMJ107XG5cbmV4cG9ydCBjbGFzcyBDb25maWcge1xuICBzdGF0aWMgZ2V0KGFwcGxpY2F0aW9uSWQ6IHN0cmluZywgbW91bnQ6IHN0cmluZykge1xuICAgIGNvbnN0IGNhY2hlSW5mbyA9IEFwcENhY2hlLmdldChhcHBsaWNhdGlvbklkKTtcbiAgICBpZiAoIWNhY2hlSW5mbykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBjb25maWcgPSBuZXcgQ29uZmlnKCk7XG4gICAgY29uZmlnLmFwcGxpY2F0aW9uSWQgPSBhcHBsaWNhdGlvbklkO1xuICAgIE9iamVjdC5rZXlzKGNhY2hlSW5mbykuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgaWYgKGtleSA9PSAnZGF0YWJhc2VDb250cm9sbGVyJykge1xuICAgICAgICBjb25maWcuZGF0YWJhc2UgPSBuZXcgRGF0YWJhc2VDb250cm9sbGVyKGNhY2hlSW5mby5kYXRhYmFzZUNvbnRyb2xsZXIuYWRhcHRlciwgY29uZmlnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbmZpZ1trZXldID0gY2FjaGVJbmZvW2tleV07XG4gICAgICB9XG4gICAgfSk7XG4gICAgY29uZmlnLm1vdW50ID0gcmVtb3ZlVHJhaWxpbmdTbGFzaChtb3VudCk7XG4gICAgY29uZmlnLmdlbmVyYXRlU2Vzc2lvbkV4cGlyZXNBdCA9IGNvbmZpZy5nZW5lcmF0ZVNlc3Npb25FeHBpcmVzQXQuYmluZChjb25maWcpO1xuICAgIGNvbmZpZy5nZW5lcmF0ZUVtYWlsVmVyaWZ5VG9rZW5FeHBpcmVzQXQgPSBjb25maWcuZ2VuZXJhdGVFbWFpbFZlcmlmeVRva2VuRXhwaXJlc0F0LmJpbmQoXG4gICAgICBjb25maWdcbiAgICApO1xuICAgIGNvbmZpZy52ZXJzaW9uID0gdmVyc2lvbjtcbiAgICByZXR1cm4gY29uZmlnO1xuICB9XG5cbiAgYXN5bmMgbG9hZEtleXMoKSB7XG4gICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICBhc3luY0tleXMubWFwKGFzeW5jIGtleSA9PiB7XG4gICAgICAgIGlmICh0eXBlb2YgdGhpc1tgXyR7a2V5fWBdID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRoaXNba2V5XSA9IGF3YWl0IHRoaXNbYF8ke2tleX1gXSgpO1xuICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byByZXNvbHZlIGFzeW5jIGNvbmZpZyBrZXkgJyR7a2V5fSc6ICR7ZXJyb3IubWVzc2FnZX1gKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKTtcblxuICAgIGNvbnN0IGNhY2hlZENvbmZpZyA9IEFwcENhY2hlLmdldCh0aGlzLmFwcElkKTtcbiAgICBpZiAoY2FjaGVkQ29uZmlnKSB7XG4gICAgICBjb25zdCB1cGRhdGVkQ29uZmlnID0geyAuLi5jYWNoZWRDb25maWcgfTtcbiAgICAgIGFzeW5jS2V5cy5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgIHVwZGF0ZWRDb25maWdba2V5XSA9IHRoaXNba2V5XTtcbiAgICAgIH0pO1xuICAgICAgQXBwQ2FjaGUucHV0KHRoaXMuYXBwSWQsIHVwZGF0ZWRDb25maWcpO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyB0cmFuc2Zvcm1Db25maWd1cmF0aW9uKHNlcnZlckNvbmZpZ3VyYXRpb24pIHtcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhzZXJ2ZXJDb25maWd1cmF0aW9uKSkge1xuICAgICAgaWYgKGFzeW5jS2V5cy5pbmNsdWRlcyhrZXkpICYmIHR5cGVvZiBzZXJ2ZXJDb25maWd1cmF0aW9uW2tleV0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgc2VydmVyQ29uZmlndXJhdGlvbltgXyR7a2V5fWBdID0gc2VydmVyQ29uZmlndXJhdGlvbltrZXldO1xuICAgICAgICBkZWxldGUgc2VydmVyQ29uZmlndXJhdGlvbltrZXldO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBwdXQoc2VydmVyQ29uZmlndXJhdGlvbikge1xuICAgIENvbmZpZy52YWxpZGF0ZU9wdGlvbnMoc2VydmVyQ29uZmlndXJhdGlvbik7XG4gICAgQ29uZmlnLnZhbGlkYXRlQ29udHJvbGxlcnMoc2VydmVyQ29uZmlndXJhdGlvbik7XG4gICAgaWYgKHNlcnZlckNvbmZpZ3VyYXRpb24ucm91dGVBbGxvd0xpc3QpIHtcbiAgICAgIHNlcnZlckNvbmZpZ3VyYXRpb24uX3JvdXRlQWxsb3dMaXN0UmVnZXggPSBzZXJ2ZXJDb25maWd1cmF0aW9uLnJvdXRlQWxsb3dMaXN0Lm1hcChcbiAgICAgICAgcGF0dGVybiA9PiBuZXcgUmVnRXhwKCdeJyArIHBhdHRlcm4gKyAnJCcpXG4gICAgICApO1xuICAgIH1cbiAgICBDb25maWcudHJhbnNmb3JtQ29uZmlndXJhdGlvbihzZXJ2ZXJDb25maWd1cmF0aW9uKTtcbiAgICBBcHBDYWNoZS5wdXQoc2VydmVyQ29uZmlndXJhdGlvbi5hcHBJZCwgc2VydmVyQ29uZmlndXJhdGlvbik7XG4gICAgQ29uZmlnLnNldHVwUGFzc3dvcmRWYWxpZGF0b3Ioc2VydmVyQ29uZmlndXJhdGlvbi5wYXNzd29yZFBvbGljeSk7XG4gICAgcmV0dXJuIHNlcnZlckNvbmZpZ3VyYXRpb247XG4gIH1cblxuICBzdGF0aWMgdmFsaWRhdGVPcHRpb25zKHtcbiAgICBjdXN0b21QYWdlcyxcbiAgICBwdWJsaWNTZXJ2ZXJVUkwsXG4gICAgcmV2b2tlU2Vzc2lvbk9uUGFzc3dvcmRSZXNldCxcbiAgICBleHBpcmVJbmFjdGl2ZVNlc3Npb25zLFxuICAgIHNlc3Npb25MZW5ndGgsXG4gICAgZGVmYXVsdExpbWl0LFxuICAgIG1heExpbWl0LFxuICAgIGFjY291bnRMb2Nrb3V0LFxuICAgIHBhc3N3b3JkUG9saWN5LFxuICAgIG1hc3RlcktleUlwcyxcbiAgICBtYXN0ZXJLZXksXG4gICAgbWFpbnRlbmFuY2VLZXksXG4gICAgbWFpbnRlbmFuY2VLZXlJcHMsXG4gICAgcmVhZE9ubHlNYXN0ZXJLZXksXG4gICAgcmVhZE9ubHlNYXN0ZXJLZXlJcHMsXG4gICAgYWxsb3dIZWFkZXJzLFxuICAgIGlkZW1wb3RlbmN5T3B0aW9ucyxcbiAgICBmaWxlVXBsb2FkLFxuICAgIGZpbGVEb3dubG9hZCxcbiAgICBwYWdlcyxcbiAgICBzZWN1cml0eSxcbiAgICBlbmZvcmNlUHJpdmF0ZVVzZXJzLFxuICAgIGVuYWJsZUluc2VjdXJlQXV0aEFkYXB0ZXJzLFxuICAgIHNjaGVtYSxcbiAgICByZXF1ZXN0S2V5d29yZERlbnlsaXN0LFxuICAgIGFsbG93RXhwaXJlZEF1dGhEYXRhVG9rZW4sXG4gICAgbG9nTGV2ZWxzLFxuICAgIHJhdGVMaW1pdCxcbiAgICBkYXRhYmFzZU9wdGlvbnMsXG4gICAgZXh0ZW5kU2Vzc2lvbk9uVXNlLFxuICAgIGFsbG93Q2xpZW50Q2xhc3NDcmVhdGlvbixcbiAgICByZXF1ZXN0Q29tcGxleGl0eSxcbiAgICBsaXZlUXVlcnksXG4gICAgcm91dGVBbGxvd0xpc3QsXG4gIH0pIHtcbiAgICBpZiAobWFzdGVyS2V5ID09PSByZWFkT25seU1hc3RlcktleSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdtYXN0ZXJLZXkgYW5kIHJlYWRPbmx5TWFzdGVyS2V5IHNob3VsZCBiZSBkaWZmZXJlbnQnKTtcbiAgICB9XG5cbiAgICBpZiAobWFzdGVyS2V5ID09PSBtYWludGVuYW5jZUtleSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdtYXN0ZXJLZXkgYW5kIG1haW50ZW5hbmNlS2V5IHNob3VsZCBiZSBkaWZmZXJlbnQnKTtcbiAgICB9XG5cbiAgICB0aGlzLnZhbGlkYXRlQWNjb3VudExvY2tvdXRQb2xpY3koYWNjb3VudExvY2tvdXQpO1xuICAgIHRoaXMudmFsaWRhdGVQYXNzd29yZFBvbGljeShwYXNzd29yZFBvbGljeSk7XG4gICAgdGhpcy52YWxpZGF0ZUZpbGVVcGxvYWRPcHRpb25zKGZpbGVVcGxvYWQpO1xuICAgIGlmIChmaWxlRG93bmxvYWQgPT0gbnVsbCkge1xuICAgICAgZmlsZURvd25sb2FkID0ge307XG4gICAgICBhcmd1bWVudHNbMF0uZmlsZURvd25sb2FkID0gZmlsZURvd25sb2FkO1xuICAgIH1cbiAgICB0aGlzLnZhbGlkYXRlRmlsZURvd25sb2FkT3B0aW9ucyhmaWxlRG93bmxvYWQpO1xuXG4gICAgaWYgKHR5cGVvZiByZXZva2VTZXNzaW9uT25QYXNzd29yZFJlc2V0ICE9PSAnYm9vbGVhbicpIHtcbiAgICAgIHRocm93ICdyZXZva2VTZXNzaW9uT25QYXNzd29yZFJlc2V0IG11c3QgYmUgYSBib29sZWFuIHZhbHVlJztcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGV4dGVuZFNlc3Npb25PblVzZSAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICB0aHJvdyAnZXh0ZW5kU2Vzc2lvbk9uVXNlIG11c3QgYmUgYSBib29sZWFuIHZhbHVlJztcbiAgICB9XG5cbiAgICB0aGlzLnZhbGlkYXRlUHVibGljU2VydmVyVVJMKHsgcHVibGljU2VydmVyVVJMIH0pO1xuICAgIHRoaXMudmFsaWRhdGVTZXNzaW9uQ29uZmlndXJhdGlvbihzZXNzaW9uTGVuZ3RoLCBleHBpcmVJbmFjdGl2ZVNlc3Npb25zKTtcbiAgICB0aGlzLnZhbGlkYXRlSXBzKCdtYXN0ZXJLZXlJcHMnLCBtYXN0ZXJLZXlJcHMpO1xuICAgIHRoaXMudmFsaWRhdGVJcHMoJ21haW50ZW5hbmNlS2V5SXBzJywgbWFpbnRlbmFuY2VLZXlJcHMpO1xuICAgIHRoaXMudmFsaWRhdGVJcHMoJ3JlYWRPbmx5TWFzdGVyS2V5SXBzJywgcmVhZE9ubHlNYXN0ZXJLZXlJcHMpO1xuICAgIHRoaXMudmFsaWRhdGVEZWZhdWx0TGltaXQoZGVmYXVsdExpbWl0KTtcbiAgICB0aGlzLnZhbGlkYXRlTWF4TGltaXQobWF4TGltaXQpO1xuICAgIHRoaXMudmFsaWRhdGVBbGxvd0hlYWRlcnMoYWxsb3dIZWFkZXJzKTtcbiAgICB0aGlzLnZhbGlkYXRlSWRlbXBvdGVuY3lPcHRpb25zKGlkZW1wb3RlbmN5T3B0aW9ucyk7XG4gICAgdGhpcy52YWxpZGF0ZVBhZ2VzT3B0aW9ucyhwYWdlcyk7XG4gICAgdGhpcy52YWxpZGF0ZVNlY3VyaXR5T3B0aW9ucyhzZWN1cml0eSk7XG4gICAgdGhpcy52YWxpZGF0ZVNjaGVtYU9wdGlvbnMoc2NoZW1hKTtcbiAgICB0aGlzLnZhbGlkYXRlRW5mb3JjZVByaXZhdGVVc2VycyhlbmZvcmNlUHJpdmF0ZVVzZXJzKTtcbiAgICB0aGlzLnZhbGlkYXRlRW5hYmxlSW5zZWN1cmVBdXRoQWRhcHRlcnMoZW5hYmxlSW5zZWN1cmVBdXRoQWRhcHRlcnMpO1xuICAgIHRoaXMudmFsaWRhdGVBbGxvd0V4cGlyZWRBdXRoRGF0YVRva2VuKGFsbG93RXhwaXJlZEF1dGhEYXRhVG9rZW4pO1xuICAgIHRoaXMudmFsaWRhdGVSZXF1ZXN0S2V5d29yZERlbnlsaXN0KHJlcXVlc3RLZXl3b3JkRGVueWxpc3QpO1xuICAgIHRoaXMudmFsaWRhdGVSYXRlTGltaXQocmF0ZUxpbWl0KTtcbiAgICB0aGlzLnZhbGlkYXRlTG9nTGV2ZWxzKGxvZ0xldmVscyk7XG4gICAgdGhpcy52YWxpZGF0ZURhdGFiYXNlT3B0aW9ucyhkYXRhYmFzZU9wdGlvbnMpO1xuICAgIHRoaXMudmFsaWRhdGVDdXN0b21QYWdlcyhjdXN0b21QYWdlcyk7XG4gICAgdGhpcy52YWxpZGF0ZUFsbG93Q2xpZW50Q2xhc3NDcmVhdGlvbihhbGxvd0NsaWVudENsYXNzQ3JlYXRpb24pO1xuICAgIHRoaXMudmFsaWRhdGVSZXF1ZXN0Q29tcGxleGl0eShyZXF1ZXN0Q29tcGxleGl0eSk7XG4gICAgdGhpcy52YWxpZGF0ZUxpdmVRdWVyeU9wdGlvbnMobGl2ZVF1ZXJ5KTtcbiAgICB0aGlzLnZhbGlkYXRlUm91dGVBbGxvd0xpc3Qocm91dGVBbGxvd0xpc3QpO1xuICB9XG5cbiAgc3RhdGljIHZhbGlkYXRlQ3VzdG9tUGFnZXMoY3VzdG9tUGFnZXMpIHtcbiAgICBpZiAoIWN1c3RvbVBhZ2VzKSB7IHJldHVybjsgfVxuXG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChjdXN0b21QYWdlcykgIT09ICdbb2JqZWN0IE9iamVjdF0nKSB7XG4gICAgICB0aHJvdyBFcnJvcignUGFyc2UgU2VydmVyIG9wdGlvbiBjdXN0b21QYWdlcyBtdXN0IGJlIGFuIG9iamVjdC4nKTtcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgdmFsaWRhdGVDb250cm9sbGVycyh7XG4gICAgdmVyaWZ5VXNlckVtYWlscyxcbiAgICB1c2VyQ29udHJvbGxlcixcbiAgICBhcHBOYW1lLFxuICAgIHB1YmxpY1NlcnZlclVSTCxcbiAgICBfcHVibGljU2VydmVyVVJMLFxuICAgIGVtYWlsVmVyaWZ5VG9rZW5WYWxpZGl0eUR1cmF0aW9uLFxuICAgIGVtYWlsVmVyaWZ5VG9rZW5SZXVzZUlmVmFsaWQsXG4gICAgZW1haWxWZXJpZnlTdWNjZXNzT25JbnZhbGlkRW1haWwsXG4gIH0pIHtcbiAgICBjb25zdCBlbWFpbEFkYXB0ZXIgPSB1c2VyQ29udHJvbGxlci5hZGFwdGVyO1xuICAgIGlmICh2ZXJpZnlVc2VyRW1haWxzKSB7XG4gICAgICB0aGlzLnZhbGlkYXRlRW1haWxDb25maWd1cmF0aW9uKHtcbiAgICAgICAgZW1haWxBZGFwdGVyLFxuICAgICAgICBhcHBOYW1lLFxuICAgICAgICBwdWJsaWNTZXJ2ZXJVUkw6IHB1YmxpY1NlcnZlclVSTCB8fCBfcHVibGljU2VydmVyVVJMLFxuICAgICAgICBlbWFpbFZlcmlmeVRva2VuVmFsaWRpdHlEdXJhdGlvbixcbiAgICAgICAgZW1haWxWZXJpZnlUb2tlblJldXNlSWZWYWxpZCxcbiAgICAgICAgZW1haWxWZXJpZnlTdWNjZXNzT25JbnZhbGlkRW1haWwsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgdmFsaWRhdGVSZXF1ZXN0S2V5d29yZERlbnlsaXN0KHJlcXVlc3RLZXl3b3JkRGVueWxpc3QpIHtcbiAgICBpZiAocmVxdWVzdEtleXdvcmREZW55bGlzdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXF1ZXN0S2V5d29yZERlbnlsaXN0ID0gcmVxdWVzdEtleXdvcmREZW55bGlzdC5kZWZhdWx0O1xuICAgIH0gZWxzZSBpZiAoIUFycmF5LmlzQXJyYXkocmVxdWVzdEtleXdvcmREZW55bGlzdCkpIHtcbiAgICAgIHRocm93ICdQYXJzZSBTZXJ2ZXIgb3B0aW9uIHJlcXVlc3RLZXl3b3JkRGVueWxpc3QgbXVzdCBiZSBhbiBhcnJheS4nO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyB2YWxpZGF0ZUVuZm9yY2VQcml2YXRlVXNlcnMoZW5mb3JjZVByaXZhdGVVc2Vycykge1xuICAgIGlmICh0eXBlb2YgZW5mb3JjZVByaXZhdGVVc2VycyAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICB0aHJvdyAnUGFyc2UgU2VydmVyIG9wdGlvbiBlbmZvcmNlUHJpdmF0ZVVzZXJzIG11c3QgYmUgYSBib29sZWFuLic7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIHZhbGlkYXRlQWxsb3dFeHBpcmVkQXV0aERhdGFUb2tlbihhbGxvd0V4cGlyZWRBdXRoRGF0YVRva2VuKSB7XG4gICAgaWYgKHR5cGVvZiBhbGxvd0V4cGlyZWRBdXRoRGF0YVRva2VuICE9PSAnYm9vbGVhbicpIHtcbiAgICAgIHRocm93ICdQYXJzZSBTZXJ2ZXIgb3B0aW9uIGFsbG93RXhwaXJlZEF1dGhEYXRhVG9rZW4gbXVzdCBiZSBhIGJvb2xlYW4uJztcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgdmFsaWRhdGVBbGxvd0NsaWVudENsYXNzQ3JlYXRpb24oYWxsb3dDbGllbnRDbGFzc0NyZWF0aW9uKSB7XG4gICAgaWYgKHR5cGVvZiBhbGxvd0NsaWVudENsYXNzQ3JlYXRpb24gIT09ICdib29sZWFuJykge1xuICAgICAgdGhyb3cgJ1BhcnNlIFNlcnZlciBvcHRpb24gYWxsb3dDbGllbnRDbGFzc0NyZWF0aW9uIG11c3QgYmUgYSBib29sZWFuLic7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIHZhbGlkYXRlU2VjdXJpdHlPcHRpb25zKHNlY3VyaXR5KSB7XG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChzZWN1cml0eSkgIT09ICdbb2JqZWN0IE9iamVjdF0nKSB7XG4gICAgICB0aHJvdyAnUGFyc2UgU2VydmVyIG9wdGlvbiBzZWN1cml0eSBtdXN0IGJlIGFuIG9iamVjdC4nO1xuICAgIH1cbiAgICBpZiAoc2VjdXJpdHkuZW5hYmxlQ2hlY2sgPT09IHVuZGVmaW5lZCkge1xuICAgICAgc2VjdXJpdHkuZW5hYmxlQ2hlY2sgPSBTZWN1cml0eU9wdGlvbnMuZW5hYmxlQ2hlY2suZGVmYXVsdDtcbiAgICB9IGVsc2UgaWYgKCFpc0Jvb2xlYW4oc2VjdXJpdHkuZW5hYmxlQ2hlY2spKSB7XG4gICAgICB0aHJvdyAnUGFyc2UgU2VydmVyIG9wdGlvbiBzZWN1cml0eS5lbmFibGVDaGVjayBtdXN0IGJlIGEgYm9vbGVhbi4nO1xuICAgIH1cbiAgICBpZiAoc2VjdXJpdHkuZW5hYmxlQ2hlY2tMb2cgPT09IHVuZGVmaW5lZCkge1xuICAgICAgc2VjdXJpdHkuZW5hYmxlQ2hlY2tMb2cgPSBTZWN1cml0eU9wdGlvbnMuZW5hYmxlQ2hlY2tMb2cuZGVmYXVsdDtcbiAgICB9IGVsc2UgaWYgKCFpc0Jvb2xlYW4oc2VjdXJpdHkuZW5hYmxlQ2hlY2tMb2cpKSB7XG4gICAgICB0aHJvdyAnUGFyc2UgU2VydmVyIG9wdGlvbiBzZWN1cml0eS5lbmFibGVDaGVja0xvZyBtdXN0IGJlIGEgYm9vbGVhbi4nO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyB2YWxpZGF0ZVNjaGVtYU9wdGlvbnMoc2NoZW1hOiBTY2hlbWFPcHRpb25zKSB7XG4gICAgaWYgKCFzY2hlbWEpIHsgcmV0dXJuOyB9XG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChzY2hlbWEpICE9PSAnW29iamVjdCBPYmplY3RdJykge1xuICAgICAgdGhyb3cgJ1BhcnNlIFNlcnZlciBvcHRpb24gc2NoZW1hIG11c3QgYmUgYW4gb2JqZWN0Lic7XG4gICAgfVxuICAgIGlmIChzY2hlbWEuZGVmaW5pdGlvbnMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgc2NoZW1hLmRlZmluaXRpb25zID0gU2NoZW1hT3B0aW9ucy5kZWZpbml0aW9ucy5kZWZhdWx0O1xuICAgIH0gZWxzZSBpZiAoIUFycmF5LmlzQXJyYXkoc2NoZW1hLmRlZmluaXRpb25zKSkge1xuICAgICAgdGhyb3cgJ1BhcnNlIFNlcnZlciBvcHRpb24gc2NoZW1hLmRlZmluaXRpb25zIG11c3QgYmUgYW4gYXJyYXkuJztcbiAgICB9XG4gICAgaWYgKHNjaGVtYS5zdHJpY3QgPT09IHVuZGVmaW5lZCkge1xuICAgICAgc2NoZW1hLnN0cmljdCA9IFNjaGVtYU9wdGlvbnMuc3RyaWN0LmRlZmF1bHQ7XG4gICAgfSBlbHNlIGlmICghaXNCb29sZWFuKHNjaGVtYS5zdHJpY3QpKSB7XG4gICAgICB0aHJvdyAnUGFyc2UgU2VydmVyIG9wdGlvbiBzY2hlbWEuc3RyaWN0IG11c3QgYmUgYSBib29sZWFuLic7XG4gICAgfVxuICAgIGlmIChzY2hlbWEuZGVsZXRlRXh0cmFGaWVsZHMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgc2NoZW1hLmRlbGV0ZUV4dHJhRmllbGRzID0gU2NoZW1hT3B0aW9ucy5kZWxldGVFeHRyYUZpZWxkcy5kZWZhdWx0O1xuICAgIH0gZWxzZSBpZiAoIWlzQm9vbGVhbihzY2hlbWEuZGVsZXRlRXh0cmFGaWVsZHMpKSB7XG4gICAgICB0aHJvdyAnUGFyc2UgU2VydmVyIG9wdGlvbiBzY2hlbWEuZGVsZXRlRXh0cmFGaWVsZHMgbXVzdCBiZSBhIGJvb2xlYW4uJztcbiAgICB9XG4gICAgaWYgKHNjaGVtYS5yZWNyZWF0ZU1vZGlmaWVkRmllbGRzID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHNjaGVtYS5yZWNyZWF0ZU1vZGlmaWVkRmllbGRzID0gU2NoZW1hT3B0aW9ucy5yZWNyZWF0ZU1vZGlmaWVkRmllbGRzLmRlZmF1bHQ7XG4gICAgfSBlbHNlIGlmICghaXNCb29sZWFuKHNjaGVtYS5yZWNyZWF0ZU1vZGlmaWVkRmllbGRzKSkge1xuICAgICAgdGhyb3cgJ1BhcnNlIFNlcnZlciBvcHRpb24gc2NoZW1hLnJlY3JlYXRlTW9kaWZpZWRGaWVsZHMgbXVzdCBiZSBhIGJvb2xlYW4uJztcbiAgICB9XG4gICAgaWYgKHNjaGVtYS5sb2NrU2NoZW1hcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBzY2hlbWEubG9ja1NjaGVtYXMgPSBTY2hlbWFPcHRpb25zLmxvY2tTY2hlbWFzLmRlZmF1bHQ7XG4gICAgfSBlbHNlIGlmICghaXNCb29sZWFuKHNjaGVtYS5sb2NrU2NoZW1hcykpIHtcbiAgICAgIHRocm93ICdQYXJzZSBTZXJ2ZXIgb3B0aW9uIHNjaGVtYS5sb2NrU2NoZW1hcyBtdXN0IGJlIGEgYm9vbGVhbi4nO1xuICAgIH1cbiAgICBpZiAoc2NoZW1hLmJlZm9yZU1pZ3JhdGlvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBzY2hlbWEuYmVmb3JlTWlncmF0aW9uID0gbnVsbDtcbiAgICB9IGVsc2UgaWYgKHNjaGVtYS5iZWZvcmVNaWdyYXRpb24gIT09IG51bGwgJiYgdHlwZW9mIHNjaGVtYS5iZWZvcmVNaWdyYXRpb24gIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93ICdQYXJzZSBTZXJ2ZXIgb3B0aW9uIHNjaGVtYS5iZWZvcmVNaWdyYXRpb24gbXVzdCBiZSBhIGZ1bmN0aW9uLic7XG4gICAgfVxuICAgIGlmIChzY2hlbWEuYWZ0ZXJNaWdyYXRpb24gPT09IHVuZGVmaW5lZCkge1xuICAgICAgc2NoZW1hLmFmdGVyTWlncmF0aW9uID0gbnVsbDtcbiAgICB9IGVsc2UgaWYgKHNjaGVtYS5hZnRlck1pZ3JhdGlvbiAhPT0gbnVsbCAmJiB0eXBlb2Ygc2NoZW1hLmFmdGVyTWlncmF0aW9uICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyAnUGFyc2UgU2VydmVyIG9wdGlvbiBzY2hlbWEuYWZ0ZXJNaWdyYXRpb24gbXVzdCBiZSBhIGZ1bmN0aW9uLic7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIHZhbGlkYXRlUGFnZXNPcHRpb25zKHBhZ2VzKSB7XG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChwYWdlcykgIT09ICdbb2JqZWN0IE9iamVjdF0nKSB7XG4gICAgICB0aHJvdyAnUGFyc2UgU2VydmVyIG9wdGlvbiBwYWdlcyBtdXN0IGJlIGFuIG9iamVjdC4nO1xuICAgIH1cbiAgICBpZiAocGFnZXMuZW5hYmxlTG9jYWxpemF0aW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHBhZ2VzLmVuYWJsZUxvY2FsaXphdGlvbiA9IFBhZ2VzT3B0aW9ucy5lbmFibGVMb2NhbGl6YXRpb24uZGVmYXVsdDtcbiAgICB9IGVsc2UgaWYgKCFpc0Jvb2xlYW4ocGFnZXMuZW5hYmxlTG9jYWxpemF0aW9uKSkge1xuICAgICAgdGhyb3cgJ1BhcnNlIFNlcnZlciBvcHRpb24gcGFnZXMuZW5hYmxlTG9jYWxpemF0aW9uIG11c3QgYmUgYSBib29sZWFuLic7XG4gICAgfVxuICAgIGlmIChwYWdlcy5sb2NhbGl6YXRpb25Kc29uUGF0aCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBwYWdlcy5sb2NhbGl6YXRpb25Kc29uUGF0aCA9IFBhZ2VzT3B0aW9ucy5sb2NhbGl6YXRpb25Kc29uUGF0aC5kZWZhdWx0O1xuICAgIH0gZWxzZSBpZiAoIWlzU3RyaW5nKHBhZ2VzLmxvY2FsaXphdGlvbkpzb25QYXRoKSkge1xuICAgICAgdGhyb3cgJ1BhcnNlIFNlcnZlciBvcHRpb24gcGFnZXMubG9jYWxpemF0aW9uSnNvblBhdGggbXVzdCBiZSBhIHN0cmluZy4nO1xuICAgIH1cbiAgICBpZiAocGFnZXMubG9jYWxpemF0aW9uRmFsbGJhY2tMb2NhbGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcGFnZXMubG9jYWxpemF0aW9uRmFsbGJhY2tMb2NhbGUgPSBQYWdlc09wdGlvbnMubG9jYWxpemF0aW9uRmFsbGJhY2tMb2NhbGUuZGVmYXVsdDtcbiAgICB9IGVsc2UgaWYgKCFpc1N0cmluZyhwYWdlcy5sb2NhbGl6YXRpb25GYWxsYmFja0xvY2FsZSkpIHtcbiAgICAgIHRocm93ICdQYXJzZSBTZXJ2ZXIgb3B0aW9uIHBhZ2VzLmxvY2FsaXphdGlvbkZhbGxiYWNrTG9jYWxlIG11c3QgYmUgYSBzdHJpbmcuJztcbiAgICB9XG4gICAgaWYgKHBhZ2VzLnBsYWNlaG9sZGVycyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBwYWdlcy5wbGFjZWhvbGRlcnMgPSBQYWdlc09wdGlvbnMucGxhY2Vob2xkZXJzLmRlZmF1bHQ7XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChwYWdlcy5wbGFjZWhvbGRlcnMpICE9PSAnW29iamVjdCBPYmplY3RdJyAmJlxuICAgICAgdHlwZW9mIHBhZ2VzLnBsYWNlaG9sZGVycyAhPT0gJ2Z1bmN0aW9uJ1xuICAgICkge1xuICAgICAgdGhyb3cgJ1BhcnNlIFNlcnZlciBvcHRpb24gcGFnZXMucGxhY2Vob2xkZXJzIG11c3QgYmUgYW4gb2JqZWN0IG9yIGEgZnVuY3Rpb24uJztcbiAgICB9XG4gICAgaWYgKHBhZ2VzLmZvcmNlUmVkaXJlY3QgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcGFnZXMuZm9yY2VSZWRpcmVjdCA9IFBhZ2VzT3B0aW9ucy5mb3JjZVJlZGlyZWN0LmRlZmF1bHQ7XG4gICAgfSBlbHNlIGlmICghaXNCb29sZWFuKHBhZ2VzLmZvcmNlUmVkaXJlY3QpKSB7XG4gICAgICB0aHJvdyAnUGFyc2UgU2VydmVyIG9wdGlvbiBwYWdlcy5mb3JjZVJlZGlyZWN0IG11c3QgYmUgYSBib29sZWFuLic7XG4gICAgfVxuICAgIGlmIChwYWdlcy5wYWdlc1BhdGggIT09IHVuZGVmaW5lZCAmJiAhaXNTdHJpbmcocGFnZXMucGFnZXNQYXRoKSkge1xuICAgICAgdGhyb3cgJ1BhcnNlIFNlcnZlciBvcHRpb24gcGFnZXMucGFnZXNQYXRoIG11c3QgYmUgYSBzdHJpbmcuJztcbiAgICB9XG4gICAgaWYgKHBhZ2VzLnBhZ2VzRW5kcG9pbnQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcGFnZXMucGFnZXNFbmRwb2ludCA9IFBhZ2VzT3B0aW9ucy5wYWdlc0VuZHBvaW50LmRlZmF1bHQ7XG4gICAgfSBlbHNlIGlmICghaXNTdHJpbmcocGFnZXMucGFnZXNFbmRwb2ludCkpIHtcbiAgICAgIHRocm93ICdQYXJzZSBTZXJ2ZXIgb3B0aW9uIHBhZ2VzLnBhZ2VzRW5kcG9pbnQgbXVzdCBiZSBhIHN0cmluZy4nO1xuICAgIH1cbiAgICBpZiAocGFnZXMuY3VzdG9tVXJscyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBwYWdlcy5jdXN0b21VcmxzID0gUGFnZXNPcHRpb25zLmN1c3RvbVVybHMuZGVmYXVsdDtcbiAgICB9IGVsc2UgaWYgKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChwYWdlcy5jdXN0b21VcmxzKSAhPT0gJ1tvYmplY3QgT2JqZWN0XScpIHtcbiAgICAgIHRocm93ICdQYXJzZSBTZXJ2ZXIgb3B0aW9uIHBhZ2VzLmN1c3RvbVVybHMgbXVzdCBiZSBhbiBvYmplY3QuJztcbiAgICB9XG4gICAgaWYgKHBhZ2VzLmN1c3RvbVJvdXRlcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBwYWdlcy5jdXN0b21Sb3V0ZXMgPSBQYWdlc09wdGlvbnMuY3VzdG9tUm91dGVzLmRlZmF1bHQ7XG4gICAgfSBlbHNlIGlmICghQXJyYXkuaXNBcnJheShwYWdlcy5jdXN0b21Sb3V0ZXMpKSB7XG4gICAgICB0aHJvdyAnUGFyc2UgU2VydmVyIG9wdGlvbiBwYWdlcy5jdXN0b21Sb3V0ZXMgbXVzdCBiZSBhbiBhcnJheS4nO1xuICAgIH1cbiAgICBpZiAocGFnZXMuZW5jb2RlUGFnZVBhcmFtSGVhZGVycyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBwYWdlcy5lbmNvZGVQYWdlUGFyYW1IZWFkZXJzID0gUGFnZXNPcHRpb25zLmVuY29kZVBhZ2VQYXJhbUhlYWRlcnMuZGVmYXVsdDtcbiAgICB9IGVsc2UgaWYgKCFpc0Jvb2xlYW4ocGFnZXMuZW5jb2RlUGFnZVBhcmFtSGVhZGVycykpIHtcbiAgICAgIHRocm93ICdQYXJzZSBTZXJ2ZXIgb3B0aW9uIHBhZ2VzLmVuY29kZVBhZ2VQYXJhbUhlYWRlcnMgbXVzdCBiZSBhIGJvb2xlYW4uJztcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgdmFsaWRhdGVJZGVtcG90ZW5jeU9wdGlvbnMoaWRlbXBvdGVuY3lPcHRpb25zKSB7XG4gICAgaWYgKCFpZGVtcG90ZW5jeU9wdGlvbnMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKGlkZW1wb3RlbmN5T3B0aW9ucy50dGwgPT09IHVuZGVmaW5lZCkge1xuICAgICAgaWRlbXBvdGVuY3lPcHRpb25zLnR0bCA9IElkZW1wb3RlbmN5T3B0aW9ucy50dGwuZGVmYXVsdDtcbiAgICB9IGVsc2UgaWYgKCFpc05hTihpZGVtcG90ZW5jeU9wdGlvbnMudHRsKSAmJiBpZGVtcG90ZW5jeU9wdGlvbnMudHRsIDw9IDApIHtcbiAgICAgIHRocm93ICdpZGVtcG90ZW5jeSBUVEwgdmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gMCBzZWNvbmRzJztcbiAgICB9IGVsc2UgaWYgKGlzTmFOKGlkZW1wb3RlbmN5T3B0aW9ucy50dGwpKSB7XG4gICAgICB0aHJvdyAnaWRlbXBvdGVuY3kgVFRMIHZhbHVlIG11c3QgYmUgYSBudW1iZXInO1xuICAgIH1cbiAgICBpZiAoIWlkZW1wb3RlbmN5T3B0aW9ucy5wYXRocykge1xuICAgICAgaWRlbXBvdGVuY3lPcHRpb25zLnBhdGhzID0gSWRlbXBvdGVuY3lPcHRpb25zLnBhdGhzLmRlZmF1bHQ7XG4gICAgfSBlbHNlIGlmICghQXJyYXkuaXNBcnJheShpZGVtcG90ZW5jeU9wdGlvbnMucGF0aHMpKSB7XG4gICAgICB0aHJvdyAnaWRlbXBvdGVuY3kgcGF0aHMgbXVzdCBiZSBvZiBhbiBhcnJheSBvZiBzdHJpbmdzJztcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgdmFsaWRhdGVBY2NvdW50TG9ja291dFBvbGljeShhY2NvdW50TG9ja291dCkge1xuICAgIGlmIChhY2NvdW50TG9ja291dCkge1xuICAgICAgaWYgKFxuICAgICAgICB0eXBlb2YgYWNjb3VudExvY2tvdXQuZHVyYXRpb24gIT09ICdudW1iZXInIHx8XG4gICAgICAgIGFjY291bnRMb2Nrb3V0LmR1cmF0aW9uIDw9IDAgfHxcbiAgICAgICAgYWNjb3VudExvY2tvdXQuZHVyYXRpb24gPiA5OTk5OVxuICAgICAgKSB7XG4gICAgICAgIHRocm93ICdBY2NvdW50IGxvY2tvdXQgZHVyYXRpb24gc2hvdWxkIGJlIGdyZWF0ZXIgdGhhbiAwIGFuZCBsZXNzIHRoYW4gMTAwMDAwJztcbiAgICAgIH1cblxuICAgICAgaWYgKFxuICAgICAgICAhTnVtYmVyLmlzSW50ZWdlcihhY2NvdW50TG9ja291dC50aHJlc2hvbGQpIHx8XG4gICAgICAgIGFjY291bnRMb2Nrb3V0LnRocmVzaG9sZCA8IDEgfHxcbiAgICAgICAgYWNjb3VudExvY2tvdXQudGhyZXNob2xkID4gOTk5XG4gICAgICApIHtcbiAgICAgICAgdGhyb3cgJ0FjY291bnQgbG9ja291dCB0aHJlc2hvbGQgc2hvdWxkIGJlIGFuIGludGVnZXIgZ3JlYXRlciB0aGFuIDAgYW5kIGxlc3MgdGhhbiAxMDAwJztcbiAgICAgIH1cblxuICAgICAgaWYgKGFjY291bnRMb2Nrb3V0LnVubG9ja09uUGFzc3dvcmRSZXNldCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGFjY291bnRMb2Nrb3V0LnVubG9ja09uUGFzc3dvcmRSZXNldCA9IEFjY291bnRMb2Nrb3V0T3B0aW9ucy51bmxvY2tPblBhc3N3b3JkUmVzZXQuZGVmYXVsdDtcbiAgICAgIH0gZWxzZSBpZiAoIWlzQm9vbGVhbihhY2NvdW50TG9ja291dC51bmxvY2tPblBhc3N3b3JkUmVzZXQpKSB7XG4gICAgICAgIHRocm93ICdQYXJzZSBTZXJ2ZXIgb3B0aW9uIGFjY291bnRMb2Nrb3V0LnVubG9ja09uUGFzc3dvcmRSZXNldCBtdXN0IGJlIGEgYm9vbGVhbi4nO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyB2YWxpZGF0ZVBhc3N3b3JkUG9saWN5KHBhc3N3b3JkUG9saWN5KSB7XG4gICAgaWYgKHBhc3N3b3JkUG9saWN5KSB7XG4gICAgICBpZiAoXG4gICAgICAgIHBhc3N3b3JkUG9saWN5Lm1heFBhc3N3b3JkQWdlICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgKHR5cGVvZiBwYXNzd29yZFBvbGljeS5tYXhQYXNzd29yZEFnZSAhPT0gJ251bWJlcicgfHwgcGFzc3dvcmRQb2xpY3kubWF4UGFzc3dvcmRBZ2UgPCAwKVxuICAgICAgKSB7XG4gICAgICAgIHRocm93ICdwYXNzd29yZFBvbGljeS5tYXhQYXNzd29yZEFnZSBtdXN0IGJlIGEgcG9zaXRpdmUgbnVtYmVyJztcbiAgICAgIH1cblxuICAgICAgaWYgKFxuICAgICAgICBwYXNzd29yZFBvbGljeS5yZXNldFRva2VuVmFsaWRpdHlEdXJhdGlvbiAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICh0eXBlb2YgcGFzc3dvcmRQb2xpY3kucmVzZXRUb2tlblZhbGlkaXR5RHVyYXRpb24gIT09ICdudW1iZXInIHx8XG4gICAgICAgICAgcGFzc3dvcmRQb2xpY3kucmVzZXRUb2tlblZhbGlkaXR5RHVyYXRpb24gPD0gMClcbiAgICAgICkge1xuICAgICAgICB0aHJvdyAncGFzc3dvcmRQb2xpY3kucmVzZXRUb2tlblZhbGlkaXR5RHVyYXRpb24gbXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlcic7XG4gICAgICB9XG5cbiAgICAgIGlmIChwYXNzd29yZFBvbGljeS52YWxpZGF0b3JQYXR0ZXJuKSB7XG4gICAgICAgIGlmICh0eXBlb2YgcGFzc3dvcmRQb2xpY3kudmFsaWRhdG9yUGF0dGVybiA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICBwYXNzd29yZFBvbGljeS52YWxpZGF0b3JQYXR0ZXJuID0gbmV3IFJlZ0V4cChwYXNzd29yZFBvbGljeS52YWxpZGF0b3JQYXR0ZXJuKTtcbiAgICAgICAgfSBlbHNlIGlmICghVXRpbHMuaXNSZWdFeHAocGFzc3dvcmRQb2xpY3kudmFsaWRhdG9yUGF0dGVybikpIHtcbiAgICAgICAgICB0aHJvdyAncGFzc3dvcmRQb2xpY3kudmFsaWRhdG9yUGF0dGVybiBtdXN0IGJlIGEgcmVnZXggc3RyaW5nIG9yIFJlZ0V4cCBvYmplY3QuJztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoXG4gICAgICAgIHBhc3N3b3JkUG9saWN5LnZhbGlkYXRvckNhbGxiYWNrICYmXG4gICAgICAgIHR5cGVvZiBwYXNzd29yZFBvbGljeS52YWxpZGF0b3JDYWxsYmFjayAhPT0gJ2Z1bmN0aW9uJ1xuICAgICAgKSB7XG4gICAgICAgIHRocm93ICdwYXNzd29yZFBvbGljeS52YWxpZGF0b3JDYWxsYmFjayBtdXN0IGJlIGEgZnVuY3Rpb24uJztcbiAgICAgIH1cblxuICAgICAgaWYgKFxuICAgICAgICBwYXNzd29yZFBvbGljeS5kb05vdEFsbG93VXNlcm5hbWUgJiZcbiAgICAgICAgdHlwZW9mIHBhc3N3b3JkUG9saWN5LmRvTm90QWxsb3dVc2VybmFtZSAhPT0gJ2Jvb2xlYW4nXG4gICAgICApIHtcbiAgICAgICAgdGhyb3cgJ3Bhc3N3b3JkUG9saWN5LmRvTm90QWxsb3dVc2VybmFtZSBtdXN0IGJlIGEgYm9vbGVhbiB2YWx1ZS4nO1xuICAgICAgfVxuXG4gICAgICBpZiAoXG4gICAgICAgIHBhc3N3b3JkUG9saWN5Lm1heFBhc3N3b3JkSGlzdG9yeSAmJlxuICAgICAgICAoIU51bWJlci5pc0ludGVnZXIocGFzc3dvcmRQb2xpY3kubWF4UGFzc3dvcmRIaXN0b3J5KSB8fFxuICAgICAgICAgIHBhc3N3b3JkUG9saWN5Lm1heFBhc3N3b3JkSGlzdG9yeSA8PSAwIHx8XG4gICAgICAgICAgcGFzc3dvcmRQb2xpY3kubWF4UGFzc3dvcmRIaXN0b3J5ID4gMjApXG4gICAgICApIHtcbiAgICAgICAgdGhyb3cgJ3Bhc3N3b3JkUG9saWN5Lm1heFBhc3N3b3JkSGlzdG9yeSBtdXN0IGJlIGFuIGludGVnZXIgcmFuZ2luZyAwIC0gMjAnO1xuICAgICAgfVxuXG4gICAgICBpZiAoXG4gICAgICAgIHBhc3N3b3JkUG9saWN5LnJlc2V0VG9rZW5SZXVzZUlmVmFsaWQgJiZcbiAgICAgICAgdHlwZW9mIHBhc3N3b3JkUG9saWN5LnJlc2V0VG9rZW5SZXVzZUlmVmFsaWQgIT09ICdib29sZWFuJ1xuICAgICAgKSB7XG4gICAgICAgIHRocm93ICdyZXNldFRva2VuUmV1c2VJZlZhbGlkIG11c3QgYmUgYSBib29sZWFuIHZhbHVlJztcbiAgICAgIH1cbiAgICAgIGlmIChwYXNzd29yZFBvbGljeS5yZXNldFRva2VuUmV1c2VJZlZhbGlkICYmICFwYXNzd29yZFBvbGljeS5yZXNldFRva2VuVmFsaWRpdHlEdXJhdGlvbikge1xuICAgICAgICB0aHJvdyAnWW91IGNhbm5vdCB1c2UgcmVzZXRUb2tlblJldXNlSWZWYWxpZCB3aXRob3V0IHJlc2V0VG9rZW5WYWxpZGl0eUR1cmF0aW9uJztcbiAgICAgIH1cblxuICAgICAgaWYgKFxuICAgICAgICBwYXNzd29yZFBvbGljeS5yZXNldFBhc3N3b3JkU3VjY2Vzc09uSW52YWxpZEVtYWlsICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgdHlwZW9mIHBhc3N3b3JkUG9saWN5LnJlc2V0UGFzc3dvcmRTdWNjZXNzT25JbnZhbGlkRW1haWwgIT09ICdib29sZWFuJ1xuICAgICAgKSB7XG4gICAgICAgIHRocm93ICdyZXNldFBhc3N3b3JkU3VjY2Vzc09uSW52YWxpZEVtYWlsIG11c3QgYmUgYSBib29sZWFuIHZhbHVlJztcbiAgICAgIH1cblxuICAgIH1cbiAgfVxuXG4gIC8vIGlmIHRoZSBwYXNzd29yZFBvbGljeS52YWxpZGF0b3JQYXR0ZXJuIGlzIGNvbmZpZ3VyZWQgdGhlbiBzZXR1cCBhIGNhbGxiYWNrIHRvIHByb2Nlc3MgdGhlIHBhdHRlcm5cbiAgc3RhdGljIHNldHVwUGFzc3dvcmRWYWxpZGF0b3IocGFzc3dvcmRQb2xpY3kpIHtcbiAgICBpZiAocGFzc3dvcmRQb2xpY3kgJiYgcGFzc3dvcmRQb2xpY3kudmFsaWRhdG9yUGF0dGVybikge1xuICAgICAgcGFzc3dvcmRQb2xpY3kucGF0dGVyblZhbGlkYXRvciA9IHZhbHVlID0+IHtcbiAgICAgICAgcmV0dXJuIHBhc3N3b3JkUG9saWN5LnZhbGlkYXRvclBhdHRlcm4udGVzdCh2YWx1ZSk7XG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyB2YWxpZGF0ZVB1YmxpY1NlcnZlclVSTCh7IHB1YmxpY1NlcnZlclVSTCwgcmVxdWlyZWQgPSBmYWxzZSB9KSB7XG4gICAgaWYgKCFwdWJsaWNTZXJ2ZXJVUkwpIHtcbiAgICAgIGlmICghcmVxdWlyZWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhyb3cgJ1RoZSBvcHRpb24gcHVibGljU2VydmVyVVJMIGlzIHJlcXVpcmVkLic7XG4gICAgfVxuXG4gICAgY29uc3QgdHlwZSA9IHR5cGVvZiBwdWJsaWNTZXJ2ZXJVUkw7XG5cbiAgICBpZiAodHlwZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGlmICghcHVibGljU2VydmVyVVJMLnN0YXJ0c1dpdGgoJ2h0dHA6Ly8nKSAmJiAhcHVibGljU2VydmVyVVJMLnN0YXJ0c1dpdGgoJ2h0dHBzOi8vJykpIHtcbiAgICAgICAgdGhyb3cgJ1RoZSBvcHRpb24gcHVibGljU2VydmVyVVJMIG11c3QgYmUgYSB2YWxpZCBVUkwgc3RhcnRpbmcgd2l0aCBodHRwOi8vIG9yIGh0dHBzOi8vLic7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHR5cGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aHJvdyBgVGhlIG9wdGlvbiBwdWJsaWNTZXJ2ZXJVUkwgbXVzdCBiZSBhIHN0cmluZyBvciBmdW5jdGlvbiwgYnV0IGdvdCAke3R5cGV9LmA7XG4gIH1cblxuICBzdGF0aWMgdmFsaWRhdGVFbWFpbENvbmZpZ3VyYXRpb24oe1xuICAgIGVtYWlsQWRhcHRlcixcbiAgICBhcHBOYW1lLFxuICAgIHB1YmxpY1NlcnZlclVSTCxcbiAgICBlbWFpbFZlcmlmeVRva2VuVmFsaWRpdHlEdXJhdGlvbixcbiAgICBlbWFpbFZlcmlmeVRva2VuUmV1c2VJZlZhbGlkLFxuICAgIGVtYWlsVmVyaWZ5U3VjY2Vzc09uSW52YWxpZEVtYWlsLFxuICB9KSB7XG4gICAgaWYgKCFlbWFpbEFkYXB0ZXIpIHtcbiAgICAgIHRocm93ICdBbiBlbWFpbEFkYXB0ZXIgaXMgcmVxdWlyZWQgZm9yIGUtbWFpbCB2ZXJpZmljYXRpb24gYW5kIHBhc3N3b3JkIHJlc2V0cy4nO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGFwcE5hbWUgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyAnQW4gYXBwIG5hbWUgaXMgcmVxdWlyZWQgZm9yIGUtbWFpbCB2ZXJpZmljYXRpb24gYW5kIHBhc3N3b3JkIHJlc2V0cy4nO1xuICAgIH1cbiAgICB0aGlzLnZhbGlkYXRlUHVibGljU2VydmVyVVJMKHsgcHVibGljU2VydmVyVVJMLCByZXF1aXJlZDogdHJ1ZSB9KTtcbiAgICBpZiAoZW1haWxWZXJpZnlUb2tlblZhbGlkaXR5RHVyYXRpb24pIHtcbiAgICAgIGlmIChpc05hTihlbWFpbFZlcmlmeVRva2VuVmFsaWRpdHlEdXJhdGlvbikpIHtcbiAgICAgICAgdGhyb3cgJ0VtYWlsIHZlcmlmeSB0b2tlbiB2YWxpZGl0eSBkdXJhdGlvbiBtdXN0IGJlIGEgdmFsaWQgbnVtYmVyLic7XG4gICAgICB9IGVsc2UgaWYgKGVtYWlsVmVyaWZ5VG9rZW5WYWxpZGl0eUR1cmF0aW9uIDw9IDApIHtcbiAgICAgICAgdGhyb3cgJ0VtYWlsIHZlcmlmeSB0b2tlbiB2YWxpZGl0eSBkdXJhdGlvbiBtdXN0IGJlIGEgdmFsdWUgZ3JlYXRlciB0aGFuIDAuJztcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGVtYWlsVmVyaWZ5VG9rZW5SZXVzZUlmVmFsaWQgJiYgdHlwZW9mIGVtYWlsVmVyaWZ5VG9rZW5SZXVzZUlmVmFsaWQgIT09ICdib29sZWFuJykge1xuICAgICAgdGhyb3cgJ2VtYWlsVmVyaWZ5VG9rZW5SZXVzZUlmVmFsaWQgbXVzdCBiZSBhIGJvb2xlYW4gdmFsdWUnO1xuICAgIH1cbiAgICBpZiAoZW1haWxWZXJpZnlUb2tlblJldXNlSWZWYWxpZCAmJiAhZW1haWxWZXJpZnlUb2tlblZhbGlkaXR5RHVyYXRpb24pIHtcbiAgICAgIHRocm93ICdZb3UgY2Fubm90IHVzZSBlbWFpbFZlcmlmeVRva2VuUmV1c2VJZlZhbGlkIHdpdGhvdXQgZW1haWxWZXJpZnlUb2tlblZhbGlkaXR5RHVyYXRpb24nO1xuICAgIH1cbiAgICBpZiAoZW1haWxWZXJpZnlTdWNjZXNzT25JbnZhbGlkRW1haWwgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2YgZW1haWxWZXJpZnlTdWNjZXNzT25JbnZhbGlkRW1haWwgIT09ICdib29sZWFuJykge1xuICAgICAgdGhyb3cgJ2VtYWlsVmVyaWZ5U3VjY2Vzc09uSW52YWxpZEVtYWlsIG11c3QgYmUgYSBib29sZWFuIHZhbHVlJztcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgdmFsaWRhdGVGaWxlVXBsb2FkT3B0aW9ucyhmaWxlVXBsb2FkKSB7XG4gICAgdHJ5IHtcbiAgICAgIGlmIChmaWxlVXBsb2FkID09IG51bGwgfHwgdHlwZW9mIGZpbGVVcGxvYWQgIT09ICdvYmplY3QnIHx8IEFycmF5LmlzQXJyYXkoZmlsZVVwbG9hZCkpIHtcbiAgICAgICAgdGhyb3cgJ2ZpbGVVcGxvYWQgbXVzdCBiZSBhbiBvYmplY3QgdmFsdWUuJztcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBpZiAoZSBpbnN0YW5jZW9mIFJlZmVyZW5jZUVycm9yKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRocm93IGU7XG4gICAgfVxuICAgIGlmIChmaWxlVXBsb2FkLmVuYWJsZUZvckFub255bW91c1VzZXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgZmlsZVVwbG9hZC5lbmFibGVGb3JBbm9ueW1vdXNVc2VyID0gRmlsZVVwbG9hZE9wdGlvbnMuZW5hYmxlRm9yQW5vbnltb3VzVXNlci5kZWZhdWx0O1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGZpbGVVcGxvYWQuZW5hYmxlRm9yQW5vbnltb3VzVXNlciAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICB0aHJvdyAnZmlsZVVwbG9hZC5lbmFibGVGb3JBbm9ueW1vdXNVc2VyIG11c3QgYmUgYSBib29sZWFuIHZhbHVlLic7XG4gICAgfVxuICAgIGlmIChmaWxlVXBsb2FkLmVuYWJsZUZvclB1YmxpYyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBmaWxlVXBsb2FkLmVuYWJsZUZvclB1YmxpYyA9IEZpbGVVcGxvYWRPcHRpb25zLmVuYWJsZUZvclB1YmxpYy5kZWZhdWx0O1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGZpbGVVcGxvYWQuZW5hYmxlRm9yUHVibGljICE9PSAnYm9vbGVhbicpIHtcbiAgICAgIHRocm93ICdmaWxlVXBsb2FkLmVuYWJsZUZvclB1YmxpYyBtdXN0IGJlIGEgYm9vbGVhbiB2YWx1ZS4nO1xuICAgIH1cbiAgICBpZiAoZmlsZVVwbG9hZC5lbmFibGVGb3JBdXRoZW50aWNhdGVkVXNlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBmaWxlVXBsb2FkLmVuYWJsZUZvckF1dGhlbnRpY2F0ZWRVc2VyID0gRmlsZVVwbG9hZE9wdGlvbnMuZW5hYmxlRm9yQXV0aGVudGljYXRlZFVzZXIuZGVmYXVsdDtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBmaWxlVXBsb2FkLmVuYWJsZUZvckF1dGhlbnRpY2F0ZWRVc2VyICE9PSAnYm9vbGVhbicpIHtcbiAgICAgIHRocm93ICdmaWxlVXBsb2FkLmVuYWJsZUZvckF1dGhlbnRpY2F0ZWRVc2VyIG11c3QgYmUgYSBib29sZWFuIHZhbHVlLic7XG4gICAgfVxuICAgIGlmIChmaWxlVXBsb2FkLmZpbGVFeHRlbnNpb25zID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGZpbGVVcGxvYWQuZmlsZUV4dGVuc2lvbnMgPSBGaWxlVXBsb2FkT3B0aW9ucy5maWxlRXh0ZW5zaW9ucy5kZWZhdWx0O1xuICAgIH0gZWxzZSBpZiAoIUFycmF5LmlzQXJyYXkoZmlsZVVwbG9hZC5maWxlRXh0ZW5zaW9ucykpIHtcbiAgICAgIHRocm93ICdmaWxlVXBsb2FkLmZpbGVFeHRlbnNpb25zIG11c3QgYmUgYW4gYXJyYXkuJztcbiAgICB9XG4gICAgaWYgKGZpbGVVcGxvYWQuYWxsb3dlZEZpbGVVcmxEb21haW5zID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGZpbGVVcGxvYWQuYWxsb3dlZEZpbGVVcmxEb21haW5zID0gRmlsZVVwbG9hZE9wdGlvbnMuYWxsb3dlZEZpbGVVcmxEb21haW5zLmRlZmF1bHQ7XG4gICAgfSBlbHNlIGlmICghQXJyYXkuaXNBcnJheShmaWxlVXBsb2FkLmFsbG93ZWRGaWxlVXJsRG9tYWlucykpIHtcbiAgICAgIHRocm93ICdmaWxlVXBsb2FkLmFsbG93ZWRGaWxlVXJsRG9tYWlucyBtdXN0IGJlIGFuIGFycmF5Lic7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvciAoY29uc3QgZG9tYWluIG9mIGZpbGVVcGxvYWQuYWxsb3dlZEZpbGVVcmxEb21haW5zKSB7XG4gICAgICAgIGlmICh0eXBlb2YgZG9tYWluICE9PSAnc3RyaW5nJyB8fCBkb21haW4gPT09ICcnKSB7XG4gICAgICAgICAgdGhyb3cgJ2ZpbGVVcGxvYWQuYWxsb3dlZEZpbGVVcmxEb21haW5zIG11c3QgY29udGFpbiBvbmx5IG5vbi1lbXB0eSBzdHJpbmdzLic7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBzdGF0aWMgdmFsaWRhdGVGaWxlRG93bmxvYWRPcHRpb25zKGZpbGVEb3dubG9hZCkge1xuICAgIHRyeSB7XG4gICAgICBpZiAoZmlsZURvd25sb2FkID09IG51bGwgfHwgdHlwZW9mIGZpbGVEb3dubG9hZCAhPT0gJ29iamVjdCcgfHwgQXJyYXkuaXNBcnJheShmaWxlRG93bmxvYWQpKSB7XG4gICAgICAgIHRocm93ICdmaWxlRG93bmxvYWQgbXVzdCBiZSBhbiBvYmplY3QgdmFsdWUuJztcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBpZiAoZSBpbnN0YW5jZW9mIFJlZmVyZW5jZUVycm9yKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRocm93IGU7XG4gICAgfVxuICAgIGlmIChmaWxlRG93bmxvYWQuZW5hYmxlRm9yQW5vbnltb3VzVXNlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBmaWxlRG93bmxvYWQuZW5hYmxlRm9yQW5vbnltb3VzVXNlciA9IEZpbGVEb3dubG9hZE9wdGlvbnMuZW5hYmxlRm9yQW5vbnltb3VzVXNlci5kZWZhdWx0O1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGZpbGVEb3dubG9hZC5lbmFibGVGb3JBbm9ueW1vdXNVc2VyICE9PSAnYm9vbGVhbicpIHtcbiAgICAgIHRocm93ICdmaWxlRG93bmxvYWQuZW5hYmxlRm9yQW5vbnltb3VzVXNlciBtdXN0IGJlIGEgYm9vbGVhbiB2YWx1ZS4nO1xuICAgIH1cbiAgICBpZiAoZmlsZURvd25sb2FkLmVuYWJsZUZvclB1YmxpYyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBmaWxlRG93bmxvYWQuZW5hYmxlRm9yUHVibGljID0gRmlsZURvd25sb2FkT3B0aW9ucy5lbmFibGVGb3JQdWJsaWMuZGVmYXVsdDtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBmaWxlRG93bmxvYWQuZW5hYmxlRm9yUHVibGljICE9PSAnYm9vbGVhbicpIHtcbiAgICAgIHRocm93ICdmaWxlRG93bmxvYWQuZW5hYmxlRm9yUHVibGljIG11c3QgYmUgYSBib29sZWFuIHZhbHVlLic7XG4gICAgfVxuICAgIGlmIChmaWxlRG93bmxvYWQuZW5hYmxlRm9yQXV0aGVudGljYXRlZFVzZXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgZmlsZURvd25sb2FkLmVuYWJsZUZvckF1dGhlbnRpY2F0ZWRVc2VyID0gRmlsZURvd25sb2FkT3B0aW9ucy5lbmFibGVGb3JBdXRoZW50aWNhdGVkVXNlci5kZWZhdWx0O1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGZpbGVEb3dubG9hZC5lbmFibGVGb3JBdXRoZW50aWNhdGVkVXNlciAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICB0aHJvdyAnZmlsZURvd25sb2FkLmVuYWJsZUZvckF1dGhlbnRpY2F0ZWRVc2VyIG11c3QgYmUgYSBib29sZWFuIHZhbHVlLic7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIHZhbGlkYXRlSXBzKGZpZWxkLCBtYXN0ZXJLZXlJcHMpIHtcbiAgICBmb3IgKGxldCBpcCBvZiBtYXN0ZXJLZXlJcHMpIHtcbiAgICAgIGlmIChpcC5pbmNsdWRlcygnLycpKSB7XG4gICAgICAgIGlwID0gaXAuc3BsaXQoJy8nKVswXTtcbiAgICAgIH1cbiAgICAgIGlmICghbmV0LmlzSVAoaXApKSB7XG4gICAgICAgIHRocm93IGBUaGUgUGFyc2UgU2VydmVyIG9wdGlvbiBcIiR7ZmllbGR9XCIgY29udGFpbnMgYW4gaW52YWxpZCBJUCBhZGRyZXNzIFwiJHtpcH1cIi5gO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyB2YWxpZGF0ZUVuYWJsZUluc2VjdXJlQXV0aEFkYXB0ZXJzKGVuYWJsZUluc2VjdXJlQXV0aEFkYXB0ZXJzKSB7XG4gICAgaWYgKGVuYWJsZUluc2VjdXJlQXV0aEFkYXB0ZXJzICYmIHR5cGVvZiBlbmFibGVJbnNlY3VyZUF1dGhBZGFwdGVycyAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICB0aHJvdyAnUGFyc2UgU2VydmVyIG9wdGlvbiBlbmFibGVJbnNlY3VyZUF1dGhBZGFwdGVycyBtdXN0IGJlIGEgYm9vbGVhbi4nO1xuICAgIH1cbiAgICBpZiAoZW5hYmxlSW5zZWN1cmVBdXRoQWRhcHRlcnMpIHtcbiAgICAgIERlcHJlY2F0b3IubG9nUnVudGltZURlcHJlY2F0aW9uKHsgdXNhZ2U6ICdpbnNlY3VyZSBhZGFwdGVyJyB9KTtcbiAgICB9XG4gIH1cblxuICBnZXQgbW91bnQoKSB7XG4gICAgdmFyIG1vdW50ID0gdGhpcy5fbW91bnQ7XG4gICAgaWYgKHRoaXMucHVibGljU2VydmVyVVJMKSB7XG4gICAgICBtb3VudCA9IHRoaXMucHVibGljU2VydmVyVVJMO1xuICAgIH1cbiAgICByZXR1cm4gbW91bnQ7XG4gIH1cblxuICBzZXQgbW91bnQobmV3VmFsdWUpIHtcbiAgICB0aGlzLl9tb3VudCA9IG5ld1ZhbHVlO1xuICB9XG5cbiAgc3RhdGljIHZhbGlkYXRlU2Vzc2lvbkNvbmZpZ3VyYXRpb24oc2Vzc2lvbkxlbmd0aCwgZXhwaXJlSW5hY3RpdmVTZXNzaW9ucykge1xuICAgIGlmIChleHBpcmVJbmFjdGl2ZVNlc3Npb25zKSB7XG4gICAgICBpZiAoaXNOYU4oc2Vzc2lvbkxlbmd0aCkpIHtcbiAgICAgICAgdGhyb3cgJ1Nlc3Npb24gbGVuZ3RoIG11c3QgYmUgYSB2YWxpZCBudW1iZXIuJztcbiAgICAgIH0gZWxzZSBpZiAoc2Vzc2lvbkxlbmd0aCA8PSAwKSB7XG4gICAgICAgIHRocm93ICdTZXNzaW9uIGxlbmd0aCBtdXN0IGJlIGEgdmFsdWUgZ3JlYXRlciB0aGFuIDAuJztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBzdGF0aWMgdmFsaWRhdGVEZWZhdWx0TGltaXQoZGVmYXVsdExpbWl0KSB7XG4gICAgaWYgKGRlZmF1bHRMaW1pdCA9PSBudWxsKSB7XG4gICAgICBkZWZhdWx0TGltaXQgPSBQYXJzZVNlcnZlck9wdGlvbnMuZGVmYXVsdExpbWl0LmRlZmF1bHQ7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgZGVmYXVsdExpbWl0ICE9PSAnbnVtYmVyJykge1xuICAgICAgdGhyb3cgJ0RlZmF1bHQgbGltaXQgbXVzdCBiZSBhIG51bWJlci4nO1xuICAgIH1cbiAgICBpZiAoZGVmYXVsdExpbWl0IDw9IDApIHtcbiAgICAgIHRocm93ICdEZWZhdWx0IGxpbWl0IG11c3QgYmUgYSB2YWx1ZSBncmVhdGVyIHRoYW4gMC4nO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyB2YWxpZGF0ZU1heExpbWl0KG1heExpbWl0KSB7XG4gICAgaWYgKG1heExpbWl0IDw9IDApIHtcbiAgICAgIHRocm93ICdNYXggbGltaXQgbXVzdCBiZSBhIHZhbHVlIGdyZWF0ZXIgdGhhbiAwLic7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIHZhbGlkYXRlUmVxdWVzdENvbXBsZXhpdHkocmVxdWVzdENvbXBsZXhpdHkpIHtcbiAgICBpZiAocmVxdWVzdENvbXBsZXhpdHkgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIHJlcXVlc3RDb21wbGV4aXR5ICE9PSAnb2JqZWN0JyB8fCBBcnJheS5pc0FycmF5KHJlcXVlc3RDb21wbGV4aXR5KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdyZXF1ZXN0Q29tcGxleGl0eSBtdXN0IGJlIGFuIG9iamVjdC4nKTtcbiAgICB9XG4gICAgY29uc3QgdmFsaWRLZXlzID0gT2JqZWN0LmtleXMoUmVxdWVzdENvbXBsZXhpdHlPcHRpb25zKTtcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhyZXF1ZXN0Q29tcGxleGl0eSkpIHtcbiAgICAgIGlmICghdmFsaWRLZXlzLmluY2x1ZGVzKGtleSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGByZXF1ZXN0Q29tcGxleGl0eSBjb250YWlucyB1bmtub3duIHByb3BlcnR5ICcke2tleX0nLmApO1xuICAgICAgfVxuICAgIH1cbiAgICBmb3IgKGNvbnN0IGtleSBvZiB2YWxpZEtleXMpIHtcbiAgICAgIGlmIChyZXF1ZXN0Q29tcGxleGl0eVtrZXldICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSByZXF1ZXN0Q29tcGxleGl0eVtrZXldO1xuICAgICAgICBpZiAoIU51bWJlci5pc0ludGVnZXIodmFsdWUpIHx8ICh2YWx1ZSA8IDEgJiYgdmFsdWUgIT09IC0xKSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgcmVxdWVzdENvbXBsZXhpdHkuJHtrZXl9IG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyIG9yIC0xIHRvIGRpc2FibGUuYCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlcXVlc3RDb21wbGV4aXR5W2tleV0gPSBSZXF1ZXN0Q29tcGxleGl0eU9wdGlvbnNba2V5XS5kZWZhdWx0O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyB2YWxpZGF0ZUFsbG93SGVhZGVycyhhbGxvd0hlYWRlcnMpIHtcbiAgICBpZiAoIVtudWxsLCB1bmRlZmluZWRdLmluY2x1ZGVzKGFsbG93SGVhZGVycykpIHtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGFsbG93SGVhZGVycykpIHtcbiAgICAgICAgYWxsb3dIZWFkZXJzLmZvckVhY2goaGVhZGVyID0+IHtcbiAgICAgICAgICBpZiAodHlwZW9mIGhlYWRlciAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHRocm93ICdBbGxvdyBoZWFkZXJzIG11c3Qgb25seSBjb250YWluIHN0cmluZ3MnO1xuICAgICAgICAgIH0gZWxzZSBpZiAoIWhlYWRlci50cmltKCkubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aHJvdyAnQWxsb3cgaGVhZGVycyBtdXN0IG5vdCBjb250YWluIGVtcHR5IHN0cmluZ3MnO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyAnQWxsb3cgaGVhZGVycyBtdXN0IGJlIGFuIGFycmF5JztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBzdGF0aWMgdmFsaWRhdGVMb2dMZXZlbHMobG9nTGV2ZWxzKSB7XG4gICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMoTG9nTGV2ZWxzKSkge1xuICAgICAgaWYgKGxvZ0xldmVsc1trZXldKSB7XG4gICAgICAgIGlmICh2YWxpZExvZ0xldmVscy5pbmRleE9mKGxvZ0xldmVsc1trZXldKSA9PT0gLTEpIHtcbiAgICAgICAgICB0aHJvdyBgJyR7a2V5fScgbXVzdCBiZSBvbmUgb2YgJHtKU09OLnN0cmluZ2lmeSh2YWxpZExvZ0xldmVscyl9YDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbG9nTGV2ZWxzW2tleV0gPSBMb2dMZXZlbHNba2V5XS5kZWZhdWx0O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyB2YWxpZGF0ZURhdGFiYXNlT3B0aW9ucyhkYXRhYmFzZU9wdGlvbnMpIHtcbiAgICBpZiAoZGF0YWJhc2VPcHRpb25zID09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGRhdGFiYXNlT3B0aW9ucykgIT09ICdbb2JqZWN0IE9iamVjdF0nKSB7XG4gICAgICB0aHJvdyBgZGF0YWJhc2VPcHRpb25zIG11c3QgYmUgYW4gb2JqZWN0YDtcbiAgICB9XG5cbiAgICBpZiAoZGF0YWJhc2VPcHRpb25zLmVuYWJsZVNjaGVtYUhvb2tzID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGRhdGFiYXNlT3B0aW9ucy5lbmFibGVTY2hlbWFIb29rcyA9IERhdGFiYXNlT3B0aW9ucy5lbmFibGVTY2hlbWFIb29rcy5kZWZhdWx0O1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGRhdGFiYXNlT3B0aW9ucy5lbmFibGVTY2hlbWFIb29rcyAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICB0aHJvdyBgZGF0YWJhc2VPcHRpb25zLmVuYWJsZVNjaGVtYUhvb2tzIG11c3QgYmUgYSBib29sZWFuYDtcbiAgICB9XG4gICAgaWYgKGRhdGFiYXNlT3B0aW9ucy5zY2hlbWFDYWNoZVR0bCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBkYXRhYmFzZU9wdGlvbnMuc2NoZW1hQ2FjaGVUdGwgPSBEYXRhYmFzZU9wdGlvbnMuc2NoZW1hQ2FjaGVUdGwuZGVmYXVsdDtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBkYXRhYmFzZU9wdGlvbnMuc2NoZW1hQ2FjaGVUdGwgIT09ICdudW1iZXInKSB7XG4gICAgICB0aHJvdyBgZGF0YWJhc2VPcHRpb25zLnNjaGVtYUNhY2hlVHRsIG11c3QgYmUgYSBudW1iZXJgO1xuICAgIH1cbiAgICBpZiAoZGF0YWJhc2VPcHRpb25zLmFsbG93UHVibGljRXhwbGFpbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBkYXRhYmFzZU9wdGlvbnMuYWxsb3dQdWJsaWNFeHBsYWluID0gRGF0YWJhc2VPcHRpb25zLmFsbG93UHVibGljRXhwbGFpbi5kZWZhdWx0O1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGRhdGFiYXNlT3B0aW9ucy5hbGxvd1B1YmxpY0V4cGxhaW4gIT09ICdib29sZWFuJykge1xuICAgICAgdGhyb3cgYFBhcnNlIFNlcnZlciBvcHRpb24gJ2RhdGFiYXNlT3B0aW9ucy5hbGxvd1B1YmxpY0V4cGxhaW4nIG11c3QgYmUgYSBib29sZWFuLmA7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIHZhbGlkYXRlTGl2ZVF1ZXJ5T3B0aW9ucyhsaXZlUXVlcnkpIHtcbiAgICBpZiAobGl2ZVF1ZXJ5ID09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAobGl2ZVF1ZXJ5LnJlZ2V4VGltZW91dCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBsaXZlUXVlcnkucmVnZXhUaW1lb3V0ID0gTGl2ZVF1ZXJ5T3B0aW9ucy5yZWdleFRpbWVvdXQuZGVmYXVsdDtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBsaXZlUXVlcnkucmVnZXhUaW1lb3V0ICE9PSAnbnVtYmVyJykge1xuICAgICAgdGhyb3cgYGxpdmVRdWVyeS5yZWdleFRpbWVvdXQgbXVzdCBiZSBhIG51bWJlcmA7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIHZhbGlkYXRlUm91dGVBbGxvd0xpc3Qocm91dGVBbGxvd0xpc3QpIHtcbiAgICBpZiAocm91dGVBbGxvd0xpc3QgPT09IHVuZGVmaW5lZCB8fCByb3V0ZUFsbG93TGlzdCA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoIUFycmF5LmlzQXJyYXkocm91dGVBbGxvd0xpc3QpKSB7XG4gICAgICB0aHJvdyAnUGFyc2UgU2VydmVyIG9wdGlvbiByb3V0ZUFsbG93TGlzdCBtdXN0IGJlIGFuIGFycmF5IG9mIHN0cmluZ3MuJztcbiAgICB9XG4gICAgZm9yIChjb25zdCBwYXR0ZXJuIG9mIHJvdXRlQWxsb3dMaXN0KSB7XG4gICAgICBpZiAodHlwZW9mIHBhdHRlcm4gIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHRocm93IGBQYXJzZSBTZXJ2ZXIgb3B0aW9uIHJvdXRlQWxsb3dMaXN0IGNvbnRhaW5zIGEgbm9uLXN0cmluZyB2YWx1ZS5gO1xuICAgICAgfVxuICAgICAgdHJ5IHtcbiAgICAgICAgbmV3IFJlZ0V4cCgnXicgKyBwYXR0ZXJuICsgJyQnKTtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICB0aHJvdyBgUGFyc2UgU2VydmVyIG9wdGlvbiByb3V0ZUFsbG93TGlzdCBjb250YWlucyBhbiBpbnZhbGlkIHJlZ2V4IHBhdHRlcm46IFwiJHtwYXR0ZXJufVwiLmA7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIHZhbGlkYXRlUmF0ZUxpbWl0KHJhdGVMaW1pdCkge1xuICAgIGlmICghcmF0ZUxpbWl0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChcbiAgICAgIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChyYXRlTGltaXQpICE9PSAnW29iamVjdCBPYmplY3RdJyAmJlxuICAgICAgIUFycmF5LmlzQXJyYXkocmF0ZUxpbWl0KVxuICAgICkge1xuICAgICAgdGhyb3cgYHJhdGVMaW1pdCBtdXN0IGJlIGFuIGFycmF5IG9yIG9iamVjdGA7XG4gICAgfVxuICAgIGNvbnN0IG9wdGlvbnMgPSBBcnJheS5pc0FycmF5KHJhdGVMaW1pdCkgPyByYXRlTGltaXQgOiBbcmF0ZUxpbWl0XTtcbiAgICBmb3IgKGNvbnN0IG9wdGlvbiBvZiBvcHRpb25zKSB7XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9wdGlvbikgIT09ICdbb2JqZWN0IE9iamVjdF0nKSB7XG4gICAgICAgIHRocm93IGByYXRlTGltaXQgbXVzdCBiZSBhbiBhcnJheSBvZiBvYmplY3RzYDtcbiAgICAgIH1cbiAgICAgIGlmIChvcHRpb24ucmVxdWVzdFBhdGggPT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBgcmF0ZUxpbWl0LnJlcXVlc3RQYXRoIG11c3QgYmUgZGVmaW5lZGA7XG4gICAgICB9XG4gICAgICBpZiAodHlwZW9mIG9wdGlvbi5yZXF1ZXN0UGF0aCAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgdGhyb3cgYHJhdGVMaW1pdC5yZXF1ZXN0UGF0aCBtdXN0IGJlIGEgc3RyaW5nYDtcbiAgICAgIH1cblxuICAgICAgLy8gVmFsaWRhdGUgdGhhdCB0aGUgcGF0aCBpcyB2YWxpZCBwYXRoLXRvLXJlZ2V4cCBzeW50YXhcbiAgICAgIHRyeSB7XG4gICAgICAgIHBhdGhUb1JlZ2V4cChvcHRpb24ucmVxdWVzdFBhdGgpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgdGhyb3cgYHJhdGVMaW1pdC5yZXF1ZXN0UGF0aCBcIiR7b3B0aW9uLnJlcXVlc3RQYXRofVwiIGlzIG5vdCB2YWxpZDogJHtlcnJvci5tZXNzYWdlfWA7XG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb24ucmVxdWVzdFRpbWVXaW5kb3cgPT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBgcmF0ZUxpbWl0LnJlcXVlc3RUaW1lV2luZG93IG11c3QgYmUgZGVmaW5lZGA7XG4gICAgICB9XG4gICAgICBpZiAodHlwZW9mIG9wdGlvbi5yZXF1ZXN0VGltZVdpbmRvdyAhPT0gJ251bWJlcicpIHtcbiAgICAgICAgdGhyb3cgYHJhdGVMaW1pdC5yZXF1ZXN0VGltZVdpbmRvdyBtdXN0IGJlIGEgbnVtYmVyYDtcbiAgICAgIH1cbiAgICAgIGlmIChvcHRpb24uaW5jbHVkZUludGVybmFsUmVxdWVzdHMgJiYgdHlwZW9mIG9wdGlvbi5pbmNsdWRlSW50ZXJuYWxSZXF1ZXN0cyAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgIHRocm93IGByYXRlTGltaXQuaW5jbHVkZUludGVybmFsUmVxdWVzdHMgbXVzdCBiZSBhIGJvb2xlYW5gO1xuICAgICAgfVxuICAgICAgaWYgKG9wdGlvbi5yZXF1ZXN0Q291bnQgPT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBgcmF0ZUxpbWl0LnJlcXVlc3RDb3VudCBtdXN0IGJlIGRlZmluZWRgO1xuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiBvcHRpb24ucmVxdWVzdENvdW50ICE9PSAnbnVtYmVyJykge1xuICAgICAgICB0aHJvdyBgcmF0ZUxpbWl0LnJlcXVlc3RDb3VudCBtdXN0IGJlIGEgbnVtYmVyYDtcbiAgICAgIH1cbiAgICAgIGlmIChvcHRpb24uZXJyb3JSZXNwb25zZU1lc3NhZ2UgJiYgdHlwZW9mIG9wdGlvbi5lcnJvclJlc3BvbnNlTWVzc2FnZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgdGhyb3cgYHJhdGVMaW1pdC5lcnJvclJlc3BvbnNlTWVzc2FnZSBtdXN0IGJlIGEgc3RyaW5nYDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IG9wdGlvbnMgPSBPYmplY3Qua2V5cyhQYXJzZVNlcnZlci5SYXRlTGltaXRab25lKTtcbiAgICAgIGlmIChvcHRpb24uem9uZSAmJiAhb3B0aW9ucy5pbmNsdWRlcyhvcHRpb24uem9uZSkpIHtcbiAgICAgICAgY29uc3QgZm9ybWF0dGVyID0gbmV3IEludGwuTGlzdEZvcm1hdCgnZW4nLCB7IHN0eWxlOiAnc2hvcnQnLCB0eXBlOiAnZGlzanVuY3Rpb24nIH0pO1xuICAgICAgICB0aHJvdyBgcmF0ZUxpbWl0LnpvbmUgbXVzdCBiZSBvbmUgb2YgJHtmb3JtYXR0ZXIuZm9ybWF0KG9wdGlvbnMpfWA7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZ2VuZXJhdGVFbWFpbFZlcmlmeVRva2VuRXhwaXJlc0F0KCkge1xuICAgIGlmICghdGhpcy52ZXJpZnlVc2VyRW1haWxzIHx8ICF0aGlzLmVtYWlsVmVyaWZ5VG9rZW5WYWxpZGl0eUR1cmF0aW9uKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICB2YXIgbm93ID0gbmV3IERhdGUoKTtcbiAgICByZXR1cm4gbmV3IERhdGUobm93LmdldFRpbWUoKSArIHRoaXMuZW1haWxWZXJpZnlUb2tlblZhbGlkaXR5RHVyYXRpb24gKiAxMDAwKTtcbiAgfVxuXG4gIGdlbmVyYXRlUGFzc3dvcmRSZXNldFRva2VuRXhwaXJlc0F0KCkge1xuICAgIGlmICghdGhpcy5wYXNzd29yZFBvbGljeSB8fCAhdGhpcy5wYXNzd29yZFBvbGljeS5yZXNldFRva2VuVmFsaWRpdHlEdXJhdGlvbikge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgY29uc3Qgbm93ID0gbmV3IERhdGUoKTtcbiAgICByZXR1cm4gbmV3IERhdGUobm93LmdldFRpbWUoKSArIHRoaXMucGFzc3dvcmRQb2xpY3kucmVzZXRUb2tlblZhbGlkaXR5RHVyYXRpb24gKiAxMDAwKTtcbiAgfVxuXG4gIGdlbmVyYXRlU2Vzc2lvbkV4cGlyZXNBdCgpIHtcbiAgICBpZiAoIXRoaXMuZXhwaXJlSW5hY3RpdmVTZXNzaW9ucykge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgdmFyIG5vdyA9IG5ldyBEYXRlKCk7XG4gICAgcmV0dXJuIG5ldyBEYXRlKG5vdy5nZXRUaW1lKCkgKyB0aGlzLnNlc3Npb25MZW5ndGggKiAxMDAwKTtcbiAgfVxuXG4gIHVucmVnaXN0ZXJSYXRlTGltaXRlcnMoKSB7XG4gICAgbGV0IGkgPSB0aGlzLnJhdGVMaW1pdHM/Lmxlbmd0aDtcbiAgICB3aGlsZSAoaS0tKSB7XG4gICAgICBjb25zdCBsaW1pdCA9IHRoaXMucmF0ZUxpbWl0c1tpXTtcbiAgICAgIGlmIChsaW1pdC5jbG91ZCkge1xuICAgICAgICB0aGlzLnJhdGVMaW1pdHMuc3BsaWNlKGksIDEpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGdldCBpbnZhbGlkTGlua1VSTCgpIHtcbiAgICByZXR1cm4gdGhpcy5jdXN0b21QYWdlcy5pbnZhbGlkTGluayB8fCBgJHt0aGlzLnB1YmxpY1NlcnZlclVSTH0vYXBwcy9pbnZhbGlkX2xpbmsuaHRtbGA7XG4gIH1cblxuICBnZXQgaW52YWxpZFZlcmlmaWNhdGlvbkxpbmtVUkwoKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuY3VzdG9tUGFnZXMuaW52YWxpZFZlcmlmaWNhdGlvbkxpbmsgfHxcbiAgICAgIGAke3RoaXMucHVibGljU2VydmVyVVJMfS9hcHBzL2ludmFsaWRfdmVyaWZpY2F0aW9uX2xpbmsuaHRtbGBcbiAgICApO1xuICB9XG5cbiAgZ2V0IGxpbmtTZW5kU3VjY2Vzc1VSTCgpIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5jdXN0b21QYWdlcy5saW5rU2VuZFN1Y2Nlc3MgfHwgYCR7dGhpcy5wdWJsaWNTZXJ2ZXJVUkx9L2FwcHMvbGlua19zZW5kX3N1Y2Nlc3MuaHRtbGBcbiAgICApO1xuICB9XG5cbiAgZ2V0IGxpbmtTZW5kRmFpbFVSTCgpIHtcbiAgICByZXR1cm4gdGhpcy5jdXN0b21QYWdlcy5saW5rU2VuZEZhaWwgfHwgYCR7dGhpcy5wdWJsaWNTZXJ2ZXJVUkx9L2FwcHMvbGlua19zZW5kX2ZhaWwuaHRtbGA7XG4gIH1cblxuICBnZXQgdmVyaWZ5RW1haWxTdWNjZXNzVVJMKCkge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLmN1c3RvbVBhZ2VzLnZlcmlmeUVtYWlsU3VjY2VzcyB8fFxuICAgICAgYCR7dGhpcy5wdWJsaWNTZXJ2ZXJVUkx9L2FwcHMvdmVyaWZ5X2VtYWlsX3N1Y2Nlc3MuaHRtbGBcbiAgICApO1xuICB9XG5cbiAgZ2V0IGNob29zZVBhc3N3b3JkVVJMKCkge1xuICAgIHJldHVybiB0aGlzLmN1c3RvbVBhZ2VzLmNob29zZVBhc3N3b3JkIHx8IGAke3RoaXMucHVibGljU2VydmVyVVJMfS9hcHBzL2Nob29zZV9wYXNzd29yZGA7XG4gIH1cblxuICBnZXQgcmVxdWVzdFJlc2V0UGFzc3dvcmRVUkwoKSB7XG4gICAgcmV0dXJuIGAke3RoaXMucHVibGljU2VydmVyVVJMfS8ke3RoaXMucGFnZXNFbmRwb2ludH0vJHt0aGlzLmFwcGxpY2F0aW9uSWR9L3JlcXVlc3RfcGFzc3dvcmRfcmVzZXRgO1xuICB9XG5cbiAgZ2V0IHBhc3N3b3JkUmVzZXRTdWNjZXNzVVJMKCkge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLmN1c3RvbVBhZ2VzLnBhc3N3b3JkUmVzZXRTdWNjZXNzIHx8XG4gICAgICBgJHt0aGlzLnB1YmxpY1NlcnZlclVSTH0vYXBwcy9wYXNzd29yZF9yZXNldF9zdWNjZXNzLmh0bWxgXG4gICAgKTtcbiAgfVxuXG4gIGdldCBwYXJzZUZyYW1lVVJMKCkge1xuICAgIHJldHVybiB0aGlzLmN1c3RvbVBhZ2VzLnBhcnNlRnJhbWVVUkw7XG4gIH1cblxuICBnZXQgdmVyaWZ5RW1haWxVUkwoKSB7XG4gICAgcmV0dXJuIGAke3RoaXMucHVibGljU2VydmVyVVJMfS8ke3RoaXMucGFnZXNFbmRwb2ludH0vJHt0aGlzLmFwcGxpY2F0aW9uSWR9L3ZlcmlmeV9lbWFpbGA7XG4gIH1cblxuICBhc3luYyBsb2FkTWFzdGVyS2V5KCkge1xuICAgIGlmICh0eXBlb2YgdGhpcy5tYXN0ZXJLZXkgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGNvbnN0IHR0bElzRW1wdHkgPSAhdGhpcy5tYXN0ZXJLZXlUdGw7XG4gICAgICBjb25zdCBpc0V4cGlyZWQgPSB0aGlzLm1hc3RlcktleUNhY2hlPy5leHBpcmVzQXQgJiYgdGhpcy5tYXN0ZXJLZXlDYWNoZS5leHBpcmVzQXQgPCBuZXcgRGF0ZSgpO1xuXG4gICAgICBpZiAoKCFpc0V4cGlyZWQgfHwgdHRsSXNFbXB0eSkgJiYgdGhpcy5tYXN0ZXJLZXlDYWNoZT8ubWFzdGVyS2V5KSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1hc3RlcktleUNhY2hlLm1hc3RlcktleTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgbWFzdGVyS2V5ID0gYXdhaXQgdGhpcy5tYXN0ZXJLZXkoKTtcblxuICAgICAgY29uc3QgZXhwaXJlc0F0ID0gdGhpcy5tYXN0ZXJLZXlUdGwgPyBuZXcgRGF0ZShEYXRlLm5vdygpICsgMTAwMCAqIHRoaXMubWFzdGVyS2V5VHRsKSA6IG51bGxcbiAgICAgIHRoaXMubWFzdGVyS2V5Q2FjaGUgPSB7IG1hc3RlcktleSwgZXhwaXJlc0F0IH07XG4gICAgICBDb25maWcucHV0KHRoaXMpO1xuXG4gICAgICByZXR1cm4gdGhpcy5tYXN0ZXJLZXlDYWNoZS5tYXN0ZXJLZXk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMubWFzdGVyS2V5O1xuICB9XG5cbiAgZ2V0IHBhZ2VzRW5kcG9pbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMucGFnZXMgJiYgdGhpcy5wYWdlcy5wYWdlc0VuZHBvaW50XG4gICAgICA/IHRoaXMucGFnZXMucGFnZXNFbmRwb2ludFxuICAgICAgOiAnYXBwcyc7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQ29uZmlnO1xubW9kdWxlLmV4cG9ydHMgPSBDb25maWc7XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUlBLElBQUFBLE9BQUEsR0FBQUMsT0FBQTtBQUNBLElBQUFDLGFBQUEsR0FBQUQsT0FBQTtBQUNBLElBQUFFLElBQUEsR0FBQUMsc0JBQUEsQ0FBQUgsT0FBQTtBQUNBLElBQUFJLE1BQUEsR0FBQUQsc0JBQUEsQ0FBQUgsT0FBQTtBQUNBLElBQUFLLG1CQUFBLEdBQUFGLHNCQUFBLENBQUFILE9BQUE7QUFDQSxJQUFBTSxpQkFBQSxHQUFBTixPQUFBO0FBQ0EsSUFBQU8sUUFBQSxHQUFBUCxPQUFBO0FBQ0EsSUFBQVEsWUFBQSxHQUFBUixPQUFBO0FBY0EsSUFBQVMsTUFBQSxHQUFBTixzQkFBQSxDQUFBSCxPQUFBO0FBQ0EsSUFBQVUsV0FBQSxHQUFBUCxzQkFBQSxDQUFBSCxPQUFBO0FBQ0EsSUFBQVcsTUFBQSxHQUFBUixzQkFBQSxDQUFBSCxPQUFBO0FBQTRCLFNBQUFHLHVCQUFBUyxDQUFBLFdBQUFBLENBQUEsSUFBQUEsQ0FBQSxDQUFBQyxVQUFBLEdBQUFELENBQUEsS0FBQUUsT0FBQSxFQUFBRixDQUFBO0FBM0I1QjtBQUNBO0FBQ0E7O0FBMkJBLFNBQVNHLG1CQUFtQkEsQ0FBQ0MsR0FBRyxFQUFFO0VBQ2hDLElBQUksQ0FBQ0EsR0FBRyxFQUFFO0lBQ1IsT0FBT0EsR0FBRztFQUNaO0VBQ0EsSUFBSUEsR0FBRyxDQUFDQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUU7SUFDckJELEdBQUcsR0FBR0EsR0FBRyxDQUFDRSxTQUFTLENBQUMsQ0FBQyxFQUFFRixHQUFHLENBQUNHLE1BQU0sR0FBRyxDQUFDLENBQUM7RUFDeEM7RUFDQSxPQUFPSCxHQUFHO0FBQ1o7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsTUFB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
846
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbG9kYXNoIiwicmVxdWlyZSIsIl9wYXRoVG9SZWdleHAiLCJfbmV0IiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsIl9jYWNoZSIsIl9EYXRhYmFzZUNvbnRyb2xsZXIiLCJfTG9nZ2VyQ29udHJvbGxlciIsIl9wYWNrYWdlIiwiX0RlZmluaXRpb25zIiwiX1BhcnNlIiwiX0RlcHJlY2F0b3IiLCJfVXRpbHMiLCJlIiwiX19lc01vZHVsZSIsImRlZmF1bHQiLCJyZW1vdmVUcmFpbGluZ1NsYXNoIiwic3RyIiwiZW5kc1dpdGgiLCJzdWJzdHJpbmciLCJsZW5ndGgiLCJhc3luY0tleXMiLCJDb25maWciLCJnZXQiLCJhcHBsaWNhdGlvbklkIiwibW91bnQiLCJjYWNoZUluZm8iLCJBcHBDYWNoZSIsImNvbmZpZyIsIk9iamVjdCIsImtleXMiLCJmb3JFYWNoIiwia2V5IiwiZGF0YWJhc2UiLCJEYXRhYmFzZUNvbnRyb2xsZXIiLCJkYXRhYmFzZUNvbnRyb2xsZXIiLCJhZGFwdGVyIiwiZ2VuZXJhdGVTZXNzaW9uRXhwaXJlc0F0IiwiYmluZCIsImdlbmVyYXRlRW1haWxWZXJpZnlUb2tlbkV4cGlyZXNBdCIsInZlcnNpb24iLCJsb2FkS2V5cyIsIlByb21pc2UiLCJhbGwiLCJtYXAiLCJlcnJvciIsIkVycm9yIiwibWVzc2FnZSIsImNhY2hlZENvbmZpZyIsImFwcElkIiwidXBkYXRlZENvbmZpZyIsInB1dCIsInRyYW5zZm9ybUNvbmZpZ3VyYXRpb24iLCJzZXJ2ZXJDb25maWd1cmF0aW9uIiwiaW5jbHVkZXMiLCJ2YWxpZGF0ZU9wdGlvbnMiLCJ2YWxpZGF0ZUNvbnRyb2xsZXJzIiwicm91dGVBbGxvd0xpc3QiLCJfcm91dGVBbGxvd0xpc3RSZWdleCIsInBhdHRlcm4iLCJSZWdFeHAiLCJzZXR1cFBhc3N3b3JkVmFsaWRhdG9yIiwicGFzc3dvcmRQb2xpY3kiLCJjdXN0b21QYWdlcyIsInB1YmxpY1NlcnZlclVSTCIsInJldm9rZVNlc3Npb25PblBhc3N3b3JkUmVzZXQiLCJleHBpcmVJbmFjdGl2ZVNlc3Npb25zIiwic2Vzc2lvbkxlbmd0aCIsImRlZmF1bHRMaW1pdCIsIm1heExpbWl0IiwiYWNjb3VudExvY2tvdXQiLCJtYXN0ZXJLZXlJcHMiLCJtYXN0ZXJLZXkiLCJtYWludGVuYW5jZUtleSIsIm1haW50ZW5hbmNlS2V5SXBzIiwicmVhZE9ubHlNYXN0ZXJLZXkiLCJyZWFkT25seU1hc3RlcktleUlwcyIsImFsbG93SGVhZGVycyIsImlkZW1wb3RlbmN5T3B0aW9ucyIsImZpbGVVcGxvYWQiLCJmaWxlRG93bmxvYWQiLCJwYWdlcyIsInNlY3VyaXR5IiwiZW5mb3JjZVByaXZhdGVVc2VycyIsImVuYWJsZUluc2VjdXJlQXV0aEFkYXB0ZXJzIiwic2NoZW1hIiwicmVxdWVzdEtleXdvcmREZW55bGlzdCIsImFsbG93RXhwaXJlZEF1dGhEYXRhVG9rZW4iLCJsb2dMZXZlbHMiLCJyYXRlTGltaXQiLCJkYXRhYmFzZU9wdGlvbnMiLCJleHRlbmRTZXNzaW9uT25Vc2UiLCJhbGxvd0NsaWVudENsYXNzQ3JlYXRpb24iLCJyZXF1ZXN0Q29tcGxleGl0eSIsImxpdmVRdWVyeSIsInZhbGlkYXRlQWNjb3VudExvY2tvdXRQb2xpY3kiLCJ2YWxpZGF0ZVBhc3N3b3JkUG9saWN5IiwidmFsaWRhdGVGaWxlVXBsb2FkT3B0aW9ucyIsImFyZ3VtZW50cyIsInZhbGlkYXRlRmlsZURvd25sb2FkT3B0aW9ucyIsInZhbGlkYXRlUHVibGljU2VydmVyVVJMIiwidmFsaWRhdGVTZXNzaW9uQ29uZmlndXJhdGlvbiIsInZhbGlkYXRlSXBzIiwidmFsaWRhdGVEZWZhdWx0TGltaXQiLCJ2YWxpZGF0ZU1heExpbWl0IiwidmFsaWRhdGVBbGxvd0hlYWRlcnMiLCJ2YWxpZGF0ZUlkZW1wb3RlbmN5T3B0aW9ucyIsInZhbGlkYXRlUGFnZXNPcHRpb25zIiwidmFsaWRhdGVTZWN1cml0eU9wdGlvbnMiLCJ2YWxpZGF0ZVNjaGVtYU9wdGlvbnMiLCJ2YWxpZGF0ZUVuZm9yY2VQcml2YXRlVXNlcnMiLCJ2YWxpZGF0ZUVuYWJsZUluc2VjdXJlQXV0aEFkYXB0ZXJzIiwidmFsaWRhdGVBbGxvd0V4cGlyZWRBdXRoRGF0YVRva2VuIiwidmFsaWRhdGVSZXF1ZXN0S2V5d29yZERlbnlsaXN0IiwidmFsaWRhdGVSYXRlTGltaXQiLCJ2YWxpZGF0ZUxvZ0xldmVscyIsInZhbGlkYXRlRGF0YWJhc2VPcHRpb25zIiwidmFsaWRhdGVDdXN0b21QYWdlcyIsInZhbGlkYXRlQWxsb3dDbGllbnRDbGFzc0NyZWF0aW9uIiwidmFsaWRhdGVSZXF1ZXN0Q29tcGxleGl0eSIsInZhbGlkYXRlTGl2ZVF1ZXJ5T3B0aW9ucyIsInZhbGlkYXRlUm91dGVBbGxvd0xpc3QiLCJwcm90b3R5cGUiLCJ0b1N0cmluZyIsImNhbGwiLCJ2ZXJpZnlVc2VyRW1haWxzIiwidXNlckNvbnRyb2xsZXIiLCJhcHBOYW1lIiwiX3B1YmxpY1NlcnZlclVSTCIsImVtYWlsVmVyaWZ5VG9rZW5WYWxpZGl0eUR1cmF0aW9uIiwiZW1haWxWZXJpZnlUb2tlblJldXNlSWZWYWxpZCIsImVtYWlsVmVyaWZ5U3VjY2Vzc09uSW52YWxpZEVtYWlsIiwiZW1haWxBZGFwdGVyIiwidmFsaWRhdGVFbWFpbENvbmZpZ3VyYXRpb24iLCJ1bmRlZmluZWQiLCJBcnJheSIsImlzQXJyYXkiLCJlbmFibGVDaGVjayIsIlNlY3VyaXR5T3B0aW9ucyIsImlzQm9vbGVhbiIsImVuYWJsZUNoZWNrTG9nIiwiZGVmaW5pdGlvbnMiLCJTY2hlbWFPcHRpb25zIiwic3RyaWN0IiwiZGVsZXRlRXh0cmFGaWVsZHMiLCJyZWNyZWF0ZU1vZGlmaWVkRmllbGRzIiwibG9ja1NjaGVtYXMiLCJiZWZvcmVNaWdyYXRpb24iLCJhZnRlck1pZ3JhdGlvbiIsImVuYWJsZUxvY2FsaXphdGlvbiIsIlBhZ2VzT3B0aW9ucyIsImxvY2FsaXphdGlvbkpzb25QYXRoIiwiaXNTdHJpbmciLCJsb2NhbGl6YXRpb25GYWxsYmFja0xvY2FsZSIsInBsYWNlaG9sZGVycyIsImZvcmNlUmVkaXJlY3QiLCJwYWdlc1BhdGgiLCJwYWdlc0VuZHBvaW50IiwiY3VzdG9tVXJscyIsImN1c3RvbVJvdXRlcyIsImVuY29kZVBhZ2VQYXJhbUhlYWRlcnMiLCJ0dGwiLCJJZGVtcG90ZW5jeU9wdGlvbnMiLCJpc05hTiIsInBhdGhzIiwiZHVyYXRpb24iLCJOdW1iZXIiLCJpc0ludGVnZXIiLCJ0aHJlc2hvbGQiLCJ1bmxvY2tPblBhc3N3b3JkUmVzZXQiLCJBY2NvdW50TG9ja291dE9wdGlvbnMiLCJtYXhQYXNzd29yZEFnZSIsInJlc2V0VG9rZW5WYWxpZGl0eUR1cmF0aW9uIiwidmFsaWRhdG9yUGF0dGVybiIsIlV0aWxzIiwiaXNSZWdFeHAiLCJ2YWxpZGF0b3JDYWxsYmFjayIsImRvTm90QWxsb3dVc2VybmFtZSIsIm1heFBhc3N3b3JkSGlzdG9yeSIsInJlc2V0VG9rZW5SZXVzZUlmVmFsaWQiLCJyZXNldFBhc3N3b3JkU3VjY2Vzc09uSW52YWxpZEVtYWlsIiwicGF0dGVyblZhbGlkYXRvciIsInZhbHVlIiwidGVzdCIsInJlcXVpcmVkIiwidHlwZSIsInN0YXJ0c1dpdGgiLCJSZWZlcmVuY2VFcnJvciIsImVuYWJsZUZvckFub255bW91c1VzZXIiLCJGaWxlVXBsb2FkT3B0aW9ucyIsImVuYWJsZUZvclB1YmxpYyIsImVuYWJsZUZvckF1dGhlbnRpY2F0ZWRVc2VyIiwiZmlsZUV4dGVuc2lvbnMiLCJhbGxvd2VkRmlsZVVybERvbWFpbnMiLCJkb21haW4iLCJGaWxlRG93bmxvYWRPcHRpb25zIiwiZmllbGQiLCJpcCIsInNwbGl0IiwibmV0IiwiaXNJUCIsIkRlcHJlY2F0b3IiLCJsb2dSdW50aW1lRGVwcmVjYXRpb24iLCJ1c2FnZSIsIl9tb3VudCIsIm5ld1ZhbHVlIiwiUGFyc2VTZXJ2ZXJPcHRpb25zIiwidmFsaWRLZXlzIiwiUmVxdWVzdENvbXBsZXhpdHlPcHRpb25zIiwiZGVmIiwiaGVhZGVyIiwidHJpbSIsIkxvZ0xldmVscyIsInZhbGlkTG9nTGV2ZWxzIiwiaW5kZXhPZiIsIkpTT04iLCJzdHJpbmdpZnkiLCJlbmFibGVTY2hlbWFIb29rcyIsIkRhdGFiYXNlT3B0aW9ucyIsInNjaGVtYUNhY2hlVHRsIiwiYWxsb3dQdWJsaWNFeHBsYWluIiwicmVnZXhUaW1lb3V0IiwiTGl2ZVF1ZXJ5T3B0aW9ucyIsIm9wdGlvbnMiLCJvcHRpb24iLCJyZXF1ZXN0UGF0aCIsInBhdGhUb1JlZ2V4cCIsInJlcXVlc3RUaW1lV2luZG93IiwiaW5jbHVkZUludGVybmFsUmVxdWVzdHMiLCJyZXF1ZXN0Q291bnQiLCJlcnJvclJlc3BvbnNlTWVzc2FnZSIsIlBhcnNlU2VydmVyIiwiUmF0ZUxpbWl0Wm9uZSIsInpvbmUiLCJmb3JtYXR0ZXIiLCJJbnRsIiwiTGlzdEZvcm1hdCIsInN0eWxlIiwiZm9ybWF0Iiwibm93IiwiRGF0ZSIsImdldFRpbWUiLCJnZW5lcmF0ZVBhc3N3b3JkUmVzZXRUb2tlbkV4cGlyZXNBdCIsInVucmVnaXN0ZXJSYXRlTGltaXRlcnMiLCJpIiwicmF0ZUxpbWl0cyIsImxpbWl0IiwiY2xvdWQiLCJzcGxpY2UiLCJpbnZhbGlkTGlua1VSTCIsImludmFsaWRMaW5rIiwiaW52YWxpZFZlcmlmaWNhdGlvbkxpbmtVUkwiLCJpbnZhbGlkVmVyaWZpY2F0aW9uTGluayIsImxpbmtTZW5kU3VjY2Vzc1VSTCIsImxpbmtTZW5kU3VjY2VzcyIsImxpbmtTZW5kRmFpbFVSTCIsImxpbmtTZW5kRmFpbCIsInZlcmlmeUVtYWlsU3VjY2Vzc1VSTCIsInZlcmlmeUVtYWlsU3VjY2VzcyIsImNob29zZVBhc3N3b3JkVVJMIiwiY2hvb3NlUGFzc3dvcmQiLCJyZXF1ZXN0UmVzZXRQYXNzd29yZFVSTCIsInBhc3N3b3JkUmVzZXRTdWNjZXNzVVJMIiwicGFzc3dvcmRSZXNldFN1Y2Nlc3MiLCJwYXJzZUZyYW1lVVJMIiwidmVyaWZ5RW1haWxVUkwiLCJsb2FkTWFzdGVyS2V5IiwidHRsSXNFbXB0eSIsIm1hc3RlcktleVR0bCIsImlzRXhwaXJlZCIsIm1hc3RlcktleUNhY2hlIiwiZXhwaXJlc0F0IiwiZXhwb3J0cyIsIl9kZWZhdWx0IiwibW9kdWxlIl0sInNvdXJjZXMiOlsiLi4vc3JjL0NvbmZpZy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBBIENvbmZpZyBvYmplY3QgcHJvdmlkZXMgaW5mb3JtYXRpb24gYWJvdXQgaG93IGEgc3BlY2lmaWMgYXBwIGlzXG4vLyBjb25maWd1cmVkLlxuLy8gbW91bnQgaXMgdGhlIFVSTCBmb3IgdGhlIHJvb3Qgb2YgdGhlIEFQSTsgaW5jbHVkZXMgaHR0cCwgZG9tYWluLCBldGMuXG5cbmltcG9ydCB7IGlzQm9vbGVhbiwgaXNTdHJpbmcgfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgcGF0aFRvUmVnZXhwIH0gZnJvbSAncGF0aC10by1yZWdleHAnO1xuaW1wb3J0IG5ldCBmcm9tICduZXQnO1xuaW1wb3J0IEFwcENhY2hlIGZyb20gJy4vY2FjaGUnO1xuaW1wb3J0IERhdGFiYXNlQ29udHJvbGxlciBmcm9tICcuL0NvbnRyb2xsZXJzL0RhdGFiYXNlQ29udHJvbGxlcic7XG5pbXBvcnQgeyBsb2dMZXZlbHMgYXMgdmFsaWRMb2dMZXZlbHMgfSBmcm9tICcuL0NvbnRyb2xsZXJzL0xvZ2dlckNvbnRyb2xsZXInO1xuaW1wb3J0IHsgdmVyc2lvbiB9IGZyb20gJy4uL3BhY2thZ2UuanNvbic7XG5pbXBvcnQge1xuICBBY2NvdW50TG9ja291dE9wdGlvbnMsXG4gIERhdGFiYXNlT3B0aW9ucyxcbiAgRmlsZURvd25sb2FkT3B0aW9ucyxcbiAgRmlsZVVwbG9hZE9wdGlvbnMsXG4gIElkZW1wb3RlbmN5T3B0aW9ucyxcbiAgTGl2ZVF1ZXJ5T3B0aW9ucyxcbiAgTG9nTGV2ZWxzLFxuICBQYWdlc09wdGlvbnMsXG4gIFBhcnNlU2VydmVyT3B0aW9ucyxcbiAgU2NoZW1hT3B0aW9ucyxcbiAgUmVxdWVzdENvbXBsZXhpdHlPcHRpb25zLFxuICBTZWN1cml0eU9wdGlvbnMsXG59IGZyb20gJy4vT3B0aW9ucy9EZWZpbml0aW9ucyc7XG5pbXBvcnQgUGFyc2VTZXJ2ZXIgZnJvbSAnLi9jbG91ZC1jb2RlL1BhcnNlLlNlcnZlcic7XG5pbXBvcnQgRGVwcmVjYXRvciBmcm9tICcuL0RlcHJlY2F0b3IvRGVwcmVjYXRvcic7XG5pbXBvcnQgVXRpbHMgZnJvbSAnLi9VdGlscyc7XG5cbmZ1bmN0aW9uIHJlbW92ZVRyYWlsaW5nU2xhc2goc3RyKSB7XG4gIGlmICghc3RyKSB7XG4gICAgcmV0dXJuIHN0cjtcbiAgfVxuICBpZiAoc3RyLmVuZHNXaXRoKCcvJykpIHtcbiAgICBzdHIgPSBzdHIuc3Vic3RyaW5nKDAsIHN0ci5sZW5ndGggLSAxKTtcbiAgfVxuICByZXR1cm4gc3RyO1xufVxuXG4vKipcbiAqIENvbmZpZyBrZXlzIHRoYXQgbmVlZCB0byBiZSBsb2FkZWQgYXN5bmNocm9ub3VzbHkuXG4gKi9cbmNvbnN0IGFzeW5jS2V5cyA9IFsncHVibGljU2VydmVyVVJMJ107XG5cbmV4cG9ydCBjbGFzcyBDb25maWcge1xuICBzdGF0aWMgZ2V0KGFwcGxpY2F0aW9uSWQ6IHN0cmluZywgbW91bnQ6IHN0cmluZykge1xuICAgIGNvbnN0IGNhY2hlSW5mbyA9IEFwcENhY2hlLmdldChhcHBsaWNhdGlvbklkKTtcbiAgICBpZiAoIWNhY2hlSW5mbykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBjb25maWcgPSBuZXcgQ29uZmlnKCk7XG4gICAgY29uZmlnLmFwcGxpY2F0aW9uSWQgPSBhcHBsaWNhdGlvbklkO1xuICAgIE9iamVjdC5rZXlzKGNhY2hlSW5mbykuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgaWYgKGtleSA9PSAnZGF0YWJhc2VDb250cm9sbGVyJykge1xuICAgICAgICBjb25maWcuZGF0YWJhc2UgPSBuZXcgRGF0YWJhc2VDb250cm9sbGVyKGNhY2hlSW5mby5kYXRhYmFzZUNvbnRyb2xsZXIuYWRhcHRlciwgY29uZmlnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbmZpZ1trZXldID0gY2FjaGVJbmZvW2tleV07XG4gICAgICB9XG4gICAgfSk7XG4gICAgY29uZmlnLm1vdW50ID0gcmVtb3ZlVHJhaWxpbmdTbGFzaChtb3VudCk7XG4gICAgY29uZmlnLmdlbmVyYXRlU2Vzc2lvbkV4cGlyZXNBdCA9IGNvbmZpZy5nZW5lcmF0ZVNlc3Npb25FeHBpcmVzQXQuYmluZChjb25maWcpO1xuICAgIGNvbmZpZy5nZW5lcmF0ZUVtYWlsVmVyaWZ5VG9rZW5FeHBpcmVzQXQgPSBjb25maWcuZ2VuZXJhdGVFbWFpbFZlcmlmeVRva2VuRXhwaXJlc0F0LmJpbmQoXG4gICAgICBjb25maWdcbiAgICApO1xuICAgIGNvbmZpZy52ZXJzaW9uID0gdmVyc2lvbjtcbiAgICByZXR1cm4gY29uZmlnO1xuICB9XG5cbiAgYXN5bmMgbG9hZEtleXMoKSB7XG4gICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICBhc3luY0tleXMubWFwKGFzeW5jIGtleSA9PiB7XG4gICAgICAgIGlmICh0eXBlb2YgdGhpc1tgXyR7a2V5fWBdID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRoaXNba2V5XSA9IGF3YWl0IHRoaXNbYF8ke2tleX1gXSgpO1xuICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byByZXNvbHZlIGFzeW5jIGNvbmZpZyBrZXkgJyR7a2V5fSc6ICR7ZXJyb3IubWVzc2FnZX1gKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKTtcblxuICAgIGNvbnN0IGNhY2hlZENvbmZpZyA9IEFwcENhY2hlLmdldCh0aGlzLmFwcElkKTtcbiAgICBpZiAoY2FjaGVkQ29uZmlnKSB7XG4gICAgICBjb25zdCB1cGRhdGVkQ29uZmlnID0geyAuLi5jYWNoZWRDb25maWcgfTtcbiAgICAgIGFzeW5jS2V5cy5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgIHVwZGF0ZWRDb25maWdba2V5XSA9IHRoaXNba2V5XTtcbiAgICAgIH0pO1xuICAgICAgQXBwQ2FjaGUucHV0KHRoaXMuYXBwSWQsIHVwZGF0ZWRDb25maWcpO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyB0cmFuc2Zvcm1Db25maWd1cmF0aW9uKHNlcnZlckNvbmZpZ3VyYXRpb24pIHtcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhzZXJ2ZXJDb25maWd1cmF0aW9uKSkge1xuICAgICAgaWYgKGFzeW5jS2V5cy5pbmNsdWRlcyhrZXkpICYmIHR5cGVvZiBzZXJ2ZXJDb25maWd1cmF0aW9uW2tleV0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgc2VydmVyQ29uZmlndXJhdGlvbltgXyR7a2V5fWBdID0gc2VydmVyQ29uZmlndXJhdGlvbltrZXldO1xuICAgICAgICBkZWxldGUgc2VydmVyQ29uZmlndXJhdGlvbltrZXldO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBwdXQoc2VydmVyQ29uZmlndXJhdGlvbikge1xuICAgIENvbmZpZy52YWxpZGF0ZU9wdGlvbnMoc2VydmVyQ29uZmlndXJhdGlvbik7XG4gICAgQ29uZmlnLnZhbGlkYXRlQ29udHJvbGxlcnMoc2VydmVyQ29uZmlndXJhdGlvbik7XG4gICAgaWYgKHNlcnZlckNvbmZpZ3VyYXRpb24ucm91dGVBbGxvd0xpc3QpIHtcbiAgICAgIHNlcnZlckNvbmZpZ3VyYXRpb24uX3JvdXRlQWxsb3dMaXN0UmVnZXggPSBzZXJ2ZXJDb25maWd1cmF0aW9uLnJvdXRlQWxsb3dMaXN0Lm1hcChcbiAgICAgICAgcGF0dGVybiA9PiBuZXcgUmVnRXhwKCdeJyArIHBhdHRlcm4gKyAnJCcpXG4gICAgICApO1xuICAgIH1cbiAgICBDb25maWcudHJhbnNmb3JtQ29uZmlndXJhdGlvbihzZXJ2ZXJDb25maWd1cmF0aW9uKTtcbiAgICBBcHBDYWNoZS5wdXQoc2VydmVyQ29uZmlndXJhdGlvbi5hcHBJZCwgc2VydmVyQ29uZmlndXJhdGlvbik7XG4gICAgQ29uZmlnLnNldHVwUGFzc3dvcmRWYWxpZGF0b3Ioc2VydmVyQ29uZmlndXJhdGlvbi5wYXNzd29yZFBvbGljeSk7XG4gICAgcmV0dXJuIHNlcnZlckNvbmZpZ3VyYXRpb247XG4gIH1cblxuICBzdGF0aWMgdmFsaWRhdGVPcHRpb25zKHtcbiAgICBjdXN0b21QYWdlcyxcbiAgICBwdWJsaWNTZXJ2ZXJVUkwsXG4gICAgcmV2b2tlU2Vzc2lvbk9uUGFzc3dvcmRSZXNldCxcbiAgICBleHBpcmVJbmFjdGl2ZVNlc3Npb25zLFxuICAgIHNlc3Npb25MZW5ndGgsXG4gICAgZGVmYXVsdExpbWl0LFxuICAgIG1heExpbWl0LFxuICAgIGFjY291bnRMb2Nrb3V0LFxuICAgIHBhc3N3b3JkUG9saWN5LFxuICAgIG1hc3RlcktleUlwcyxcbiAgICBtYXN0ZXJLZXksXG4gICAgbWFpbnRlbmFuY2VLZXksXG4gICAgbWFpbnRlbmFuY2VLZXlJcHMsXG4gICAgcmVhZE9ubHlNYXN0ZXJLZXksXG4gICAgcmVhZE9ubHlNYXN0ZXJLZXlJcHMsXG4gICAgYWxsb3dIZWFkZXJzLFxuICAgIGlkZW1wb3RlbmN5T3B0aW9ucyxcbiAgICBmaWxlVXBsb2FkLFxuICAgIGZpbGVEb3dubG9hZCxcbiAgICBwYWdlcyxcbiAgICBzZWN1cml0eSxcbiAgICBlbmZvcmNlUHJpdmF0ZVVzZXJzLFxuICAgIGVuYWJsZUluc2VjdXJlQXV0aEFkYXB0ZXJzLFxuICAgIHNjaGVtYSxcbiAgICByZXF1ZXN0S2V5d29yZERlbnlsaXN0LFxuICAgIGFsbG93RXhwaXJlZEF1dGhEYXRhVG9rZW4sXG4gICAgbG9nTGV2ZWxzLFxuICAgIHJhdGVMaW1pdCxcbiAgICBkYXRhYmFzZU9wdGlvbnMsXG4gICAgZXh0ZW5kU2Vzc2lvbk9uVXNlLFxuICAgIGFsbG93Q2xpZW50Q2xhc3NDcmVhdGlvbixcbiAgICByZXF1ZXN0Q29tcGxleGl0eSxcbiAgICBsaXZlUXVlcnksXG4gICAgcm91dGVBbGxvd0xpc3QsXG4gIH0pIHtcbiAgICBpZiAobWFzdGVyS2V5ID09PSByZWFkT25seU1hc3RlcktleSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdtYXN0ZXJLZXkgYW5kIHJlYWRPbmx5TWFzdGVyS2V5IHNob3VsZCBiZSBkaWZmZXJlbnQnKTtcbiAgICB9XG5cbiAgICBpZiAobWFzdGVyS2V5ID09PSBtYWludGVuYW5jZUtleSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdtYXN0ZXJLZXkgYW5kIG1haW50ZW5hbmNlS2V5IHNob3VsZCBiZSBkaWZmZXJlbnQnKTtcbiAgICB9XG5cbiAgICB0aGlzLnZhbGlkYXRlQWNjb3VudExvY2tvdXRQb2xpY3koYWNjb3VudExvY2tvdXQpO1xuICAgIHRoaXMudmFsaWRhdGVQYXNzd29yZFBvbGljeShwYXNzd29yZFBvbGljeSk7XG4gICAgdGhpcy52YWxpZGF0ZUZpbGVVcGxvYWRPcHRpb25zKGZpbGVVcGxvYWQpO1xuICAgIGlmIChmaWxlRG93bmxvYWQgPT0gbnVsbCkge1xuICAgICAgZmlsZURvd25sb2FkID0ge307XG4gICAgICBhcmd1bWVudHNbMF0uZmlsZURvd25sb2FkID0gZmlsZURvd25sb2FkO1xuICAgIH1cbiAgICB0aGlzLnZhbGlkYXRlRmlsZURvd25sb2FkT3B0aW9ucyhmaWxlRG93bmxvYWQpO1xuXG4gICAgaWYgKHR5cGVvZiByZXZva2VTZXNzaW9uT25QYXNzd29yZFJlc2V0ICE9PSAnYm9vbGVhbicpIHtcbiAgICAgIHRocm93ICdyZXZva2VTZXNzaW9uT25QYXNzd29yZFJlc2V0IG11c3QgYmUgYSBib29sZWFuIHZhbHVlJztcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGV4dGVuZFNlc3Npb25PblVzZSAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICB0aHJvdyAnZXh0ZW5kU2Vzc2lvbk9uVXNlIG11c3QgYmUgYSBib29sZWFuIHZhbHVlJztcbiAgICB9XG5cbiAgICB0aGlzLnZhbGlkYXRlUHVibGljU2VydmVyVVJMKHsgcHVibGljU2VydmVyVVJMIH0pO1xuICAgIHRoaXMudmFsaWRhdGVTZXNzaW9uQ29uZmlndXJhdGlvbihzZXNzaW9uTGVuZ3RoLCBleHBpcmVJbmFjdGl2ZVNlc3Npb25zKTtcbiAgICB0aGlzLnZhbGlkYXRlSXBzKCdtYXN0ZXJLZXlJcHMnLCBtYXN0ZXJLZXlJcHMpO1xuICAgIHRoaXMudmFsaWRhdGVJcHMoJ21haW50ZW5hbmNlS2V5SXBzJywgbWFpbnRlbmFuY2VLZXlJcHMpO1xuICAgIHRoaXMudmFsaWRhdGVJcHMoJ3JlYWRPbmx5TWFzdGVyS2V5SXBzJywgcmVhZE9ubHlNYXN0ZXJLZXlJcHMpO1xuICAgIHRoaXMudmFsaWRhdGVEZWZhdWx0TGltaXQoZGVmYXVsdExpbWl0KTtcbiAgICB0aGlzLnZhbGlkYXRlTWF4TGltaXQobWF4TGltaXQpO1xuICAgIHRoaXMudmFsaWRhdGVBbGxvd0hlYWRlcnMoYWxsb3dIZWFkZXJzKTtcbiAgICB0aGlzLnZhbGlkYXRlSWRlbXBvdGVuY3lPcHRpb25zKGlkZW1wb3RlbmN5T3B0aW9ucyk7XG4gICAgdGhpcy52YWxpZGF0ZVBhZ2VzT3B0aW9ucyhwYWdlcyk7XG4gICAgdGhpcy52YWxpZGF0ZVNlY3VyaXR5T3B0aW9ucyhzZWN1cml0eSk7XG4gICAgdGhpcy52YWxpZGF0ZVNjaGVtYU9wdGlvbnMoc2NoZW1hKTtcbiAgICB0aGlzLnZhbGlkYXRlRW5mb3JjZVByaXZhdGVVc2VycyhlbmZvcmNlUHJpdmF0ZVVzZXJzKTtcbiAgICB0aGlzLnZhbGlkYXRlRW5hYmxlSW5zZWN1cmVBdXRoQWRhcHRlcnMoZW5hYmxlSW5zZWN1cmVBdXRoQWRhcHRlcnMpO1xuICAgIHRoaXMudmFsaWRhdGVBbGxvd0V4cGlyZWRBdXRoRGF0YVRva2VuKGFsbG93RXhwaXJlZEF1dGhEYXRhVG9rZW4pO1xuICAgIHRoaXMudmFsaWRhdGVSZXF1ZXN0S2V5d29yZERlbnlsaXN0KHJlcXVlc3RLZXl3b3JkRGVueWxpc3QpO1xuICAgIHRoaXMudmFsaWRhdGVSYXRlTGltaXQocmF0ZUxpbWl0KTtcbiAgICB0aGlzLnZhbGlkYXRlTG9nTGV2ZWxzKGxvZ0xldmVscyk7XG4gICAgdGhpcy52YWxpZGF0ZURhdGFiYXNlT3B0aW9ucyhkYXRhYmFzZU9wdGlvbnMpO1xuICAgIHRoaXMudmFsaWRhdGVDdXN0b21QYWdlcyhjdXN0b21QYWdlcyk7XG4gICAgdGhpcy52YWxpZGF0ZUFsbG93Q2xpZW50Q2xhc3NDcmVhdGlvbihhbGxvd0NsaWVudENsYXNzQ3JlYXRpb24pO1xuICAgIHRoaXMudmFsaWRhdGVSZXF1ZXN0Q29tcGxleGl0eShyZXF1ZXN0Q29tcGxleGl0eSk7XG4gICAgdGhpcy52YWxpZGF0ZUxpdmVRdWVyeU9wdGlvbnMobGl2ZVF1ZXJ5KTtcbiAgICB0aGlzLnZhbGlkYXRlUm91dGVBbGxvd0xpc3Qocm91dGVBbGxvd0xpc3QpO1xuICB9XG5cbiAgc3RhdGljIHZhbGlkYXRlQ3VzdG9tUGFnZXMoY3VzdG9tUGFnZXMpIHtcbiAgICBpZiAoIWN1c3RvbVBhZ2VzKSB7IHJldHVybjsgfVxuXG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChjdXN0b21QYWdlcykgIT09ICdbb2JqZWN0IE9iamVjdF0nKSB7XG4gICAgICB0aHJvdyBFcnJvcignUGFyc2UgU2VydmVyIG9wdGlvbiBjdXN0b21QYWdlcyBtdXN0IGJlIGFuIG9iamVjdC4nKTtcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgdmFsaWRhdGVDb250cm9sbGVycyh7XG4gICAgdmVyaWZ5VXNlckVtYWlscyxcbiAgICB1c2VyQ29udHJvbGxlcixcbiAgICBhcHBOYW1lLFxuICAgIHB1YmxpY1NlcnZlclVSTCxcbiAgICBfcHVibGljU2VydmVyVVJMLFxuICAgIGVtYWlsVmVyaWZ5VG9rZW5WYWxpZGl0eUR1cmF0aW9uLFxuICAgIGVtYWlsVmVyaWZ5VG9rZW5SZXVzZUlmVmFsaWQsXG4gICAgZW1haWxWZXJpZnlTdWNjZXNzT25JbnZhbGlkRW1haWwsXG4gIH0pIHtcbiAgICBjb25zdCBlbWFpbEFkYXB0ZXIgPSB1c2VyQ29udHJvbGxlci5hZGFwdGVyO1xuICAgIGlmICh2ZXJpZnlVc2VyRW1haWxzKSB7XG4gICAgICB0aGlzLnZhbGlkYXRlRW1haWxDb25maWd1cmF0aW9uKHtcbiAgICAgICAgZW1haWxBZGFwdGVyLFxuICAgICAgICBhcHBOYW1lLFxuICAgICAgICBwdWJsaWNTZXJ2ZXJVUkw6IHB1YmxpY1NlcnZlclVSTCB8fCBfcHVibGljU2VydmVyVVJMLFxuICAgICAgICBlbWFpbFZlcmlmeVRva2VuVmFsaWRpdHlEdXJhdGlvbixcbiAgICAgICAgZW1haWxWZXJpZnlUb2tlblJldXNlSWZWYWxpZCxcbiAgICAgICAgZW1haWxWZXJpZnlTdWNjZXNzT25JbnZhbGlkRW1haWwsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgdmFsaWRhdGVSZXF1ZXN0S2V5d29yZERlbnlsaXN0KHJlcXVlc3RLZXl3b3JkRGVueWxpc3QpIHtcbiAgICBpZiAocmVxdWVzdEtleXdvcmREZW55bGlzdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXF1ZXN0S2V5d29yZERlbnlsaXN0ID0gcmVxdWVzdEtleXdvcmREZW55bGlzdC5kZWZhdWx0O1xuICAgIH0gZWxzZSBpZiAoIUFycmF5LmlzQXJyYXkocmVxdWVzdEtleXdvcmREZW55bGlzdCkpIHtcbiAgICAgIHRocm93ICdQYXJzZSBTZXJ2ZXIgb3B0aW9uIHJlcXVlc3RLZXl3b3JkRGVueWxpc3QgbXVzdCBiZSBhbiBhcnJheS4nO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyB2YWxpZGF0ZUVuZm9yY2VQcml2YXRlVXNlcnMoZW5mb3JjZVByaXZhdGVVc2Vycykge1xuICAgIGlmICh0eXBlb2YgZW5mb3JjZVByaXZhdGVVc2VycyAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICB0aHJvdyAnUGFyc2UgU2VydmVyIG9wdGlvbiBlbmZvcmNlUHJpdmF0ZVVzZXJzIG11c3QgYmUgYSBib29sZWFuLic7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIHZhbGlkYXRlQWxsb3dFeHBpcmVkQXV0aERhdGFUb2tlbihhbGxvd0V4cGlyZWRBdXRoRGF0YVRva2VuKSB7XG4gICAgaWYgKHR5cGVvZiBhbGxvd0V4cGlyZWRBdXRoRGF0YVRva2VuICE9PSAnYm9vbGVhbicpIHtcbiAgICAgIHRocm93ICdQYXJzZSBTZXJ2ZXIgb3B0aW9uIGFsbG93RXhwaXJlZEF1dGhEYXRhVG9rZW4gbXVzdCBiZSBhIGJvb2xlYW4uJztcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgdmFsaWRhdGVBbGxvd0NsaWVudENsYXNzQ3JlYXRpb24oYWxsb3dDbGllbnRDbGFzc0NyZWF0aW9uKSB7XG4gICAgaWYgKHR5cGVvZiBhbGxvd0NsaWVudENsYXNzQ3JlYXRpb24gIT09ICdib29sZWFuJykge1xuICAgICAgdGhyb3cgJ1BhcnNlIFNlcnZlciBvcHRpb24gYWxsb3dDbGllbnRDbGFzc0NyZWF0aW9uIG11c3QgYmUgYSBib29sZWFuLic7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIHZhbGlkYXRlU2VjdXJpdHlPcHRpb25zKHNlY3VyaXR5KSB7XG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChzZWN1cml0eSkgIT09ICdbb2JqZWN0IE9iamVjdF0nKSB7XG4gICAgICB0aHJvdyAnUGFyc2UgU2VydmVyIG9wdGlvbiBzZWN1cml0eSBtdXN0IGJlIGFuIG9iamVjdC4nO1xuICAgIH1cbiAgICBpZiAoc2VjdXJpdHkuZW5hYmxlQ2hlY2sgPT09IHVuZGVmaW5lZCkge1xuICAgICAgc2VjdXJpdHkuZW5hYmxlQ2hlY2sgPSBTZWN1cml0eU9wdGlvbnMuZW5hYmxlQ2hlY2suZGVmYXVsdDtcbiAgICB9IGVsc2UgaWYgKCFpc0Jvb2xlYW4oc2VjdXJpdHkuZW5hYmxlQ2hlY2spKSB7XG4gICAgICB0aHJvdyAnUGFyc2UgU2VydmVyIG9wdGlvbiBzZWN1cml0eS5lbmFibGVDaGVjayBtdXN0IGJlIGEgYm9vbGVhbi4nO1xuICAgIH1cbiAgICBpZiAoc2VjdXJpdHkuZW5hYmxlQ2hlY2tMb2cgPT09IHVuZGVmaW5lZCkge1xuICAgICAgc2VjdXJpdHkuZW5hYmxlQ2hlY2tMb2cgPSBTZWN1cml0eU9wdGlvbnMuZW5hYmxlQ2hlY2tMb2cuZGVmYXVsdDtcbiAgICB9IGVsc2UgaWYgKCFpc0Jvb2xlYW4oc2VjdXJpdHkuZW5hYmxlQ2hlY2tMb2cpKSB7XG4gICAgICB0aHJvdyAnUGFyc2UgU2VydmVyIG9wdGlvbiBzZWN1cml0eS5lbmFibGVDaGVja0xvZyBtdXN0IGJlIGEgYm9vbGVhbi4nO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyB2YWxpZGF0ZVNjaGVtYU9wdGlvbnMoc2NoZW1hOiBTY2hlbWFPcHRpb25zKSB7XG4gICAgaWYgKCFzY2hlbWEpIHsgcmV0dXJuOyB9XG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChzY2hlbWEpICE9PSAnW29iamVjdCBPYmplY3RdJykge1xuICAgICAgdGhyb3cgJ1BhcnNlIFNlcnZlciBvcHRpb24gc2NoZW1hIG11c3QgYmUgYW4gb2JqZWN0Lic7XG4gICAgfVxuICAgIGlmIChzY2hlbWEuZGVmaW5pdGlvbnMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgc2NoZW1hLmRlZmluaXRpb25zID0gU2NoZW1hT3B0aW9ucy5kZWZpbml0aW9ucy5kZWZhdWx0O1xuICAgIH0gZWxzZSBpZiAoIUFycmF5LmlzQXJyYXkoc2NoZW1hLmRlZmluaXRpb25zKSkge1xuICAgICAgdGhyb3cgJ1BhcnNlIFNlcnZlciBvcHRpb24gc2NoZW1hLmRlZmluaXRpb25zIG11c3QgYmUgYW4gYXJyYXkuJztcbiAgICB9XG4gICAgaWYgKHNjaGVtYS5zdHJpY3QgPT09IHVuZGVmaW5lZCkge1xuICAgICAgc2NoZW1hLnN0cmljdCA9IFNjaGVtYU9wdGlvbnMuc3RyaWN0LmRlZmF1bHQ7XG4gICAgfSBlbHNlIGlmICghaXNCb29sZWFuKHNjaGVtYS5zdHJpY3QpKSB7XG4gICAgICB0aHJvdyAnUGFyc2UgU2VydmVyIG9wdGlvbiBzY2hlbWEuc3RyaWN0IG11c3QgYmUgYSBib29sZWFuLic7XG4gICAgfVxuICAgIGlmIChzY2hlbWEuZGVsZXRlRXh0cmFGaWVsZHMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgc2NoZW1hLmRlbGV0ZUV4dHJhRmllbGRzID0gU2NoZW1hT3B0aW9ucy5kZWxldGVFeHRyYUZpZWxkcy5kZWZhdWx0O1xuICAgIH0gZWxzZSBpZiAoIWlzQm9vbGVhbihzY2hlbWEuZGVsZXRlRXh0cmFGaWVsZHMpKSB7XG4gICAgICB0aHJvdyAnUGFyc2UgU2VydmVyIG9wdGlvbiBzY2hlbWEuZGVsZXRlRXh0cmFGaWVsZHMgbXVzdCBiZSBhIGJvb2xlYW4uJztcbiAgICB9XG4gICAgaWYgKHNjaGVtYS5yZWNyZWF0ZU1vZGlmaWVkRmllbGRzID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHNjaGVtYS5yZWNyZWF0ZU1vZGlmaWVkRmllbGRzID0gU2NoZW1hT3B0aW9ucy5yZWNyZWF0ZU1vZGlmaWVkRmllbGRzLmRlZmF1bHQ7XG4gICAgfSBlbHNlIGlmICghaXNCb29sZWFuKHNjaGVtYS5yZWNyZWF0ZU1vZGlmaWVkRmllbGRzKSkge1xuICAgICAgdGhyb3cgJ1BhcnNlIFNlcnZlciBvcHRpb24gc2NoZW1hLnJlY3JlYXRlTW9kaWZpZWRGaWVsZHMgbXVzdCBiZSBhIGJvb2xlYW4uJztcbiAgICB9XG4gICAgaWYgKHNjaGVtYS5sb2NrU2NoZW1hcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBzY2hlbWEubG9ja1NjaGVtYXMgPSBTY2hlbWFPcHRpb25zLmxvY2tTY2hlbWFzLmRlZmF1bHQ7XG4gICAgfSBlbHNlIGlmICghaXNCb29sZWFuKHNjaGVtYS5sb2NrU2NoZW1hcykpIHtcbiAgICAgIHRocm93ICdQYXJzZSBTZXJ2ZXIgb3B0aW9uIHNjaGVtYS5sb2NrU2NoZW1hcyBtdXN0IGJlIGEgYm9vbGVhbi4nO1xuICAgIH1cbiAgICBpZiAoc2NoZW1hLmJlZm9yZU1pZ3JhdGlvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBzY2hlbWEuYmVmb3JlTWlncmF0aW9uID0gbnVsbDtcbiAgICB9IGVsc2UgaWYgKHNjaGVtYS5iZWZvcmVNaWdyYXRpb24gIT09IG51bGwgJiYgdHlwZW9mIHNjaGVtYS5iZWZvcmVNaWdyYXRpb24gIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93ICdQYXJzZSBTZXJ2ZXIgb3B0aW9uIHNjaGVtYS5iZWZvcmVNaWdyYXRpb24gbXVzdCBiZSBhIGZ1bmN0aW9uLic7XG4gICAgfVxuICAgIGlmIChzY2hlbWEuYWZ0ZXJNaWdyYXRpb24gPT09IHVuZGVmaW5lZCkge1xuICAgICAgc2NoZW1hLmFmdGVyTWlncmF0aW9uID0gbnVsbDtcbiAgICB9IGVsc2UgaWYgKHNjaGVtYS5hZnRlck1pZ3JhdGlvbiAhPT0gbnVsbCAmJiB0eXBlb2Ygc2NoZW1hLmFmdGVyTWlncmF0aW9uICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyAnUGFyc2UgU2VydmVyIG9wdGlvbiBzY2hlbWEuYWZ0ZXJNaWdyYXRpb24gbXVzdCBiZSBhIGZ1bmN0aW9uLic7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIHZhbGlkYXRlUGFnZXNPcHRpb25zKHBhZ2VzKSB7XG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChwYWdlcykgIT09ICdbb2JqZWN0IE9iamVjdF0nKSB7XG4gICAgICB0aHJvdyAnUGFyc2UgU2VydmVyIG9wdGlvbiBwYWdlcyBtdXN0IGJlIGFuIG9iamVjdC4nO1xuICAgIH1cbiAgICBpZiAocGFnZXMuZW5hYmxlTG9jYWxpemF0aW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHBhZ2VzLmVuYWJsZUxvY2FsaXphdGlvbiA9IFBhZ2VzT3B0aW9ucy5lbmFibGVMb2NhbGl6YXRpb24uZGVmYXVsdDtcbiAgICB9IGVsc2UgaWYgKCFpc0Jvb2xlYW4ocGFnZXMuZW5hYmxlTG9jYWxpemF0aW9uKSkge1xuICAgICAgdGhyb3cgJ1BhcnNlIFNlcnZlciBvcHRpb24gcGFnZXMuZW5hYmxlTG9jYWxpemF0aW9uIG11c3QgYmUgYSBib29sZWFuLic7XG4gICAgfVxuICAgIGlmIChwYWdlcy5sb2NhbGl6YXRpb25Kc29uUGF0aCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBwYWdlcy5sb2NhbGl6YXRpb25Kc29uUGF0aCA9IFBhZ2VzT3B0aW9ucy5sb2NhbGl6YXRpb25Kc29uUGF0aC5kZWZhdWx0O1xuICAgIH0gZWxzZSBpZiAoIWlzU3RyaW5nKHBhZ2VzLmxvY2FsaXphdGlvbkpzb25QYXRoKSkge1xuICAgICAgdGhyb3cgJ1BhcnNlIFNlcnZlciBvcHRpb24gcGFnZXMubG9jYWxpemF0aW9uSnNvblBhdGggbXVzdCBiZSBhIHN0cmluZy4nO1xuICAgIH1cbiAgICBpZiAocGFnZXMubG9jYWxpemF0aW9uRmFsbGJhY2tMb2NhbGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcGFnZXMubG9jYWxpemF0aW9uRmFsbGJhY2tMb2NhbGUgPSBQYWdlc09wdGlvbnMubG9jYWxpemF0aW9uRmFsbGJhY2tMb2NhbGUuZGVmYXVsdDtcbiAgICB9IGVsc2UgaWYgKCFpc1N0cmluZyhwYWdlcy5sb2NhbGl6YXRpb25GYWxsYmFja0xvY2FsZSkpIHtcbiAgICAgIHRocm93ICdQYXJzZSBTZXJ2ZXIgb3B0aW9uIHBhZ2VzLmxvY2FsaXphdGlvbkZhbGxiYWNrTG9jYWxlIG11c3QgYmUgYSBzdHJpbmcuJztcbiAgICB9XG4gICAgaWYgKHBhZ2VzLnBsYWNlaG9sZGVycyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBwYWdlcy5wbGFjZWhvbGRlcnMgPSBQYWdlc09wdGlvbnMucGxhY2Vob2xkZXJzLmRlZmF1bHQ7XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChwYWdlcy5wbGFjZWhvbGRlcnMpICE9PSAnW29iamVjdCBPYmplY3RdJyAmJlxuICAgICAgdHlwZW9mIHBhZ2VzLnBsYWNlaG9sZGVycyAhPT0gJ2Z1bmN0aW9uJ1xuICAgICkge1xuICAgICAgdGhyb3cgJ1BhcnNlIFNlcnZlciBvcHRpb24gcGFnZXMucGxhY2Vob2xkZXJzIG11c3QgYmUgYW4gb2JqZWN0IG9yIGEgZnVuY3Rpb24uJztcbiAgICB9XG4gICAgaWYgKHBhZ2VzLmZvcmNlUmVkaXJlY3QgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcGFnZXMuZm9yY2VSZWRpcmVjdCA9IFBhZ2VzT3B0aW9ucy5mb3JjZVJlZGlyZWN0LmRlZmF1bHQ7XG4gICAgfSBlbHNlIGlmICghaXNCb29sZWFuKHBhZ2VzLmZvcmNlUmVkaXJlY3QpKSB7XG4gICAgICB0aHJvdyAnUGFyc2UgU2VydmVyIG9wdGlvbiBwYWdlcy5mb3JjZVJlZGlyZWN0IG11c3QgYmUgYSBib29sZWFuLic7XG4gICAgfVxuICAgIGlmIChwYWdlcy5wYWdlc1BhdGggIT09IHVuZGVmaW5lZCAmJiAhaXNTdHJpbmcocGFnZXMucGFnZXNQYXRoKSkge1xuICAgICAgdGhyb3cgJ1BhcnNlIFNlcnZlciBvcHRpb24gcGFnZXMucGFnZXNQYXRoIG11c3QgYmUgYSBzdHJpbmcuJztcbiAgICB9XG4gICAgaWYgKHBhZ2VzLnBhZ2VzRW5kcG9pbnQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcGFnZXMucGFnZXNFbmRwb2ludCA9IFBhZ2VzT3B0aW9ucy5wYWdlc0VuZHBvaW50LmRlZmF1bHQ7XG4gICAgfSBlbHNlIGlmICghaXNTdHJpbmcocGFnZXMucGFnZXNFbmRwb2ludCkpIHtcbiAgICAgIHRocm93ICdQYXJzZSBTZXJ2ZXIgb3B0aW9uIHBhZ2VzLnBhZ2VzRW5kcG9pbnQgbXVzdCBiZSBhIHN0cmluZy4nO1xuICAgIH1cbiAgICBpZiAocGFnZXMuY3VzdG9tVXJscyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBwYWdlcy5jdXN0b21VcmxzID0gUGFnZXNPcHRpb25zLmN1c3RvbVVybHMuZGVmYXVsdDtcbiAgICB9IGVsc2UgaWYgKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChwYWdlcy5jdXN0b21VcmxzKSAhPT0gJ1tvYmplY3QgT2JqZWN0XScpIHtcbiAgICAgIHRocm93ICdQYXJzZSBTZXJ2ZXIgb3B0aW9uIHBhZ2VzLmN1c3RvbVVybHMgbXVzdCBiZSBhbiBvYmplY3QuJztcbiAgICB9XG4gICAgaWYgKHBhZ2VzLmN1c3RvbVJvdXRlcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBwYWdlcy5jdXN0b21Sb3V0ZXMgPSBQYWdlc09wdGlvbnMuY3VzdG9tUm91dGVzLmRlZmF1bHQ7XG4gICAgfSBlbHNlIGlmICghQXJyYXkuaXNBcnJheShwYWdlcy5jdXN0b21Sb3V0ZXMpKSB7XG4gICAgICB0aHJvdyAnUGFyc2UgU2VydmVyIG9wdGlvbiBwYWdlcy5jdXN0b21Sb3V0ZXMgbXVzdCBiZSBhbiBhcnJheS4nO1xuICAgIH1cbiAgICBpZiAocGFnZXMuZW5jb2RlUGFnZVBhcmFtSGVhZGVycyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBwYWdlcy5lbmNvZGVQYWdlUGFyYW1IZWFkZXJzID0gUGFnZXNPcHRpb25zLmVuY29kZVBhZ2VQYXJhbUhlYWRlcnMuZGVmYXVsdDtcbiAgICB9IGVsc2UgaWYgKCFpc0Jvb2xlYW4ocGFnZXMuZW5jb2RlUGFnZVBhcmFtSGVhZGVycykpIHtcbiAgICAgIHRocm93ICdQYXJzZSBTZXJ2ZXIgb3B0aW9uIHBhZ2VzLmVuY29kZVBhZ2VQYXJhbUhlYWRlcnMgbXVzdCBiZSBhIGJvb2xlYW4uJztcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgdmFsaWRhdGVJZGVtcG90ZW5jeU9wdGlvbnMoaWRlbXBvdGVuY3lPcHRpb25zKSB7XG4gICAgaWYgKCFpZGVtcG90ZW5jeU9wdGlvbnMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKGlkZW1wb3RlbmN5T3B0aW9ucy50dGwgPT09IHVuZGVmaW5lZCkge1xuICAgICAgaWRlbXBvdGVuY3lPcHRpb25zLnR0bCA9IElkZW1wb3RlbmN5T3B0aW9ucy50dGwuZGVmYXVsdDtcbiAgICB9IGVsc2UgaWYgKCFpc05hTihpZGVtcG90ZW5jeU9wdGlvbnMudHRsKSAmJiBpZGVtcG90ZW5jeU9wdGlvbnMudHRsIDw9IDApIHtcbiAgICAgIHRocm93ICdpZGVtcG90ZW5jeSBUVEwgdmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gMCBzZWNvbmRzJztcbiAgICB9IGVsc2UgaWYgKGlzTmFOKGlkZW1wb3RlbmN5T3B0aW9ucy50dGwpKSB7XG4gICAgICB0aHJvdyAnaWRlbXBvdGVuY3kgVFRMIHZhbHVlIG11c3QgYmUgYSBudW1iZXInO1xuICAgIH1cbiAgICBpZiAoIWlkZW1wb3RlbmN5T3B0aW9ucy5wYXRocykge1xuICAgICAgaWRlbXBvdGVuY3lPcHRpb25zLnBhdGhzID0gSWRlbXBvdGVuY3lPcHRpb25zLnBhdGhzLmRlZmF1bHQ7XG4gICAgfSBlbHNlIGlmICghQXJyYXkuaXNBcnJheShpZGVtcG90ZW5jeU9wdGlvbnMucGF0aHMpKSB7XG4gICAgICB0aHJvdyAnaWRlbXBvdGVuY3kgcGF0aHMgbXVzdCBiZSBvZiBhbiBhcnJheSBvZiBzdHJpbmdzJztcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgdmFsaWRhdGVBY2NvdW50TG9ja291dFBvbGljeShhY2NvdW50TG9ja291dCkge1xuICAgIGlmIChhY2NvdW50TG9ja291dCkge1xuICAgICAgaWYgKFxuICAgICAgICB0eXBlb2YgYWNjb3VudExvY2tvdXQuZHVyYXRpb24gIT09ICdudW1iZXInIHx8XG4gICAgICAgIGFjY291bnRMb2Nrb3V0LmR1cmF0aW9uIDw9IDAgfHxcbiAgICAgICAgYWNjb3VudExvY2tvdXQuZHVyYXRpb24gPiA5OTk5OVxuICAgICAgKSB7XG4gICAgICAgIHRocm93ICdBY2NvdW50IGxvY2tvdXQgZHVyYXRpb24gc2hvdWxkIGJlIGdyZWF0ZXIgdGhhbiAwIGFuZCBsZXNzIHRoYW4gMTAwMDAwJztcbiAgICAgIH1cblxuICAgICAgaWYgKFxuICAgICAgICAhTnVtYmVyLmlzSW50ZWdlcihhY2NvdW50TG9ja291dC50aHJlc2hvbGQpIHx8XG4gICAgICAgIGFjY291bnRMb2Nrb3V0LnRocmVzaG9sZCA8IDEgfHxcbiAgICAgICAgYWNjb3VudExvY2tvdXQudGhyZXNob2xkID4gOTk5XG4gICAgICApIHtcbiAgICAgICAgdGhyb3cgJ0FjY291bnQgbG9ja291dCB0aHJlc2hvbGQgc2hvdWxkIGJlIGFuIGludGVnZXIgZ3JlYXRlciB0aGFuIDAgYW5kIGxlc3MgdGhhbiAxMDAwJztcbiAgICAgIH1cblxuICAgICAgaWYgKGFjY291bnRMb2Nrb3V0LnVubG9ja09uUGFzc3dvcmRSZXNldCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGFjY291bnRMb2Nrb3V0LnVubG9ja09uUGFzc3dvcmRSZXNldCA9IEFjY291bnRMb2Nrb3V0T3B0aW9ucy51bmxvY2tPblBhc3N3b3JkUmVzZXQuZGVmYXVsdDtcbiAgICAgIH0gZWxzZSBpZiAoIWlzQm9vbGVhbihhY2NvdW50TG9ja291dC51bmxvY2tPblBhc3N3b3JkUmVzZXQpKSB7XG4gICAgICAgIHRocm93ICdQYXJzZSBTZXJ2ZXIgb3B0aW9uIGFjY291bnRMb2Nrb3V0LnVubG9ja09uUGFzc3dvcmRSZXNldCBtdXN0IGJlIGEgYm9vbGVhbi4nO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyB2YWxpZGF0ZVBhc3N3b3JkUG9saWN5KHBhc3N3b3JkUG9saWN5KSB7XG4gICAgaWYgKHBhc3N3b3JkUG9saWN5KSB7XG4gICAgICBpZiAoXG4gICAgICAgIHBhc3N3b3JkUG9saWN5Lm1heFBhc3N3b3JkQWdlICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgKHR5cGVvZiBwYXNzd29yZFBvbGljeS5tYXhQYXNzd29yZEFnZSAhPT0gJ251bWJlcicgfHwgcGFzc3dvcmRQb2xpY3kubWF4UGFzc3dvcmRBZ2UgPCAwKVxuICAgICAgKSB7XG4gICAgICAgIHRocm93ICdwYXNzd29yZFBvbGljeS5tYXhQYXNzd29yZEFnZSBtdXN0IGJlIGEgcG9zaXRpdmUgbnVtYmVyJztcbiAgICAgIH1cblxuICAgICAgaWYgKFxuICAgICAgICBwYXNzd29yZFBvbGljeS5yZXNldFRva2VuVmFsaWRpdHlEdXJhdGlvbiAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICh0eXBlb2YgcGFzc3dvcmRQb2xpY3kucmVzZXRUb2tlblZhbGlkaXR5RHVyYXRpb24gIT09ICdudW1iZXInIHx8XG4gICAgICAgICAgcGFzc3dvcmRQb2xpY3kucmVzZXRUb2tlblZhbGlkaXR5RHVyYXRpb24gPD0gMClcbiAgICAgICkge1xuICAgICAgICB0aHJvdyAncGFzc3dvcmRQb2xpY3kucmVzZXRUb2tlblZhbGlkaXR5RHVyYXRpb24gbXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlcic7XG4gICAgICB9XG5cbiAgICAgIGlmIChwYXNzd29yZFBvbGljeS52YWxpZGF0b3JQYXR0ZXJuKSB7XG4gICAgICAgIGlmICh0eXBlb2YgcGFzc3dvcmRQb2xpY3kudmFsaWRhdG9yUGF0dGVybiA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICBwYXNzd29yZFBvbGljeS52YWxpZGF0b3JQYXR0ZXJuID0gbmV3IFJlZ0V4cChwYXNzd29yZFBvbGljeS52YWxpZGF0b3JQYXR0ZXJuKTtcbiAgICAgICAgfSBlbHNlIGlmICghVXRpbHMuaXNSZWdFeHAocGFzc3dvcmRQb2xpY3kudmFsaWRhdG9yUGF0dGVybikpIHtcbiAgICAgICAgICB0aHJvdyAncGFzc3dvcmRQb2xpY3kudmFsaWRhdG9yUGF0dGVybiBtdXN0IGJlIGEgcmVnZXggc3RyaW5nIG9yIFJlZ0V4cCBvYmplY3QuJztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoXG4gICAgICAgIHBhc3N3b3JkUG9saWN5LnZhbGlkYXRvckNhbGxiYWNrICYmXG4gICAgICAgIHR5cGVvZiBwYXNzd29yZFBvbGljeS52YWxpZGF0b3JDYWxsYmFjayAhPT0gJ2Z1bmN0aW9uJ1xuICAgICAgKSB7XG4gICAgICAgIHRocm93ICdwYXNzd29yZFBvbGljeS52YWxpZGF0b3JDYWxsYmFjayBtdXN0IGJlIGEgZnVuY3Rpb24uJztcbiAgICAgIH1cblxuICAgICAgaWYgKFxuICAgICAgICBwYXNzd29yZFBvbGljeS5kb05vdEFsbG93VXNlcm5hbWUgJiZcbiAgICAgICAgdHlwZW9mIHBhc3N3b3JkUG9saWN5LmRvTm90QWxsb3dVc2VybmFtZSAhPT0gJ2Jvb2xlYW4nXG4gICAgICApIHtcbiAgICAgICAgdGhyb3cgJ3Bhc3N3b3JkUG9saWN5LmRvTm90QWxsb3dVc2VybmFtZSBtdXN0IGJlIGEgYm9vbGVhbiB2YWx1ZS4nO1xuICAgICAgfVxuXG4gICAgICBpZiAoXG4gICAgICAgIHBhc3N3b3JkUG9saWN5Lm1heFBhc3N3b3JkSGlzdG9yeSAmJlxuICAgICAgICAoIU51bWJlci5pc0ludGVnZXIocGFzc3dvcmRQb2xpY3kubWF4UGFzc3dvcmRIaXN0b3J5KSB8fFxuICAgICAgICAgIHBhc3N3b3JkUG9saWN5Lm1heFBhc3N3b3JkSGlzdG9yeSA8PSAwIHx8XG4gICAgICAgICAgcGFzc3dvcmRQb2xpY3kubWF4UGFzc3dvcmRIaXN0b3J5ID4gMjApXG4gICAgICApIHtcbiAgICAgICAgdGhyb3cgJ3Bhc3N3b3JkUG9saWN5Lm1heFBhc3N3b3JkSGlzdG9yeSBtdXN0IGJlIGFuIGludGVnZXIgcmFuZ2luZyAwIC0gMjAnO1xuICAgICAgfVxuXG4gICAgICBpZiAoXG4gICAgICAgIHBhc3N3b3JkUG9saWN5LnJlc2V0VG9rZW5SZXVzZUlmVmFsaWQgJiZcbiAgICAgICAgdHlwZW9mIHBhc3N3b3JkUG9saWN5LnJlc2V0VG9rZW5SZXVzZUlmVmFsaWQgIT09ICdib29sZWFuJ1xuICAgICAgKSB7XG4gICAgICAgIHRocm93ICdyZXNldFRva2VuUmV1c2VJZlZhbGlkIG11c3QgYmUgYSBib29sZWFuIHZhbHVlJztcbiAgICAgIH1cbiAgICAgIGlmIChwYXNzd29yZFBvbGljeS5yZXNldFRva2VuUmV1c2VJZlZhbGlkICYmICFwYXNzd29yZFBvbGljeS5yZXNldFRva2VuVmFsaWRpdHlEdXJhdGlvbikge1xuICAgICAgICB0aHJvdyAnWW91IGNhbm5vdCB1c2UgcmVzZXRUb2tlblJldXNlSWZWYWxpZCB3aXRob3V0IHJlc2V0VG9rZW5WYWxpZGl0eUR1cmF0aW9uJztcbiAgICAgIH1cblxuICAgICAgaWYgKFxuICAgICAgICBwYXNzd29yZFBvbGljeS5yZXNldFBhc3N3b3JkU3VjY2Vzc09uSW52YWxpZEVtYWlsICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgdHlwZW9mIHBhc3N3b3JkUG9saWN5LnJlc2V0UGFzc3dvcmRTdWNjZXNzT25JbnZhbGlkRW1haWwgIT09ICdib29sZWFuJ1xuICAgICAgKSB7XG4gICAgICAgIHRocm93ICdyZXNldFBhc3N3b3JkU3VjY2Vzc09uSW52YWxpZEVtYWlsIG11c3QgYmUgYSBib29sZWFuIHZhbHVlJztcbiAgICAgIH1cblxuICAgIH1cbiAgfVxuXG4gIC8vIGlmIHRoZSBwYXNzd29yZFBvbGljeS52YWxpZGF0b3JQYXR0ZXJuIGlzIGNvbmZpZ3VyZWQgdGhlbiBzZXR1cCBhIGNhbGxiYWNrIHRvIHByb2Nlc3MgdGhlIHBhdHRlcm5cbiAgc3RhdGljIHNldHVwUGFzc3dvcmRWYWxpZGF0b3IocGFzc3dvcmRQb2xpY3kpIHtcbiAgICBpZiAocGFzc3dvcmRQb2xpY3kgJiYgcGFzc3dvcmRQb2xpY3kudmFsaWRhdG9yUGF0dGVybikge1xuICAgICAgcGFzc3dvcmRQb2xpY3kucGF0dGVyblZhbGlkYXRvciA9IHZhbHVlID0+IHtcbiAgICAgICAgcmV0dXJuIHBhc3N3b3JkUG9saWN5LnZhbGlkYXRvclBhdHRlcm4udGVzdCh2YWx1ZSk7XG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyB2YWxpZGF0ZVB1YmxpY1NlcnZlclVSTCh7IHB1YmxpY1NlcnZlclVSTCwgcmVxdWlyZWQgPSBmYWxzZSB9KSB7XG4gICAgaWYgKCFwdWJsaWNTZXJ2ZXJVUkwpIHtcbiAgICAgIGlmICghcmVxdWlyZWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhyb3cgJ1RoZSBvcHRpb24gcHVibGljU2VydmVyVVJMIGlzIHJlcXVpcmVkLic7XG4gICAgfVxuXG4gICAgY29uc3QgdHlwZSA9IHR5cGVvZiBwdWJsaWNTZXJ2ZXJVUkw7XG5cbiAgICBpZiAodHlwZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGlmICghcHVibGljU2VydmVyVVJMLnN0YXJ0c1dpdGgoJ2h0dHA6Ly8nKSAmJiAhcHVibGljU2VydmVyVVJMLnN0YXJ0c1dpdGgoJ2h0dHBzOi8vJykpIHtcbiAgICAgICAgdGhyb3cgJ1RoZSBvcHRpb24gcHVibGljU2VydmVyVVJMIG11c3QgYmUgYSB2YWxpZCBVUkwgc3RhcnRpbmcgd2l0aCBodHRwOi8vIG9yIGh0dHBzOi8vLic7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHR5cGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aHJvdyBgVGhlIG9wdGlvbiBwdWJsaWNTZXJ2ZXJVUkwgbXVzdCBiZSBhIHN0cmluZyBvciBmdW5jdGlvbiwgYnV0IGdvdCAke3R5cGV9LmA7XG4gIH1cblxuICBzdGF0aWMgdmFsaWRhdGVFbWFpbENvbmZpZ3VyYXRpb24oe1xuICAgIGVtYWlsQWRhcHRlcixcbiAgICBhcHBOYW1lLFxuICAgIHB1YmxpY1NlcnZlclVSTCxcbiAgICBlbWFpbFZlcmlmeVRva2VuVmFsaWRpdHlEdXJhdGlvbixcbiAgICBlbWFpbFZlcmlmeVRva2VuUmV1c2VJZlZhbGlkLFxuICAgIGVtYWlsVmVyaWZ5U3VjY2Vzc09uSW52YWxpZEVtYWlsLFxuICB9KSB7XG4gICAgaWYgKCFlbWFpbEFkYXB0ZXIpIHtcbiAgICAgIHRocm93ICdBbiBlbWFpbEFkYXB0ZXIgaXMgcmVxdWlyZWQgZm9yIGUtbWFpbCB2ZXJpZmljYXRpb24gYW5kIHBhc3N3b3JkIHJlc2V0cy4nO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGFwcE5hbWUgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyAnQW4gYXBwIG5hbWUgaXMgcmVxdWlyZWQgZm9yIGUtbWFpbCB2ZXJpZmljYXRpb24gYW5kIHBhc3N3b3JkIHJlc2V0cy4nO1xuICAgIH1cbiAgICB0aGlzLnZhbGlkYXRlUHVibGljU2VydmVyVVJMKHsgcHVibGljU2VydmVyVVJMLCByZXF1aXJlZDogdHJ1ZSB9KTtcbiAgICBpZiAoZW1haWxWZXJpZnlUb2tlblZhbGlkaXR5RHVyYXRpb24pIHtcbiAgICAgIGlmIChpc05hTihlbWFpbFZlcmlmeVRva2VuVmFsaWRpdHlEdXJhdGlvbikpIHtcbiAgICAgICAgdGhyb3cgJ0VtYWlsIHZlcmlmeSB0b2tlbiB2YWxpZGl0eSBkdXJhdGlvbiBtdXN0IGJlIGEgdmFsaWQgbnVtYmVyLic7XG4gICAgICB9IGVsc2UgaWYgKGVtYWlsVmVyaWZ5VG9rZW5WYWxpZGl0eUR1cmF0aW9uIDw9IDApIHtcbiAgICAgICAgdGhyb3cgJ0VtYWlsIHZlcmlmeSB0b2tlbiB2YWxpZGl0eSBkdXJhdGlvbiBtdXN0IGJlIGEgdmFsdWUgZ3JlYXRlciB0aGFuIDAuJztcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGVtYWlsVmVyaWZ5VG9rZW5SZXVzZUlmVmFsaWQgJiYgdHlwZW9mIGVtYWlsVmVyaWZ5VG9rZW5SZXVzZUlmVmFsaWQgIT09ICdib29sZWFuJykge1xuICAgICAgdGhyb3cgJ2VtYWlsVmVyaWZ5VG9rZW5SZXVzZUlmVmFsaWQgbXVzdCBiZSBhIGJvb2xlYW4gdmFsdWUnO1xuICAgIH1cbiAgICBpZiAoZW1haWxWZXJpZnlUb2tlblJldXNlSWZWYWxpZCAmJiAhZW1haWxWZXJpZnlUb2tlblZhbGlkaXR5RHVyYXRpb24pIHtcbiAgICAgIHRocm93ICdZb3UgY2Fubm90IHVzZSBlbWFpbFZlcmlmeVRva2VuUmV1c2VJZlZhbGlkIHdpdGhvdXQgZW1haWxWZXJpZnlUb2tlblZhbGlkaXR5RHVyYXRpb24nO1xuICAgIH1cbiAgICBpZiAoZW1haWxWZXJpZnlTdWNjZXNzT25JbnZhbGlkRW1haWwgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2YgZW1haWxWZXJpZnlTdWNjZXNzT25JbnZhbGlkRW1haWwgIT09ICdib29sZWFuJykge1xuICAgICAgdGhyb3cgJ2VtYWlsVmVyaWZ5U3VjY2Vzc09uSW52YWxpZEVtYWlsIG11c3QgYmUgYSBib29sZWFuIHZhbHVlJztcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgdmFsaWRhdGVGaWxlVXBsb2FkT3B0aW9ucyhmaWxlVXBsb2FkKSB7XG4gICAgdHJ5IHtcbiAgICAgIGlmIChmaWxlVXBsb2FkID09IG51bGwgfHwgdHlwZW9mIGZpbGVVcGxvYWQgIT09ICdvYmplY3QnIHx8IEFycmF5LmlzQXJyYXkoZmlsZVVwbG9hZCkpIHtcbiAgICAgICAgdGhyb3cgJ2ZpbGVVcGxvYWQgbXVzdCBiZSBhbiBvYmplY3QgdmFsdWUuJztcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBpZiAoZSBpbnN0YW5jZW9mIFJlZmVyZW5jZUVycm9yKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRocm93IGU7XG4gICAgfVxuICAgIGlmIChmaWxlVXBsb2FkLmVuYWJsZUZvckFub255bW91c1VzZXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgZmlsZVVwbG9hZC5lbmFibGVGb3JBbm9ueW1vdXNVc2VyID0gRmlsZVVwbG9hZE9wdGlvbnMuZW5hYmxlRm9yQW5vbnltb3VzVXNlci5kZWZhdWx0O1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGZpbGVVcGxvYWQuZW5hYmxlRm9yQW5vbnltb3VzVXNlciAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICB0aHJvdyAnZmlsZVVwbG9hZC5lbmFibGVGb3JBbm9ueW1vdXNVc2VyIG11c3QgYmUgYSBib29sZWFuIHZhbHVlLic7XG4gICAgfVxuICAgIGlmIChmaWxlVXBsb2FkLmVuYWJsZUZvclB1YmxpYyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBmaWxlVXBsb2FkLmVuYWJsZUZvclB1YmxpYyA9IEZpbGVVcGxvYWRPcHRpb25zLmVuYWJsZUZvclB1YmxpYy5kZWZhdWx0O1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGZpbGVVcGxvYWQuZW5hYmxlRm9yUHVibGljICE9PSAnYm9vbGVhbicpIHtcbiAgICAgIHRocm93ICdmaWxlVXBsb2FkLmVuYWJsZUZvclB1YmxpYyBtdXN0IGJlIGEgYm9vbGVhbiB2YWx1ZS4nO1xuICAgIH1cbiAgICBpZiAoZmlsZVVwbG9hZC5lbmFibGVGb3JBdXRoZW50aWNhdGVkVXNlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBmaWxlVXBsb2FkLmVuYWJsZUZvckF1dGhlbnRpY2F0ZWRVc2VyID0gRmlsZVVwbG9hZE9wdGlvbnMuZW5hYmxlRm9yQXV0aGVudGljYXRlZFVzZXIuZGVmYXVsdDtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBmaWxlVXBsb2FkLmVuYWJsZUZvckF1dGhlbnRpY2F0ZWRVc2VyICE9PSAnYm9vbGVhbicpIHtcbiAgICAgIHRocm93ICdmaWxlVXBsb2FkLmVuYWJsZUZvckF1dGhlbnRpY2F0ZWRVc2VyIG11c3QgYmUgYSBib29sZWFuIHZhbHVlLic7XG4gICAgfVxuICAgIGlmIChmaWxlVXBsb2FkLmZpbGVFeHRlbnNpb25zID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGZpbGVVcGxvYWQuZmlsZUV4dGVuc2lvbnMgPSBGaWxlVXBsb2FkT3B0aW9ucy5maWxlRXh0ZW5zaW9ucy5kZWZhdWx0O1xuICAgIH0gZWxzZSBpZiAoIUFycmF5LmlzQXJyYXkoZmlsZVVwbG9hZC5maWxlRXh0ZW5zaW9ucykpIHtcbiAgICAgIHRocm93ICdmaWxlVXBsb2FkLmZpbGVFeHRlbnNpb25zIG11c3QgYmUgYW4gYXJyYXkuJztcbiAgICB9XG4gICAgaWYgKGZpbGVVcGxvYWQuYWxsb3dlZEZpbGVVcmxEb21haW5zID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGZpbGVVcGxvYWQuYWxsb3dlZEZpbGVVcmxEb21haW5zID0gRmlsZVVwbG9hZE9wdGlvbnMuYWxsb3dlZEZpbGVVcmxEb21haW5zLmRlZmF1bHQ7XG4gICAgfSBlbHNlIGlmICghQXJyYXkuaXNBcnJheShmaWxlVXBsb2FkLmFsbG93ZWRGaWxlVXJsRG9tYWlucykpIHtcbiAgICAgIHRocm93ICdmaWxlVXBsb2FkLmFsbG93ZWRGaWxlVXJsRG9tYWlucyBtdXN0IGJlIGFuIGFycmF5Lic7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvciAoY29uc3QgZG9tYWluIG9mIGZpbGVVcGxvYWQuYWxsb3dlZEZpbGVVcmxEb21haW5zKSB7XG4gICAgICAgIGlmICh0eXBlb2YgZG9tYWluICE9PSAnc3RyaW5nJyB8fCBkb21haW4gPT09ICcnKSB7XG4gICAgICAgICAgdGhyb3cgJ2ZpbGVVcGxvYWQuYWxsb3dlZEZpbGVVcmxEb21haW5zIG11c3QgY29udGFpbiBvbmx5IG5vbi1lbXB0eSBzdHJpbmdzLic7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBzdGF0aWMgdmFsaWRhdGVGaWxlRG93bmxvYWRPcHRpb25zKGZpbGVEb3dubG9hZCkge1xuICAgIHRyeSB7XG4gICAgICBpZiAoZmlsZURvd25sb2FkID09IG51bGwgfHwgdHlwZW9mIGZpbGVEb3dubG9hZCAhPT0gJ29iamVjdCcgfHwgQXJyYXkuaXNBcnJheShmaWxlRG93bmxvYWQpKSB7XG4gICAgICAgIHRocm93ICdmaWxlRG93bmxvYWQgbXVzdCBiZSBhbiBvYmplY3QgdmFsdWUuJztcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBpZiAoZSBpbnN0YW5jZW9mIFJlZmVyZW5jZUVycm9yKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRocm93IGU7XG4gICAgfVxuICAgIGlmIChmaWxlRG93bmxvYWQuZW5hYmxlRm9yQW5vbnltb3VzVXNlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBmaWxlRG93bmxvYWQuZW5hYmxlRm9yQW5vbnltb3VzVXNlciA9IEZpbGVEb3dubG9hZE9wdGlvbnMuZW5hYmxlRm9yQW5vbnltb3VzVXNlci5kZWZhdWx0O1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGZpbGVEb3dubG9hZC5lbmFibGVGb3JBbm9ueW1vdXNVc2VyICE9PSAnYm9vbGVhbicpIHtcbiAgICAgIHRocm93ICdmaWxlRG93bmxvYWQuZW5hYmxlRm9yQW5vbnltb3VzVXNlciBtdXN0IGJlIGEgYm9vbGVhbiB2YWx1ZS4nO1xuICAgIH1cbiAgICBpZiAoZmlsZURvd25sb2FkLmVuYWJsZUZvclB1YmxpYyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBmaWxlRG93bmxvYWQuZW5hYmxlRm9yUHVibGljID0gRmlsZURvd25sb2FkT3B0aW9ucy5lbmFibGVGb3JQdWJsaWMuZGVmYXVsdDtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBmaWxlRG93bmxvYWQuZW5hYmxlRm9yUHVibGljICE9PSAnYm9vbGVhbicpIHtcbiAgICAgIHRocm93ICdmaWxlRG93bmxvYWQuZW5hYmxlRm9yUHVibGljIG11c3QgYmUgYSBib29sZWFuIHZhbHVlLic7XG4gICAgfVxuICAgIGlmIChmaWxlRG93bmxvYWQuZW5hYmxlRm9yQXV0aGVudGljYXRlZFVzZXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgZmlsZURvd25sb2FkLmVuYWJsZUZvckF1dGhlbnRpY2F0ZWRVc2VyID0gRmlsZURvd25sb2FkT3B0aW9ucy5lbmFibGVGb3JBdXRoZW50aWNhdGVkVXNlci5kZWZhdWx0O1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGZpbGVEb3dubG9hZC5lbmFibGVGb3JBdXRoZW50aWNhdGVkVXNlciAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICB0aHJvdyAnZmlsZURvd25sb2FkLmVuYWJsZUZvckF1dGhlbnRpY2F0ZWRVc2VyIG11c3QgYmUgYSBib29sZWFuIHZhbHVlLic7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIHZhbGlkYXRlSXBzKGZpZWxkLCBtYXN0ZXJLZXlJcHMpIHtcbiAgICBmb3IgKGxldCBpcCBvZiBtYXN0ZXJLZXlJcHMpIHtcbiAgICAgIGlmIChpcC5pbmNsdWRlcygnLycpKSB7XG4gICAgICAgIGlwID0gaXAuc3BsaXQoJy8nKVswXTtcbiAgICAgIH1cbiAgICAgIGlmICghbmV0LmlzSVAoaXApKSB7XG4gICAgICAgIHRocm93IGBUaGUgUGFyc2UgU2VydmVyIG9wdGlvbiBcIiR7ZmllbGR9XCIgY29udGFpbnMgYW4gaW52YWxpZCBJUCBhZGRyZXNzIFwiJHtpcH1cIi5gO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyB2YWxpZGF0ZUVuYWJsZUluc2VjdXJlQXV0aEFkYXB0ZXJzKGVuYWJsZUluc2VjdXJlQXV0aEFkYXB0ZXJzKSB7XG4gICAgaWYgKGVuYWJsZUluc2VjdXJlQXV0aEFkYXB0ZXJzICYmIHR5cGVvZiBlbmFibGVJbnNlY3VyZUF1dGhBZGFwdGVycyAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICB0aHJvdyAnUGFyc2UgU2VydmVyIG9wdGlvbiBlbmFibGVJbnNlY3VyZUF1dGhBZGFwdGVycyBtdXN0IGJlIGEgYm9vbGVhbi4nO1xuICAgIH1cbiAgICBpZiAoZW5hYmxlSW5zZWN1cmVBdXRoQWRhcHRlcnMpIHtcbiAgICAgIERlcHJlY2F0b3IubG9nUnVudGltZURlcHJlY2F0aW9uKHsgdXNhZ2U6ICdpbnNlY3VyZSBhZGFwdGVyJyB9KTtcbiAgICB9XG4gIH1cblxuICBnZXQgbW91bnQoKSB7XG4gICAgdmFyIG1vdW50ID0gdGhpcy5fbW91bnQ7XG4gICAgaWYgKHRoaXMucHVibGljU2VydmVyVVJMKSB7XG4gICAgICBtb3VudCA9IHRoaXMucHVibGljU2VydmVyVVJMO1xuICAgIH1cbiAgICByZXR1cm4gbW91bnQ7XG4gIH1cblxuICBzZXQgbW91bnQobmV3VmFsdWUpIHtcbiAgICB0aGlzLl9tb3VudCA9IG5ld1ZhbHVlO1xuICB9XG5cbiAgc3RhdGljIHZhbGlkYXRlU2Vzc2lvbkNvbmZpZ3VyYXRpb24oc2Vzc2lvbkxlbmd0aCwgZXhwaXJlSW5hY3RpdmVTZXNzaW9ucykge1xuICAgIGlmIChleHBpcmVJbmFjdGl2ZVNlc3Npb25zKSB7XG4gICAgICBpZiAoaXNOYU4oc2Vzc2lvbkxlbmd0aCkpIHtcbiAgICAgICAgdGhyb3cgJ1Nlc3Npb24gbGVuZ3RoIG11c3QgYmUgYSB2YWxpZCBudW1iZXIuJztcbiAgICAgIH0gZWxzZSBpZiAoc2Vzc2lvbkxlbmd0aCA8PSAwKSB7XG4gICAgICAgIHRocm93ICdTZXNzaW9uIGxlbmd0aCBtdXN0IGJlIGEgdmFsdWUgZ3JlYXRlciB0aGFuIDAuJztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBzdGF0aWMgdmFsaWRhdGVEZWZhdWx0TGltaXQoZGVmYXVsdExpbWl0KSB7XG4gICAgaWYgKGRlZmF1bHRMaW1pdCA9PSBudWxsKSB7XG4gICAgICBkZWZhdWx0TGltaXQgPSBQYXJzZVNlcnZlck9wdGlvbnMuZGVmYXVsdExpbWl0LmRlZmF1bHQ7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgZGVmYXVsdExpbWl0ICE9PSAnbnVtYmVyJykge1xuICAgICAgdGhyb3cgJ0RlZmF1bHQgbGltaXQgbXVzdCBiZSBhIG51bWJlci4nO1xuICAgIH1cbiAgICBpZiAoZGVmYXVsdExpbWl0IDw9IDApIHtcbiAgICAgIHRocm93ICdEZWZhdWx0IGxpbWl0IG11c3QgYmUgYSB2YWx1ZSBncmVhdGVyIHRoYW4gMC4nO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyB2YWxpZGF0ZU1heExpbWl0KG1heExpbWl0KSB7XG4gICAgaWYgKG1heExpbWl0IDw9IDApIHtcbiAgICAgIHRocm93ICdNYXggbGltaXQgbXVzdCBiZSBhIHZhbHVlIGdyZWF0ZXIgdGhhbiAwLic7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIHZhbGlkYXRlUmVxdWVzdENvbXBsZXhpdHkocmVxdWVzdENvbXBsZXhpdHkpIHtcbiAgICBpZiAocmVxdWVzdENvbXBsZXhpdHkgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIHJlcXVlc3RDb21wbGV4aXR5ICE9PSAnb2JqZWN0JyB8fCBBcnJheS5pc0FycmF5KHJlcXVlc3RDb21wbGV4aXR5KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdyZXF1ZXN0Q29tcGxleGl0eSBtdXN0IGJlIGFuIG9iamVjdC4nKTtcbiAgICB9XG4gICAgY29uc3QgdmFsaWRLZXlzID0gT2JqZWN0LmtleXMoUmVxdWVzdENvbXBsZXhpdHlPcHRpb25zKTtcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhyZXF1ZXN0Q29tcGxleGl0eSkpIHtcbiAgICAgIGlmICghdmFsaWRLZXlzLmluY2x1ZGVzKGtleSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGByZXF1ZXN0Q29tcGxleGl0eSBjb250YWlucyB1bmtub3duIHByb3BlcnR5ICcke2tleX0nLmApO1xuICAgICAgfVxuICAgIH1cbiAgICBmb3IgKGNvbnN0IGtleSBvZiB2YWxpZEtleXMpIHtcbiAgICAgIGlmIChyZXF1ZXN0Q29tcGxleGl0eVtrZXldICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSByZXF1ZXN0Q29tcGxleGl0eVtrZXldO1xuICAgICAgICBjb25zdCBkZWYgPSBSZXF1ZXN0Q29tcGxleGl0eU9wdGlvbnNba2V5XTtcbiAgICAgICAgaWYgKHR5cGVvZiBkZWYuZGVmYXVsdCA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHJlcXVlc3RDb21wbGV4aXR5LiR7a2V5fSBtdXN0IGJlIGEgYm9vbGVhbi5gKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoIU51bWJlci5pc0ludGVnZXIodmFsdWUpIHx8ICh2YWx1ZSA8IDEgJiYgdmFsdWUgIT09IC0xKSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgcmVxdWVzdENvbXBsZXhpdHkuJHtrZXl9IG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyIG9yIC0xIHRvIGRpc2FibGUuYCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlcXVlc3RDb21wbGV4aXR5W2tleV0gPSBSZXF1ZXN0Q29tcGxleGl0eU9wdGlvbnNba2V5XS5kZWZhdWx0O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyB2YWxpZGF0ZUFsbG93SGVhZGVycyhhbGxvd0hlYWRlcnMpIHtcbiAgICBpZiAoIVtudWxsLCB1bmRlZmluZWRdLmluY2x1ZGVzKGFsbG93SGVhZGVycykpIHtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGFsbG93SGVhZGVycykpIHtcbiAgICAgICAgYWxsb3dIZWFkZXJzLmZvckVhY2goaGVhZGVyID0+IHtcbiAgICAgICAgICBpZiAodHlwZW9mIGhlYWRlciAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHRocm93ICdBbGxvdyBoZWFkZXJzIG11c3Qgb25seSBjb250YWluIHN0cmluZ3MnO1xuICAgICAgICAgIH0gZWxzZSBpZiAoIWhlYWRlci50cmltKCkubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aHJvdyAnQWxsb3cgaGVhZGVycyBtdXN0IG5vdCBjb250YWluIGVtcHR5IHN0cmluZ3MnO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyAnQWxsb3cgaGVhZGVycyBtdXN0IGJlIGFuIGFycmF5JztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBzdGF0aWMgdmFsaWRhdGVMb2dMZXZlbHMobG9nTGV2ZWxzKSB7XG4gICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMoTG9nTGV2ZWxzKSkge1xuICAgICAgaWYgKGxvZ0xldmVsc1trZXldKSB7XG4gICAgICAgIGlmICh2YWxpZExvZ0xldmVscy5pbmRleE9mKGxvZ0xldmVsc1trZXldKSA9PT0gLTEpIHtcbiAgICAgICAgICB0aHJvdyBgJyR7a2V5fScgbXVzdCBiZSBvbmUgb2YgJHtKU09OLnN0cmluZ2lmeSh2YWxpZExvZ0xldmVscyl9YDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbG9nTGV2ZWxzW2tleV0gPSBMb2dMZXZlbHNba2V5XS5kZWZhdWx0O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyB2YWxpZGF0ZURhdGFiYXNlT3B0aW9ucyhkYXRhYmFzZU9wdGlvbnMpIHtcbiAgICBpZiAoZGF0YWJhc2VPcHRpb25zID09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGRhdGFiYXNlT3B0aW9ucykgIT09ICdbb2JqZWN0IE9iamVjdF0nKSB7XG4gICAgICB0aHJvdyBgZGF0YWJhc2VPcHRpb25zIG11c3QgYmUgYW4gb2JqZWN0YDtcbiAgICB9XG5cbiAgICBpZiAoZGF0YWJhc2VPcHRpb25zLmVuYWJsZVNjaGVtYUhvb2tzID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGRhdGFiYXNlT3B0aW9ucy5lbmFibGVTY2hlbWFIb29rcyA9IERhdGFiYXNlT3B0aW9ucy5lbmFibGVTY2hlbWFIb29rcy5kZWZhdWx0O1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGRhdGFiYXNlT3B0aW9ucy5lbmFibGVTY2hlbWFIb29rcyAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICB0aHJvdyBgZGF0YWJhc2VPcHRpb25zLmVuYWJsZVNjaGVtYUhvb2tzIG11c3QgYmUgYSBib29sZWFuYDtcbiAgICB9XG4gICAgaWYgKGRhdGFiYXNlT3B0aW9ucy5zY2hlbWFDYWNoZVR0bCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBkYXRhYmFzZU9wdGlvbnMuc2NoZW1hQ2FjaGVUdGwgPSBEYXRhYmFzZU9wdGlvbnMuc2NoZW1hQ2FjaGVUdGwuZGVmYXVsdDtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBkYXRhYmFzZU9wdGlvbnMuc2NoZW1hQ2FjaGVUdGwgIT09ICdudW1iZXInKSB7XG4gICAgICB0aHJvdyBgZGF0YWJhc2VPcHRpb25zLnNjaGVtYUNhY2hlVHRsIG11c3QgYmUgYSBudW1iZXJgO1xuICAgIH1cbiAgICBpZiAoZGF0YWJhc2VPcHRpb25zLmFsbG93UHVibGljRXhwbGFpbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBkYXRhYmFzZU9wdGlvbnMuYWxsb3dQdWJsaWNFeHBsYWluID0gRGF0YWJhc2VPcHRpb25zLmFsbG93UHVibGljRXhwbGFpbi5kZWZhdWx0O1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGRhdGFiYXNlT3B0aW9ucy5hbGxvd1B1YmxpY0V4cGxhaW4gIT09ICdib29sZWFuJykge1xuICAgICAgdGhyb3cgYFBhcnNlIFNlcnZlciBvcHRpb24gJ2RhdGFiYXNlT3B0aW9ucy5hbGxvd1B1YmxpY0V4cGxhaW4nIG11c3QgYmUgYSBib29sZWFuLmA7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIHZhbGlkYXRlTGl2ZVF1ZXJ5T3B0aW9ucyhsaXZlUXVlcnkpIHtcbiAgICBpZiAobGl2ZVF1ZXJ5ID09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAobGl2ZVF1ZXJ5LnJlZ2V4VGltZW91dCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBsaXZlUXVlcnkucmVnZXhUaW1lb3V0ID0gTGl2ZVF1ZXJ5T3B0aW9ucy5yZWdleFRpbWVvdXQuZGVmYXVsdDtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBsaXZlUXVlcnkucmVnZXhUaW1lb3V0ICE9PSAnbnVtYmVyJykge1xuICAgICAgdGhyb3cgYGxpdmVRdWVyeS5yZWdleFRpbWVvdXQgbXVzdCBiZSBhIG51bWJlcmA7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIHZhbGlkYXRlUm91dGVBbGxvd0xpc3Qocm91dGVBbGxvd0xpc3QpIHtcbiAgICBpZiAocm91dGVBbGxvd0xpc3QgPT09IHVuZGVmaW5lZCB8fCByb3V0ZUFsbG93TGlzdCA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoIUFycmF5LmlzQXJyYXkocm91dGVBbGxvd0xpc3QpKSB7XG4gICAgICB0aHJvdyAnUGFyc2UgU2VydmVyIG9wdGlvbiByb3V0ZUFsbG93TGlzdCBtdXN0IGJlIGFuIGFycmF5IG9mIHN0cmluZ3MuJztcbiAgICB9XG4gICAgZm9yIChjb25zdCBwYXR0ZXJuIG9mIHJvdXRlQWxsb3dMaXN0KSB7XG4gICAgICBpZiAodHlwZW9mIHBhdHRlcm4gIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHRocm93IGBQYXJzZSBTZXJ2ZXIgb3B0aW9uIHJvdXRlQWxsb3dMaXN0IGNvbnRhaW5zIGEgbm9uLXN0cmluZyB2YWx1ZS5gO1xuICAgICAgfVxuICAgICAgdHJ5IHtcbiAgICAgICAgbmV3IFJlZ0V4cCgnXicgKyBwYXR0ZXJuICsgJyQnKTtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICB0aHJvdyBgUGFyc2UgU2VydmVyIG9wdGlvbiByb3V0ZUFsbG93TGlzdCBjb250YWlucyBhbiBpbnZhbGlkIHJlZ2V4IHBhdHRlcm46IFwiJHtwYXR0ZXJufVwiLmA7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIHZhbGlkYXRlUmF0ZUxpbWl0KHJhdGVMaW1pdCkge1xuICAgIGlmICghcmF0ZUxpbWl0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChcbiAgICAgIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChyYXRlTGltaXQpICE9PSAnW29iamVjdCBPYmplY3RdJyAmJlxuICAgICAgIUFycmF5LmlzQXJyYXkocmF0ZUxpbWl0KVxuICAgICkge1xuICAgICAgdGhyb3cgYHJhdGVMaW1pdCBtdXN0IGJlIGFuIGFycmF5IG9yIG9iamVjdGA7XG4gICAgfVxuICAgIGNvbnN0IG9wdGlvbnMgPSBBcnJheS5pc0FycmF5KHJhdGVMaW1pdCkgPyByYXRlTGltaXQgOiBbcmF0ZUxpbWl0XTtcbiAgICBmb3IgKGNvbnN0IG9wdGlvbiBvZiBvcHRpb25zKSB7XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9wdGlvbikgIT09ICdbb2JqZWN0IE9iamVjdF0nKSB7XG4gICAgICAgIHRocm93IGByYXRlTGltaXQgbXVzdCBiZSBhbiBhcnJheSBvZiBvYmplY3RzYDtcbiAgICAgIH1cbiAgICAgIGlmIChvcHRpb24ucmVxdWVzdFBhdGggPT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBgcmF0ZUxpbWl0LnJlcXVlc3RQYXRoIG11c3QgYmUgZGVmaW5lZGA7XG4gICAgICB9XG4gICAgICBpZiAodHlwZW9mIG9wdGlvbi5yZXF1ZXN0UGF0aCAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgdGhyb3cgYHJhdGVMaW1pdC5yZXF1ZXN0UGF0aCBtdXN0IGJlIGEgc3RyaW5nYDtcbiAgICAgIH1cblxuICAgICAgLy8gVmFsaWRhdGUgdGhhdCB0aGUgcGF0aCBpcyB2YWxpZCBwYXRoLXRvLXJlZ2V4cCBzeW50YXhcbiAgICAgIHRyeSB7XG4gICAgICAgIHBhdGhUb1JlZ2V4cChvcHRpb24ucmVxdWVzdFBhdGgpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgdGhyb3cgYHJhdGVMaW1pdC5yZXF1ZXN0UGF0aCBcIiR7b3B0aW9uLnJlcXVlc3RQYXRofVwiIGlzIG5vdCB2YWxpZDogJHtlcnJvci5tZXNzYWdlfWA7XG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb24ucmVxdWVzdFRpbWVXaW5kb3cgPT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBgcmF0ZUxpbWl0LnJlcXVlc3RUaW1lV2luZG93IG11c3QgYmUgZGVmaW5lZGA7XG4gICAgICB9XG4gICAgICBpZiAodHlwZW9mIG9wdGlvbi5yZXF1ZXN0VGltZVdpbmRvdyAhPT0gJ251bWJlcicpIHtcbiAgICAgICAgdGhyb3cgYHJhdGVMaW1pdC5yZXF1ZXN0VGltZVdpbmRvdyBtdXN0IGJlIGEgbnVtYmVyYDtcbiAgICAgIH1cbiAgICAgIGlmIChvcHRpb24uaW5jbHVkZUludGVybmFsUmVxdWVzdHMgJiYgdHlwZW9mIG9wdGlvbi5pbmNsdWRlSW50ZXJuYWxSZXF1ZXN0cyAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgIHRocm93IGByYXRlTGltaXQuaW5jbHVkZUludGVybmFsUmVxdWVzdHMgbXVzdCBiZSBhIGJvb2xlYW5gO1xuICAgICAgfVxuICAgICAgaWYgKG9wdGlvbi5yZXF1ZXN0Q291bnQgPT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBgcmF0ZUxpbWl0LnJlcXVlc3RDb3VudCBtdXN0IGJlIGRlZmluZWRgO1xuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiBvcHRpb24ucmVxdWVzdENvdW50ICE9PSAnbnVtYmVyJykge1xuICAgICAgICB0aHJvdyBgcmF0ZUxpbWl0LnJlcXVlc3RDb3VudCBtdXN0IGJlIGEgbnVtYmVyYDtcbiAgICAgIH1cbiAgICAgIGlmIChvcHRpb24uZXJyb3JSZXNwb25zZU1lc3NhZ2UgJiYgdHlwZW9mIG9wdGlvbi5lcnJvclJlc3BvbnNlTWVzc2FnZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgdGhyb3cgYHJhdGVMaW1pdC5lcnJvclJlc3BvbnNlTWVzc2FnZSBtdXN0IGJlIGEgc3RyaW5nYDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IG9wdGlvbnMgPSBPYmplY3Qua2V5cyhQYXJzZVNlcnZlci5SYXRlTGltaXRab25lKTtcbiAgICAgIGlmIChvcHRpb24uem9uZSAmJiAhb3B0aW9ucy5pbmNsdWRlcyhvcHRpb24uem9uZSkpIHtcbiAgICAgICAgY29uc3QgZm9ybWF0dGVyID0gbmV3IEludGwuTGlzdEZvcm1hdCgnZW4nLCB7IHN0eWxlOiAnc2hvcnQnLCB0eXBlOiAnZGlzanVuY3Rpb24nIH0pO1xuICAgICAgICB0aHJvdyBgcmF0ZUxpbWl0LnpvbmUgbXVzdCBiZSBvbmUgb2YgJHtmb3JtYXR0ZXIuZm9ybWF0KG9wdGlvbnMpfWA7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZ2VuZXJhdGVFbWFpbFZlcmlmeVRva2VuRXhwaXJlc0F0KCkge1xuICAgIGlmICghdGhpcy52ZXJpZnlVc2VyRW1haWxzIHx8ICF0aGlzLmVtYWlsVmVyaWZ5VG9rZW5WYWxpZGl0eUR1cmF0aW9uKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICB2YXIgbm93ID0gbmV3IERhdGUoKTtcbiAgICByZXR1cm4gbmV3IERhdGUobm93LmdldFRpbWUoKSArIHRoaXMuZW1haWxWZXJpZnlUb2tlblZhbGlkaXR5RHVyYXRpb24gKiAxMDAwKTtcbiAgfVxuXG4gIGdlbmVyYXRlUGFzc3dvcmRSZXNldFRva2VuRXhwaXJlc0F0KCkge1xuICAgIGlmICghdGhpcy5wYXNzd29yZFBvbGljeSB8fCAhdGhpcy5wYXNzd29yZFBvbGljeS5yZXNldFRva2VuVmFsaWRpdHlEdXJhdGlvbikge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgY29uc3Qgbm93ID0gbmV3IERhdGUoKTtcbiAgICByZXR1cm4gbmV3IERhdGUobm93LmdldFRpbWUoKSArIHRoaXMucGFzc3dvcmRQb2xpY3kucmVzZXRUb2tlblZhbGlkaXR5RHVyYXRpb24gKiAxMDAwKTtcbiAgfVxuXG4gIGdlbmVyYXRlU2Vzc2lvbkV4cGlyZXNBdCgpIHtcbiAgICBpZiAoIXRoaXMuZXhwaXJlSW5hY3RpdmVTZXNzaW9ucykge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgdmFyIG5vdyA9IG5ldyBEYXRlKCk7XG4gICAgcmV0dXJuIG5ldyBEYXRlKG5vdy5nZXRUaW1lKCkgKyB0aGlzLnNlc3Npb25MZW5ndGggKiAxMDAwKTtcbiAgfVxuXG4gIHVucmVnaXN0ZXJSYXRlTGltaXRlcnMoKSB7XG4gICAgbGV0IGkgPSB0aGlzLnJhdGVMaW1pdHM/Lmxlbmd0aDtcbiAgICB3aGlsZSAoaS0tKSB7XG4gICAgICBjb25zdCBsaW1pdCA9IHRoaXMucmF0ZUxpbWl0c1tpXTtcbiAgICAgIGlmIChsaW1pdC5jbG91ZCkge1xuICAgICAgICB0aGlzLnJhdGVMaW1pdHMuc3BsaWNlKGksIDEpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGdldCBpbnZhbGlkTGlua1VSTCgpIHtcbiAgICByZXR1cm4gdGhpcy5jdXN0b21QYWdlcy5pbnZhbGlkTGluayB8fCBgJHt0aGlzLnB1YmxpY1NlcnZlclVSTH0vYXBwcy9pbnZhbGlkX2xpbmsuaHRtbGA7XG4gIH1cblxuICBnZXQgaW52YWxpZFZlcmlmaWNhdGlvbkxpbmtVUkwoKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuY3VzdG9tUGFnZXMuaW52YWxpZFZlcmlmaWNhdGlvbkxpbmsgfHxcbiAgICAgIGAke3RoaXMucHVibGljU2VydmVyVVJMfS9hcHBzL2ludmFsaWRfdmVyaWZpY2F0aW9uX2xpbmsuaHRtbGBcbiAgICApO1xuICB9XG5cbiAgZ2V0IGxpbmtTZW5kU3VjY2Vzc1VSTCgpIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5jdXN0b21QYWdlcy5saW5rU2VuZFN1Y2Nlc3MgfHwgYCR7dGhpcy5wdWJsaWNTZXJ2ZXJVUkx9L2FwcHMvbGlua19zZW5kX3N1Y2Nlc3MuaHRtbGBcbiAgICApO1xuICB9XG5cbiAgZ2V0IGxpbmtTZW5kRmFpbFVSTCgpIHtcbiAgICByZXR1cm4gdGhpcy5jdXN0b21QYWdlcy5saW5rU2VuZEZhaWwgfHwgYCR7dGhpcy5wdWJsaWNTZXJ2ZXJVUkx9L2FwcHMvbGlua19zZW5kX2ZhaWwuaHRtbGA7XG4gIH1cblxuICBnZXQgdmVyaWZ5RW1haWxTdWNjZXNzVVJMKCkge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLmN1c3RvbVBhZ2VzLnZlcmlmeUVtYWlsU3VjY2VzcyB8fFxuICAgICAgYCR7dGhpcy5wdWJsaWNTZXJ2ZXJVUkx9L2FwcHMvdmVyaWZ5X2VtYWlsX3N1Y2Nlc3MuaHRtbGBcbiAgICApO1xuICB9XG5cbiAgZ2V0IGNob29zZVBhc3N3b3JkVVJMKCkge1xuICAgIHJldHVybiB0aGlzLmN1c3RvbVBhZ2VzLmNob29zZVBhc3N3b3JkIHx8IGAke3RoaXMucHVibGljU2VydmVyVVJMfS9hcHBzL2Nob29zZV9wYXNzd29yZGA7XG4gIH1cblxuICBnZXQgcmVxdWVzdFJlc2V0UGFzc3dvcmRVUkwoKSB7XG4gICAgcmV0dXJuIGAke3RoaXMucHVibGljU2VydmVyVVJMfS8ke3RoaXMucGFnZXNFbmRwb2ludH0vJHt0aGlzLmFwcGxpY2F0aW9uSWR9L3JlcXVlc3RfcGFzc3dvcmRfcmVzZXRgO1xuICB9XG5cbiAgZ2V0IHBhc3N3b3JkUmVzZXRTdWNjZXNzVVJMKCkge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLmN1c3RvbVBhZ2VzLnBhc3N3b3JkUmVzZXRTdWNjZXNzIHx8XG4gICAgICBgJHt0aGlzLnB1YmxpY1NlcnZlclVSTH0vYXBwcy9wYXNzd29yZF9yZXNldF9zdWNjZXNzLmh0bWxgXG4gICAgKTtcbiAgfVxuXG4gIGdldCBwYXJzZUZyYW1lVVJMKCkge1xuICAgIHJldHVybiB0aGlzLmN1c3RvbVBhZ2VzLnBhcnNlRnJhbWVVUkw7XG4gIH1cblxuICBnZXQgdmVyaWZ5RW1haWxVUkwoKSB7XG4gICAgcmV0dXJuIGAke3RoaXMucHVibGljU2VydmVyVVJMfS8ke3RoaXMucGFnZXNFbmRwb2ludH0vJHt0aGlzLmFwcGxpY2F0aW9uSWR9L3ZlcmlmeV9lbWFpbGA7XG4gIH1cblxuICBhc3luYyBsb2FkTWFzdGVyS2V5KCkge1xuICAgIGlmICh0eXBlb2YgdGhpcy5tYXN0ZXJLZXkgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGNvbnN0IHR0bElzRW1wdHkgPSAhdGhpcy5tYXN0ZXJLZXlUdGw7XG4gICAgICBjb25zdCBpc0V4cGlyZWQgPSB0aGlzLm1hc3RlcktleUNhY2hlPy5leHBpcmVzQXQgJiYgdGhpcy5tYXN0ZXJLZXlDYWNoZS5leHBpcmVzQXQgPCBuZXcgRGF0ZSgpO1xuXG4gICAgICBpZiAoKCFpc0V4cGlyZWQgfHwgdHRsSXNFbXB0eSkgJiYgdGhpcy5tYXN0ZXJLZXlDYWNoZT8ubWFzdGVyS2V5KSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1hc3RlcktleUNhY2hlLm1hc3RlcktleTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgbWFzdGVyS2V5ID0gYXdhaXQgdGhpcy5tYXN0ZXJLZXkoKTtcblxuICAgICAgY29uc3QgZXhwaXJlc0F0ID0gdGhpcy5tYXN0ZXJLZXlUdGwgPyBuZXcgRGF0ZShEYXRlLm5vdygpICsgMTAwMCAqIHRoaXMubWFzdGVyS2V5VHRsKSA6IG51bGxcbiAgICAgIHRoaXMubWFzdGVyS2V5Q2FjaGUgPSB7IG1hc3RlcktleSwgZXhwaXJlc0F0IH07XG4gICAgICBDb25maWcucHV0KHRoaXMpO1xuXG4gICAgICByZXR1cm4gdGhpcy5tYXN0ZXJLZXlDYWNoZS5tYXN0ZXJLZXk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMubWFzdGVyS2V5O1xuICB9XG5cbiAgZ2V0IHBhZ2VzRW5kcG9pbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMucGFnZXMgJiYgdGhpcy5wYWdlcy5wYWdlc0VuZHBvaW50XG4gICAgICA/IHRoaXMucGFnZXMucGFnZXNFbmRwb2ludFxuICAgICAgOiAnYXBwcyc7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQ29uZmlnO1xubW9kdWxlLmV4cG9ydHMgPSBDb25maWc7XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUlBLElBQUFBLE9BQUEsR0FBQUMsT0FBQTtBQUNBLElBQUFDLGFBQUEsR0FBQUQsT0FBQTtBQUNBLElBQUFFLElBQUEsR0FBQUMsc0JBQUEsQ0FBQUgsT0FBQTtBQUNBLElBQUFJLE1BQUEsR0FBQUQsc0JBQUEsQ0FBQUgsT0FBQTtBQUNBLElBQUFLLG1CQUFBLEdBQUFGLHNCQUFBLENBQUFILE9BQUE7QUFDQSxJQUFBTSxpQkFBQSxHQUFBTixPQUFBO0FBQ0EsSUFBQU8sUUFBQSxHQUFBUCxPQUFBO0FBQ0EsSUFBQVEsWUFBQSxHQUFBUixPQUFBO0FBY0EsSUFBQVMsTUFBQSxHQUFBTixzQkFBQSxDQUFBSCxPQUFBO0FBQ0EsSUFBQVUsV0FBQSxHQUFBUCxzQkFBQSxDQUFBSCxPQUFBO0FBQ0EsSUFBQVcsTUFBQSxHQUFBUixzQkFBQSxDQUFBSCxPQUFBO0FBQTRCLFNBQUFHLHVCQUFBUyxDQUFBLFdBQUFBLENBQUEsSUFBQUEsQ0FBQSxDQUFBQyxVQUFBLEdBQUFELENBQUEsS0FBQUUsT0FBQSxFQUFBRixDQUFBO0FBM0I1QjtBQUNBO0FBQ0E7O0FBMkJBLFNBQVNHLG1C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