nextlove 2.9.0 → 2.10.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.
@@ -443,7 +443,7 @@ var parseRoutesInPackage = async (opts) => {
443
443
  var _a;
444
444
  const { default: routeFn } = await __require(path2.resolve(p));
445
445
  if (routeFn) {
446
- if ((_a = routeFn._routeSpec) == null ? void 0 : _a.excludeFromOpenApi) {
446
+ if (((_a = routeFn._routeSpec) == null ? void 0 : _a.excludeFromOpenApi) && !opts.includeOpenApiExcludedRoutes) {
447
447
  console.log(
448
448
  chalk.gray(
449
449
  `Ignoring "${p} because it was excluded from OpenAPI generation"`
@@ -862,4 +862,4 @@ export {
862
862
  generateOpenAPI,
863
863
  generateRouteTypes
864
864
  };
865
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWRlZXBtZXJnZS9janMvaW5kZXguanMiLCAiLi4vLi4vLi4vem9kLW9wZW5hcGkvc3JjL2xpYi96b2Qtb3BlbmFwaS50cyIsICIuLi8uLi8uLi96b2Qtb3BlbmFwaS9zcmMvbGliL3pvZC1leHRlbnNpb25zLnRzIiwgIi4uLy4uLy4uL3pvZC1vcGVuYXBpL3NyYy9pbmRleC50cyIsICIuLi8uLi9zcmMvZ2VuZXJhdG9ycy9pbmRleC50cyIsICIuLi8uLi9zcmMvZ2VuZXJhdG9ycy9nZW5lcmF0ZS1vcGVuYXBpL2luZGV4LnRzIiwgIi4uLy4uL3NyYy9nZW5lcmF0b3JzL2xpYi9wYXJzZS1yb3V0ZXMtaW4tcGFja2FnZS50cyIsICIuLi8uLi9zcmMvZ2VuZXJhdG9ycy9saWIvZGVmYXVsdC1tYXAtZmlsZS1wYXRoLXRvLWh0dHAtcm91dGUudHMiLCAiLi4vLi4vc3JjL2dlbmVyYXRvcnMvZ2VuZXJhdGUtb3BlbmFwaS9lbWJlZC1zY2hlbWEtcmVmZXJlbmNlcy50cyIsICIuLi8uLi9zcmMvZ2VuZXJhdG9ycy9nZW5lcmF0ZS1vcGVuYXBpL2Zlcm4tc2RrLXV0aWxzLnRzIiwgIi4uLy4uL3NyYy9nZW5lcmF0b3JzL2dlbmVyYXRlLXJvdXRlLXR5cGVzL2luZGV4LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbi8vIGlzdGFuYnVsIGlnbm9yZSBuZXh0XG5jb25zdCBpc09iamVjdCA9IChvYmopID0+IHtcbiAgICBpZiAodHlwZW9mIG9iaiA9PT0gXCJvYmplY3RcIiAmJiBvYmogIT09IG51bGwpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBPYmplY3QuZ2V0UHJvdG90eXBlT2YgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgY29uc3QgcHJvdG90eXBlID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKG9iaik7XG4gICAgICAgICAgICByZXR1cm4gcHJvdG90eXBlID09PSBPYmplY3QucHJvdG90eXBlIHx8IHByb3RvdHlwZSA9PT0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iaikgPT09IFwiW29iamVjdCBPYmplY3RdXCI7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn07XG5jb25zdCBtZXJnZSA9ICguLi5vYmplY3RzKSA9PiBvYmplY3RzLnJlZHVjZSgocmVzdWx0LCBjdXJyZW50KSA9PiB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoY3VycmVudCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkFyZ3VtZW50cyBwcm92aWRlZCB0byB0cy1kZWVwbWVyZ2UgbXVzdCBiZSBvYmplY3RzLCBub3QgYXJyYXlzLlwiKTtcbiAgICB9XG4gICAgT2JqZWN0LmtleXMoY3VycmVudCkuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICAgIGlmIChbXCJfX3Byb3RvX19cIiwgXCJjb25zdHJ1Y3RvclwiLCBcInByb3RvdHlwZVwiXS5pbmNsdWRlcyhrZXkpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocmVzdWx0W2tleV0pICYmIEFycmF5LmlzQXJyYXkoY3VycmVudFtrZXldKSkge1xuICAgICAgICAgICAgcmVzdWx0W2tleV0gPSBtZXJnZS5vcHRpb25zLm1lcmdlQXJyYXlzXG4gICAgICAgICAgICAgICAgPyBtZXJnZS5vcHRpb25zLnVuaXF1ZUFycmF5SXRlbXNcbiAgICAgICAgICAgICAgICAgICAgPyBBcnJheS5mcm9tKG5ldyBTZXQocmVzdWx0W2tleV0uY29uY2F0KGN1cnJlbnRba2V5XSkpKVxuICAgICAgICAgICAgICAgICAgICA6IFsuLi5yZXN1bHRba2V5XSwgLi4uY3VycmVudFtrZXldXVxuICAgICAgICAgICAgICAgIDogY3VycmVudFtrZXldO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGlzT2JqZWN0KHJlc3VsdFtrZXldKSAmJiBpc09iamVjdChjdXJyZW50W2tleV0pKSB7XG4gICAgICAgICAgICByZXN1bHRba2V5XSA9IG1lcmdlKHJlc3VsdFtrZXldLCBjdXJyZW50W2tleV0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmVzdWx0W2tleV0gPVxuICAgICAgICAgICAgICAgIGN1cnJlbnRba2V5XSA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgICAgID8gbWVyZ2Uub3B0aW9ucy5hbGxvd1VuZGVmaW5lZE92ZXJyaWRlc1xuICAgICAgICAgICAgICAgICAgICAgICAgPyBjdXJyZW50W2tleV1cbiAgICAgICAgICAgICAgICAgICAgICAgIDogcmVzdWx0W2tleV1cbiAgICAgICAgICAgICAgICAgICAgOiBjdXJyZW50W2tleV07XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gcmVzdWx0O1xufSwge30pO1xuY29uc3QgZGVmYXVsdE9wdGlvbnMgPSB7XG4gICAgYWxsb3dVbmRlZmluZWRPdmVycmlkZXM6IHRydWUsXG4gICAgbWVyZ2VBcnJheXM6IHRydWUsXG4gICAgdW5pcXVlQXJyYXlJdGVtczogdHJ1ZSxcbn07XG5tZXJnZS5vcHRpb25zID0gZGVmYXVsdE9wdGlvbnM7XG5tZXJnZS53aXRoT3B0aW9ucyA9IChvcHRpb25zLCAuLi5vYmplY3RzKSA9PiB7XG4gICAgbWVyZ2Uub3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgZGVmYXVsdE9wdGlvbnMpLCBvcHRpb25zKTtcbiAgICBjb25zdCByZXN1bHQgPSBtZXJnZSguLi5vYmplY3RzKTtcbiAgICBtZXJnZS5vcHRpb25zID0gZGVmYXVsdE9wdGlvbnM7XG4gICAgcmV0dXJuIHJlc3VsdDtcbn07XG5leHBvcnRzLmRlZmF1bHQgPSBtZXJnZTtcbiIsIG51bGwsIG51bGwsIG51bGwsICJleHBvcnQgKiBmcm9tIFwiLi9nZW5lcmF0ZS1vcGVuYXBpXCJcbmV4cG9ydCAqIGZyb20gXCIuL2dlbmVyYXRlLXJvdXRlLXR5cGVzXCJcbiIsICJpbXBvcnQgZnMgZnJvbSBcIm5vZGU6ZnMvcHJvbWlzZXNcIlxuaW1wb3J0IHsgZ2VuZXJhdGVTY2hlbWEgfSBmcm9tIFwiQGFuYXRpbmUvem9kLW9wZW5hcGlcIlxuaW1wb3J0IHtcbiAgT3BlbkFwaUJ1aWxkZXIsXG4gIE9wZXJhdGlvbk9iamVjdCxcbiAgUGFyYW1ldGVyT2JqZWN0LFxufSBmcm9tIFwib3BlbmFwaTMtdHMvb2FzMzFcIlxuaW1wb3J0IHsgU2V0dXBQYXJhbXMgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIlxuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIlxuaW1wb3J0IHsgcGFyc2VSb3V0ZXNJblBhY2thZ2UgfSBmcm9tIFwiLi4vbGliL3BhcnNlLXJvdXRlcy1pbi1wYWNrYWdlXCJcbmltcG9ydCB7IGVtYmVkU2NoZW1hUmVmZXJlbmNlcyB9IGZyb20gXCIuL2VtYmVkLXNjaGVtYS1yZWZlcmVuY2VzXCJcbmltcG9ydCB7IG1hcE1ldGhvZHNUb0Zlcm5TZGtNZXRhZGF0YSB9IGZyb20gXCIuL2Zlcm4tc2RrLXV0aWxzXCJcblxuZnVuY3Rpb24gcmVwbGFjZUZpcnN0Q2hhclRvTG93ZXJjYXNlKHN0cjogc3RyaW5nKSB7XG4gIGlmIChzdHIubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIHN0clxuICB9XG5cbiAgY29uc3QgZmlyc3RDaGFyID0gc3RyLmNoYXJBdCgwKS50b0xvd2VyQ2FzZSgpXG4gIHJldHVybiBmaXJzdENoYXIgKyBzdHIuc2xpY2UoMSlcbn1cblxuZnVuY3Rpb24gdHJhbnNmb3JtUGF0aFRvT3BlcmF0aW9uSWQocGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgcGFydHMgPSBwYXRoXG4gICAgLnJlcGxhY2UoLy0vZywgXCJfXCIpXG4gICAgLnNwbGl0KFwiL1wiKVxuICAgIC5maWx0ZXIoKHBhcnQpID0+IHBhcnQgIT09IFwiXCIpXG4gIGNvbnN0IHRyYW5zZm9ybWVkUGFydHMgPSBwYXJ0cy5tYXAoKHBhcnQpID0+IHtcbiAgICBpZiAocGFydC5zdGFydHNXaXRoKFwiW1wiKSAmJiBwYXJ0LmVuZHNXaXRoKFwiXVwiKSkge1xuICAgICAgLy8gQ29udmVydCBbcGFyYW1dIHRvIEJ5UGFyYW1cbiAgICAgIGNvbnN0IHNlcnZpY2VOYW1lID0gcGFydC5zbGljZSgxLCAtMSlcbiAgICAgIGNvbnN0IHdvcmRzID0gc2VydmljZU5hbWUuc3BsaXQoXCJfXCIpXG4gICAgICBjb25zdCBjYXBpdGFsaXplZFdvcmRzID0gd29yZHMubWFwKFxuICAgICAgICAod29yZCkgPT4gd29yZC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHdvcmQuc2xpY2UoMSlcbiAgICAgIClcbiAgICAgIHJldHVybiBgQnkke2NhcGl0YWxpemVkV29yZHMuam9pbihcIlwiKX1gXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIENvbnZlcnQgYXBpX3BhdGggdG8gQXBpUGF0aFxuICAgICAgY29uc3Qgd29yZHMgPSBwYXJ0LnNwbGl0KFwiX1wiKVxuICAgICAgY29uc3QgY2FwaXRhbGl6ZWRXb3JkcyA9IHdvcmRzLm1hcChcbiAgICAgICAgKHdvcmQpID0+IHdvcmQuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyB3b3JkLnNsaWNlKDEpXG4gICAgICApXG4gICAgICByZXR1cm4gY2FwaXRhbGl6ZWRXb3Jkcy5qb2luKFwiXCIpXG4gICAgfVxuICB9KVxuXG4gIHJldHVybiByZXBsYWNlRmlyc3RDaGFyVG9Mb3dlcmNhc2UodHJhbnNmb3JtZWRQYXJ0cy5qb2luKFwiXCIpKVxufVxuXG5mdW5jdGlvbiBwYXNjYWxDYXNlKGlucHV0OiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCB3b3JkcyA9IGlucHV0LnNwbGl0KFwiIFwiKVxuICBjb25zdCBjYXBpdGFsaXplZFdvcmRzID0gd29yZHMubWFwKFxuICAgICh3b3JkKSA9PiB3b3JkLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgd29yZC5zbGljZSgxKS50b0xvd2VyQ2FzZSgpXG4gIClcbiAgY29uc3QgcGFzY2FsQ2FzZVN0cmluZyA9IGNhcGl0YWxpemVkV29yZHMuam9pbihcIlwiKVxuICByZXR1cm4gcGFzY2FsQ2FzZVN0cmluZ1xufVxuXG5pbnRlcmZhY2UgVGFnT3B0aW9uIHtcbiAgbmFtZTogc3RyaW5nXG4gIGRlc2NyaXB0aW9uOiBzdHJpbmdcbiAgZG9lc1JvdXRlSGF2ZVRhZz86IChyb3V0ZTogc3RyaW5nKSA9PiBib29sZWFuXG59XG5cbmludGVyZmFjZSBHZW5lcmF0ZU9wZW5BUElPcHRzIHtcbiAgcGFja2FnZURpcjogc3RyaW5nXG4gIG91dHB1dEZpbGU/OiBzdHJpbmdcbiAgcGF0aEdsb2I/OiBzdHJpbmdcbiAgdGFncz86IEFycmF5PFRhZ09wdGlvbj5cbiAgYXBpUHJlZml4Pzogc3RyaW5nXG4gIG1hcEZpbGVQYXRoVG9IVFRQUm91dGU/OiAoZmlsZV9wYXRoOiBzdHJpbmcpID0+IHN0cmluZ1xufVxuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gZ2VuZXJhdGVzIGFuIE9wZW5BUEkgc3BlYyBmcm9tIHRoZSBOZXh0LmpzIEFQSSByb3V0ZXMuXG4gKlxuICogWW91IG5vcm1hbGx5IGludm9rZSB0aGlzIHdpdGggYG5leHRhcGkgZ2VuZXJhdGUtb3BlbmFwaWAgaW4gYVxuICogXCJidWlsZDpvcGVuYXBpXCIgcGFja2FnZS5qc29uIHNjcmlwdC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdlbmVyYXRlT3BlbkFQSShvcHRzOiBHZW5lcmF0ZU9wZW5BUElPcHRzKSB7XG4gIGNvbnN0IGNoYWxrID0gKGF3YWl0IGltcG9ydChcImNoYWxrXCIpKS5kZWZhdWx0XG4gIGNvbnN0IHsgb3V0cHV0RmlsZSwgdGFncyA9IFtdIH0gPSBvcHRzXG5cbiAgY29uc3QgZmlsZXBhdGhUb1JvdXRlRm4gPSBhd2FpdCBwYXJzZVJvdXRlc0luUGFja2FnZShvcHRzKVxuXG4gIC8vIFRPRE8gZGV0ZWN0IGlmIHRoZXJlIGFyZSBtdWx0aXBsZSBzZXR1cHMgYW5kIG91dHB1dCBkaWZmZXJlbnQgQVBJc1xuICBjb25zdCB7IHNldHVwUGFyYW1zOiBnbG9iYWxTZXR1cFBhcmFtcyB9ID0gZmlsZXBhdGhUb1JvdXRlRm4udmFsdWVzKCkubmV4dCgpXG4gICAgLnZhbHVlIGFzIHsgc2V0dXBQYXJhbXM6IFNldHVwUGFyYW1zIH1cblxuICBjb25zdCBzZWN1cml0eVNjaGVtZXMgPSBnbG9iYWxTZXR1cFBhcmFtcy5zZWN1cml0eVNjaGVtYXMgPz8ge31cbiAgY29uc3Qgc2VjdXJpdHlPYmplY3RzRm9yQXV0aFR5cGUgPSB7fVxuICBmb3IgKGNvbnN0IGF1dGhOYW1lIG9mIE9iamVjdC5rZXlzKGdsb2JhbFNldHVwUGFyYW1zLmF1dGhNaWRkbGV3YXJlTWFwKSkge1xuICAgIGNvbnN0IG13ID0gZ2xvYmFsU2V0dXBQYXJhbXMuYXV0aE1pZGRsZXdhcmVNYXBbYXV0aE5hbWVdXG4gICAgaWYgKG13LnNlY3VyaXR5U2NoZW1hKSB7XG4gICAgICBzZWN1cml0eVNjaGVtZXNbYXV0aE5hbWVdID0gKG13IGFzIGFueSkuc2VjdXJpdHlTY2hlbWFcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBjaGFsay55ZWxsb3coXG4gICAgICAgICAgYEF1dGhlbnRpY2F0aW9uIG1pZGRsZXdhcmUgXCIke2F1dGhOYW1lfVwiIGhhcyBubyBzZWN1cml0eVNjaGVtYS4gWW91IGNhbiBkZWZpbmUgdGhpcyBvbiB0aGUgZnVuY3Rpb24gKGUuZy4gYWZ0ZXIgdGhlIGV4cG9ydCBkby4uLiBcXG5cXG5teU1pZGRsZXdhcmUuc2VjdXJpdHlTY2hlbWEgPSB7XFxuICB0eXBlOiBcImh0dHBcIlxcbiAgc2NoZW1lOiBcImJlYXJlclwiXFxuICBiZWFyZXJGb3JtYXQ6IFwiSldUXCJcXG4gLy8gb3IgQVBJIFRva2VuIGV0Yy5cXG59XFxuXFxuWW91IGNhbiBhbHNvIGRlZmluZSBcInNlY3VyaXR5T2JqZWN0c1wiIHRoaXMgd2F5LCBpZiB5b3Ugd2FudCB0byBtYWtlIHRoZSBlbmRwb2ludCBzdXBwb3J0IG11bHRpcGxlIG1vZGVzIG9mIGF1dGhlbnRpY2F0aW9uLlxcblxcbmBcbiAgICAgICAgKVxuICAgICAgKVxuICAgIH1cblxuICAgIHNlY3VyaXR5T2JqZWN0c0ZvckF1dGhUeXBlW2F1dGhOYW1lXSA9IChtdyBhcyBhbnkpLnNlY3VyaXR5T2JqZWN0cyB8fCBbXG4gICAgICB7XG4gICAgICAgIFthdXRoTmFtZV06IFtdLFxuICAgICAgfSxcbiAgICBdXG4gIH1cblxuICBjb25zdCBnbG9iYWxTY2hlbWFzID0ge31cbiAgZm9yIChjb25zdCBbc2NoZW1hTmFtZSwgem9kU2NoZW1hXSBvZiBPYmplY3QuZW50cmllcyhcbiAgICBnbG9iYWxTZXR1cFBhcmFtcy5nbG9iYWxTY2hlbWFzID8/IHt9XG4gICkpIHtcbiAgICBnbG9iYWxTY2hlbWFzW3NjaGVtYU5hbWVdID0gZ2VuZXJhdGVTY2hlbWEoem9kU2NoZW1hKVxuICB9XG5cbiAgLy8gQnVpbGQgT3BlbkFQSSBzcGVjXG4gIGNvbnN0IGJ1aWxkZXIgPSBPcGVuQXBpQnVpbGRlci5jcmVhdGUoe1xuICAgIG9wZW5hcGk6IFwiMy4wLjBcIixcbiAgICBpbmZvOiB7XG4gICAgICB0aXRsZTogZ2xvYmFsU2V0dXBQYXJhbXMuYXBpTmFtZSxcbiAgICAgIHZlcnNpb246IFwiMS4wLjBcIixcbiAgICB9LFxuICAgIHNlcnZlcnM6IFtcbiAgICAgIHtcbiAgICAgICAgdXJsOiBnbG9iYWxTZXR1cFBhcmFtcy5wcm9kdWN0aW9uU2VydmVyVXJsIHx8IFwiaHR0cHM6Ly9leGFtcGxlLmNvbVwiLFxuICAgICAgfSxcbiAgICBdLFxuICAgIHRhZ3M6IHRhZ3MubWFwKCh0YWcpID0+ICh7IG5hbWU6IHRhZy5uYW1lLCBkZXNjcmlwdGlvbjogdGFnLmRlc2NyaXB0aW9uIH0pKSxcbiAgICBwYXRoczoge30sXG4gICAgY29tcG9uZW50czoge1xuICAgICAgc2VjdXJpdHlTY2hlbWVzLFxuICAgICAgc2NoZW1hczogZ2xvYmFsU2NoZW1hcyxcbiAgICB9LFxuICB9KVxuXG4gIGZvciAoY29uc3QgW1xuICAgIGZpbGVfcGF0aCxcbiAgICB7IHNldHVwUGFyYW1zLCByb3V0ZVNwZWMsIHJvdXRlOiByb3V0ZVBhdGggfSxcbiAgXSBvZiBmaWxlcGF0aFRvUm91dGVGbikge1xuICAgIGNvbnN0IGlzUG9zdE9yUHV0T3JQYXRjaCA9IFtcIlBPU1RcIiwgXCJQVVRcIiwgXCJQQVRDSFwiXS5zb21lKChtZXRob2QpID0+XG4gICAgICByb3V0ZVNwZWMubWV0aG9kcy5pbmNsdWRlcyhtZXRob2QpXG4gICAgKVxuICAgIC8vIFRPRE86IHN1cHBvcnQgbXVsdGlwYXJ0L2Zvcm0tZGF0YVxuXG4gICAgLy8gaGFuZGxlIGJvZHlcbiAgICBsZXQgYm9keV90b19nZW5lcmF0ZV9zY2hlbWFcbiAgICBpZiAoaXNQb3N0T3JQdXRPclBhdGNoKSB7XG4gICAgICBib2R5X3RvX2dlbmVyYXRlX3NjaGVtYSA9IHJvdXRlU3BlYy5qc29uQm9keSA/PyByb3V0ZVNwZWMuY29tbW9uUGFyYW1zXG5cbiAgICAgIGlmIChyb3V0ZVNwZWMuanNvbkJvZHkgJiYgcm91dGVTcGVjLmNvbW1vblBhcmFtcykge1xuICAgICAgICBib2R5X3RvX2dlbmVyYXRlX3NjaGVtYSA9IHJvdXRlU3BlYy5qc29uQm9keS5tZXJnZShcbiAgICAgICAgICByb3V0ZVNwZWMuY29tbW9uUGFyYW1zXG4gICAgICAgIClcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgYm9keV90b19nZW5lcmF0ZV9zY2hlbWEgPSByb3V0ZVNwZWMuanNvbkJvZHlcbiAgICB9XG5cbiAgICAvLyBoYW5kbGUgcXVlcnlcbiAgICBsZXQgcXVlcnlfdG9fZ2VuZXJhdGVfc2NoZW1hXG4gICAgaWYgKGlzUG9zdE9yUHV0T3JQYXRjaCkge1xuICAgICAgcXVlcnlfdG9fZ2VuZXJhdGVfc2NoZW1hID0gcm91dGVTcGVjLnF1ZXJ5UGFyYW1zXG4gICAgfSBlbHNlIHtcbiAgICAgIHF1ZXJ5X3RvX2dlbmVyYXRlX3NjaGVtYSA9IHJvdXRlU3BlYy5xdWVyeVBhcmFtcyA/PyByb3V0ZVNwZWMuY29tbW9uUGFyYW1zXG5cbiAgICAgIGlmIChyb3V0ZVNwZWMucXVlcnlQYXJhbXMgJiYgcm91dGVTcGVjLmNvbW1vblBhcmFtcykge1xuICAgICAgICBxdWVyeV90b19nZW5lcmF0ZV9zY2hlbWEgPSByb3V0ZVNwZWMucXVlcnlQYXJhbXMubWVyZ2UoXG4gICAgICAgICAgcm91dGVTcGVjLmNvbW1vblBhcmFtc1xuICAgICAgICApXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gREVMRVRFIGFuZCBHRVQgY2Fubm90IGhhdmUgYSBib2R5XG4gICAgbGV0IG1ldGhvZHMgPSByb3V0ZVNwZWMubWV0aG9kc1xuXG4gICAgaWYgKHJvdXRlU3BlYy5tZXRob2RzLmluY2x1ZGVzKFwiREVMRVRFXCIpICYmIGJvZHlfdG9fZ2VuZXJhdGVfc2NoZW1hKSB7XG4gICAgICBtZXRob2RzID0gbWV0aG9kcy5maWx0ZXIoKG0pID0+IG0gIT09IFwiREVMRVRFXCIpXG4gICAgfVxuXG4gICAgaWYgKHJvdXRlU3BlYy5tZXRob2RzLmluY2x1ZGVzKFwiR0VUXCIpICYmIGJvZHlfdG9fZ2VuZXJhdGVfc2NoZW1hKSB7XG4gICAgICBtZXRob2RzID0gbWV0aG9kcy5maWx0ZXIoKG0pID0+IG0gIT09IFwiR0VUXCIpXG4gICAgfVxuXG4gICAgaWYgKG1ldGhvZHMubGVuZ3RoID09PSAwKSB7XG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIGNoYWxrLnllbGxvdyhgU2tpcHBpbmcgcm91dGUgJHtyb3V0ZVBhdGh9IGJlY2F1c2UgaXQgaGFzIG5vIG1ldGhvZHMuYClcbiAgICAgIClcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuXG4gICAgY29uc3Qgcm91dGU6IE9wZXJhdGlvbk9iamVjdCA9IHtcbiAgICAgIC4uLnJvdXRlU3BlYy5vcGVuQXBpTWV0YWRhdGEsXG4gICAgICBzdW1tYXJ5OiByb3V0ZVBhdGgsXG4gICAgICByZXNwb25zZXM6IHtcbiAgICAgICAgMjAwOiB7XG4gICAgICAgICAgZGVzY3JpcHRpb246IFwiT0tcIixcbiAgICAgICAgfSxcbiAgICAgICAgNDAwOiB7XG4gICAgICAgICAgZGVzY3JpcHRpb246IFwiQmFkIFJlcXVlc3RcIixcbiAgICAgICAgfSxcbiAgICAgICAgNDAxOiB7XG4gICAgICAgICAgZGVzY3JpcHRpb246IFwiVW5hdXRob3JpemVkXCIsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgc2VjdXJpdHk6IEFycmF5LmlzQXJyYXkocm91dGVTcGVjLmF1dGgpXG4gICAgICAgID8gcm91dGVTcGVjLmF1dGhcbiAgICAgICAgICAgIC5tYXAoKGF1dGhUeXBlKSA9PiBzZWN1cml0eU9iamVjdHNGb3JBdXRoVHlwZVthdXRoVHlwZV0pXG4gICAgICAgICAgICAuZmxhdCgpXG4gICAgICAgIDogc2VjdXJpdHlPYmplY3RzRm9yQXV0aFR5cGVbcm91dGVTcGVjLmF1dGhdLFxuICAgIH1cblxuICAgIGlmIChib2R5X3RvX2dlbmVyYXRlX3NjaGVtYSkge1xuICAgICAgcm91dGUucmVxdWVzdEJvZHkgPSB7XG4gICAgICAgIGNvbnRlbnQ6IHtcbiAgICAgICAgICBcImFwcGxpY2F0aW9uL2pzb25cIjoge1xuICAgICAgICAgICAgc2NoZW1hOiBnZW5lcmF0ZVNjaGVtYShib2R5X3RvX2dlbmVyYXRlX3NjaGVtYSBhcyBhbnkpLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHF1ZXJ5X3RvX2dlbmVyYXRlX3NjaGVtYSkge1xuICAgICAgY29uc3Qgc2NoZW1hID0gZ2VuZXJhdGVTY2hlbWEocXVlcnlfdG9fZ2VuZXJhdGVfc2NoZW1hIGFzIGFueSlcbiAgICAgIGlmIChzY2hlbWEucHJvcGVydGllcykge1xuICAgICAgICBjb25zdCBwYXJhbWV0ZXJzOiBQYXJhbWV0ZXJPYmplY3RbXSA9IE9iamVjdC5rZXlzKFxuICAgICAgICAgIHNjaGVtYS5wcm9wZXJ0aWVzIGFzIGFueVxuICAgICAgICApLm1hcCgobmFtZSkgPT4ge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgaW46IFwicXVlcnlcIixcbiAgICAgICAgICAgIHNjaGVtYTogc2NoZW1hLnByb3BlcnRpZXMhW25hbWVdLFxuICAgICAgICAgICAgcmVxdWlyZWQ6IHNjaGVtYS5yZXF1aXJlZD8uaW5jbHVkZXMobmFtZSksXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuXG4gICAgICAgIHJvdXRlLnBhcmFtZXRlcnMgPSBwYXJhbWV0ZXJzXG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgeyBqc29uUmVzcG9uc2UgfSA9IHJvdXRlU3BlY1xuICAgIGNvbnN0IHsgYWRkT2tTdGF0dXMgPSB0cnVlIH0gPSBzZXR1cFBhcmFtc1xuXG4gICAgaWYgKGpzb25SZXNwb25zZSkge1xuICAgICAgaWYgKFxuICAgICAgICAhanNvblJlc3BvbnNlLl9kZWYgfHxcbiAgICAgICAgIWpzb25SZXNwb25zZS5fZGVmLnR5cGVOYW1lIHx8XG4gICAgICAgIGpzb25SZXNwb25zZS5fZGVmLnR5cGVOYW1lICE9PSBcIlpvZE9iamVjdFwiXG4gICAgICApIHtcbiAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgIGNoYWxrLnllbGxvdyhcbiAgICAgICAgICAgIGBTa2lwcGluZyByb3V0ZSAke3JvdXRlUGF0aH0gYmVjYXVzZSB0aGUgcmVzcG9uc2UgaXMgbm90IGEgWm9kT2JqZWN0LmBcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgY29uc3QgcmVzcG9uc2VTY2hlbWEgPSBnZW5lcmF0ZVNjaGVtYShcbiAgICAgICAgYWRkT2tTdGF0dXMgJiYganNvblJlc3BvbnNlIGluc3RhbmNlb2Ygei5ab2RPYmplY3RcbiAgICAgICAgICA/IGpzb25SZXNwb25zZS5leHRlbmQoeyBvazogei5ib29sZWFuKCkgfSlcbiAgICAgICAgICA6IGpzb25SZXNwb25zZVxuICAgICAgKVxuXG4gICAgICBjb25zdCBzY2hlbWFXaXRoUmVmZXJlbmNlcyA9IGVtYmVkU2NoZW1hUmVmZXJlbmNlcyhcbiAgICAgICAgcmVzcG9uc2VTY2hlbWEsXG4gICAgICAgIGdsb2JhbFNjaGVtYXNcbiAgICAgIClcblxuICAgICAgLy8gVE9ETzogd2Ugc2hvdWxkIG5vdCBoYXJkY29kZSAyMDAgaGVyZVxuICAgICAgcm91dGUucmVzcG9uc2VzWzIwMF0uY29udGVudCA9IHtcbiAgICAgICAgXCJhcHBsaWNhdGlvbi9qc29uXCI6IHtcbiAgICAgICAgICBzY2hlbWE6IHNjaGVtYVdpdGhSZWZlcmVuY2VzLFxuICAgICAgICB9LFxuICAgICAgfVxuICAgIH1cblxuICAgIHJvdXRlLnRhZ3MgPSBbXVxuICAgIGZvciAoY29uc3QgdGFnIG9mIHRhZ3MpIHtcbiAgICAgIGlmICh0YWcuZG9lc1JvdXRlSGF2ZVRhZyAmJiB0YWcuZG9lc1JvdXRlSGF2ZVRhZyhyb3V0ZS5zdW1tYXJ5IHx8IFwiXCIpKSB7XG4gICAgICAgIHJvdXRlLnRhZ3MucHVzaCh0YWcubmFtZSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBtZXRob2RzTWFwcGVkVG9GZXJuU2RrTWV0YWRhdGEgPSBhd2FpdCBtYXBNZXRob2RzVG9GZXJuU2RrTWV0YWRhdGEoe1xuICAgICAgbWV0aG9kcyxcbiAgICAgIHBhdGg6IHJvdXRlUGF0aCxcbiAgICAgIHNka1JldHVyblZhbHVlOiByb3V0ZVNwZWMuc2RrUmV0dXJuVmFsdWUsXG4gICAgfSlcblxuICAgIC8vIFNvbWUgcm91dGVzIGFjY2VwdCBtdWx0aXBsZSBtZXRob2RzXG4gICAgYnVpbGRlci5hZGRQYXRoKHJvdXRlUGF0aCwge1xuICAgICAgLi4ubWV0aG9kc1xuICAgICAgICAubWFwKChtZXRob2QpID0+ICh7XG4gICAgICAgICAgW21ldGhvZC50b0xvd2VyQ2FzZSgpXToge1xuICAgICAgICAgICAgLi4ubWV0aG9kc01hcHBlZFRvRmVyblNka01ldGFkYXRhW21ldGhvZF0sXG4gICAgICAgICAgICAuLi5yb3V0ZSxcbiAgICAgICAgICAgIG9wZXJhdGlvbklkOiBgJHt0cmFuc2Zvcm1QYXRoVG9PcGVyYXRpb25JZChyb3V0ZVBhdGgpfSR7cGFzY2FsQ2FzZShcbiAgICAgICAgICAgICAgbWV0aG9kXG4gICAgICAgICAgICApfWAsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSkpXG4gICAgICAgIC5yZWR1Y2VSaWdodCgoYWNjLCBjdXIpID0+ICh7IC4uLmFjYywgLi4uY3VyIH0pLCB7fSksXG4gICAgfSlcbiAgfVxuXG4gIGlmIChvdXRwdXRGaWxlKSB7XG4gICAgYXdhaXQgZnMud3JpdGVGaWxlKG91dHB1dEZpbGUsIGJ1aWxkZXIuZ2V0U3BlY0FzSnNvbigpKVxuICB9XG5cbiAgcmV0dXJuIGJ1aWxkZXIuZ2V0U3BlY0FzSnNvbigpXG59XG4iLCAiaW1wb3J0IHBhdGggZnJvbSBcIm5vZGU6cGF0aFwiXG5pbXBvcnQgeyBSb3V0ZVNwZWMsIFNldHVwUGFyYW1zIH0gZnJvbSBcIi4uLy4uL3R5cGVzXCJcbmltcG9ydCB7IGRlZmF1bHRNYXBGaWxlUGF0aFRvSFRUUFJvdXRlIH0gZnJvbSBcIi4vZGVmYXVsdC1tYXAtZmlsZS1wYXRoLXRvLWh0dHAtcm91dGVcIlxuXG5leHBvcnQgaW50ZXJmYWNlIFJvdXRlSW5mbyB7XG4gIHNldHVwUGFyYW1zOiBTZXR1cFBhcmFtc1xuICByb3V0ZVNwZWM6IFJvdXRlU3BlY1xuICByb3V0ZUZuOiBGdW5jdGlvblxuICByb3V0ZTogc3RyaW5nXG59XG5cbmV4cG9ydCBjb25zdCBwYXJzZVJvdXRlc0luUGFja2FnZSA9IGFzeW5jIChvcHRzOiB7XG4gIHBhY2thZ2VEaXI6IHN0cmluZ1xuICBwYXRoR2xvYj86IHN0cmluZ1xuICBhcGlQcmVmaXg/OiBzdHJpbmdcbiAgbWFwRmlsZVBhdGhUb0hUVFBSb3V0ZT86IChmaWxlX3BhdGg6IHN0cmluZykgPT4gc3RyaW5nXG59KTogUHJvbWlzZTxNYXA8c3RyaW5nLCBSb3V0ZUluZm8+PiA9PiB7XG4gIGNvbnN0IGNoYWxrID0gKGF3YWl0IGltcG9ydChcImNoYWxrXCIpKS5kZWZhdWx0XG4gIGNvbnN0IGdsb2JieSA9IChhd2FpdCBpbXBvcnQoXCJnbG9iYnlcIikpLmdsb2JieVxuICBjb25zdCB7XG4gICAgcGFja2FnZURpcixcbiAgICBwYXRoR2xvYiA9IFwiL3BhZ2VzL2FwaS8qKi8qLnRzXCIsXG4gICAgbWFwRmlsZVBhdGhUb0hUVFBSb3V0ZSA9IGRlZmF1bHRNYXBGaWxlUGF0aFRvSFRUUFJvdXRlKG9wdHMuYXBpUHJlZml4KSxcbiAgfSA9IG9wdHNcbiAgLy8gTG9hZCBhbGwgcm91dGUgc3BlY3NcbiAgY29uc3QgZnVsbFBhdGhHbG9iID0gcGF0aC5wb3NpeC5qb2luKHBhY2thZ2VEaXIsIHBhdGhHbG9iKVxuICBjb25zb2xlLmxvZyhgc2VhcmNoaW5nIFwiJHtmdWxsUGF0aEdsb2J9XCIuLi5gKVxuICBjb25zdCBmaWxlcGF0aHMgPSBhd2FpdCBnbG9iYnkoYCR7ZnVsbFBhdGhHbG9ifWApXG4gIGNvbnNvbGUubG9nKGBmb3VuZCAke2ZpbGVwYXRocy5sZW5ndGh9IGZpbGVzYClcbiAgaWYgKGZpbGVwYXRocy5sZW5ndGggPT09IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIGZpbGVzIGZvdW5kIGF0IFwiJHtmdWxsUGF0aEdsb2J9XCJgKVxuICB9XG4gIGNvbnN0IGZpbGVwYXRoVG9Sb3V0ZUZuID0gbmV3IE1hcDxzdHJpbmcsIFJvdXRlSW5mbz4oKVxuXG4gIGF3YWl0IFByb21pc2UuYWxsKFxuICAgIGZpbGVwYXRocy5tYXAoYXN5bmMgKHApID0+IHtcbiAgICAgIGNvbnN0IHsgZGVmYXVsdDogcm91dGVGbiB9ID0gYXdhaXQgcmVxdWlyZShwYXRoLnJlc29sdmUocCkpXG5cbiAgICAgIGlmIChyb3V0ZUZuKSB7XG4gICAgICAgIGlmIChyb3V0ZUZuLl9yb3V0ZVNwZWM/LmV4Y2x1ZGVGcm9tT3BlbkFwaSkge1xuICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgY2hhbGsuZ3JheShcbiAgICAgICAgICAgICAgYElnbm9yaW5nIFwiJHtwfSBiZWNhdXNlIGl0IHdhcyBleGNsdWRlZCBmcm9tIE9wZW5BUEkgZ2VuZXJhdGlvblwiYFxuICAgICAgICAgICAgKVxuICAgICAgICAgIClcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgICBpZiAoIXJvdXRlRm4uX3NldHVwUGFyYW1zKSB7XG4gICAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICAgY2hhbGsueWVsbG93KFxuICAgICAgICAgICAgICBgSWdub3JpbmcgXCIke3B9XCIgYmVjYXVzZSBpdCB3YXNuJ3QgY3JlYXRlZCB3aXRoIHdpdGhSb3V0ZVNwZWNgXG4gICAgICAgICAgICApXG4gICAgICAgICAgKVxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICAgIGZpbGVwYXRoVG9Sb3V0ZUZuLnNldChwLCB7XG4gICAgICAgICAgc2V0dXBQYXJhbXM6IHJvdXRlRm4uX3NldHVwUGFyYW1zLFxuICAgICAgICAgIHJvdXRlU3BlYzogcm91dGVGbi5fcm91dGVTcGVjLFxuICAgICAgICAgIHJvdXRlOiBtYXBGaWxlUGF0aFRvSFRUUFJvdXRlKHApLFxuICAgICAgICAgIHJvdXRlRm4sXG4gICAgICAgIH0pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLndhcm4oY2hhbGsueWVsbG93KGBDb3VsZG4ndCBmaW5kIHJvdXRlICR7cH1gKSlcbiAgICAgIH1cbiAgICB9KVxuICApXG5cbiAgcmV0dXJuIGZpbGVwYXRoVG9Sb3V0ZUZuXG59XG4iLCAiaW1wb3J0IHBhdGggZnJvbSBcInBhdGhcIlxuXG5leHBvcnQgY29uc3QgZGVmYXVsdE1hcEZpbGVQYXRoVG9IVFRQUm91dGUgPVxuICAoYXBpX3ByZWZpeDogc3RyaW5nID0gXCIvYXBpXCIpID0+XG4gIChmaWxlX3BhdGg6IHN0cmluZykgPT4ge1xuICAgIGNvbnN0IHJvdXRlID0gZmlsZV9wYXRoXG4gICAgICAvLyByZXBsYWNlIC4vIGlmIGl0IHN0YXJ0cyB3aXRoIC4vXG4gICAgICAucmVwbGFjZSgvXlxcLlxcLy8sIFwiL1wiKVxuICAgICAgLy8gcmVwbGFjZSBzdGFydGluZyAvXG4gICAgICAucmVwbGFjZSgvXlxcLy8sIFwiXCIpXG4gICAgICAvLyByZXBsYWNlIC9zcmMgaWYgaXQgc3RhcnRzIHdpdGggL3NyY1xuICAgICAgLnJlcGxhY2UoL15zcmNcXC8vLCBcIlwiKVxuICAgICAgLy8gcmVwbGFjZSAvcGFnZXMgaWYgaXQgc3RhcnRzIHdpdGggL3BhZ2VzXG4gICAgICAucmVwbGFjZSgvXnBhZ2VzXFwvLywgXCJcIilcbiAgICAgIC8vIHJlcGxhY2UgL2FwaSBpZiBpdCBzdGFydHMgd2l0aCAvYXBpXG4gICAgICAucmVwbGFjZSgvXmFwaVxcLy8sIFwiXCIpXG4gICAgICAvLyByZXBsYWNlIC50cyBpZiBpdCBlbmRzIHdpdGggLnRzXG4gICAgICAucmVwbGFjZSgvXFwudHMkLywgXCJcIilcbiAgICAgIC8vIHJlbW92ZSBwdWJsaWMgcmVmZXJlbmNlXG4gICAgICAucmVwbGFjZShcInB1YmxpY1wiLCBcIlwiKVxuICAgICAgLy8gcmVwbGFjZSBpbmRleCBpZiBpdCBlbmRzIHdpdGggaW5kZXhcbiAgICAgIC5yZXBsYWNlKC9cXC9cXGluZGV4KD8hLikvLCBcIlwiKVxuXG4gICAgcmV0dXJuIHBhdGguam9pbihhcGlfcHJlZml4LCByb3V0ZSlcbiAgfVxuIiwgImltcG9ydCBfIGZyb20gXCJsb2Rhc2hcIlxuXG5mdW5jdGlvbiBmaW5kS2V5SW5PYmoob2JqOiBhbnksIHZhbHVlOiBhbnkpOiBzdHJpbmcgfCBudWxsIHtcbiAgbGV0IHJlc3VsdEtleTogc3RyaW5nIHwgbnVsbCA9IG51bGxcbiAgXy5mb3JPd24ob2JqLCAodiwgaykgPT4ge1xuICAgIGlmIChfLmlzT2JqZWN0KHYpICYmIF8uaXNNYXRjaCh2LCB2YWx1ZSkpIHtcbiAgICAgIHJlc3VsdEtleSA9IGtcbiAgICAgIC8vIFN0b3AgdGhlIGl0ZXJhdGlvblxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICB9KVxuICByZXR1cm4gcmVzdWx0S2V5XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbWJlZFNjaGVtYVJlZmVyZW5jZXMob2JqMTogYW55LCBvYmoyOiBhbnkpOiBhbnkge1xuICByZXR1cm4gXy50cmFuc2Zvcm0ob2JqMSwgKHJlc3VsdCwgdmFsdWUsIGtleSkgPT4ge1xuICAgIGlmIChfLmlzT2JqZWN0KHZhbHVlKSkge1xuICAgICAgY29uc3QgbWF0Y2hpbmdLZXkgPSBmaW5kS2V5SW5PYmoob2JqMiwgdmFsdWUpXG4gICAgICBpZiAobWF0Y2hpbmdLZXkpIHtcbiAgICAgICAgcmVzdWx0W2tleV0gPSB7XG4gICAgICAgICAgJHJlZjogYCMvY29tcG9uZW50cy9zY2hlbWFzLyR7bWF0Y2hpbmdLZXl9YCxcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzdWx0W2tleV0gPSBlbWJlZFNjaGVtYVJlZmVyZW5jZXModmFsdWUsIG9iajIpXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdFtrZXldID0gdmFsdWVcbiAgICB9XG4gIH0pXG59XG4iLCAiaW1wb3J0IHsgUm91dGVTcGVjIH0gZnJvbSBcIi4uLy4uL3R5cGVzXCJcblxuZnVuY3Rpb24gdHJhbnNmb3JtUGF0aFRvRmVyblNka01ldGhvZE5hbWUocGF0aDogc3RyaW5nKSB7XG4gIGNvbnN0IHBhcnRzID0gcGF0aC5zcGxpdChcIi9cIikuZmlsdGVyKChwYXJ0KSA9PiBwYXJ0ICE9PSBcIlwiKVxuICBjb25zdCBsYXN0UGFydCA9IHBhcnRzW3BhcnRzLmxlbmd0aCAtIDFdXG4gIGlmIChsYXN0UGFydC5zdGFydHNXaXRoKFwiW1wiKSAmJiBsYXN0UGFydC5lbmRzV2l0aChcIl1cIikpIHtcbiAgICAvLyBDb252ZXJ0IFtwYXJhbV0gdG8gYnlfcGFyYW1cbiAgICBjb25zdCBwYXJhbSA9IGxhc3RQYXJ0LnNsaWNlKDEsIC0xKVxuICAgIHJldHVybiBgYnlfJHtwYXJhbX1gXG4gIH1cblxuICByZXR1cm4gbGFzdFBhcnRcbn1cblxuLy8gZmVybiBkb2NzOiBodHRwczovL2J1aWxkd2l0aGZlcm4uY29tL2RvY3Mvc3BlYy9leHRlbnNpb25zXG5mdW5jdGlvbiB0cmFuc2Zvcm1QYXRoVG9GZXJuU2RrR3JvdXBOYW1lKHBhdGg6IHN0cmluZykge1xuICBjb25zdCBwYXJ0cyA9IHBhdGguc3BsaXQoXCIvXCIpLmZpbHRlcigocGFydCkgPT4gcGFydCAhPT0gXCJcIilcbiAgcmV0dXJuIHBhcnRzLnNsaWNlKDAsIHBhcnRzLmxlbmd0aCAtIDEpXG59XG5cbmZ1bmN0aW9uIGdldEZlcm5TZGtNZXRhZGF0YShcbiAgcGF0aDogc3RyaW5nLFxuICBzZGtSZXR1cm5WYWx1ZT86IHN0cmluZyB8IHN0cmluZ1tdXG4pOlxuICB8IHtcbiAgICAgIFwieC1mZXJuLWlnbm9yZVwiOiB0cnVlXG4gICAgfVxuICB8IHtcbiAgICAgIFwieC1mZXJuLXNkay1ncm91cC1uYW1lXCI6IHN0cmluZ1tdXG4gICAgICBcIngtZmVybi1zZGstbWV0aG9kLW5hbWVcIjogc3RyaW5nXG4gICAgfSB7XG4gIGlmIChwYXRoLnNwbGl0KFwiL1wiKS5maWx0ZXIoKHBhcnQpID0+IHBhcnQgIT09IFwiXCIpLmxlbmd0aCA9PT0gMSkge1xuICAgIHJldHVybiB7XG4gICAgICBcIngtZmVybi1pZ25vcmVcIjogdHJ1ZSxcbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIFwieC1mZXJuLXNkay1ncm91cC1uYW1lXCI6IHRyYW5zZm9ybVBhdGhUb0Zlcm5TZGtHcm91cE5hbWUocGF0aCksXG4gICAgXCJ4LWZlcm4tc2RrLW1ldGhvZC1uYW1lXCI6IHRyYW5zZm9ybVBhdGhUb0Zlcm5TZGtNZXRob2ROYW1lKHBhdGgpLFxuICAgIC4uLihzZGtSZXR1cm5WYWx1ZVxuICAgICAgPyB7XG4gICAgICAgICAgXCJ4LWZlcm4tc2RrLXJldHVybi12YWx1ZVwiOiBzZGtSZXR1cm5WYWx1ZSxcbiAgICAgICAgfVxuICAgICAgOiB7fSksXG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG1hcE1ldGhvZHNUb0Zlcm5TZGtNZXRhZGF0YSh7XG4gIG1ldGhvZHMsXG4gIHBhdGgsXG4gIHNka1JldHVyblZhbHVlLFxufToge1xuICBtZXRob2RzOiBSb3V0ZVNwZWNbXCJtZXRob2RzXCJdXG4gIHBhdGg6IHN0cmluZ1xuICBzZGtSZXR1cm5WYWx1ZT86IHN0cmluZyB8IHN0cmluZ1tdXG59KSB7XG4gIGNvbnN0IGZlcm5TZGtNZXRhZGF0YSA9IGdldEZlcm5TZGtNZXRhZGF0YShwYXRoLCBzZGtSZXR1cm5WYWx1ZSlcbiAgaWYgKG1ldGhvZHMubGVuZ3RoID09PSAxKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIFttZXRob2RzWzBdXTogZmVyblNka01ldGFkYXRhLFxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IG1hcHBlZE1ldGhvZHMgPSB7fVxuXG4gIG1ldGhvZHMuZm9yRWFjaCgobWV0aG9kKSA9PiB7XG4gICAgaWYgKG1ldGhvZCA9PT0gXCJQT1NUXCIpIHtcbiAgICAgIG1hcHBlZE1ldGhvZHNbbWV0aG9kXSA9IGZlcm5TZGtNZXRhZGF0YVxuICAgIH0gZWxzZSB7XG4gICAgICBtYXBwZWRNZXRob2RzW21ldGhvZF0gPSB7XG4gICAgICAgIFwieC1mZXJuLWlnbm9yZVwiOiB0cnVlLFxuICAgICAgfVxuICAgIH1cbiAgfSlcblxuICByZXR1cm4gbWFwcGVkTWV0aG9kc1xufVxuIiwgImltcG9ydCAqIGFzIGZzIGZyb20gXCJub2RlOmZzL3Byb21pc2VzXCJcbmltcG9ydCB7IHBhcnNlUm91dGVzSW5QYWNrYWdlIH0gZnJvbSBcIi4uL2xpYi9wYXJzZS1yb3V0ZXMtaW4tcGFja2FnZVwiXG5pbXBvcnQgeyB6b2RUb1RzLCBwcmludE5vZGUgfSBmcm9tIFwiem9kLXRvLXRzXCJcbmltcG9ydCBwcmV0dGllciBmcm9tIFwicHJldHRpZXJcIlxuaW1wb3J0IHsgeiwgWm9kRWZmZWN0cywgWm9kT3B0aW9uYWwgfSBmcm9tIFwiem9kXCJcblxuaW50ZXJmYWNlIEdlbmVyYXRlUm91dGVUeXBlc09wdHMge1xuICBwYWNrYWdlRGlyOiBzdHJpbmdcbiAgb3V0cHV0RmlsZT86IHN0cmluZ1xuICBwYXRoR2xvYj86IHN0cmluZ1xuICBhcGlQcmVmaXg/OiBzdHJpbmdcbiAgbWFwRmlsZVBhdGhUb0hUVFBSb3V0ZT86IChmaWxlX3BhdGg6IHN0cmluZykgPT4gc3RyaW5nXG4gIC8qKlxuICAgKiBJZiBwcm92aWRlZCwgb25seSByb3V0ZXMgdGhhdCByZXR1cm4gdHJ1ZSB3aWxsIGJlIGluY2x1ZGVkIGluIHRoZSBnZW5lcmF0ZWQgdHlwZXMuXG4gICAqL1xuICBmaWx0ZXJSb3V0ZXM/OiAocm91dGU6IHN0cmluZykgPT4gYm9vbGVhblxufVxuXG5leHBvcnQgY29uc3QgZ2VuZXJhdGVSb3V0ZVR5cGVzID0gYXN5bmMgKG9wdHM6IEdlbmVyYXRlUm91dGVUeXBlc09wdHMpID0+IHtcbiAgY29uc3QgZmlsZXBhdGhUb1JvdXRlID0gYXdhaXQgcGFyc2VSb3V0ZXNJblBhY2thZ2Uob3B0cylcblxuICBjb25zdCBzb3J0ZWRSb3V0ZXMgPSBBcnJheS5mcm9tKGZpbGVwYXRoVG9Sb3V0ZS5lbnRyaWVzKCkpLnNvcnQoKGEsIGIpID0+XG4gICAgYVsxXS5yb3V0ZS5sb2NhbGVDb21wYXJlKGJbMV0ucm91dGUpXG4gIClcbiAgY29uc3QgZmlsdGVyZWRSb3V0ZXMgPSBzb3J0ZWRSb3V0ZXMuZmlsdGVyKFxuICAgIChbXywgeyByb3V0ZSB9XSkgPT4gIW9wdHMuZmlsdGVyUm91dGVzIHx8IG9wdHMuZmlsdGVyUm91dGVzKHJvdXRlKVxuICApXG5cbiAgLy8gVE9ETyB3aGVuIGxlc3MgbGF6eSwgdXNlIHRzLW1vcnBoIGZvciBiZXR0ZXIgZ2VuZXJhdGlvblxuICBjb25zdCByb3V0ZURlZnM6IHN0cmluZ1tdID0gW11cbiAgZm9yIChjb25zdCBbXywgeyByb3V0ZSwgcm91dGVTcGVjLCBzZXR1cFBhcmFtcyB9XSBvZiBmaWx0ZXJlZFJvdXRlcykge1xuICAgIGNvbnN0IHF1ZXJ5S2V5cyA9IE9iamVjdC5rZXlzKHJvdXRlU3BlYy5xdWVyeVBhcmFtcz8uc2hhcGUgPz8ge30pXG4gICAgY29uc3QgcGF0aFBhcmFtZXRlcnMgPSBxdWVyeUtleXMuZmlsdGVyKChrZXkpID0+IHJvdXRlLmluY2x1ZGVzKGBbJHtrZXl9XWApKVxuXG4gICAgLy8gcXVlcnlQYXJhbXMgbWlnaHQgYmUgYSBab2RFZmZlY3RzIG9yIFpvZE9wdGlvbmFsIGluIHNvbWUgY2FzZXNcbiAgICBsZXQgcXVlcnlQYXJhbXMgPSByb3V0ZVNwZWMucXVlcnlQYXJhbXNcbiAgICB3aGlsZSAoXG4gICAgICBxdWVyeVBhcmFtcyAmJlxuICAgICAgKFwic291cmNlVHlwZVwiIGluIHF1ZXJ5UGFyYW1zIHx8IFwidW53cmFwXCIgaW4gcXVlcnlQYXJhbXMpXG4gICAgKSB7XG4gICAgICBpZiAoXCJzb3VyY2VUeXBlXCIgaW4gcXVlcnlQYXJhbXMpIHtcbiAgICAgICAgcXVlcnlQYXJhbXMgPSAocXVlcnlQYXJhbXMgYXMgdW5rbm93biBhcyBab2RFZmZlY3RzPGFueT4pLnNvdXJjZVR5cGUoKVxuICAgICAgfSBlbHNlIGlmIChcInVud3JhcFwiIGluIHF1ZXJ5UGFyYW1zKSB7XG4gICAgICAgIHF1ZXJ5UGFyYW1zID0gKHF1ZXJ5UGFyYW1zIGFzIHVua25vd24gYXMgWm9kT3B0aW9uYWw8YW55PikudW53cmFwKClcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBxdWVyeVBhcmFtc1NjaGVtYVdpdGhvdXRQYXRoUGFyYW1ldGVycyA9IHF1ZXJ5UGFyYW1zPy5vbWl0KFxuICAgICAgT2JqZWN0LmZyb21FbnRyaWVzKHBhdGhQYXJhbWV0ZXJzLm1hcCgocGFyYW0pID0+IFtwYXJhbSwgdHJ1ZV0pKVxuICAgIClcblxuICAgIHJvdXRlRGVmcy5wdXNoKFxuICAgICAgYFxuXCIke3JvdXRlfVwiOiB7XG4gIHJvdXRlOiBcIiR7cm91dGV9XCIsXG4gIG1ldGhvZDogJHtyb3V0ZVNwZWMubWV0aG9kcy5tYXAoKG0pID0+IGBcIiR7bX1cImApLmpvaW4oXCIgfCBcIil9LFxuICBxdWVyeVBhcmFtczogJHtcbiAgICBxdWVyeVBhcmFtc1NjaGVtYVdpdGhvdXRQYXRoUGFyYW1ldGVyc1xuICAgICAgPyBwcmludE5vZGUoem9kVG9UcyhxdWVyeVBhcmFtc1NjaGVtYVdpdGhvdXRQYXRoUGFyYW1ldGVycykubm9kZSlcbiAgICAgIDogXCJ7fVwiXG4gIH0sXG4gIGpzb25Cb2R5OiAke1xuICAgIHJvdXRlU3BlYy5qc29uQm9keSA/IHByaW50Tm9kZSh6b2RUb1RzKHJvdXRlU3BlYy5qc29uQm9keSkubm9kZSkgOiBcInt9XCJcbiAgfSxcbiAgY29tbW9uUGFyYW1zOiAke1xuICAgIHJvdXRlU3BlYy5jb21tb25QYXJhbXNcbiAgICAgID8gcHJpbnROb2RlKHpvZFRvVHMocm91dGVTcGVjLmNvbW1vblBhcmFtcykubm9kZSlcbiAgICAgIDogXCJ7fVwiXG4gIH0sXG4gIGZvcm1EYXRhOiAke1xuICAgIHJvdXRlU3BlYy5mb3JtRGF0YSA/IHByaW50Tm9kZSh6b2RUb1RzKHJvdXRlU3BlYy5mb3JtRGF0YSkubm9kZSkgOiBcInt9XCJcbiAgfSxcbiAganNvblJlc3BvbnNlOiAke1xuICAgIHJvdXRlU3BlYy5qc29uUmVzcG9uc2VcbiAgICAgID8gcHJpbnROb2RlKFxuICAgICAgICAgIHpvZFRvVHMoXG4gICAgICAgICAgICBzZXR1cFBhcmFtcy5hZGRPa1N0YXR1cyAmJlxuICAgICAgICAgICAgICByb3V0ZVNwZWMuanNvblJlc3BvbnNlIGluc3RhbmNlb2Ygei5ab2RPYmplY3RcbiAgICAgICAgICAgICAgPyByb3V0ZVNwZWMuanNvblJlc3BvbnNlLmV4dGVuZCh7IG9rOiB6LmJvb2xlYW4oKSB9KVxuICAgICAgICAgICAgICA6IHJvdXRlU3BlYy5qc29uUmVzcG9uc2VcbiAgICAgICAgICApLm5vZGVcbiAgICAgICAgKVxuICAgICAgOiBcInt9XCJcbiAgfVxufWAudHJpbSgpXG4gICAgKVxuICB9XG4gIGNvbnN0IHJvdXRlRGVmU3RyID0gcm91dGVEZWZzLmpvaW4oXCIsXFxuXCIpXG4gIGNvbnN0IG91dHB1dCA9IGF3YWl0IHByZXR0aWVyLmZvcm1hdChcbiAgICBgZXhwb3J0IHR5cGUgUm91dGVzID0ge1xuJHtyb3V0ZURlZlN0cn1cbn1cblxuZXhwb3J0IHR5cGUgUm91dGVSZXNwb25zZTxQYXRoIGV4dGVuZHMga2V5b2YgUm91dGVzPiA9XG4gIFJvdXRlc1tQYXRoXVtcImpzb25SZXNwb25zZVwiXVxuXG5leHBvcnQgdHlwZSBSb3V0ZVJlcXVlc3RCb2R5PFBhdGggZXh0ZW5kcyBrZXlvZiBSb3V0ZXM+ID1cbiAgUm91dGVzW1BhdGhdW1wianNvbkJvZHlcIl0gJiBSb3V0ZXNbUGF0aF1bXCJjb21tb25QYXJhbXNcIl1cblxuZXhwb3J0IHR5cGUgUm91dGVSZXF1ZXN0UGFyYW1zPFBhdGggZXh0ZW5kcyBrZXlvZiBSb3V0ZXM+ID1cbiAgUm91dGVzW1BhdGhdW1wicXVlcnlQYXJhbXNcIl0gJiBSb3V0ZXNbUGF0aF1bXCJjb21tb25QYXJhbXNcIl1cbmAudHJpbSgpLFxuICAgIHsgc2VtaTogZmFsc2UsIHBhcnNlcjogXCJ0eXBlc2NyaXB0XCIgfVxuICApXG5cbiAgaWYgKG9wdHMub3V0cHV0RmlsZSkge1xuICAgIGF3YWl0IGZzLndyaXRlRmlsZShvcHRzLm91dHB1dEZpbGUsIG91dHB1dClcbiAgfVxuXG4gIHJldHVybiBvdXRwdXRcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQSxXQUFPLGVBQWUsU0FBUyxjQUFjLEVBQUUsT0FBTyxLQUFLLENBQUM7QUFFNUQsUUFBTSxXQUFXLENBQUMsUUFBUTtBQUN0QixVQUFJLE9BQU8s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QUFBQSxRQUNFO0FBQUEsVUFDRSxZQUFZLGVBQ1YsVUFBVSx3QkFBd0JELEdBQUUsWUFDbEMsVUFBVSxhQUFhLE9BQU8sRUFBRSxJQUFJQSxHQUFFLFFBQVEsRUFBRSxDQUFDLElBQ2pELFVBQVU7QUFBQSxRQUNoQixFQUFFO0FBQUEsTUFDSixJQUNBO0FBQUEsR0FFTCxLQUFLO0FBQUEsSUFDSjtBQUFBLEVBQ0Y7QUFDQSxRQUFNLGNBQWMsVUFBVSxLQUFLLEtBQUs7QUFDeEMsUUFBTSxTQUFTLE1BQU0sU0FBUztBQUFBLElBQzVCO0FBQUEsRUFDRjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFXQSxLQUFLO0FBQUEsSUFDSCxFQUFFLE1BQU0sT0FBTyxRQUFRLGFBQWE7QUFBQSxFQUN0QztBQUVBLE1BQUksS0FBSyxZQUFZO0FBQ25CLFVBQVMsY0FBVSxLQUFLLFlBQVksTUFBTTtBQUFBLEVBQzVDO0FBRUEsU0FBTztBQUNUOyIsCiAgIm5hbWVzIjogWyJnZW5lcmF0ZVNjaGVtYSIsICJwYXRoIiwgInBhdGgiLCAicGF0aCIsICJwYXRoIiwgIl9hIiwgImZzIiwgInoiLCAiXyJdCn0K
865
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWRlZXBtZXJnZS9janMvaW5kZXguanMiLCAiLi4vLi4vLi4vem9kLW9wZW5hcGkvc3JjL2xpYi96b2Qtb3BlbmFwaS50cyIsICIuLi8uLi8uLi96b2Qtb3BlbmFwaS9zcmMvbGliL3pvZC1leHRlbnNpb25zLnRzIiwgIi4uLy4uLy4uL3pvZC1vcGVuYXBpL3NyYy9pbmRleC50cyIsICIuLi8uLi9zcmMvZ2VuZXJhdG9ycy9pbmRleC50cyIsICIuLi8uLi9zcmMvZ2VuZXJhdG9ycy9nZW5lcmF0ZS1vcGVuYXBpL2luZGV4LnRzIiwgIi4uLy4uL3NyYy9nZW5lcmF0b3JzL2xpYi9wYXJzZS1yb3V0ZXMtaW4tcGFja2FnZS50cyIsICIuLi8uLi9zcmMvZ2VuZXJhdG9ycy9saWIvZGVmYXVsdC1tYXAtZmlsZS1wYXRoLXRvLWh0dHAtcm91dGUudHMiLCAiLi4vLi4vc3JjL2dlbmVyYXRvcnMvZ2VuZXJhdGUtb3BlbmFwaS9lbWJlZC1zY2hlbWEtcmVmZXJlbmNlcy50cyIsICIuLi8uLi9zcmMvZ2VuZXJhdG9ycy9nZW5lcmF0ZS1vcGVuYXBpL2Zlcm4tc2RrLXV0aWxzLnRzIiwgIi4uLy4uL3NyYy9nZW5lcmF0b3JzL2dlbmVyYXRlLXJvdXRlLXR5cGVzL2luZGV4LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbi8vIGlzdGFuYnVsIGlnbm9yZSBuZXh0XG5jb25zdCBpc09iamVjdCA9IChvYmopID0+IHtcbiAgICBpZiAodHlwZW9mIG9iaiA9PT0gXCJvYmplY3RcIiAmJiBvYmogIT09IG51bGwpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBPYmplY3QuZ2V0UHJvdG90eXBlT2YgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgY29uc3QgcHJvdG90eXBlID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKG9iaik7XG4gICAgICAgICAgICByZXR1cm4gcHJvdG90eXBlID09PSBPYmplY3QucHJvdG90eXBlIHx8IHByb3RvdHlwZSA9PT0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iaikgPT09IFwiW29iamVjdCBPYmplY3RdXCI7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn07XG5jb25zdCBtZXJnZSA9ICguLi5vYmplY3RzKSA9PiBvYmplY3RzLnJlZHVjZSgocmVzdWx0LCBjdXJyZW50KSA9PiB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoY3VycmVudCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkFyZ3VtZW50cyBwcm92aWRlZCB0byB0cy1kZWVwbWVyZ2UgbXVzdCBiZSBvYmplY3RzLCBub3QgYXJyYXlzLlwiKTtcbiAgICB9XG4gICAgT2JqZWN0LmtleXMoY3VycmVudCkuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICAgIGlmIChbXCJfX3Byb3RvX19cIiwgXCJjb25zdHJ1Y3RvclwiLCBcInByb3RvdHlwZVwiXS5pbmNsdWRlcyhrZXkpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocmVzdWx0W2tleV0pICYmIEFycmF5LmlzQXJyYXkoY3VycmVudFtrZXldKSkge1xuICAgICAgICAgICAgcmVzdWx0W2tleV0gPSBtZXJnZS5vcHRpb25zLm1lcmdlQXJyYXlzXG4gICAgICAgICAgICAgICAgPyBtZXJnZS5vcHRpb25zLnVuaXF1ZUFycmF5SXRlbXNcbiAgICAgICAgICAgICAgICAgICAgPyBBcnJheS5mcm9tKG5ldyBTZXQocmVzdWx0W2tleV0uY29uY2F0KGN1cnJlbnRba2V5XSkpKVxuICAgICAgICAgICAgICAgICAgICA6IFsuLi5yZXN1bHRba2V5XSwgLi4uY3VycmVudFtrZXldXVxuICAgICAgICAgICAgICAgIDogY3VycmVudFtrZXldO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGlzT2JqZWN0KHJlc3VsdFtrZXldKSAmJiBpc09iamVjdChjdXJyZW50W2tleV0pKSB7XG4gICAgICAgICAgICByZXN1bHRba2V5XSA9IG1lcmdlKHJlc3VsdFtrZXldLCBjdXJyZW50W2tleV0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmVzdWx0W2tleV0gPVxuICAgICAgICAgICAgICAgIGN1cnJlbnRba2V5XSA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgICAgID8gbWVyZ2Uub3B0aW9ucy5hbGxvd1VuZGVmaW5lZE92ZXJyaWRlc1xuICAgICAgICAgICAgICAgICAgICAgICAgPyBjdXJyZW50W2tleV1cbiAgICAgICAgICAgICAgICAgICAgICAgIDogcmVzdWx0W2tleV1cbiAgICAgICAgICAgICAgICAgICAgOiBjdXJyZW50W2tleV07XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gcmVzdWx0O1xufSwge30pO1xuY29uc3QgZGVmYXVsdE9wdGlvbnMgPSB7XG4gICAgYWxsb3dVbmRlZmluZWRPdmVycmlkZXM6IHRydWUsXG4gICAgbWVyZ2VBcnJheXM6IHRydWUsXG4gICAgdW5pcXVlQXJyYXlJdGVtczogdHJ1ZSxcbn07XG5tZXJnZS5vcHRpb25zID0gZGVmYXVsdE9wdGlvbnM7XG5tZXJnZS53aXRoT3B0aW9ucyA9IChvcHRpb25zLCAuLi5vYmplY3RzKSA9PiB7XG4gICAgbWVyZ2Uub3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgZGVmYXVsdE9wdGlvbnMpLCBvcHRpb25zKTtcbiAgICBjb25zdCByZXN1bHQgPSBtZXJnZSguLi5vYmplY3RzKTtcbiAgICBtZXJnZS5vcHRpb25zID0gZGVmYXVsdE9wdGlvbnM7XG4gICAgcmV0dXJuIHJlc3VsdDtcbn07XG5leHBvcnRzLmRlZmF1bHQgPSBtZXJnZTtcbiIsIG51bGwsIG51bGwsIG51bGwsICJleHBvcnQgKiBmcm9tIFwiLi9nZW5lcmF0ZS1vcGVuYXBpXCJcbmV4cG9ydCAqIGZyb20gXCIuL2dlbmVyYXRlLXJvdXRlLXR5cGVzXCJcbiIsICJpbXBvcnQgZnMgZnJvbSBcIm5vZGU6ZnMvcHJvbWlzZXNcIlxuaW1wb3J0IHsgZ2VuZXJhdGVTY2hlbWEgfSBmcm9tIFwiQGFuYXRpbmUvem9kLW9wZW5hcGlcIlxuaW1wb3J0IHtcbiAgT3BlbkFwaUJ1aWxkZXIsXG4gIE9wZXJhdGlvbk9iamVjdCxcbiAgUGFyYW1ldGVyT2JqZWN0LFxufSBmcm9tIFwib3BlbmFwaTMtdHMvb2FzMzFcIlxuaW1wb3J0IHsgU2V0dXBQYXJhbXMgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIlxuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIlxuaW1wb3J0IHsgcGFyc2VSb3V0ZXNJblBhY2thZ2UgfSBmcm9tIFwiLi4vbGliL3BhcnNlLXJvdXRlcy1pbi1wYWNrYWdlXCJcbmltcG9ydCB7IGVtYmVkU2NoZW1hUmVmZXJlbmNlcyB9IGZyb20gXCIuL2VtYmVkLXNjaGVtYS1yZWZlcmVuY2VzXCJcbmltcG9ydCB7IG1hcE1ldGhvZHNUb0Zlcm5TZGtNZXRhZGF0YSB9IGZyb20gXCIuL2Zlcm4tc2RrLXV0aWxzXCJcblxuZnVuY3Rpb24gcmVwbGFjZUZpcnN0Q2hhclRvTG93ZXJjYXNlKHN0cjogc3RyaW5nKSB7XG4gIGlmIChzdHIubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIHN0clxuICB9XG5cbiAgY29uc3QgZmlyc3RDaGFyID0gc3RyLmNoYXJBdCgwKS50b0xvd2VyQ2FzZSgpXG4gIHJldHVybiBmaXJzdENoYXIgKyBzdHIuc2xpY2UoMSlcbn1cblxuZnVuY3Rpb24gdHJhbnNmb3JtUGF0aFRvT3BlcmF0aW9uSWQocGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgcGFydHMgPSBwYXRoXG4gICAgLnJlcGxhY2UoLy0vZywgXCJfXCIpXG4gICAgLnNwbGl0KFwiL1wiKVxuICAgIC5maWx0ZXIoKHBhcnQpID0+IHBhcnQgIT09IFwiXCIpXG4gIGNvbnN0IHRyYW5zZm9ybWVkUGFydHMgPSBwYXJ0cy5tYXAoKHBhcnQpID0+IHtcbiAgICBpZiAocGFydC5zdGFydHNXaXRoKFwiW1wiKSAmJiBwYXJ0LmVuZHNXaXRoKFwiXVwiKSkge1xuICAgICAgLy8gQ29udmVydCBbcGFyYW1dIHRvIEJ5UGFyYW1cbiAgICAgIGNvbnN0IHNlcnZpY2VOYW1lID0gcGFydC5zbGljZSgxLCAtMSlcbiAgICAgIGNvbnN0IHdvcmRzID0gc2VydmljZU5hbWUuc3BsaXQoXCJfXCIpXG4gICAgICBjb25zdCBjYXBpdGFsaXplZFdvcmRzID0gd29yZHMubWFwKFxuICAgICAgICAod29yZCkgPT4gd29yZC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHdvcmQuc2xpY2UoMSlcbiAgICAgIClcbiAgICAgIHJldHVybiBgQnkke2NhcGl0YWxpemVkV29yZHMuam9pbihcIlwiKX1gXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIENvbnZlcnQgYXBpX3BhdGggdG8gQXBpUGF0aFxuICAgICAgY29uc3Qgd29yZHMgPSBwYXJ0LnNwbGl0KFwiX1wiKVxuICAgICAgY29uc3QgY2FwaXRhbGl6ZWRXb3JkcyA9IHdvcmRzLm1hcChcbiAgICAgICAgKHdvcmQpID0+IHdvcmQuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyB3b3JkLnNsaWNlKDEpXG4gICAgICApXG4gICAgICByZXR1cm4gY2FwaXRhbGl6ZWRXb3Jkcy5qb2luKFwiXCIpXG4gICAgfVxuICB9KVxuXG4gIHJldHVybiByZXBsYWNlRmlyc3RDaGFyVG9Mb3dlcmNhc2UodHJhbnNmb3JtZWRQYXJ0cy5qb2luKFwiXCIpKVxufVxuXG5mdW5jdGlvbiBwYXNjYWxDYXNlKGlucHV0OiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCB3b3JkcyA9IGlucHV0LnNwbGl0KFwiIFwiKVxuICBjb25zdCBjYXBpdGFsaXplZFdvcmRzID0gd29yZHMubWFwKFxuICAgICh3b3JkKSA9PiB3b3JkLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgd29yZC5zbGljZSgxKS50b0xvd2VyQ2FzZSgpXG4gIClcbiAgY29uc3QgcGFzY2FsQ2FzZVN0cmluZyA9IGNhcGl0YWxpemVkV29yZHMuam9pbihcIlwiKVxuICByZXR1cm4gcGFzY2FsQ2FzZVN0cmluZ1xufVxuXG5pbnRlcmZhY2UgVGFnT3B0aW9uIHtcbiAgbmFtZTogc3RyaW5nXG4gIGRlc2NyaXB0aW9uOiBzdHJpbmdcbiAgZG9lc1JvdXRlSGF2ZVRhZz86IChyb3V0ZTogc3RyaW5nKSA9PiBib29sZWFuXG59XG5cbmludGVyZmFjZSBHZW5lcmF0ZU9wZW5BUElPcHRzIHtcbiAgcGFja2FnZURpcjogc3RyaW5nXG4gIG91dHB1dEZpbGU/OiBzdHJpbmdcbiAgcGF0aEdsb2I/OiBzdHJpbmdcbiAgdGFncz86IEFycmF5PFRhZ09wdGlvbj5cbiAgYXBpUHJlZml4Pzogc3RyaW5nXG4gIG1hcEZpbGVQYXRoVG9IVFRQUm91dGU/OiAoZmlsZV9wYXRoOiBzdHJpbmcpID0+IHN0cmluZ1xufVxuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gZ2VuZXJhdGVzIGFuIE9wZW5BUEkgc3BlYyBmcm9tIHRoZSBOZXh0LmpzIEFQSSByb3V0ZXMuXG4gKlxuICogWW91IG5vcm1hbGx5IGludm9rZSB0aGlzIHdpdGggYG5leHRhcGkgZ2VuZXJhdGUtb3BlbmFwaWAgaW4gYVxuICogXCJidWlsZDpvcGVuYXBpXCIgcGFja2FnZS5qc29uIHNjcmlwdC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdlbmVyYXRlT3BlbkFQSShvcHRzOiBHZW5lcmF0ZU9wZW5BUElPcHRzKSB7XG4gIGNvbnN0IGNoYWxrID0gKGF3YWl0IGltcG9ydChcImNoYWxrXCIpKS5kZWZhdWx0XG4gIGNvbnN0IHsgb3V0cHV0RmlsZSwgdGFncyA9IFtdIH0gPSBvcHRzXG5cbiAgY29uc3QgZmlsZXBhdGhUb1JvdXRlRm4gPSBhd2FpdCBwYXJzZVJvdXRlc0luUGFja2FnZShvcHRzKVxuXG4gIC8vIFRPRE8gZGV0ZWN0IGlmIHRoZXJlIGFyZSBtdWx0aXBsZSBzZXR1cHMgYW5kIG91dHB1dCBkaWZmZXJlbnQgQVBJc1xuICBjb25zdCB7IHNldHVwUGFyYW1zOiBnbG9iYWxTZXR1cFBhcmFtcyB9ID0gZmlsZXBhdGhUb1JvdXRlRm4udmFsdWVzKCkubmV4dCgpXG4gICAgLnZhbHVlIGFzIHsgc2V0dXBQYXJhbXM6IFNldHVwUGFyYW1zIH1cblxuICBjb25zdCBzZWN1cml0eVNjaGVtZXMgPSBnbG9iYWxTZXR1cFBhcmFtcy5zZWN1cml0eVNjaGVtYXMgPz8ge31cbiAgY29uc3Qgc2VjdXJpdHlPYmplY3RzRm9yQXV0aFR5cGUgPSB7fVxuICBmb3IgKGNvbnN0IGF1dGhOYW1lIG9mIE9iamVjdC5rZXlzKGdsb2JhbFNldHVwUGFyYW1zLmF1dGhNaWRkbGV3YXJlTWFwKSkge1xuICAgIGNvbnN0IG13ID0gZ2xvYmFsU2V0dXBQYXJhbXMuYXV0aE1pZGRsZXdhcmVNYXBbYXV0aE5hbWVdXG4gICAgaWYgKG13LnNlY3VyaXR5U2NoZW1hKSB7XG4gICAgICBzZWN1cml0eVNjaGVtZXNbYXV0aE5hbWVdID0gKG13IGFzIGFueSkuc2VjdXJpdHlTY2hlbWFcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBjaGFsay55ZWxsb3coXG4gICAgICAgICAgYEF1dGhlbnRpY2F0aW9uIG1pZGRsZXdhcmUgXCIke2F1dGhOYW1lfVwiIGhhcyBubyBzZWN1cml0eVNjaGVtYS4gWW91IGNhbiBkZWZpbmUgdGhpcyBvbiB0aGUgZnVuY3Rpb24gKGUuZy4gYWZ0ZXIgdGhlIGV4cG9ydCBkby4uLiBcXG5cXG5teU1pZGRsZXdhcmUuc2VjdXJpdHlTY2hlbWEgPSB7XFxuICB0eXBlOiBcImh0dHBcIlxcbiAgc2NoZW1lOiBcImJlYXJlclwiXFxuICBiZWFyZXJGb3JtYXQ6IFwiSldUXCJcXG4gLy8gb3IgQVBJIFRva2VuIGV0Yy5cXG59XFxuXFxuWW91IGNhbiBhbHNvIGRlZmluZSBcInNlY3VyaXR5T2JqZWN0c1wiIHRoaXMgd2F5LCBpZiB5b3Ugd2FudCB0byBtYWtlIHRoZSBlbmRwb2ludCBzdXBwb3J0IG11bHRpcGxlIG1vZGVzIG9mIGF1dGhlbnRpY2F0aW9uLlxcblxcbmBcbiAgICAgICAgKVxuICAgICAgKVxuICAgIH1cblxuICAgIHNlY3VyaXR5T2JqZWN0c0ZvckF1dGhUeXBlW2F1dGhOYW1lXSA9IChtdyBhcyBhbnkpLnNlY3VyaXR5T2JqZWN0cyB8fCBbXG4gICAgICB7XG4gICAgICAgIFthdXRoTmFtZV06IFtdLFxuICAgICAgfSxcbiAgICBdXG4gIH1cblxuICBjb25zdCBnbG9iYWxTY2hlbWFzID0ge31cbiAgZm9yIChjb25zdCBbc2NoZW1hTmFtZSwgem9kU2NoZW1hXSBvZiBPYmplY3QuZW50cmllcyhcbiAgICBnbG9iYWxTZXR1cFBhcmFtcy5nbG9iYWxTY2hlbWFzID8/IHt9XG4gICkpIHtcbiAgICBnbG9iYWxTY2hlbWFzW3NjaGVtYU5hbWVdID0gZ2VuZXJhdGVTY2hlbWEoem9kU2NoZW1hKVxuICB9XG5cbiAgLy8gQnVpbGQgT3BlbkFQSSBzcGVjXG4gIGNvbnN0IGJ1aWxkZXIgPSBPcGVuQXBpQnVpbGRlci5jcmVhdGUoe1xuICAgIG9wZW5hcGk6IFwiMy4wLjBcIixcbiAgICBpbmZvOiB7XG4gICAgICB0aXRsZTogZ2xvYmFsU2V0dXBQYXJhbXMuYXBpTmFtZSxcbiAgICAgIHZlcnNpb246IFwiMS4wLjBcIixcbiAgICB9LFxuICAgIHNlcnZlcnM6IFtcbiAgICAgIHtcbiAgICAgICAgdXJsOiBnbG9iYWxTZXR1cFBhcmFtcy5wcm9kdWN0aW9uU2VydmVyVXJsIHx8IFwiaHR0cHM6Ly9leGFtcGxlLmNvbVwiLFxuICAgICAgfSxcbiAgICBdLFxuICAgIHRhZ3M6IHRhZ3MubWFwKCh0YWcpID0+ICh7IG5hbWU6IHRhZy5uYW1lLCBkZXNjcmlwdGlvbjogdGFnLmRlc2NyaXB0aW9uIH0pKSxcbiAgICBwYXRoczoge30sXG4gICAgY29tcG9uZW50czoge1xuICAgICAgc2VjdXJpdHlTY2hlbWVzLFxuICAgICAgc2NoZW1hczogZ2xvYmFsU2NoZW1hcyxcbiAgICB9LFxuICB9KVxuXG4gIGZvciAoY29uc3QgW1xuICAgIGZpbGVfcGF0aCxcbiAgICB7IHNldHVwUGFyYW1zLCByb3V0ZVNwZWMsIHJvdXRlOiByb3V0ZVBhdGggfSxcbiAgXSBvZiBmaWxlcGF0aFRvUm91dGVGbikge1xuICAgIGNvbnN0IGlzUG9zdE9yUHV0T3JQYXRjaCA9IFtcIlBPU1RcIiwgXCJQVVRcIiwgXCJQQVRDSFwiXS5zb21lKChtZXRob2QpID0+XG4gICAgICByb3V0ZVNwZWMubWV0aG9kcy5pbmNsdWRlcyhtZXRob2QpXG4gICAgKVxuICAgIC8vIFRPRE86IHN1cHBvcnQgbXVsdGlwYXJ0L2Zvcm0tZGF0YVxuXG4gICAgLy8gaGFuZGxlIGJvZHlcbiAgICBsZXQgYm9keV90b19nZW5lcmF0ZV9zY2hlbWFcbiAgICBpZiAoaXNQb3N0T3JQdXRPclBhdGNoKSB7XG4gICAgICBib2R5X3RvX2dlbmVyYXRlX3NjaGVtYSA9IHJvdXRlU3BlYy5qc29uQm9keSA/PyByb3V0ZVNwZWMuY29tbW9uUGFyYW1zXG5cbiAgICAgIGlmIChyb3V0ZVNwZWMuanNvbkJvZHkgJiYgcm91dGVTcGVjLmNvbW1vblBhcmFtcykge1xuICAgICAgICBib2R5X3RvX2dlbmVyYXRlX3NjaGVtYSA9IHJvdXRlU3BlYy5qc29uQm9keS5tZXJnZShcbiAgICAgICAgICByb3V0ZVNwZWMuY29tbW9uUGFyYW1zXG4gICAgICAgIClcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgYm9keV90b19nZW5lcmF0ZV9zY2hlbWEgPSByb3V0ZVNwZWMuanNvbkJvZHlcbiAgICB9XG5cbiAgICAvLyBoYW5kbGUgcXVlcnlcbiAgICBsZXQgcXVlcnlfdG9fZ2VuZXJhdGVfc2NoZW1hXG4gICAgaWYgKGlzUG9zdE9yUHV0T3JQYXRjaCkge1xuICAgICAgcXVlcnlfdG9fZ2VuZXJhdGVfc2NoZW1hID0gcm91dGVTcGVjLnF1ZXJ5UGFyYW1zXG4gICAgfSBlbHNlIHtcbiAgICAgIHF1ZXJ5X3RvX2dlbmVyYXRlX3NjaGVtYSA9IHJvdXRlU3BlYy5xdWVyeVBhcmFtcyA/PyByb3V0ZVNwZWMuY29tbW9uUGFyYW1zXG5cbiAgICAgIGlmIChyb3V0ZVNwZWMucXVlcnlQYXJhbXMgJiYgcm91dGVTcGVjLmNvbW1vblBhcmFtcykge1xuICAgICAgICBxdWVyeV90b19nZW5lcmF0ZV9zY2hlbWEgPSByb3V0ZVNwZWMucXVlcnlQYXJhbXMubWVyZ2UoXG4gICAgICAgICAgcm91dGVTcGVjLmNvbW1vblBhcmFtc1xuICAgICAgICApXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gREVMRVRFIGFuZCBHRVQgY2Fubm90IGhhdmUgYSBib2R5XG4gICAgbGV0IG1ldGhvZHMgPSByb3V0ZVNwZWMubWV0aG9kc1xuXG4gICAgaWYgKHJvdXRlU3BlYy5tZXRob2RzLmluY2x1ZGVzKFwiREVMRVRFXCIpICYmIGJvZHlfdG9fZ2VuZXJhdGVfc2NoZW1hKSB7XG4gICAgICBtZXRob2RzID0gbWV0aG9kcy5maWx0ZXIoKG0pID0+IG0gIT09IFwiREVMRVRFXCIpXG4gICAgfVxuXG4gICAgaWYgKHJvdXRlU3BlYy5tZXRob2RzLmluY2x1ZGVzKFwiR0VUXCIpICYmIGJvZHlfdG9fZ2VuZXJhdGVfc2NoZW1hKSB7XG4gICAgICBtZXRob2RzID0gbWV0aG9kcy5maWx0ZXIoKG0pID0+IG0gIT09IFwiR0VUXCIpXG4gICAgfVxuXG4gICAgaWYgKG1ldGhvZHMubGVuZ3RoID09PSAwKSB7XG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIGNoYWxrLnllbGxvdyhgU2tpcHBpbmcgcm91dGUgJHtyb3V0ZVBhdGh9IGJlY2F1c2UgaXQgaGFzIG5vIG1ldGhvZHMuYClcbiAgICAgIClcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuXG4gICAgY29uc3Qgcm91dGU6IE9wZXJhdGlvbk9iamVjdCA9IHtcbiAgICAgIC4uLnJvdXRlU3BlYy5vcGVuQXBpTWV0YWRhdGEsXG4gICAgICBzdW1tYXJ5OiByb3V0ZVBhdGgsXG4gICAgICByZXNwb25zZXM6IHtcbiAgICAgICAgMjAwOiB7XG4gICAgICAgICAgZGVzY3JpcHRpb246IFwiT0tcIixcbiAgICAgICAgfSxcbiAgICAgICAgNDAwOiB7XG4gICAgICAgICAgZGVzY3JpcHRpb246IFwiQmFkIFJlcXVlc3RcIixcbiAgICAgICAgfSxcbiAgICAgICAgNDAxOiB7XG4gICAgICAgICAgZGVzY3JpcHRpb246IFwiVW5hdXRob3JpemVkXCIsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgc2VjdXJpdHk6IEFycmF5LmlzQXJyYXkocm91dGVTcGVjLmF1dGgpXG4gICAgICAgID8gcm91dGVTcGVjLmF1dGhcbiAgICAgICAgICAgIC5tYXAoKGF1dGhUeXBlKSA9PiBzZWN1cml0eU9iamVjdHNGb3JBdXRoVHlwZVthdXRoVHlwZV0pXG4gICAgICAgICAgICAuZmxhdCgpXG4gICAgICAgIDogc2VjdXJpdHlPYmplY3RzRm9yQXV0aFR5cGVbcm91dGVTcGVjLmF1dGhdLFxuICAgIH1cblxuICAgIGlmIChib2R5X3RvX2dlbmVyYXRlX3NjaGVtYSkge1xuICAgICAgcm91dGUucmVxdWVzdEJvZHkgPSB7XG4gICAgICAgIGNvbnRlbnQ6IHtcbiAgICAgICAgICBcImFwcGxpY2F0aW9uL2pzb25cIjoge1xuICAgICAgICAgICAgc2NoZW1hOiBnZW5lcmF0ZVNjaGVtYShib2R5X3RvX2dlbmVyYXRlX3NjaGVtYSBhcyBhbnkpLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHF1ZXJ5X3RvX2dlbmVyYXRlX3NjaGVtYSkge1xuICAgICAgY29uc3Qgc2NoZW1hID0gZ2VuZXJhdGVTY2hlbWEocXVlcnlfdG9fZ2VuZXJhdGVfc2NoZW1hIGFzIGFueSlcbiAgICAgIGlmIChzY2hlbWEucHJvcGVydGllcykge1xuICAgICAgICBjb25zdCBwYXJhbWV0ZXJzOiBQYXJhbWV0ZXJPYmplY3RbXSA9IE9iamVjdC5rZXlzKFxuICAgICAgICAgIHNjaGVtYS5wcm9wZXJ0aWVzIGFzIGFueVxuICAgICAgICApLm1hcCgobmFtZSkgPT4ge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgaW46IFwicXVlcnlcIixcbiAgICAgICAgICAgIHNjaGVtYTogc2NoZW1hLnByb3BlcnRpZXMhW25hbWVdLFxuICAgICAgICAgICAgcmVxdWlyZWQ6IHNjaGVtYS5yZXF1aXJlZD8uaW5jbHVkZXMobmFtZSksXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuXG4gICAgICAgIHJvdXRlLnBhcmFtZXRlcnMgPSBwYXJhbWV0ZXJzXG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgeyBqc29uUmVzcG9uc2UgfSA9IHJvdXRlU3BlY1xuICAgIGNvbnN0IHsgYWRkT2tTdGF0dXMgPSB0cnVlIH0gPSBzZXR1cFBhcmFtc1xuXG4gICAgaWYgKGpzb25SZXNwb25zZSkge1xuICAgICAgaWYgKFxuICAgICAgICAhanNvblJlc3BvbnNlLl9kZWYgfHxcbiAgICAgICAgIWpzb25SZXNwb25zZS5fZGVmLnR5cGVOYW1lIHx8XG4gICAgICAgIGpzb25SZXNwb25zZS5fZGVmLnR5cGVOYW1lICE9PSBcIlpvZE9iamVjdFwiXG4gICAgICApIHtcbiAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgIGNoYWxrLnllbGxvdyhcbiAgICAgICAgICAgIGBTa2lwcGluZyByb3V0ZSAke3JvdXRlUGF0aH0gYmVjYXVzZSB0aGUgcmVzcG9uc2UgaXMgbm90IGEgWm9kT2JqZWN0LmBcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgY29uc3QgcmVzcG9uc2VTY2hlbWEgPSBnZW5lcmF0ZVNjaGVtYShcbiAgICAgICAgYWRkT2tTdGF0dXMgJiYganNvblJlc3BvbnNlIGluc3RhbmNlb2Ygei5ab2RPYmplY3RcbiAgICAgICAgICA/IGpzb25SZXNwb25zZS5leHRlbmQoeyBvazogei5ib29sZWFuKCkgfSlcbiAgICAgICAgICA6IGpzb25SZXNwb25zZVxuICAgICAgKVxuXG4gICAgICBjb25zdCBzY2hlbWFXaXRoUmVmZXJlbmNlcyA9IGVtYmVkU2NoZW1hUmVmZXJlbmNlcyhcbiAgICAgICAgcmVzcG9uc2VTY2hlbWEsXG4gICAgICAgIGdsb2JhbFNjaGVtYXNcbiAgICAgIClcblxuICAgICAgLy8gVE9ETzogd2Ugc2hvdWxkIG5vdCBoYXJkY29kZSAyMDAgaGVyZVxuICAgICAgcm91dGUucmVzcG9uc2VzWzIwMF0uY29udGVudCA9IHtcbiAgICAgICAgXCJhcHBsaWNhdGlvbi9qc29uXCI6IHtcbiAgICAgICAgICBzY2hlbWE6IHNjaGVtYVdpdGhSZWZlcmVuY2VzLFxuICAgICAgICB9LFxuICAgICAgfVxuICAgIH1cblxuICAgIHJvdXRlLnRhZ3MgPSBbXVxuICAgIGZvciAoY29uc3QgdGFnIG9mIHRhZ3MpIHtcbiAgICAgIGlmICh0YWcuZG9lc1JvdXRlSGF2ZVRhZyAmJiB0YWcuZG9lc1JvdXRlSGF2ZVRhZyhyb3V0ZS5zdW1tYXJ5IHx8IFwiXCIpKSB7XG4gICAgICAgIHJvdXRlLnRhZ3MucHVzaCh0YWcubmFtZSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBtZXRob2RzTWFwcGVkVG9GZXJuU2RrTWV0YWRhdGEgPSBhd2FpdCBtYXBNZXRob2RzVG9GZXJuU2RrTWV0YWRhdGEoe1xuICAgICAgbWV0aG9kcyxcbiAgICAgIHBhdGg6IHJvdXRlUGF0aCxcbiAgICAgIHNka1JldHVyblZhbHVlOiByb3V0ZVNwZWMuc2RrUmV0dXJuVmFsdWUsXG4gICAgfSlcblxuICAgIC8vIFNvbWUgcm91dGVzIGFjY2VwdCBtdWx0aXBsZSBtZXRob2RzXG4gICAgYnVpbGRlci5hZGRQYXRoKHJvdXRlUGF0aCwge1xuICAgICAgLi4ubWV0aG9kc1xuICAgICAgICAubWFwKChtZXRob2QpID0+ICh7XG4gICAgICAgICAgW21ldGhvZC50b0xvd2VyQ2FzZSgpXToge1xuICAgICAgICAgICAgLi4ubWV0aG9kc01hcHBlZFRvRmVyblNka01ldGFkYXRhW21ldGhvZF0sXG4gICAgICAgICAgICAuLi5yb3V0ZSxcbiAgICAgICAgICAgIG9wZXJhdGlvbklkOiBgJHt0cmFuc2Zvcm1QYXRoVG9PcGVyYXRpb25JZChyb3V0ZVBhdGgpfSR7cGFzY2FsQ2FzZShcbiAgICAgICAgICAgICAgbWV0aG9kXG4gICAgICAgICAgICApfWAsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSkpXG4gICAgICAgIC5yZWR1Y2VSaWdodCgoYWNjLCBjdXIpID0+ICh7IC4uLmFjYywgLi4uY3VyIH0pLCB7fSksXG4gICAgfSlcbiAgfVxuXG4gIGlmIChvdXRwdXRGaWxlKSB7XG4gICAgYXdhaXQgZnMud3JpdGVGaWxlKG91dHB1dEZpbGUsIGJ1aWxkZXIuZ2V0U3BlY0FzSnNvbigpKVxuICB9XG5cbiAgcmV0dXJuIGJ1aWxkZXIuZ2V0U3BlY0FzSnNvbigpXG59XG4iLCAiaW1wb3J0IHBhdGggZnJvbSBcIm5vZGU6cGF0aFwiXG5pbXBvcnQgeyBSb3V0ZVNwZWMsIFNldHVwUGFyYW1zIH0gZnJvbSBcIi4uLy4uL3R5cGVzXCJcbmltcG9ydCB7IGRlZmF1bHRNYXBGaWxlUGF0aFRvSFRUUFJvdXRlIH0gZnJvbSBcIi4vZGVmYXVsdC1tYXAtZmlsZS1wYXRoLXRvLWh0dHAtcm91dGVcIlxuXG5leHBvcnQgaW50ZXJmYWNlIFJvdXRlSW5mbyB7XG4gIHNldHVwUGFyYW1zOiBTZXR1cFBhcmFtc1xuICByb3V0ZVNwZWM6IFJvdXRlU3BlY1xuICByb3V0ZUZuOiBGdW5jdGlvblxuICByb3V0ZTogc3RyaW5nXG59XG5cbmV4cG9ydCBjb25zdCBwYXJzZVJvdXRlc0luUGFja2FnZSA9IGFzeW5jIChvcHRzOiB7XG4gIHBhY2thZ2VEaXI6IHN0cmluZ1xuICBwYXRoR2xvYj86IHN0cmluZ1xuICBhcGlQcmVmaXg/OiBzdHJpbmdcbiAgbWFwRmlsZVBhdGhUb0hUVFBSb3V0ZT86IChmaWxlX3BhdGg6IHN0cmluZykgPT4gc3RyaW5nXG4gIGluY2x1ZGVPcGVuQXBpRXhjbHVkZWRSb3V0ZXM/OiBib29sZWFuXG59KTogUHJvbWlzZTxNYXA8c3RyaW5nLCBSb3V0ZUluZm8+PiA9PiB7XG4gIGNvbnN0IGNoYWxrID0gKGF3YWl0IGltcG9ydChcImNoYWxrXCIpKS5kZWZhdWx0XG4gIGNvbnN0IGdsb2JieSA9IChhd2FpdCBpbXBvcnQoXCJnbG9iYnlcIikpLmdsb2JieVxuICBjb25zdCB7XG4gICAgcGFja2FnZURpcixcbiAgICBwYXRoR2xvYiA9IFwiL3BhZ2VzL2FwaS8qKi8qLnRzXCIsXG4gICAgbWFwRmlsZVBhdGhUb0hUVFBSb3V0ZSA9IGRlZmF1bHRNYXBGaWxlUGF0aFRvSFRUUFJvdXRlKG9wdHMuYXBpUHJlZml4KSxcbiAgfSA9IG9wdHNcbiAgLy8gTG9hZCBhbGwgcm91dGUgc3BlY3NcbiAgY29uc3QgZnVsbFBhdGhHbG9iID0gcGF0aC5wb3NpeC5qb2luKHBhY2thZ2VEaXIsIHBhdGhHbG9iKVxuICBjb25zb2xlLmxvZyhgc2VhcmNoaW5nIFwiJHtmdWxsUGF0aEdsb2J9XCIuLi5gKVxuICBjb25zdCBmaWxlcGF0aHMgPSBhd2FpdCBnbG9iYnkoYCR7ZnVsbFBhdGhHbG9ifWApXG4gIGNvbnNvbGUubG9nKGBmb3VuZCAke2ZpbGVwYXRocy5sZW5ndGh9IGZpbGVzYClcbiAgaWYgKGZpbGVwYXRocy5sZW5ndGggPT09IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIGZpbGVzIGZvdW5kIGF0IFwiJHtmdWxsUGF0aEdsb2J9XCJgKVxuICB9XG4gIGNvbnN0IGZpbGVwYXRoVG9Sb3V0ZUZuID0gbmV3IE1hcDxzdHJpbmcsIFJvdXRlSW5mbz4oKVxuXG4gIGF3YWl0IFByb21pc2UuYWxsKFxuICAgIGZpbGVwYXRocy5tYXAoYXN5bmMgKHApID0+IHtcbiAgICAgIGNvbnN0IHsgZGVmYXVsdDogcm91dGVGbiB9ID0gYXdhaXQgcmVxdWlyZShwYXRoLnJlc29sdmUocCkpXG5cbiAgICAgIGlmIChyb3V0ZUZuKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICByb3V0ZUZuLl9yb3V0ZVNwZWM/LmV4Y2x1ZGVGcm9tT3BlbkFwaSAmJlxuICAgICAgICAgICFvcHRzLmluY2x1ZGVPcGVuQXBpRXhjbHVkZWRSb3V0ZXNcbiAgICAgICAgKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICBjaGFsay5ncmF5KFxuICAgICAgICAgICAgICBgSWdub3JpbmcgXCIke3B9IGJlY2F1c2UgaXQgd2FzIGV4Y2x1ZGVkIGZyb20gT3BlbkFQSSBnZW5lcmF0aW9uXCJgXG4gICAgICAgICAgICApXG4gICAgICAgICAgKVxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICAgIGlmICghcm91dGVGbi5fc2V0dXBQYXJhbXMpIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgICBjaGFsay55ZWxsb3coXG4gICAgICAgICAgICAgIGBJZ25vcmluZyBcIiR7cH1cIiBiZWNhdXNlIGl0IHdhc24ndCBjcmVhdGVkIHdpdGggd2l0aFJvdXRlU3BlY2BcbiAgICAgICAgICAgIClcbiAgICAgICAgICApXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgICAgZmlsZXBhdGhUb1JvdXRlRm4uc2V0KHAsIHtcbiAgICAgICAgICBzZXR1cFBhcmFtczogcm91dGVGbi5fc2V0dXBQYXJhbXMsXG4gICAgICAgICAgcm91dGVTcGVjOiByb3V0ZUZuLl9yb3V0ZVNwZWMsXG4gICAgICAgICAgcm91dGU6IG1hcEZpbGVQYXRoVG9IVFRQUm91dGUocCksXG4gICAgICAgICAgcm91dGVGbixcbiAgICAgICAgfSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUud2FybihjaGFsay55ZWxsb3coYENvdWxkbid0IGZpbmQgcm91dGUgJHtwfWApKVxuICAgICAgfVxuICAgIH0pXG4gIClcblxuICByZXR1cm4gZmlsZXBhdGhUb1JvdXRlRm5cbn1cbiIsICJpbXBvcnQgcGF0aCBmcm9tIFwicGF0aFwiXG5cbmV4cG9ydCBjb25zdCBkZWZhdWx0TWFwRmlsZVBhdGhUb0hUVFBSb3V0ZSA9XG4gIChhcGlfcHJlZml4OiBzdHJpbmcgPSBcIi9hcGlcIikgPT5cbiAgKGZpbGVfcGF0aDogc3RyaW5nKSA9PiB7XG4gICAgY29uc3Qgcm91dGUgPSBmaWxlX3BhdGhcbiAgICAgIC8vIHJlcGxhY2UgLi8gaWYgaXQgc3RhcnRzIHdpdGggLi9cbiAgICAgIC5yZXBsYWNlKC9eXFwuXFwvLywgXCIvXCIpXG4gICAgICAvLyByZXBsYWNlIHN0YXJ0aW5nIC9cbiAgICAgIC5yZXBsYWNlKC9eXFwvLywgXCJcIilcbiAgICAgIC8vIHJlcGxhY2UgL3NyYyBpZiBpdCBzdGFydHMgd2l0aCAvc3JjXG4gICAgICAucmVwbGFjZSgvXnNyY1xcLy8sIFwiXCIpXG4gICAgICAvLyByZXBsYWNlIC9wYWdlcyBpZiBpdCBzdGFydHMgd2l0aCAvcGFnZXNcbiAgICAgIC5yZXBsYWNlKC9ecGFnZXNcXC8vLCBcIlwiKVxuICAgICAgLy8gcmVwbGFjZSAvYXBpIGlmIGl0IHN0YXJ0cyB3aXRoIC9hcGlcbiAgICAgIC5yZXBsYWNlKC9eYXBpXFwvLywgXCJcIilcbiAgICAgIC8vIHJlcGxhY2UgLnRzIGlmIGl0IGVuZHMgd2l0aCAudHNcbiAgICAgIC5yZXBsYWNlKC9cXC50cyQvLCBcIlwiKVxuICAgICAgLy8gcmVtb3ZlIHB1YmxpYyByZWZlcmVuY2VcbiAgICAgIC5yZXBsYWNlKFwicHVibGljXCIsIFwiXCIpXG4gICAgICAvLyByZXBsYWNlIGluZGV4IGlmIGl0IGVuZHMgd2l0aCBpbmRleFxuICAgICAgLnJlcGxhY2UoL1xcL1xcaW5kZXgoPyEuKS8sIFwiXCIpXG5cbiAgICByZXR1cm4gcGF0aC5qb2luKGFwaV9wcmVmaXgsIHJvdXRlKVxuICB9XG4iLCAiaW1wb3J0IF8gZnJvbSBcImxvZGFzaFwiXG5cbmZ1bmN0aW9uIGZpbmRLZXlJbk9iaihvYmo6IGFueSwgdmFsdWU6IGFueSk6IHN0cmluZyB8IG51bGwge1xuICBsZXQgcmVzdWx0S2V5OiBzdHJpbmcgfCBudWxsID0gbnVsbFxuICBfLmZvck93bihvYmosICh2LCBrKSA9PiB7XG4gICAgaWYgKF8uaXNPYmplY3QodikgJiYgXy5pc01hdGNoKHYsIHZhbHVlKSkge1xuICAgICAgcmVzdWx0S2V5ID0ga1xuICAgICAgLy8gU3RvcCB0aGUgaXRlcmF0aW9uXG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gIH0pXG4gIHJldHVybiByZXN1bHRLZXlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVtYmVkU2NoZW1hUmVmZXJlbmNlcyhvYmoxOiBhbnksIG9iajI6IGFueSk6IGFueSB7XG4gIHJldHVybiBfLnRyYW5zZm9ybShvYmoxLCAocmVzdWx0LCB2YWx1ZSwga2V5KSA9PiB7XG4gICAgaWYgKF8uaXNPYmplY3QodmFsdWUpKSB7XG4gICAgICBjb25zdCBtYXRjaGluZ0tleSA9IGZpbmRLZXlJbk9iaihvYmoyLCB2YWx1ZSlcbiAgICAgIGlmIChtYXRjaGluZ0tleSkge1xuICAgICAgICByZXN1bHRba2V5XSA9IHtcbiAgICAgICAgICAkcmVmOiBgIy9jb21wb25lbnRzL3NjaGVtYXMvJHttYXRjaGluZ0tleX1gLFxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXN1bHRba2V5XSA9IGVtYmVkU2NoZW1hUmVmZXJlbmNlcyh2YWx1ZSwgb2JqMilcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0W2tleV0gPSB2YWx1ZVxuICAgIH1cbiAgfSlcbn1cbiIsICJpbXBvcnQgeyBSb3V0ZVNwZWMgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIlxuXG5mdW5jdGlvbiB0cmFuc2Zvcm1QYXRoVG9GZXJuU2RrTWV0aG9kTmFtZShwYXRoOiBzdHJpbmcpIHtcbiAgY29uc3QgcGFydHMgPSBwYXRoLnNwbGl0KFwiL1wiKS5maWx0ZXIoKHBhcnQpID0+IHBhcnQgIT09IFwiXCIpXG4gIGNvbnN0IGxhc3RQYXJ0ID0gcGFydHNbcGFydHMubGVuZ3RoIC0gMV1cbiAgaWYgKGxhc3RQYXJ0LnN0YXJ0c1dpdGgoXCJbXCIpICYmIGxhc3RQYXJ0LmVuZHNXaXRoKFwiXVwiKSkge1xuICAgIC8vIENvbnZlcnQgW3BhcmFtXSB0byBieV9wYXJhbVxuICAgIGNvbnN0IHBhcmFtID0gbGFzdFBhcnQuc2xpY2UoMSwgLTEpXG4gICAgcmV0dXJuIGBieV8ke3BhcmFtfWBcbiAgfVxuXG4gIHJldHVybiBsYXN0UGFydFxufVxuXG4vLyBmZXJuIGRvY3M6IGh0dHBzOi8vYnVpbGR3aXRoZmVybi5jb20vZG9jcy9zcGVjL2V4dGVuc2lvbnNcbmZ1bmN0aW9uIHRyYW5zZm9ybVBhdGhUb0Zlcm5TZGtHcm91cE5hbWUocGF0aDogc3RyaW5nKSB7XG4gIGNvbnN0IHBhcnRzID0gcGF0aC5zcGxpdChcIi9cIikuZmlsdGVyKChwYXJ0KSA9PiBwYXJ0ICE9PSBcIlwiKVxuICByZXR1cm4gcGFydHMuc2xpY2UoMCwgcGFydHMubGVuZ3RoIC0gMSlcbn1cblxuZnVuY3Rpb24gZ2V0RmVyblNka01ldGFkYXRhKFxuICBwYXRoOiBzdHJpbmcsXG4gIHNka1JldHVyblZhbHVlPzogc3RyaW5nIHwgc3RyaW5nW11cbik6XG4gIHwge1xuICAgICAgXCJ4LWZlcm4taWdub3JlXCI6IHRydWVcbiAgICB9XG4gIHwge1xuICAgICAgXCJ4LWZlcm4tc2RrLWdyb3VwLW5hbWVcIjogc3RyaW5nW11cbiAgICAgIFwieC1mZXJuLXNkay1tZXRob2QtbmFtZVwiOiBzdHJpbmdcbiAgICB9IHtcbiAgaWYgKHBhdGguc3BsaXQoXCIvXCIpLmZpbHRlcigocGFydCkgPT4gcGFydCAhPT0gXCJcIikubGVuZ3RoID09PSAxKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIFwieC1mZXJuLWlnbm9yZVwiOiB0cnVlLFxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgXCJ4LWZlcm4tc2RrLWdyb3VwLW5hbWVcIjogdHJhbnNmb3JtUGF0aFRvRmVyblNka0dyb3VwTmFtZShwYXRoKSxcbiAgICBcIngtZmVybi1zZGstbWV0aG9kLW5hbWVcIjogdHJhbnNmb3JtUGF0aFRvRmVyblNka01ldGhvZE5hbWUocGF0aCksXG4gICAgLi4uKHNka1JldHVyblZhbHVlXG4gICAgICA/IHtcbiAgICAgICAgICBcIngtZmVybi1zZGstcmV0dXJuLXZhbHVlXCI6IHNka1JldHVyblZhbHVlLFxuICAgICAgICB9XG4gICAgICA6IHt9KSxcbiAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbWFwTWV0aG9kc1RvRmVyblNka01ldGFkYXRhKHtcbiAgbWV0aG9kcyxcbiAgcGF0aCxcbiAgc2RrUmV0dXJuVmFsdWUsXG59OiB7XG4gIG1ldGhvZHM6IFJvdXRlU3BlY1tcIm1ldGhvZHNcIl1cbiAgcGF0aDogc3RyaW5nXG4gIHNka1JldHVyblZhbHVlPzogc3RyaW5nIHwgc3RyaW5nW11cbn0pIHtcbiAgY29uc3QgZmVyblNka01ldGFkYXRhID0gZ2V0RmVyblNka01ldGFkYXRhKHBhdGgsIHNka1JldHVyblZhbHVlKVxuICBpZiAobWV0aG9kcy5sZW5ndGggPT09IDEpIHtcbiAgICByZXR1cm4ge1xuICAgICAgW21ldGhvZHNbMF1dOiBmZXJuU2RrTWV0YWRhdGEsXG4gICAgfVxuICB9XG5cbiAgY29uc3QgbWFwcGVkTWV0aG9kcyA9IHt9XG5cbiAgbWV0aG9kcy5mb3JFYWNoKChtZXRob2QpID0+IHtcbiAgICBpZiAobWV0aG9kID09PSBcIlBPU1RcIikge1xuICAgICAgbWFwcGVkTWV0aG9kc1ttZXRob2RdID0gZmVyblNka01ldGFkYXRhXG4gICAgfSBlbHNlIHtcbiAgICAgIG1hcHBlZE1ldGhvZHNbbWV0aG9kXSA9IHtcbiAgICAgICAgXCJ4LWZlcm4taWdub3JlXCI6IHRydWUsXG4gICAgICB9XG4gICAgfVxuICB9KVxuXG4gIHJldHVybiBtYXBwZWRNZXRob2RzXG59XG4iLCAiaW1wb3J0ICogYXMgZnMgZnJvbSBcIm5vZGU6ZnMvcHJvbWlzZXNcIlxuaW1wb3J0IHsgcGFyc2VSb3V0ZXNJblBhY2thZ2UgfSBmcm9tIFwiLi4vbGliL3BhcnNlLXJvdXRlcy1pbi1wYWNrYWdlXCJcbmltcG9ydCB7IHpvZFRvVHMsIHByaW50Tm9kZSB9IGZyb20gXCJ6b2QtdG8tdHNcIlxuaW1wb3J0IHByZXR0aWVyIGZyb20gXCJwcmV0dGllclwiXG5pbXBvcnQgeyB6LCBab2RFZmZlY3RzLCBab2RPcHRpb25hbCB9IGZyb20gXCJ6b2RcIlxuXG5pbnRlcmZhY2UgR2VuZXJhdGVSb3V0ZVR5cGVzT3B0cyB7XG4gIHBhY2thZ2VEaXI6IHN0cmluZ1xuICBvdXRwdXRGaWxlPzogc3RyaW5nXG4gIHBhdGhHbG9iPzogc3RyaW5nXG4gIGFwaVByZWZpeD86IHN0cmluZ1xuICBtYXBGaWxlUGF0aFRvSFRUUFJvdXRlPzogKGZpbGVfcGF0aDogc3RyaW5nKSA9PiBzdHJpbmdcbiAgLyoqXG4gICAqIElmIHByb3ZpZGVkLCBvbmx5IHJvdXRlcyB0aGF0IHJldHVybiB0cnVlIHdpbGwgYmUgaW5jbHVkZWQgaW4gdGhlIGdlbmVyYXRlZCB0eXBlcy5cbiAgICovXG4gIGZpbHRlclJvdXRlcz86IChyb3V0ZTogc3RyaW5nKSA9PiBib29sZWFuXG4gIC8qKlxuICAgKiBCeSBkZWZhdWx0LCByb3V0ZXMgdGhhdCBoYXZlIGBleGNsdWRlRnJvbU9wZW5BcGlgIHNldCB0byB0cnVlIHdpbGwgYmUgZXhjbHVkZWQgZnJvbSB0aGUgZ2VuZXJhdGVkIHR5cGVzLlxuICAgKiBTZXQgdGhpcyB0byB0cnVlIHRvIGluY2x1ZGUgdGhlbS5cbiAgICovXG4gIGluY2x1ZGVPcGVuQXBpRXhjbHVkZWRSb3V0ZXM/OiBib29sZWFuXG59XG5cbmV4cG9ydCBjb25zdCBnZW5lcmF0ZVJvdXRlVHlwZXMgPSBhc3luYyAob3B0czogR2VuZXJhdGVSb3V0ZVR5cGVzT3B0cykgPT4ge1xuICBjb25zdCBmaWxlcGF0aFRvUm91dGUgPSBhd2FpdCBwYXJzZVJvdXRlc0luUGFja2FnZShvcHRzKVxuXG4gIGNvbnN0IHNvcnRlZFJvdXRlcyA9IEFycmF5LmZyb20oZmlsZXBhdGhUb1JvdXRlLmVudHJpZXMoKSkuc29ydCgoYSwgYikgPT5cbiAgICBhWzFdLnJvdXRlLmxvY2FsZUNvbXBhcmUoYlsxXS5yb3V0ZSlcbiAgKVxuICBjb25zdCBmaWx0ZXJlZFJvdXRlcyA9IHNvcnRlZFJvdXRlcy5maWx0ZXIoXG4gICAgKFtfLCB7IHJvdXRlIH1dKSA9PiAhb3B0cy5maWx0ZXJSb3V0ZXMgfHwgb3B0cy5maWx0ZXJSb3V0ZXMocm91dGUpXG4gIClcblxuICAvLyBUT0RPIHdoZW4gbGVzcyBsYXp5LCB1c2UgdHMtbW9ycGggZm9yIGJldHRlciBnZW5lcmF0aW9uXG4gIGNvbnN0IHJvdXRlRGVmczogc3RyaW5nW10gPSBbXVxuICBmb3IgKGNvbnN0IFtfLCB7IHJvdXRlLCByb3V0ZVNwZWMsIHNldHVwUGFyYW1zIH1dIG9mIGZpbHRlcmVkUm91dGVzKSB7XG4gICAgY29uc3QgcXVlcnlLZXlzID0gT2JqZWN0LmtleXMocm91dGVTcGVjLnF1ZXJ5UGFyYW1zPy5zaGFwZSA/PyB7fSlcbiAgICBjb25zdCBwYXRoUGFyYW1ldGVycyA9IHF1ZXJ5S2V5cy5maWx0ZXIoKGtleSkgPT4gcm91dGUuaW5jbHVkZXMoYFske2tleX1dYCkpXG5cbiAgICAvLyBxdWVyeVBhcmFtcyBtaWdodCBiZSBhIFpvZEVmZmVjdHMgb3IgWm9kT3B0aW9uYWwgaW4gc29tZSBjYXNlc1xuICAgIGxldCBxdWVyeVBhcmFtcyA9IHJvdXRlU3BlYy5xdWVyeVBhcmFtc1xuICAgIHdoaWxlIChcbiAgICAgIHF1ZXJ5UGFyYW1zICYmXG4gICAgICAoXCJzb3VyY2VUeXBlXCIgaW4gcXVlcnlQYXJhbXMgfHwgXCJ1bndyYXBcIiBpbiBxdWVyeVBhcmFtcylcbiAgICApIHtcbiAgICAgIGlmIChcInNvdXJjZVR5cGVcIiBpbiBxdWVyeVBhcmFtcykge1xuICAgICAgICBxdWVyeVBhcmFtcyA9IChxdWVyeVBhcmFtcyBhcyB1bmtub3duIGFzIFpvZEVmZmVjdHM8YW55Pikuc291cmNlVHlwZSgpXG4gICAgICB9IGVsc2UgaWYgKFwidW53cmFwXCIgaW4gcXVlcnlQYXJhbXMpIHtcbiAgICAgICAgcXVlcnlQYXJhbXMgPSAocXVlcnlQYXJhbXMgYXMgdW5rbm93biBhcyBab2RPcHRpb25hbDxhbnk+KS51bndyYXAoKVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHF1ZXJ5UGFyYW1zU2NoZW1hV2l0aG91dFBhdGhQYXJhbWV0ZXJzID0gcXVlcnlQYXJhbXM/Lm9taXQoXG4gICAgICBPYmplY3QuZnJvbUVudHJpZXMocGF0aFBhcmFtZXRlcnMubWFwKChwYXJhbSkgPT4gW3BhcmFtLCB0cnVlXSkpXG4gICAgKVxuXG4gICAgcm91dGVEZWZzLnB1c2goXG4gICAgICBgXG5cIiR7cm91dGV9XCI6IHtcbiAgcm91dGU6IFwiJHtyb3V0ZX1cIixcbiAgbWV0aG9kOiAke3JvdXRlU3BlYy5tZXRob2RzLm1hcCgobSkgPT4gYFwiJHttfVwiYCkuam9pbihcIiB8IFwiKX0sXG4gIHF1ZXJ5UGFyYW1zOiAke1xuICAgIHF1ZXJ5UGFyYW1zU2NoZW1hV2l0aG91dFBhdGhQYXJhbWV0ZXJzXG4gICAgICA/IHByaW50Tm9kZSh6b2RUb1RzKHF1ZXJ5UGFyYW1zU2NoZW1hV2l0aG91dFBhdGhQYXJhbWV0ZXJzKS5ub2RlKVxuICAgICAgOiBcInt9XCJcbiAgfSxcbiAganNvbkJvZHk6ICR7XG4gICAgcm91dGVTcGVjLmpzb25Cb2R5ID8gcHJpbnROb2RlKHpvZFRvVHMocm91dGVTcGVjLmpzb25Cb2R5KS5ub2RlKSA6IFwie31cIlxuICB9LFxuICBjb21tb25QYXJhbXM6ICR7XG4gICAgcm91dGVTcGVjLmNvbW1vblBhcmFtc1xuICAgICAgPyBwcmludE5vZGUoem9kVG9Ucyhyb3V0ZVNwZWMuY29tbW9uUGFyYW1zKS5ub2RlKVxuICAgICAgOiBcInt9XCJcbiAgfSxcbiAgZm9ybURhdGE6ICR7XG4gICAgcm91dGVTcGVjLmZvcm1EYXRhID8gcHJpbnROb2RlKHpvZFRvVHMocm91dGVTcGVjLmZvcm1EYXRhKS5ub2RlKSA6IFwie31cIlxuICB9LFxuICBqc29uUmVzcG9uc2U6ICR7XG4gICAgcm91dGVTcGVjLmpzb25SZXNwb25zZVxuICAgICAgPyBwcmludE5vZGUoXG4gICAgICAgICAgem9kVG9UcyhcbiAgICAgICAgICAgIHNldHVwUGFyYW1zLmFkZE9rU3RhdHVzICYmXG4gICAgICAgICAgICAgIHJvdXRlU3BlYy5qc29uUmVzcG9uc2UgaW5zdGFuY2VvZiB6LlpvZE9iamVjdFxuICAgICAgICAgICAgICA/IHJvdXRlU3BlYy5qc29uUmVzcG9uc2UuZXh0ZW5kKHsgb2s6IHouYm9vbGVhbigpIH0pXG4gICAgICAgICAgICAgIDogcm91dGVTcGVjLmpzb25SZXNwb25zZVxuICAgICAgICAgICkubm9kZVxuICAgICAgICApXG4gICAgICA6IFwie31cIlxuICB9XG59YC50cmltKClcbiAgICApXG4gIH1cbiAgY29uc3Qgcm91dGVEZWZTdHIgPSByb3V0ZURlZnMuam9pbihcIixcXG5cIilcbiAgY29uc3Qgb3V0cHV0ID0gYXdhaXQgcHJldHRpZXIuZm9ybWF0KFxuICAgIGBleHBvcnQgdHlwZSBSb3V0ZXMgPSB7XG4ke3JvdXRlRGVmU3RyfVxufVxuXG5leHBvcnQgdHlwZSBSb3V0ZVJlc3BvbnNlPFBhdGggZXh0ZW5kcyBrZXlvZiBSb3V0ZXM+ID1cbiAgUm91dGVzW1BhdGhdW1wianNvblJlc3BvbnNlXCJdXG5cbmV4cG9ydCB0eXBlIFJvdXRlUmVxdWVzdEJvZHk8UGF0aCBleHRlbmRzIGtleW9mIFJvdXRlcz4gPVxuICBSb3V0ZXNbUGF0aF1bXCJqc29uQm9keVwiXSAmIFJvdXRlc1tQYXRoXVtcImNvbW1vblBhcmFtc1wiXVxuXG5leHBvcnQgdHlwZSBSb3V0ZVJlcXVlc3RQYXJhbXM8UGF0aCBleHRlbmRzIGtleW9mIFJvdXRlcz4gPVxuICBSb3V0ZXNbUGF0aF1bXCJxdWVyeVBhcmFtc1wiXSAmIFJvdXRlc1tQYXRoXVtcImNvbW1vblBhcmFtc1wiXVxuYC50cmltKCksXG4gICAgeyBzZW1pOiBmYWxzZSwgcGFyc2VyOiBcInR5cGVzY3JpcHRcIiB9XG4gIClcblxuICBpZiAob3B0cy5vdXRwdXRGaWxlKSB7XG4gICAgYXdhaXQgZnMud3JpdGVGaWxlKG9wdHMub3V0cHV0RmlsZSwgb3V0cHV0KVxuICB9XG5cbiAgcmV0dXJuIG91dHB1dFxufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBLFdBQU8sZUFBZSxTQUFTLGNBQWMsRUFBRSxPQUFPLEtBQUssQ0FBQztBQUU1RCxRQUFNLFdBQVcsQ0FBQyxRQUFRO0FBQ3RCLFVBQUksT0FBTyxRQUFRLFlBQVksUUFBUSxNQUFNO0FBQ3pDLFlBQUksT0FBTyxPQUFPLG1CQUFtQixZQUFZO0FBQzdDLGdCQUFNLFlBQVksT0FBTyxlQUFlLEdBQUc7QUFDM0MsaUJBQU8sY0FBYyxPQUFPLGFBQWEsY0FBYztBQUFBLFFBQzNEO0FBQ0EsZUFBTyxPQUFPLFVBQVUsU0FBUyxLQUFLLEdBQUcsTUFBTTtBQUFBLE1BQ25EO0FBQ0EsYUFBTztBQUFBLElBQ1g7QUFDQSxRQUFNLFFBQVEsSUFBSSxZQUFZLFFBQVEsT0FBTyxDQUFDLFFBQVEsWUFBWTtBQUM5RCxVQUFJLE1BQU0sUUFBUSxPQUFPLEdBQUc7QUFDeEIsY0FBTSxJQUFJLFVBQVUsaUVBQWlFO0FBQUEsTUFDekY7QUFDQSxhQUFPLEtBQUssT0FBTyxFQUFFLFFBQVEsQ0FBQyxRQUFRO0FBQ2xDLFlBQUksQ0FBQyxhQUFhLGVBQWUsV0FBVyxFQUFFLFNBQVMsR0FBRyxHQUFHO0FBQ3pEO0FBQUEsUUFDSjtBQUNBLFlBQUksTUFBTSxRQUFRLE9BQU8sSUFBSSxLQUFLLE1BQU0sUUFBUSxRQUFRLElBQUksR0FBRztBQUMzRCxpQkFBTyxPQUFPLE1BQU0sUUFBUSxjQUN0QixNQUFNLFFBQVEsbUJBQ1YsTUFBTSxLQUFLLElBQUksSUFBSSxPQUFPLEtBQUssT0FBTyxRQUFRLElBQUks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Y0FBVTtBQUFBLE1BQ1I7QUFBQSxHQUNIO0FBQUEsWUFDUztBQUFBLFlBQ0EsVUFBVSxRQUFRLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSSxFQUFFLEtBQUssS0FBSztBQUFBLGlCQUV6RCx5Q0FDSSxVQUFVLFFBQVEsc0NBQXNDLEVBQUUsSUFBSSxJQUM5RDtBQUFBLGNBR0osVUFBVSxXQUFXLFVBQVUsUUFBUSxVQUFVLFFBQVEsRUFBRSxJQUFJLElBQUk7QUFBQSxrQkFHbkUsVUFBVSxlQUNOLFVBQVUsUUFBUSxVQUFVLFlBQVksRUFBRSxJQUFJLElBQzlDO0FBQUEsY0FHSixVQUFVLFdBQVcsVUFBVSxRQUFRLFVBQVUsUUFBUSxFQUFFLElBQUksSUFBSTtBQUFBLGtCQUduRSxVQUFVLGVBQ047QUFBQSxRQUNFO0FBQUEsVUFDRSxZQUFZLGVBQ1YsVUFBVSx3QkFBd0JELEdBQUUsWUFDbEMsVUFBVSxhQUFhLE9BQU8sRUFBRSxJQUFJQSxHQUFFLFFBQVEsRUFBRSxDQUFDLElBQ2pELFVBQVU7QUFBQSxRQUNoQixFQUFFO0FBQUEsTUFDSixJQUNBO0FBQUEsR0FFTCxLQUFLO0FBQUEsSUFDSjtBQUFBLEVBQ0Y7QUFDQSxRQUFNLGNBQWMsVUFBVSxLQUFLLEtBQUs7QUFDeEMsUUFBTSxTQUFTLE1BQU0sU0FBUztBQUFBLElBQzVCO0FBQUEsRUFDRjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFXQSxLQUFLO0FBQUEsSUFDSCxFQUFFLE1BQU0sT0FBTyxRQUFRLGFBQWE7QUFBQSxFQUN0QztBQUVBLE1BQUksS0FBSyxZQUFZO0FBQ25CLFVBQVMsY0FBVSxLQUFLLFlBQVksTUFBTTtBQUFBLEVBQzVDO0FBRUEsU0FBTztBQUNUOyIsCiAgIm5hbWVzIjogWyJnZW5lcmF0ZVNjaGVtYSIsICJwYXRoIiwgInBhdGgiLCAicGF0aCIsICJwYXRoIiwgIl9hIiwgImZzIiwgInoiLCAiXyJdCn0K
package/dist/index.js CHANGED
@@ -458,8 +458,12 @@ var createWithRouteSpec = (setupParams) => {
458
458
  return next(...args);
459
459
  })(req2, res2);
460
460
  } catch (error) {
461
- errors.push(error);
462
- continue;
461
+ if (didAuthMiddlewareThrow) {
462
+ errors.push(error);
463
+ continue;
464
+ } else {
465
+ throw error;
466
+ }
463
467
  }
464
468
  }
465
469
  if (onMultipleAuthMiddlewareFailures && didAuthMiddlewareThrow) {
@@ -512,4 +516,4 @@ var createWithRouteSpec = (setupParams) => {
512
516
  withExceptionHandling,
513
517
  wrappers
514
518
  });
515
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL2luZGV4LnRzIiwgIi4uL3NyYy9uZXh0anMtZXhjZXB0aW9uLW1pZGRsZXdhcmUvaHR0cC1leGNlcHRpb25zLnRzIiwgIi4uL3NyYy9uZXh0anMtZXhjZXB0aW9uLW1pZGRsZXdhcmUvd2l0aC1leGNlcHRpb24taGFuZGxpbmcudHMiLCAiLi4vc3JjL25leHRqcy1leGNlcHRpb24tbWlkZGxld2FyZS93aXRoLW9rLXN0YXR1cy50cyIsICIuLi9zcmMvbmV4dGpzLWV4Y2VwdGlvbi1taWRkbGV3YXJlL2luZGV4LnRzIiwgIi4uL3NyYy93cmFwcGVycy9pbmRleC50cyIsICIuLi9zcmMvd2l0aC1yb3V0ZS1zcGVjL21pZGRsZXdhcmVzL3dpdGgtbWV0aG9kcy50cyIsICIuLi9zcmMvd2l0aC1yb3V0ZS1zcGVjL21pZGRsZXdhcmVzL3dpdGgtdmFsaWRhdGlvbi50cyIsICIuLi9zcmMvd2l0aC1yb3V0ZS1zcGVjL2luZGV4LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJleHBvcnQgKiBmcm9tIFwiLi9uZXh0anMtZXhjZXB0aW9uLW1pZGRsZXdhcmVcIlxuZXhwb3J0ICogZnJvbSBcIi4vd2l0aC1yb3V0ZS1zcGVjXCJcbmV4cG9ydCB7IHdyYXBwZXJzIH0gZnJvbSBcIi4vd3JhcHBlcnNcIlxuZXhwb3J0ICogZnJvbSBcIi4vdHlwZXNcIlxuIiwgImV4cG9ydCB0eXBlIEh0dHBFeGNlcHRpb25NZXRhZGF0YSA9IHtcbiAgdHlwZTogc3RyaW5nXG4gIG1lc3NhZ2U6IHN0cmluZ1xuICBkYXRhPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbn0gJiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuXG5leHBvcnQgaW50ZXJmYWNlIFRocm93aW5nT3B0aW9ucyB7XG4gIGpzb24/OiBib29sZWFuXG59XG5cbi8qKlxuICogVGhyb3cgSHR0cEV4Y2VwdGlvbnMgaW5zaWRlIEFQSSBlbmRwb2ludHMgdG8gZ2VuZXJhdGUgbmljZSBlcnJvciBtZXNzYWdlc1xuICpcbiAqIEBleGFtcGxlXG4gKiBgYGBcbiAqIGlmIChiYWRfc291cHMuaW5jbHVkZXMoc291cF9wYXJhbSkpIHtcbiAqICAgdGhyb3cgbmV3IEh0dHBFeGNlcHRpb24oNDAwLCB7XG4gKiAgICAgIHR5cGU6IFwiY2FudF9tYWtlX3NvdXBcIixcbiAqICAgICAgbWVzc2FnZTogXCJTb3VwIHdhcyB0b28gZGlmZmljdWx0LCBwbGVhc2Ugc3BlY2lmeSBhIGRpZmZlcmVudCBzb3VwXCJcbiAqICAgIH0pXG4gKiB9XG4gKiBgYGBcbiAqXG4gKiovXG5leHBvcnQgY2xhc3MgSHR0cEV4Y2VwdGlvbiBleHRlbmRzIEVycm9yIHtcbiAgb3B0aW9uczogVGhyb3dpbmdPcHRpb25zXG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIHN0YXR1czogbnVtYmVyLFxuICAgIHB1YmxpYyBtZXRhZGF0YTogSHR0cEV4Y2VwdGlvbk1ldGFkYXRhLFxuICAgIG9wdGlvbnM/OiBUaHJvd2luZ09wdGlvbnNcbiAgKSB7XG4gICAgc3VwZXIobWV0YWRhdGEubWVzc2FnZSlcblxuICAgIGlmIChFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSkge1xuICAgICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgdGhpcy5jb25zdHJ1Y3RvcilcbiAgICB9XG5cbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zID8/IHsganNvbjogdHJ1ZSB9XG4gIH1cblxuICB0b1N0cmluZygpIHtcbiAgICByZXR1cm4gYEh0dHBFeGNlcHRpb246ICR7dGhpcy5zdGF0dXN9LCAke3RoaXMubWV0YWRhdGEubWVzc2FnZX0gKCR7dGhpcy5tZXRhZGF0YS50eXBlfSlgXG4gIH1cbn1cblxuLyoqXG4gKiBUaHJvdyBCYWRSZXF1ZXN0RXhjZXB0aW9uIGluc2lkZSBBUEkgZW5kcG9pbnRzIHRoYXQgd2VyZSBwcm92aWRlZCBpbmNvcnJlY3RcbiAqIHBhcmFtZXRlcnMgb3IgYm9keVxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGBcbiAqIGlmIChiYWRfc291cHMuaW5jbHVkZXMoc291cF9wYXJhbSkpIHtcbiAqICAgdGhyb3cgbmV3IEJhZFJlcXVlc3RFeGNlcHRpb24oe1xuICogICAgIHR5cGU6IFwiY2FudF9tYWtlX3NvdXBcIixcbiAqICAgICBtZXNzYWdlOiBcIlNvdXAgd2FzIHRvbyBkaWZmaWN1bHQsIHBsZWFzZSBzcGVjaWZ5IGEgZGlmZmVyZW50IHNvdXBcIixcbiAqICAgfSlcbiAqIH1cbiAqIGBgYFxuICpcbiAqKi9cbmV4cG9ydCBjbGFzcyBCYWRSZXF1ZXN0RXhjZXB0aW9uIGV4dGVuZHMgSHR0cEV4Y2VwdGlvbiB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBtZXRhZGF0YTogSHR0cEV4Y2VwdGlvbk1ldGFkYXRhLFxuICAgIG9wdGlvbnM/OiBUaHJvd2luZ09wdGlvbnNcbiAgKSB7XG4gICAgc3VwZXIoNDAwLCBtZXRhZGF0YSwgb3B0aW9ucylcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgVW5hdXRob3JpemVkRXhjZXB0aW9uIGV4dGVuZHMgSHR0cEV4Y2VwdGlvbiB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBtZXRhZGF0YTogSHR0cEV4Y2VwdGlvbk1ldGFkYXRhLFxuICAgIG9wdGlvbnM/OiBUaHJvd2luZ09wdGlvbnNcbiAgKSB7XG4gICAgc3VwZXIoNDAxLCBtZXRhZGF0YSwgb3B0aW9ucylcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgTm90Rm91bmRFeGNlcHRpb24gZXh0ZW5kcyBIdHRwRXhjZXB0aW9uIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIG1ldGFkYXRhOiBIdHRwRXhjZXB0aW9uTWV0YWRhdGEsXG4gICAgb3B0aW9ucz86IFRocm93aW5nT3B0aW9uc1xuICApIHtcbiAgICBzdXBlcig0MDQsIG1ldGFkYXRhLCBvcHRpb25zKVxuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBNZXRob2ROb3RBbGxvd2VkRXhjZXB0aW9uIGV4dGVuZHMgSHR0cEV4Y2VwdGlvbiB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBtZXRhZGF0YTogSHR0cEV4Y2VwdGlvbk1ldGFkYXRhLFxuICAgIG9wdGlvbnM/OiBUaHJvd2luZ09wdGlvbnNcbiAgKSB7XG4gICAgc3VwZXIoNDA1LCBtZXRhZGF0YSwgb3B0aW9ucylcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgSW50ZXJuYWxTZXJ2ZXJFcnJvckV4Y2VwdGlvbiBleHRlbmRzIEh0dHBFeGNlcHRpb24ge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgbWV0YWRhdGE6IEh0dHBFeGNlcHRpb25NZXRhZGF0YSxcbiAgICBvcHRpb25zPzogVGhyb3dpbmdPcHRpb25zXG4gICkge1xuICAgIHN1cGVyKDUwMCwgbWV0YWRhdGEsIG9wdGlvbnMpXG4gIH1cbn1cbiIsICJpbXBvcnQgeyBOZXh0QXBpUmVxdWVzdCwgTmV4dEFwaVJlc3BvbnNlIH0gZnJvbSBcIm5leHRcIlxuaW1wb3J0IHsgSHR0cEV4Y2VwdGlvbiB9IGZyb20gXCIuL2h0dHAtZXhjZXB0aW9uc1wiXG5cbmV4cG9ydCBpbnRlcmZhY2UgV2l0aEV4Y2VwdGlvbkhhbmRsaW5nT3B0aW9ucyB7XG4gIGdldEVycm9yQ29udGV4dD86IChcbiAgICByZXE6IE5leHRBcGlSZXF1ZXN0LFxuICAgIGVycm9yOiBFcnJvclxuICApID0+IFJlY29yZDxzdHJpbmcsIHVua25vd24+XG59XG5cbmNvbnN0IHdpdGhFeGNlcHRpb25IYW5kbGluZyA9XG4gIChvcHRpb25zOiBXaXRoRXhjZXB0aW9uSGFuZGxpbmdPcHRpb25zID0ge30pID0+XG4gIChuZXh0OiAocmVxOiBOZXh0QXBpUmVxdWVzdCwgcmVzOiBOZXh0QXBpUmVzcG9uc2UpID0+IFByb21pc2U8dm9pZD4pID0+XG4gIGFzeW5jIChyZXE6IE5leHRBcGlSZXF1ZXN0LCByZXM6IE5leHRBcGlSZXNwb25zZSkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBuZXh0KHJlcSwgcmVzKVxuICAgIH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG4gICAgICBsZXQgZXJyb3JDb250ZXh0OiBhbnkgPSB7fVxuXG4gICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICBlcnJvckNvbnRleHQuc3RhY2sgPSBlcnJvci5zdGFja1xuICAgICAgfVxuXG4gICAgICBlcnJvckNvbnRleHQgPSBvcHRpb25zLmdldEVycm9yQ29udGV4dFxuICAgICAgICA/IG9wdGlvbnMuZ2V0RXJyb3JDb250ZXh0KHJlcSwgZXJyb3JDb250ZXh0KVxuICAgICAgICA6IGVycm9yQ29udGV4dFxuXG4gICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBIdHRwRXhjZXB0aW9uKSB7XG4gICAgICAgIGlmIChlcnJvci5vcHRpb25zLmpzb24pIHtcbiAgICAgICAgICByZXMuc3RhdHVzKGVycm9yLnN0YXR1cykuanNvbih7XG4gICAgICAgICAgICBlcnJvcjoge1xuICAgICAgICAgICAgICAuLi5lcnJvci5tZXRhZGF0YSxcbiAgICAgICAgICAgICAgLi4uZXJyb3JDb250ZXh0LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KVxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlcy5zdGF0dXMoZXJyb3Iuc3RhdHVzKS5lbmQoZXJyb3IubWV0YWRhdGEubWVzc2FnZSlcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgZm9ybWF0dGVkRXJyb3IgPSBuZXcgSHR0cEV4Y2VwdGlvbig1MDAsIHtcbiAgICAgICAgICB0eXBlOiBcImludGVybmFsX3NlcnZlcl9lcnJvclwiLFxuICAgICAgICAgIG1lc3NhZ2U6IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogXCJVbmtub3duIGVycm9yXCIsXG4gICAgICAgIH0pXG5cbiAgICAgICAgcmVzLnN0YXR1cyg1MDApLmpzb24oe1xuICAgICAgICAgIGVycm9yOiB7XG4gICAgICAgICAgICAuLi5mb3JtYXR0ZWRFcnJvci5tZXRhZGF0YSxcbiAgICAgICAgICAgIC4uLmVycm9yQ29udGV4dCxcbiAgICAgICAgICB9LFxuICAgICAgICB9KVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuZXhwb3J0IGRlZmF1bHQgd2l0aEV4Y2VwdGlvbkhhbmRsaW5nXG4iLCAiaW1wb3J0IHsgTmV4dEFwaVJlcXVlc3QsIE5leHRBcGlSZXNwb25zZSB9IGZyb20gXCJuZXh0XCJcblxuZXhwb3J0IGludGVyZmFjZSBXaXRoT2tTdGF0dXNPcHRpb25zIHtcbiAgYWRkSWY/OiAocmVxOiBOZXh0QXBpUmVxdWVzdCkgPT4gYm9vbGVhblxufVxuXG5jb25zdCB3aXRoT2tTdGF0dXMgPVxuICAob3B0aW9uczogV2l0aE9rU3RhdHVzT3B0aW9ucyA9IHt9KSA9PlxuICAobmV4dDogKHJlcTogTmV4dEFwaVJlcXVlc3QsIHJlczogTmV4dEFwaVJlc3BvbnNlKSA9PiBQcm9taXNlPHZvaWQ+KSA9PlxuICBhc3luYyAocmVxOiBOZXh0QXBpUmVxdWVzdCwgcmVzOiBOZXh0QXBpUmVzcG9uc2UpID0+IHtcbiAgICAvLyBQYXRjaCAuanNvbigpXG4gICAgY29uc3Qgb3JpZ2luYWxKc29uID0gcmVzLmpzb25cblxuICAgIHJlcy5qc29uID0gZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgIGNvbnN0IG9rID0gcmVzLnN0YXR1c0NvZGUgPj0gMjAwICYmIHJlcy5zdGF0dXNDb2RlIDwgMzAwXG4gICAgICBjb25zdCBzaG91bGRJbmNsdWRlU3RhdHVzID0gb3B0aW9ucy5hZGRJZiA/IG9wdGlvbnMuYWRkSWYocmVxKSA6IHRydWVcblxuICAgICAgaWYgKHNob3VsZEluY2x1ZGVTdGF0dXMpIHtcbiAgICAgICAgb3JpZ2luYWxKc29uLmNhbGwodGhpcywge1xuICAgICAgICAgIC4uLmRhdGEsXG4gICAgICAgICAgb2ssXG4gICAgICAgIH0pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvcmlnaW5hbEpzb24uY2FsbCh0aGlzLCBkYXRhKVxuICAgICAgfVxuICAgIH1cblxuICAgIGF3YWl0IG5leHQocmVxLCByZXMpXG4gIH1cblxuZXhwb3J0IGRlZmF1bHQgd2l0aE9rU3RhdHVzXG4iLCAiaW1wb3J0IHsgTmV4dEFwaVJlcXVlc3QsIE5leHRBcGlSZXNwb25zZSB9IGZyb20gXCJuZXh0XCJcbmltcG9ydCB1bndyYXBwZWRXaXRoRXhjZXB0aW9uSGFuZGxpbmcsIHtcbiAgV2l0aEV4Y2VwdGlvbkhhbmRsaW5nT3B0aW9ucyxcbn0gZnJvbSBcIi4vd2l0aC1leGNlcHRpb24taGFuZGxpbmdcIlxuaW1wb3J0IHdpdGhPa1N0YXR1cywgeyBXaXRoT2tTdGF0dXNPcHRpb25zIH0gZnJvbSBcIi4vd2l0aC1vay1zdGF0dXNcIlxuXG5leHBvcnQgaW50ZXJmYWNlIEV4Y2VwdGlvbkhhbmRsaW5nT3B0aW9ucyB7XG4gIGFkZE9rU3RhdHVzPzogYm9vbGVhblxuICBva1N0YXR1c09wdGlvbnM/OiBXaXRoT2tTdGF0dXNPcHRpb25zXG4gIGV4Y2VwdGlvbkhhbmRsaW5nT3B0aW9ucz86IFdpdGhFeGNlcHRpb25IYW5kbGluZ09wdGlvbnNcbn1cblxuZXhwb3J0IGNvbnN0IHdpdGhFeGNlcHRpb25IYW5kbGluZyA9XG4gICh7XG4gICAgYWRkT2tTdGF0dXMgPSBmYWxzZSxcbiAgICBva1N0YXR1c09wdGlvbnMsXG4gICAgZXhjZXB0aW9uSGFuZGxpbmdPcHRpb25zLFxuICB9OiBFeGNlcHRpb25IYW5kbGluZ09wdGlvbnMgPSB7fSkgPT5cbiAgKG5leHQ6IChyZXE6IE5leHRBcGlSZXF1ZXN0LCByZXM6IE5leHRBcGlSZXNwb25zZSkgPT4gUHJvbWlzZTx2b2lkPikgPT5cbiAgKHJlcTogTmV4dEFwaVJlcXVlc3QsIHJlczogTmV4dEFwaVJlc3BvbnNlKSA9PiB7XG4gICAgaWYgKGFkZE9rU3RhdHVzKSB7XG4gICAgICByZXR1cm4gd2l0aE9rU3RhdHVzKG9rU3RhdHVzT3B0aW9ucykoXG4gICAgICAgIHVud3JhcHBlZFdpdGhFeGNlcHRpb25IYW5kbGluZyhleGNlcHRpb25IYW5kbGluZ09wdGlvbnMpKG5leHQpXG4gICAgICApKHJlcSwgcmVzKVxuICAgIH1cblxuICAgIHJldHVybiB1bndyYXBwZWRXaXRoRXhjZXB0aW9uSGFuZGxpbmcoZXhjZXB0aW9uSGFuZGxpbmdPcHRpb25zKShuZXh0KShcbiAgICAgIHJlcSxcbiAgICAgIHJlc1xuICAgIClcbiAgfVxuXG5leHBvcnQgKiBmcm9tIFwiLi9odHRwLWV4Y2VwdGlvbnNcIlxuIiwgImltcG9ydCB0eXBlIHsgTmV4dEFwaVJlcXVlc3QgYXMgUmVxLCBOZXh0QXBpUmVzcG9uc2UgYXMgUmVzIH0gZnJvbSBcIm5leHRcIlxuLypcblxuV3JhcHMgYSBmdW5jdGlvbiBpbiBsYXllcnMgb2Ygb3RoZXIgZnVuY3Rpb25zLCB3aGlsZSBwcmVzZXJ2aW5nIHRoZSBpbnB1dC9vdXRwdXRcbnR5cGUuIFRoZSBvdXRwdXQgb2Ygd3JhcHBlcnMgd2lsbCBhbHdheXMgaGF2ZSB0aGUgdHlwZSBvZiBpdCdzIGxhc3QgcGFyYW1ldGVyXG4odGhlIHdyYXBwZWQgZnVuY3Rpb24pXG5cblRoaXMgZnVuY3Rpb24gdHVybnMgdGhpcyB0eXBlIG9mIGNvbXBvc2l0aW9uLi4uXG5cbmxvZ2dlci53aXRoQ29udGV4dChcInNvbWVjb250ZXh0XCIpKFxuICBhc3luYyAoYSwgYikgPT4ge1xuICAgIHJldHVybiBhXG4gIH1cbilcblxuSW50by4uLlxuXG53cmFwcGVycyhcbiAgbG9nZ2VyLndpdGhDb250ZXh0KFwic29tZWNvbnRleHRcIiksXG4gIGFzeW5jIChhLCBiKSA9PiB7XG4gICAgcmV0dXJuIGFcbiAgfVxuKVxuXG5IYXZpbmcgdGhpcyBhcyBhIHV0aWxpdHkgbWV0aG9kIGhlbHBzIHByZXNlcnZlIHR5cGVzLCB3aGljaCBvdGhlcndpc2UgY2FuIGdldFxubWVzc2VkIHVwIGJ5IHRoZSBtaWRkbGV3YXJlcy4gSXQgYWxzbyBjYW4gbWFrZSB0aGUgY29kZSBjbGVhbmVyIHdoZXJlIHRoZXJlIGFyZVxubXVsdGlwbGUgd3JhcHBlcnMuXG5cbiMjIEVYQU1QTEVTXG5cbkluIHRoZSBjb250ZXh0IG9mIHJlcXVlc3QgbWlkZGxld2FyZSB5b3UgbWlnaHQgd3JpdGUgc29tZXRoaW5nIGxpa2UgdGhpcy4uLlxuXG5jb25zdCB3aXRoUmVxdWVzdExvZ2dpbmdNaWRkbGV3YXJlID0gKG5leHQpID0+IGFzeW5jIChyZXEsIHJlcykgPT4ge1xuICBjb25zb2xlLmxvZyhgR09UIFJFUVVFU1QgJHtyZXEubWV0aG9kfSAke3JlcS5wYXRofWApXG4gIHJldHVybiBuZXh0KHJlcSwgcmVzKVxufVxuXG5IZXJlJ3MgYW4gZXhhbXBsZSBvZiBhIHdyYXBwZXIgdGhhdCB0YWtlcyBzb21lIHBhcmFtZXRlcnMuLi5cblxuY29uc3Qgd2l0aExvZ2dlZEFyZ3VtZW50cyA9XG4gICAgKGxvZ1ByZWZpeDogc3RyaW5nKSA9PlxuICAgIChuZXh0KSA9PlxuICAgIGFzeW5jICguLi5mdW5jQXJncykgPT4ge1xuICAgICAgY29uc29sZS5sb2cobG9nUHJlZml4LCAuLi5mdW5jQXJncylcbiAgICAgIHJldHVybiBuZXh0KC4uLmZ1bmNBcmdzKVxuICAgIH1cblxuKi9cblxuZXhwb3J0IHR5cGUgTWlkZGxld2FyZTxULCBEZXAgPSB7fT4gPSAoXG4gIG5leHQ6IChyZXE6IFJlcSAmIERlcCAmIFQsIHJlczogUmVzKSA9PiBhbnlcbikgPT4gKHJlcTogUmVxICYgRGVwICYgVCwgcmVzOiBSZXMpID0+IGFueVxuXG4vLyBTYWZlciBNaWRkbGV3YXJlIHJlcXVpcmVzIHRoZSB1c2Ugb2YgZXh0ZW5kUmVxdWVzdCB0byBlbnN1cmUgdGhhdCB0aGVcbi8vIG5ldyBjb250ZXh0IChUKSB3YXMgYWN0dWFsbHkgYWRkZWQgdG8gdGhlIHJlcXVlc3QuIEl0J3Mga2luZCBvZiBhbm5veWluZ1xuLy8gdG8gdXNlIGluIHByYWN0aWNlLCBzbyB3ZSBkb24ndCB1c2UgaXQgZm9yIG91ciBXcmFwcGVycyAoeWV0KVxuZXhwb3J0IHR5cGUgU2FmZXJNaWRkbGV3YXJlPFQsIERlcCA9IHt9PiA9IChcbiAgbmV4dDogKHJlcTogUmVxICYgRGVwICYgVCwgcmVzOiBSZXMpID0+IGFueVxuKSA9PiAocmVxOiBSZXEgJiBEZXAsIHJlczogUmVzKSA9PiBhbnlcblxuZXhwb3J0IGNvbnN0IGV4dGVuZFJlcXVlc3QgPSA8VCBleHRlbmRzIFJlcSwgSyBleHRlbmRzIHt9PihcbiAgcmVxOiBULFxuICBtZXJnZTogS1xuKTogVCAmIEsgPT4ge1xuICBmb3IgKGNvbnN0IFtrZXksIHZdIG9mIE9iamVjdC5lbnRyaWVzKG1lcmdlKSkge1xuICAgIDsocmVxIGFzIGFueSlba2V5XSA9IHZcbiAgfVxuICByZXR1cm4gcmVxIGFzIGFueVxufVxuXG50eXBlIFdyYXBwZXJzMSA9IDxNdzFSZXF1ZXN0Q29udGV4dCwgTXcxRGVwPihcbiAgbXcxOiBNaWRkbGV3YXJlPE13MVJlcXVlc3RDb250ZXh0LCBNdzFEZXA+LFxuICBlbmRwb2ludDogKHJlcTogUmVxICYgTXcxUmVxdWVzdENvbnRleHQsIHJlczogUmVzKSA9PiBhbnlcbikgPT4gKHJlcTogUmVxLCByZXM6IFJlcykgPT4gYW55XG5cbnR5cGUgV3JhcHBlcnMyID0gPFxuICBNdzFSZXF1ZXN0Q29udGV4dCBleHRlbmRzIE13MkRlcCxcbiAgTXcxRGVwLFxuICBNdzJSZXF1ZXN0Q29udGV4dCxcbiAgTXcyRGVwXG4+KFxuICBtdzE6IE1pZGRsZXdhcmU8TXcxUmVxdWVzdENvbnRleHQsIE13MURlcD4sXG4gIG13MjogTWlkZGxld2FyZTxNdzJSZXF1ZXN0Q29udGV4dCwgTXcyRGVwPixcbiAgZW5kcG9pbnQ6IChyZXE6IFJlcSAmIE13MVJlcXVlc3RDb250ZXh0ICYgTXcyUmVxdWVzdENvbnRleHQsIHJlczogUmVzKSA9PiBhbnlcbikgPT4gKHJlcTogUmVxLCByZXM6IFJlcykgPT4gYW55XG5cbi8vIFRPRE8gZmlndXJlIG91dCBob3cgdG8gZG8gYSByZWN1cnNpdmUgZGVmaW5pdGlvbiwgb3Igb25lIHRoYXQgc2ltcGxpZmllc1xuLy8gdGhlc2UgcmVkdW5kYW50IHdyYXBwZXJzXG5cbnR5cGUgV3JhcHBlcnMzID0gPFxuICBNdzFSZXF1ZXN0Q29udGV4dCBleHRlbmRzIE13MkRlcCxcbiAgTXcxRGVwLFxuICBNdzJSZXF1ZXN0Q29udGV4dCxcbiAgTXcyRGVwLFxuICBNdzNSZXF1ZXN0Q29udGV4dCxcbiAgTXczRGVwXG4+KFxuICBtdzE6IE1pZGRsZXdhcmU8TXcxUmVxdWVzdENvbnRleHQsIE13MURlcD4sXG4gIG13MjogTWlkZGxld2FyZTxNdzJSZXF1ZXN0Q29udGV4dCwgTXcyRGVwPixcbiAgbXczOiBNaWRkbGV3YXJlPFxuICAgIE13M1JlcXVlc3RDb250ZXh0LFxuICAgIE13MVJlcXVlc3RDb250ZXh0ICYgTXcyUmVxdWVzdENvbnRleHQgZXh0ZW5kcyBNdzNEZXAgPyBNdzNEZXAgOiBuZXZlclxuICA+LFxuICBlbmRwb2ludDogKFxuICAgIHJlcTogUmVxICYgTXcxUmVxdWVzdENvbnRleHQgJiBNdzJSZXF1ZXN0Q29udGV4dCAmIE13M1JlcXVlc3RDb250ZXh0LFxuICAgIHJlczogUmVzXG4gICkgPT4gYW55XG4pID0+IChyZXE6IFJlcSwgcmVzOiBSZXMpID0+IGFueVxuXG50eXBlIFdyYXBwZXJzNCA9IDxcbiAgTXcxUmVxdWVzdENvbnRleHQgZXh0ZW5kcyBNdzJEZXAsXG4gIE13MURlcCxcbiAgTXcyUmVxdWVzdENvbnRleHQsXG4gIE13MkRlcCxcbiAgTXczUmVxdWVzdENvbnRleHQsXG4gIE13M0RlcCxcbiAgTXc0UmVxdWVzdENvbnRleHQsXG4gIE13NERlcFxuPihcbiAgbXcxOiBNaWRkbGV3YXJlPE13MVJlcXVlc3RDb250ZXh0LCBNdzFEZXA+LFxuICBtdzI6IE1pZGRsZXdhcmU8TXcyUmVxdWVzdENvbnRleHQsIE13MkRlcD4sXG4gIG13MzogTWlkZGxld2FyZTxcbiAgICBNdzNSZXF1ZXN0Q29udGV4dCxcbiAgICBNdzFSZXF1ZXN0Q29udGV4dCAmIE13MlJlcXVlc3RDb250ZXh0IGV4dGVuZHMgTXczRGVwID8gTXczRGVwIDogbmV2ZXJcbiAgPixcbiAgbXc0OiBNaWRkbGV3YXJlPFxuICAgIE13NFJlcXVlc3RDb250ZXh0LFxuICAgIE13MVJlcXVlc3RDb250ZXh0ICYgTXcyUmVxdWVzdENvbnRleHQgJiBNdzNSZXF1ZXN0Q29udGV4dCBleHRlbmRzIE13NERlcFxuICAgICAgPyBNdzREZXBcbiAgICAgIDogbmV2ZXJcbiAgPixcbiAgZW5kcG9pbnQ6IChcbiAgICByZXE6IFJlcSAmXG4gICAgICBNdzFSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzJSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzNSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzRSZXF1ZXN0Q29udGV4dCxcbiAgICByZXM6IFJlc1xuICApID0+IGFueVxuKSA9PiAocmVxOiBSZXEsIHJlczogUmVzKSA9PiBhbnlcblxudHlwZSBXcmFwcGVyczUgPSA8XG4gIE13MVJlcXVlc3RDb250ZXh0IGV4dGVuZHMgTXcyRGVwLFxuICBNdzFEZXAsXG4gIE13MlJlcXVlc3RDb250ZXh0LFxuICBNdzJEZXAsXG4gIE13M1JlcXVlc3RDb250ZXh0LFxuICBNdzNEZXAsXG4gIE13NFJlcXVlc3RDb250ZXh0LFxuICBNdzREZXAsXG4gIE13NVJlcXVlc3RDb250ZXh0LFxuICBNdzVEZXBcbj4oXG4gIG13MTogTWlkZGxld2FyZTxNdzFSZXF1ZXN0Q29udGV4dCwgTXcxRGVwPixcbiAgbXcyOiBNaWRkbGV3YXJlPE13MlJlcXVlc3RDb250ZXh0LCBNdzJEZXA+LFxuICBtdzM6IE1pZGRsZXdhcmU8XG4gICAgTXczUmVxdWVzdENvbnRleHQsXG4gICAgTXcxUmVxdWVzdENvbnRleHQgJiBNdzJSZXF1ZXN0Q29udGV4dCBleHRlbmRzIE13M0RlcCA/IE13M0RlcCA6IG5ldmVyXG4gID4sXG4gIG13NDogTWlkZGxld2FyZTxcbiAgICBNdzRSZXF1ZXN0Q29udGV4dCxcbiAgICBNdzFSZXF1ZXN0Q29udGV4dCAmIE13MlJlcXVlc3RDb250ZXh0ICYgTXczUmVxdWVzdENvbnRleHQgZXh0ZW5kcyBNdzREZXBcbiAgICAgID8gTXc0RGVwXG4gICAgICA6IG5ldmVyXG4gID4sXG4gIG13NTogTWlkZGxld2FyZTxcbiAgICBNdzVSZXF1ZXN0Q29udGV4dCxcbiAgICBNdzFSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzJSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzNSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzRSZXF1ZXN0Q29udGV4dCBleHRlbmRzIE13NURlcFxuICAgICAgPyBNdzVEZXBcbiAgICAgIDogbmV2ZXJcbiAgPixcbiAgZW5kcG9pbnQ6IChcbiAgICByZXE6IFJlcSAmXG4gICAgICBNdzFSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzJSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzNSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzRSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzVSZXF1ZXN0Q29udGV4dCxcbiAgICByZXM6IFJlc1xuICApID0+IGFueVxuKSA9PiAocmVxOiBSZXEsIHJlczogUmVzKSA9PiBhbnlcblxudHlwZSBXcmFwcGVyczYgPSA8XG4gIE13MVJlcXVlc3RDb250ZXh0IGV4dGVuZHMgTXcyRGVwLFxuICBNdzFEZXAsXG4gIE13MlJlcXVlc3RDb250ZXh0LFxuICBNdzJEZXAsXG4gIE13M1JlcXVlc3RDb250ZXh0LFxuICBNdzNEZXAsXG4gIE13NFJlcXVlc3RDb250ZXh0LFxuICBNdzREZXAsXG4gIE13NVJlcXVlc3RDb250ZXh0LFxuICBNdzVEZXAsXG4gIE13NlJlcXVlc3RDb250ZXh0LFxuICBNdzZEZXBcbj4oXG4gIG13MTogTWlkZGxld2FyZTxNdzFSZXF1ZXN0Q29udGV4dCwgTXcxRGVwPixcbiAgbXcyOiBNaWRkbGV3YXJlPE13MlJlcXVlc3RDb250ZXh0LCBNdzJEZXA+LFxuICBtdzM6IE1pZGRsZXdhcmU8XG4gICAgTXczUmVxdWVzdENvbnRleHQsXG4gICAgTXcxUmVxdWVzdENvbnRleHQgJiBNdzJSZXF1ZXN0Q29udGV4dCBleHRlbmRzIE13M0RlcCA/IE13M0RlcCA6IG5ldmVyXG4gID4sXG4gIG13NDogTWlkZGxld2FyZTxcbiAgICBNdzRSZXF1ZXN0Q29udGV4dCxcbiAgICBNdzFSZXF1ZXN0Q29udGV4dCAmIE13MlJlcXVlc3RDb250ZXh0ICYgTXczUmVxdWVzdENvbnRleHQgZXh0ZW5kcyBNdzREZXBcbiAgICAgID8gTXc0RGVwXG4gICAgICA6IG5ldmVyXG4gID4sXG4gIG13NTogTWlkZGxld2FyZTxcbiAgICBNdzVSZXF1ZXN0Q29udGV4dCxcbiAgICBNdzFSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzJSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzNSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzRSZXF1ZXN0Q29udGV4dCBleHRlbmRzIE13NURlcFxuICAgICAgPyBNdzVEZXBcbiAgICAgIDogbmV2ZXJcbiAgPixcbiAgbXc2OiBNaWRkbGV3YXJlPFxuICAgIE13NlJlcXVlc3RDb250ZXh0LFxuICAgIE13MVJlcXVlc3RDb250ZXh0ICZcbiAgICAgIE13MlJlcXVlc3RDb250ZXh0ICZcbiAgICAgIE13M1JlcXVlc3RDb250ZXh0ICZcbiAgICAgIE13NFJlcXVlc3RDb250ZXh0ICZcbiAgICAgIE13NVJlcXVlc3RDb250ZXh0IGV4dGVuZHMgTXc2RGVwXG4gICAgICA/IE13NkRlcFxuICAgICAgOiBuZXZlclxuICA+LFxuICBlbmRwb2ludDogKFxuICAgIHJlcTogUmVxICZcbiAgICAgIE13MVJlcXVlc3RDb250ZXh0ICZcbiAgICAgIE13MlJlcXVlc3RDb250ZXh0ICZcbiAgICAgIE13M1JlcXVlc3RDb250ZXh0ICZcbiAgICAgIE13NFJlcXVlc3RDb250ZXh0ICZcbiAgICAgIE13NVJlcXVlc3RDb250ZXh0ICZcbiAgICAgIE13NlJlcXVlc3RDb250ZXh0LFxuICAgIHJlczogUmVzXG4gICkgPT4gYW55XG4pID0+IChyZXE6IFJlcSwgcmVzOiBSZXMpID0+IGFueVxuXG50eXBlIFdyYXBwZXJzNyA9IDxcbiAgTXcxUmVxdWVzdENvbnRleHQgZXh0ZW5kcyBNdzJEZXAsXG4gIE13MURlcCxcbiAgTXcyUmVxdWVzdENvbnRleHQsXG4gIE13MkRlcCxcbiAgTXczUmVxdWVzdENvbnRleHQsXG4gIE13M0RlcCxcbiAgTXc0UmVxdWVzdENvbnRleHQsXG4gIE13NERlcCxcbiAgTXc1UmVxdWVzdENvbnRleHQsXG4gIE13NURlcCxcbiAgTXc2UmVxdWVzdENvbnRleHQsXG4gIE13NkRlcCxcbiAgTXc3UmVxdWVzdENvbnRleHQsXG4gIE13N0RlcFxuPihcbiAgbXcxOiBNaWRkbGV3YXJlPE13MVJlcXVlc3RDb250ZXh0LCBNdzFEZXA+LFxuICBtdzI6IE1pZGRsZXdhcmU8TXcyUmVxdWVzdENvbnRleHQsIE13MkRlcD4sXG4gIG13MzogTWlkZGxld2FyZTxcbiAgICBNdzNSZXF1ZXN0Q29udGV4dCxcbiAgICBNdzFSZXF1ZXN0Q29udGV4dCAmIE13MlJlcXVlc3RDb250ZXh0IGV4dGVuZHMgTXczRGVwID8gTXczRGVwIDogbmV2ZXJcbiAgPixcbiAgbXc0OiBNaWRkbGV3YXJlPFxuICAgIE13NFJlcXVlc3RDb250ZXh0LFxuICAgIE13MVJlcXVlc3RDb250ZXh0ICYgTXcyUmVxdWVzdENvbnRleHQgJiBNdzNSZXF1ZXN0Q29udGV4dCBleHRlbmRzIE13NERlcFxuICAgICAgPyBNdzREZXBcbiAgICAgIDogbmV2ZXJcbiAgPixcbiAgbXc1OiBNaWRkbGV3YXJlPFxuICAgIE13NVJlcXVlc3RDb250ZXh0LFxuICAgIE13MVJlcXVlc3RDb250ZXh0ICZcbiAgICAgIE13MlJlcXVlc3RDb250ZXh0ICZcbiAgICAgIE13M1JlcXVlc3RDb250ZXh0ICZcbiAgICAgIE13NFJlcXVlc3RDb250ZXh0IGV4dGVuZHMgTXc1RGVwXG4gICAgICA/IE13NURlcFxuICAgICAgOiBuZXZlclxuICA+LFxuICBtdzY6IE1pZGRsZXdhcmU8XG4gICAgTXc2UmVxdWVzdENvbnRleHQsXG4gICAgTXcxUmVxdWVzdENvbnRleHQgJlxuICAgICAgTXcyUmVxdWVzdENvbnRleHQgJlxuICAgICAgTXczUmVxdWVzdENvbnRleHQgJlxuICAgICAgTXc0UmVxdWVzdENvbnRleHQgJlxuICAgICAgTXc1UmVxdWVzdENvbnRleHQgZXh0ZW5kcyBNdzZEZXBcbiAgICAgID8gTXc2RGVwXG4gICAgICA6IG5ldmVyXG4gID4sXG4gIG13NzogTWlkZGxld2FyZTxcbiAgICBNdzdSZXF1ZXN0Q29udGV4dCxcbiAgICBNdzFSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzJSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzNSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzRSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzVSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzZSZXF1ZXN0Q29udGV4dCBleHRlbmRzIE13N0RlcFxuICAgICAgPyBNdzdEZXBcbiAgICAgIDogbmV2ZXJcbiAgPixcbiAgZW5kcG9pbnQ6IChcbiAgICByZXE6IFJlcSAmXG4gICAgICBNdzFSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzJSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzNSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzRSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzVSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzZSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzdSZXF1ZXN0Q29udGV4dCxcbiAgICByZXM6IFJlc1xuICApID0+IGFueVxuKSA9PiAocmVxOiBSZXEsIHJlczogUmVzKSA9PiBhbnlcblxudHlwZSBXcmFwcGVycyA9IFdyYXBwZXJzMSAmXG4gIFdyYXBwZXJzMiAmXG4gIFdyYXBwZXJzMyAmXG4gIFdyYXBwZXJzNCAmXG4gIFdyYXBwZXJzNSAmXG4gIFdyYXBwZXJzNiAmXG4gIFdyYXBwZXJzN1xuXG5leHBvcnQgY29uc3Qgd3JhcHBlcnM6IFdyYXBwZXJzID0gKC4uLndyYXBwZXJzQXJnczogYW55W10pID0+IHtcbiAgY29uc3Qgd3JhcHBlZEZ1bmN0aW9uID0gd3JhcHBlcnNBcmdzW3dyYXBwZXJzQXJncy5sZW5ndGggLSAxXVxuICBjb25zdCBtd3MgPSB3cmFwcGVyc0FyZ3Muc2xpY2UoMCwgLTEpXG5cbiAgbGV0IGxhc3RXcmFwcGVkRnVuY3Rpb24gPSB3cmFwcGVkRnVuY3Rpb25cbiAgZm9yIChsZXQgaSA9IG13cy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgIGxhc3RXcmFwcGVkRnVuY3Rpb24gPSAobXdzW2ldIGFzIGFueSkobGFzdFdyYXBwZWRGdW5jdGlvbilcbiAgfVxuXG4gIHJldHVybiBsYXN0V3JhcHBlZEZ1bmN0aW9uXG59XG5cbmV4cG9ydCBkZWZhdWx0IHdyYXBwZXJzXG4iLCAiaW1wb3J0IHsgTWV0aG9kTm90QWxsb3dlZEV4Y2VwdGlvbiB9IGZyb20gXCIuLi8uLi9uZXh0anMtZXhjZXB0aW9uLW1pZGRsZXdhcmVcIlxuXG5leHBvcnQgdHlwZSBIVFRQTWV0aG9kcyA9XG4gIHwgXCJHRVRcIlxuICB8IFwiUE9TVFwiXG4gIHwgXCJERUxFVEVcIlxuICB8IFwiUFVUXCJcbiAgfCBcIlBBVENIXCJcbiAgfCBcIkhFQURcIlxuICB8IFwiT1BUSU9OU1wiXG5cbmV4cG9ydCBjb25zdCB3aXRoTWV0aG9kcyA9IChtZXRob2RzOiBIVFRQTWV0aG9kc1tdKSA9PiAobmV4dCkgPT4gKHJlcSwgcmVzKSA9PiB7XG4gIGlmICghbWV0aG9kcy5pbmNsdWRlcyhyZXEubWV0aG9kKSkge1xuICAgIHRocm93IG5ldyBNZXRob2ROb3RBbGxvd2VkRXhjZXB0aW9uKHtcbiAgICAgIHR5cGU6IFwibWV0aG9kX25vdF9hbGxvd2VkXCIsXG4gICAgICBtZXNzYWdlOiBgb25seSAke21ldGhvZHMuam9pbihcIixcIil9IGFjY2VwdGVkYCxcbiAgICB9KVxuICB9XG4gIHJldHVybiBuZXh0KHJlcSwgcmVzKVxufVxuXG5leHBvcnQgZGVmYXVsdCB3aXRoTWV0aG9kc1xuIiwgImltcG9ydCB0eXBlIHsgTmV4dEFwaVJlcXVlc3QsIE5leHRBcGlSZXNwb25zZSB9IGZyb20gXCJuZXh0XCJcbmltcG9ydCB7IHosIFpvZEZpcnN0UGFydHlUeXBlS2luZCB9IGZyb20gXCJ6b2RcIlxuaW1wb3J0IF8gZnJvbSBcImxvZGFzaFwiXG5cbmltcG9ydCB7XG4gIEJhZFJlcXVlc3RFeGNlcHRpb24sXG4gIEludGVybmFsU2VydmVyRXJyb3JFeGNlcHRpb24sXG59IGZyb20gXCIuLi8uLi9uZXh0anMtZXhjZXB0aW9uLW1pZGRsZXdhcmVcIlxuaW1wb3J0IHsgUXVlcnlBcnJheUZvcm1hdHMgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIlxuaW1wb3J0IHsgREVGQVVMVF9BUlJBWV9GT1JNQVRTIH0gZnJvbSBcIi4uXCJcblxuY29uc3QgZ2V0Wm9kT2JqZWN0U2NoZW1hRnJvbVpvZEVmZmVjdFNjaGVtYSA9IChcbiAgaXNab2RFZmZlY3Q6IGJvb2xlYW4sXG4gIHNjaGVtYTogei5ab2RUeXBlQW55XG4pOiB6LlpvZFR5cGVBbnkgfCB6LlpvZE9iamVjdDxhbnk+ID0+IHtcbiAgaWYgKCFpc1pvZEVmZmVjdCkge1xuICAgIHJldHVybiBzY2hlbWEgYXMgei5ab2RPYmplY3Q8YW55PlxuICB9XG5cbiAgbGV0IGN1cnJlbnRTY2hlbWEgPSBzY2hlbWFcblxuICB3aGlsZSAoY3VycmVudFNjaGVtYSBpbnN0YW5jZW9mIHouWm9kRWZmZWN0cykge1xuICAgIGN1cnJlbnRTY2hlbWEgPSBjdXJyZW50U2NoZW1hLl9kZWYuc2NoZW1hXG4gIH1cblxuICByZXR1cm4gY3VycmVudFNjaGVtYSBhcyB6LlpvZE9iamVjdDxhbnk+XG59XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGdldCB0aGUgY29ycmVjdCBzY2hlbWEgZnJvbSBhIFpvZEVmZmVjdCB8IFpvZERlZmF1bHQgfCBab2RPcHRpb25hbCBzY2hlbWEuXG4gKiBUT0RPOiB0aGlzIGZ1bmN0aW9uIHNob3VsZCBoYW5kbGUgYWxsIHNwZWNpYWwgY2FzZXMgb2YgWm9kU2NoZW1hIGFuZCBub3QganVzdCBab2RFZmZlY3QgfCBab2REZWZhdWx0IHwgWm9kT3B0aW9uYWxcbiAqL1xuY29uc3QgZ2V0Wm9kRGVmRnJvbVpvZFNjaGVtYUhlbHBlcnMgPSAoc2NoZW1hOiB6LlpvZFR5cGVBbnkpID0+IHtcbiAgY29uc3Qgc3BlY2lhbF96b2RfdHlwZXMgPSBbXG4gICAgWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZE9wdGlvbmFsLFxuICAgIFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2REZWZhdWx0LFxuICAgIFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2RFZmZlY3RzLFxuICBdXG5cbiAgd2hpbGUgKHNwZWNpYWxfem9kX3R5cGVzLmluY2x1ZGVzKHNjaGVtYS5fZGVmLnR5cGVOYW1lKSkge1xuICAgIGlmIChcbiAgICAgIHNjaGVtYS5fZGVmLnR5cGVOYW1lID09PSBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kT3B0aW9uYWwgfHxcbiAgICAgIHNjaGVtYS5fZGVmLnR5cGVOYW1lID09PSBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kRGVmYXVsdFxuICAgICkge1xuICAgICAgc2NoZW1hID0gc2NoZW1hLl9kZWYuaW5uZXJUeXBlXG4gICAgICBjb250aW51ZVxuICAgIH1cblxuICAgIGlmIChzY2hlbWEuX2RlZi50eXBlTmFtZSA9PT0gWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZEVmZmVjdHMpIHtcbiAgICAgIHNjaGVtYSA9IHNjaGVtYS5fZGVmLnNjaGVtYVxuICAgICAgY29udGludWVcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHNjaGVtYS5fZGVmXG59XG5cbmNvbnN0IHRyeUdldFpvZFNjaGVtYUFzT2JqZWN0ID0gKFxuICBzY2hlbWE6IHouWm9kVHlwZUFueVxuKTogei5ab2RPYmplY3Q8YW55PiB8IHVuZGVmaW5lZCA9PiB7XG4gIGNvbnN0IGlzWm9kRWZmZWN0ID0gc2NoZW1hLl9kZWYudHlwZU5hbWUgPT09IFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2RFZmZlY3RzXG4gIGNvbnN0IHNhZmVfc2NoZW1hID0gZ2V0Wm9kT2JqZWN0U2NoZW1hRnJvbVpvZEVmZmVjdFNjaGVtYShpc1pvZEVmZmVjdCwgc2NoZW1hKVxuICBjb25zdCBpc1pvZE9iamVjdCA9XG4gICAgc2FmZV9zY2hlbWEuX2RlZi50eXBlTmFtZSA9PT0gWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZE9iamVjdFxuXG4gIGlmICghaXNab2RPYmplY3QpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkXG4gIH1cblxuICByZXR1cm4gc2FmZV9zY2hlbWEgYXMgei5ab2RPYmplY3Q8YW55PlxufVxuXG5jb25zdCBpc1pvZFNjaGVtYUFycmF5ID0gKHNjaGVtYTogei5ab2RUeXBlQW55KSA9PiB7XG4gIGNvbnN0IGRlZiA9IGdldFpvZERlZkZyb21ab2RTY2hlbWFIZWxwZXJzKHNjaGVtYSlcbiAgcmV0dXJuIGRlZi50eXBlTmFtZSA9PT0gWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZEFycmF5XG59XG5cbmNvbnN0IGlzWm9kU2NoZW1hQm9vbGVhbiA9IChzY2hlbWE6IHouWm9kVHlwZUFueSkgPT4ge1xuICBjb25zdCBkZWYgPSBnZXRab2REZWZGcm9tWm9kU2NoZW1hSGVscGVycyhzY2hlbWEpXG4gIHJldHVybiBkZWYudHlwZU5hbWUgPT09IFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2RCb29sZWFuXG59XG5cbmNvbnN0IHBhcnNlUXVlcnlQYXJhbXMgPSAoXG4gIHNjaGVtYTogei5ab2RUeXBlQW55LFxuICBpbnB1dDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gIHN1cHBvcnRlZEFycmF5Rm9ybWF0czogUXVlcnlBcnJheUZvcm1hdHNcbikgPT4ge1xuICBjb25zdCBwYXJzZWRfaW5wdXQgPSBPYmplY3QuYXNzaWduKHt9LCBpbnB1dClcbiAgY29uc3Qgb2JqX3NjaGVtYSA9IHRyeUdldFpvZFNjaGVtYUFzT2JqZWN0KHNjaGVtYSlcblxuICBpZiAob2JqX3NjaGVtYSkge1xuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKG9ial9zY2hlbWEuc2hhcGUpKSB7XG4gICAgICBpZiAoaXNab2RTY2hlbWFBcnJheSh2YWx1ZSBhcyB6LlpvZFR5cGVBbnkpKSB7XG4gICAgICAgIGNvbnN0IGFycmF5X2lucHV0ID0gaW5wdXRba2V5XVxuXG4gICAgICAgIGlmIChcbiAgICAgICAgICB0eXBlb2YgYXJyYXlfaW5wdXQgPT09IFwic3RyaW5nXCIgJiZcbiAgICAgICAgICBzdXBwb3J0ZWRBcnJheUZvcm1hdHMuaW5jbHVkZXMoXCJjb21tYVwiKVxuICAgICAgICApIHtcbiAgICAgICAgICBwYXJzZWRfaW5wdXRba2V5XSA9IGFycmF5X2lucHV0LnNwbGl0KFwiLFwiKVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYnJhY2tldF9zeW50YXhfYXJyYXlfaW5wdXQgPSBpbnB1dFtgJHtrZXl9W11gXVxuICAgICAgICBpZiAoXG4gICAgICAgICAgdHlwZW9mIGJyYWNrZXRfc3ludGF4X2FycmF5X2lucHV0ID09PSBcInN0cmluZ1wiICYmXG4gICAgICAgICAgc3VwcG9ydGVkQXJyYXlGb3JtYXRzLmluY2x1ZGVzKFwiYnJhY2tldHNcIilcbiAgICAgICAgKSB7XG4gICAgICAgICAgY29uc3QgcHJlX3NwbGl0X2FycmF5ID0gYnJhY2tldF9zeW50YXhfYXJyYXlfaW5wdXRcbiAgICAgICAgICBwYXJzZWRfaW5wdXRba2V5XSA9IHByZV9zcGxpdF9hcnJheS5zcGxpdChcIixcIilcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChcbiAgICAgICAgICBBcnJheS5pc0FycmF5KGJyYWNrZXRfc3ludGF4X2FycmF5X2lucHV0KSAmJlxuICAgICAgICAgIHN1cHBvcnRlZEFycmF5Rm9ybWF0cy5pbmNsdWRlcyhcImJyYWNrZXRzXCIpXG4gICAgICAgICkge1xuICAgICAgICAgIHBhcnNlZF9pbnB1dFtrZXldID0gYnJhY2tldF9zeW50YXhfYXJyYXlfaW5wdXRcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIGlmIChpc1pvZFNjaGVtYUJvb2xlYW4odmFsdWUgYXMgei5ab2RUeXBlQW55KSkge1xuICAgICAgICBjb25zdCBib29sZWFuX2lucHV0ID0gaW5wdXRba2V5XVxuXG4gICAgICAgIGlmICh0eXBlb2YgYm9vbGVhbl9pbnB1dCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgIHBhcnNlZF9pbnB1dFtrZXldID0gYm9vbGVhbl9pbnB1dCA9PT0gXCJ0cnVlXCJcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzY2hlbWEucGFyc2UocGFyc2VkX2lucHV0KVxufVxuXG5jb25zdCB2YWxpZGF0ZVF1ZXJ5UGFyYW1zID0gKFxuICBpbnB1dFVybDogc3RyaW5nLFxuICBzY2hlbWE6IHouWm9kVHlwZUFueSxcbiAgc3VwcG9ydGVkQXJyYXlGb3JtYXRzOiBRdWVyeUFycmF5Rm9ybWF0c1xuKSA9PiB7XG4gIGNvbnN0IHVybCA9IG5ldyBVUkwoaW5wdXRVcmwsIFwiaHR0cDovL2R1bW15LmNvbVwiKVxuXG4gIGNvbnN0IHNlZW5LZXlzID0gbmV3IFNldDxzdHJpbmc+KClcblxuICBjb25zdCBvYmpfc2NoZW1hID0gdHJ5R2V0Wm9kU2NoZW1hQXNPYmplY3Qoc2NoZW1hKVxuICBpZiAoIW9ial9zY2hlbWEpIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIGZvciAoY29uc3Qga2V5IG9mIHVybC5zZWFyY2hQYXJhbXMua2V5cygpKSB7XG4gICAgZm9yIChjb25zdCBbc2NoZW1hS2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMob2JqX3NjaGVtYS5zaGFwZSkpIHtcbiAgICAgIGlmIChpc1pvZFNjaGVtYUFycmF5KHZhbHVlIGFzIHouWm9kVHlwZUFueSkpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGtleSA9PT0gYCR7c2NoZW1hS2V5fVtdYCAmJlxuICAgICAgICAgICFzdXBwb3J0ZWRBcnJheUZvcm1hdHMuaW5jbHVkZXMoXCJicmFja2V0c1wiKVxuICAgICAgICApIHtcbiAgICAgICAgICB0aHJvdyBuZXcgQmFkUmVxdWVzdEV4Y2VwdGlvbih7XG4gICAgICAgICAgICB0eXBlOiBcImludmFsaWRfcXVlcnlfcGFyYW1zXCIsXG4gICAgICAgICAgICBtZXNzYWdlOiBgQnJhY2tldCBzeW50YXggbm90IHN1cHBvcnRlZCBmb3IgcXVlcnkgcGFyYW0gXCIke3NjaGVtYUtleX1cImAsXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGtleV9zY2hlbWEgPSBvYmpfc2NoZW1hLnNoYXBlW2tleV1cblxuICAgIGlmIChrZXlfc2NoZW1hKSB7XG4gICAgICBpZiAoaXNab2RTY2hlbWFBcnJheShrZXlfc2NoZW1hKSkge1xuICAgICAgICBpZiAoc2VlbktleXMuaGFzKGtleSkgJiYgIXN1cHBvcnRlZEFycmF5Rm9ybWF0cy5pbmNsdWRlcyhcInJlcGVhdFwiKSkge1xuICAgICAgICAgIHRocm93IG5ldyBCYWRSZXF1ZXN0RXhjZXB0aW9uKHtcbiAgICAgICAgICAgIHR5cGU6IFwiaW52YWxpZF9xdWVyeV9wYXJhbXNcIixcbiAgICAgICAgICAgIG1lc3NhZ2U6IGBSZXBlYXRlZCBwYXJhbWV0ZXJzIG5vdCBzdXBwb3J0ZWQgZm9yIGR1cGxpY2F0ZSBxdWVyeSBwYXJhbSBcIiR7a2V5fVwiYCxcbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgc2VlbktleXMuYWRkKGtleSlcbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlcXVlc3RJbnB1dDxcbiAgSnNvbkJvZHkgZXh0ZW5kcyB6LlpvZFR5cGVBbnksXG4gIFF1ZXJ5UGFyYW1zIGV4dGVuZHMgei5ab2RUeXBlQW55LFxuICBDb21tb25QYXJhbXMgZXh0ZW5kcyB6LlpvZFR5cGVBbnksXG4gIEZvcm1EYXRhIGV4dGVuZHMgei5ab2RUeXBlQW55LFxuICBKc29uUmVzcG9uc2UgZXh0ZW5kcyB6LlpvZFR5cGVBbnlcbj4ge1xuICBqc29uQm9keT86IEpzb25Cb2R5XG4gIHF1ZXJ5UGFyYW1zPzogUXVlcnlQYXJhbXNcbiAgY29tbW9uUGFyYW1zPzogQ29tbW9uUGFyYW1zXG4gIGZvcm1EYXRhPzogRm9ybURhdGFcbiAganNvblJlc3BvbnNlPzogSnNvblJlc3BvbnNlXG4gIHNob3VsZFZhbGlkYXRlUmVzcG9uc2VzPzogYm9vbGVhblxuICBzaG91bGRWYWxpZGF0ZUdldFJlcXVlc3RCb2R5PzogYm9vbGVhblxuICBzdXBwb3J0ZWRBcnJheUZvcm1hdHM/OiBRdWVyeUFycmF5Rm9ybWF0c1xufVxuXG5jb25zdCB6b2RJc3N1ZVRvU3RyaW5nID0gKGlzc3VlOiB6LlpvZElzc3VlKSA9PiB7XG4gIGlmIChpc3N1ZS5wYXRoLmpvaW4oXCIuXCIpID09PSBcIlwiKSB7XG4gICAgcmV0dXJuIGlzc3VlLm1lc3NhZ2VcbiAgfVxuICBpZiAoaXNzdWUubWVzc2FnZSA9PT0gXCJSZXF1aXJlZFwiKSB7XG4gICAgcmV0dXJuIGAke2lzc3VlLnBhdGguam9pbihcIi5cIil9IGlzIHJlcXVpcmVkYFxuICB9XG4gIHJldHVybiBgJHtpc3N1ZS5tZXNzYWdlfSBmb3IgXCIke2lzc3VlLnBhdGguam9pbihcIi5cIil9XCJgXG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlSnNvblJlc3BvbnNlPEpzb25SZXNwb25zZSBleHRlbmRzIHouWm9kVHlwZUFueT4oXG4gIGpzb25SZXNwb25zZTogSnNvblJlc3BvbnNlIHwgdW5kZWZpbmVkLFxuICByZXM6IE5leHRBcGlSZXNwb25zZVxuKSB7XG4gIGNvbnN0IG9yaWdpbmFsX3Jlc19qc29uID0gcmVzLmpzb25cbiAgY29uc3Qgb3ZlcnJpZGVfcmVzX2pzb24gPSAoanNvbjogYW55KSA9PiB7XG4gICAgY29uc3QgaXNfc3VjY2VzcyA9IHJlcy5zdGF0dXNDb2RlID49IDIwMCAmJiByZXMuc3RhdHVzQ29kZSA8IDMwMFxuICAgIGlmICghaXNfc3VjY2Vzcykge1xuICAgICAgcmV0dXJuIG9yaWdpbmFsX3Jlc19qc29uKGpzb24pXG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGpzb25SZXNwb25zZT8ucGFyc2UoanNvbilcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHRocm93IG5ldyBJbnRlcm5hbFNlcnZlckVycm9yRXhjZXB0aW9uKHtcbiAgICAgICAgdHlwZTogXCJpbnZhbGlkX3Jlc3BvbnNlXCIsXG4gICAgICAgIG1lc3NhZ2U6IFwidGhlIHJlc3BvbnNlIGRvZXMgbm90IG1hdGNoIHdpdGgganNvblJlc3BvbnNlXCIsXG4gICAgICAgIHpvZEVycm9yOiBlcnIsXG4gICAgICB9KVxuICAgIH1cblxuICAgIHJldHVybiBvcmlnaW5hbF9yZXNfanNvbihqc29uKVxuICB9XG4gIHJlcy5qc29uID0gb3ZlcnJpZGVfcmVzX2pzb25cbn1cblxuZXhwb3J0IGNvbnN0IHdpdGhWYWxpZGF0aW9uID1cbiAgPFxuICAgIEpzb25Cb2R5IGV4dGVuZHMgei5ab2RUeXBlQW55LFxuICAgIFF1ZXJ5UGFyYW1zIGV4dGVuZHMgei5ab2RUeXBlQW55LFxuICAgIENvbW1vblBhcmFtcyBleHRlbmRzIHouWm9kVHlwZUFueSxcbiAgICBGb3JtRGF0YSBleHRlbmRzIHouWm9kVHlwZUFueSxcbiAgICBKc29uUmVzcG9uc2UgZXh0ZW5kcyB6LlpvZFR5cGVBbnlcbiAgPihcbiAgICBpbnB1dDogUmVxdWVzdElucHV0PFxuICAgICAgSnNvbkJvZHksXG4gICAgICBRdWVyeVBhcmFtcyxcbiAgICAgIENvbW1vblBhcmFtcyxcbiAgICAgIEZvcm1EYXRhLFxuICAgICAgSnNvblJlc3BvbnNlXG4gICAgPlxuICApID0+XG4gIChuZXh0KSA9PlxuICBhc3luYyAocmVxOiBOZXh0QXBpUmVxdWVzdCwgcmVzOiBOZXh0QXBpUmVzcG9uc2UpID0+IHtcbiAgICBjb25zdCB7IHN1cHBvcnRlZEFycmF5Rm9ybWF0cyA9IERFRkFVTFRfQVJSQVlfRk9STUFUUyB9ID0gaW5wdXRcblxuICAgIGlmIChcbiAgICAgIChpbnB1dC5mb3JtRGF0YSAmJiBpbnB1dC5qc29uQm9keSkgfHxcbiAgICAgIChpbnB1dC5mb3JtRGF0YSAmJiBpbnB1dC5jb21tb25QYXJhbXMpXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3QgdXNlIGZvcm1EYXRhIHdpdGgganNvbkJvZHkgb3IgY29tbW9uUGFyYW1zXCIpXG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgKHJlcS5tZXRob2QgPT09IFwiUE9TVFwiIHx8IHJlcS5tZXRob2QgPT09IFwiUEFUQ0hcIikgJiZcbiAgICAgIChpbnB1dC5qc29uQm9keSB8fCBpbnB1dC5jb21tb25QYXJhbXMpICYmXG4gICAgICAhcmVxLmhlYWRlcnNbXCJjb250ZW50LXR5cGVcIl0/LmluY2x1ZGVzKFwiYXBwbGljYXRpb24vanNvblwiKSAmJlxuICAgICAgIV8uaXNFbXB0eShyZXEuYm9keSlcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBCYWRSZXF1ZXN0RXhjZXB0aW9uKHtcbiAgICAgICAgdHlwZTogXCJpbnZhbGlkX2NvbnRlbnRfdHlwZVwiLFxuICAgICAgICBtZXNzYWdlOiBgJHtyZXEubWV0aG9kfSByZXF1ZXN0cyBtdXN0IGhhdmUgQ29udGVudC1UeXBlIGhlYWRlciB3aXRoIFwiYXBwbGljYXRpb24vanNvblwiYCxcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgaW5wdXQuZm9ybURhdGEgJiZcbiAgICAgIHJlcS5tZXRob2QgIT09IFwiR0VUXCIgJiZcbiAgICAgICFyZXEuaGVhZGVyc1tcImNvbnRlbnQtdHlwZVwiXT8uaW5jbHVkZXMoXG4gICAgICAgIFwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkXCJcbiAgICAgIClcbiAgICAgIC8vIFRPRE8gZXZlbnR1YWxseSB3ZSBzaG91bGQgc3VwcG9ydCBtdWx0aXBhcnQvZm9ybS1kYXRhXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgQmFkUmVxdWVzdEV4Y2VwdGlvbih7XG4gICAgICAgIHR5cGU6IFwiaW52YWxpZF9jb250ZW50X3R5cGVcIixcbiAgICAgICAgbWVzc2FnZTogYE11c3QgaGF2ZSBDb250ZW50LVR5cGUgaGVhZGVyIHdpdGggXCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWRcImAsXG4gICAgICB9KVxuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBvcmlnaW5hbF9jb21iaW5lZF9wYXJhbXMgPSB7IC4uLnJlcS5xdWVyeSwgLi4ucmVxLmJvZHkgfVxuXG4gICAgICBjb25zdCB3aWxsVmFsaWRhdGVSZXF1ZXN0Qm9keSA9IGlucHV0LnNob3VsZFZhbGlkYXRlR2V0UmVxdWVzdEJvZHlcbiAgICAgICAgPyB0cnVlXG4gICAgICAgIDogcmVxLm1ldGhvZCAhPT0gXCJHRVRcIiAmJiByZXEubWV0aG9kICE9PSBcIkRFTEVURVwiXG5cbiAgICAgIGNvbnN0IGlzRm9ybURhdGEgPSBCb29sZWFuKGlucHV0LmZvcm1EYXRhKVxuXG4gICAgICBpZiAoaXNGb3JtRGF0YSAmJiB3aWxsVmFsaWRhdGVSZXF1ZXN0Qm9keSkge1xuICAgICAgICByZXEuYm9keSA9IGlucHV0LmZvcm1EYXRhPy5wYXJzZShyZXEuYm9keSlcbiAgICAgIH1cblxuICAgICAgaWYgKCFpc0Zvcm1EYXRhICYmIHdpbGxWYWxpZGF0ZVJlcXVlc3RCb2R5KSB7XG4gICAgICAgIHJlcS5ib2R5ID0gaW5wdXQuanNvbkJvZHk/LnBhcnNlKHJlcS5ib2R5KVxuICAgICAgfVxuXG4gICAgICBpZiAoaW5wdXQucXVlcnlQYXJhbXMpIHtcbiAgICAgICAgaWYgKCFyZXEudXJsKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwicmVxLnVybCBpcyB1bmRlZmluZWRcIilcbiAgICAgICAgfVxuXG4gICAgICAgIHZhbGlkYXRlUXVlcnlQYXJhbXMocmVxLnVybCwgaW5wdXQucXVlcnlQYXJhbXMsIHN1cHBvcnRlZEFycmF5Rm9ybWF0cylcblxuICAgICAgICByZXEucXVlcnkgPSBwYXJzZVF1ZXJ5UGFyYW1zKFxuICAgICAgICAgIGlucHV0LnF1ZXJ5UGFyYW1zLFxuICAgICAgICAgIHJlcS5xdWVyeSxcbiAgICAgICAgICBzdXBwb3J0ZWRBcnJheUZvcm1hdHNcbiAgICAgICAgKVxuICAgICAgfVxuXG4gICAgICBpZiAoaW5wdXQuY29tbW9uUGFyYW1zKSB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBhcyBjb21tb25QYXJhbXMgaW5jbHVkZXMgcXVlcnkgcGFyYW1zLCB3ZSBjYW4gdXNlIHRoZSBwYXJzZVF1ZXJ5UGFyYW1zIGZ1bmN0aW9uXG4gICAgICAgICAqL1xuICAgICAgICA7KHJlcSBhcyBhbnkpLmNvbW1vblBhcmFtcyA9IHBhcnNlUXVlcnlQYXJhbXMoXG4gICAgICAgICAgaW5wdXQuY29tbW9uUGFyYW1zLFxuICAgICAgICAgIG9yaWdpbmFsX2NvbWJpbmVkX3BhcmFtcyxcbiAgICAgICAgICBzdXBwb3J0ZWRBcnJheUZvcm1hdHNcbiAgICAgICAgKVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEJhZFJlcXVlc3RFeGNlcHRpb24pIHtcbiAgICAgICAgdGhyb3cgZXJyb3JcbiAgICAgIH1cblxuICAgICAgaWYgKGVycm9yLm5hbWUgPT09IFwiWm9kRXJyb3JcIikge1xuICAgICAgICBsZXQgbWVzc2FnZVxuICAgICAgICBpZiAoZXJyb3IuaXNzdWVzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgIGNvbnN0IGlzc3VlID0gZXJyb3IuaXNzdWVzWzBdXG4gICAgICAgICAgbWVzc2FnZSA9IHpvZElzc3VlVG9TdHJpbmcoaXNzdWUpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgbWVzc2FnZV9jb21wb25lbnRzOiBzdHJpbmdbXSA9IFtdXG4gICAgICAgICAgZm9yIChjb25zdCBpc3N1ZSBvZiBlcnJvci5pc3N1ZXMpIHtcbiAgICAgICAgICAgIG1lc3NhZ2VfY29tcG9uZW50cy5wdXNoKHpvZElzc3VlVG9TdHJpbmcoaXNzdWUpKVxuICAgICAgICAgIH1cbiAgICAgICAgICBtZXNzYWdlID1cbiAgICAgICAgICAgIGAke2Vycm9yLmlzc3Vlcy5sZW5ndGh9IElucHV0IEVycm9yczogYCArXG4gICAgICAgICAgICBtZXNzYWdlX2NvbXBvbmVudHMuam9pbihcIiwgXCIpXG4gICAgICAgIH1cblxuICAgICAgICB0aHJvdyBuZXcgQmFkUmVxdWVzdEV4Y2VwdGlvbih7XG4gICAgICAgICAgdHlwZTogXCJpbnZhbGlkX2lucHV0XCIsXG4gICAgICAgICAgbWVzc2FnZSxcbiAgICAgICAgICB2YWxpZGF0aW9uX2Vycm9yczogZXJyb3IuZm9ybWF0KCksXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIHRocm93IG5ldyBCYWRSZXF1ZXN0RXhjZXB0aW9uKHtcbiAgICAgICAgdHlwZTogXCJpbnZhbGlkX2lucHV0XCIsXG4gICAgICAgIG1lc3NhZ2U6IFwiRXJyb3Igd2hpbGUgcGFyc2luZyBpbnB1dFwiLFxuICAgICAgfSlcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiB0aGlzIHdpbGwgb3ZlcnJpZGUgdGhlIHJlcy5qc29uIG1ldGhvZCB0byB2YWxpZGF0ZSB0aGUgcmVzcG9uc2VcbiAgICAgKi9cbiAgICBpZiAoaW5wdXQuc2hvdWxkVmFsaWRhdGVSZXNwb25zZXMpIHtcbiAgICAgIHZhbGlkYXRlSnNvblJlc3BvbnNlKGlucHV0Lmpzb25SZXNwb25zZSwgcmVzKVxuICAgIH1cblxuICAgIHJldHVybiBuZXh0KHJlcSwgcmVzKVxuICB9XG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhWYWxpZGF0aW9uXG4iLCAiaW1wb3J0IHsgTmV4dEFwaVJlc3BvbnNlLCBOZXh0QXBpUmVxdWVzdCB9IGZyb20gXCJuZXh0XCJcbmltcG9ydCB7IHdpdGhFeGNlcHRpb25IYW5kbGluZyB9IGZyb20gXCIuLi9uZXh0anMtZXhjZXB0aW9uLW1pZGRsZXdhcmVcIlxuaW1wb3J0IHdyYXBwZXJzLCB7IE1pZGRsZXdhcmUgfSBmcm9tIFwiLi4vd3JhcHBlcnNcIlxuaW1wb3J0IHtcbiAgQ3JlYXRlV2l0aFJvdXRlU3BlY0Z1bmN0aW9uLFxuICBRdWVyeUFycmF5Rm9ybWF0cyxcbiAgUm91dGVTcGVjLFxufSBmcm9tIFwiLi4vdHlwZXNcIlxuaW1wb3J0IHdpdGhNZXRob2RzLCB7IEhUVFBNZXRob2RzIH0gZnJvbSBcIi4vbWlkZGxld2FyZXMvd2l0aC1tZXRob2RzXCJcbmltcG9ydCB3aXRoVmFsaWRhdGlvbiBmcm9tIFwiLi9taWRkbGV3YXJlcy93aXRoLXZhbGlkYXRpb25cIlxuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIlxuXG50eXBlIFBhcmFtRGVmID0gei5ab2RUeXBlQW55IHwgei5ab2RFZmZlY3RzPHouWm9kVHlwZUFueT5cblxuZXhwb3J0IGNvbnN0IGNoZWNrUm91dGVTcGVjID0gPFxuICBBdXRoVHlwZSBleHRlbmRzIHN0cmluZyA9IHN0cmluZyxcbiAgTWV0aG9kcyBleHRlbmRzIEhUVFBNZXRob2RzW10gPSBIVFRQTWV0aG9kc1tdLFxuICBKc29uQm9keSBleHRlbmRzIFBhcmFtRGVmID0gei5ab2RUeXBlQW55LFxuICBRdWVyeVBhcmFtcyBleHRlbmRzIFBhcmFtRGVmID0gei5ab2RUeXBlQW55LFxuICBDb21tb25QYXJhbXMgZXh0ZW5kcyBQYXJhbURlZiA9IHouWm9kVHlwZUFueSxcbiAgTWlkZGxld2FyZXMgZXh0ZW5kcyByZWFkb25seSBNaWRkbGV3YXJlPGFueSwgYW55PltdID0gcmVhZG9ubHkgTWlkZGxld2FyZTxcbiAgICBhbnksXG4gICAgYW55XG4gID5bXSxcbiAgRm9ybURhdGEgZXh0ZW5kcyBQYXJhbURlZiA9IHouWm9kVHlwZUFueSxcbiAgU3BlYyBleHRlbmRzIFJvdXRlU3BlYzxcbiAgICBBdXRoVHlwZSxcbiAgICBNZXRob2RzLFxuICAgIEpzb25Cb2R5LFxuICAgIFF1ZXJ5UGFyYW1zLFxuICAgIENvbW1vblBhcmFtcyxcbiAgICBNaWRkbGV3YXJlcyxcbiAgICBGb3JtRGF0YVxuICA+ID0gUm91dGVTcGVjPFxuICAgIEF1dGhUeXBlLFxuICAgIE1ldGhvZHMsXG4gICAgSnNvbkJvZHksXG4gICAgUXVlcnlQYXJhbXMsXG4gICAgQ29tbW9uUGFyYW1zLFxuICAgIE1pZGRsZXdhcmVzLFxuICAgIEZvcm1EYXRhXG4gID5cbj4oXG4gIHNwZWM6IFNwZWNcbik6IHN0cmluZyBleHRlbmRzIFNwZWNbXCJhdXRoXCJdXG4gID8gYHlvdXIgcm91dGUgc3BlYyBpcyB1bmRlcnNwZWNpZmllZCwgYWRkIFwiYXMgY29uc3RcImBcbiAgOiBTcGVjID0+IHNwZWMgYXMgYW55XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX0FSUkFZX0ZPUk1BVFM6IFF1ZXJ5QXJyYXlGb3JtYXRzID0gW1xuICBcImJyYWNrZXRzXCIsXG4gIFwiY29tbWFcIixcbiAgXCJyZXBlYXRcIixcbl1cblxuZXhwb3J0IGNvbnN0IGNyZWF0ZVdpdGhSb3V0ZVNwZWM6IENyZWF0ZVdpdGhSb3V0ZVNwZWNGdW5jdGlvbiA9ICgoXG4gIHNldHVwUGFyYW1zXG4pID0+IHtcbiAgY29uc3Qge1xuICAgIGF1dGhNaWRkbGV3YXJlTWFwID0ge30sXG4gICAgZ2xvYmFsTWlkZGxld2FyZXMgPSBbXSxcbiAgICBnbG9iYWxNaWRkbGV3YXJlc0FmdGVyQXV0aCA9IFtdLFxuICAgIHNob3VsZFZhbGlkYXRlUmVzcG9uc2VzLFxuICAgIHNob3VsZFZhbGlkYXRlR2V0UmVxdWVzdEJvZHkgPSB0cnVlLFxuICAgIGV4Y2VwdGlvbkhhbmRsaW5nTWlkZGxld2FyZSA9IHdpdGhFeGNlcHRpb25IYW5kbGluZyh7XG4gICAgICBhZGRPa1N0YXR1czogc2V0dXBQYXJhbXMuYWRkT2tTdGF0dXMsXG4gICAgICBleGNlcHRpb25IYW5kbGluZ09wdGlvbnM6IHtcbiAgICAgICAgZ2V0RXJyb3JDb250ZXh0OiAocmVxLCBlcnJvcikgPT4ge1xuICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgICAgICAgICAgIHJldHVybiB7fVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBlcnJvclxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9KSBhcyBhbnksXG4gICAgZ2xvYmFsU2NoZW1hcyA9IHNldHVwUGFyYW1zLmFkZE9rU3RhdHVzXG4gICAgICA/IHtcbiAgICAgICAgICBvazogei5ib29sZWFuKCksXG4gICAgICAgIH1cbiAgICAgIDoge30sXG4gICAgc3VwcG9ydGVkQXJyYXlGb3JtYXRzID0gREVGQVVMVF9BUlJBWV9GT1JNQVRTLFxuICAgIG9uTXVsdGlwbGVBdXRoTWlkZGxld2FyZUZhaWx1cmVzLFxuICB9ID0gc2V0dXBQYXJhbXNcblxuICBjb25zdCB3aXRoUm91dGVTcGVjID0gKHNwZWM6IFJvdXRlU3BlYykgPT4ge1xuICAgIGNvbnN0IGNyZWF0ZVJvdXRlRXhwb3J0ID0gKHVzZXJEZWZpbmVkUm91dGVGbikgPT4ge1xuICAgICAgY29uc3Qgcm9vdFJlcXVlc3RIYW5kbGVyID0gYXN5bmMgKFxuICAgICAgICByZXE6IE5leHRBcGlSZXF1ZXN0LFxuICAgICAgICByZXM6IE5leHRBcGlSZXNwb25zZVxuICAgICAgKSA9PiB7XG4gICAgICAgIGF1dGhNaWRkbGV3YXJlTWFwW1wibm9uZVwiXSA9IChuZXh0KSA9PiBuZXh0XG5cbiAgICAgICAgY29uc3QgYXV0aE1pZGRsZXdhcmVzID0gKFxuICAgICAgICAgIEFycmF5LmlzQXJyYXkoc3BlYy5hdXRoKSA/IHNwZWMuYXV0aCA6IFtzcGVjLmF1dGhdXG4gICAgICAgICkubWFwKChhdXRoVHlwZSkgPT4gYXV0aE1pZGRsZXdhcmVNYXBbYXV0aFR5cGVdKVxuICAgICAgICBjb25zdCB1bmRlZmluZWRBdXRoVHlwZSA9IGF1dGhNaWRkbGV3YXJlcy5maW5kKChtdykgPT4gIW13KVxuICAgICAgICBpZiAodW5kZWZpbmVkQXV0aFR5cGUpXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIGF1dGggdHlwZTogJHt1bmRlZmluZWRBdXRoVHlwZX1gKVxuXG4gICAgICAgIGNvbnN0IGZpcnN0QXV0aE1pZGRsZXdhcmVUaGF0U3VjY2VlZHMgPSAobmV4dCkgPT4gYXN5bmMgKHJlcSwgcmVzKSA9PiB7XG4gICAgICAgICAgbGV0IGVycm9yczogdW5rbm93bltdID0gW11cbiAgICAgICAgICBsZXQgZGlkQXV0aE1pZGRsZXdhcmVUaHJvdyA9IHRydWVcblxuICAgICAgICAgIGZvciAoY29uc3QgbWlkZGxld2FyZSBvZiBhdXRoTWlkZGxld2FyZXMpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIHJldHVybiBhd2FpdCBtaWRkbGV3YXJlKCguLi5hcmdzKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gT3RoZXJ3aXNlIGVycm9ycyB1bnJlbGF0ZWQgdG8gYXV0aCB0aHJvd24gYnkgYnVpbHQtaW4gbWlkZGxld2FyZSAod2l0aE1ldGhvZHMsIHdpdGhWYWxpZGF0aW9uKSB3aWxsIGJlIGNhdWdodCBoZXJlXG4gICAgICAgICAgICAgICAgZGlkQXV0aE1pZGRsZXdhcmVUaHJvdyA9IGZhbHNlXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5leHQoLi4uYXJncylcbiAgICAgICAgICAgICAgfSkocmVxLCByZXMpXG4gICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICBlcnJvcnMucHVzaChlcnJvcilcbiAgICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAob25NdWx0aXBsZUF1dGhNaWRkbGV3YXJlRmFpbHVyZXMgJiYgZGlkQXV0aE1pZGRsZXdhcmVUaHJvdykge1xuICAgICAgICAgICAgb25NdWx0aXBsZUF1dGhNaWRkbGV3YXJlRmFpbHVyZXMoZXJyb3JzKVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHRocm93IGVycm9yc1tlcnJvcnMubGVuZ3RoIC0gMV1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB3cmFwcGVycyhcbiAgICAgICAgICAuLi4oKGV4Y2VwdGlvbkhhbmRsaW5nTWlkZGxld2FyZVxuICAgICAgICAgICAgPyBbZXhjZXB0aW9uSGFuZGxpbmdNaWRkbGV3YXJlXVxuICAgICAgICAgICAgOiBbXSkgYXMgW2FueV0pLFxuICAgICAgICAgIC4uLigoZ2xvYmFsTWlkZGxld2FyZXMgfHwgW10pIGFzIFtdKSxcbiAgICAgICAgICBmaXJzdEF1dGhNaWRkbGV3YXJlVGhhdFN1Y2NlZWRzLFxuICAgICAgICAgIC4uLigoZ2xvYmFsTWlkZGxld2FyZXNBZnRlckF1dGggfHwgW10pIGFzIFtdKSxcbiAgICAgICAgICAuLi4oKHNwZWMubWlkZGxld2FyZXMgfHwgW10pIGFzIFtdKSxcbiAgICAgICAgICB3aXRoTWV0aG9kcyhzcGVjLm1ldGhvZHMpLFxuICAgICAgICAgIHdpdGhWYWxpZGF0aW9uKHtcbiAgICAgICAgICAgIGpzb25Cb2R5OiBzcGVjLmpzb25Cb2R5LFxuICAgICAgICAgICAgcXVlcnlQYXJhbXM6IHNwZWMucXVlcnlQYXJhbXMsXG4gICAgICAgICAgICBjb21tb25QYXJhbXM6IHNwZWMuY29tbW9uUGFyYW1zLFxuICAgICAgICAgICAgZm9ybURhdGE6IHNwZWMuZm9ybURhdGEsXG4gICAgICAgICAgICBqc29uUmVzcG9uc2U6IHNwZWMuanNvblJlc3BvbnNlLFxuICAgICAgICAgICAgc2hvdWxkVmFsaWRhdGVSZXNwb25zZXMsXG4gICAgICAgICAgICBzaG91bGRWYWxpZGF0ZUdldFJlcXVlc3RCb2R5LFxuICAgICAgICAgICAgc3VwcG9ydGVkQXJyYXlGb3JtYXRzLFxuICAgICAgICAgIH0pLFxuICAgICAgICAgIHVzZXJEZWZpbmVkUm91dGVGblxuICAgICAgICApKHJlcSBhcyBhbnksIHJlcylcbiAgICAgIH1cblxuICAgICAgcm9vdFJlcXVlc3RIYW5kbGVyLl9zZXR1cFBhcmFtcyA9IHNldHVwUGFyYW1zXG4gICAgICByb290UmVxdWVzdEhhbmRsZXIuX3JvdXRlU3BlYyA9IHNwZWNcblxuICAgICAgcmV0dXJuIHJvb3RSZXF1ZXN0SGFuZGxlclxuICAgIH1cblxuICAgIGNyZWF0ZVJvdXRlRXhwb3J0Ll9zZXR1cFBhcmFtcyA9IHNldHVwUGFyYW1zXG4gICAgY3JlYXRlUm91dGVFeHBvcnQuX3JvdXRlU3BlYyA9IHNwZWNcblxuICAgIHJldHVybiBjcmVhdGVSb3V0ZUV4cG9ydFxuICB9XG5cbiAgd2l0aFJvdXRlU3BlYy5fc2V0dXBQYXJhbXMgPSBzZXR1cFBhcmFtc1xuXG4gIHJldHVybiB3aXRoUm91dGVTcGVjXG59KSBhcyBhbnlcbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLCtCQUFBQTtBQUFBLEVBQUE7QUFBQTtBQUFBOzs7QUN3Qk8sSUFBTSxnQkFBTixjQUE0QixNQUFNO0FBQUEsRUFHdkMsWUFDUyxRQUNBLFVBQ1AsU0FDQTtBQUNBLFVBQU0sU0FBUyxPQUFPO0FBSmY7QUFDQTtBQUtQLFFBQUksTUFBTSxtQkFBbUI7QUFDM0IsWUFBTSxrQkFBa0IsTUFBTSxLQUFLLFdBQVc7QUFBQSxJQUNoRDtBQUVBLFNBQUssVUFBVSw0QkFBVyxFQUFFLE1BQU0sS0FBSztBQUFBLEVBQ3pDO0FBQUEsRUFFQSxXQUFXO0FBQ1QsV0FBTyxrQkFBa0IsS0FBSyxXQUFXLEtBQUssU0FBUyxZQUFZLEtBQUssU0FBUztBQUFBLEVBQ25GO0FBQ0Y7QUFpQk8sSUFBTSxzQkFBTixjQUFrQyxjQUFjO0FBQUEsRUFDckQsWUFDUyxVQUNQLFNBQ0E7QUFDQSxVQUFNLEtBQUssVUFBVSxPQUFPO0FBSHJCO0FBQUEsRUFJVDtBQUNGO0FBRU8sSUFBTSx3QkFBTixjQUFvQyxjQUFjO0FBQUEsRUFDdkQsWUFDUyxVQUNQLFNBQ0E7QUFDQSxVQUFNLEtBQUssVUFBVSxPQUFPO0FBSHJCO0FBQUEsRUFJVDtBQUNGO0FBRU8s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RUFBRUQsTUFBS0MsSUFBRztBQUFBLFlBQ2IsU0FBUyxPQUFQO0FBQ0EscUJBQU8sS0FBSyxLQUFLO0FBQ2pCO0FBQUEsWUFDRjtBQUFBLFVBQ0Y7QUFFQSxjQUFJLG9DQUFvQyx3QkFBd0I7QUFDOUQsNkNBQWlDLE1BQU07QUFBQSxVQUN6QztBQUVBLGdCQUFNLE9BQU8sT0FBTyxTQUFTO0FBQUEsUUFDL0I7QUFFQSxlQUFPO0FBQUEsVUFDTCxHQUFLLDhCQUNELENBQUMsMkJBQTJCLElBQzVCLENBQUM7QUFBQSxVQUNMLEdBQUsscUJBQXFCLENBQUM7QUFBQSxVQUMzQjtBQUFBLFVBQ0EsR0FBSyw4QkFBOEIsQ0FBQztBQUFBLFVBQ3BDLEdBQUssS0FBSyxlQUFlLENBQUM7QUFBQSxVQUMxQixxQkFBWSxLQUFLLE9BQU87QUFBQSxVQUN4Qix3QkFBZTtBQUFBLFlBQ2IsVUFBVSxLQUFLO0FBQUEsWUFDZixhQUFhLEtBQUs7QUFBQSxZQUNsQixjQUFjLEtBQUs7QUFBQSxZQUNuQixVQUFVLEtBQUs7QUFBQSxZQUNmLGNBQWMsS0FBSztBQUFBLFlBQ25CO0FBQUEsWUFDQTtBQUFBLFlBQ0E7QUFBQSxVQUNGLENBQUM7QUFBQSxVQUNEO0FBQUEsUUFDRixFQUFFLEtBQVksR0FBRztBQUFBLE1BQ25CO0FBRUEseUJBQW1CLGVBQWU7QUFDbEMseUJBQW1CLGFBQWE7QUFFaEMsYUFBTztBQUFBLElBQ1Q7QUFFQSxzQkFBa0IsZUFBZTtBQUNqQyxzQkFBa0IsYUFBYTtBQUUvQixXQUFPO0FBQUEsRUFDVDtBQUVBLGdCQUFjLGVBQWU7QUFFN0IsU0FBTztBQUNUOyIsCiAgIm5hbWVzIjogWyJ3aXRoRXhjZXB0aW9uSGFuZGxpbmciLCAid2l0aEV4Y2VwdGlvbkhhbmRsaW5nIiwgIl8iLCAiaW1wb3J0X3pvZCIsICJ3aXRoRXhjZXB0aW9uSGFuZGxpbmciLCAicmVxIiwgInJlcyJdCn0K
519
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL2luZGV4LnRzIiwgIi4uL3NyYy9uZXh0anMtZXhjZXB0aW9uLW1pZGRsZXdhcmUvaHR0cC1leGNlcHRpb25zLnRzIiwgIi4uL3NyYy9uZXh0anMtZXhjZXB0aW9uLW1pZGRsZXdhcmUvd2l0aC1leGNlcHRpb24taGFuZGxpbmcudHMiLCAiLi4vc3JjL25leHRqcy1leGNlcHRpb24tbWlkZGxld2FyZS93aXRoLW9rLXN0YXR1cy50cyIsICIuLi9zcmMvbmV4dGpzLWV4Y2VwdGlvbi1taWRkbGV3YXJlL2luZGV4LnRzIiwgIi4uL3NyYy93cmFwcGVycy9pbmRleC50cyIsICIuLi9zcmMvd2l0aC1yb3V0ZS1zcGVjL21pZGRsZXdhcmVzL3dpdGgtbWV0aG9kcy50cyIsICIuLi9zcmMvd2l0aC1yb3V0ZS1zcGVjL21pZGRsZXdhcmVzL3dpdGgtdmFsaWRhdGlvbi50cyIsICIuLi9zcmMvd2l0aC1yb3V0ZS1zcGVjL2luZGV4LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJleHBvcnQgKiBmcm9tIFwiLi9uZXh0anMtZXhjZXB0aW9uLW1pZGRsZXdhcmVcIlxuZXhwb3J0ICogZnJvbSBcIi4vd2l0aC1yb3V0ZS1zcGVjXCJcbmV4cG9ydCB7IHdyYXBwZXJzIH0gZnJvbSBcIi4vd3JhcHBlcnNcIlxuZXhwb3J0ICogZnJvbSBcIi4vdHlwZXNcIlxuIiwgImV4cG9ydCB0eXBlIEh0dHBFeGNlcHRpb25NZXRhZGF0YSA9IHtcbiAgdHlwZTogc3RyaW5nXG4gIG1lc3NhZ2U6IHN0cmluZ1xuICBkYXRhPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbn0gJiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuXG5leHBvcnQgaW50ZXJmYWNlIFRocm93aW5nT3B0aW9ucyB7XG4gIGpzb24/OiBib29sZWFuXG59XG5cbi8qKlxuICogVGhyb3cgSHR0cEV4Y2VwdGlvbnMgaW5zaWRlIEFQSSBlbmRwb2ludHMgdG8gZ2VuZXJhdGUgbmljZSBlcnJvciBtZXNzYWdlc1xuICpcbiAqIEBleGFtcGxlXG4gKiBgYGBcbiAqIGlmIChiYWRfc291cHMuaW5jbHVkZXMoc291cF9wYXJhbSkpIHtcbiAqICAgdGhyb3cgbmV3IEh0dHBFeGNlcHRpb24oNDAwLCB7XG4gKiAgICAgIHR5cGU6IFwiY2FudF9tYWtlX3NvdXBcIixcbiAqICAgICAgbWVzc2FnZTogXCJTb3VwIHdhcyB0b28gZGlmZmljdWx0LCBwbGVhc2Ugc3BlY2lmeSBhIGRpZmZlcmVudCBzb3VwXCJcbiAqICAgIH0pXG4gKiB9XG4gKiBgYGBcbiAqXG4gKiovXG5leHBvcnQgY2xhc3MgSHR0cEV4Y2VwdGlvbiBleHRlbmRzIEVycm9yIHtcbiAgb3B0aW9uczogVGhyb3dpbmdPcHRpb25zXG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIHN0YXR1czogbnVtYmVyLFxuICAgIHB1YmxpYyBtZXRhZGF0YTogSHR0cEV4Y2VwdGlvbk1ldGFkYXRhLFxuICAgIG9wdGlvbnM/OiBUaHJvd2luZ09wdGlvbnNcbiAgKSB7XG4gICAgc3VwZXIobWV0YWRhdGEubWVzc2FnZSlcblxuICAgIGlmIChFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSkge1xuICAgICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgdGhpcy5jb25zdHJ1Y3RvcilcbiAgICB9XG5cbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zID8/IHsganNvbjogdHJ1ZSB9XG4gIH1cblxuICB0b1N0cmluZygpIHtcbiAgICByZXR1cm4gYEh0dHBFeGNlcHRpb246ICR7dGhpcy5zdGF0dXN9LCAke3RoaXMubWV0YWRhdGEubWVzc2FnZX0gKCR7dGhpcy5tZXRhZGF0YS50eXBlfSlgXG4gIH1cbn1cblxuLyoqXG4gKiBUaHJvdyBCYWRSZXF1ZXN0RXhjZXB0aW9uIGluc2lkZSBBUEkgZW5kcG9pbnRzIHRoYXQgd2VyZSBwcm92aWRlZCBpbmNvcnJlY3RcbiAqIHBhcmFtZXRlcnMgb3IgYm9keVxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGBcbiAqIGlmIChiYWRfc291cHMuaW5jbHVkZXMoc291cF9wYXJhbSkpIHtcbiAqICAgdGhyb3cgbmV3IEJhZFJlcXVlc3RFeGNlcHRpb24oe1xuICogICAgIHR5cGU6IFwiY2FudF9tYWtlX3NvdXBcIixcbiAqICAgICBtZXNzYWdlOiBcIlNvdXAgd2FzIHRvbyBkaWZmaWN1bHQsIHBsZWFzZSBzcGVjaWZ5IGEgZGlmZmVyZW50IHNvdXBcIixcbiAqICAgfSlcbiAqIH1cbiAqIGBgYFxuICpcbiAqKi9cbmV4cG9ydCBjbGFzcyBCYWRSZXF1ZXN0RXhjZXB0aW9uIGV4dGVuZHMgSHR0cEV4Y2VwdGlvbiB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBtZXRhZGF0YTogSHR0cEV4Y2VwdGlvbk1ldGFkYXRhLFxuICAgIG9wdGlvbnM/OiBUaHJvd2luZ09wdGlvbnNcbiAgKSB7XG4gICAgc3VwZXIoNDAwLCBtZXRhZGF0YSwgb3B0aW9ucylcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgVW5hdXRob3JpemVkRXhjZXB0aW9uIGV4dGVuZHMgSHR0cEV4Y2VwdGlvbiB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBtZXRhZGF0YTogSHR0cEV4Y2VwdGlvbk1ldGFkYXRhLFxuICAgIG9wdGlvbnM/OiBUaHJvd2luZ09wdGlvbnNcbiAgKSB7XG4gICAgc3VwZXIoNDAxLCBtZXRhZGF0YSwgb3B0aW9ucylcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgTm90Rm91bmRFeGNlcHRpb24gZXh0ZW5kcyBIdHRwRXhjZXB0aW9uIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIG1ldGFkYXRhOiBIdHRwRXhjZXB0aW9uTWV0YWRhdGEsXG4gICAgb3B0aW9ucz86IFRocm93aW5nT3B0aW9uc1xuICApIHtcbiAgICBzdXBlcig0MDQsIG1ldGFkYXRhLCBvcHRpb25zKVxuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBNZXRob2ROb3RBbGxvd2VkRXhjZXB0aW9uIGV4dGVuZHMgSHR0cEV4Y2VwdGlvbiB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBtZXRhZGF0YTogSHR0cEV4Y2VwdGlvbk1ldGFkYXRhLFxuICAgIG9wdGlvbnM/OiBUaHJvd2luZ09wdGlvbnNcbiAgKSB7XG4gICAgc3VwZXIoNDA1LCBtZXRhZGF0YSwgb3B0aW9ucylcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgSW50ZXJuYWxTZXJ2ZXJFcnJvckV4Y2VwdGlvbiBleHRlbmRzIEh0dHBFeGNlcHRpb24ge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgbWV0YWRhdGE6IEh0dHBFeGNlcHRpb25NZXRhZGF0YSxcbiAgICBvcHRpb25zPzogVGhyb3dpbmdPcHRpb25zXG4gICkge1xuICAgIHN1cGVyKDUwMCwgbWV0YWRhdGEsIG9wdGlvbnMpXG4gIH1cbn1cbiIsICJpbXBvcnQgeyBOZXh0QXBpUmVxdWVzdCwgTmV4dEFwaVJlc3BvbnNlIH0gZnJvbSBcIm5leHRcIlxuaW1wb3J0IHsgSHR0cEV4Y2VwdGlvbiB9IGZyb20gXCIuL2h0dHAtZXhjZXB0aW9uc1wiXG5cbmV4cG9ydCBpbnRlcmZhY2UgV2l0aEV4Y2VwdGlvbkhhbmRsaW5nT3B0aW9ucyB7XG4gIGdldEVycm9yQ29udGV4dD86IChcbiAgICByZXE6IE5leHRBcGlSZXF1ZXN0LFxuICAgIGVycm9yOiBFcnJvclxuICApID0+IFJlY29yZDxzdHJpbmcsIHVua25vd24+XG59XG5cbmNvbnN0IHdpdGhFeGNlcHRpb25IYW5kbGluZyA9XG4gIChvcHRpb25zOiBXaXRoRXhjZXB0aW9uSGFuZGxpbmdPcHRpb25zID0ge30pID0+XG4gIChuZXh0OiAocmVxOiBOZXh0QXBpUmVxdWVzdCwgcmVzOiBOZXh0QXBpUmVzcG9uc2UpID0+IFByb21pc2U8dm9pZD4pID0+XG4gIGFzeW5jIChyZXE6IE5leHRBcGlSZXF1ZXN0LCByZXM6IE5leHRBcGlSZXNwb25zZSkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBuZXh0KHJlcSwgcmVzKVxuICAgIH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG4gICAgICBsZXQgZXJyb3JDb250ZXh0OiBhbnkgPSB7fVxuXG4gICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICBlcnJvckNvbnRleHQuc3RhY2sgPSBlcnJvci5zdGFja1xuICAgICAgfVxuXG4gICAgICBlcnJvckNvbnRleHQgPSBvcHRpb25zLmdldEVycm9yQ29udGV4dFxuICAgICAgICA/IG9wdGlvbnMuZ2V0RXJyb3JDb250ZXh0KHJlcSwgZXJyb3JDb250ZXh0KVxuICAgICAgICA6IGVycm9yQ29udGV4dFxuXG4gICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBIdHRwRXhjZXB0aW9uKSB7XG4gICAgICAgIGlmIChlcnJvci5vcHRpb25zLmpzb24pIHtcbiAgICAgICAgICByZXMuc3RhdHVzKGVycm9yLnN0YXR1cykuanNvbih7XG4gICAgICAgICAgICBlcnJvcjoge1xuICAgICAgICAgICAgICAuLi5lcnJvci5tZXRhZGF0YSxcbiAgICAgICAgICAgICAgLi4uZXJyb3JDb250ZXh0LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KVxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlcy5zdGF0dXMoZXJyb3Iuc3RhdHVzKS5lbmQoZXJyb3IubWV0YWRhdGEubWVzc2FnZSlcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgZm9ybWF0dGVkRXJyb3IgPSBuZXcgSHR0cEV4Y2VwdGlvbig1MDAsIHtcbiAgICAgICAgICB0eXBlOiBcImludGVybmFsX3NlcnZlcl9lcnJvclwiLFxuICAgICAgICAgIG1lc3NhZ2U6IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogXCJVbmtub3duIGVycm9yXCIsXG4gICAgICAgIH0pXG5cbiAgICAgICAgcmVzLnN0YXR1cyg1MDApLmpzb24oe1xuICAgICAgICAgIGVycm9yOiB7XG4gICAgICAgICAgICAuLi5mb3JtYXR0ZWRFcnJvci5tZXRhZGF0YSxcbiAgICAgICAgICAgIC4uLmVycm9yQ29udGV4dCxcbiAgICAgICAgICB9LFxuICAgICAgICB9KVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuZXhwb3J0IGRlZmF1bHQgd2l0aEV4Y2VwdGlvbkhhbmRsaW5nXG4iLCAiaW1wb3J0IHsgTmV4dEFwaVJlcXVlc3QsIE5leHRBcGlSZXNwb25zZSB9IGZyb20gXCJuZXh0XCJcblxuZXhwb3J0IGludGVyZmFjZSBXaXRoT2tTdGF0dXNPcHRpb25zIHtcbiAgYWRkSWY/OiAocmVxOiBOZXh0QXBpUmVxdWVzdCkgPT4gYm9vbGVhblxufVxuXG5jb25zdCB3aXRoT2tTdGF0dXMgPVxuICAob3B0aW9uczogV2l0aE9rU3RhdHVzT3B0aW9ucyA9IHt9KSA9PlxuICAobmV4dDogKHJlcTogTmV4dEFwaVJlcXVlc3QsIHJlczogTmV4dEFwaVJlc3BvbnNlKSA9PiBQcm9taXNlPHZvaWQ+KSA9PlxuICBhc3luYyAocmVxOiBOZXh0QXBpUmVxdWVzdCwgcmVzOiBOZXh0QXBpUmVzcG9uc2UpID0+IHtcbiAgICAvLyBQYXRjaCAuanNvbigpXG4gICAgY29uc3Qgb3JpZ2luYWxKc29uID0gcmVzLmpzb25cblxuICAgIHJlcy5qc29uID0gZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgIGNvbnN0IG9rID0gcmVzLnN0YXR1c0NvZGUgPj0gMjAwICYmIHJlcy5zdGF0dXNDb2RlIDwgMzAwXG4gICAgICBjb25zdCBzaG91bGRJbmNsdWRlU3RhdHVzID0gb3B0aW9ucy5hZGRJZiA/IG9wdGlvbnMuYWRkSWYocmVxKSA6IHRydWVcblxuICAgICAgaWYgKHNob3VsZEluY2x1ZGVTdGF0dXMpIHtcbiAgICAgICAgb3JpZ2luYWxKc29uLmNhbGwodGhpcywge1xuICAgICAgICAgIC4uLmRhdGEsXG4gICAgICAgICAgb2ssXG4gICAgICAgIH0pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvcmlnaW5hbEpzb24uY2FsbCh0aGlzLCBkYXRhKVxuICAgICAgfVxuICAgIH1cblxuICAgIGF3YWl0IG5leHQocmVxLCByZXMpXG4gIH1cblxuZXhwb3J0IGRlZmF1bHQgd2l0aE9rU3RhdHVzXG4iLCAiaW1wb3J0IHsgTmV4dEFwaVJlcXVlc3QsIE5leHRBcGlSZXNwb25zZSB9IGZyb20gXCJuZXh0XCJcbmltcG9ydCB1bndyYXBwZWRXaXRoRXhjZXB0aW9uSGFuZGxpbmcsIHtcbiAgV2l0aEV4Y2VwdGlvbkhhbmRsaW5nT3B0aW9ucyxcbn0gZnJvbSBcIi4vd2l0aC1leGNlcHRpb24taGFuZGxpbmdcIlxuaW1wb3J0IHdpdGhPa1N0YXR1cywgeyBXaXRoT2tTdGF0dXNPcHRpb25zIH0gZnJvbSBcIi4vd2l0aC1vay1zdGF0dXNcIlxuXG5leHBvcnQgaW50ZXJmYWNlIEV4Y2VwdGlvbkhhbmRsaW5nT3B0aW9ucyB7XG4gIGFkZE9rU3RhdHVzPzogYm9vbGVhblxuICBva1N0YXR1c09wdGlvbnM/OiBXaXRoT2tTdGF0dXNPcHRpb25zXG4gIGV4Y2VwdGlvbkhhbmRsaW5nT3B0aW9ucz86IFdpdGhFeGNlcHRpb25IYW5kbGluZ09wdGlvbnNcbn1cblxuZXhwb3J0IGNvbnN0IHdpdGhFeGNlcHRpb25IYW5kbGluZyA9XG4gICh7XG4gICAgYWRkT2tTdGF0dXMgPSBmYWxzZSxcbiAgICBva1N0YXR1c09wdGlvbnMsXG4gICAgZXhjZXB0aW9uSGFuZGxpbmdPcHRpb25zLFxuICB9OiBFeGNlcHRpb25IYW5kbGluZ09wdGlvbnMgPSB7fSkgPT5cbiAgKG5leHQ6IChyZXE6IE5leHRBcGlSZXF1ZXN0LCByZXM6IE5leHRBcGlSZXNwb25zZSkgPT4gUHJvbWlzZTx2b2lkPikgPT5cbiAgKHJlcTogTmV4dEFwaVJlcXVlc3QsIHJlczogTmV4dEFwaVJlc3BvbnNlKSA9PiB7XG4gICAgaWYgKGFkZE9rU3RhdHVzKSB7XG4gICAgICByZXR1cm4gd2l0aE9rU3RhdHVzKG9rU3RhdHVzT3B0aW9ucykoXG4gICAgICAgIHVud3JhcHBlZFdpdGhFeGNlcHRpb25IYW5kbGluZyhleGNlcHRpb25IYW5kbGluZ09wdGlvbnMpKG5leHQpXG4gICAgICApKHJlcSwgcmVzKVxuICAgIH1cblxuICAgIHJldHVybiB1bndyYXBwZWRXaXRoRXhjZXB0aW9uSGFuZGxpbmcoZXhjZXB0aW9uSGFuZGxpbmdPcHRpb25zKShuZXh0KShcbiAgICAgIHJlcSxcbiAgICAgIHJlc1xuICAgIClcbiAgfVxuXG5leHBvcnQgKiBmcm9tIFwiLi9odHRwLWV4Y2VwdGlvbnNcIlxuIiwgImltcG9ydCB0eXBlIHsgTmV4dEFwaVJlcXVlc3QgYXMgUmVxLCBOZXh0QXBpUmVzcG9uc2UgYXMgUmVzIH0gZnJvbSBcIm5leHRcIlxuLypcblxuV3JhcHMgYSBmdW5jdGlvbiBpbiBsYXllcnMgb2Ygb3RoZXIgZnVuY3Rpb25zLCB3aGlsZSBwcmVzZXJ2aW5nIHRoZSBpbnB1dC9vdXRwdXRcbnR5cGUuIFRoZSBvdXRwdXQgb2Ygd3JhcHBlcnMgd2lsbCBhbHdheXMgaGF2ZSB0aGUgdHlwZSBvZiBpdCdzIGxhc3QgcGFyYW1ldGVyXG4odGhlIHdyYXBwZWQgZnVuY3Rpb24pXG5cblRoaXMgZnVuY3Rpb24gdHVybnMgdGhpcyB0eXBlIG9mIGNvbXBvc2l0aW9uLi4uXG5cbmxvZ2dlci53aXRoQ29udGV4dChcInNvbWVjb250ZXh0XCIpKFxuICBhc3luYyAoYSwgYikgPT4ge1xuICAgIHJldHVybiBhXG4gIH1cbilcblxuSW50by4uLlxuXG53cmFwcGVycyhcbiAgbG9nZ2VyLndpdGhDb250ZXh0KFwic29tZWNvbnRleHRcIiksXG4gIGFzeW5jIChhLCBiKSA9PiB7XG4gICAgcmV0dXJuIGFcbiAgfVxuKVxuXG5IYXZpbmcgdGhpcyBhcyBhIHV0aWxpdHkgbWV0aG9kIGhlbHBzIHByZXNlcnZlIHR5cGVzLCB3aGljaCBvdGhlcndpc2UgY2FuIGdldFxubWVzc2VkIHVwIGJ5IHRoZSBtaWRkbGV3YXJlcy4gSXQgYWxzbyBjYW4gbWFrZSB0aGUgY29kZSBjbGVhbmVyIHdoZXJlIHRoZXJlIGFyZVxubXVsdGlwbGUgd3JhcHBlcnMuXG5cbiMjIEVYQU1QTEVTXG5cbkluIHRoZSBjb250ZXh0IG9mIHJlcXVlc3QgbWlkZGxld2FyZSB5b3UgbWlnaHQgd3JpdGUgc29tZXRoaW5nIGxpa2UgdGhpcy4uLlxuXG5jb25zdCB3aXRoUmVxdWVzdExvZ2dpbmdNaWRkbGV3YXJlID0gKG5leHQpID0+IGFzeW5jIChyZXEsIHJlcykgPT4ge1xuICBjb25zb2xlLmxvZyhgR09UIFJFUVVFU1QgJHtyZXEubWV0aG9kfSAke3JlcS5wYXRofWApXG4gIHJldHVybiBuZXh0KHJlcSwgcmVzKVxufVxuXG5IZXJlJ3MgYW4gZXhhbXBsZSBvZiBhIHdyYXBwZXIgdGhhdCB0YWtlcyBzb21lIHBhcmFtZXRlcnMuLi5cblxuY29uc3Qgd2l0aExvZ2dlZEFyZ3VtZW50cyA9XG4gICAgKGxvZ1ByZWZpeDogc3RyaW5nKSA9PlxuICAgIChuZXh0KSA9PlxuICAgIGFzeW5jICguLi5mdW5jQXJncykgPT4ge1xuICAgICAgY29uc29sZS5sb2cobG9nUHJlZml4LCAuLi5mdW5jQXJncylcbiAgICAgIHJldHVybiBuZXh0KC4uLmZ1bmNBcmdzKVxuICAgIH1cblxuKi9cblxuZXhwb3J0IHR5cGUgTWlkZGxld2FyZTxULCBEZXAgPSB7fT4gPSAoXG4gIG5leHQ6IChyZXE6IFJlcSAmIERlcCAmIFQsIHJlczogUmVzKSA9PiBhbnlcbikgPT4gKHJlcTogUmVxICYgRGVwICYgVCwgcmVzOiBSZXMpID0+IGFueVxuXG4vLyBTYWZlciBNaWRkbGV3YXJlIHJlcXVpcmVzIHRoZSB1c2Ugb2YgZXh0ZW5kUmVxdWVzdCB0byBlbnN1cmUgdGhhdCB0aGVcbi8vIG5ldyBjb250ZXh0IChUKSB3YXMgYWN0dWFsbHkgYWRkZWQgdG8gdGhlIHJlcXVlc3QuIEl0J3Mga2luZCBvZiBhbm5veWluZ1xuLy8gdG8gdXNlIGluIHByYWN0aWNlLCBzbyB3ZSBkb24ndCB1c2UgaXQgZm9yIG91ciBXcmFwcGVycyAoeWV0KVxuZXhwb3J0IHR5cGUgU2FmZXJNaWRkbGV3YXJlPFQsIERlcCA9IHt9PiA9IChcbiAgbmV4dDogKHJlcTogUmVxICYgRGVwICYgVCwgcmVzOiBSZXMpID0+IGFueVxuKSA9PiAocmVxOiBSZXEgJiBEZXAsIHJlczogUmVzKSA9PiBhbnlcblxuZXhwb3J0IGNvbnN0IGV4dGVuZFJlcXVlc3QgPSA8VCBleHRlbmRzIFJlcSwgSyBleHRlbmRzIHt9PihcbiAgcmVxOiBULFxuICBtZXJnZTogS1xuKTogVCAmIEsgPT4ge1xuICBmb3IgKGNvbnN0IFtrZXksIHZdIG9mIE9iamVjdC5lbnRyaWVzKG1lcmdlKSkge1xuICAgIDsocmVxIGFzIGFueSlba2V5XSA9IHZcbiAgfVxuICByZXR1cm4gcmVxIGFzIGFueVxufVxuXG50eXBlIFdyYXBwZXJzMSA9IDxNdzFSZXF1ZXN0Q29udGV4dCwgTXcxRGVwPihcbiAgbXcxOiBNaWRkbGV3YXJlPE13MVJlcXVlc3RDb250ZXh0LCBNdzFEZXA+LFxuICBlbmRwb2ludDogKHJlcTogUmVxICYgTXcxUmVxdWVzdENvbnRleHQsIHJlczogUmVzKSA9PiBhbnlcbikgPT4gKHJlcTogUmVxLCByZXM6IFJlcykgPT4gYW55XG5cbnR5cGUgV3JhcHBlcnMyID0gPFxuICBNdzFSZXF1ZXN0Q29udGV4dCBleHRlbmRzIE13MkRlcCxcbiAgTXcxRGVwLFxuICBNdzJSZXF1ZXN0Q29udGV4dCxcbiAgTXcyRGVwXG4+KFxuICBtdzE6IE1pZGRsZXdhcmU8TXcxUmVxdWVzdENvbnRleHQsIE13MURlcD4sXG4gIG13MjogTWlkZGxld2FyZTxNdzJSZXF1ZXN0Q29udGV4dCwgTXcyRGVwPixcbiAgZW5kcG9pbnQ6IChyZXE6IFJlcSAmIE13MVJlcXVlc3RDb250ZXh0ICYgTXcyUmVxdWVzdENvbnRleHQsIHJlczogUmVzKSA9PiBhbnlcbikgPT4gKHJlcTogUmVxLCByZXM6IFJlcykgPT4gYW55XG5cbi8vIFRPRE8gZmlndXJlIG91dCBob3cgdG8gZG8gYSByZWN1cnNpdmUgZGVmaW5pdGlvbiwgb3Igb25lIHRoYXQgc2ltcGxpZmllc1xuLy8gdGhlc2UgcmVkdW5kYW50IHdyYXBwZXJzXG5cbnR5cGUgV3JhcHBlcnMzID0gPFxuICBNdzFSZXF1ZXN0Q29udGV4dCBleHRlbmRzIE13MkRlcCxcbiAgTXcxRGVwLFxuICBNdzJSZXF1ZXN0Q29udGV4dCxcbiAgTXcyRGVwLFxuICBNdzNSZXF1ZXN0Q29udGV4dCxcbiAgTXczRGVwXG4+KFxuICBtdzE6IE1pZGRsZXdhcmU8TXcxUmVxdWVzdENvbnRleHQsIE13MURlcD4sXG4gIG13MjogTWlkZGxld2FyZTxNdzJSZXF1ZXN0Q29udGV4dCwgTXcyRGVwPixcbiAgbXczOiBNaWRkbGV3YXJlPFxuICAgIE13M1JlcXVlc3RDb250ZXh0LFxuICAgIE13MVJlcXVlc3RDb250ZXh0ICYgTXcyUmVxdWVzdENvbnRleHQgZXh0ZW5kcyBNdzNEZXAgPyBNdzNEZXAgOiBuZXZlclxuICA+LFxuICBlbmRwb2ludDogKFxuICAgIHJlcTogUmVxICYgTXcxUmVxdWVzdENvbnRleHQgJiBNdzJSZXF1ZXN0Q29udGV4dCAmIE13M1JlcXVlc3RDb250ZXh0LFxuICAgIHJlczogUmVzXG4gICkgPT4gYW55XG4pID0+IChyZXE6IFJlcSwgcmVzOiBSZXMpID0+IGFueVxuXG50eXBlIFdyYXBwZXJzNCA9IDxcbiAgTXcxUmVxdWVzdENvbnRleHQgZXh0ZW5kcyBNdzJEZXAsXG4gIE13MURlcCxcbiAgTXcyUmVxdWVzdENvbnRleHQsXG4gIE13MkRlcCxcbiAgTXczUmVxdWVzdENvbnRleHQsXG4gIE13M0RlcCxcbiAgTXc0UmVxdWVzdENvbnRleHQsXG4gIE13NERlcFxuPihcbiAgbXcxOiBNaWRkbGV3YXJlPE13MVJlcXVlc3RDb250ZXh0LCBNdzFEZXA+LFxuICBtdzI6IE1pZGRsZXdhcmU8TXcyUmVxdWVzdENvbnRleHQsIE13MkRlcD4sXG4gIG13MzogTWlkZGxld2FyZTxcbiAgICBNdzNSZXF1ZXN0Q29udGV4dCxcbiAgICBNdzFSZXF1ZXN0Q29udGV4dCAmIE13MlJlcXVlc3RDb250ZXh0IGV4dGVuZHMgTXczRGVwID8gTXczRGVwIDogbmV2ZXJcbiAgPixcbiAgbXc0OiBNaWRkbGV3YXJlPFxuICAgIE13NFJlcXVlc3RDb250ZXh0LFxuICAgIE13MVJlcXVlc3RDb250ZXh0ICYgTXcyUmVxdWVzdENvbnRleHQgJiBNdzNSZXF1ZXN0Q29udGV4dCBleHRlbmRzIE13NERlcFxuICAgICAgPyBNdzREZXBcbiAgICAgIDogbmV2ZXJcbiAgPixcbiAgZW5kcG9pbnQ6IChcbiAgICByZXE6IFJlcSAmXG4gICAgICBNdzFSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzJSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzNSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzRSZXF1ZXN0Q29udGV4dCxcbiAgICByZXM6IFJlc1xuICApID0+IGFueVxuKSA9PiAocmVxOiBSZXEsIHJlczogUmVzKSA9PiBhbnlcblxudHlwZSBXcmFwcGVyczUgPSA8XG4gIE13MVJlcXVlc3RDb250ZXh0IGV4dGVuZHMgTXcyRGVwLFxuICBNdzFEZXAsXG4gIE13MlJlcXVlc3RDb250ZXh0LFxuICBNdzJEZXAsXG4gIE13M1JlcXVlc3RDb250ZXh0LFxuICBNdzNEZXAsXG4gIE13NFJlcXVlc3RDb250ZXh0LFxuICBNdzREZXAsXG4gIE13NVJlcXVlc3RDb250ZXh0LFxuICBNdzVEZXBcbj4oXG4gIG13MTogTWlkZGxld2FyZTxNdzFSZXF1ZXN0Q29udGV4dCwgTXcxRGVwPixcbiAgbXcyOiBNaWRkbGV3YXJlPE13MlJlcXVlc3RDb250ZXh0LCBNdzJEZXA+LFxuICBtdzM6IE1pZGRsZXdhcmU8XG4gICAgTXczUmVxdWVzdENvbnRleHQsXG4gICAgTXcxUmVxdWVzdENvbnRleHQgJiBNdzJSZXF1ZXN0Q29udGV4dCBleHRlbmRzIE13M0RlcCA/IE13M0RlcCA6IG5ldmVyXG4gID4sXG4gIG13NDogTWlkZGxld2FyZTxcbiAgICBNdzRSZXF1ZXN0Q29udGV4dCxcbiAgICBNdzFSZXF1ZXN0Q29udGV4dCAmIE13MlJlcXVlc3RDb250ZXh0ICYgTXczUmVxdWVzdENvbnRleHQgZXh0ZW5kcyBNdzREZXBcbiAgICAgID8gTXc0RGVwXG4gICAgICA6IG5ldmVyXG4gID4sXG4gIG13NTogTWlkZGxld2FyZTxcbiAgICBNdzVSZXF1ZXN0Q29udGV4dCxcbiAgICBNdzFSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzJSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzNSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzRSZXF1ZXN0Q29udGV4dCBleHRlbmRzIE13NURlcFxuICAgICAgPyBNdzVEZXBcbiAgICAgIDogbmV2ZXJcbiAgPixcbiAgZW5kcG9pbnQ6IChcbiAgICByZXE6IFJlcSAmXG4gICAgICBNdzFSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzJSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzNSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzRSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzVSZXF1ZXN0Q29udGV4dCxcbiAgICByZXM6IFJlc1xuICApID0+IGFueVxuKSA9PiAocmVxOiBSZXEsIHJlczogUmVzKSA9PiBhbnlcblxudHlwZSBXcmFwcGVyczYgPSA8XG4gIE13MVJlcXVlc3RDb250ZXh0IGV4dGVuZHMgTXcyRGVwLFxuICBNdzFEZXAsXG4gIE13MlJlcXVlc3RDb250ZXh0LFxuICBNdzJEZXAsXG4gIE13M1JlcXVlc3RDb250ZXh0LFxuICBNdzNEZXAsXG4gIE13NFJlcXVlc3RDb250ZXh0LFxuICBNdzREZXAsXG4gIE13NVJlcXVlc3RDb250ZXh0LFxuICBNdzVEZXAsXG4gIE13NlJlcXVlc3RDb250ZXh0LFxuICBNdzZEZXBcbj4oXG4gIG13MTogTWlkZGxld2FyZTxNdzFSZXF1ZXN0Q29udGV4dCwgTXcxRGVwPixcbiAgbXcyOiBNaWRkbGV3YXJlPE13MlJlcXVlc3RDb250ZXh0LCBNdzJEZXA+LFxuICBtdzM6IE1pZGRsZXdhcmU8XG4gICAgTXczUmVxdWVzdENvbnRleHQsXG4gICAgTXcxUmVxdWVzdENvbnRleHQgJiBNdzJSZXF1ZXN0Q29udGV4dCBleHRlbmRzIE13M0RlcCA/IE13M0RlcCA6IG5ldmVyXG4gID4sXG4gIG13NDogTWlkZGxld2FyZTxcbiAgICBNdzRSZXF1ZXN0Q29udGV4dCxcbiAgICBNdzFSZXF1ZXN0Q29udGV4dCAmIE13MlJlcXVlc3RDb250ZXh0ICYgTXczUmVxdWVzdENvbnRleHQgZXh0ZW5kcyBNdzREZXBcbiAgICAgID8gTXc0RGVwXG4gICAgICA6IG5ldmVyXG4gID4sXG4gIG13NTogTWlkZGxld2FyZTxcbiAgICBNdzVSZXF1ZXN0Q29udGV4dCxcbiAgICBNdzFSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzJSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzNSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzRSZXF1ZXN0Q29udGV4dCBleHRlbmRzIE13NURlcFxuICAgICAgPyBNdzVEZXBcbiAgICAgIDogbmV2ZXJcbiAgPixcbiAgbXc2OiBNaWRkbGV3YXJlPFxuICAgIE13NlJlcXVlc3RDb250ZXh0LFxuICAgIE13MVJlcXVlc3RDb250ZXh0ICZcbiAgICAgIE13MlJlcXVlc3RDb250ZXh0ICZcbiAgICAgIE13M1JlcXVlc3RDb250ZXh0ICZcbiAgICAgIE13NFJlcXVlc3RDb250ZXh0ICZcbiAgICAgIE13NVJlcXVlc3RDb250ZXh0IGV4dGVuZHMgTXc2RGVwXG4gICAgICA/IE13NkRlcFxuICAgICAgOiBuZXZlclxuICA+LFxuICBlbmRwb2ludDogKFxuICAgIHJlcTogUmVxICZcbiAgICAgIE13MVJlcXVlc3RDb250ZXh0ICZcbiAgICAgIE13MlJlcXVlc3RDb250ZXh0ICZcbiAgICAgIE13M1JlcXVlc3RDb250ZXh0ICZcbiAgICAgIE13NFJlcXVlc3RDb250ZXh0ICZcbiAgICAgIE13NVJlcXVlc3RDb250ZXh0ICZcbiAgICAgIE13NlJlcXVlc3RDb250ZXh0LFxuICAgIHJlczogUmVzXG4gICkgPT4gYW55XG4pID0+IChyZXE6IFJlcSwgcmVzOiBSZXMpID0+IGFueVxuXG50eXBlIFdyYXBwZXJzNyA9IDxcbiAgTXcxUmVxdWVzdENvbnRleHQgZXh0ZW5kcyBNdzJEZXAsXG4gIE13MURlcCxcbiAgTXcyUmVxdWVzdENvbnRleHQsXG4gIE13MkRlcCxcbiAgTXczUmVxdWVzdENvbnRleHQsXG4gIE13M0RlcCxcbiAgTXc0UmVxdWVzdENvbnRleHQsXG4gIE13NERlcCxcbiAgTXc1UmVxdWVzdENvbnRleHQsXG4gIE13NURlcCxcbiAgTXc2UmVxdWVzdENvbnRleHQsXG4gIE13NkRlcCxcbiAgTXc3UmVxdWVzdENvbnRleHQsXG4gIE13N0RlcFxuPihcbiAgbXcxOiBNaWRkbGV3YXJlPE13MVJlcXVlc3RDb250ZXh0LCBNdzFEZXA+LFxuICBtdzI6IE1pZGRsZXdhcmU8TXcyUmVxdWVzdENvbnRleHQsIE13MkRlcD4sXG4gIG13MzogTWlkZGxld2FyZTxcbiAgICBNdzNSZXF1ZXN0Q29udGV4dCxcbiAgICBNdzFSZXF1ZXN0Q29udGV4dCAmIE13MlJlcXVlc3RDb250ZXh0IGV4dGVuZHMgTXczRGVwID8gTXczRGVwIDogbmV2ZXJcbiAgPixcbiAgbXc0OiBNaWRkbGV3YXJlPFxuICAgIE13NFJlcXVlc3RDb250ZXh0LFxuICAgIE13MVJlcXVlc3RDb250ZXh0ICYgTXcyUmVxdWVzdENvbnRleHQgJiBNdzNSZXF1ZXN0Q29udGV4dCBleHRlbmRzIE13NERlcFxuICAgICAgPyBNdzREZXBcbiAgICAgIDogbmV2ZXJcbiAgPixcbiAgbXc1OiBNaWRkbGV3YXJlPFxuICAgIE13NVJlcXVlc3RDb250ZXh0LFxuICAgIE13MVJlcXVlc3RDb250ZXh0ICZcbiAgICAgIE13MlJlcXVlc3RDb250ZXh0ICZcbiAgICAgIE13M1JlcXVlc3RDb250ZXh0ICZcbiAgICAgIE13NFJlcXVlc3RDb250ZXh0IGV4dGVuZHMgTXc1RGVwXG4gICAgICA/IE13NURlcFxuICAgICAgOiBuZXZlclxuICA+LFxuICBtdzY6IE1pZGRsZXdhcmU8XG4gICAgTXc2UmVxdWVzdENvbnRleHQsXG4gICAgTXcxUmVxdWVzdENvbnRleHQgJlxuICAgICAgTXcyUmVxdWVzdENvbnRleHQgJlxuICAgICAgTXczUmVxdWVzdENvbnRleHQgJlxuICAgICAgTXc0UmVxdWVzdENvbnRleHQgJlxuICAgICAgTXc1UmVxdWVzdENvbnRleHQgZXh0ZW5kcyBNdzZEZXBcbiAgICAgID8gTXc2RGVwXG4gICAgICA6IG5ldmVyXG4gID4sXG4gIG13NzogTWlkZGxld2FyZTxcbiAgICBNdzdSZXF1ZXN0Q29udGV4dCxcbiAgICBNdzFSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzJSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzNSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzRSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzVSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzZSZXF1ZXN0Q29udGV4dCBleHRlbmRzIE13N0RlcFxuICAgICAgPyBNdzdEZXBcbiAgICAgIDogbmV2ZXJcbiAgPixcbiAgZW5kcG9pbnQ6IChcbiAgICByZXE6IFJlcSAmXG4gICAgICBNdzFSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzJSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzNSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzRSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzVSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzZSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzdSZXF1ZXN0Q29udGV4dCxcbiAgICByZXM6IFJlc1xuICApID0+IGFueVxuKSA9PiAocmVxOiBSZXEsIHJlczogUmVzKSA9PiBhbnlcblxudHlwZSBXcmFwcGVycyA9IFdyYXBwZXJzMSAmXG4gIFdyYXBwZXJzMiAmXG4gIFdyYXBwZXJzMyAmXG4gIFdyYXBwZXJzNCAmXG4gIFdyYXBwZXJzNSAmXG4gIFdyYXBwZXJzNiAmXG4gIFdyYXBwZXJzN1xuXG5leHBvcnQgY29uc3Qgd3JhcHBlcnM6IFdyYXBwZXJzID0gKC4uLndyYXBwZXJzQXJnczogYW55W10pID0+IHtcbiAgY29uc3Qgd3JhcHBlZEZ1bmN0aW9uID0gd3JhcHBlcnNBcmdzW3dyYXBwZXJzQXJncy5sZW5ndGggLSAxXVxuICBjb25zdCBtd3MgPSB3cmFwcGVyc0FyZ3Muc2xpY2UoMCwgLTEpXG5cbiAgbGV0IGxhc3RXcmFwcGVkRnVuY3Rpb24gPSB3cmFwcGVkRnVuY3Rpb25cbiAgZm9yIChsZXQgaSA9IG13cy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgIGxhc3RXcmFwcGVkRnVuY3Rpb24gPSAobXdzW2ldIGFzIGFueSkobGFzdFdyYXBwZWRGdW5jdGlvbilcbiAgfVxuXG4gIHJldHVybiBsYXN0V3JhcHBlZEZ1bmN0aW9uXG59XG5cbmV4cG9ydCBkZWZhdWx0IHdyYXBwZXJzXG4iLCAiaW1wb3J0IHsgTWV0aG9kTm90QWxsb3dlZEV4Y2VwdGlvbiB9IGZyb20gXCIuLi8uLi9uZXh0anMtZXhjZXB0aW9uLW1pZGRsZXdhcmVcIlxuXG5leHBvcnQgdHlwZSBIVFRQTWV0aG9kcyA9XG4gIHwgXCJHRVRcIlxuICB8IFwiUE9TVFwiXG4gIHwgXCJERUxFVEVcIlxuICB8IFwiUFVUXCJcbiAgfCBcIlBBVENIXCJcbiAgfCBcIkhFQURcIlxuICB8IFwiT1BUSU9OU1wiXG5cbmV4cG9ydCBjb25zdCB3aXRoTWV0aG9kcyA9IChtZXRob2RzOiBIVFRQTWV0aG9kc1tdKSA9PiAobmV4dCkgPT4gKHJlcSwgcmVzKSA9PiB7XG4gIGlmICghbWV0aG9kcy5pbmNsdWRlcyhyZXEubWV0aG9kKSkge1xuICAgIHRocm93IG5ldyBNZXRob2ROb3RBbGxvd2VkRXhjZXB0aW9uKHtcbiAgICAgIHR5cGU6IFwibWV0aG9kX25vdF9hbGxvd2VkXCIsXG4gICAgICBtZXNzYWdlOiBgb25seSAke21ldGhvZHMuam9pbihcIixcIil9IGFjY2VwdGVkYCxcbiAgICB9KVxuICB9XG4gIHJldHVybiBuZXh0KHJlcSwgcmVzKVxufVxuXG5leHBvcnQgZGVmYXVsdCB3aXRoTWV0aG9kc1xuIiwgImltcG9ydCB0eXBlIHsgTmV4dEFwaVJlcXVlc3QsIE5leHRBcGlSZXNwb25zZSB9IGZyb20gXCJuZXh0XCJcbmltcG9ydCB7IHosIFpvZEZpcnN0UGFydHlUeXBlS2luZCB9IGZyb20gXCJ6b2RcIlxuaW1wb3J0IF8gZnJvbSBcImxvZGFzaFwiXG5cbmltcG9ydCB7XG4gIEJhZFJlcXVlc3RFeGNlcHRpb24sXG4gIEludGVybmFsU2VydmVyRXJyb3JFeGNlcHRpb24sXG59IGZyb20gXCIuLi8uLi9uZXh0anMtZXhjZXB0aW9uLW1pZGRsZXdhcmVcIlxuaW1wb3J0IHsgUXVlcnlBcnJheUZvcm1hdHMgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIlxuaW1wb3J0IHsgREVGQVVMVF9BUlJBWV9GT1JNQVRTIH0gZnJvbSBcIi4uXCJcblxuY29uc3QgZ2V0Wm9kT2JqZWN0U2NoZW1hRnJvbVpvZEVmZmVjdFNjaGVtYSA9IChcbiAgaXNab2RFZmZlY3Q6IGJvb2xlYW4sXG4gIHNjaGVtYTogei5ab2RUeXBlQW55XG4pOiB6LlpvZFR5cGVBbnkgfCB6LlpvZE9iamVjdDxhbnk+ID0+IHtcbiAgaWYgKCFpc1pvZEVmZmVjdCkge1xuICAgIHJldHVybiBzY2hlbWEgYXMgei5ab2RPYmplY3Q8YW55PlxuICB9XG5cbiAgbGV0IGN1cnJlbnRTY2hlbWEgPSBzY2hlbWFcblxuICB3aGlsZSAoY3VycmVudFNjaGVtYSBpbnN0YW5jZW9mIHouWm9kRWZmZWN0cykge1xuICAgIGN1cnJlbnRTY2hlbWEgPSBjdXJyZW50U2NoZW1hLl9kZWYuc2NoZW1hXG4gIH1cblxuICByZXR1cm4gY3VycmVudFNjaGVtYSBhcyB6LlpvZE9iamVjdDxhbnk+XG59XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGdldCB0aGUgY29ycmVjdCBzY2hlbWEgZnJvbSBhIFpvZEVmZmVjdCB8IFpvZERlZmF1bHQgfCBab2RPcHRpb25hbCBzY2hlbWEuXG4gKiBUT0RPOiB0aGlzIGZ1bmN0aW9uIHNob3VsZCBoYW5kbGUgYWxsIHNwZWNpYWwgY2FzZXMgb2YgWm9kU2NoZW1hIGFuZCBub3QganVzdCBab2RFZmZlY3QgfCBab2REZWZhdWx0IHwgWm9kT3B0aW9uYWxcbiAqL1xuY29uc3QgZ2V0Wm9kRGVmRnJvbVpvZFNjaGVtYUhlbHBlcnMgPSAoc2NoZW1hOiB6LlpvZFR5cGVBbnkpID0+IHtcbiAgY29uc3Qgc3BlY2lhbF96b2RfdHlwZXMgPSBbXG4gICAgWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZE9wdGlvbmFsLFxuICAgIFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2REZWZhdWx0LFxuICAgIFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2RFZmZlY3RzLFxuICBdXG5cbiAgd2hpbGUgKHNwZWNpYWxfem9kX3R5cGVzLmluY2x1ZGVzKHNjaGVtYS5fZGVmLnR5cGVOYW1lKSkge1xuICAgIGlmIChcbiAgICAgIHNjaGVtYS5fZGVmLnR5cGVOYW1lID09PSBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kT3B0aW9uYWwgfHxcbiAgICAgIHNjaGVtYS5fZGVmLnR5cGVOYW1lID09PSBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kRGVmYXVsdFxuICAgICkge1xuICAgICAgc2NoZW1hID0gc2NoZW1hLl9kZWYuaW5uZXJUeXBlXG4gICAgICBjb250aW51ZVxuICAgIH1cblxuICAgIGlmIChzY2hlbWEuX2RlZi50eXBlTmFtZSA9PT0gWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZEVmZmVjdHMpIHtcbiAgICAgIHNjaGVtYSA9IHNjaGVtYS5fZGVmLnNjaGVtYVxuICAgICAgY29udGludWVcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHNjaGVtYS5fZGVmXG59XG5cbmNvbnN0IHRyeUdldFpvZFNjaGVtYUFzT2JqZWN0ID0gKFxuICBzY2hlbWE6IHouWm9kVHlwZUFueVxuKTogei5ab2RPYmplY3Q8YW55PiB8IHVuZGVmaW5lZCA9PiB7XG4gIGNvbnN0IGlzWm9kRWZmZWN0ID0gc2NoZW1hLl9kZWYudHlwZU5hbWUgPT09IFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2RFZmZlY3RzXG4gIGNvbnN0IHNhZmVfc2NoZW1hID0gZ2V0Wm9kT2JqZWN0U2NoZW1hRnJvbVpvZEVmZmVjdFNjaGVtYShpc1pvZEVmZmVjdCwgc2NoZW1hKVxuICBjb25zdCBpc1pvZE9iamVjdCA9XG4gICAgc2FmZV9zY2hlbWEuX2RlZi50eXBlTmFtZSA9PT0gWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZE9iamVjdFxuXG4gIGlmICghaXNab2RPYmplY3QpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkXG4gIH1cblxuICByZXR1cm4gc2FmZV9zY2hlbWEgYXMgei5ab2RPYmplY3Q8YW55PlxufVxuXG5jb25zdCBpc1pvZFNjaGVtYUFycmF5ID0gKHNjaGVtYTogei5ab2RUeXBlQW55KSA9PiB7XG4gIGNvbnN0IGRlZiA9IGdldFpvZERlZkZyb21ab2RTY2hlbWFIZWxwZXJzKHNjaGVtYSlcbiAgcmV0dXJuIGRlZi50eXBlTmFtZSA9PT0gWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZEFycmF5XG59XG5cbmNvbnN0IGlzWm9kU2NoZW1hQm9vbGVhbiA9IChzY2hlbWE6IHouWm9kVHlwZUFueSkgPT4ge1xuICBjb25zdCBkZWYgPSBnZXRab2REZWZGcm9tWm9kU2NoZW1hSGVscGVycyhzY2hlbWEpXG4gIHJldHVybiBkZWYudHlwZU5hbWUgPT09IFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2RCb29sZWFuXG59XG5cbmNvbnN0IHBhcnNlUXVlcnlQYXJhbXMgPSAoXG4gIHNjaGVtYTogei5ab2RUeXBlQW55LFxuICBpbnB1dDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gIHN1cHBvcnRlZEFycmF5Rm9ybWF0czogUXVlcnlBcnJheUZvcm1hdHNcbikgPT4ge1xuICBjb25zdCBwYXJzZWRfaW5wdXQgPSBPYmplY3QuYXNzaWduKHt9LCBpbnB1dClcbiAgY29uc3Qgb2JqX3NjaGVtYSA9IHRyeUdldFpvZFNjaGVtYUFzT2JqZWN0KHNjaGVtYSlcblxuICBpZiAob2JqX3NjaGVtYSkge1xuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKG9ial9zY2hlbWEuc2hhcGUpKSB7XG4gICAgICBpZiAoaXNab2RTY2hlbWFBcnJheSh2YWx1ZSBhcyB6LlpvZFR5cGVBbnkpKSB7XG4gICAgICAgIGNvbnN0IGFycmF5X2lucHV0ID0gaW5wdXRba2V5XVxuXG4gICAgICAgIGlmIChcbiAgICAgICAgICB0eXBlb2YgYXJyYXlfaW5wdXQgPT09IFwic3RyaW5nXCIgJiZcbiAgICAgICAgICBzdXBwb3J0ZWRBcnJheUZvcm1hdHMuaW5jbHVkZXMoXCJjb21tYVwiKVxuICAgICAgICApIHtcbiAgICAgICAgICBwYXJzZWRfaW5wdXRba2V5XSA9IGFycmF5X2lucHV0LnNwbGl0KFwiLFwiKVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYnJhY2tldF9zeW50YXhfYXJyYXlfaW5wdXQgPSBpbnB1dFtgJHtrZXl9W11gXVxuICAgICAgICBpZiAoXG4gICAgICAgICAgdHlwZW9mIGJyYWNrZXRfc3ludGF4X2FycmF5X2lucHV0ID09PSBcInN0cmluZ1wiICYmXG4gICAgICAgICAgc3VwcG9ydGVkQXJyYXlGb3JtYXRzLmluY2x1ZGVzKFwiYnJhY2tldHNcIilcbiAgICAgICAgKSB7XG4gICAgICAgICAgY29uc3QgcHJlX3NwbGl0X2FycmF5ID0gYnJhY2tldF9zeW50YXhfYXJyYXlfaW5wdXRcbiAgICAgICAgICBwYXJzZWRfaW5wdXRba2V5XSA9IHByZV9zcGxpdF9hcnJheS5zcGxpdChcIixcIilcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChcbiAgICAgICAgICBBcnJheS5pc0FycmF5KGJyYWNrZXRfc3ludGF4X2FycmF5X2lucHV0KSAmJlxuICAgICAgICAgIHN1cHBvcnRlZEFycmF5Rm9ybWF0cy5pbmNsdWRlcyhcImJyYWNrZXRzXCIpXG4gICAgICAgICkge1xuICAgICAgICAgIHBhcnNlZF9pbnB1dFtrZXldID0gYnJhY2tldF9zeW50YXhfYXJyYXlfaW5wdXRcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIGlmIChpc1pvZFNjaGVtYUJvb2xlYW4odmFsdWUgYXMgei5ab2RUeXBlQW55KSkge1xuICAgICAgICBjb25zdCBib29sZWFuX2lucHV0ID0gaW5wdXRba2V5XVxuXG4gICAgICAgIGlmICh0eXBlb2YgYm9vbGVhbl9pbnB1dCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgIHBhcnNlZF9pbnB1dFtrZXldID0gYm9vbGVhbl9pbnB1dCA9PT0gXCJ0cnVlXCJcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzY2hlbWEucGFyc2UocGFyc2VkX2lucHV0KVxufVxuXG5jb25zdCB2YWxpZGF0ZVF1ZXJ5UGFyYW1zID0gKFxuICBpbnB1dFVybDogc3RyaW5nLFxuICBzY2hlbWE6IHouWm9kVHlwZUFueSxcbiAgc3VwcG9ydGVkQXJyYXlGb3JtYXRzOiBRdWVyeUFycmF5Rm9ybWF0c1xuKSA9PiB7XG4gIGNvbnN0IHVybCA9IG5ldyBVUkwoaW5wdXRVcmwsIFwiaHR0cDovL2R1bW15LmNvbVwiKVxuXG4gIGNvbnN0IHNlZW5LZXlzID0gbmV3IFNldDxzdHJpbmc+KClcblxuICBjb25zdCBvYmpfc2NoZW1hID0gdHJ5R2V0Wm9kU2NoZW1hQXNPYmplY3Qoc2NoZW1hKVxuICBpZiAoIW9ial9zY2hlbWEpIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIGZvciAoY29uc3Qga2V5IG9mIHVybC5zZWFyY2hQYXJhbXMua2V5cygpKSB7XG4gICAgZm9yIChjb25zdCBbc2NoZW1hS2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMob2JqX3NjaGVtYS5zaGFwZSkpIHtcbiAgICAgIGlmIChpc1pvZFNjaGVtYUFycmF5KHZhbHVlIGFzIHouWm9kVHlwZUFueSkpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGtleSA9PT0gYCR7c2NoZW1hS2V5fVtdYCAmJlxuICAgICAgICAgICFzdXBwb3J0ZWRBcnJheUZvcm1hdHMuaW5jbHVkZXMoXCJicmFja2V0c1wiKVxuICAgICAgICApIHtcbiAgICAgICAgICB0aHJvdyBuZXcgQmFkUmVxdWVzdEV4Y2VwdGlvbih7XG4gICAgICAgICAgICB0eXBlOiBcImludmFsaWRfcXVlcnlfcGFyYW1zXCIsXG4gICAgICAgICAgICBtZXNzYWdlOiBgQnJhY2tldCBzeW50YXggbm90IHN1cHBvcnRlZCBmb3IgcXVlcnkgcGFyYW0gXCIke3NjaGVtYUtleX1cImAsXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGtleV9zY2hlbWEgPSBvYmpfc2NoZW1hLnNoYXBlW2tleV1cblxuICAgIGlmIChrZXlfc2NoZW1hKSB7XG4gICAgICBpZiAoaXNab2RTY2hlbWFBcnJheShrZXlfc2NoZW1hKSkge1xuICAgICAgICBpZiAoc2VlbktleXMuaGFzKGtleSkgJiYgIXN1cHBvcnRlZEFycmF5Rm9ybWF0cy5pbmNsdWRlcyhcInJlcGVhdFwiKSkge1xuICAgICAgICAgIHRocm93IG5ldyBCYWRSZXF1ZXN0RXhjZXB0aW9uKHtcbiAgICAgICAgICAgIHR5cGU6IFwiaW52YWxpZF9xdWVyeV9wYXJhbXNcIixcbiAgICAgICAgICAgIG1lc3NhZ2U6IGBSZXBlYXRlZCBwYXJhbWV0ZXJzIG5vdCBzdXBwb3J0ZWQgZm9yIGR1cGxpY2F0ZSBxdWVyeSBwYXJhbSBcIiR7a2V5fVwiYCxcbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgc2VlbktleXMuYWRkKGtleSlcbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlcXVlc3RJbnB1dDxcbiAgSnNvbkJvZHkgZXh0ZW5kcyB6LlpvZFR5cGVBbnksXG4gIFF1ZXJ5UGFyYW1zIGV4dGVuZHMgei5ab2RUeXBlQW55LFxuICBDb21tb25QYXJhbXMgZXh0ZW5kcyB6LlpvZFR5cGVBbnksXG4gIEZvcm1EYXRhIGV4dGVuZHMgei5ab2RUeXBlQW55LFxuICBKc29uUmVzcG9uc2UgZXh0ZW5kcyB6LlpvZFR5cGVBbnlcbj4ge1xuICBqc29uQm9keT86IEpzb25Cb2R5XG4gIHF1ZXJ5UGFyYW1zPzogUXVlcnlQYXJhbXNcbiAgY29tbW9uUGFyYW1zPzogQ29tbW9uUGFyYW1zXG4gIGZvcm1EYXRhPzogRm9ybURhdGFcbiAganNvblJlc3BvbnNlPzogSnNvblJlc3BvbnNlXG4gIHNob3VsZFZhbGlkYXRlUmVzcG9uc2VzPzogYm9vbGVhblxuICBzaG91bGRWYWxpZGF0ZUdldFJlcXVlc3RCb2R5PzogYm9vbGVhblxuICBzdXBwb3J0ZWRBcnJheUZvcm1hdHM/OiBRdWVyeUFycmF5Rm9ybWF0c1xufVxuXG5jb25zdCB6b2RJc3N1ZVRvU3RyaW5nID0gKGlzc3VlOiB6LlpvZElzc3VlKSA9PiB7XG4gIGlmIChpc3N1ZS5wYXRoLmpvaW4oXCIuXCIpID09PSBcIlwiKSB7XG4gICAgcmV0dXJuIGlzc3VlLm1lc3NhZ2VcbiAgfVxuICBpZiAoaXNzdWUubWVzc2FnZSA9PT0gXCJSZXF1aXJlZFwiKSB7XG4gICAgcmV0dXJuIGAke2lzc3VlLnBhdGguam9pbihcIi5cIil9IGlzIHJlcXVpcmVkYFxuICB9XG4gIHJldHVybiBgJHtpc3N1ZS5tZXNzYWdlfSBmb3IgXCIke2lzc3VlLnBhdGguam9pbihcIi5cIil9XCJgXG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlSnNvblJlc3BvbnNlPEpzb25SZXNwb25zZSBleHRlbmRzIHouWm9kVHlwZUFueT4oXG4gIGpzb25SZXNwb25zZTogSnNvblJlc3BvbnNlIHwgdW5kZWZpbmVkLFxuICByZXM6IE5leHRBcGlSZXNwb25zZVxuKSB7XG4gIGNvbnN0IG9yaWdpbmFsX3Jlc19qc29uID0gcmVzLmpzb25cbiAgY29uc3Qgb3ZlcnJpZGVfcmVzX2pzb24gPSAoanNvbjogYW55KSA9PiB7XG4gICAgY29uc3QgaXNfc3VjY2VzcyA9IHJlcy5zdGF0dXNDb2RlID49IDIwMCAmJiByZXMuc3RhdHVzQ29kZSA8IDMwMFxuICAgIGlmICghaXNfc3VjY2Vzcykge1xuICAgICAgcmV0dXJuIG9yaWdpbmFsX3Jlc19qc29uKGpzb24pXG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGpzb25SZXNwb25zZT8ucGFyc2UoanNvbilcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHRocm93IG5ldyBJbnRlcm5hbFNlcnZlckVycm9yRXhjZXB0aW9uKHtcbiAgICAgICAgdHlwZTogXCJpbnZhbGlkX3Jlc3BvbnNlXCIsXG4gICAgICAgIG1lc3NhZ2U6IFwidGhlIHJlc3BvbnNlIGRvZXMgbm90IG1hdGNoIHdpdGgganNvblJlc3BvbnNlXCIsXG4gICAgICAgIHpvZEVycm9yOiBlcnIsXG4gICAgICB9KVxuICAgIH1cblxuICAgIHJldHVybiBvcmlnaW5hbF9yZXNfanNvbihqc29uKVxuICB9XG4gIHJlcy5qc29uID0gb3ZlcnJpZGVfcmVzX2pzb25cbn1cblxuZXhwb3J0IGNvbnN0IHdpdGhWYWxpZGF0aW9uID1cbiAgPFxuICAgIEpzb25Cb2R5IGV4dGVuZHMgei5ab2RUeXBlQW55LFxuICAgIFF1ZXJ5UGFyYW1zIGV4dGVuZHMgei5ab2RUeXBlQW55LFxuICAgIENvbW1vblBhcmFtcyBleHRlbmRzIHouWm9kVHlwZUFueSxcbiAgICBGb3JtRGF0YSBleHRlbmRzIHouWm9kVHlwZUFueSxcbiAgICBKc29uUmVzcG9uc2UgZXh0ZW5kcyB6LlpvZFR5cGVBbnlcbiAgPihcbiAgICBpbnB1dDogUmVxdWVzdElucHV0PFxuICAgICAgSnNvbkJvZHksXG4gICAgICBRdWVyeVBhcmFtcyxcbiAgICAgIENvbW1vblBhcmFtcyxcbiAgICAgIEZvcm1EYXRhLFxuICAgICAgSnNvblJlc3BvbnNlXG4gICAgPlxuICApID0+XG4gIChuZXh0KSA9PlxuICBhc3luYyAocmVxOiBOZXh0QXBpUmVxdWVzdCwgcmVzOiBOZXh0QXBpUmVzcG9uc2UpID0+IHtcbiAgICBjb25zdCB7IHN1cHBvcnRlZEFycmF5Rm9ybWF0cyA9IERFRkFVTFRfQVJSQVlfRk9STUFUUyB9ID0gaW5wdXRcblxuICAgIGlmIChcbiAgICAgIChpbnB1dC5mb3JtRGF0YSAmJiBpbnB1dC5qc29uQm9keSkgfHxcbiAgICAgIChpbnB1dC5mb3JtRGF0YSAmJiBpbnB1dC5jb21tb25QYXJhbXMpXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3QgdXNlIGZvcm1EYXRhIHdpdGgganNvbkJvZHkgb3IgY29tbW9uUGFyYW1zXCIpXG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgKHJlcS5tZXRob2QgPT09IFwiUE9TVFwiIHx8IHJlcS5tZXRob2QgPT09IFwiUEFUQ0hcIikgJiZcbiAgICAgIChpbnB1dC5qc29uQm9keSB8fCBpbnB1dC5jb21tb25QYXJhbXMpICYmXG4gICAgICAhcmVxLmhlYWRlcnNbXCJjb250ZW50LXR5cGVcIl0/LmluY2x1ZGVzKFwiYXBwbGljYXRpb24vanNvblwiKSAmJlxuICAgICAgIV8uaXNFbXB0eShyZXEuYm9keSlcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBCYWRSZXF1ZXN0RXhjZXB0aW9uKHtcbiAgICAgICAgdHlwZTogXCJpbnZhbGlkX2NvbnRlbnRfdHlwZVwiLFxuICAgICAgICBtZXNzYWdlOiBgJHtyZXEubWV0aG9kfSByZXF1ZXN0cyBtdXN0IGhhdmUgQ29udGVudC1UeXBlIGhlYWRlciB3aXRoIFwiYXBwbGljYXRpb24vanNvblwiYCxcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgaW5wdXQuZm9ybURhdGEgJiZcbiAgICAgIHJlcS5tZXRob2QgIT09IFwiR0VUXCIgJiZcbiAgICAgICFyZXEuaGVhZGVyc1tcImNvbnRlbnQtdHlwZVwiXT8uaW5jbHVkZXMoXG4gICAgICAgIFwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkXCJcbiAgICAgIClcbiAgICAgIC8vIFRPRE8gZXZlbnR1YWxseSB3ZSBzaG91bGQgc3VwcG9ydCBtdWx0aXBhcnQvZm9ybS1kYXRhXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgQmFkUmVxdWVzdEV4Y2VwdGlvbih7XG4gICAgICAgIHR5cGU6IFwiaW52YWxpZF9jb250ZW50X3R5cGVcIixcbiAgICAgICAgbWVzc2FnZTogYE11c3QgaGF2ZSBDb250ZW50LVR5cGUgaGVhZGVyIHdpdGggXCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWRcImAsXG4gICAgICB9KVxuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBvcmlnaW5hbF9jb21iaW5lZF9wYXJhbXMgPSB7IC4uLnJlcS5xdWVyeSwgLi4ucmVxLmJvZHkgfVxuXG4gICAgICBjb25zdCB3aWxsVmFsaWRhdGVSZXF1ZXN0Qm9keSA9IGlucHV0LnNob3VsZFZhbGlkYXRlR2V0UmVxdWVzdEJvZHlcbiAgICAgICAgPyB0cnVlXG4gICAgICAgIDogcmVxLm1ldGhvZCAhPT0gXCJHRVRcIiAmJiByZXEubWV0aG9kICE9PSBcIkRFTEVURVwiXG5cbiAgICAgIGNvbnN0IGlzRm9ybURhdGEgPSBCb29sZWFuKGlucHV0LmZvcm1EYXRhKVxuXG4gICAgICBpZiAoaXNGb3JtRGF0YSAmJiB3aWxsVmFsaWRhdGVSZXF1ZXN0Qm9keSkge1xuICAgICAgICByZXEuYm9keSA9IGlucHV0LmZvcm1EYXRhPy5wYXJzZShyZXEuYm9keSlcbiAgICAgIH1cblxuICAgICAgaWYgKCFpc0Zvcm1EYXRhICYmIHdpbGxWYWxpZGF0ZVJlcXVlc3RCb2R5KSB7XG4gICAgICAgIHJlcS5ib2R5ID0gaW5wdXQuanNvbkJvZHk/LnBhcnNlKHJlcS5ib2R5KVxuICAgICAgfVxuXG4gICAgICBpZiAoaW5wdXQucXVlcnlQYXJhbXMpIHtcbiAgICAgICAgaWYgKCFyZXEudXJsKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwicmVxLnVybCBpcyB1bmRlZmluZWRcIilcbiAgICAgICAgfVxuXG4gICAgICAgIHZhbGlkYXRlUXVlcnlQYXJhbXMocmVxLnVybCwgaW5wdXQucXVlcnlQYXJhbXMsIHN1cHBvcnRlZEFycmF5Rm9ybWF0cylcblxuICAgICAgICByZXEucXVlcnkgPSBwYXJzZVF1ZXJ5UGFyYW1zKFxuICAgICAgICAgIGlucHV0LnF1ZXJ5UGFyYW1zLFxuICAgICAgICAgIHJlcS5xdWVyeSxcbiAgICAgICAgICBzdXBwb3J0ZWRBcnJheUZvcm1hdHNcbiAgICAgICAgKVxuICAgICAgfVxuXG4gICAgICBpZiAoaW5wdXQuY29tbW9uUGFyYW1zKSB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBhcyBjb21tb25QYXJhbXMgaW5jbHVkZXMgcXVlcnkgcGFyYW1zLCB3ZSBjYW4gdXNlIHRoZSBwYXJzZVF1ZXJ5UGFyYW1zIGZ1bmN0aW9uXG4gICAgICAgICAqL1xuICAgICAgICA7KHJlcSBhcyBhbnkpLmNvbW1vblBhcmFtcyA9IHBhcnNlUXVlcnlQYXJhbXMoXG4gICAgICAgICAgaW5wdXQuY29tbW9uUGFyYW1zLFxuICAgICAgICAgIG9yaWdpbmFsX2NvbWJpbmVkX3BhcmFtcyxcbiAgICAgICAgICBzdXBwb3J0ZWRBcnJheUZvcm1hdHNcbiAgICAgICAgKVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEJhZFJlcXVlc3RFeGNlcHRpb24pIHtcbiAgICAgICAgdGhyb3cgZXJyb3JcbiAgICAgIH1cblxuICAgICAgaWYgKGVycm9yLm5hbWUgPT09IFwiWm9kRXJyb3JcIikge1xuICAgICAgICBsZXQgbWVzc2FnZVxuICAgICAgICBpZiAoZXJyb3IuaXNzdWVzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgIGNvbnN0IGlzc3VlID0gZXJyb3IuaXNzdWVzWzBdXG4gICAgICAgICAgbWVzc2FnZSA9IHpvZElzc3VlVG9TdHJpbmcoaXNzdWUpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgbWVzc2FnZV9jb21wb25lbnRzOiBzdHJpbmdbXSA9IFtdXG4gICAgICAgICAgZm9yIChjb25zdCBpc3N1ZSBvZiBlcnJvci5pc3N1ZXMpIHtcbiAgICAgICAgICAgIG1lc3NhZ2VfY29tcG9uZW50cy5wdXNoKHpvZElzc3VlVG9TdHJpbmcoaXNzdWUpKVxuICAgICAgICAgIH1cbiAgICAgICAgICBtZXNzYWdlID1cbiAgICAgICAgICAgIGAke2Vycm9yLmlzc3Vlcy5sZW5ndGh9IElucHV0IEVycm9yczogYCArXG4gICAgICAgICAgICBtZXNzYWdlX2NvbXBvbmVudHMuam9pbihcIiwgXCIpXG4gICAgICAgIH1cblxuICAgICAgICB0aHJvdyBuZXcgQmFkUmVxdWVzdEV4Y2VwdGlvbih7XG4gICAgICAgICAgdHlwZTogXCJpbnZhbGlkX2lucHV0XCIsXG4gICAgICAgICAgbWVzc2FnZSxcbiAgICAgICAgICB2YWxpZGF0aW9uX2Vycm9yczogZXJyb3IuZm9ybWF0KCksXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIHRocm93IG5ldyBCYWRSZXF1ZXN0RXhjZXB0aW9uKHtcbiAgICAgICAgdHlwZTogXCJpbnZhbGlkX2lucHV0XCIsXG4gICAgICAgIG1lc3NhZ2U6IFwiRXJyb3Igd2hpbGUgcGFyc2luZyBpbnB1dFwiLFxuICAgICAgfSlcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiB0aGlzIHdpbGwgb3ZlcnJpZGUgdGhlIHJlcy5qc29uIG1ldGhvZCB0byB2YWxpZGF0ZSB0aGUgcmVzcG9uc2VcbiAgICAgKi9cbiAgICBpZiAoaW5wdXQuc2hvdWxkVmFsaWRhdGVSZXNwb25zZXMpIHtcbiAgICAgIHZhbGlkYXRlSnNvblJlc3BvbnNlKGlucHV0Lmpzb25SZXNwb25zZSwgcmVzKVxuICAgIH1cblxuICAgIHJldHVybiBuZXh0KHJlcSwgcmVzKVxuICB9XG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhWYWxpZGF0aW9uXG4iLCAiaW1wb3J0IHsgTmV4dEFwaVJlc3BvbnNlLCBOZXh0QXBpUmVxdWVzdCB9IGZyb20gXCJuZXh0XCJcbmltcG9ydCB7IHdpdGhFeGNlcHRpb25IYW5kbGluZyB9IGZyb20gXCIuLi9uZXh0anMtZXhjZXB0aW9uLW1pZGRsZXdhcmVcIlxuaW1wb3J0IHdyYXBwZXJzLCB7IE1pZGRsZXdhcmUgfSBmcm9tIFwiLi4vd3JhcHBlcnNcIlxuaW1wb3J0IHtcbiAgQ3JlYXRlV2l0aFJvdXRlU3BlY0Z1bmN0aW9uLFxuICBRdWVyeUFycmF5Rm9ybWF0cyxcbiAgUm91dGVTcGVjLFxufSBmcm9tIFwiLi4vdHlwZXNcIlxuaW1wb3J0IHdpdGhNZXRob2RzLCB7IEhUVFBNZXRob2RzIH0gZnJvbSBcIi4vbWlkZGxld2FyZXMvd2l0aC1tZXRob2RzXCJcbmltcG9ydCB3aXRoVmFsaWRhdGlvbiBmcm9tIFwiLi9taWRkbGV3YXJlcy93aXRoLXZhbGlkYXRpb25cIlxuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIlxuXG50eXBlIFBhcmFtRGVmID0gei5ab2RUeXBlQW55IHwgei5ab2RFZmZlY3RzPHouWm9kVHlwZUFueT5cblxuZXhwb3J0IGNvbnN0IGNoZWNrUm91dGVTcGVjID0gPFxuICBBdXRoVHlwZSBleHRlbmRzIHN0cmluZyA9IHN0cmluZyxcbiAgTWV0aG9kcyBleHRlbmRzIEhUVFBNZXRob2RzW10gPSBIVFRQTWV0aG9kc1tdLFxuICBKc29uQm9keSBleHRlbmRzIFBhcmFtRGVmID0gei5ab2RUeXBlQW55LFxuICBRdWVyeVBhcmFtcyBleHRlbmRzIFBhcmFtRGVmID0gei5ab2RUeXBlQW55LFxuICBDb21tb25QYXJhbXMgZXh0ZW5kcyBQYXJhbURlZiA9IHouWm9kVHlwZUFueSxcbiAgTWlkZGxld2FyZXMgZXh0ZW5kcyByZWFkb25seSBNaWRkbGV3YXJlPGFueSwgYW55PltdID0gcmVhZG9ubHkgTWlkZGxld2FyZTxcbiAgICBhbnksXG4gICAgYW55XG4gID5bXSxcbiAgRm9ybURhdGEgZXh0ZW5kcyBQYXJhbURlZiA9IHouWm9kVHlwZUFueSxcbiAgU3BlYyBleHRlbmRzIFJvdXRlU3BlYzxcbiAgICBBdXRoVHlwZSxcbiAgICBNZXRob2RzLFxuICAgIEpzb25Cb2R5LFxuICAgIFF1ZXJ5UGFyYW1zLFxuICAgIENvbW1vblBhcmFtcyxcbiAgICBNaWRkbGV3YXJlcyxcbiAgICBGb3JtRGF0YVxuICA+ID0gUm91dGVTcGVjPFxuICAgIEF1dGhUeXBlLFxuICAgIE1ldGhvZHMsXG4gICAgSnNvbkJvZHksXG4gICAgUXVlcnlQYXJhbXMsXG4gICAgQ29tbW9uUGFyYW1zLFxuICAgIE1pZGRsZXdhcmVzLFxuICAgIEZvcm1EYXRhXG4gID5cbj4oXG4gIHNwZWM6IFNwZWNcbik6IHN0cmluZyBleHRlbmRzIFNwZWNbXCJhdXRoXCJdXG4gID8gYHlvdXIgcm91dGUgc3BlYyBpcyB1bmRlcnNwZWNpZmllZCwgYWRkIFwiYXMgY29uc3RcImBcbiAgOiBTcGVjID0+IHNwZWMgYXMgYW55XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX0FSUkFZX0ZPUk1BVFM6IFF1ZXJ5QXJyYXlGb3JtYXRzID0gW1xuICBcImJyYWNrZXRzXCIsXG4gIFwiY29tbWFcIixcbiAgXCJyZXBlYXRcIixcbl1cblxuZXhwb3J0IGNvbnN0IGNyZWF0ZVdpdGhSb3V0ZVNwZWM6IENyZWF0ZVdpdGhSb3V0ZVNwZWNGdW5jdGlvbiA9ICgoXG4gIHNldHVwUGFyYW1zXG4pID0+IHtcbiAgY29uc3Qge1xuICAgIGF1dGhNaWRkbGV3YXJlTWFwID0ge30sXG4gICAgZ2xvYmFsTWlkZGxld2FyZXMgPSBbXSxcbiAgICBnbG9iYWxNaWRkbGV3YXJlc0FmdGVyQXV0aCA9IFtdLFxuICAgIHNob3VsZFZhbGlkYXRlUmVzcG9uc2VzLFxuICAgIHNob3VsZFZhbGlkYXRlR2V0UmVxdWVzdEJvZHkgPSB0cnVlLFxuICAgIGV4Y2VwdGlvbkhhbmRsaW5nTWlkZGxld2FyZSA9IHdpdGhFeGNlcHRpb25IYW5kbGluZyh7XG4gICAgICBhZGRPa1N0YXR1czogc2V0dXBQYXJhbXMuYWRkT2tTdGF0dXMsXG4gICAgICBleGNlcHRpb25IYW5kbGluZ09wdGlvbnM6IHtcbiAgICAgICAgZ2V0RXJyb3JDb250ZXh0OiAocmVxLCBlcnJvcikgPT4ge1xuICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgICAgICAgICAgIHJldHVybiB7fVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBlcnJvclxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9KSBhcyBhbnksXG4gICAgZ2xvYmFsU2NoZW1hcyA9IHNldHVwUGFyYW1zLmFkZE9rU3RhdHVzXG4gICAgICA/IHtcbiAgICAgICAgICBvazogei5ib29sZWFuKCksXG4gICAgICAgIH1cbiAgICAgIDoge30sXG4gICAgc3VwcG9ydGVkQXJyYXlGb3JtYXRzID0gREVGQVVMVF9BUlJBWV9GT1JNQVRTLFxuICAgIG9uTXVsdGlwbGVBdXRoTWlkZGxld2FyZUZhaWx1cmVzLFxuICB9ID0gc2V0dXBQYXJhbXNcblxuICBjb25zdCB3aXRoUm91dGVTcGVjID0gKHNwZWM6IFJvdXRlU3BlYykgPT4ge1xuICAgIGNvbnN0IGNyZWF0ZVJvdXRlRXhwb3J0ID0gKHVzZXJEZWZpbmVkUm91dGVGbikgPT4ge1xuICAgICAgY29uc3Qgcm9vdFJlcXVlc3RIYW5kbGVyID0gYXN5bmMgKFxuICAgICAgICByZXE6IE5leHRBcGlSZXF1ZXN0LFxuICAgICAgICByZXM6IE5leHRBcGlSZXNwb25zZVxuICAgICAgKSA9PiB7XG4gICAgICAgIGF1dGhNaWRkbGV3YXJlTWFwW1wibm9uZVwiXSA9IChuZXh0KSA9PiBuZXh0XG5cbiAgICAgICAgY29uc3QgYXV0aE1pZGRsZXdhcmVzID0gKFxuICAgICAgICAgIEFycmF5LmlzQXJyYXkoc3BlYy5hdXRoKSA/IHNwZWMuYXV0aCA6IFtzcGVjLmF1dGhdXG4gICAgICAgICkubWFwKChhdXRoVHlwZSkgPT4gYXV0aE1pZGRsZXdhcmVNYXBbYXV0aFR5cGVdKVxuICAgICAgICBjb25zdCB1bmRlZmluZWRBdXRoVHlwZSA9IGF1dGhNaWRkbGV3YXJlcy5maW5kKChtdykgPT4gIW13KVxuICAgICAgICBpZiAodW5kZWZpbmVkQXV0aFR5cGUpXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIGF1dGggdHlwZTogJHt1bmRlZmluZWRBdXRoVHlwZX1gKVxuXG4gICAgICAgIGNvbnN0IGZpcnN0QXV0aE1pZGRsZXdhcmVUaGF0U3VjY2VlZHMgPSAobmV4dCkgPT4gYXN5bmMgKHJlcSwgcmVzKSA9PiB7XG4gICAgICAgICAgbGV0IGVycm9yczogdW5rbm93bltdID0gW11cbiAgICAgICAgICBsZXQgZGlkQXV0aE1pZGRsZXdhcmVUaHJvdyA9IHRydWVcblxuICAgICAgICAgIGZvciAoY29uc3QgbWlkZGxld2FyZSBvZiBhdXRoTWlkZGxld2FyZXMpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIHJldHVybiBhd2FpdCBtaWRkbGV3YXJlKCguLi5hcmdzKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gT3RoZXJ3aXNlIGVycm9ycyB1bnJlbGF0ZWQgdG8gYXV0aCB0aHJvd24gYnkgYnVpbHQtaW4gbWlkZGxld2FyZSAod2l0aE1ldGhvZHMsIHdpdGhWYWxpZGF0aW9uKSB3aWxsIGJlIGNhdWdodCBoZXJlXG4gICAgICAgICAgICAgICAgZGlkQXV0aE1pZGRsZXdhcmVUaHJvdyA9IGZhbHNlXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5leHQoLi4uYXJncylcbiAgICAgICAgICAgICAgfSkocmVxLCByZXMpXG4gICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICBpZiAoZGlkQXV0aE1pZGRsZXdhcmVUaHJvdykge1xuICAgICAgICAgICAgICAgIGVycm9ycy5wdXNoKGVycm9yKVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgZXJyb3JcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChvbk11bHRpcGxlQXV0aE1pZGRsZXdhcmVGYWlsdXJlcyAmJiBkaWRBdXRoTWlkZGxld2FyZVRocm93KSB7XG4gICAgICAgICAgICBvbk11bHRpcGxlQXV0aE1pZGRsZXdhcmVGYWlsdXJlcyhlcnJvcnMpXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhyb3cgZXJyb3JzW2Vycm9ycy5sZW5ndGggLSAxXVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHdyYXBwZXJzKFxuICAgICAgICAgIC4uLigoZXhjZXB0aW9uSGFuZGxpbmdNaWRkbGV3YXJlXG4gICAgICAgICAgICA/IFtleGNlcHRpb25IYW5kbGluZ01pZGRsZXdhcmVdXG4gICAgICAgICAgICA6IFtdKSBhcyBbYW55XSksXG4gICAgICAgICAgLi4uKChnbG9iYWxNaWRkbGV3YXJlcyB8fCBbXSkgYXMgW10pLFxuICAgICAgICAgIGZpcnN0QXV0aE1pZGRsZXdhcmVUaGF0U3VjY2VlZHMsXG4gICAgICAgICAgLi4uKChnbG9iYWxNaWRkbGV3YXJlc0FmdGVyQXV0aCB8fCBbXSkgYXMgW10pLFxuICAgICAgICAgIC4uLigoc3BlYy5taWRkbGV3YXJlcyB8fCBbXSkgYXMgW10pLFxuICAgICAgICAgIHdpdGhNZXRob2RzKHNwZWMubWV0aG9kcyksXG4gICAgICAgICAgd2l0aFZhbGlkYXRpb24oe1xuICAgICAgICAgICAganNvbkJvZHk6IHNwZWMuanNvbkJvZHksXG4gICAgICAgICAgICBxdWVyeVBhcmFtczogc3BlYy5xdWVyeVBhcmFtcyxcbiAgICAgICAgICAgIGNvbW1vblBhcmFtczogc3BlYy5jb21tb25QYXJhbXMsXG4gICAgICAgICAgICBmb3JtRGF0YTogc3BlYy5mb3JtRGF0YSxcbiAgICAgICAgICAgIGpzb25SZXNwb25zZTogc3BlYy5qc29uUmVzcG9uc2UsXG4gICAgICAgICAgICBzaG91bGRWYWxpZGF0ZVJlc3BvbnNlcyxcbiAgICAgICAgICAgIHNob3VsZFZhbGlkYXRlR2V0UmVxdWVzdEJvZHksXG4gICAgICAgICAgICBzdXBwb3J0ZWRBcnJheUZvcm1hdHMsXG4gICAgICAgICAgfSksXG4gICAgICAgICAgdXNlckRlZmluZWRSb3V0ZUZuXG4gICAgICAgICkocmVxIGFzIGFueSwgcmVzKVxuICAgICAgfVxuXG4gICAgICByb290UmVxdWVzdEhhbmRsZXIuX3NldHVwUGFyYW1zID0gc2V0dXBQYXJhbXNcbiAgICAgIHJvb3RSZXF1ZXN0SGFuZGxlci5fcm91dGVTcGVjID0gc3BlY1xuXG4gICAgICByZXR1cm4gcm9vdFJlcXVlc3RIYW5kbGVyXG4gICAgfVxuXG4gICAgY3JlYXRlUm91dGVFeHBvcnQuX3NldHVwUGFyYW1zID0gc2V0dXBQYXJhbXNcbiAgICBjcmVhdGVSb3V0ZUV4cG9ydC5fcm91dGVTcGVjID0gc3BlY1xuXG4gICAgcmV0dXJuIGNyZWF0ZVJvdXRlRXhwb3J0XG4gIH1cblxuICB3aXRoUm91dGVTcGVjLl9zZXR1cFBhcmFtcyA9IHNldHVwUGFyYW1zXG5cbiAgcmV0dXJuIHdpdGhSb3V0ZVNwZWNcbn0pIGFzIGFueVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsK0JBQUFBO0FBQUEsRUFBQTtBQUFBO0FBQUE7OztBQ3dCTyxJQUFNLGdCQUFOLGNBQTRCLE1BQU07QUFBQSxFQUd2QyxZQUNTLFFBQ0EsVUFDUCxTQUNBO0FBQ0EsVUFBTSxTQUFTLE9BQU87QUFKZjtBQUNBO0FBS1AsUUFBSSxNQUFNLG1CQUFtQjtBQUMzQixZQUFNLGtCQUFrQixNQUFNLEtBQUssV0FBVztBQUFBLElBQ2hEO0FBRUEsU0FBSyxVQUFVLDRCQUFXLEVBQUUsTUFBTSxLQUFLO0FBQUEsRUFDekM7QUFBQSxFQUVBLFdBQVc7QUFDVCxXQUFPLGtCQUFrQixLQUFLLFdBQVcsS0FBSyxTQUFTLFlBQVksS0FBSyxTQUFTO0FBQUEsRUFDbkY7QUFDRjtBQWlCTyxJQUFNLHNCQUFOLGNBQWtDLGNBQWM7QUFBQSxFQUNyRCxZQUNTLFVBQ1AsU0FDQTtBQUNBLFVBQU0sS0FBSyxVQUFVLE9BQU87QUFIckI7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