@blinkk/root-cms 1.0.0-beta.21 → 1.0.0-beta.23

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/app.js CHANGED
@@ -85,7 +85,8 @@ async function renderApp(req, res, options) {
85
85
  projectId: cmsConfig.id || "default",
86
86
  projectName: cmsConfig.name || cmsConfig.id || "",
87
87
  domain: rootConfig.domain || "https://example.com",
88
- gci: cmsConfig.gci ?? "https://gci.rootjs.dev"
88
+ gci: cmsConfig.gci ?? "https://gci.rootjs.dev",
89
+ i18n: rootConfig.i18n
89
90
  },
90
91
  firebaseConfig: options.firebaseConfig,
91
92
  collections
@@ -198,4 +199,4 @@ export {
198
199
  renderApp,
199
200
  renderSignIn
200
201
  };
201
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vY29yZS9hcHAudHN4Il0sCiAgInNvdXJjZXNDb250ZW50IjogWyJpbXBvcnQgcGF0aCBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0IHtmaWxlVVJMVG9QYXRofSBmcm9tICdub2RlOnVybCc7XG5cbmltcG9ydCB7UmVxdWVzdCwgUmVzcG9uc2V9IGZyb20gJ0BibGlua2svcm9vdCc7XG5pbXBvcnQge3JlbmRlciBhcyByZW5kZXJUb1N0cmluZ30gZnJvbSAncHJlYWN0LXJlbmRlci10by1zdHJpbmcnO1xuXG5pbXBvcnQge0NvbGxlY3Rpb259IGZyb20gJy4vc2NoZW1hLmpzJztcblxuY29uc3QgX19kaXJuYW1lID0gcGF0aC5kaXJuYW1lKGZpbGVVUkxUb1BhdGgoaW1wb3J0Lm1ldGEudXJsKSk7XG5cbmludGVyZmFjZSBBcHBQcm9wcyB7XG4gIHRpdGxlOiBzdHJpbmc7XG4gIGN0eDogYW55O1xufVxuXG5mdW5jdGlvbiBBcHAocHJvcHM6IEFwcFByb3BzKSB7XG4gIHJldHVybiAoXG4gICAgPGh0bWw+XG4gICAgICA8aGVhZD5cbiAgICAgICAgPHRpdGxlPntwcm9wcy50aXRsZX08L3RpdGxlPlxuICAgICAgICA8bGluayByZWw9XCJwcmVjb25uZWN0XCIgaHJlZj1cImh0dHBzOi8vZm9udHMuZ29vZ2xlYXBpcy5jb21cIiAvPlxuICAgICAgICA8bGlua1xuICAgICAgICAgIHJlbD1cInByZWNvbm5lY3RcIlxuICAgICAgICAgIGhyZWY9XCJodHRwczovL2ZvbnRzLmdzdGF0aWMuY29tXCJcbiAgICAgICAgICBjcm9zc09yaWdpbj1cImFub255bW91c1wiXG4gICAgICAgIC8+XG4gICAgICAgIDxsaW5rXG4gICAgICAgICAgcmVsPVwic3R5bGVzaGVldFwiXG4gICAgICAgICAgaHJlZj1cImh0dHBzOi8vZm9udHMuZ29vZ2xlYXBpcy5jb20vY3NzMj9mYW1pbHk9SW50ZXI6d2dodEAzMDA7NDAwOzUwMDs2MDA7NzAwOzkwMCZkaXNwbGF5PXN3YXBcIlxuICAgICAgICAvPlxuICAgICAgICA8bGlua1xuICAgICAgICAgIHJlbD1cInN0eWxlc2hlZXRcIlxuICAgICAgICAgIGhyZWY9XCJodHRwczovL2ZvbnRzLmdvb2dsZWFwaXMuY29tL2NzczI/ZmFtaWx5PUdvb2dsZStTYW5zOndnaHRANTAwJmRpc3BsYXk9c3dhcFwiXG4gICAgICAgIC8+XG4gICAgICAgIDxsaW5rIHJlbD1cInN0eWxlc2hlZXRcIiBocmVmPVwie0NTU19VUkx9XCIgLz5cbiAgICAgIDwvaGVhZD5cbiAgICAgIDxib2R5PlxuICAgICAgICA8ZGl2IGlkPVwicm9vdFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYm9vdHN0cmFwXCI+XG4gICAgICAgICAgICA8aDEgY2xhc3NOYW1lPVwiYm9vdHN0cmFwX19sb2FkaW5nXCI+TG9hZGluZy4uLjwvaDE+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImJvb3RzdHJhcC1lcnJvclwiPlxuICAgICAgICAgICAgICBJZiB0aGlzIHBhZ2UgZmFpbHMgdG8gbG9hZCwgdHJ5IGEgZm9yY2UgcmVmcmVzaCBieSBob2xkaW5nIHRoZVxuICAgICAgICAgICAgICBzaGlmdCBrZXkgd2hpbGUgcmVmcmVzaGluZyB0aGUgcGFnZS5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPHNjcmlwdFxuICAgICAgICAgIGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MPXt7XG4gICAgICAgICAgICBfX2h0bWw6IGB3aW5kb3cuX19ST09UX0NUWCA9ICR7SlNPTi5zdHJpbmdpZnkocHJvcHMuY3R4KX1gLFxuICAgICAgICAgIH19XG4gICAgICAgIC8+XG4gICAgICAgIDxzY3JpcHQgdHlwZT1cIm1vZHVsZVwiIHNyYz1cIntKU19VUkx9XCI+PC9zY3JpcHQ+XG4gICAgICA8L2JvZHk+XG4gICAgPC9odG1sPlxuICApO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVuZGVyQXBwKHJlcTogUmVxdWVzdCwgcmVzOiBSZXNwb25zZSwgb3B0aW9uczogYW55KSB7XG4gIGNvbnN0IGNvbGxlY3Rpb25Nb2R1bGVzID0gaW1wb3J0Lm1ldGEuZ2xvYignL2NvbGxlY3Rpb25zLyouc2NoZW1hLnRzJywge1xuICAgIGVhZ2VyOiB0cnVlLFxuICB9KSBhcyBhbnk7XG4gIGNvbnN0IGNvbGxlY3Rpb25zOiBSZWNvcmQ8c3RyaW5nLCBDb2xsZWN0aW9uPiA9IHt9O1xuICBPYmplY3Qua2V5cyhjb2xsZWN0aW9uTW9kdWxlcykuZm9yRWFjaCgobW9kdWxlSWQ6IHN0cmluZykgPT4ge1xuICAgIGNvbnN0IGNvbGxlY3Rpb25JZCA9IHBhdGgucGFyc2UobW9kdWxlSWQpLmJhc2Uuc3BsaXQoJy4nKVswXTtcbiAgICBjb25zdCBtb2R1bGUgPSBjb2xsZWN0aW9uTW9kdWxlc1ttb2R1bGVJZF07XG4gICAgY29uc3QgY29sbGVjdGlvbiA9IG1vZHVsZS5kZWZhdWx0IGFzIENvbGxlY3Rpb247XG4gICAgY29sbGVjdGlvbnNbY29sbGVjdGlvbklkXSA9IGNvbGxlY3Rpb247XG4gIH0pO1xuICBjb25zdCByb290Q29uZmlnID0gb3B0aW9ucy5yb290Q29uZmlnIHx8IHt9O1xuICBjb25zdCBjbXNDb25maWcgPSBvcHRpb25zLmNtc0NvbmZpZyB8fCB7fTtcbiAgY29uc3QgY3R4ID0ge1xuICAgIHJvb3RDb25maWc6IHtcbiAgICAgIHByb2plY3RJZDogY21zQ29uZmlnLmlkIHx8ICdkZWZhdWx0JyxcbiAgICAgIHByb2plY3ROYW1lOiBjbXNDb25maWcubmFtZSB8fCBjbXNDb25maWcuaWQgfHwgJycsXG4gICAgICBkb21haW46IHJvb3RDb25maWcuZG9tYWluIHx8ICdodHRwczovL2V4YW1wbGUuY29tJyxcbiAgICAgIGdjaTogY21zQ29uZmlnLmdjaSA/PyAnaHR0cHM6Ly9nY2kucm9vdGpzLmRldicsXG4gICAgfSxcbiAgICBmaXJlYmFzZUNvbmZpZzogb3B0aW9ucy5maXJlYmFzZUNvbmZpZyxcbiAgICBjb2xsZWN0aW9uczogY29sbGVjdGlvbnMsXG4gIH07XG4gIGNvbnN0IHByb2plY3ROYW1lID0gY21zQ29uZmlnLm5hbWUgfHwgY21zQ29uZmlnLmlkIHx8ICcnO1xuICBjb25zdCB0aXRsZSA9IHByb2plY3ROYW1lID8gYCR7cHJvamVjdE5hbWV9IFx1MjAxMyBSb290LmpzIENNU2AgOiAnUm9vdC5qcyBDTVMnO1xuXG4gIGNvbnN0IG1haW5IdG1sID0gcmVuZGVyVG9TdHJpbmcoPEFwcCB0aXRsZT17dGl0bGV9IGN0eD17Y3R4fSAvPik7XG4gIGxldCBodG1sID0gYDwhZG9jdHlwZSBodG1sPlxcbiR7bWFpbkh0bWx9YDtcbiAgaWYgKHJlcS52aXRlU2VydmVyKSB7XG4gICAgY29uc3QgdWlDc3NQYXRoID0gcGF0aC5qb2luKF9fZGlybmFtZSwgJ3VpL3VpLmNzcycpO1xuICAgIGNvbnN0IHVpSnNQYXRoID0gcGF0aC5qb2luKF9fZGlybmFtZSwgJ3VpL3VpLmpzJyk7XG4gICAgY29uc3QgdHBsID0gaHRtbFxuICAgICAgLnJlcGxhY2UoJ3tDU1NfVVJMfScsIGAvQGZzJHt1aUNzc1BhdGh9YClcbiAgICAgIC5yZXBsYWNlKCd7SlNfVVJMfScsIGAvQGZzJHt1aUpzUGF0aH1gKTtcbiAgICBodG1sID0gYXdhaXQgcmVxLnZpdGVTZXJ2ZXIhLnRyYW5zZm9ybUluZGV4SHRtbChyZXEub3JpZ2luYWxVcmwsIHRwbCk7XG4gIH0gZWxzZSB7XG4gICAgaHRtbCA9IGh0bWxcbiAgICAgIC5yZXBsYWNlKCd7Q1NTX1VSTH0nLCAnL2Ntcy9zdGF0aWMvdWkuY3NzJylcbiAgICAgIC5yZXBsYWNlKCd7SlNfVVJMfScsICcvY21zL3N0YXRpYy91aS5qcycpO1xuICB9XG4gIHJlcy5zZXRIZWFkZXIoJ0NvbnRlbnQtVHlwZScsICd0ZXh0L2h0bWwnKTtcbiAgcmVzLnNlbmQoaHRtbCk7XG59XG5cbmludGVyZmFjZSBTaWduSW5Qcm9wcyB7XG4gIHRpdGxlOiBzdHJpbmc7XG4gIGN0eDogYW55O1xufVxuXG5mdW5jdGlvbiBTaWduSW4ocHJvcHM6IFNpZ25JblByb3BzKSB7XG4gIHJldHVybiAoXG4gICAgPGh0bWw+XG4gICAgICA8aGVhZD5cbiAgICAgICAgPG1ldGEgY2hhcnNldD1cInV0Zi04XCIgLz5cbiAgICAgICAgPHRpdGxlPntwcm9wcy50aXRsZX08L3RpdGxlPlxuICAgICAgICA8bGluayByZWw9XCJwcmVjb25uZWN0XCIgaHJlZj1cImh0dHBzOi8vZm9udHMuZ29vZ2xlYXBpcy5jb21cIiAvPlxuICAgICAgICA8bWV0YSBuYW1lPVwidmlld3BvcnRcIiBjb250ZW50PVwid2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEuMFwiIC8+XG4gICAgICAgIDxsaW5rXG4gICAgICAgICAgcmVsPVwicHJlY29ubmVjdFwiXG4gICAgICAgICAgaHJlZj1cImh0dHBzOi8vZm9udHMuZ3N0YXRpYy5jb21cIlxuICAgICAgICAgIGNyb3NzT3JpZ2luPVwiYW5vbnltb3VzXCJcbiAgICAgICAgLz5cbiAgICAgICAgPGxpbmtcbiAgICAgICAgICByZWw9XCJzdHlsZXNoZWV0XCJcbiAgICAgICAgICBocmVmPVwiaHR0cHM6Ly9mb250cy5nb29nbGVhcGlzLmNvbS9jc3MyP2ZhbWlseT1JbnRlcjp3Z2h0QDMwMDs0MDA7NTAwOzYwMDs3MDA7OTAwJmRpc3BsYXk9c3dhcFwiXG4gICAgICAgIC8+XG4gICAgICAgIDxsaW5rIHJlbD1cInN0eWxlc2hlZXRcIiBocmVmPVwie0NTU19VUkx9XCIgLz5cbiAgICAgIDwvaGVhZD5cbiAgICAgIDxib2R5PlxuICAgICAgICA8ZGl2IGlkPVwicm9vdFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYm9vdHN0cmFwXCI+XG4gICAgICAgICAgICA8aDEgY2xhc3NOYW1lPVwiYm9vdHN0cmFwX19sb2FkaW5nXCI+TG9hZGluZy4uLjwvaDE+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImJvb3RzdHJhcC1lcnJvclwiPlxuICAgICAgICAgICAgICBJZiB0aGlzIHBhZ2UgZmFpbHMgdG8gbG9hZCwgdHJ5IGEgZm9yY2UgcmVmcmVzaCBieSBob2xkaW5nIHRoZVxuICAgICAgICAgICAgICBzaGlmdCBrZXkgd2hpbGUgcmVmcmVzaGluZyB0aGUgcGFnZS5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPHNjcmlwdFxuICAgICAgICAgIGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MPXt7XG4gICAgICAgICAgICBfX2h0bWw6IGB3aW5kb3cuX19ST09UX0NUWCA9ICR7SlNPTi5zdHJpbmdpZnkocHJvcHMuY3R4KX1gLFxuICAgICAgICAgIH19XG4gICAgICAgIC8+XG4gICAgICAgIDxzY3JpcHQgdHlwZT1cIm1vZHVsZVwiIHNyYz1cIntKU19VUkx9XCI+PC9zY3JpcHQ+XG4gICAgICA8L2JvZHk+XG4gICAgPC9odG1sPlxuICApO1xufVxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlbmRlclNpZ25JbihyZXE6IFJlcXVlc3QsIHJlczogUmVzcG9uc2UsIG9wdGlvbnM6IGFueSkge1xuICBjb25zdCBjdHggPSB7ZmlyZWJhc2VDb25maWc6IG9wdGlvbnMuZmlyZWJhc2VDb25maWd9O1xuICBjb25zdCBtYWluSHRtbCA9IHJlbmRlclRvU3RyaW5nKDxTaWduSW4gdGl0bGU9XCJTaWduIGluXCIgY3R4PXtjdHh9IC8+KTtcbiAgbGV0IGh0bWwgPSBgPCFkb2N0eXBlIGh0bWw+XFxuJHttYWluSHRtbH1gO1xuICBpZiAocmVxLnZpdGVTZXJ2ZXIpIHtcbiAgICBjb25zdCBjc3NQYXRoID0gcGF0aC5qb2luKF9fZGlybmFtZSwgJ3VpL3NpZ25pbi5jc3MnKTtcbiAgICBjb25zdCBqc1BhdGggPSBwYXRoLmpvaW4oX19kaXJuYW1lLCAndWkvc2lnbmluLmpzJyk7XG4gICAgY29uc3QgdHBsID0gaHRtbFxuICAgICAgLnJlcGxhY2UoJ3tDU1NfVVJMfScsIGAvQGZzJHtjc3NQYXRofWApXG4gICAgICAucmVwbGFjZSgne0pTX1VSTH0nLCBgL0BmcyR7anNQYXRofWApO1xuICAgIGh0bWwgPSBhd2FpdCByZXEudml0ZVNlcnZlciEudHJhbnNmb3JtSW5kZXhIdG1sKHJlcS5vcmlnaW5hbFVybCwgdHBsKTtcbiAgfSBlbHNlIHtcbiAgICBodG1sID0gaHRtbFxuICAgICAgLnJlcGxhY2UoJ3tDU1NfVVJMfScsICcvY21zL3N0YXRpYy9zaWduaW4uY3NzJylcbiAgICAgIC5yZXBsYWNlKCd7SlNfVVJMfScsICcvY21zL3N0YXRpYy9zaWduaW4uanMnKTtcbiAgfVxuICByZXMuc2V0SGVhZGVyKCdDb250ZW50LVR5cGUnLCAndGV4dC9odG1sJyk7XG4gIHJlcy5zZW5kKGh0bWwpO1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjtBQUFBLE9BQU8sVUFBVTtBQUNqQixTQUFRLHFCQUFvQjtBQUc1QixTQUFRLFVBQVUsc0JBQXFCO0FBY2pDLFNBQ0UsS0FERjtBQVZOLElBQU0sWUFBWSxLQUFLLFFBQVEsY0FBYyxZQUFZLEdBQUcsQ0FBQztBQU83RCxTQUFTLElBQUksT0FBaUI7QUFDNUIsU0FDRSxxQkFBQztBQUFBLElBQ0M7QUFBQSwyQkFBQztBQUFBLFFBQ0M7QUFBQSw4QkFBQztBQUFBLFlBQU8sZ0JBQU07QUFBQSxXQUFNO0FBQUEsVUFDcEIsb0JBQUM7QUFBQSxZQUFLLEtBQUk7QUFBQSxZQUFhLE1BQUs7QUFBQSxXQUErQjtBQUFBLFVBQzNELG9CQUFDO0FBQUEsWUFDQyxLQUFJO0FBQUEsWUFDSixNQUFLO0FBQUEsWUFDTCxhQUFZO0FBQUEsV0FDZDtBQUFBLFVBQ0Esb0JBQUM7QUFBQSxZQUNDLEtBQUk7QUFBQSxZQUNKLE1BQUs7QUFBQSxXQUNQO0FBQUEsVUFDQSxvQkFBQztBQUFBLFlBQ0MsS0FBSTtBQUFBLFlBQ0osTUFBSztBQUFBLFdBQ1A7QUFBQSxVQUNBLG9CQUFDO0FBQUEsWUFBSyxLQUFJO0FBQUEsWUFBYSxNQUFLO0FBQUEsV0FBWTtBQUFBO0FBQUEsT0FDMUM7QUFBQSxNQUNBLHFCQUFDO0FBQUEsUUFDQztBQUFBLDhCQUFDO0FBQUEsWUFBSSxJQUFHO0FBQUEsWUFDTiwrQkFBQztBQUFBLGNBQUksV0FBVTtBQUFBLGNBQ2I7QUFBQSxvQ0FBQztBQUFBLGtCQUFHLFdBQVU7QUFBQSxrQkFBcUI7QUFBQSxpQkFBVTtBQUFBLGdCQUM3QyxvQkFBQztBQUFBLGtCQUFJLFdBQVU7QUFBQSxrQkFBa0I7QUFBQSxpQkFHakM7QUFBQTtBQUFBLGFBQ0Y7QUFBQSxXQUNGO0FBQUEsVUFDQSxvQkFBQztBQUFBLFlBQ0MseUJBQXlCO0FBQUEsY0FDdkIsUUFBUSx1QkFBdUIsS0FBSyxVQUFVLE1BQU0sR0FBRztBQUFBLFlBQ3pEO0FBQUEsV0FDRjtBQUFBLFVBQ0Esb0JBQUM7QUFBQSxZQUFPLE1BQUs7QUFBQSxZQUFTLEtBQUk7QUFBQSxXQUFXO0FBQUE7QUFBQSxPQUN2QztBQUFBO0FBQUEsR0FDRjtBQUVKO0FBRUEsZUFBc0IsVUFBVSxLQUFjLEtBQWUsU0FBYztBQUN6RSxRQUFNLG9CQUFvQixZQUFZLEtBQUssNEJBQTRCO0FBQUEsSUFDckUsT0FBTztBQUFBLEVBQ1QsQ0FBQztBQUNELFFBQU0sY0FBMEMsQ0FBQztBQUNqRCxTQUFPLEtBQUssaUJBQWlCLEVBQUUsUUFBUSxDQUFDLGFBQXFCO0FBQzNELFVBQU0sZUFBZSxLQUFLLE1BQU0sUUFBUSxFQUFFLEtBQUssTUFBTSxHQUFHLEVBQUU7QUFDMUQsVUFBTSxTQUFTLGtCQUFrQjtBQUNqQyxVQUFNLGFBQWEsT0FBTztBQUMxQixnQkFBWSxnQkFBZ0I7QUFBQSxFQUM5QixDQUFDO0FBQ0QsUUFBTSxhQUFhLFFBQVEsY0FBYyxDQUFDO0FBQzFDLFFBQU0sWUFBWSxRQUFRLGFBQWEsQ0FBQztBQUN4QyxRQUFNLE1BQU07QUFBQSxJQUNWLFlBQVk7QUFBQSxNQUNWLFdBQVcsVUFBVSxNQUFNO0FBQUEsTUFDM0IsYUFBYSxVQUFVLFFBQVEsVUFBVSxNQUFNO0FBQUEsTUFDL0MsUUFBUSxXQUFXLFVBQVU7QUFBQSxNQUM3QixLQUFLLFVBQVUsT0FBTztBQUFBLElBQ3hCO0FBQUEsSUFDQSxnQkFBZ0IsUUFBUTtBQUFBLElBQ3hCO0FBQUEsRUFDRjtBQUNBLFFBQU0sY0FBYyxVQUFVLFFBQVEsVUFBVSxNQUFNO0FBQ3RELFFBQU0sUUFBUSxjQUFjLEdBQUcsbUNBQThCO0FBRTdELFFBQU0sV0FBVyxlQUFlLG9CQUFDO0FBQUEsSUFBSTtBQUFBLElBQWM7QUFBQSxHQUFVLENBQUU7QUFDL0QsTUFBSSxPQUFPO0FBQUEsRUFBb0I7QUFDL0IsTUFBSSxJQUFJLFlBQVk7QUFDbEIsVUFBTSxZQUFZLEtBQUssS0FBSyxXQUFXLFdBQVc7QUFDbEQsVUFBTSxXQUFXLEtBQUssS0FBSyxXQUFXLFVBQVU7QUFDaEQsVUFBTSxNQUFNLEtBQ1QsUUFBUSxhQUFhLE9BQU8sV0FBVyxFQUN2QyxRQUFRLFlBQVksT0FBTyxVQUFVO0FBQ3hDLFdBQU8sTUFBTSxJQUFJLFdBQVksbUJBQW1CLElBQUksYUFBYSxHQUFHO0FBQUEsRUFDdEUsT0FBTztBQUNMLFdBQU8sS0FDSixRQUFRLGFBQWEsb0JBQW9CLEVBQ3pDLFFBQVEsWUFBWSxtQkFBbUI7QUFBQSxFQUM1QztBQUNBLE1BQUksVUFBVSxnQkFBZ0IsV0FBVztBQUN6QyxNQUFJLEtBQUssSUFBSTtBQUNmO0FBT0EsU0FBUyxPQUFPLE9BQW9CO0FBQ2xDLFNBQ0UscUJBQUM7QUFBQSxJQUNDO0FBQUEsMkJBQUM7QUFBQSxRQUNDO0FBQUEsOEJBQUM7QUFBQSxZQUFLLFNBQVE7QUFBQSxXQUFRO0FBQUEsVUFDdEIsb0JBQUM7QUFBQSxZQUFPLGdCQUFNO0FBQUEsV0FBTTtBQUFBLFVBQ3BCLG9CQUFDO0FBQUEsWUFBSyxLQUFJO0FBQUEsWUFBYSxNQUFLO0FBQUEsV0FBK0I7QUFBQSxVQUMzRCxvQkFBQztBQUFBLFlBQUssTUFBSztBQUFBLFlBQVcsU0FBUTtBQUFBLFdBQXdDO0FBQUEsVUFDdEUsb0JBQUM7QUFBQSxZQUNDLEtBQUk7QUFBQSxZQUNKLE1BQUs7QUFBQSxZQUNMLGFBQVk7QUFBQSxXQUNkO0FBQUEsVUFDQSxvQkFBQztBQUFBLFlBQ0MsS0FBSTtBQUFBLFlBQ0osTUFBSztBQUFBLFdBQ1A7QUFBQSxVQUNBLG9CQUFDO0FBQUEsWUFBSyxLQUFJO0FBQUEsWUFBYSxNQUFLO0FBQUEsV0FBWTtBQUFBO0FBQUEsT0FDMUM7QUFBQSxNQUNBLHFCQUFDO0FBQUEsUUFDQztBQUFBLDhCQUFDO0FBQUEsWUFBSSxJQUFHO0FBQUEsWUFDTiwrQkFBQztBQUFBLGNBQUksV0FBVTtBQUFBLGNBQ2I7QUFBQSxvQ0FBQztBQUFBLGtCQUFHLFdBQVU7QUFBQSxrQkFBcUI7QUFBQSxpQkFBVTtBQUFBLGdCQUM3QyxvQkFBQztBQUFBLGtCQUFJLFdBQVU7QUFBQSxrQkFBa0I7QUFBQSxpQkFHakM7QUFBQTtBQUFBLGFBQ0Y7QUFBQSxXQUNGO0FBQUEsVUFDQSxvQkFBQztBQUFBLFlBQ0MseUJBQXlCO0FBQUEsY0FDdkIsUUFBUSx1QkFBdUIsS0FBSyxVQUFVLE1BQU0sR0FBRztBQUFBLFlBQ3pEO0FBQUEsV0FDRjtBQUFBLFVBQ0Esb0JBQUM7QUFBQSxZQUFPLE1BQUs7QUFBQSxZQUFTLEtBQUk7QUFBQSxXQUFXO0FBQUE7QUFBQSxPQUN2QztBQUFBO0FBQUEsR0FDRjtBQUVKO0FBQ0EsZUFBc0IsYUFBYSxLQUFjLEtBQWUsU0FBYztBQUM1RSxRQUFNLE1BQU0sRUFBQyxnQkFBZ0IsUUFBUSxlQUFjO0FBQ25ELFFBQU0sV0FBVyxlQUFlLG9CQUFDO0FBQUEsSUFBTyxPQUFNO0FBQUEsSUFBVTtBQUFBLEdBQVUsQ0FBRTtBQUNwRSxNQUFJLE9BQU87QUFBQSxFQUFvQjtBQUMvQixNQUFJLElBQUksWUFBWTtBQUNsQixVQUFNLFVBQVUsS0FBSyxLQUFLLFdBQVcsZUFBZTtBQUNwRCxVQUFNLFNBQVMsS0FBSyxLQUFLLFdBQVcsY0FBYztBQUNsRCxVQUFNLE1BQU0sS0FDVCxRQUFRLGFBQWEsT0FBTyxTQUFTLEVBQ3JDLFFBQVEsWUFBWSxPQUFPLFFBQVE7QUFDdEMsV0FBTyxNQUFNLElBQUksV0FBWSxtQkFBbUIsSUFBSSxhQUFhLEdBQUc7QUFBQSxFQUN0RSxPQUFPO0FBQ0wsV0FBTyxLQUNKLFFBQVEsYUFBYSx3QkFBd0IsRUFDN0MsUUFBUSxZQUFZLHVCQUF1QjtBQUFBLEVBQ2hEO0FBQ0EsTUFBSSxVQUFVLGdCQUFnQixXQUFXO0FBQ3pDLE1BQUksS0FBSyxJQUFJO0FBQ2Y7IiwKICAibmFtZXMiOiBbXQp9Cg==
202
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vY29yZS9hcHAudHN4Il0sCiAgInNvdXJjZXNDb250ZW50IjogWyJpbXBvcnQgcGF0aCBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0IHtmaWxlVVJMVG9QYXRofSBmcm9tICdub2RlOnVybCc7XG5cbmltcG9ydCB7UmVxdWVzdCwgUmVzcG9uc2V9IGZyb20gJ0BibGlua2svcm9vdCc7XG5pbXBvcnQge3JlbmRlciBhcyByZW5kZXJUb1N0cmluZ30gZnJvbSAncHJlYWN0LXJlbmRlci10by1zdHJpbmcnO1xuXG5pbXBvcnQge0NvbGxlY3Rpb259IGZyb20gJy4vc2NoZW1hLmpzJztcblxuY29uc3QgX19kaXJuYW1lID0gcGF0aC5kaXJuYW1lKGZpbGVVUkxUb1BhdGgoaW1wb3J0Lm1ldGEudXJsKSk7XG5cbmludGVyZmFjZSBBcHBQcm9wcyB7XG4gIHRpdGxlOiBzdHJpbmc7XG4gIGN0eDogYW55O1xufVxuXG5mdW5jdGlvbiBBcHAocHJvcHM6IEFwcFByb3BzKSB7XG4gIHJldHVybiAoXG4gICAgPGh0bWw+XG4gICAgICA8aGVhZD5cbiAgICAgICAgPHRpdGxlPntwcm9wcy50aXRsZX08L3RpdGxlPlxuICAgICAgICA8bGluayByZWw9XCJwcmVjb25uZWN0XCIgaHJlZj1cImh0dHBzOi8vZm9udHMuZ29vZ2xlYXBpcy5jb21cIiAvPlxuICAgICAgICA8bGlua1xuICAgICAgICAgIHJlbD1cInByZWNvbm5lY3RcIlxuICAgICAgICAgIGhyZWY9XCJodHRwczovL2ZvbnRzLmdzdGF0aWMuY29tXCJcbiAgICAgICAgICBjcm9zc09yaWdpbj1cImFub255bW91c1wiXG4gICAgICAgIC8+XG4gICAgICAgIDxsaW5rXG4gICAgICAgICAgcmVsPVwic3R5bGVzaGVldFwiXG4gICAgICAgICAgaHJlZj1cImh0dHBzOi8vZm9udHMuZ29vZ2xlYXBpcy5jb20vY3NzMj9mYW1pbHk9SW50ZXI6d2dodEAzMDA7NDAwOzUwMDs2MDA7NzAwOzkwMCZkaXNwbGF5PXN3YXBcIlxuICAgICAgICAvPlxuICAgICAgICA8bGlua1xuICAgICAgICAgIHJlbD1cInN0eWxlc2hlZXRcIlxuICAgICAgICAgIGhyZWY9XCJodHRwczovL2ZvbnRzLmdvb2dsZWFwaXMuY29tL2NzczI/ZmFtaWx5PUdvb2dsZStTYW5zOndnaHRANTAwJmRpc3BsYXk9c3dhcFwiXG4gICAgICAgIC8+XG4gICAgICAgIDxsaW5rIHJlbD1cInN0eWxlc2hlZXRcIiBocmVmPVwie0NTU19VUkx9XCIgLz5cbiAgICAgIDwvaGVhZD5cbiAgICAgIDxib2R5PlxuICAgICAgICA8ZGl2IGlkPVwicm9vdFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYm9vdHN0cmFwXCI+XG4gICAgICAgICAgICA8aDEgY2xhc3NOYW1lPVwiYm9vdHN0cmFwX19sb2FkaW5nXCI+TG9hZGluZy4uLjwvaDE+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImJvb3RzdHJhcC1lcnJvclwiPlxuICAgICAgICAgICAgICBJZiB0aGlzIHBhZ2UgZmFpbHMgdG8gbG9hZCwgdHJ5IGEgZm9yY2UgcmVmcmVzaCBieSBob2xkaW5nIHRoZVxuICAgICAgICAgICAgICBzaGlmdCBrZXkgd2hpbGUgcmVmcmVzaGluZyB0aGUgcGFnZS5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPHNjcmlwdFxuICAgICAgICAgIGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MPXt7XG4gICAgICAgICAgICBfX2h0bWw6IGB3aW5kb3cuX19ST09UX0NUWCA9ICR7SlNPTi5zdHJpbmdpZnkocHJvcHMuY3R4KX1gLFxuICAgICAgICAgIH19XG4gICAgICAgIC8+XG4gICAgICAgIDxzY3JpcHQgdHlwZT1cIm1vZHVsZVwiIHNyYz1cIntKU19VUkx9XCI+PC9zY3JpcHQ+XG4gICAgICA8L2JvZHk+XG4gICAgPC9odG1sPlxuICApO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVuZGVyQXBwKHJlcTogUmVxdWVzdCwgcmVzOiBSZXNwb25zZSwgb3B0aW9uczogYW55KSB7XG4gIGNvbnN0IGNvbGxlY3Rpb25Nb2R1bGVzID0gaW1wb3J0Lm1ldGEuZ2xvYignL2NvbGxlY3Rpb25zLyouc2NoZW1hLnRzJywge1xuICAgIGVhZ2VyOiB0cnVlLFxuICB9KSBhcyBhbnk7XG4gIGNvbnN0IGNvbGxlY3Rpb25zOiBSZWNvcmQ8c3RyaW5nLCBDb2xsZWN0aW9uPiA9IHt9O1xuICBPYmplY3Qua2V5cyhjb2xsZWN0aW9uTW9kdWxlcykuZm9yRWFjaCgobW9kdWxlSWQ6IHN0cmluZykgPT4ge1xuICAgIGNvbnN0IGNvbGxlY3Rpb25JZCA9IHBhdGgucGFyc2UobW9kdWxlSWQpLmJhc2Uuc3BsaXQoJy4nKVswXTtcbiAgICBjb25zdCBtb2R1bGUgPSBjb2xsZWN0aW9uTW9kdWxlc1ttb2R1bGVJZF07XG4gICAgY29uc3QgY29sbGVjdGlvbiA9IG1vZHVsZS5kZWZhdWx0IGFzIENvbGxlY3Rpb247XG4gICAgY29sbGVjdGlvbnNbY29sbGVjdGlvbklkXSA9IGNvbGxlY3Rpb247XG4gIH0pO1xuICBjb25zdCByb290Q29uZmlnID0gb3B0aW9ucy5yb290Q29uZmlnIHx8IHt9O1xuICBjb25zdCBjbXNDb25maWcgPSBvcHRpb25zLmNtc0NvbmZpZyB8fCB7fTtcbiAgY29uc3QgY3R4ID0ge1xuICAgIHJvb3RDb25maWc6IHtcbiAgICAgIHByb2plY3RJZDogY21zQ29uZmlnLmlkIHx8ICdkZWZhdWx0JyxcbiAgICAgIHByb2plY3ROYW1lOiBjbXNDb25maWcubmFtZSB8fCBjbXNDb25maWcuaWQgfHwgJycsXG4gICAgICBkb21haW46IHJvb3RDb25maWcuZG9tYWluIHx8ICdodHRwczovL2V4YW1wbGUuY29tJyxcbiAgICAgIGdjaTogY21zQ29uZmlnLmdjaSA/PyAnaHR0cHM6Ly9nY2kucm9vdGpzLmRldicsXG4gICAgICBpMThuOiByb290Q29uZmlnLmkxOG4sXG4gICAgfSxcbiAgICBmaXJlYmFzZUNvbmZpZzogb3B0aW9ucy5maXJlYmFzZUNvbmZpZyxcbiAgICBjb2xsZWN0aW9uczogY29sbGVjdGlvbnMsXG4gIH07XG4gIGNvbnN0IHByb2plY3ROYW1lID0gY21zQ29uZmlnLm5hbWUgfHwgY21zQ29uZmlnLmlkIHx8ICcnO1xuICBjb25zdCB0aXRsZSA9IHByb2plY3ROYW1lID8gYCR7cHJvamVjdE5hbWV9IFx1MjAxMyBSb290LmpzIENNU2AgOiAnUm9vdC5qcyBDTVMnO1xuXG4gIGNvbnN0IG1haW5IdG1sID0gcmVuZGVyVG9TdHJpbmcoPEFwcCB0aXRsZT17dGl0bGV9IGN0eD17Y3R4fSAvPik7XG4gIGxldCBodG1sID0gYDwhZG9jdHlwZSBodG1sPlxcbiR7bWFpbkh0bWx9YDtcbiAgaWYgKHJlcS52aXRlU2VydmVyKSB7XG4gICAgY29uc3QgdWlDc3NQYXRoID0gcGF0aC5qb2luKF9fZGlybmFtZSwgJ3VpL3VpLmNzcycpO1xuICAgIGNvbnN0IHVpSnNQYXRoID0gcGF0aC5qb2luKF9fZGlybmFtZSwgJ3VpL3VpLmpzJyk7XG4gICAgY29uc3QgdHBsID0gaHRtbFxuICAgICAgLnJlcGxhY2UoJ3tDU1NfVVJMfScsIGAvQGZzJHt1aUNzc1BhdGh9YClcbiAgICAgIC5yZXBsYWNlKCd7SlNfVVJMfScsIGAvQGZzJHt1aUpzUGF0aH1gKTtcbiAgICBodG1sID0gYXdhaXQgcmVxLnZpdGVTZXJ2ZXIhLnRyYW5zZm9ybUluZGV4SHRtbChyZXEub3JpZ2luYWxVcmwsIHRwbCk7XG4gIH0gZWxzZSB7XG4gICAgaHRtbCA9IGh0bWxcbiAgICAgIC5yZXBsYWNlKCd7Q1NTX1VSTH0nLCAnL2Ntcy9zdGF0aWMvdWkuY3NzJylcbiAgICAgIC5yZXBsYWNlKCd7SlNfVVJMfScsICcvY21zL3N0YXRpYy91aS5qcycpO1xuICB9XG4gIHJlcy5zZXRIZWFkZXIoJ0NvbnRlbnQtVHlwZScsICd0ZXh0L2h0bWwnKTtcbiAgcmVzLnNlbmQoaHRtbCk7XG59XG5cbmludGVyZmFjZSBTaWduSW5Qcm9wcyB7XG4gIHRpdGxlOiBzdHJpbmc7XG4gIGN0eDogYW55O1xufVxuXG5mdW5jdGlvbiBTaWduSW4ocHJvcHM6IFNpZ25JblByb3BzKSB7XG4gIHJldHVybiAoXG4gICAgPGh0bWw+XG4gICAgICA8aGVhZD5cbiAgICAgICAgPG1ldGEgY2hhcnNldD1cInV0Zi04XCIgLz5cbiAgICAgICAgPHRpdGxlPntwcm9wcy50aXRsZX08L3RpdGxlPlxuICAgICAgICA8bGluayByZWw9XCJwcmVjb25uZWN0XCIgaHJlZj1cImh0dHBzOi8vZm9udHMuZ29vZ2xlYXBpcy5jb21cIiAvPlxuICAgICAgICA8bWV0YSBuYW1lPVwidmlld3BvcnRcIiBjb250ZW50PVwid2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEuMFwiIC8+XG4gICAgICAgIDxsaW5rXG4gICAgICAgICAgcmVsPVwicHJlY29ubmVjdFwiXG4gICAgICAgICAgaHJlZj1cImh0dHBzOi8vZm9udHMuZ3N0YXRpYy5jb21cIlxuICAgICAgICAgIGNyb3NzT3JpZ2luPVwiYW5vbnltb3VzXCJcbiAgICAgICAgLz5cbiAgICAgICAgPGxpbmtcbiAgICAgICAgICByZWw9XCJzdHlsZXNoZWV0XCJcbiAgICAgICAgICBocmVmPVwiaHR0cHM6Ly9mb250cy5nb29nbGVhcGlzLmNvbS9jc3MyP2ZhbWlseT1JbnRlcjp3Z2h0QDMwMDs0MDA7NTAwOzYwMDs3MDA7OTAwJmRpc3BsYXk9c3dhcFwiXG4gICAgICAgIC8+XG4gICAgICAgIDxsaW5rIHJlbD1cInN0eWxlc2hlZXRcIiBocmVmPVwie0NTU19VUkx9XCIgLz5cbiAgICAgIDwvaGVhZD5cbiAgICAgIDxib2R5PlxuICAgICAgICA8ZGl2IGlkPVwicm9vdFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYm9vdHN0cmFwXCI+XG4gICAgICAgICAgICA8aDEgY2xhc3NOYW1lPVwiYm9vdHN0cmFwX19sb2FkaW5nXCI+TG9hZGluZy4uLjwvaDE+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImJvb3RzdHJhcC1lcnJvclwiPlxuICAgICAgICAgICAgICBJZiB0aGlzIHBhZ2UgZmFpbHMgdG8gbG9hZCwgdHJ5IGEgZm9yY2UgcmVmcmVzaCBieSBob2xkaW5nIHRoZVxuICAgICAgICAgICAgICBzaGlmdCBrZXkgd2hpbGUgcmVmcmVzaGluZyB0aGUgcGFnZS5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPHNjcmlwdFxuICAgICAgICAgIGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MPXt7XG4gICAgICAgICAgICBfX2h0bWw6IGB3aW5kb3cuX19ST09UX0NUWCA9ICR7SlNPTi5zdHJpbmdpZnkocHJvcHMuY3R4KX1gLFxuICAgICAgICAgIH19XG4gICAgICAgIC8+XG4gICAgICAgIDxzY3JpcHQgdHlwZT1cIm1vZHVsZVwiIHNyYz1cIntKU19VUkx9XCI+PC9zY3JpcHQ+XG4gICAgICA8L2JvZHk+XG4gICAgPC9odG1sPlxuICApO1xufVxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlbmRlclNpZ25JbihyZXE6IFJlcXVlc3QsIHJlczogUmVzcG9uc2UsIG9wdGlvbnM6IGFueSkge1xuICBjb25zdCBjdHggPSB7ZmlyZWJhc2VDb25maWc6IG9wdGlvbnMuZmlyZWJhc2VDb25maWd9O1xuICBjb25zdCBtYWluSHRtbCA9IHJlbmRlclRvU3RyaW5nKDxTaWduSW4gdGl0bGU9XCJTaWduIGluXCIgY3R4PXtjdHh9IC8+KTtcbiAgbGV0IGh0bWwgPSBgPCFkb2N0eXBlIGh0bWw+XFxuJHttYWluSHRtbH1gO1xuICBpZiAocmVxLnZpdGVTZXJ2ZXIpIHtcbiAgICBjb25zdCBjc3NQYXRoID0gcGF0aC5qb2luKF9fZGlybmFtZSwgJ3VpL3NpZ25pbi5jc3MnKTtcbiAgICBjb25zdCBqc1BhdGggPSBwYXRoLmpvaW4oX19kaXJuYW1lLCAndWkvc2lnbmluLmpzJyk7XG4gICAgY29uc3QgdHBsID0gaHRtbFxuICAgICAgLnJlcGxhY2UoJ3tDU1NfVVJMfScsIGAvQGZzJHtjc3NQYXRofWApXG4gICAgICAucmVwbGFjZSgne0pTX1VSTH0nLCBgL0BmcyR7anNQYXRofWApO1xuICAgIGh0bWwgPSBhd2FpdCByZXEudml0ZVNlcnZlciEudHJhbnNmb3JtSW5kZXhIdG1sKHJlcS5vcmlnaW5hbFVybCwgdHBsKTtcbiAgfSBlbHNlIHtcbiAgICBodG1sID0gaHRtbFxuICAgICAgLnJlcGxhY2UoJ3tDU1NfVVJMfScsICcvY21zL3N0YXRpYy9zaWduaW4uY3NzJylcbiAgICAgIC5yZXBsYWNlKCd7SlNfVVJMfScsICcvY21zL3N0YXRpYy9zaWduaW4uanMnKTtcbiAgfVxuICByZXMuc2V0SGVhZGVyKCdDb250ZW50LVR5cGUnLCAndGV4dC9odG1sJyk7XG4gIHJlcy5zZW5kKGh0bWwpO1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjtBQUFBLE9BQU8sVUFBVTtBQUNqQixTQUFRLHFCQUFvQjtBQUc1QixTQUFRLFVBQVUsc0JBQXFCO0FBY2pDLFNBQ0UsS0FERjtBQVZOLElBQU0sWUFBWSxLQUFLLFFBQVEsY0FBYyxZQUFZLEdBQUcsQ0FBQztBQU83RCxTQUFTLElBQUksT0FBaUI7QUFDNUIsU0FDRSxxQkFBQztBQUFBLElBQ0M7QUFBQSwyQkFBQztBQUFBLFFBQ0M7QUFBQSw4QkFBQztBQUFBLFlBQU8sZ0JBQU07QUFBQSxXQUFNO0FBQUEsVUFDcEIsb0JBQUM7QUFBQSxZQUFLLEtBQUk7QUFBQSxZQUFhLE1BQUs7QUFBQSxXQUErQjtBQUFBLFVBQzNELG9CQUFDO0FBQUEsWUFDQyxLQUFJO0FBQUEsWUFDSixNQUFLO0FBQUEsWUFDTCxhQUFZO0FBQUEsV0FDZDtBQUFBLFVBQ0Esb0JBQUM7QUFBQSxZQUNDLEtBQUk7QUFBQSxZQUNKLE1BQUs7QUFBQSxXQUNQO0FBQUEsVUFDQSxvQkFBQztBQUFBLFlBQ0MsS0FBSTtBQUFBLFlBQ0osTUFBSztBQUFBLFdBQ1A7QUFBQSxVQUNBLG9CQUFDO0FBQUEsWUFBSyxLQUFJO0FBQUEsWUFBYSxNQUFL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
package/dist/cli.js CHANGED
@@ -176,6 +176,9 @@ function fieldType(field) {
176
176
  )
177
177
  ]);
178
178
  }
179
+ if (field.type === "file") {
180
+ return dom.create.objectType([dom.create.property("src", dom.type.string)]);
181
+ }
179
182
  if (field.type === "multiselect") {
180
183
  return dom.type.array(dom.type.string);
181
184
  }
@@ -225,4 +228,4 @@ export {
225
228
  generateTypes,
226
229
  initFirebase
227
230
  };
228
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vY29yZS9ydW50aW1lLnRzIiwgIi4uL2NvcmUvc2VjdXJpdHkudHMiLCAiLi4vY2xpL2NvbW1hbmRzL2luaXQtZmlyZWJhc2UudHMiLCAiLi4vY2xpL2NvbW1hbmRzL2dlbmVyYXRlLXR5cGVzLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJpbXBvcnQge1BsdWdpbiwgUm9vdENvbmZpZ30gZnJvbSAnQGJsaW5ray9yb290JztcbmltcG9ydCB7aW5pdGlhbGl6ZUFwcCwgZ2V0QXBwcywgYXBwbGljYXRpb25EZWZhdWx0fSBmcm9tICdmaXJlYmFzZS1hZG1pbi9hcHAnO1xuaW1wb3J0IHtRdWVyeSwgZ2V0RmlyZXN0b3JlfSBmcm9tICdmaXJlYmFzZS1hZG1pbi9maXJlc3RvcmUnO1xuXG5pbXBvcnQge0NNU1BsdWdpbn0gZnJvbSAnLi9wbHVnaW4uanMnO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RmlyZWJhc2VBcHAoZ2NwUHJvamVjdElkOiBzdHJpbmcpIHtcbiAgY29uc3QgYXBwcyA9IGdldEFwcHMoKTtcbiAgaWYgKGFwcHMubGVuZ3RoID4gMCAmJiBhcHBzWzBdKSB7XG4gICAgcmV0dXJuIGFwcHNbMF07XG4gIH1cbiAgcmV0dXJuIGluaXRpYWxpemVBcHAoe1xuICAgIHByb2plY3RJZDogZ2NwUHJvamVjdElkLFxuICAgIGNyZWRlbnRpYWw6IGFwcGxpY2F0aW9uRGVmYXVsdCgpLFxuICB9KTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBHZXREb2NPcHRpb25zIHtcbiAgbW9kZTogJ2RyYWZ0JyB8ICdwdWJsaXNoZWQnO1xufVxuXG4vKipcbiAqIFJldHJpZXZlcyBhIGRvYyBmcm9tIFJvb3QuanMgQ01TLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0RG9jPFQ+KFxuICByb290Q29uZmlnOiBSb290Q29uZmlnLFxuICBjb2xsZWN0aW9uSWQ6IHN0cmluZyxcbiAgc2x1Zzogc3RyaW5nLFxuICBvcHRpb25zOiBHZXREb2NPcHRpb25zXG4pOiBQcm9taXNlPFQgfCBudWxsPiB7XG4gIGNvbnN0IGNtc1BsdWdpbiA9IGdldENtc1BsdWdpbihyb290Q29uZmlnKTtcbiAgY29uc3QgY21zUGx1Z2luT3B0aW9ucyA9IGNtc1BsdWdpbi5nZXRDb25maWcoKTtcbiAgY29uc3QgcHJvamVjdElkID0gY21zUGx1Z2luT3B0aW9ucy5pZCB8fCAnZGVmYXVsdCc7XG4gIGNvbnN0IGdjcFByb2plY3RJZCA9IGNtc1BsdWdpbk9wdGlvbnMuZmlyZWJhc2VDb25maWcucHJvamVjdElkO1xuICBjb25zdCBtb2RlID0gb3B0aW9ucy5tb2RlO1xuICBjb25zdCBtb2RlQ29sbGVjdGlvbiA9IG1vZGUgPT09ICdkcmFmdCcgPyAnRHJhZnRzJyA6ICdQdWJsaXNoZWQnO1xuICBjb25zdCBhcHAgPSBnZXRGaXJlYmFzZUFwcChnY3BQcm9qZWN0SWQpO1xuICBjb25zdCBkYiA9IGdldEZpcmVzdG9yZShhcHApO1xuICAvLyBTbHVncyB3aXRoIHNsYXNoZXMgYXJlIGVuY29kZWQgYXMgYC0tYCBpbiB0aGUgREIuXG4gIHNsdWcgPSBzbHVnLnJlcGxhY2VBbGwoJy8nLCAnLS0nKTtcbiAgY29uc3QgZGJQYXRoID0gYFByb2plY3RzLyR7cHJvamVjdElkfS9Db2xsZWN0aW9ucy8ke2NvbGxlY3Rpb25JZH0vJHttb2RlQ29sbGVjdGlvbn0vJHtzbHVnfWA7XG4gIGNvbnN0IGRvY1JlZiA9IGRiLmRvYyhkYlBhdGgpO1xuICBjb25zdCBkb2MgPSBhd2FpdCBkb2NSZWYuZ2V0KCk7XG4gIGlmIChkb2MuZXhpc3RzKSB7XG4gICAgY29uc3QgZGF0YSA9IGRvYy5kYXRhKCk7XG4gICAgcmV0dXJuIG5vcm1hbGl6ZURhdGEoZGF0YSkgYXMgVDtcbiAgfVxuICBjb25zb2xlLmxvZyhgZG9jIG5vdCBmb3VuZDogJHtkYlBhdGh9YCk7XG4gIHJldHVybiBudWxsO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIExpc3REb2NzT3B0aW9ucyB7XG4gIG1vZGU6ICdkcmFmdCcgfCAncHVibGlzaGVkJztcbiAgb2Zmc2V0PzogbnVtYmVyO1xuICBsaW1pdD86IG51bWJlcjtcbiAgb3JkZXJCeT86IHN0cmluZztcbiAgb3JkZXJCeURpcmVjdGlvbj86ICdhc2MnIHwgJ2Rlc2MnO1xuICAvLyBUT0RPKHN0ZXZlbmxlKTogc3VwcG9ydCBmaWx0ZXJzLlxufVxuXG4vKipcbiAqIExpc3RzIGRvY3MgZnJvbSBhIFJvb3QuanMgQ01TIGNvbGxlY3Rpb24uXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBsaXN0RG9jczxUPihcbiAgcm9vdENvbmZpZzogUm9vdENvbmZpZyxcbiAgY29sbGVjdGlvbklkOiBzdHJpbmcsXG4gIG9wdGlvbnM6IExpc3REb2NzT3B0aW9uc1xuKTogUHJvbWlzZTx7ZG9jczogVFtdfT4ge1xuICBjb25zdCBjbXNQbHVnaW4gPSBnZXRDbXNQbHVnaW4ocm9vdENvbmZpZyk7XG4gIGNvbnN0IGNtc1BsdWdpbk9wdGlvbnMgPSBjbXNQbHVnaW4uZ2V0Q29uZmlnKCk7XG4gIGNvbnN0IHByb2plY3RJZCA9IGNtc1BsdWdpbk9wdGlvbnMuaWQgfHwgJ2RlZmF1bHQnO1xuICBjb25zdCBnY3BQcm9qZWN0SWQgPSBjbXNQbHVnaW5PcHRpb25zLmZpcmViYXNlQ29uZmlnLnByb2plY3RJZDtcbiAgY29uc3QgbW9kZSA9IG9wdGlvbnMubW9kZTtcbiAgY29uc3QgbW9kZUNvbGxlY3Rpb24gPSBtb2RlID09PSAnZHJhZnQnID8gJ0RyYWZ0cycgOiAnUHVibGlzaGVkJztcbiAgY29uc3QgYXBwID0gZ2V0RmlyZWJhc2VBcHAoZ2NwUHJvamVjdElkKTtcbiAgY29uc3QgZGIgPSBnZXRGaXJlc3RvcmUoYXBwKTtcbiAgY29uc3QgZGJQYXRoID0gYFByb2plY3RzLyR7cHJvamVjdElkfS9Db2xsZWN0aW9ucy8ke2NvbGxlY3Rpb25JZH0vJHttb2RlQ29sbGVjdGlvbn1gO1xuICBsZXQgcXVlcnk6IFF1ZXJ5ID0gZGIuY29sbGVjdGlvbihkYlBhdGgpO1xuICBpZiAob3B0aW9ucy5saW1pdCkge1xuICAgIHF1ZXJ5ID0gcXVlcnkubGltaXQob3B0aW9ucy5saW1pdCk7XG4gIH1cbiAgaWYgKG9wdGlvbnMub2Zmc2V0KSB7XG4gICAgcXVlcnkgPSBxdWVyeS5vZmZzZXQob3B0aW9ucy5vZmZzZXQpO1xuICB9XG4gIGlmIChvcHRpb25zLm9yZGVyQnkpIHtcbiAgICBxdWVyeSA9IHF1ZXJ5Lm9yZGVyQnkob3B0aW9ucy5vcmRlckJ5LCBvcHRpb25zLm9yZGVyQnlEaXJlY3Rpb24pO1xuICB9XG4gIGNvbnN0IHJlc3VsdHMgPSBhd2FpdCBxdWVyeS5nZXQoKTtcbiAgY29uc3QgZG9jczogVFtdID0gW107XG4gIHJlc3VsdHMuZm9yRWFjaCgocmVzdWx0KSA9PiB7XG4gICAgY29uc3QgZG9jID0gbm9ybWFsaXplRGF0YShyZXN1bHQuZGF0YSgpKSBhcyBUO1xuICAgIGRvY3MucHVzaChkb2MpO1xuICB9KTtcbiAgcmV0dXJuIHtkb2NzfTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBOdW1Eb2NzT3B0aW9ucyB7XG4gIG1vZGU6ICdkcmFmdCcgfCAncHVibGlzaGVkJztcbiAgLy8gVE9ETyhzdGV2ZW5sZSk6IHN1cHBvcnQgZmlsdGVycy5cbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgZG9jcyBpbiBhIFJvb3QuanMgQ01TIGNvbGxlY3Rpb24uXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBudW1Eb2NzKFxuICByb290Q29uZmlnOiBSb290Q29uZmlnLFxuICBjb2xsZWN0aW9uSWQ6IHN0cmluZyxcbiAgb3B0aW9uczogTnVtRG9jc09wdGlvbnNcbikge1xuICBjb25zdCBjbXNQbHVnaW4gPSBnZXRDbXNQbHVnaW4ocm9vdENvbmZpZyk7XG4gIGNvbnN0IGNtc1BsdWdpbk9wdGlvbnMgPSBjbXNQbHVnaW4uZ2V0Q29uZmlnKCk7XG4gIGNvbnN0IHByb2plY3RJZCA9IGNtc1BsdWdpbk9wdGlvbnMuaWQgfHwgJ2RlZmF1bHQnO1xuICBjb25zdCBnY3BQcm9qZWN0SWQgPSBjbXNQbHVnaW5PcHRpb25zLmZpcmViYXNlQ29uZmlnLnByb2plY3RJZDtcbiAgY29uc3QgbW9kZSA9IG9wdGlvbnMubW9kZTtcbiAgY29uc3QgbW9kZUNvbGxlY3Rpb24gPSBtb2RlID09PSAnZHJhZnQnID8gJ0RyYWZ0cycgOiAnUHVibGlzaGVkJztcbiAgY29uc3QgYXBwID0gZ2V0RmlyZWJhc2VBcHAoZ2NwUHJvamVjdElkKTtcbiAgY29uc3QgZGIgPSBnZXRGaXJlc3RvcmUoYXBwKTtcbiAgY29uc3QgZGJQYXRoID0gYFByb2plY3RzLyR7cHJvamVjdElkfS9Db2xsZWN0aW9ucy8ke2NvbGxlY3Rpb25JZH0vJHttb2RlQ29sbGVjdGlvbn1gO1xuICBjb25zdCBxdWVyeTogUXVlcnkgPSBkYi5jb2xsZWN0aW9uKGRiUGF0aCk7XG4gIC8vIFRPRE8oc3RldmVubGUpOiBzdXBwb3J0IGZpbHRlcnMgaGVyZS5cbiAgY29uc3QgcmVzdWx0cyA9IGF3YWl0IHF1ZXJ5LmNvdW50KCkuZ2V0KCk7XG4gIGNvbnN0IGNvdW50ID0gcmVzdWx0cy5kYXRhKCkuY291bnQ7XG4gIHJldHVybiBjb3VudDtcbn1cblxuLyoqXG4gKiBXYWxrcyB0aGUgZGF0YSB0cmVlIGFuZCBjb252ZXJ0cyBhbnkgVGltZXN0YW1wIG9iamVjdHMgdG8gbWlsbGlzIGFuZCBhbnlcbiAqIF9hcnJheSBtYXBzIHRvIG5vcm1hbCBhcnJheXMuXG4gKlxuICogRS5nLjpcbiAqXG4gKiBub3JtYWxpemVEYXRhKHtcbiAqICAgc3lzOiB7bW9kaWZpZWRBdDogVGltZXN0YW1wKDEyMyl9LFxuICogICBmaWVsZHM6IHtcbiAqICAgICBfYXJyYXk6IFsnYXNkZiddLFxuICogICAgIGFzZGY6IHt0aXRsZTogJ2hlbGxvJ31cbiAqICAgfVxuICogfSlcbiAqIC8vID0+IHtzeXM6IHttb2RpZmllZEF0OiAxMjN9LCBmaWVsZHM6IHtmb286IFt7dGl0bGU6ICdoZWxsbyd9XX19XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVEYXRhKGRhdGE6IGFueSk6IGFueSB7XG4gIGNvbnN0IHJlc3VsdDogYW55ID0ge307XG4gIGZvciAoY29uc3Qga2V5IGluIGRhdGEpIHtcbiAgICBjb25zdCB2YWwgPSBkYXRhW2tleV07XG4gICAgaWYgKGlzT2JqZWN0KHZhbCkpIHtcbiAgICAgIGlmICh2YWwudG9NaWxsaXMpIHtcbiAgICAgICAgcmVzdWx0W2tleV0gPSB2YWwudG9NaWxsaXMoKTtcbiAgICAgIH0gZWxzZSBpZiAoT2JqZWN0Lmhhc093bih2YWwsICdfYXJyYXknKSAmJiBBcnJheS5pc0FycmF5KHZhbC5fYXJyYXkpKSB7XG4gICAgICAgIGNvbnN0IGFyciA9IHZhbC5fYXJyYXkubWFwKChrOiBzdHJpbmcpID0+IG5vcm1hbGl6ZURhdGEodmFsW2tdIHx8IHt9KSk7XG4gICAgICAgIHJlc3VsdFtrZXldID0gYXJyO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzdWx0W2tleV0gPSBub3JtYWxpemVEYXRhKHZhbCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdFtrZXldID0gdmFsO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5mdW5jdGlvbiBpc09iamVjdChkYXRhOiBhbnkpOiBib29sZWFuIHtcbiAgcmV0dXJuIHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheShkYXRhKSAmJiBkYXRhICE9PSBudWxsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q21zUGx1Z2luKHJvb3RDb25maWc6IFJvb3RDb25maWcpOiBDTVNQbHVnaW4ge1xuICBjb25zdCBwbHVnaW5zOiBQbHVnaW5bXSA9IHJvb3RDb25maWcucGx1Z2lucyB8fCBbXTtcbiAgY29uc3QgcGx1Z2luID0gcGx1Z2lucy5maW5kKChwbHVnaW4pID0+IHBsdWdpbi5uYW1lID09PSAncm9vdC1jbXMnKTtcbiAgaWYgKCFwbHVnaW4pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2NvdWxkIG5vdCBmaW5kIHJvb3QtY21zIHBsdWdpbiBjb25maWcgaW4gcm9vdC5jb25maWcudHMnKTtcbiAgfVxuICByZXR1cm4gcGx1Z2luIGFzIENNU1BsdWdpbjtcbn1cbiIsICJpbXBvcnQge2dldFNlY3VyaXR5UnVsZXN9IGZyb20gJ2ZpcmViYXNlLWFkbWluL3NlY3VyaXR5LXJ1bGVzJztcblxuaW1wb3J0IHtnZXRGaXJlYmFzZUFwcH0gZnJvbSAnLi9ydW50aW1lLmpzJztcblxuZXhwb3J0IGNvbnN0IEZJUkVTVE9SRV9SVUxFUyA9IGBydWxlc192ZXJzaW9uID0gJzInO1xuc2VydmljZSBjbG91ZC5maXJlc3RvcmUge1xuICBtYXRjaCAvZGF0YWJhc2VzL3tkYXRhYmFzZX0vZG9jdW1lbnRzIHtcbiAgICBtYXRjaCAvUHJvamVjdHMve3Byb2plY3R9L3tkb2N1bWVudD0qKn0ge1xuICAgICAgYWxsb3cgd3JpdGU6XG4gICAgICAgIGlmIHJlcXVlc3QuYXV0aCAhPSBudWxsXG4gICAgICAgICYmIGV4aXN0cygvZGF0YWJhc2VzLyQoZGF0YWJhc2UpL2RvY3VtZW50cy9Qcm9qZWN0cy8kKHByb2plY3QpKVxuICAgICAgICAmJiBnZXQoL2RhdGFiYXNlcy8kKGRhdGFiYXNlKS9kb2N1bWVudHMvUHJvamVjdHMvJChwcm9qZWN0KSkuZGF0YS5yb2xlc1tyZXF1ZXN0LmF1dGgudG9rZW4uZW1haWxdIGluIFsnQURNSU4nLCAnRURJVE9SJ107XG4gICAgICBhbGxvdyByZWFkOlxuICAgICAgICBpZiByZXF1ZXN0LmF1dGggIT0gbnVsbFxuICAgICAgICAmJiBleGlzdHMoL2RhdGFiYXNlcy8kKGRhdGFiYXNlKS9kb2N1bWVudHMvUHJvamVjdHMvJChwcm9qZWN0KSlcbiAgICAgICAgJiYgZ2V0KC9kYXRhYmFzZXMvJChkYXRhYmFzZSkvZG9jdW1lbnRzL1Byb2plY3RzLyQocHJvamVjdCkpLmRhdGEucm9sZXNbcmVxdWVzdC5hdXRoLnRva2VuLmVtYWlsXSBpbiBbJ0FETUlOJywgJ0VESVRPUicsICdWSUVXRVInXTtcbiAgICB9XG5cbiAgICBtYXRjaCAvUHJvamVjdHMve3Byb2plY3R9L0NvbGxlY3Rpb25zL3tjb2xsZWN0aW9ufS97ZG9jdW1lbnQ9Kip9IHtcbiAgICAgIGFsbG93IHdyaXRlOlxuICAgICAgICBpZiByZXF1ZXN0LmF1dGggIT0gbnVsbFxuICAgICAgICAmJiBleGlzdHMoL2RhdGFiYXNlcy8kKGRhdGFiYXNlKS9kb2N1bWVudHMvUHJvamVjdHMvJChwcm9qZWN0KS9Db2xsZWN0aW9ucy8kKGNvbGxlY3Rpb24pKVxuICAgICAgICAmJiBnZXQoL2RhdGFiYXNlcy8kKGRhdGFiYXNlKS9kb2N1bWVudHMvUHJvamVjdHMvJChwcm9qZWN0KS9Db2xsZWN0aW9ucy8kKGNvbGxlY3Rpb24pKS5kYXRhLnJvbGVzW3JlcXVlc3QuYXV0aC50b2tlbi5lbWFpbF0gaW4gWydBRE1JTicsICdFRElUT1InXTtcbiAgICAgIGFsbG93IHJlYWQ6XG4gICAgICAgIGlmIHJlcXVlc3QuYXV0aCAhPSBudWxsXG4gICAgICAgICYmIGV4aXN0cygvZGF0YWJhc2VzLyQoZGF0YWJhc2UpL2RvY3VtZW50cy9Qcm9qZWN0cy8kKHByb2plY3QpL0NvbGxlY3Rpb25zLyQoY29sbGVjdGlvbikpXG4gICAgICAgICYmIGdldCgvZGF0YWJhc2VzLyQoZGF0YWJhc2UpL2RvY3VtZW50cy9Qcm9qZWN0cy8kKHByb2plY3QpL0NvbGxlY3Rpb25zLyQoY29sbGVjdGlvbikpLmRhdGEucm9sZXNbcmVxdWVzdC5hdXRoLnRva2VuLmVtYWlsXSBpbiBbJ0FETUlOJywgJ0VESVRPUicsICdWSUVXRVInXTtcbiAgICB9XG4gIH1cbn1cbmA7XG5cbi8qKlxuICogQWRkcyB0aGUgcm9vdC1jbXMgc2VjdXJpdHkgcnVsZXMgdG8gYSBGaXJlYmFzZSBwcm9qZWN0LlxuICogTk9URTogVGhpcyBmdW5jdGlvbiB3aWxsIG92ZXJ3cml0ZSBhbnkgZXhpc3RpbmcgcnVsZXMuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhcHBseVNlY3VyaXR5UnVsZXMocHJvamVjdElkOiBzdHJpbmcpIHtcbiAgY29uc3QgYXBwID0gZ2V0RmlyZWJhc2VBcHAocHJvamVjdElkKTtcbiAgY29uc3Qgc2VjdXJpdHlSdWxlcyA9IGdldFNlY3VyaXR5UnVsZXMoYXBwKTtcbiAgYXdhaXQgc2VjdXJpdHlSdWxlcy5yZWxlYXNlRmlyZXN0b3JlUnVsZXNldEZyb21Tb3VyY2UoRklSRVNUT1JFX1JVTEVTKTtcbn1cbiIsICJpbXBvcnQge1Jvb3RDb25maWd9IGZyb20gJ0BibGlua2svcm9vdCc7XG5cbmltcG9ydCB7Z2V0Q21zUGx1Z2lufSBmcm9tICcuLi8uLi9jb3JlL3J1bnRpbWUuanMnO1xuaW1wb3J0IHthcHBseVNlY3VyaXR5UnVsZXN9IGZyb20gJy4uLy4uL2NvcmUvc2VjdXJpdHkuanMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEluaXRGaXJlYmFzZU9wdGlvbnMge1xuICAvKiogR0NQIHByb2plY3QgaWQuICovXG4gIHByb2plY3Q/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbml0RmlyZWJhc2Uocm9vdENvbmZpZzogUm9vdENvbmZpZykge1xuICByZXR1cm4gKG9wdGlvbnM6IEluaXRGaXJlYmFzZU9wdGlvbnMpID0+IHtcbiAgICBsZXQgZ2NwUHJvamVjdElkOiBzdHJpbmc7XG4gICAgaWYgKG9wdGlvbnMucHJvamVjdCkge1xuICAgICAgZ2NwUHJvamVjdElkID0gb3B0aW9ucy5wcm9qZWN0O1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBjbXNQbHVnaW4gPSBnZXRDbXNQbHVnaW4ocm9vdENvbmZpZyk7XG4gICAgICBjb25zdCBjbXNQbHVnaW5PcHRpb25zID0gY21zUGx1Z2luLmdldENvbmZpZygpO1xuICAgICAgZ2NwUHJvamVjdElkID0gY21zUGx1Z2luT3B0aW9ucy5maXJlYmFzZUNvbmZpZy5wcm9qZWN0SWQ7XG4gICAgfVxuICAgIGlmICghZ2NwUHJvamVjdElkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ZpcmViYXNlQ29uZmlnLnByb2plY3RJZCBub3Qgc2V0IGluIGNtcyBwbHVnaW4gb3B0aW9ucycpO1xuICAgIH1cblxuICAgIGNvbnNvbGUubG9nKGBnY3AgcHJvamVjdDogJHtnY3BQcm9qZWN0SWR9YCk7XG4gICAgY29uc29sZS5sb2coJ1x1RDgzRFx1REM2RSB1cGRhdGluZyBzZWN1cml0eSBydWxlcy4uLicpO1xuICAgIGFwcGx5U2VjdXJpdHlSdWxlcyhnY3BQcm9qZWN0SWQpO1xuICAgIGNvbnNvbGUubG9nKCdkb25lIGluaXRpYWxpemluZyBmaXJlYmFzZSBwcm9qZWN0IScpO1xuICB9O1xufVxuIiwgImltcG9ydCB7cHJvbWlzZXMgYXMgZnN9IGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHBhdGggZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCB7ZmlsZVVSTFRvUGF0aH0gZnJvbSAnbm9kZTp1cmwnO1xuXG5pbXBvcnQge1Jvb3RDb25maWd9IGZyb20gJ0BibGlua2svcm9vdCc7XG5pbXBvcnQge3ZpdGVTc3JMb2FkTW9kdWxlfSBmcm9tICdAYmxpbmtrL3Jvb3Qvbm9kZSc7XG5pbXBvcnQgKiBhcyBkb20gZnJvbSAnZHRzLWRvbSc7XG5cbmltcG9ydCB7RmllbGQsIFNjaGVtYX0gZnJvbSAnLi4vLi4vY29yZS9zY2hlbWEuanMnO1xuXG50eXBlIFByb2plY3RNb2R1bGUgPSB0eXBlb2YgaW1wb3J0KCcuLi8uLi9jb3JlL3Byb2plY3QuanMnKTtcbmNvbnN0IF9fZGlybmFtZSA9IHBhdGguZGlybmFtZShmaWxlVVJMVG9QYXRoKGltcG9ydC5tZXRhLnVybCkpO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJhdGVUeXBlcyhyb290Q29uZmlnOiBSb290Q29uZmlnKSB7XG4gIGNvbnN0IHJvb3REaXIgPSByb290Q29uZmlnLnJvb3REaXI7XG4gIHJldHVybiBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgbW9kdWxlUGF0aCA9IHBhdGgucmVzb2x2ZShfX2Rpcm5hbWUsICcuL3Byb2plY3QuanMnKTtcbiAgICBjb25zdCBwcm9qZWN0ID0gKGF3YWl0IHZpdGVTc3JMb2FkTW9kdWxlKFxuICAgICAgcm9vdENvbmZpZyxcbiAgICAgIG1vZHVsZVBhdGhcbiAgICApKSBhcyBQcm9qZWN0TW9kdWxlO1xuICAgIGNvbnN0IHNjaGVtYXMgPSBwcm9qZWN0LmdldFByb2plY3RTY2hlbWFzKCk7XG4gICAgY29uc29sZS5sb2coYGdlbmVyYXRpbmcgcm9vdC1jbXMuZC50cyBmcm9tICR7cm9vdERpcn0uLi5gKTtcbiAgICBjb25zdCBvdXRwdXRQYXRoID0gcGF0aC5yZXNvbHZlKHJvb3REaXIsICdyb290LWNtcy5kLnRzJyk7XG4gICAgYXdhaXQgZ2VuZXJhdGVTY2hlbWFEdHMob3V0cHV0UGF0aCwgc2NoZW1hcyk7XG4gICAgY29uc29sZS5sb2coJ3NhdmVkIHJvb3QtY21zLmQudHMhJyk7XG4gIH07XG59XG5cbi8vIFRoZSBgZHRzLWRvbWAgcGFja2FnZSB1c2VzIDQtc3BhY2UgaW5kZW50cywgdXNlIHRoZSBzYW1lIGZvciBjb25zaXN0ZW5jeS5cbmNvbnN0IFRFTVBMQVRFID0gYC8qKiBSb290LmpzIENNUyB0eXBlcy4gVGhpcyBmaWxlIGlzIGF1dG9nZW5lcmF0ZWQuICovXG5cbmV4cG9ydCBpbnRlcmZhY2UgUm9vdENNU0RvYzxGaWVsZHMgZXh0ZW5kcyB7fT4ge1xuICAgIC8qKiBUaGUgaWQgb2YgdGhlIGRvYywgZS5nLiBcIlBhZ2VzL2Zvby1iYXJcIi4gKi9cbiAgICBpZDogc3RyaW5nO1xuICAgIC8qKiBUaGUgY29sbGVjdGlvbiBpZCBvZiB0aGUgZG9jLCBlLmcuIFwiUGFnZXNcIi4gKi9cbiAgICBjb2xsZWN0aW9uSWQ6IHN0cmluZztcbiAgICAvKiogVGhlIHNsdWcgb2YgdGhlIGRvYywgZS5nLiBcImZvby1iYXJcIi4gKi9cbiAgICBzbHVnOiBzdHJpbmc7XG4gICAgLyoqIFN5c3RlbS1sZXZlbCBtZXRhZGF0YS4gKi9cbiAgICBzeXM6IHtcbiAgICAgICAgY3JlYXRlZEF0OiBudW1iZXI7XG4gICAgICAgIGNyZWF0ZWRCeTogc3RyaW5nO1xuICAgICAgICBtb2RpZmllZEF0OiBudW1iZXI7XG4gICAgICAgIG1vZGlmaWVkQnk6IHN0cmluZztcbiAgICAgICAgZmlyc3RQdWJsaXNoZWRBdD86IG51bWJlcjtcbiAgICAgICAgZmlyc3RQdWJsaXNoZWRCeT86IHN0cmluZztcbiAgICAgICAgcHVibGlzaGVkQXQ/OiBudW1iZXI7XG4gICAgICAgIHB1Ymxpc2hlZEJ5Pzogc3RyaW5nO1xuICAgIH07XG4gICAgLyoqIFVzZXItZW50ZXJlZCBmaWVsZCB2YWx1ZXMgZnJvbSB0aGUgQ01TLiAqL1xuICAgIGZpZWxkcz86IEZpZWxkcztcbn1gO1xuXG4vKipcbiAqIEdlbmVyYXRlcyBhIHJvb3QtY21zLmQudHMgZmlsZSBmcm9tIHRoZSAuc2NoZW1hLnRzIGZpbGVzIGluIHRoZSBwcm9qZWN0LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2VuZXJhdGVTY2hlbWFEdHMoXG4gIG91dHB1dFBhdGg6IHN0cmluZyxcbiAgc2NoZW1hczogUmVjb3JkPHN0cmluZywgU2NoZW1hPlxuKSB7XG4gIGNvbnN0IHJlc3VsdHMgPSBbVEVNUExBVEVdO1xuICBmb3IgKGNvbnN0IGZpbGVJZCBpbiBzY2hlbWFzKSB7XG4gICAgY29uc3Qgc2NoZW1hID0gc2NoZW1hc1tmaWxlSWRdO1xuICAgIHJlc3VsdHMucHVzaChyZW5kZXJTY2hlbWEoZmlsZUlkLCBzY2hlbWEpKTtcbiAgfVxuICBjb25zdCBvdXRwdXQgPSByZXN1bHRzXG4gICAgLmpvaW4oJ1xcblxcbicpXG4gICAgLnJlcGxhY2VBbGwoJy8qKiAgJywgJy8qKiAnKVxuICAgIC5yZXBsYWNlQWxsKCcgICovJywgJyAqLycpXG4gICAgLnJlcGxhY2UoL1xcclxcbnxcXHJ8XFxuL2csICdcXG4nKTtcbiAgYXdhaXQgZnMud3JpdGVGaWxlKG91dHB1dFBhdGgsIG91dHB1dCwgJ3V0Zi04Jyk7XG59XG5cbmZ1bmN0aW9uIGZpZWxkUHJvcGVydHkoZmllbGQ6IEZpZWxkKTogZG9tLlByb3BlcnR5RGVjbGFyYXRpb24ge1xuICBjb25zdCBwcm9wID0gZG9tLmNyZWF0ZS5wcm9wZXJ0eShcbiAgICBmaWVsZC5pZCEsXG4gICAgZmllbGRUeXBlKGZpZWxkKSxcbiAgICBkb20uRGVjbGFyYXRpb25GbGFncy5PcHRpb25hbFxuICApO1xuICBjb25zdCBqc2RvYyA9IFtdO1xuICBpZiAoZmllbGQubGFiZWwpIHtcbiAgICBpZiAoZmllbGQuaGVscCkge1xuICAgICAganNkb2MucHVzaChgJHtmaWVsZC5sYWJlbH0uICR7ZmllbGQuaGVscH1gKTtcbiAgICB9IGVsc2Uge1xuICAgICAganNkb2MucHVzaChmaWVsZC5sYWJlbCk7XG4gICAgfVxuICB9XG4gIGlmIChmaWVsZC5kZXByZWNhdGVkKSB7XG4gICAganNkb2MucHVzaCgnQGRlcHJlY2F0ZWQnKTtcbiAgfVxuICBpZiAoanNkb2MubGVuZ3RoID4gMCkge1xuICAgIHByb3AuanNEb2NDb21tZW50ID0ganNkb2Muam9pbignXFxuJyk7XG4gIH1cbiAgcmV0dXJuIHByb3A7XG59XG5cbmZ1bmN0aW9uIGZpZWxkVHlwZShmaWVsZDogRmllbGQpOiBkb20uVHlwZSB7XG4gIGlmIChmaWVsZC50eXBlID09PSAnYXJyYXknKSB7XG4gICAgcmV0dXJuIGRvbS50eXBlLmFycmF5KGZpZWxkVHlwZShmaWVsZC5vZikpO1xuICB9XG4gIGlmIChmaWVsZC50eXBlID09PSAnaW1hZ2UnKSB7XG4gICAgcmV0dXJuIGRvbS5jcmVhdGUub2JqZWN0VHlwZShbXG4gICAgICBkb20uY3JlYXRlLnByb3BlcnR5KCdzcmMnLCBkb20udHlwZS5zdHJpbmcpLFxuICAgICAgZG9tLmNyZWF0ZS5wcm9wZXJ0eShcbiAgICAgICAgJ2FsdCcsXG4gICAgICAgIGRvbS50eXBlLnN0cmluZyxcbiAgICAgICAgZG9tLkRlY2xhcmF0aW9uRmxhZ3MuT3B0aW9uYWxcbiAgICAgICksXG4gICAgICBkb20uY3JlYXRlLnByb3BlcnR5KFxuICAgICAgICAnd2lkdGgnLFxuICAgICAgICBkb20udHlwZS5udW1iZXIsXG4gICAgICAgIGRvbS5EZWNsYXJhdGlvbkZsYWdzLk9wdGlvbmFsXG4gICAgICApLFxuICAgICAgZG9tLmNyZWF0ZS5wcm9wZXJ0eShcbiAgICAgICAgJ2hlaWdodCcsXG4gICAgICAgIGRvbS50eXBlLm51bWJlcixcbiAgICAgICAgZG9tLkRlY2xhcmF0aW9uRmxhZ3MuT3B0aW9uYWxcbiAgICAgICksXG4gICAgXSk7XG4gIH1cbiAgaWYgKGZpZWxkLnR5cGUgPT09ICdtdWx0aXNlbGVjdCcpIHtcbiAgICByZXR1cm4gZG9tLnR5cGUuYXJyYXkoZG9tLnR5cGUuc3RyaW5nKTtcbiAgfVxuICBpZiAoZmllbGQudHlwZSA9PT0gJ3NlbGVjdCcpIHtcbiAgICByZXR1cm4gZG9tLnR5cGUuc3RyaW5nO1xuICB9XG4gIGlmIChmaWVsZC50eXBlID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBkb20udHlwZS5zdHJpbmc7XG4gIH1cbiAgaWYgKGZpZWxkLnR5cGUgPT09ICdvYmplY3QnKSB7XG4gICAgY29uc3Qgc3VicHJvcGVydGllcyA9IChmaWVsZC5maWVsZHMgfHwgW10pLm1hcCgoZikgPT4gZmllbGRQcm9wZXJ0eShmKSk7XG4gICAgcmV0dXJuIGRvbS5jcmVhdGUub2JqZWN0VHlwZShzdWJwcm9wZXJ0aWVzKTtcbiAgfVxuICByZXR1cm4gZG9tLnR5cGUudW5rbm93bjtcbn1cblxuZnVuY3Rpb24gcmVuZGVyU2NoZW1hKGZpbGVJZDogc3RyaW5nLCBzY2hlbWE6IFNjaGVtYSk6IHN0cmluZyB7XG4gIGNvbnN0IGpzZG9jID0gYEdlbmVyYXRlZCBmcm9tIFxcYCR7ZmlsZUlkfVxcYC5gO1xuICBjb25zdCBpZCA9IHBhdGgucGFyc2UoZmlsZUlkKS5uYW1lLnNwbGl0KCcuJylbMF07XG4gIGNvbnN0IGZpZWxkc0ludGVyZmFjZSA9IGAke2lkfUZpZWxkc2A7XG4gIGNvbnN0IGZpZWxkcyA9IGRvbS5jcmVhdGUuaW50ZXJmYWNlKFxuICAgIGZpZWxkc0ludGVyZmFjZSxcbiAgICBkb20uRGVjbGFyYXRpb25GbGFncy5FeHBvcnRcbiAgKTtcbiAgZmllbGRzLmpzRG9jQ29tbWVudCA9IGpzZG9jO1xuICBmb3IgKGNvbnN0IGZpZWxkIG9mIHNjaGVtYS5maWVsZHMpIHtcbiAgICBpZiAoIWZpZWxkLmlkKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgZmllbGRzLm1lbWJlcnMucHVzaChmaWVsZFByb3BlcnR5KGZpZWxkKSk7XG4gIH1cblxuICBjb25zdCBmaWVsZHNUeXBlT3V0cHV0ID0gZG9tXG4gICAgLmVtaXQoZmllbGRzLCB7c2luZ2xlTGluZUpzRG9jQ29tbWVudHM6IHRydWV9KVxuICAgIC50cmltKCk7XG4gIGlmIChmaWxlSWQuc3RhcnRzV2l0aCgnL2NvbGxlY3Rpb25zLycpKSB7XG4gICAgY29uc3QgYmFzZVR5cGUgPSBkb20uY3JlYXRlLm5hbWVkVHlwZVJlZmVyZW5jZSgnUm9vdENNU0RvYycpO1xuICAgIGJhc2VUeXBlLnR5cGVBcmd1bWVudHMucHVzaChkb20uY3JlYXRlLm5hbWVkVHlwZVJlZmVyZW5jZShmaWVsZHNJbnRlcmZhY2UpKTtcbiAgICBjb25zdCBkb2NUeXBlID0gZG9tLmNyZWF0ZS5hbGlhcyhcbiAgICAgIGAke2lkfURvY2AsXG4gICAgICBiYXNlVHlwZSxcbiAgICAgIGRvbS5EZWNsYXJhdGlvbkZsYWdzLkV4cG9ydFxuICAgICk7XG4gICAgZG9jVHlwZS5qc0RvY0NvbW1lbnQgPSBqc2RvYztcblxuICAgIGNvbnN0IGRvY1R5cGVPdXRwdXQgPSBkb21cbiAgICAgIC5lbWl0KGRvY1R5cGUsIHtzaW5nbGVMaW5lSnNEb2NDb21tZW50czogdHJ1ZX0pXG4gICAgICAudHJpbSgpO1xuICAgIHJldHVybiBmaWVsZHNUeXBlT3V0cHV0ICsgJ1xcblxcbicgKyBkb2NUeXBlT3V0cHV0O1xuICB9XG4gIHJldHVybiBmaWVsZHNUeXBlT3V0cHV0O1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjtBQUNBLFNBQVEsZUFBZSxTQUFTLDBCQUF5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
231
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vY29yZS9ydW50aW1lLnRzIiwgIi4uL2NvcmUvc2VjdXJpdHkudHMiLCAiLi4vY2xpL2NvbW1hbmRzL2luaXQtZmlyZWJhc2UudHMiLCAiLi4vY2xpL2NvbW1hbmRzL2dlbmVyYXRlLXR5cGVzLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJpbXBvcnQge1BsdWdpbiwgUm9vdENvbmZpZ30gZnJvbSAnQGJsaW5ray9yb290JztcbmltcG9ydCB7aW5pdGlhbGl6ZUFwcCwgZ2V0QXBwcywgYXBwbGljYXRpb25EZWZhdWx0fSBmcm9tICdmaXJlYmFzZS1hZG1pbi9hcHAnO1xuaW1wb3J0IHtRdWVyeSwgZ2V0RmlyZXN0b3JlfSBmcm9tICdmaXJlYmFzZS1hZG1pbi9maXJlc3RvcmUnO1xuXG5pbXBvcnQge0NNU1BsdWdpbn0gZnJvbSAnLi9wbHVnaW4uanMnO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RmlyZWJhc2VBcHAoZ2NwUHJvamVjdElkOiBzdHJpbmcpIHtcbiAgY29uc3QgYXBwcyA9IGdldEFwcHMoKTtcbiAgaWYgKGFwcHMubGVuZ3RoID4gMCAmJiBhcHBzWzBdKSB7XG4gICAgcmV0dXJuIGFwcHNbMF07XG4gIH1cbiAgcmV0dXJuIGluaXRpYWxpemVBcHAoe1xuICAgIHByb2plY3RJZDogZ2NwUHJvamVjdElkLFxuICAgIGNyZWRlbnRpYWw6IGFwcGxpY2F0aW9uRGVmYXVsdCgpLFxuICB9KTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBHZXREb2NPcHRpb25zIHtcbiAgbW9kZTogJ2RyYWZ0JyB8ICdwdWJsaXNoZWQnO1xufVxuXG4vKipcbiAqIFJldHJpZXZlcyBhIGRvYyBmcm9tIFJvb3QuanMgQ01TLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0RG9jPFQ+KFxuICByb290Q29uZmlnOiBSb290Q29uZmlnLFxuICBjb2xsZWN0aW9uSWQ6IHN0cmluZyxcbiAgc2x1Zzogc3RyaW5nLFxuICBvcHRpb25zOiBHZXREb2NPcHRpb25zXG4pOiBQcm9taXNlPFQgfCBudWxsPiB7XG4gIGNvbnN0IGNtc1BsdWdpbiA9IGdldENtc1BsdWdpbihyb290Q29uZmlnKTtcbiAgY29uc3QgY21zUGx1Z2luT3B0aW9ucyA9IGNtc1BsdWdpbi5nZXRDb25maWcoKTtcbiAgY29uc3QgcHJvamVjdElkID0gY21zUGx1Z2luT3B0aW9ucy5pZCB8fCAnZGVmYXVsdCc7XG4gIGNvbnN0IGdjcFByb2plY3RJZCA9IGNtc1BsdWdpbk9wdGlvbnMuZmlyZWJhc2VDb25maWcucHJvamVjdElkO1xuICBjb25zdCBtb2RlID0gb3B0aW9ucy5tb2RlO1xuICBjb25zdCBtb2RlQ29sbGVjdGlvbiA9IG1vZGUgPT09ICdkcmFmdCcgPyAnRHJhZnRzJyA6ICdQdWJsaXNoZWQnO1xuICBjb25zdCBhcHAgPSBnZXRGaXJlYmFzZUFwcChnY3BQcm9qZWN0SWQpO1xuICBjb25zdCBkYiA9IGdldEZpcmVzdG9yZShhcHApO1xuICAvLyBTbHVncyB3aXRoIHNsYXNoZXMgYXJlIGVuY29kZWQgYXMgYC0tYCBpbiB0aGUgREIuXG4gIHNsdWcgPSBzbHVnLnJlcGxhY2VBbGwoJy8nLCAnLS0nKTtcbiAgY29uc3QgZGJQYXRoID0gYFByb2plY3RzLyR7cHJvamVjdElkfS9Db2xsZWN0aW9ucy8ke2NvbGxlY3Rpb25JZH0vJHttb2RlQ29sbGVjdGlvbn0vJHtzbHVnfWA7XG4gIGNvbnN0IGRvY1JlZiA9IGRiLmRvYyhkYlBhdGgpO1xuICBjb25zdCBkb2MgPSBhd2FpdCBkb2NSZWYuZ2V0KCk7XG4gIGlmIChkb2MuZXhpc3RzKSB7XG4gICAgY29uc3QgZGF0YSA9IGRvYy5kYXRhKCk7XG4gICAgcmV0dXJuIG5vcm1hbGl6ZURhdGEoZGF0YSkgYXMgVDtcbiAgfVxuICBjb25zb2xlLmxvZyhgZG9jIG5vdCBmb3VuZDogJHtkYlBhdGh9YCk7XG4gIHJldHVybiBudWxsO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIExpc3REb2NzT3B0aW9ucyB7XG4gIG1vZGU6ICdkcmFmdCcgfCAncHVibGlzaGVkJztcbiAgb2Zmc2V0PzogbnVtYmVyO1xuICBsaW1pdD86IG51bWJlcjtcbiAgb3JkZXJCeT86IHN0cmluZztcbiAgb3JkZXJCeURpcmVjdGlvbj86ICdhc2MnIHwgJ2Rlc2MnO1xuICAvLyBUT0RPKHN0ZXZlbmxlKTogc3VwcG9ydCBmaWx0ZXJzLlxufVxuXG4vKipcbiAqIExpc3RzIGRvY3MgZnJvbSBhIFJvb3QuanMgQ01TIGNvbGxlY3Rpb24uXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBsaXN0RG9jczxUPihcbiAgcm9vdENvbmZpZzogUm9vdENvbmZpZyxcbiAgY29sbGVjdGlvbklkOiBzdHJpbmcsXG4gIG9wdGlvbnM6IExpc3REb2NzT3B0aW9uc1xuKTogUHJvbWlzZTx7ZG9jczogVFtdfT4ge1xuICBjb25zdCBjbXNQbHVnaW4gPSBnZXRDbXNQbHVnaW4ocm9vdENvbmZpZyk7XG4gIGNvbnN0IGNtc1BsdWdpbk9wdGlvbnMgPSBjbXNQbHVnaW4uZ2V0Q29uZmlnKCk7XG4gIGNvbnN0IHByb2plY3RJZCA9IGNtc1BsdWdpbk9wdGlvbnMuaWQgfHwgJ2RlZmF1bHQnO1xuICBjb25zdCBnY3BQcm9qZWN0SWQgPSBjbXNQbHVnaW5PcHRpb25zLmZpcmViYXNlQ29uZmlnLnByb2plY3RJZDtcbiAgY29uc3QgbW9kZSA9IG9wdGlvbnMubW9kZTtcbiAgY29uc3QgbW9kZUNvbGxlY3Rpb24gPSBtb2RlID09PSAnZHJhZnQnID8gJ0RyYWZ0cycgOiAnUHVibGlzaGVkJztcbiAgY29uc3QgYXBwID0gZ2V0RmlyZWJhc2VBcHAoZ2NwUHJvamVjdElkKTtcbiAgY29uc3QgZGIgPSBnZXRGaXJlc3RvcmUoYXBwKTtcbiAgY29uc3QgZGJQYXRoID0gYFByb2plY3RzLyR7cHJvamVjdElkfS9Db2xsZWN0aW9ucy8ke2NvbGxlY3Rpb25JZH0vJHttb2RlQ29sbGVjdGlvbn1gO1xuICBsZXQgcXVlcnk6IFF1ZXJ5ID0gZGIuY29sbGVjdGlvbihkYlBhdGgpO1xuICBpZiAob3B0aW9ucy5saW1pdCkge1xuICAgIHF1ZXJ5ID0gcXVlcnkubGltaXQob3B0aW9ucy5saW1pdCk7XG4gIH1cbiAgaWYgKG9wdGlvbnMub2Zmc2V0KSB7XG4gICAgcXVlcnkgPSBxdWVyeS5vZmZzZXQob3B0aW9ucy5vZmZzZXQpO1xuICB9XG4gIGlmIChvcHRpb25zLm9yZGVyQnkpIHtcbiAgICBxdWVyeSA9IHF1ZXJ5Lm9yZGVyQnkob3B0aW9ucy5vcmRlckJ5LCBvcHRpb25zLm9yZGVyQnlEaXJlY3Rpb24pO1xuICB9XG4gIGNvbnN0IHJlc3VsdHMgPSBhd2FpdCBxdWVyeS5nZXQoKTtcbiAgY29uc3QgZG9jczogVFtdID0gW107XG4gIHJlc3VsdHMuZm9yRWFjaCgocmVzdWx0KSA9PiB7XG4gICAgY29uc3QgZG9jID0gbm9ybWFsaXplRGF0YShyZXN1bHQuZGF0YSgpKSBhcyBUO1xuICAgIGRvY3MucHVzaChkb2MpO1xuICB9KTtcbiAgcmV0dXJuIHtkb2NzfTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBOdW1Eb2NzT3B0aW9ucyB7XG4gIG1vZGU6ICdkcmFmdCcgfCAncHVibGlzaGVkJztcbiAgLy8gVE9ETyhzdGV2ZW5sZSk6IHN1cHBvcnQgZmlsdGVycy5cbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgZG9jcyBpbiBhIFJvb3QuanMgQ01TIGNvbGxlY3Rpb24uXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBudW1Eb2NzKFxuICByb290Q29uZmlnOiBSb290Q29uZmlnLFxuICBjb2xsZWN0aW9uSWQ6IHN0cmluZyxcbiAgb3B0aW9uczogTnVtRG9jc09wdGlvbnNcbikge1xuICBjb25zdCBjbXNQbHVnaW4gPSBnZXRDbXNQbHVnaW4ocm9vdENvbmZpZyk7XG4gIGNvbnN0IGNtc1BsdWdpbk9wdGlvbnMgPSBjbXNQbHVnaW4uZ2V0Q29uZmlnKCk7XG4gIGNvbnN0IHByb2plY3RJZCA9IGNtc1BsdWdpbk9wdGlvbnMuaWQgfHwgJ2RlZmF1bHQnO1xuICBjb25zdCBnY3BQcm9qZWN0SWQgPSBjbXNQbHVnaW5PcHRpb25zLmZpcmViYXNlQ29uZmlnLnByb2plY3RJZDtcbiAgY29uc3QgbW9kZSA9IG9wdGlvbnMubW9kZTtcbiAgY29uc3QgbW9kZUNvbGxlY3Rpb24gPSBtb2RlID09PSAnZHJhZnQnID8gJ0RyYWZ0cycgOiAnUHVibGlzaGVkJztcbiAgY29uc3QgYXBwID0gZ2V0RmlyZWJhc2VBcHAoZ2NwUHJvamVjdElkKTtcbiAgY29uc3QgZGIgPSBnZXRGaXJlc3RvcmUoYXBwKTtcbiAgY29uc3QgZGJQYXRoID0gYFByb2plY3RzLyR7cHJvamVjdElkfS9Db2xsZWN0aW9ucy8ke2NvbGxlY3Rpb25JZH0vJHttb2RlQ29sbGVjdGlvbn1gO1xuICBjb25zdCBxdWVyeTogUXVlcnkgPSBkYi5jb2xsZWN0aW9uKGRiUGF0aCk7XG4gIC8vIFRPRE8oc3RldmVubGUpOiBzdXBwb3J0IGZpbHRlcnMgaGVyZS5cbiAgY29uc3QgcmVzdWx0cyA9IGF3YWl0IHF1ZXJ5LmNvdW50KCkuZ2V0KCk7XG4gIGNvbnN0IGNvdW50ID0gcmVzdWx0cy5kYXRhKCkuY291bnQ7XG4gIHJldHVybiBjb3VudDtcbn1cblxuLyoqXG4gKiBXYWxrcyB0aGUgZGF0YSB0cmVlIGFuZCBjb252ZXJ0cyBhbnkgVGltZXN0YW1wIG9iamVjdHMgdG8gbWlsbGlzIGFuZCBhbnlcbiAqIF9hcnJheSBtYXBzIHRvIG5vcm1hbCBhcnJheXMuXG4gKlxuICogRS5nLjpcbiAqXG4gKiBub3JtYWxpemVEYXRhKHtcbiAqICAgc3lzOiB7bW9kaWZpZWRBdDogVGltZXN0YW1wKDEyMyl9LFxuICogICBmaWVsZHM6IHtcbiAqICAgICBfYXJyYXk6IFsnYXNkZiddLFxuICogICAgIGFzZGY6IHt0aXRsZTogJ2hlbGxvJ31cbiAqICAgfVxuICogfSlcbiAqIC8vID0+IHtzeXM6IHttb2RpZmllZEF0OiAxMjN9LCBmaWVsZHM6IHtmb286IFt7dGl0bGU6ICdoZWxsbyd9XX19XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVEYXRhKGRhdGE6IGFueSk6IGFueSB7XG4gIGNvbnN0IHJlc3VsdDogYW55ID0ge307XG4gIGZvciAoY29uc3Qga2V5IGluIGRhdGEpIHtcbiAgICBjb25zdCB2YWwgPSBkYXRhW2tleV07XG4gICAgaWYgKGlzT2JqZWN0KHZhbCkpIHtcbiAgICAgIGlmICh2YWwudG9NaWxsaXMpIHtcbiAgICAgICAgcmVzdWx0W2tleV0gPSB2YWwudG9NaWxsaXMoKTtcbiAgICAgIH0gZWxzZSBpZiAoT2JqZWN0Lmhhc093bih2YWwsICdfYXJyYXknKSAmJiBBcnJheS5pc0FycmF5KHZhbC5fYXJyYXkpKSB7XG4gICAgICAgIGNvbnN0IGFyciA9IHZhbC5fYXJyYXkubWFwKChrOiBzdHJpbmcpID0+IG5vcm1hbGl6ZURhdGEodmFsW2tdIHx8IHt9KSk7XG4gICAgICAgIHJlc3VsdFtrZXldID0gYXJyO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzdWx0W2tleV0gPSBub3JtYWxpemVEYXRhKHZhbCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdFtrZXldID0gdmFsO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5mdW5jdGlvbiBpc09iamVjdChkYXRhOiBhbnkpOiBib29sZWFuIHtcbiAgcmV0dXJuIHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheShkYXRhKSAmJiBkYXRhICE9PSBudWxsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q21zUGx1Z2luKHJvb3RDb25maWc6IFJvb3RDb25maWcpOiBDTVNQbHVnaW4ge1xuICBjb25zdCBwbHVnaW5zOiBQbHVnaW5bXSA9IHJvb3RDb25maWcucGx1Z2lucyB8fCBbXTtcbiAgY29uc3QgcGx1Z2luID0gcGx1Z2lucy5maW5kKChwbHVnaW4pID0+IHBsdWdpbi5uYW1lID09PSAncm9vdC1jbXMnKTtcbiAgaWYgKCFwbHVnaW4pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2NvdWxkIG5vdCBmaW5kIHJvb3QtY21zIHBsdWdpbiBjb25maWcgaW4gcm9vdC5jb25maWcudHMnKTtcbiAgfVxuICByZXR1cm4gcGx1Z2luIGFzIENNU1BsdWdpbjtcbn1cbiIsICJpbXBvcnQge2dldFNlY3VyaXR5UnVsZXN9IGZyb20gJ2ZpcmViYXNlLWFkbWluL3NlY3VyaXR5LXJ1bGVzJztcblxuaW1wb3J0IHtnZXRGaXJlYmFzZUFwcH0gZnJvbSAnLi9ydW50aW1lLmpzJztcblxuZXhwb3J0IGNvbnN0IEZJUkVTVE9SRV9SVUxFUyA9IGBydWxlc192ZXJzaW9uID0gJzInO1xuc2VydmljZSBjbG91ZC5maXJlc3RvcmUge1xuICBtYXRjaCAvZGF0YWJhc2VzL3tkYXRhYmFzZX0vZG9jdW1lbnRzIHtcbiAgICBtYXRjaCAvUHJvamVjdHMve3Byb2plY3R9L3tkb2N1bWVudD0qKn0ge1xuICAgICAgYWxsb3cgd3JpdGU6XG4gICAgICAgIGlmIHJlcXVlc3QuYXV0aCAhPSBudWxsXG4gICAgICAgICYmIGV4aXN0cygvZGF0YWJhc2VzLyQoZGF0YWJhc2UpL2RvY3VtZW50cy9Qcm9qZWN0cy8kKHByb2plY3QpKVxuICAgICAgICAmJiBnZXQoL2RhdGFiYXNlcy8kKGRhdGFiYXNlKS9kb2N1bWVudHMvUHJvamVjdHMvJChwcm9qZWN0KSkuZGF0YS5yb2xlc1tyZXF1ZXN0LmF1dGgudG9rZW4uZW1haWxdIGluIFsnQURNSU4nLCAnRURJVE9SJ107XG4gICAgICBhbGxvdyByZWFkOlxuICAgICAgICBpZiByZXF1ZXN0LmF1dGggIT0gbnVsbFxuICAgICAgICAmJiBleGlzdHMoL2RhdGFiYXNlcy8kKGRhdGFiYXNlKS9kb2N1bWVudHMvUHJvamVjdHMvJChwcm9qZWN0KSlcbiAgICAgICAgJiYgZ2V0KC9kYXRhYmFzZXMvJChkYXRhYmFzZSkvZG9jdW1lbnRzL1Byb2plY3RzLyQocHJvamVjdCkpLmRhdGEucm9sZXNbcmVxdWVzdC5hdXRoLnRva2VuLmVtYWlsXSBpbiBbJ0FETUlOJywgJ0VESVRPUicsICdWSUVXRVInXTtcbiAgICB9XG5cbiAgICBtYXRjaCAvUHJvamVjdHMve3Byb2plY3R9L0NvbGxlY3Rpb25zL3tjb2xsZWN0aW9ufS97ZG9jdW1lbnQ9Kip9IHtcbiAgICAgIGFsbG93IHdyaXRlOlxuICAgICAgICBpZiByZXF1ZXN0LmF1dGggIT0gbnVsbFxuICAgICAgICAmJiBleGlzdHMoL2RhdGFiYXNlcy8kKGRhdGFiYXNlKS9kb2N1bWVudHMvUHJvamVjdHMvJChwcm9qZWN0KS9Db2xsZWN0aW9ucy8kKGNvbGxlY3Rpb24pKVxuICAgICAgICAmJiBnZXQoL2RhdGFiYXNlcy8kKGRhdGFiYXNlKS9kb2N1bWVudHMvUHJvamVjdHMvJChwcm9qZWN0KS9Db2xsZWN0aW9ucy8kKGNvbGxlY3Rpb24pKS5kYXRhLnJvbGVzW3JlcXVlc3QuYXV0aC50b2tlbi5lbWFpbF0gaW4gWydBRE1JTicsICdFRElUT1InXTtcbiAgICAgIGFsbG93IHJlYWQ6XG4gICAgICAgIGlmIHJlcXVlc3QuYXV0aCAhPSBudWxsXG4gICAgICAgICYmIGV4aXN0cygvZGF0YWJhc2VzLyQoZGF0YWJhc2UpL2RvY3VtZW50cy9Qcm9qZWN0cy8kKHByb2plY3QpL0NvbGxlY3Rpb25zLyQoY29sbGVjdGlvbikpXG4gICAgICAgICYmIGdldCgvZGF0YWJhc2VzLyQoZGF0YWJhc2UpL2RvY3VtZW50cy9Qcm9qZWN0cy8kKHByb2plY3QpL0NvbGxlY3Rpb25zLyQoY29sbGVjdGlvbikpLmRhdGEucm9sZXNbcmVxdWVzdC5hdXRoLnRva2VuLmVtYWlsXSBpbiBbJ0FETUlOJywgJ0VESVRPUicsICdWSUVXRVInXTtcbiAgICB9XG4gIH1cbn1cbmA7XG5cbi8qKlxuICogQWRkcyB0aGUgcm9vdC1jbXMgc2VjdXJpdHkgcnVsZXMgdG8gYSBGaXJlYmFzZSBwcm9qZWN0LlxuICogTk9URTogVGhpcyBmdW5jdGlvbiB3aWxsIG92ZXJ3cml0ZSBhbnkgZXhpc3RpbmcgcnVsZXMuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhcHBseVNlY3VyaXR5UnVsZXMocHJvamVjdElkOiBzdHJpbmcpIHtcbiAgY29uc3QgYXBwID0gZ2V0RmlyZWJhc2VBcHAocHJvamVjdElkKTtcbiAgY29uc3Qgc2VjdXJpdHlSdWxlcyA9IGdldFNlY3VyaXR5UnVsZXMoYXBwKTtcbiAgYXdhaXQgc2VjdXJpdHlSdWxlcy5yZWxlYXNlRmlyZXN0b3JlUnVsZXNldEZyb21Tb3VyY2UoRklSRVNUT1JFX1JVTEVTKTtcbn1cbiIsICJpbXBvcnQge1Jvb3RDb25maWd9IGZyb20gJ0BibGlua2svcm9vdCc7XG5cbmltcG9ydCB7Z2V0Q21zUGx1Z2lufSBmcm9tICcuLi8uLi9jb3JlL3J1bnRpbWUuanMnO1xuaW1wb3J0IHthcHBseVNlY3VyaXR5UnVsZXN9IGZyb20gJy4uLy4uL2NvcmUvc2VjdXJpdHkuanMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEluaXRGaXJlYmFzZU9wdGlvbnMge1xuICAvKiogR0NQIHByb2plY3QgaWQuICovXG4gIHByb2plY3Q/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbml0RmlyZWJhc2Uocm9vdENvbmZpZzogUm9vdENvbmZpZykge1xuICByZXR1cm4gKG9wdGlvbnM6IEluaXRGaXJlYmFzZU9wdGlvbnMpID0+IHtcbiAgICBsZXQgZ2NwUHJvamVjdElkOiBzdHJpbmc7XG4gICAgaWYgKG9wdGlvbnMucHJvamVjdCkge1xuICAgICAgZ2NwUHJvamVjdElkID0gb3B0aW9ucy5wcm9qZWN0O1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBjbXNQbHVnaW4gPSBnZXRDbXNQbHVnaW4ocm9vdENvbmZpZyk7XG4gICAgICBjb25zdCBjbXNQbHVnaW5PcHRpb25zID0gY21zUGx1Z2luLmdldENvbmZpZygpO1xuICAgICAgZ2NwUHJvamVjdElkID0gY21zUGx1Z2luT3B0aW9ucy5maXJlYmFzZUNvbmZpZy5wcm9qZWN0SWQ7XG4gICAgfVxuICAgIGlmICghZ2NwUHJvamVjdElkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ZpcmViYXNlQ29uZmlnLnByb2plY3RJZCBub3Qgc2V0IGluIGNtcyBwbHVnaW4gb3B0aW9ucycpO1xuICAgIH1cblxuICAgIGNvbnNvbGUubG9nKGBnY3AgcHJvamVjdDogJHtnY3BQcm9qZWN0SWR9YCk7XG4gICAgY29uc29sZS5sb2coJ1x1RDgzRFx1REM2RSB1cGRhdGluZyBzZWN1cml0eSBydWxlcy4uLicpO1xuICAgIGFwcGx5U2VjdXJpdHlSdWxlcyhnY3BQcm9qZWN0SWQpO1xuICAgIGNvbnNvbGUubG9nKCdkb25lIGluaXRpYWxpemluZyBmaXJlYmFzZSBwcm9qZWN0IScpO1xuICB9O1xufVxuIiwgImltcG9ydCB7cHJvbWlzZXMgYXMgZnN9IGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHBhdGggZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCB7ZmlsZVVSTFRvUGF0aH0gZnJvbSAnbm9kZTp1cmwnO1xuXG5pbXBvcnQge1Jvb3RDb25maWd9IGZyb20gJ0BibGlua2svcm9vdCc7XG5pbXBvcnQge3ZpdGVTc3JMb2FkTW9kdWxlfSBmcm9tICdAYmxpbmtrL3Jvb3Qvbm9kZSc7XG5pbXBvcnQgKiBhcyBkb20gZnJvbSAnZHRzLWRvbSc7XG5cbmltcG9ydCB7RmllbGQsIFNjaGVtYX0gZnJvbSAnLi4vLi4vY29yZS9zY2hlbWEuanMnO1xuXG50eXBlIFByb2plY3RNb2R1bGUgPSB0eXBlb2YgaW1wb3J0KCcuLi8uLi9jb3JlL3Byb2plY3QuanMnKTtcbmNvbnN0IF9fZGlybmFtZSA9IHBhdGguZGlybmFtZShmaWxlVVJMVG9QYXRoKGltcG9ydC5tZXRhLnVybCkpO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJhdGVUeXBlcyhyb290Q29uZmlnOiBSb290Q29uZmlnKSB7XG4gIGNvbnN0IHJvb3REaXIgPSByb290Q29uZmlnLnJvb3REaXI7XG4gIHJldHVybiBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgbW9kdWxlUGF0aCA9IHBhdGgucmVzb2x2ZShfX2Rpcm5hbWUsICcuL3Byb2plY3QuanMnKTtcbiAgICBjb25zdCBwcm9qZWN0ID0gKGF3YWl0IHZpdGVTc3JMb2FkTW9kdWxlKFxuICAgICAgcm9vdENvbmZpZyxcbiAgICAgIG1vZHVsZVBhdGhcbiAgICApKSBhcyBQcm9qZWN0TW9kdWxlO1xuICAgIGNvbnN0IHNjaGVtYXMgPSBwcm9qZWN0LmdldFByb2plY3RTY2hlbWFzKCk7XG4gICAgY29uc29sZS5sb2coYGdlbmVyYXRpbmcgcm9vdC1jbXMuZC50cyBmcm9tICR7cm9vdERpcn0uLi5gKTtcbiAgICBjb25zdCBvdXRwdXRQYXRoID0gcGF0aC5yZXNvbHZlKHJvb3REaXIsICdyb290LWNtcy5kLnRzJyk7XG4gICAgYXdhaXQgZ2VuZXJhdGVTY2hlbWFEdHMob3V0cHV0UGF0aCwgc2NoZW1hcyk7XG4gICAgY29uc29sZS5sb2coJ3NhdmVkIHJvb3QtY21zLmQudHMhJyk7XG4gIH07XG59XG5cbi8vIFRoZSBgZHRzLWRvbWAgcGFja2FnZSB1c2VzIDQtc3BhY2UgaW5kZW50cywgdXNlIHRoZSBzYW1lIGZvciBjb25zaXN0ZW5jeS5cbmNvbnN0IFRFTVBMQVRFID0gYC8qKiBSb290LmpzIENNUyB0eXBlcy4gVGhpcyBmaWxlIGlzIGF1dG9nZW5lcmF0ZWQuICovXG5cbmV4cG9ydCBpbnRlcmZhY2UgUm9vdENNU0RvYzxGaWVsZHMgZXh0ZW5kcyB7fT4ge1xuICAgIC8qKiBUaGUgaWQgb2YgdGhlIGRvYywgZS5nLiBcIlBhZ2VzL2Zvby1iYXJcIi4gKi9cbiAgICBpZDogc3RyaW5nO1xuICAgIC8qKiBUaGUgY29sbGVjdGlvbiBpZCBvZiB0aGUgZG9jLCBlLmcuIFwiUGFnZXNcIi4gKi9cbiAgICBjb2xsZWN0aW9uSWQ6IHN0cmluZztcbiAgICAvKiogVGhlIHNsdWcgb2YgdGhlIGRvYywgZS5nLiBcImZvby1iYXJcIi4gKi9cbiAgICBzbHVnOiBzdHJpbmc7XG4gICAgLyoqIFN5c3RlbS1sZXZlbCBtZXRhZGF0YS4gKi9cbiAgICBzeXM6IHtcbiAgICAgICAgY3JlYXRlZEF0OiBudW1iZXI7XG4gICAgICAgIGNyZWF0ZWRCeTogc3RyaW5nO1xuICAgICAgICBtb2RpZmllZEF0OiBudW1iZXI7XG4gICAgICAgIG1vZGlmaWVkQnk6IHN0cmluZztcbiAgICAgICAgZmlyc3RQdWJsaXNoZWRBdD86IG51bWJlcjtcbiAgICAgICAgZmlyc3RQdWJsaXNoZWRCeT86IHN0cmluZztcbiAgICAgICAgcHVibGlzaGVkQXQ/OiBudW1iZXI7XG4gICAgICAgIHB1Ymxpc2hlZEJ5Pzogc3RyaW5nO1xuICAgIH07XG4gICAgLyoqIFVzZXItZW50ZXJlZCBmaWVsZCB2YWx1ZXMgZnJvbSB0aGUgQ01TLiAqL1xuICAgIGZpZWxkcz86IEZpZWxkcztcbn1gO1xuXG4vKipcbiAqIEdlbmVyYXRlcyBhIHJvb3QtY21zLmQudHMgZmlsZSBmcm9tIHRoZSAuc2NoZW1hLnRzIGZpbGVzIGluIHRoZSBwcm9qZWN0LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2VuZXJhdGVTY2hlbWFEdHMoXG4gIG91dHB1dFBhdGg6IHN0cmluZyxcbiAgc2NoZW1hczogUmVjb3JkPHN0cmluZywgU2NoZW1hPlxuKSB7XG4gIGNvbnN0IHJlc3VsdHMgPSBbVEVNUExBVEVdO1xuICBmb3IgKGNvbnN0IGZpbGVJZCBpbiBzY2hlbWFzKSB7XG4gICAgY29uc3Qgc2NoZW1hID0gc2NoZW1hc1tmaWxlSWRdO1xuICAgIHJlc3VsdHMucHVzaChyZW5kZXJTY2hlbWEoZmlsZUlkLCBzY2hlbWEpKTtcbiAgfVxuICBjb25zdCBvdXRwdXQgPSByZXN1bHRzXG4gICAgLmpvaW4oJ1xcblxcbicpXG4gICAgLnJlcGxhY2VBbGwoJy8qKiAgJywgJy8qKiAnKVxuICAgIC5yZXBsYWNlQWxsKCcgICovJywgJyAqLycpXG4gICAgLnJlcGxhY2UoL1xcclxcbnxcXHJ8XFxuL2csICdcXG4nKTtcbiAgYXdhaXQgZnMud3JpdGVGaWxlKG91dHB1dFBhdGgsIG91dHB1dCwgJ3V0Zi04Jyk7XG59XG5cbmZ1bmN0aW9uIGZpZWxkUHJvcGVydHkoZmllbGQ6IEZpZWxkKTogZG9tLlByb3BlcnR5RGVjbGFyYXRpb24ge1xuICBjb25zdCBwcm9wID0gZG9tLmNyZWF0ZS5wcm9wZXJ0eShcbiAgICBmaWVsZC5pZCEsXG4gICAgZmllbGRUeXBlKGZpZWxkKSxcbiAgICBkb20uRGVjbGFyYXRpb25GbGFncy5PcHRpb25hbFxuICApO1xuICBjb25zdCBqc2RvYyA9IFtdO1xuICBpZiAoZmllbGQubGFiZWwpIHtcbiAgICBpZiAoZmllbGQuaGVscCkge1xuICAgICAganNkb2MucHVzaChgJHtmaWVsZC5sYWJlbH0uICR7ZmllbGQuaGVscH1gKTtcbiAgICB9IGVsc2Uge1xuICAgICAganNkb2MucHVzaChmaWVsZC5sYWJlbCk7XG4gICAgfVxuICB9XG4gIGlmIChmaWVsZC5kZXByZWNhdGVkKSB7XG4gICAganNkb2MucHVzaCgnQGRlcHJlY2F0ZWQnKTtcbiAgfVxuICBpZiAoanNkb2MubGVuZ3RoID4gMCkge1xuICAgIHByb3AuanNEb2NDb21tZW50ID0ganNkb2Muam9pbignXFxuJyk7XG4gIH1cbiAgcmV0dXJuIHByb3A7XG59XG5cbmZ1bmN0aW9uIGZpZWxkVHlwZShmaWVsZDogRmllbGQpOiBkb20uVHlwZSB7XG4gIGlmIChmaWVsZC50eXBlID09PSAnYXJyYXknKSB7XG4gICAgcmV0dXJuIGRvbS50eXBlLmFycmF5KGZpZWxkVHlwZShmaWVsZC5vZikpO1xuICB9XG4gIGlmIChmaWVsZC50eXBlID09PSAnaW1hZ2UnKSB7XG4gICAgcmV0dXJuIGRvbS5jcmVhdGUub2JqZWN0VHlwZShbXG4gICAgICBkb20uY3JlYXRlLnByb3BlcnR5KCdzcmMnLCBkb20udHlwZS5zdHJpbmcpLFxuICAgICAgZG9tLmNyZWF0ZS5wcm9wZXJ0eShcbiAgICAgICAgJ2FsdCcsXG4gICAgICAgIGRvbS50eXBlLnN0cmluZyxcbiAgICAgICAgZG9tLkRlY2xhcmF0aW9uRmxhZ3MuT3B0aW9uYWxcbiAgICAgICksXG4gICAgICBkb20uY3JlYXRlLnByb3BlcnR5KFxuICAgICAgICAnd2lkdGgnLFxuICAgICAgICBkb20udHlwZS5udW1iZXIsXG4gICAgICAgIGRvbS5EZWNsYXJhdGlvbkZsYWdzLk9wdGlvbmFsXG4gICAgICApLFxuICAgICAgZG9tLmNyZWF0ZS5wcm9wZXJ0eShcbiAgICAgICAgJ2hlaWdodCcsXG4gICAgICAgIGRvbS50eXBlLm51bWJlcixcbiAgICAgICAgZG9tLkRlY2xhcmF0aW9uRmxhZ3MuT3B0aW9uYWxcbiAgICAgICksXG4gICAgXSk7XG4gIH1cbiAgaWYgKGZpZWxkLnR5cGUgPT09ICdmaWxlJykge1xuICAgIHJldHVybiBkb20uY3JlYXRlLm9iamVjdFR5cGUoW2RvbS5jcmVhdGUucHJvcGVydHkoJ3NyYycsIGRvbS50eXBlLnN0cmluZyldKTtcbiAgfVxuICBpZiAoZmllbGQudHlwZSA9PT0gJ211bHRpc2VsZWN0Jykge1xuICAgIHJldHVybiBkb20udHlwZS5hcnJheShkb20udHlwZS5zdHJpbmcpO1xuICB9XG4gIGlmIChmaWVsZC50eXBlID09PSAnc2VsZWN0Jykge1xuICAgIHJldHVybiBkb20udHlwZS5zdHJpbmc7XG4gIH1cbiAgaWYgKGZpZWxkLnR5cGUgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIGRvbS50eXBlLnN0cmluZztcbiAgfVxuICBpZiAoZmllbGQudHlwZSA9PT0gJ29iamVjdCcpIHtcbiAgICBjb25zdCBzdWJwcm9wZXJ0aWVzID0gKGZpZWxkLmZpZWxkcyB8fCBbXSkubWFwKChmKSA9PiBmaWVsZFByb3BlcnR5KGYpKTtcbiAgICByZXR1cm4gZG9tLmNyZWF0ZS5vYmplY3RUeXBlKHN1YnByb3BlcnRpZXMpO1xuICB9XG4gIHJldHVybiBkb20udHlwZS51bmtub3duO1xufVxuXG5mdW5jdGlvbiByZW5kZXJTY2hlbWEoZmlsZUlkOiBzdHJpbmcsIHNjaGVtYTogU2NoZW1hKTogc3RyaW5nIHtcbiAgY29uc3QganNkb2MgPSBgR2VuZXJhdGVkIGZyb20gXFxgJHtmaWxlSWR9XFxgLmA7XG4gIGNvbnN0IGlkID0gcGF0aC5wYXJzZShmaWxlSWQpLm5hbWUuc3BsaXQoJy4nKVswXTtcbiAgY29uc3QgZmllbGRzSW50ZXJmYWNlID0gYCR7aWR9RmllbGRzYDtcbiAgY29uc3QgZmllbGRzID0gZG9tLmNyZWF0ZS5pbnRlcmZhY2UoXG4gICAgZmllbGRzSW50ZXJmYWNlLFxuICAgIGRvbS5EZWNsYXJhdGlvbkZsYWdzLkV4cG9ydFxuICApO1xuICBmaWVsZHMuanNEb2NDb21tZW50ID0ganNkb2M7XG4gIGZvciAoY29uc3QgZmllbGQgb2Ygc2NoZW1hLmZpZWxkcykge1xuICAgIGlmICghZmllbGQuaWQpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBmaWVsZHMubWVtYmVycy5wdXNoKGZpZWxkUHJvcGVydHkoZmllbGQpKTtcbiAgfVxuXG4gIGNvbnN0IGZpZWxkc1R5cGVPdXRwdXQgPSBkb21cbiAgICAuZW1pdChmaWVsZHMsIHtzaW5nbGVMaW5lSnNEb2NDb21tZW50czogdHJ1ZX0pXG4gICAgLnRyaW0oKTtcbiAgaWYgKGZpbGVJZC5zdGFydHNXaXRoKCcvY29sbGVjdGlvbnMvJykpIHtcbiAgICBjb25zdCBiYXNlVHlwZSA9IGRvbS5jcmVhdGUubmFtZWRUeXBlUmVmZXJlbmNlKCdSb290Q01TRG9jJyk7XG4gICAgYmFzZVR5cGUudHlwZUFyZ3VtZW50cy5wdXNoKGRvbS5jcmVhdGUubmFtZWRUeXBlUmVmZXJlbmNlKGZpZWxkc0ludGVyZmFjZSkpO1xuICAgIGNvbnN0IGRvY1R5cGUgPSBkb20uY3JlYXRlLmFsaWFzKFxuICAgICAgYCR7aWR9RG9jYCxcbiAgICAgIGJhc2VUeXBlLFxuICAgICAgZG9tLkRlY2xhcmF0aW9uRmxhZ3MuRXhwb3J0XG4gICAgKTtcbiAgICBkb2NUeXBlLmpzRG9jQ29tbWVudCA9IGpzZG9jO1xuXG4gICAgY29uc3QgZG9jVHlwZU91dHB1dCA9IGRvbVxuICAgICAgLmVtaXQoZG9jVHlwZSwge3NpbmdsZUxpbmVKc0RvY0NvbW1lbnRzOiB0cnVlfSlcbiAgICAgIC50cmltKCk7XG4gICAgcmV0dXJuIGZpZWxkc1R5cGVPdXRwdXQgKyAnXFxuXFxuJyArIGRvY1R5cGVPdXRwdXQ7XG4gIH1cbiAgcmV0dXJuIGZpZWxkc1R5cGVPdXRwdXQ7XG59XG4iXSwKICAibWFwcGluZ3MiOiAiO0FBQ0EsU0FBUSxlQUFlLFNBQVMsMEJBQXlCO0FBQ3pELFNBQWUsb0JBQW1CO0FBSTNCLFNBQVMsZUFBZSxjQUFzQjtBQUNuRCxRQUFNLE9BQU8sUUFBUTtBQUNyQixNQUFJLEtBQUssU0FBUyxLQUFLLEtBQUssSUFBSTtBQUM5QixXQUFPLEtBQUs7QUFBQSxFQUNkO0FBQ0EsU0FBTyxjQUFjO0FBQUEsSUFDbkIsV0FBVztBQUFBLElBQ1gsWUFBWSxtQkFBbUI7QUFBQSxFQUNqQyxDQUFDO0FBQ0g7QUFxSk8sU0FBUyxhQUFhLFlBQW1DO0FBQzlELFFBQU0sVUFBb0IsV0FBVyxXQUFXLENBQUM7QUFDakQsUUFBTSxTQUFTLFFBQVEsS0FBSyxDQUFDQSxZQUFXQSxRQUFPLFNBQVMsVUFBVTtBQUNsRSxNQUFJLENBQUMsUUFBUTtBQUNYLFVBQU0sSUFBSSxNQUFNLHlEQUF5RDtBQUFBLEVBQzNFO0FBQ0EsU0FBTztBQUNUOzs7QUMzS0EsU0FBUSx3QkFBdUI7QUFJeEIsSUFBTSxrQkFBa0I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBZ0MvQixlQUFzQixtQkFBbUIsV0FBbUI7QUFDMUQsUUFBTSxNQUFNLGVBQWUsU0FBUztBQUNwQyxRQUFNLGdCQUFnQixpQkFBaUIsR0FBRztBQUMxQyxRQUFNLGNBQWMsa0NBQWtDLGVBQWU7QUFDdkU7OztBQzlCTyxTQUFTLGFBQWEsWUFBd0I7QUFDbkQsU0FBTyxDQUFDLFlBQWlDO0FBQ3ZDLFFBQUk7QUFDSixRQUFJLFFBQVEsU0FBUztBQUNuQixxQkFBZSxRQUFRO0FBQUEsSUFDekIsT0FBTztBQUNMLFlB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
package/dist/core.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- export { s as schema } from './schema-c9eba7cf.js';
1
+ export { s as schema } from './schema-ee98b607.js';
2
2
  import * as firebase_admin_app from 'firebase-admin/app';
3
3
  import { RootConfig } from '@blinkk/root';
4
4
  import { CMSPlugin } from './plugin.js';
package/dist/core.js CHANGED
@@ -184,4 +184,4 @@ export {
184
184
  numDocs,
185
185
  schema_exports as schema
186
186
  };
187
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vY29yZS9zY2hlbWEudHMiLCAiLi4vY29yZS9ydW50aW1lLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJpbXBvcnQge0Z1bmN0aW9uYWxDb21wb25lbnR9IGZyb20gJ3ByZWFjdCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29tbW9uRmllbGRQcm9wcyB7XG4gIHR5cGU6IHN0cmluZztcbiAgaWQ/OiBzdHJpbmc7XG4gIGxhYmVsPzogc3RyaW5nO1xuICBoZWxwPzogc3RyaW5nO1xuICBwbGFjZWhvbGRlcj86IHN0cmluZztcbiAgZGVmYXVsdD86IGFueTtcbiAgaGlkZGVuPzogYm9vbGVhbjtcbiAgZGVwcmVjYXRlZD86IGJvb2xlYW47XG59XG5cbmV4cG9ydCB0eXBlIFN0cmluZ0ZpZWxkID0gQ29tbW9uRmllbGRQcm9wcyAmIHtcbiAgdHlwZTogJ3N0cmluZyc7XG4gIGRlZmF1bHQ/OiBzdHJpbmc7XG4gIHRyYW5zbGF0ZT86IGJvb2xlYW47XG4gIHZhcmlhbnQ/OiAnaW5wdXQnIHwgJ3RleHRhcmVhJztcbiAgLyoqIEZvciB0ZXh0YXJlYSB2YXJpYW50LCB0aGUgbWF4aW11bSBudW1iZXIgb2Ygcm93cyBvZiB0ZXh0IHRvIHNob3cuICovXG4gIG1heFJvd3M/OiBudW1iZXI7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gc3RyaW5nKGZpZWxkOiBPbWl0PFN0cmluZ0ZpZWxkLCAndHlwZSc+KTogU3RyaW5nRmllbGQge1xuICByZXR1cm4gey4uLmZpZWxkLCB0eXBlOiAnc3RyaW5nJ307XG59XG5cbmV4cG9ydCB0eXBlIE51bWJlckZpZWxkID0gQ29tbW9uRmllbGRQcm9wcyAmIHtcbiAgdHlwZTogJ251bWJlcic7XG4gIGRlZmF1bHQ/OiBudW1iZXI7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gbnVtYmVyKGZpZWxkOiBPbWl0PE51bWJlckZpZWxkLCAndHlwZSc+KTogTnVtYmVyRmllbGQge1xuICByZXR1cm4gey4uLmZpZWxkLCB0eXBlOiAnbnVtYmVyJ307XG59XG5cbmV4cG9ydCB0eXBlIERhdGVGaWVsZCA9IENvbW1vbkZpZWxkUHJvcHMgJiB7XG4gIHR5cGU6ICdkYXRlJztcbiAgZGVmYXVsdD86IHN0cmluZztcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBkYXRlKGZpZWxkOiBPbWl0PERhdGVGaWVsZCwgJ3R5cGUnPik6IERhdGVGaWVsZCB7XG4gIHJldHVybiB7Li4uZmllbGQsIHR5cGU6ICdkYXRlJ307XG59XG5cbmV4cG9ydCB0eXBlIERhdGVUaW1lRmllbGQgPSBDb21tb25GaWVsZFByb3BzICYge1xuICB0eXBlOiAnZGF0ZXRpbWUnO1xuICBkZWZhdWx0Pzogc3RyaW5nO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGRhdGV0aW1lKGZpZWxkOiBPbWl0PERhdGVUaW1lRmllbGQsICd0eXBlJz4pOiBEYXRlVGltZUZpZWxkIHtcbiAgcmV0dXJuIHsuLi5maWVsZCwgdHlwZTogJ2RhdGV0aW1lJ307XG59XG5cbmV4cG9ydCB0eXBlIEJvb2xlYW5GaWVsZCA9IENvbW1vbkZpZWxkUHJvcHMgJiB7XG4gIHR5cGU6ICdib29sZWFuJztcbiAgZGVmYXVsdD86IGJvb2xlYW47XG4gIGNoZWNrYm94TGFiZWw/OiBzdHJpbmc7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gYm9vbGVhbihmaWVsZDogT21pdDxCb29sZWFuRmllbGQsICd0eXBlJz4pOiBCb29sZWFuRmllbGQge1xuICByZXR1cm4gey4uLmZpZWxkLCB0eXBlOiAnYm9vbGVhbid9O1xufVxuXG5leHBvcnQgdHlwZSBTZWxlY3RGaWVsZCA9IENvbW1vbkZpZWxkUHJvcHMgJiB7XG4gIHR5cGU6ICdzZWxlY3QnO1xuICBkZWZhdWx0Pzogc3RyaW5nO1xuICBvcHRpb25zPzogQXJyYXk8e3ZhbHVlOiBzdHJpbmc7IGxhYmVsPzogc3RyaW5nfT4gfCBzdHJpbmdbXTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBzZWxlY3QoZmllbGQ6IE9taXQ8U2VsZWN0RmllbGQsICd0eXBlJz4pOiBTZWxlY3RGaWVsZCB7XG4gIHJldHVybiB7Li4uZmllbGQsIHR5cGU6ICdzZWxlY3QnfTtcbn1cblxuZXhwb3J0IHR5cGUgTXVsdGlTZWxlY3RGaWVsZCA9IE9taXQ8U2VsZWN0RmllbGQsICd0eXBlJz4gJiB7XG4gIHR5cGU6ICdtdWx0aXNlbGVjdCc7XG4gIC8qKiBTZXQgdG8gYHRydWVgIHRvIGFsbG93IHVzZXJzIHRvIGNyZWF0ZSBhcmJpdHJhcnkgdmFsdWVzLiAqL1xuICBjcmVhdGFibGU/OiBib29sZWFuO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIG11bHRpc2VsZWN0KFxuICBmaWVsZDogT21pdDxNdWx0aVNlbGVjdEZpZWxkLCAndHlwZSc+XG4pOiBNdWx0aVNlbGVjdEZpZWxkIHtcbiAgcmV0dXJuIHsuLi5maWVsZCwgdHlwZTogJ211bHRpc2VsZWN0J307XG59XG5cbmV4cG9ydCB0eXBlIEltYWdlRmllbGQgPSBDb21tb25GaWVsZFByb3BzICYge1xuICB0eXBlOiAnaW1hZ2UnO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGltYWdlKGZpZWxkOiBPbWl0PEltYWdlRmllbGQsICd0eXBlJz4pOiBJbWFnZUZpZWxkIHtcbiAgcmV0dXJuIHsuLi5maWVsZCwgdHlwZTogJ2ltYWdlJ307XG59XG5cbmV4cG9ydCB0eXBlIEZpbGVGaWVsZCA9IENvbW1vbkZpZWxkUHJvcHMgJiB7XG4gIHR5cGU6ICdmaWxlJztcbiAgLyoqIExpc3Qgb2Ygc3VwcG9ydGVkIGV4dHMsIGUuZy4gYFsnLm1wNCddYC4gKi9cbiAgZXh0cz86IHN0cmluZ1tdO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGZpbGUoZmllbGQ6IE9taXQ8RmlsZUZpZWxkLCAndHlwZSc+KTogRmlsZUZpZWxkIHtcbiAgcmV0dXJuIHsuLi5maWVsZCwgdHlwZTogJ2ZpbGUnfTtcbn1cblxuZXhwb3J0IHR5cGUgT2JqZWN0RmllbGQgPSBDb21tb25GaWVsZFByb3BzICYge1xuICB0eXBlOiAnb2JqZWN0JztcbiAgZmllbGRzOiBGaWVsZFdpdGhJZFtdO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIG9iamVjdChmaWVsZDogT21pdDxPYmplY3RGaWVsZCwgJ3R5cGUnPik6IE9iamVjdEZpZWxkIHtcbiAgcmV0dXJuIHsuLi5maWVsZCwgdHlwZTogJ29iamVjdCd9O1xufVxuXG5leHBvcnQgdHlwZSBBcnJheUZpZWxkID0gQ29tbW9uRmllbGRQcm9wcyAmIHtcbiAgdHlwZTogJ2FycmF5JztcbiAgZGVmYXVsdD86IGFueVtdO1xuICAvKipcbiAgICogU3RyaW5nIGZvcm1hdCBmb3IgdGhlIHByZXZpZXcgbGluZSBvZiBhbiBpdGVtIGluIHRoZSBhcnJheS4gUGxhY2Vob2xkZXJcbiAgICogdmFsdWVzIHNob3VsZCB1c2UgYnJhY2tldHMsIGUuZy4gYG17X2luZGV4OjAyfToge190eXBlfWAuXG4gICAqXG4gICAqIE11bHRpcGxlIHZhbHVlcyBjYW4gYmUgcHJvdmlkZWQsIGluIHdoaWNoIGNhc2UgdGhlIGZpcnN0IHByZXZpZXcgbGluZSB3aXRoXG4gICAqIG5vIG1pc3NpbmcgcGxhY2Vob2xkZXIgdmFsdWVzIHdpbGwgYmUgdXNlZC5cbiAgICpcbiAgICogU3lzdGVtIGFkZGVkIHBsYWNlaG9sZGVyIHZhbHVlczpcbiAgICpcbiAgICogLSBfaW5kZXg6IFRoZSAwLWJhc2VkIGluZGV4LlxuICAgKiAtIF9pbmRleDowMjogQSBsZWZ0LXBhZGRlZCB2ZXJzaW9uIG9mIF9pbmRleCB0byAyIGRpZ2l0cy5cbiAgICogLSBfaW5kZXg6MDM6IEEgbGVmdC1wYWRkZWQgdmVyc2lvbiBvZiBfaW5kZXggdG8gMyBkaWdpdHMuXG4gICAqIC0gX3R5cGU6IEZvciBhcnJheSBvZiBvbmUtb2YgZmllbGRzLCB0aGUgdHlwZSBvZiB0aGUgc2VsZWN0ZWQgZmllbGQuXG4gICAqL1xuICBwcmV2aWV3Pzogc3RyaW5nIHwgc3RyaW5nW107XG4gIC8vIE5PVEUoc3RldmVubGUpOiB0aGUgYXJyYXkgZmllbGQgc2hvdWxkIG9ubHkgYWNjZXB0IG9iamVjdCB2YWx1ZXMgdG8ga2VlcFxuICAvLyB0aGUgc2NoZW1hcyBmdXR1cmUtZnJpZW5kbHkuIEZvciBleGFtcGxlLCBpZiB3ZSB3ZXJlIHRvIGFjY2VwdCBwcmltYXRpdmVzXG4gIC8vIChlLmcuIEFycmF5PHN0cmluZz4pIGFuZCB0aGUgZGV2ZWxvcGVyIGRlY2lkZXMgaW4gdGhlIGZ1dHVyZSB0aGF0IHRoZXlcbiAgLy8gbmVlZCB0byBhZGQgZXh0cmEgZmllbGRzIHRvIHRoYXQgYXJyYXkgdHlwZSwgdGhleSB3b3VsZCBoYXZlIHRvIGNyZWF0ZSBhXG4gIC8vIG5ldyBmaWVsZCwgY3JlYXRlIGEgbmV3IHNjaGVtYSBmaWVsZCwgYW5kIHRoZW4gcGVyZm9ybSBhIGRiIG1pZ3JhdGlvbiB0b1xuICAvLyB1cGRhdGUgZnJvbSB0aGUgb2xkIGZpZWxkIHR5cGUgdG8gdGhlIG5ldyBmaWVsZCB0eXBlLiBCdXQgaWYgd2UgZW5mb3JjZVxuICAvLyBvYmplY3RzIGhlcmUsIGEgZGV2ZWxvcGVyIHNob3VsZCB0ZWNobmljYWxseSBiZSBhYmxlIHRvIGFkZCBmaWVsZHMgdG8gdGhlXG4gIC8vIG5lc3RlZCBmaWVsZCBkZWZpbml0aW9uIHdpdGhvdXQgYnJlYWtpbmcgYW55IGV4aXN0aW5nIGRiIGVudHJpZXMuXG4gIG9mOiBPYmplY3RMaWtlRmllbGQ7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gYXJyYXkoZmllbGQ6IE9taXQ8QXJyYXlGaWVsZCwgJ3R5cGUnPik6IEFycmF5RmllbGQge1xuICByZXR1cm4gey4uLmZpZWxkLCB0eXBlOiAnYXJyYXknfTtcbn1cblxuZXhwb3J0IHR5cGUgT25lT2ZGaWVsZCA9IENvbW1vbkZpZWxkUHJvcHMgJiB7XG4gIHR5cGU6ICdvbmVvZic7XG4gIHR5cGVzOiBTY2hlbWFbXTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBvbmVPZihmaWVsZDogT21pdDxPbmVPZkZpZWxkLCAndHlwZSc+KTogT25lT2ZGaWVsZCB7XG4gIHJldHVybiB7Li4uZmllbGQsIHR5cGU6ICdvbmVvZid9O1xufVxuXG5leHBvcnQgdHlwZSBGaWVsZCA9XG4gIHwgU3RyaW5nRmllbGRcbiAgfCBOdW1iZXJGaWVsZFxuICB8IERhdGVGaWVsZFxuICB8IERhdGVUaW1lRmllbGRcbiAgfCBCb29sZWFuRmllbGRcbiAgfCBTZWxlY3RGaWVsZFxuICB8IE11bHRpU2VsZWN0RmllbGRcbiAgfCBJbWFnZUZpZWxkXG4gIHwgRmlsZUZpZWxkXG4gIHwgT2JqZWN0RmllbGRcbiAgfCBBcnJheUZpZWxkXG4gIHwgT25lT2ZGaWVsZDtcblxuLyoqXG4gKiBTaW1pbGFyIHRvIHtAbGluayBGaWVsZH0gYnV0IHdpdGggYSByZXF1aXJlZCBgaWRgLlxuICogVE9ETyhzdGV2ZW5sZSk6IGZpeCB0aGlzLlxuICovXG5leHBvcnQgdHlwZSBGaWVsZFdpdGhJZCA9IEZpZWxkO1xuXG5leHBvcnQgdHlwZSBPYmplY3RMaWtlRmllbGQgPSBJbWFnZUZpZWxkIHwgRmlsZUZpZWxkIHwgT2JqZWN0RmllbGQgfCBPbmVPZkZpZWxkO1xuXG5leHBvcnQgaW50ZXJmYWNlIFNjaGVtYSB7XG4gIG5hbWU6IHN0cmluZztcbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIGZpZWxkczogRmllbGRXaXRoSWRbXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlZmluZVNjaGVtYShzY2hlbWE6IFNjaGVtYSk6IFNjaGVtYSB7XG4gIHJldHVybiBzY2hlbWE7XG59XG5cbi8qKiBEZWZpbmVzIHRoZSBzY2hlbWEgZm9yIGEgY29sbGVjdGlvbiBvciByZXVzYWJsZSBjb21wb25lbnQuICovXG5leHBvcnQgY29uc3QgZGVmaW5lID0gZGVmaW5lU2NoZW1hO1xuXG5leHBvcnQgdHlwZSBDb2xsZWN0aW9uID0gU2NoZW1hICYge1xuICAvKiogVVJMIHBhdGggd2hlcmUgdGhlIGNvbGxlY3Rpb24gc2VydmVzIGZyb20uICovXG4gIHVybD86IHN0cmluZztcbiAgLyoqXG4gICAqIFVSTCB0aGF0IGNhbiBiZSB1c2VkIHRvIHJlbmRlciBhIHByZXZpZXcgcGFnZS4gVXNlZCBieSB0aGUgc2lkZS1ieS1zaWRlXG4gICAqIGVkaXRvciB0byByZW5kZXIgaW5zdGFudCBwcmV2aWV3cy4gSWYgYmxhbmssIGRlZmF1bHRzIHRvIHRoZSBgdXJsYCBjb25maWcuXG4gICAqL1xuICBwcmV2aWV3VXJsPzogc3RyaW5nO1xuICAvKiogUGFnZSBjb21wb25lbnQgdG8gcmVuZGVyIHRoZSBjb2xsZWN0aW9uIGZvciBpbnN0YW50IHByZXZpZXdzICovXG4gIENvbXBvbmVudD86IEZ1bmN0aW9uYWxDb21wb25lbnQ7XG4gIC8qKlxuICAgKiBEZWZpbmVzIHRoZSBmaWVsZHMgdG8gdXNlIGZvciBkb2N1bWVudCBwcmV2aWV3LiBEZWZhdWx0cyB0byBcInRpdGxlXCIgYW5kXG4gICAqIFwiaW1hZ2VcIi4gVXNlIGRvdCBub3RhdGlvbiBmb3IgbmVzdGVkIGZpZWxkcywgZS5nLiBcIm1ldGEudGl0bGVcIi5cbiAgICovXG4gIHByZXZpZXc/OiB7XG4gICAgdGl0bGU/OiBzdHJpbmc7XG4gICAgaW1hZ2U/OiBzdHJpbmc7XG4gIH07XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gZGVmaW5lQ29sbGVjdGlvbihjb2xsZWN0aW9uOiBDb2xsZWN0aW9uKTogQ29sbGVjdGlvbiB7XG4gIHJldHVybiBjb2xsZWN0aW9uO1xufVxuXG5leHBvcnQgY29uc3QgY29sbGVjdGlvbiA9IGRlZmluZUNvbGxlY3Rpb247XG4iLCAiaW1wb3J0IHtQbHVnaW4sIFJvb3RDb25maWd9IGZyb20gJ0BibGlua2svcm9vdCc7XG5pbXBvcnQge2luaXRpYWxpemVBcHAsIGdldEFwcHMsIGFwcGxpY2F0aW9uRGVmYXVsdH0gZnJvbSAnZmlyZWJhc2UtYWRtaW4vYXBwJztcbmltcG9ydCB7UXVlcnksIGdldEZpcmVzdG9yZX0gZnJvbSAnZmlyZWJhc2UtYWRtaW4vZmlyZXN0b3JlJztcblxuaW1wb3J0IHtDTVNQbHVnaW59IGZyb20gJy4vcGx1Z2luLmpzJztcblxuZXhwb3J0IGZ1bmN0aW9uIGdldEZpcmViYXNlQXBwKGdjcFByb2plY3RJZDogc3RyaW5nKSB7XG4gIGNvbnN0IGFwcHMgPSBnZXRBcHBzKCk7XG4gIGlmIChhcHBzLmxlbmd0aCA+IDAgJiYgYXBwc1swXSkge1xuICAgIHJldHVybiBhcHBzWzBdO1xuICB9XG4gIHJldHVybiBpbml0aWFsaXplQXBwKHtcbiAgICBwcm9qZWN0SWQ6IGdjcFByb2plY3RJZCxcbiAgICBjcmVkZW50aWFsOiBhcHBsaWNhdGlvbkRlZmF1bHQoKSxcbiAgfSk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgR2V0RG9jT3B0aW9ucyB7XG4gIG1vZGU6ICdkcmFmdCcgfCAncHVibGlzaGVkJztcbn1cblxuLyoqXG4gKiBSZXRyaWV2ZXMgYSBkb2MgZnJvbSBSb290LmpzIENNUy5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldERvYzxUPihcbiAgcm9vdENvbmZpZzogUm9vdENvbmZpZyxcbiAgY29sbGVjdGlvbklkOiBzdHJpbmcsXG4gIHNsdWc6IHN0cmluZyxcbiAgb3B0aW9uczogR2V0RG9jT3B0aW9uc1xuKTogUHJvbWlzZTxUIHwgbnVsbD4ge1xuICBjb25zdCBjbXNQbHVnaW4gPSBnZXRDbXNQbHVnaW4ocm9vdENvbmZpZyk7XG4gIGNvbnN0IGNtc1BsdWdpbk9wdGlvbnMgPSBjbXNQbHVnaW4uZ2V0Q29uZmlnKCk7XG4gIGNvbnN0IHByb2plY3RJZCA9IGNtc1BsdWdpbk9wdGlvbnMuaWQgfHwgJ2RlZmF1bHQnO1xuICBjb25zdCBnY3BQcm9qZWN0SWQgPSBjbXNQbHVnaW5PcHRpb25zLmZpcmViYXNlQ29uZmlnLnByb2plY3RJZDtcbiAgY29uc3QgbW9kZSA9IG9wdGlvbnMubW9kZTtcbiAgY29uc3QgbW9kZUNvbGxlY3Rpb24gPSBtb2RlID09PSAnZHJhZnQnID8gJ0RyYWZ0cycgOiAnUHVibGlzaGVkJztcbiAgY29uc3QgYXBwID0gZ2V0RmlyZWJhc2VBcHAoZ2NwUHJvamVjdElkKTtcbiAgY29uc3QgZGIgPSBnZXRGaXJlc3RvcmUoYXBwKTtcbiAgLy8gU2x1Z3Mgd2l0aCBzbGFzaGVzIGFyZSBlbmNvZGVkIGFzIGAtLWAgaW4gdGhlIERCLlxuICBzbHVnID0gc2x1Zy5yZXBsYWNlQWxsKCcvJywgJy0tJyk7XG4gIGNvbnN0IGRiUGF0aCA9IGBQcm9qZWN0cy8ke3Byb2plY3RJZH0vQ29sbGVjdGlvbnMvJHtjb2xsZWN0aW9uSWR9LyR7bW9kZUNvbGxlY3Rpb259LyR7c2x1Z31gO1xuICBjb25zdCBkb2NSZWYgPSBkYi5kb2MoZGJQYXRoKTtcbiAgY29uc3QgZG9jID0gYXdhaXQgZG9jUmVmLmdldCgpO1xuICBpZiAoZG9jLmV4aXN0cykge1xuICAgIGNvbnN0IGRhdGEgPSBkb2MuZGF0YSgpO1xuICAgIHJldHVybiBub3JtYWxpemVEYXRhKGRhdGEpIGFzIFQ7XG4gIH1cbiAgY29uc29sZS5sb2coYGRvYyBub3QgZm91bmQ6ICR7ZGJQYXRofWApO1xuICByZXR1cm4gbnVsbDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBMaXN0RG9jc09wdGlvbnMge1xuICBtb2RlOiAnZHJhZnQnIHwgJ3B1Ymxpc2hlZCc7XG4gIG9mZnNldD86IG51bWJlcjtcbiAgbGltaXQ/OiBudW1iZXI7XG4gIG9yZGVyQnk/OiBzdHJpbmc7XG4gIG9yZGVyQnlEaXJlY3Rpb24/OiAnYXNjJyB8ICdkZXNjJztcbiAgLy8gVE9ETyhzdGV2ZW5sZSk6IHN1cHBvcnQgZmlsdGVycy5cbn1cblxuLyoqXG4gKiBMaXN0cyBkb2NzIGZyb20gYSBSb290LmpzIENNUyBjb2xsZWN0aW9uLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbGlzdERvY3M8VD4oXG4gIHJvb3RDb25maWc6IFJvb3RDb25maWcsXG4gIGNvbGxlY3Rpb25JZDogc3RyaW5nLFxuICBvcHRpb25zOiBMaXN0RG9jc09wdGlvbnNcbik6IFByb21pc2U8e2RvY3M6IFRbXX0+IHtcbiAgY29uc3QgY21zUGx1Z2luID0gZ2V0Q21zUGx1Z2luKHJvb3RDb25maWcpO1xuICBjb25zdCBjbXNQbHVnaW5PcHRpb25zID0gY21zUGx1Z2luLmdldENvbmZpZygpO1xuICBjb25zdCBwcm9qZWN0SWQgPSBjbXNQbHVnaW5PcHRpb25zLmlkIHx8ICdkZWZhdWx0JztcbiAgY29uc3QgZ2NwUHJvamVjdElkID0gY21zUGx1Z2luT3B0aW9ucy5maXJlYmFzZUNvbmZpZy5wcm9qZWN0SWQ7XG4gIGNvbnN0IG1vZGUgPSBvcHRpb25zLm1vZGU7XG4gIGNvbnN0IG1vZGVDb2xsZWN0aW9uID0gbW9kZSA9PT0gJ2RyYWZ0JyA/ICdEcmFmdHMnIDogJ1B1Ymxpc2hlZCc7XG4gIGNvbnN0IGFwcCA9IGdldEZpcmViYXNlQXBwKGdjcFByb2plY3RJZCk7XG4gIGNvbnN0IGRiID0gZ2V0RmlyZXN0b3JlKGFwcCk7XG4gIGNvbnN0IGRiUGF0aCA9IGBQcm9qZWN0cy8ke3Byb2plY3RJZH0vQ29sbGVjdGlvbnMvJHtjb2xsZWN0aW9uSWR9LyR7bW9kZUNvbGxlY3Rpb259YDtcbiAgbGV0IHF1ZXJ5OiBRdWVyeSA9IGRiLmNvbGxlY3Rpb24oZGJQYXRoKTtcbiAgaWYgKG9wdGlvbnMubGltaXQpIHtcbiAgICBxdWVyeSA9IHF1ZXJ5LmxpbWl0KG9wdGlvbnMubGltaXQpO1xuICB9XG4gIGlmIChvcHRpb25zLm9mZnNldCkge1xuICAgIHF1ZXJ5ID0gcXVlcnkub2Zmc2V0KG9wdGlvbnMub2Zmc2V0KTtcbiAgfVxuICBpZiAob3B0aW9ucy5vcmRlckJ5KSB7XG4gICAgcXVlcnkgPSBxdWVyeS5vcmRlckJ5KG9wdGlvbnMub3JkZXJCeSwgb3B0aW9ucy5vcmRlckJ5RGlyZWN0aW9uKTtcbiAgfVxuICBjb25zdCByZXN1bHRzID0gYXdhaXQgcXVlcnkuZ2V0KCk7XG4gIGNvbnN0IGRvY3M6IFRbXSA9IFtdO1xuICByZXN1bHRzLmZvckVhY2goKHJlc3VsdCkgPT4ge1xuICAgIGNvbnN0IGRvYyA9IG5vcm1hbGl6ZURhdGEocmVzdWx0LmRhdGEoKSkgYXMgVDtcbiAgICBkb2NzLnB1c2goZG9jKTtcbiAgfSk7XG4gIHJldHVybiB7ZG9jc307XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTnVtRG9jc09wdGlvbnMge1xuICBtb2RlOiAnZHJhZnQnIHwgJ3B1Ymxpc2hlZCc7XG4gIC8vIFRPRE8oc3RldmVubGUpOiBzdXBwb3J0IGZpbHRlcnMuXG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGRvY3MgaW4gYSBSb290LmpzIENNUyBjb2xsZWN0aW9uLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbnVtRG9jcyhcbiAgcm9vdENvbmZpZzogUm9vdENvbmZpZyxcbiAgY29sbGVjdGlvbklkOiBzdHJpbmcsXG4gIG9wdGlvbnM6IE51bURvY3NPcHRpb25zXG4pIHtcbiAgY29uc3QgY21zUGx1Z2luID0gZ2V0Q21zUGx1Z2luKHJvb3RDb25maWcpO1xuICBjb25zdCBjbXNQbHVnaW5PcHRpb25zID0gY21zUGx1Z2luLmdldENvbmZpZygpO1xuICBjb25zdCBwcm9qZWN0SWQgPSBjbXNQbHVnaW5PcHRpb25zLmlkIHx8ICdkZWZhdWx0JztcbiAgY29uc3QgZ2NwUHJvamVjdElkID0gY21zUGx1Z2luT3B0aW9ucy5maXJlYmFzZUNvbmZpZy5wcm9qZWN0SWQ7XG4gIGNvbnN0IG1vZGUgPSBvcHRpb25zLm1vZGU7XG4gIGNvbnN0IG1vZGVDb2xsZWN0aW9uID0gbW9kZSA9PT0gJ2RyYWZ0JyA/ICdEcmFmdHMnIDogJ1B1Ymxpc2hlZCc7XG4gIGNvbnN0IGFwcCA9IGdldEZpcmViYXNlQXBwKGdjcFByb2plY3RJZCk7XG4gIGNvbnN0IGRiID0gZ2V0RmlyZXN0b3JlKGFwcCk7XG4gIGNvbnN0IGRiUGF0aCA9IGBQcm9qZWN0cy8ke3Byb2plY3RJZH0vQ29sbGVjdGlvbnMvJHtjb2xsZWN0aW9uSWR9LyR7bW9kZUNvbGxlY3Rpb259YDtcbiAgY29uc3QgcXVlcnk6IFF1ZXJ5ID0gZGIuY29sbGVjdGlvbihkYlBhdGgpO1xuICAvLyBUT0RPKHN0ZXZlbmxlKTogc3VwcG9ydCBmaWx0ZXJzIGhlcmUuXG4gIGNvbnN0IHJlc3VsdHMgPSBhd2FpdCBxdWVyeS5jb3VudCgpLmdldCgpO1xuICBjb25zdCBjb3VudCA9IHJlc3VsdHMuZGF0YSgpLmNvdW50O1xuICByZXR1cm4gY291bnQ7XG59XG5cbi8qKlxuICogV2Fsa3MgdGhlIGRhdGEgdHJlZSBhbmQgY29udmVydHMgYW55IFRpbWVzdGFtcCBvYmplY3RzIHRvIG1pbGxpcyBhbmQgYW55XG4gKiBfYXJyYXkgbWFwcyB0byBub3JtYWwgYXJyYXlzLlxuICpcbiAqIEUuZy46XG4gKlxuICogbm9ybWFsaXplRGF0YSh7XG4gKiAgIHN5czoge21vZGlmaWVkQXQ6IFRpbWVzdGFtcCgxMjMpfSxcbiAqICAgZmllbGRzOiB7XG4gKiAgICAgX2FycmF5OiBbJ2FzZGYnXSxcbiAqICAgICBhc2RmOiB7dGl0bGU6ICdoZWxsbyd9XG4gKiAgIH1cbiAqIH0pXG4gKiAvLyA9PiB7c3lzOiB7bW9kaWZpZWRBdDogMTIzfSwgZmllbGRzOiB7Zm9vOiBbe3RpdGxlOiAnaGVsbG8nfV19fVxuICovXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplRGF0YShkYXRhOiBhbnkpOiBhbnkge1xuICBjb25zdCByZXN1bHQ6IGFueSA9IHt9O1xuICBmb3IgKGNvbnN0IGtleSBpbiBkYXRhKSB7XG4gICAgY29uc3QgdmFsID0gZGF0YVtrZXldO1xuICAgIGlmIChpc09iamVjdCh2YWwpKSB7XG4gICAgICBpZiAodmFsLnRvTWlsbGlzKSB7XG4gICAgICAgIHJlc3VsdFtrZXldID0gdmFsLnRvTWlsbGlzKCk7XG4gICAgICB9IGVsc2UgaWYgKE9iamVjdC5oYXNPd24odmFsLCAnX2FycmF5JykgJiYgQXJyYXkuaXNBcnJheSh2YWwuX2FycmF5KSkge1xuICAgICAgICBjb25zdCBhcnIgPSB2YWwuX2FycmF5Lm1hcCgoazogc3RyaW5nKSA9PiBub3JtYWxpemVEYXRhKHZhbFtrXSB8fCB7fSkpO1xuICAgICAgICByZXN1bHRba2V5XSA9IGFycjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc3VsdFtrZXldID0gbm9ybWFsaXplRGF0YSh2YWwpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHRba2V5XSA9IHZhbDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZnVuY3Rpb24gaXNPYmplY3QoZGF0YTogYW55KTogYm9vbGVhbiB7XG4gIHJldHVybiB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgJiYgIUFycmF5LmlzQXJyYXkoZGF0YSkgJiYgZGF0YSAhPT0gbnVsbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldENtc1BsdWdpbihyb290Q29uZmlnOiBSb290Q29uZmlnKTogQ01TUGx1Z2luIHtcbiAgY29uc3QgcGx1Z2luczogUGx1Z2luW10gPSByb290Q29uZmlnLnBsdWdpbnMgfHwgW107XG4gIGNvbnN0IHBsdWdpbiA9IHBsdWdpbnMuZmluZCgocGx1Z2luKSA9PiBwbHVnaW4ubmFtZSA9PT0gJ3Jvb3QtY21zJyk7XG4gIGlmICghcGx1Z2luKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdjb3VsZCBub3QgZmluZCByb290LWNtcyBwbHVnaW4gY29uZmlnIGluIHJvb3QuY29uZmlnLnRzJyk7XG4gIH1cbiAgcmV0dXJuIHBsdWdpbiBhcyBDTVNQbHVnaW47XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFzQk8sU0FBUyxPQUFPLE9BQStDO0FBQ3BFLFNBQU8sRUFBQyxHQUFHLE9BQU8sTUFBTSxTQUFRO0FBQ2xDO0FBT08sU0FBUyxPQUFPLE9BQStDO0FBQ3BFLFNBQU8sRUFBQyxHQUFHLE9BQU8sTUFBTSxTQUFRO0FBQ2xDO0FBT08sU0FBUyxLQUFLLE9BQTJDO0FBQzlELFNBQU8sRUFBQyxHQUFHLE9BQU8sTUFBTSxPQUFNO0FBQ2hDO0FBT08sU0FBUyxTQUFTLE9BQW1EO0FBQzFFLFNBQU8sRUFBQyxHQUFHLE9BQU8sTUFBTSxX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
187
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vY29yZS9zY2hlbWEudHMiLCAiLi4vY29yZS9ydW50aW1lLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJpbXBvcnQge0Z1bmN0aW9uYWxDb21wb25lbnR9IGZyb20gJ3ByZWFjdCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29tbW9uRmllbGRQcm9wcyB7XG4gIHR5cGU6IHN0cmluZztcbiAgaWQ/OiBzdHJpbmc7XG4gIGxhYmVsPzogc3RyaW5nO1xuICBoZWxwPzogc3RyaW5nO1xuICBwbGFjZWhvbGRlcj86IHN0cmluZztcbiAgZGVmYXVsdD86IGFueTtcbiAgaGlkZGVuPzogYm9vbGVhbjtcbiAgZGVwcmVjYXRlZD86IGJvb2xlYW47XG59XG5cbmV4cG9ydCB0eXBlIFN0cmluZ0ZpZWxkID0gQ29tbW9uRmllbGRQcm9wcyAmIHtcbiAgdHlwZTogJ3N0cmluZyc7XG4gIGRlZmF1bHQ/OiBzdHJpbmc7XG4gIHRyYW5zbGF0ZT86IGJvb2xlYW47XG4gIHZhcmlhbnQ/OiAnaW5wdXQnIHwgJ3RleHRhcmVhJztcbiAgLyoqIEZvciB0ZXh0YXJlYSB2YXJpYW50LCB0aGUgbWF4aW11bSBudW1iZXIgb2Ygcm93cyBvZiB0ZXh0IHRvIHNob3cuICovXG4gIG1heFJvd3M/OiBudW1iZXI7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gc3RyaW5nKGZpZWxkOiBPbWl0PFN0cmluZ0ZpZWxkLCAndHlwZSc+KTogU3RyaW5nRmllbGQge1xuICByZXR1cm4gey4uLmZpZWxkLCB0eXBlOiAnc3RyaW5nJ307XG59XG5cbmV4cG9ydCB0eXBlIE51bWJlckZpZWxkID0gQ29tbW9uRmllbGRQcm9wcyAmIHtcbiAgdHlwZTogJ251bWJlcic7XG4gIGRlZmF1bHQ/OiBudW1iZXI7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gbnVtYmVyKGZpZWxkOiBPbWl0PE51bWJlckZpZWxkLCAndHlwZSc+KTogTnVtYmVyRmllbGQge1xuICByZXR1cm4gey4uLmZpZWxkLCB0eXBlOiAnbnVtYmVyJ307XG59XG5cbmV4cG9ydCB0eXBlIERhdGVGaWVsZCA9IENvbW1vbkZpZWxkUHJvcHMgJiB7XG4gIHR5cGU6ICdkYXRlJztcbiAgZGVmYXVsdD86IHN0cmluZztcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBkYXRlKGZpZWxkOiBPbWl0PERhdGVGaWVsZCwgJ3R5cGUnPik6IERhdGVGaWVsZCB7XG4gIHJldHVybiB7Li4uZmllbGQsIHR5cGU6ICdkYXRlJ307XG59XG5cbmV4cG9ydCB0eXBlIERhdGVUaW1lRmllbGQgPSBDb21tb25GaWVsZFByb3BzICYge1xuICB0eXBlOiAnZGF0ZXRpbWUnO1xuICBkZWZhdWx0Pzogc3RyaW5nO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGRhdGV0aW1lKGZpZWxkOiBPbWl0PERhdGVUaW1lRmllbGQsICd0eXBlJz4pOiBEYXRlVGltZUZpZWxkIHtcbiAgcmV0dXJuIHsuLi5maWVsZCwgdHlwZTogJ2RhdGV0aW1lJ307XG59XG5cbmV4cG9ydCB0eXBlIEJvb2xlYW5GaWVsZCA9IENvbW1vbkZpZWxkUHJvcHMgJiB7XG4gIHR5cGU6ICdib29sZWFuJztcbiAgZGVmYXVsdD86IGJvb2xlYW47XG4gIGNoZWNrYm94TGFiZWw/OiBzdHJpbmc7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gYm9vbGVhbihmaWVsZDogT21pdDxCb29sZWFuRmllbGQsICd0eXBlJz4pOiBCb29sZWFuRmllbGQge1xuICByZXR1cm4gey4uLmZpZWxkLCB0eXBlOiAnYm9vbGVhbid9O1xufVxuXG5leHBvcnQgdHlwZSBTZWxlY3RGaWVsZCA9IENvbW1vbkZpZWxkUHJvcHMgJiB7XG4gIHR5cGU6ICdzZWxlY3QnO1xuICBkZWZhdWx0Pzogc3RyaW5nO1xuICBvcHRpb25zPzogQXJyYXk8e3ZhbHVlOiBzdHJpbmc7IGxhYmVsPzogc3RyaW5nfT4gfCBzdHJpbmdbXTtcbiAgdHJhbnNsYXRlPzogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBzZWxlY3QoZmllbGQ6IE9taXQ8U2VsZWN0RmllbGQsICd0eXBlJz4pOiBTZWxlY3RGaWVsZCB7XG4gIHJldHVybiB7Li4uZmllbGQsIHR5cGU6ICdzZWxlY3QnfTtcbn1cblxuZXhwb3J0IHR5cGUgTXVsdGlTZWxlY3RGaWVsZCA9IE9taXQ8U2VsZWN0RmllbGQsICd0eXBlJz4gJiB7XG4gIHR5cGU6ICdtdWx0aXNlbGVjdCc7XG4gIC8qKiBTZXQgdG8gYHRydWVgIHRvIGFsbG93IHVzZXJzIHRvIGNyZWF0ZSBhcmJpdHJhcnkgdmFsdWVzLiAqL1xuICBjcmVhdGFibGU/OiBib29sZWFuO1xuICB0cmFuc2xhdGU/OiBib29sZWFuO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIG11bHRpc2VsZWN0KFxuICBmaWVsZDogT21pdDxNdWx0aVNlbGVjdEZpZWxkLCAndHlwZSc+XG4pOiBNdWx0aVNlbGVjdEZpZWxkIHtcbiAgcmV0dXJuIHsuLi5maWVsZCwgdHlwZTogJ211bHRpc2VsZWN0J307XG59XG5cbmV4cG9ydCB0eXBlIEltYWdlRmllbGQgPSBDb21tb25GaWVsZFByb3BzICYge1xuICB0eXBlOiAnaW1hZ2UnO1xuICB0cmFuc2xhdGU/OiBib29sZWFuO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGltYWdlKGZpZWxkOiBPbWl0PEltYWdlRmllbGQsICd0eXBlJz4pOiBJbWFnZUZpZWxkIHtcbiAgcmV0dXJuIHsuLi5maWVsZCwgdHlwZTogJ2ltYWdlJ307XG59XG5cbmV4cG9ydCB0eXBlIEZpbGVGaWVsZCA9IENvbW1vbkZpZWxkUHJvcHMgJiB7XG4gIHR5cGU6ICdmaWxlJztcbiAgLyoqIExpc3Qgb2Ygc3VwcG9ydGVkIGV4dHMsIGUuZy4gYFsnLm1wNCddYC4gKi9cbiAgZXh0cz86IHN0cmluZ1tdO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGZpbGUoZmllbGQ6IE9taXQ8RmlsZUZpZWxkLCAndHlwZSc+KTogRmlsZUZpZWxkIHtcbiAgcmV0dXJuIHsuLi5maWVsZCwgdHlwZTogJ2ZpbGUnfTtcbn1cblxuZXhwb3J0IHR5cGUgT2JqZWN0RmllbGQgPSBDb21tb25GaWVsZFByb3BzICYge1xuICB0eXBlOiAnb2JqZWN0JztcbiAgZmllbGRzOiBGaWVsZFdpdGhJZFtdO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIG9iamVjdChmaWVsZDogT21pdDxPYmplY3RGaWVsZCwgJ3R5cGUnPik6IE9iamVjdEZpZWxkIHtcbiAgcmV0dXJuIHsuLi5maWVsZCwgdHlwZTogJ29iamVjdCd9O1xufVxuXG5leHBvcnQgdHlwZSBBcnJheUZpZWxkID0gQ29tbW9uRmllbGRQcm9wcyAmIHtcbiAgdHlwZTogJ2FycmF5JztcbiAgZGVmYXVsdD86IGFueVtdO1xuICAvKipcbiAgICogU3RyaW5nIGZvcm1hdCBmb3IgdGhlIHByZXZpZXcgbGluZSBvZiBhbiBpdGVtIGluIHRoZSBhcnJheS4gUGxhY2Vob2xkZXJcbiAgICogdmFsdWVzIHNob3VsZCB1c2UgYnJhY2tldHMsIGUuZy4gYG17X2luZGV4OjAyfToge190eXBlfWAuXG4gICAqXG4gICAqIE11bHRpcGxlIHZhbHVlcyBjYW4gYmUgcHJvdmlkZWQsIGluIHdoaWNoIGNhc2UgdGhlIGZpcnN0IHByZXZpZXcgbGluZSB3aXRoXG4gICAqIG5vIG1pc3NpbmcgcGxhY2Vob2xkZXIgdmFsdWVzIHdpbGwgYmUgdXNlZC5cbiAgICpcbiAgICogU3lzdGVtIGFkZGVkIHBsYWNlaG9sZGVyIHZhbHVlczpcbiAgICpcbiAgICogLSBfaW5kZXg6IFRoZSAwLWJhc2VkIGluZGV4LlxuICAgKiAtIF9pbmRleDowMjogQSBsZWZ0LXBhZGRlZCB2ZXJzaW9uIG9mIF9pbmRleCB0byAyIGRpZ2l0cy5cbiAgICogLSBfaW5kZXg6MDM6IEEgbGVmdC1wYWRkZWQgdmVyc2lvbiBvZiBfaW5kZXggdG8gMyBkaWdpdHMuXG4gICAqIC0gX3R5cGU6IEZvciBhcnJheSBvZiBvbmUtb2YgZmllbGRzLCB0aGUgdHlwZSBvZiB0aGUgc2VsZWN0ZWQgZmllbGQuXG4gICAqL1xuICBwcmV2aWV3Pzogc3RyaW5nIHwgc3RyaW5nW107XG4gIC8vIE5PVEUoc3RldmVubGUpOiB0aGUgYXJyYXkgZmllbGQgc2hvdWxkIG9ubHkgYWNjZXB0IG9iamVjdCB2YWx1ZXMgdG8ga2VlcFxuICAvLyB0aGUgc2NoZW1hcyBmdXR1cmUtZnJpZW5kbHkuIEZvciBleGFtcGxlLCBpZiB3ZSB3ZXJlIHRvIGFjY2VwdCBwcmltYXRpdmVzXG4gIC8vIChlLmcuIEFycmF5PHN0cmluZz4pIGFuZCB0aGUgZGV2ZWxvcGVyIGRlY2lkZXMgaW4gdGhlIGZ1dHVyZSB0aGF0IHRoZXlcbiAgLy8gbmVlZCB0byBhZGQgZXh0cmEgZmllbGRzIHRvIHRoYXQgYXJyYXkgdHlwZSwgdGhleSB3b3VsZCBoYXZlIHRvIGNyZWF0ZSBhXG4gIC8vIG5ldyBmaWVsZCwgY3JlYXRlIGEgbmV3IHNjaGVtYSBmaWVsZCwgYW5kIHRoZW4gcGVyZm9ybSBhIGRiIG1pZ3JhdGlvbiB0b1xuICAvLyB1cGRhdGUgZnJvbSB0aGUgb2xkIGZpZWxkIHR5cGUgdG8gdGhlIG5ldyBmaWVsZCB0eXBlLiBCdXQgaWYgd2UgZW5mb3JjZVxuICAvLyBvYmplY3RzIGhlcmUsIGEgZGV2ZWxvcGVyIHNob3VsZCB0ZWNobmljYWxseSBiZSBhYmxlIHRvIGFkZCBmaWVsZHMgdG8gdGhlXG4gIC8vIG5lc3RlZCBmaWVsZCBkZWZpbml0aW9uIHdpdGhvdXQgYnJlYWtpbmcgYW55IGV4aXN0aW5nIGRiIGVudHJpZXMuXG4gIG9mOiBPYmplY3RMaWtlRmllbGQ7XG4gIC8qKlxuICAgKiBMYWJlbCB0byB1c2UgZm9yIHRoZSBcImFkZCBpdGVtXCIgYnV0dG9uLiBEZWZhdWx0cyB0byBgQWRkYC5cbiAgICovXG4gIGJ1dHRvbkxhYmVsPzogc3RyaW5nO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGFycmF5KGZpZWxkOiBPbWl0PEFycmF5RmllbGQsICd0eXBlJz4pOiBBcnJheUZpZWxkIHtcbiAgcmV0dXJuIHsuLi5maWVsZCwgdHlwZTogJ2FycmF5J307XG59XG5cbmV4cG9ydCB0eXBlIE9uZU9mRmllbGQgPSBDb21tb25GaWVsZFByb3BzICYge1xuICB0eXBlOiAnb25lb2YnO1xuICB0eXBlczogU2NoZW1hW107XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gb25lT2YoZmllbGQ6IE9taXQ8T25lT2ZGaWVsZCwgJ3R5cGUnPik6IE9uZU9mRmllbGQge1xuICByZXR1cm4gey4uLmZpZWxkLCB0eXBlOiAnb25lb2YnfTtcbn1cblxuZXhwb3J0IHR5cGUgRmllbGQgPVxuICB8IFN0cmluZ0ZpZWxkXG4gIHwgTnVtYmVyRmllbGRcbiAgfCBEYXRlRmllbGRcbiAgfCBEYXRlVGltZUZpZWxkXG4gIHwgQm9vbGVhbkZpZWxkXG4gIHwgU2VsZWN0RmllbGRcbiAgfCBNdWx0aVNlbGVjdEZpZWxkXG4gIHwgSW1hZ2VGaWVsZFxuICB8IEZpbGVGaWVsZFxuICB8IE9iamVjdEZpZWxkXG4gIHwgQXJyYXlGaWVsZFxuICB8IE9uZU9mRmllbGQ7XG5cbi8qKlxuICogU2ltaWxhciB0byB7QGxpbmsgRmllbGR9IGJ1dCB3aXRoIGEgcmVxdWlyZWQgYGlkYC5cbiAqIFRPRE8oc3RldmVubGUpOiBmaXggdGhpcy5cbiAqL1xuZXhwb3J0IHR5cGUgRmllbGRXaXRoSWQgPSBGaWVsZDtcblxuZXhwb3J0IHR5cGUgT2JqZWN0TGlrZUZpZWxkID0gSW1hZ2VGaWVsZCB8IEZpbGVGaWVsZCB8IE9iamVjdEZpZWxkIHwgT25lT2ZGaWVsZDtcblxuZXhwb3J0IGludGVyZmFjZSBTY2hlbWEge1xuICBuYW1lOiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICBmaWVsZHM6IEZpZWxkV2l0aElkW107XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWZpbmVTY2hlbWEoc2NoZW1hOiBTY2hlbWEpOiBTY2hlbWEge1xuICByZXR1cm4gc2NoZW1hO1xufVxuXG4vKiogRGVmaW5lcyB0aGUgc2NoZW1hIGZvciBhIGNvbGxlY3Rpb24gb3IgcmV1c2FibGUgY29tcG9uZW50LiAqL1xuZXhwb3J0IGNvbnN0IGRlZmluZSA9IGRlZmluZVNjaGVtYTtcblxuZXhwb3J0IHR5cGUgQ29sbGVjdGlvbiA9IFNjaGVtYSAmIHtcbiAgLyoqIFVSTCBwYXRoIHdoZXJlIHRoZSBjb2xsZWN0aW9uIHNlcnZlcyBmcm9tLiAqL1xuICB1cmw/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBVUkwgdGhhdCBjYW4gYmUgdXNlZCB0byByZW5kZXIgYSBwcmV2aWV3IHBhZ2UuIFVzZWQgYnkgdGhlIHNpZGUtYnktc2lkZVxuICAgKiBlZGl0b3IgdG8gcmVuZGVyIGluc3RhbnQgcHJldmlld3MuIElmIGJsYW5rLCBkZWZhdWx0cyB0byB0aGUgYHVybGAgY29uZmlnLlxuICAgKi9cbiAgcHJldmlld1VybD86IHN0cmluZztcbiAgLyoqIFBhZ2UgY29tcG9uZW50IHRvIHJlbmRlciB0aGUgY29sbGVjdGlvbiBmb3IgaW5zdGFudCBwcmV2aWV3cyAqL1xuICBDb21wb25lbnQ/OiBGdW5jdGlvbmFsQ29tcG9uZW50O1xuICAvKipcbiAgICogRGVmaW5lcyB0aGUgZmllbGRzIHRvIHVzZSBmb3IgZG9jdW1lbnQgcHJldmlldy4gRGVmYXVsdHMgdG8gXCJ0aXRsZVwiIGFuZFxuICAgKiBcImltYWdlXCIuIFVzZSBkb3Qgbm90YXRpb24gZm9yIG5lc3RlZCBmaWVsZHMsIGUuZy4gXCJtZXRhLnRpdGxlXCIuXG4gICAqL1xuICBwcmV2aWV3Pzoge1xuICAgIHRpdGxlPzogc3RyaW5nO1xuICAgIGltYWdlPzogc3RyaW5nO1xuICB9O1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGRlZmluZUNvbGxlY3Rpb24oY29sbGVjdGlvbjogQ29sbGVjdGlvbik6IENvbGxlY3Rpb24ge1xuICByZXR1cm4gY29sbGVjdGlvbjtcbn1cblxuZXhwb3J0IGNvbnN0IGNvbGxlY3Rpb24gPSBkZWZpbmVDb2xsZWN0aW9uO1xuIiwgImltcG9ydCB7UGx1Z2luLCBSb290Q29uZmlnfSBmcm9tICdAYmxpbmtrL3Jvb3QnO1xuaW1wb3J0IHtpbml0aWFsaXplQXBwLCBnZXRBcHBzLCBhcHBsaWNhdGlvbkRlZmF1bHR9IGZyb20gJ2ZpcmViYXNlLWFkbWluL2FwcCc7XG5pbXBvcnQge1F1ZXJ5LCBnZXRGaXJlc3RvcmV9IGZyb20gJ2ZpcmViYXNlLWFkbWluL2ZpcmVzdG9yZSc7XG5cbmltcG9ydCB7Q01TUGx1Z2lufSBmcm9tICcuL3BsdWdpbi5qcyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRGaXJlYmFzZUFwcChnY3BQcm9qZWN0SWQ6IHN0cmluZykge1xuICBjb25zdCBhcHBzID0gZ2V0QXBwcygpO1xuICBpZiAoYXBwcy5sZW5ndGggPiAwICYmIGFwcHNbMF0pIHtcbiAgICByZXR1cm4gYXBwc1swXTtcbiAgfVxuICByZXR1cm4gaW5pdGlhbGl6ZUFwcCh7XG4gICAgcHJvamVjdElkOiBnY3BQcm9qZWN0SWQsXG4gICAgY3JlZGVudGlhbDogYXBwbGljYXRpb25EZWZhdWx0KCksXG4gIH0pO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEdldERvY09wdGlvbnMge1xuICBtb2RlOiAnZHJhZnQnIHwgJ3B1Ymxpc2hlZCc7XG59XG5cbi8qKlxuICogUmV0cmlldmVzIGEgZG9jIGZyb20gUm9vdC5qcyBDTVMuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXREb2M8VD4oXG4gIHJvb3RDb25maWc6IFJvb3RDb25maWcsXG4gIGNvbGxlY3Rpb25JZDogc3RyaW5nLFxuICBzbHVnOiBzdHJpbmcsXG4gIG9wdGlvbnM6IEdldERvY09wdGlvbnNcbik6IFByb21pc2U8VCB8IG51bGw+IHtcbiAgY29uc3QgY21zUGx1Z2luID0gZ2V0Q21zUGx1Z2luKHJvb3RDb25maWcpO1xuICBjb25zdCBjbXNQbHVnaW5PcHRpb25zID0gY21zUGx1Z2luLmdldENvbmZpZygpO1xuICBjb25zdCBwcm9qZWN0SWQgPSBjbXNQbHVnaW5PcHRpb25zLmlkIHx8ICdkZWZhdWx0JztcbiAgY29uc3QgZ2NwUHJvamVjdElkID0gY21zUGx1Z2luT3B0aW9ucy5maXJlYmFzZUNvbmZpZy5wcm9qZWN0SWQ7XG4gIGNvbnN0IG1vZGUgPSBvcHRpb25zLm1vZGU7XG4gIGNvbnN0IG1vZGVDb2xsZWN0aW9uID0gbW9kZSA9PT0gJ2RyYWZ0JyA/ICdEcmFmdHMnIDogJ1B1Ymxpc2hlZCc7XG4gIGNvbnN0IGFwcCA9IGdldEZpcmViYXNlQXBwKGdjcFByb2plY3RJZCk7XG4gIGNvbnN0IGRiID0gZ2V0RmlyZXN0b3JlKGFwcCk7XG4gIC8vIFNsdWdzIHdpdGggc2xhc2hlcyBhcmUgZW5jb2RlZCBhcyBgLS1gIGluIHRoZSBEQi5cbiAgc2x1ZyA9IHNsdWcucmVwbGFjZUFsbCgnLycsICctLScpO1xuICBjb25zdCBkYlBhdGggPSBgUHJvamVjdHMvJHtwcm9qZWN0SWR9L0NvbGxlY3Rpb25zLyR7Y29sbGVjdGlvbklkfS8ke21vZGVDb2xsZWN0aW9ufS8ke3NsdWd9YDtcbiAgY29uc3QgZG9jUmVmID0gZGIuZG9jKGRiUGF0aCk7XG4gIGNvbnN0IGRvYyA9IGF3YWl0IGRvY1JlZi5nZXQoKTtcbiAgaWYgKGRvYy5leGlzdHMpIHtcbiAgICBjb25zdCBkYXRhID0gZG9jLmRhdGEoKTtcbiAgICByZXR1cm4gbm9ybWFsaXplRGF0YShkYXRhKSBhcyBUO1xuICB9XG4gIGNvbnNvbGUubG9nKGBkb2Mgbm90IGZvdW5kOiAke2RiUGF0aH1gKTtcbiAgcmV0dXJuIG51bGw7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTGlzdERvY3NPcHRpb25zIHtcbiAgbW9kZTogJ2RyYWZ0JyB8ICdwdWJsaXNoZWQnO1xuICBvZmZzZXQ/OiBudW1iZXI7XG4gIGxpbWl0PzogbnVtYmVyO1xuICBvcmRlckJ5Pzogc3RyaW5nO1xuICBvcmRlckJ5RGlyZWN0aW9uPzogJ2FzYycgfCAnZGVzYyc7XG4gIC8vIFRPRE8oc3RldmVubGUpOiBzdXBwb3J0IGZpbHRlcnMuXG59XG5cbi8qKlxuICogTGlzdHMgZG9jcyBmcm9tIGEgUm9vdC5qcyBDTVMgY29sbGVjdGlvbi5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxpc3REb2NzPFQ+KFxuICByb290Q29uZmlnOiBSb290Q29uZmlnLFxuICBjb2xsZWN0aW9uSWQ6IHN0cmluZyxcbiAgb3B0aW9uczogTGlzdERvY3NPcHRpb25zXG4pOiBQcm9taXNlPHtkb2NzOiBUW119PiB7XG4gIGNvbnN0IGNtc1BsdWdpbiA9IGdldENtc1BsdWdpbihyb290Q29uZmlnKTtcbiAgY29uc3QgY21zUGx1Z2luT3B0aW9ucyA9IGNtc1BsdWdpbi5nZXRDb25maWcoKTtcbiAgY29uc3QgcHJvamVjdElkID0gY21zUGx1Z2luT3B0aW9ucy5pZCB8fCAnZGVmYXVsdCc7XG4gIGNvbnN0IGdjcFByb2plY3RJZCA9IGNtc1BsdWdpbk9wdGlvbnMuZmlyZWJhc2VDb25maWcucHJvamVjdElkO1xuICBjb25zdCBtb2RlID0gb3B0aW9ucy5tb2RlO1xuICBjb25zdCBtb2RlQ29sbGVjdGlvbiA9IG1vZGUgPT09ICdkcmFmdCcgPyAnRHJhZnRzJyA6ICdQdWJsaXNoZWQnO1xuICBjb25zdCBhcHAgPSBnZXRGaXJlYmFzZUFwcChnY3BQcm9qZWN0SWQpO1xuICBjb25zdCBkYiA9IGdldEZpcmVzdG9yZShhcHApO1xuICBjb25zdCBkYlBhdGggPSBgUHJvamVjdHMvJHtwcm9qZWN0SWR9L0NvbGxlY3Rpb25zLyR7Y29sbGVjdGlvbklkfS8ke21vZGVDb2xsZWN0aW9ufWA7XG4gIGxldCBxdWVyeTogUXVlcnkgPSBkYi5jb2xsZWN0aW9uKGRiUGF0aCk7XG4gIGlmIChvcHRpb25zLmxpbWl0KSB7XG4gICAgcXVlcnkgPSBxdWVyeS5saW1pdChvcHRpb25zLmxpbWl0KTtcbiAgfVxuICBpZiAob3B0aW9ucy5vZmZzZXQpIHtcbiAgICBxdWVyeSA9IHF1ZXJ5Lm9mZnNldChvcHRpb25zLm9mZnNldCk7XG4gIH1cbiAgaWYgKG9wdGlvbnMub3JkZXJCeSkge1xuICAgIHF1ZXJ5ID0gcXVlcnkub3JkZXJCeShvcHRpb25zLm9yZGVyQnksIG9wdGlvbnMub3JkZXJCeURpcmVjdGlvbik7XG4gIH1cbiAgY29uc3QgcmVzdWx0cyA9IGF3YWl0IHF1ZXJ5LmdldCgpO1xuICBjb25zdCBkb2NzOiBUW10gPSBbXTtcbiAgcmVzdWx0cy5mb3JFYWNoKChyZXN1bHQpID0+IHtcbiAgICBjb25zdCBkb2MgPSBub3JtYWxpemVEYXRhKHJlc3VsdC5kYXRhKCkpIGFzIFQ7XG4gICAgZG9jcy5wdXNoKGRvYyk7XG4gIH0pO1xuICByZXR1cm4ge2RvY3N9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE51bURvY3NPcHRpb25zIHtcbiAgbW9kZTogJ2RyYWZ0JyB8ICdwdWJsaXNoZWQnO1xuICAvLyBUT0RPKHN0ZXZlbmxlKTogc3VwcG9ydCBmaWx0ZXJzLlxufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIG51bWJlciBvZiBkb2NzIGluIGEgUm9vdC5qcyBDTVMgY29sbGVjdGlvbi5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG51bURvY3MoXG4gIHJvb3RDb25maWc6IFJvb3RDb25maWcsXG4gIGNvbGxlY3Rpb25JZDogc3RyaW5nLFxuICBvcHRpb25zOiBOdW1Eb2NzT3B0aW9uc1xuKSB7XG4gIGNvbnN0IGNtc1BsdWdpbiA9IGdldENtc1BsdWdpbihyb290Q29uZmlnKTtcbiAgY29uc3QgY21zUGx1Z2luT3B0aW9ucyA9IGNtc1BsdWdpbi5nZXRDb25maWcoKTtcbiAgY29uc3QgcHJvamVjdElkID0gY21zUGx1Z2luT3B0aW9ucy5pZCB8fCAnZGVmYXVsdCc7XG4gIGNvbnN0IGdjcFByb2plY3RJZCA9IGNtc1BsdWdpbk9wdGlvbnMuZmlyZWJhc2VDb25maWcucHJvamVjdElkO1xuICBjb25zdCBtb2RlID0gb3B0aW9ucy5tb2RlO1xuICBjb25zdCBtb2RlQ29sbGVjdGlvbiA9IG1vZGUgPT09ICdkcmFmdCcgPyAnRHJhZnRzJyA6ICdQdWJsaXNoZWQnO1xuICBjb25zdCBhcHAgPSBnZXRGaXJlYmFzZUFwcChnY3BQcm9qZWN0SWQpO1xuICBjb25zdCBkYiA9IGdldEZpcmVzdG9yZShhcHApO1xuICBjb25zdCBkYlBhdGggPSBgUHJvamVjdHMvJHtwcm9qZWN0SWR9L0NvbGxlY3Rpb25zLyR7Y29sbGVjdGlvbklkfS8ke21vZGVDb2xsZWN0aW9ufWA7XG4gIGNvbnN0IHF1ZXJ5OiBRdWVyeSA9IGRiLmNvbGxlY3Rpb24oZGJQYXRoKTtcbiAgLy8gVE9ETyhzdGV2ZW5sZSk6IHN1cHBvcnQgZmlsdGVycyBoZXJlLlxuICBjb25zdCByZXN1bHRzID0gYXdhaXQgcXVlcnkuY291bnQoKS5nZXQoKTtcbiAgY29uc3QgY291bnQgPSByZXN1bHRzLmRhdGEoKS5jb3VudDtcbiAgcmV0dXJuIGNvdW50O1xufVxuXG4vKipcbiAqIFdhbGtzIHRoZSBkYXRhIHRyZWUgYW5kIGNvbnZlcnRzIGFueSBUaW1lc3RhbXAgb2JqZWN0cyB0byBtaWxsaXMgYW5kIGFueVxuICogX2FycmF5IG1hcHMgdG8gbm9ybWFsIGFycmF5cy5cbiAqXG4gKiBFLmcuOlxuICpcbiAqIG5vcm1hbGl6ZURhdGEoe1xuICogICBzeXM6IHttb2RpZmllZEF0OiBUaW1lc3RhbXAoMTIzKX0sXG4gKiAgIGZpZWxkczoge1xuICogICAgIF9hcnJheTogWydhc2RmJ10sXG4gKiAgICAgYXNkZjoge3RpdGxlOiAnaGVsbG8nfVxuICogICB9XG4gKiB9KVxuICogLy8gPT4ge3N5czoge21vZGlmaWVkQXQ6IDEyM30sIGZpZWxkczoge2ZvbzogW3t0aXRsZTogJ2hlbGxvJ31dfX1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZURhdGEoZGF0YTogYW55KTogYW55IHtcbiAgY29uc3QgcmVzdWx0OiBhbnkgPSB7fTtcbiAgZm9yIChjb25zdCBrZXkgaW4gZGF0YSkge1xuICAgIGNvbnN0IHZhbCA9IGRhdGFba2V5XTtcbiAgICBpZiAoaXNPYmplY3QodmFsKSkge1xuICAgICAgaWYgKHZhbC50b01pbGxpcykge1xuICAgICAgICByZXN1bHRba2V5XSA9IHZhbC50b01pbGxpcygpO1xuICAgICAgfSBlbHNlIGlmIChPYmplY3QuaGFzT3duKHZhbCwgJ19hcnJheScpICYmIEFycmF5LmlzQXJyYXkodmFsLl9hcnJheSkpIHtcbiAgICAgICAgY29uc3QgYXJyID0gdmFsLl9hcnJheS5tYXAoKGs6IHN0cmluZykgPT4gbm9ybWFsaXplRGF0YSh2YWxba10gfHwge30pKTtcbiAgICAgICAgcmVzdWx0W2tleV0gPSBhcnI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXN1bHRba2V5XSA9IG5vcm1hbGl6ZURhdGEodmFsKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0W2tleV0gPSB2YWw7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmZ1bmN0aW9uIGlzT2JqZWN0KGRhdGE6IGFueSk6IGJvb2xlYW4ge1xuICByZXR1cm4gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KGRhdGEpICYmIGRhdGEgIT09IG51bGw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDbXNQbHVnaW4ocm9vdENvbmZpZzogUm9vdENvbmZpZyk6IENNU1BsdWdpbiB7XG4gIGNvbnN0IHBsdWdpbnM6IFBsdWdpbltdID0gcm9vdENvbmZpZy5wbHVnaW5zIHx8IFtdO1xuICBjb25zdCBwbHVnaW4gPSBwbHVnaW5zLmZpbmQoKHBsdWdpbikgPT4gcGx1Z2luLm5hbWUgPT09ICdyb290LWNtcycpO1xuICBpZiAoIXBsdWdpbikge1xuICAgIHRocm93IG5ldyBFcnJvcignY291bGQgbm90IGZpbmQgcm9vdC1jbXMgcGx1Z2luIGNvbmZpZyBpbiByb290LmNvbmZpZy50cycpO1xuICB9XG4gIHJldHVybiBwbHVnaW4gYXMgQ01TUGx1Z2luO1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBc0JPLFNBQVMsT0FBTyxPQUErQztBQUNwRSxTQUFPLEVBQUMsR0FBRyxPQUFPLE1BQU0sU0FBUTtBQUNsQztB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
package/dist/plugin.js CHANGED
@@ -7,6 +7,42 @@ import cookieParser from "cookie-parser";
7
7
  import { applicationDefault, initializeApp } from "firebase-admin/app";
8
8
  import { getAuth } from "firebase-admin/auth";
9
9
  import sirv from "sirv";
10
+
11
+ // core/csv.ts
12
+ import { createRequire } from "node:module";
13
+ var require2 = createRequire(import.meta.url);
14
+ var createObjectCsvStringifier = require2("csv-writer").createObjectCsvStringifier;
15
+ function arrayToCsv(req) {
16
+ const headers = req.headers || [];
17
+ const rows = req.rows || [];
18
+ if (headers.length === 0 || rows.length === 0) {
19
+ return "";
20
+ }
21
+ const csvWriter = createObjectCsvStringifier({
22
+ header: headers.map((h) => ({ id: h, title: h }))
23
+ });
24
+ const csvHeader = csvWriter.getHeaderString() || "";
25
+ const csvRows = csvWriter.stringifyRecords(rows) || "";
26
+ return csvHeader + csvRows;
27
+ }
28
+
29
+ // core/api.ts
30
+ function api(server) {
31
+ server.use("/cms/api/csv.download", (req, res) => {
32
+ if (req.method !== "POST" || !String(req.get("content-type")).startsWith("application/json")) {
33
+ res.status(400).json({ success: false, error: "BAD_REQUEST" });
34
+ }
35
+ const body = req.body || {};
36
+ const headers = body.headers || [];
37
+ const rows = body.rows || [];
38
+ const csv = arrayToCsv({ headers, rows });
39
+ res.setHeader("Content-Type", "text/csv");
40
+ res.setHeader("Content-Disposition", 'attachment; filename="data.csv"');
41
+ res.status(200).end(csv);
42
+ });
43
+ }
44
+
45
+ // core/plugin.ts
10
46
  var __dirname = path.dirname(fileURLToPath(import.meta.url));
11
47
  var SESSION_COOKIE = "_rootjs_cms";
12
48
  function generateSecret() {
@@ -19,8 +55,8 @@ function generateSecret() {
19
55
  return result.join("");
20
56
  }
21
57
  function isExpired(decodedIdToken) {
22
- const ts = new Date().getTime() / 1e3;
23
- return ts - decodedIdToken.auth_time > 5 * 60;
58
+ const ts = Math.floor(new Date().getTime() / 1e3);
59
+ return ts >= decodedIdToken.exp;
24
60
  }
25
61
  function cmsPlugin(options) {
26
62
  const firebaseConfig = options.firebaseConfig;
@@ -183,11 +219,16 @@ function cmsPlugin(options) {
183
219
  next();
184
220
  return;
185
221
  }
222
+ if (req.originalUrl.startsWith("/cms/api")) {
223
+ res.status(401).json({ success: false, error: "NOT_AUTHORIZED" });
224
+ return;
225
+ }
186
226
  const params = new URLSearchParams({
187
227
  continue: req.originalUrl
188
228
  });
189
229
  res.redirect(`/cms/login?${params.toString()}`);
190
230
  });
231
+ api(server);
191
232
  server.use("/cms", async (req, res) => {
192
233
  try {
193
234
  const app2 = await getRenderer(req);
@@ -210,4 +251,4 @@ function fileExists(filepath) {
210
251
  export {
211
252
  cmsPlugin
212
253
  };
213
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vY29yZS9wbHVnaW4udHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCB7cHJvbWlzZXMgYXMgZnN9IGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHBhdGggZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCB7ZmlsZVVSTFRvUGF0aH0gZnJvbSAnbm9kZTp1cmwnO1xuXG5pbXBvcnQge1xuICBDb25maWd1cmVTZXJ2ZXJPcHRpb25zLFxuICBOZXh0RnVuY3Rpb24sXG4gIFBsdWdpbixcbiAgUmVxdWVzdCxcbiAgUmVzcG9uc2UsXG4gIFNlcnZlcixcbn0gZnJvbSAnQGJsaW5ray9yb290JztcbmltcG9ydCBib2R5UGFyc2VyIGZyb20gJ2JvZHktcGFyc2VyJztcbmltcG9ydCBjb29raWVQYXJzZXIgZnJvbSAnY29va2llLXBhcnNlcic7XG5pbXBvcnQge2FwcGxpY2F0aW9uRGVmYXVsdCwgaW5pdGlhbGl6ZUFwcH0gZnJvbSAnZmlyZWJhc2UtYWRtaW4vYXBwJztcbmltcG9ydCB7Z2V0QXV0aCwgRGVjb2RlZElkVG9rZW59IGZyb20gJ2ZpcmViYXNlLWFkbWluL2F1dGgnO1xuaW1wb3J0IHNpcnYgZnJvbSAnc2lydic7XG5cbmNvbnN0IF9fZGlybmFtZSA9IHBhdGguZGlybmFtZShmaWxlVVJMVG9QYXRoKGltcG9ydC5tZXRhLnVybCkpO1xuXG50eXBlIEFwcE1vZHVsZSA9IHR5cGVvZiBpbXBvcnQoJy4vYXBwLmpzJyk7XG5cbmNvbnN0IFNFU1NJT05fQ09PS0lFID0gJ19yb290anNfY21zJztcblxuZXhwb3J0IHR5cGUgQ01TVXNlciA9IERlY29kZWRJZFRva2VuO1xuXG5leHBvcnQgdHlwZSBDTVNQbHVnaW5PcHRpb25zID0ge1xuICAvKipcbiAgICogVGhlIElEIG9mIHRoZSBwcm9qZWN0LiBEYXRhIHdpbGwgYmUgc3RvcmVkIHVuZGVyIHRoZSBuYW1lc3BhY2VcbiAgICogYFByb2plY3RzLyR7aWR9YCBpbiBmaXJlc3RvcmUuXG4gICAqL1xuICBpZD86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIHByb2plY3QuIFVzZWQgaW4gdGhlIGhlYWRlciBvZiB0aGUgQ01TIHRvIGhlbHAgaWRlbnRpZnlcbiAgICogdGhlIHByb2plY3QuXG4gICAqL1xuICBuYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBGaXJlYmFzZSBjb25maWcgb2JqZWN0LCB3aGljaCBjYW4gYmUgb2J0YWluZWQgaW4gdGhlIEZpcmViYXNlIENvbnNvbGUgYnlcbiAgICogZ29pbmcgdG8gXCJQcm9qZWN0IFNldHRpbmdzXCIuXG4gICAqL1xuICBmaXJlYmFzZUNvbmZpZzoge1xuICAgIFtrZXk6IHN0cmluZ106IHN0cmluZztcbiAgICBhcGlLZXk6IHN0cmluZztcbiAgICBhdXRoRG9tYWluOiBzdHJpbmc7XG4gICAgcHJvamVjdElkOiBzdHJpbmc7XG4gICAgc3RvcmFnZUJ1Y2tldDogc3RyaW5nO1xuICAgIG1lc3NhZ2luZ1NlbmRlcklkOiBzdHJpbmc7XG4gICAgYXBwSWQ6IHN0cmluZztcbiAgfTtcblxuICAvKiogU2VjcmV0IHZhbHVlKHMpIHVzZWQgZm9yIHNpZ25pbmcgdGhlIHVzZXIgYXV0aGVudGljYXRpb24gY29va2llLiAqL1xuICBjb29raWVTZWNyZXQ/OiBzdHJpbmcgfCBzdHJpbmdbXTtcblxuICAvKiogRnVuY3Rpb24gY2FsbGVkIHRvIGNoZWNrIGlmIGEgdXNlciBzaG91bGQgaGF2ZSBhY2Nlc3MgdG8gdGhlIENNUy4gKi9cbiAgaXNVc2VyQXV0aG9yaXplZD86IChcbiAgICByZXE6IFJlcXVlc3QsXG4gICAgdXNlcjogQ01TVXNlclxuICApID0+IGJvb2xlYW4gfCBQcm9taXNlPGJvb2xlYW4+O1xuXG4gIC8qKlxuICAgKiBVUkwgdG8gR0NJIHNlcnZpY2UgZm9yIHRyYW5zZm9ybWluZyB1cGxvYWRlZCBHQ1MgaW1hZ2VzIHRvIGEgR29vZ2xlIEFwcFxuICAgKiBFbmdpbmUgSW1hZ2VzIEFQSSBzZXJ2aW5nIFVSTC4gRGVmYXVsdHMgdG8gXCJodHRwczovL2djaS5yb290anMuZGV2XCIuIFRvXG4gICAqIGRpc2FibGUsIHNldCB0aGlzIHZhbHVlIHRvIGBmYWxzZWAuXG4gICAqL1xuICBnY2k/OiBzdHJpbmcgfCBib29sZWFuO1xufTtcblxuZXhwb3J0IHR5cGUgQ01TUGx1Z2luID0gUGx1Z2luICYge1xuICBuYW1lOiAncm9vdC1jbXMnO1xuICBnZXRDb25maWc6ICgpID0+IENNU1BsdWdpbk9wdGlvbnM7XG59O1xuXG5mdW5jdGlvbiBnZW5lcmF0ZVNlY3JldCgpOiBzdHJpbmcge1xuICBjb25zdCByZXN1bHQgPSBbXTtcbiAgY29uc3QgY2hhcnMgPVxuICAgICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSc7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgMzY7IGkrKykge1xuICAgIGNvbnN0IHJhbmQgPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBjaGFycy5sZW5ndGgpO1xuICAgIHJlc3VsdC5wdXNoKGNoYXJzLmNoYXJBdChyYW5kKSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdC5qb2luKCcnKTtcbn1cblxuZnVuY3Rpb24gaXNFeHBpcmVkKGRlY29kZWRJZFRva2VuOiBEZWNvZGVkSWRUb2tlbikge1xuICBjb25zdCB0cyA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpIC8gMTAwMDtcbiAgcmV0dXJuIHRzIC0gZGVjb2RlZElkVG9rZW4uYXV0aF90aW1lID4gNSAqIDYwO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY21zUGx1Z2luKG9wdGlvbnM6IENNU1BsdWdpbk9wdGlvbnMpOiBDTVNQbHVnaW4ge1xuICBjb25zdCBmaXJlYmFzZUNvbmZpZyA9IG9wdGlvbnMuZmlyZWJhc2VDb25maWc7XG4gIGNvbnN0IGNvb2tpZVNlY3JldCA9IG9wdGlvbnMuY29va2llU2VjcmV0IHx8IGdlbmVyYXRlU2VjcmV0KCk7XG4gIGNvbnN0IGFwcCA9IGluaXRpYWxpemVBcHAoe1xuICAgIHByb2plY3RJZDogZmlyZWJhc2VDb25maWcucHJvamVjdElkLFxuICAgIGNyZWRlbnRpYWw6IGFwcGxpY2F0aW9uRGVmYXVsdCgpLFxuICB9KTtcbiAgY29uc3QgYXV0aCA9IGdldEF1dGgoYXBwKTtcblxuICAvKipcbiAgICogQ2hlY2tzIGlmIGxvZ2luIGlzIHJlcXVpcmVkIGZvciB0aGUgcmVxdWVzdC4gQ3VycmVudGx5IHJldHVybnMgYHRydWVgIGlmXG4gICAqIHRoZSBVUkwgcGF0aCBzdGFydHMgd2l0aCAvY21zIG9yIGlmID9wcmV2aWV3PXRydWUgaXMgaW4gdGhlIFVSTC5cbiAgICovXG4gIGZ1bmN0aW9uIGxvZ2luUmVxdWlyZWQocmVxOiBSZXF1ZXN0KTogYm9vbGVhbiB7XG4gICAgaWYgKHJlcS5vcmlnaW5hbFVybC5zdGFydHNXaXRoKCcvY21zJykpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBpZiAoU3RyaW5nKHJlcS5xdWVyeS5wcmV2aWV3KSA9PT0gJ3RydWUnKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIFZlcmlmaWVzIGEgbmV3IGxvZ2luIHJlcXVlc3QgZm9yIGEgdXNlci4gVGhlIHJlcXVlc3QgYm9keSBzaG91bGQgY29udGFpblxuICAgKiBhbiBpZFRva2VuLCB3aGljaCBpcyB2ZXJpZmllZCBvbiBwcm9kIHVzaW5nIEZpcmViYXNlIEFkbWluIGFuZCBJZGVudGl0eVxuICAgKiBUb29sa2l0LiBJZiBhIGBpc1VzZXJBdXRob3JpemVkKClgIGNvbmZpZyBpcyBzZXQsIHRoaXMgZnVuY3Rpb24gd2lsbCBhbHNvXG4gICAqIHZlcmlmeSB2aWEgdGhhdCBmdW5jdGlvbi4gUmV0dXJucyB0cnVlIGlmIHRoZSBsb2dpbiB2ZXJpZmljYXRpb24gc3VjY2VlZHMuXG4gICAqL1xuICBhc3luYyBmdW5jdGlvbiB2ZXJpZnlVc2VyTG9naW4ocmVxOiBSZXF1ZXN0KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgaWRUb2tlbiA9IHJlcS5ib2R5Py5pZFRva2VuO1xuICAgIGlmICghaWRUb2tlbikge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIE9uIGxvY2FsIGRldiwgc2ltcGx5IHZlcmlmeSB0aGF0IGFuIGlkVG9rZW4gaXMgc2V0LiBUaGUgaWRlbnRpdHkgdG9vbGtpdFxuICAgIC8vIHRoYXQgdmVyaWZpZXMgaWQgdG9rZW5zIHJlcXVpcmVzIGEgc2VydmljZSBhY2NvdW50LCB3aGljaCB3ZSB3YW50IHRvXG4gICAgLy8gYXZvaWQgaGF2aW5nIHRvIHNldCB1cCB3aGVuIHVzZXJzIGFyZSBkb2luZyBsb2NhbCBkZXZlbG9wbWVudC5cbiAgICAvLyBBdXRoZW50aWNhdGlvbiBpcyBzdGlsbCByZXF1aXJlZCBieSB0aGUgZnJvbnRlbmQgdXNpbmcgRmlyZWJhc2UgQXV0aCxcbiAgICAvLyB0aGlzIGp1c3QgYnlwYXNzZXMgdGhlIGluaXRpYWwgc2VydmVyIGNoZWNrIGJlZm9yZSB0aGUgdWkgaXMgcmVuZGVyZWQuXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAnZGV2ZWxvcG1lbnQnKSB7XG4gICAgICByZXR1cm4gQm9vbGVhbihpZFRva2VuKTtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgY29uc3Qgand0ID0gYXdhaXQgYXV0aC52ZXJpZnlJZFRva2VuKGlkVG9rZW4sIHRydWUpO1xuICAgICAgaWYgKGlzRXhwaXJlZChqd3QpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGlmICghand0LmVtYWlsIHx8ICFqd3QuZW1haWxfdmVyaWZpZWQpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgaWYgKG9wdGlvbnMuaXNVc2VyQXV0aG9yaXplZCkge1xuICAgICAgICByZXR1cm4gYXdhaXQgb3B0aW9ucy5pc1VzZXJBdXRob3JpemVkKHJlcSwgand0KTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ2ZhaWxlZCB0byB2ZXJpZnkgand0IHRva2VuJyk7XG4gICAgICBjb25zb2xlLmVycm9yKGVycik7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIC8vIFRPRE8oc3RldmVubGUpOiBkZWNpZGUgd2hldGhlciB3ZSB3YW50IHRvIGVuZm9yY2UgYGlzVXNlckF1dGhvcml6ZWQoKWAuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKipcbiAgICogVmVyaWZpZXMgd2hldGhlciB0aGUgY3VycmVudCB1c2VyIHNlc3Npb24gc2hvdWxkIGJlIGFsbG93ZWQgdG8gYWNjZXNzIHRoZVxuICAgKiBDTVMuIFJldHVybnMgdHJ1ZSBpZiBhY2Nlc3MgaXMgZ3JhbnRlZC5cbiAgICovXG4gIGFzeW5jIGZ1bmN0aW9uIHZlcmlmeVVzZXJTZXNzaW9uKHJlcTogUmVxdWVzdCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHNlc3Npb25Db29raWUgPSBTdHJpbmcocmVxLmNvb2tpZXNbU0VTU0lPTl9DT09LSUVdIHx8ICcnKTtcbiAgICBpZiAoIXNlc3Npb25Db29raWUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBPbiBsb2NhbCBkZXYsIHNpbXBseSB2ZXJpZnkgdGhhdCBhbiBzZXNzaW9uIGNvb2tpZSBpcyBzZXQuIFNlZSBub3RlXG4gICAgLy8gYWJvdmUgaW4gYHZlcmlmeVVzZXJMb2dpbigpYCBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdkZXZlbG9wbWVudCcpIHtcbiAgICAgIHJldHVybiBCb29sZWFuKHNlc3Npb25Db29raWUpO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBqd3QgPSBhd2FpdCBhdXRoLnZlcmlmeVNlc3Npb25Db29raWUoc2Vzc2lvbkNvb2tpZSwgdHJ1ZSk7XG4gICAgICBpZiAoaXNFeHBpcmVkKGp3dCkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgaWYgKCFqd3QuZW1haWwgfHwgIWp3dC5lbWFpbF92ZXJpZmllZCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBpZiAob3B0aW9ucy5pc1VzZXJBdXRob3JpemVkKSB7XG4gICAgICAgIHJldHVybiBhd2FpdCBvcHRpb25zLmlzVXNlckF1dGhvcml6ZWQocmVxLCBqd3QpO1xuICAgICAgfVxuICAgICAgLy8gVE9ETyhzdGV2ZW5sZSk6IGRlY2lkZSB3aGV0aGVyIHdlIHdhbnQgdG8gZW5mb3JjZSBgaXNVc2VyQXV0aG9yaXplZCgpYC5cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY29uc29sZS5lcnJvcignZmFpbGVkIHRvIHZlcmlmeSBqd3QgdG9rZW4nKTtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIG5hbWU6ICdyb290LWNtcycsXG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBjb25maWcgb3B0aW9ucyBwYXNzZWQgdG8gdGhlIHBsdWdpbi5cbiAgICAgKi9cbiAgICBnZXRDb25maWc6ICgpID0+IHtcbiAgICAgIHJldHVybiBvcHRpb25zO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBBIG1hcCBvZiBzc3IgZmlsZXMgdG8gaW5jbHVkZSB3aGVuIHJ1bm5pbmcgYHJvb3QgYnVpbGRgLlxuICAgICAqL1xuICAgIHNzcklucHV0OiAoKSA9PiAoe1xuICAgICAgY21zOiBwYXRoLnJlc29sdmUoX19kaXJuYW1lLCAnLi9hcHAuanMnKSxcbiAgICB9KSxcblxuICAgIC8qKlxuICAgICAqIEF0dGFjaGVzIENNUy1zcGVjaWZpYyBtaWRkbGV3YXJlIHRvIHRoZSBSb290LmpzIHNlcnZlci5cbiAgICAgKi9cbiAgICBjb25maWd1cmVTZXJ2ZXI6IGFzeW5jIChcbiAgICAgIHNlcnZlcjogU2VydmVyLFxuICAgICAgc2VydmVyT3B0aW9uczogQ29uZmlndXJlU2VydmVyT3B0aW9uc1xuICAgICkgPT4ge1xuICAgICAgc2VydmVyLnVzZShjb29raWVQYXJzZXIoY29va2llU2VjcmV0KSk7XG4gICAgICBzZXJ2ZXIudXNlKGJvZHlQYXJzZXIuanNvbigpKTtcblxuICAgICAgYXN5bmMgZnVuY3Rpb24gZ2V0UmVuZGVyZXIocmVxOiBSZXF1ZXN0KTogUHJvbWlzZTxBcHBNb2R1bGU+IHtcbiAgICAgICAgaWYgKHNlcnZlck9wdGlvbnMudHlwZSA9PT0gJ2RldicpIHtcbiAgICAgICAgICBjb25zdCBhcHBGaWxlUGF0aCA9IHBhdGgucmVzb2x2ZShfX2Rpcm5hbWUsICcuL2FwcC5qcycpO1xuICAgICAgICAgIGNvbnN0IGFwcCA9IChhd2FpdCByZXEudml0ZVNlcnZlciEuc3NyTG9hZE1vZHVsZShcbiAgICAgICAgICAgIGFwcEZpbGVQYXRoXG4gICAgICAgICAgKSkgYXMgQXBwTW9kdWxlO1xuICAgICAgICAgIHJldHVybiBhcHA7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBhcHBJbXBvcnRQYXRoID0gcGF0aC5yZXNvbHZlKFxuICAgICAgICAgIHJlcS5yb290Q29uZmlnIS5yb290RGlyLFxuICAgICAgICAgICdkaXN0L3NlcnZlci9jbXMuanMnXG4gICAgICAgICk7XG4gICAgICAgIGlmICghKGF3YWl0IGZpbGVFeGlzdHMoYXBwSW1wb3J0UGF0aCkpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgJ2Rpc3Qvc2VydmVyL2Ntcy5qcyBub3QgZm91bmQuIHJ1biBgcm9vdCBidWlsZGAgdG8gY3JlYXRlIGl0LidcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGFwcCA9IChhd2FpdCBpbXBvcnQoYXBwSW1wb3J0UGF0aCkpIGFzIEFwcE1vZHVsZTtcbiAgICAgICAgcmV0dXJuIGFwcDtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgc3RhdGljRGlyID0gcGF0aC5yZXNvbHZlKF9fZGlybmFtZSwgJ3VpJyk7XG4gICAgICBzZXJ2ZXIudXNlKCcvY21zL3N0YXRpYycsIHNpcnYoc3RhdGljRGlyLCB7ZGV2OiBmYWxzZX0pKTtcblxuICAgICAgLy8gTG9naW4gaGFuZGxlci5cbiAgICAgIHNlcnZlci51c2UoJy9jbXMvbG9naW4nLCBhc3luYyAocmVxOiBSZXF1ZXN0LCByZXM6IFJlc3BvbnNlKSA9PiB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICByZXEubWV0aG9kID09PSAnUFVUJyAmJlxuICAgICAgICAgIHJlcS5oZWFkZXJzWydjb250ZW50LXR5cGUnXSA9PT0gJ2FwcGxpY2F0aW9uL2pzb24nXG4gICAgICAgICkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBpc0F1dGhvcml6ZWQgPSBhd2FpdCB2ZXJpZnlVc2VyTG9naW4ocmVxKTtcbiAgICAgICAgICAgIGlmICghaXNBdXRob3JpemVkKSB7XG4gICAgICAgICAgICAgIHJlcy5zdGF0dXMoNDAxKS5qc29uKHtzdWNjZXNzOiBmYWxzZSwgZXJyb3I6ICdOT1RfQVVUSE9SSVpFRCd9KTtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBTZXQgc2Vzc2lvbiBleHBpcmF0aW9uIHRvIDUgZGF5cy5cbiAgICAgICAgICAgIGNvbnN0IGV4cGlyZXNJbiA9IDYwICogNjAgKiAyNCAqIDUgKiAxMDAwO1xuICAgICAgICAgICAgY29uc3QgaWRUb2tlbiA9IHJlcS5ib2R5LmlkVG9rZW4hO1xuXG4gICAgICAgICAgICBsZXQgc2Vzc2lvbkNvb2tpZTogc3RyaW5nO1xuICAgICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAnZGV2ZWxvcG1lbnQnKSB7XG4gICAgICAgICAgICAgIHNlc3Npb25Db29raWUgPSBpZFRva2VuO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgc2Vzc2lvbkNvb2tpZSA9IGF3YWl0IGF1dGguY3JlYXRlU2Vzc2lvbkNvb2tpZShpZFRva2VuLCB7XG4gICAgICAgICAgICAgICAgZXhwaXJlc0luLFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlcy5jb29raWUoU0VTU0lPTl9DT09LSUUsIHNlc3Npb25Db29raWUsIHtcbiAgICAgICAgICAgICAgbWF4QWdlOiBleHBpcmVzSW4sXG4gICAgICAgICAgICAgIGh0dHBPbmx5OiB0cnVlLFxuICAgICAgICAgICAgICBzZWN1cmU6IHRydWUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJlcy5qc29uKHtzdWNjZXNzOiB0cnVlfSk7XG4gICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XG4gICAgICAgICAgICBpZiAoZXJyLnN0YWNrKSB7XG4gICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyLnN0YWNrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlc1xuICAgICAgICAgICAgICAuc3RhdHVzKDUwMClcbiAgICAgICAgICAgICAgLmpzb24oe3N1Y2Nlc3M6IGZhbHNlLCBlcnJvcjogJ1VOS05PV05fU0VSVkVSX0VSUk9SJ30pO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IGFwcCA9IGF3YWl0IGdldFJlbmRlcmVyKHJlcSk7XG4gICAgICAgICAgYXBwLnJlbmRlclNpZ25JbihyZXEsIHJlcywgb3B0aW9ucyk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgICAgICBpZiAoZXJyLnN0YWNrKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGVyci5zdGFjayk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJlcy5zdGF0dXMoNTAwKS5zZW5kKCdVTktOT1dOIFNFUlZFUiBFUlJPUicpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgLy8gTG9nb3V0IGhhbmRsZXIuXG4gICAgICBzZXJ2ZXIudXNlKCcvY21zL2xvZ291dCcsIGFzeW5jIChyZXE6IFJlcXVlc3QsIHJlczogUmVzcG9uc2UpID0+IHtcbiAgICAgICAgcmVzLmNsZWFyQ29va2llKFNFU1NJT05fQ09PS0lFKTtcbiAgICAgICAgcmVzLnJlZGlyZWN0KCcvY21zL2xvZ2luJyk7XG4gICAgICB9KTtcblxuICAgICAgLy8gU2FmZWd1YXJkIHRvIHZlcmlmeSB1c2VyIGxvZ2luIGJlZm9yZSByZW5kZXJpbmcgYW55IENNUyBwYWdlLlxuICAgICAgc2VydmVyLnVzZShhc3luYyAocmVxOiBSZXF1ZXN0LCByZXM6IFJlc3BvbnNlLCBuZXh0OiBOZXh0RnVuY3Rpb24pID0+IHtcbiAgICAgICAgaWYgKCFsb2dpblJlcXVpcmVkKHJlcSkpIHtcbiAgICAgICAgICBuZXh0KCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHVzZXJJc0xvZ2dlZEluID0gYXdhaXQgdmVyaWZ5VXNlclNlc3Npb24ocmVxKTtcbiAgICAgICAgaWYgKHVzZXJJc0xvZ2dlZEluKSB7XG4gICAgICAgICAgbmV4dCgpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHtcbiAgICAgICAgICBjb250aW51ZTogcmVxLm9yaWdpbmFsVXJsLFxuICAgICAgICB9KTtcbiAgICAgICAgcmVzLnJlZGlyZWN0KGAvY21zL2xvZ2luPyR7cGFyYW1zLnRvU3RyaW5nKCl9YCk7XG4gICAgICB9KTtcblxuICAgICAgLy8gUmVuZGVyIHRoZSBDTVMgU1BBLlxuICAgICAgc2VydmVyLnVzZSgnL2NtcycsIGFzeW5jIChyZXE6IFJlcXVlc3QsIHJlczogUmVzcG9uc2UpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBhcHAgPSBhd2FpdCBnZXRSZW5kZXJlcihyZXEpO1xuICAgICAgICAgIGF3YWl0IGFwcC5yZW5kZXJBcHAocmVxLCByZXMsIHtcbiAgICAgICAgICAgIHJvb3RDb25maWc6IHJlcS5yb290Q29uZmlnLFxuICAgICAgICAgICAgY21zQ29uZmlnOiBvcHRpb25zLFxuICAgICAgICAgICAgZmlyZWJhc2VDb25maWc6IG9wdGlvbnMuZmlyZWJhc2VDb25maWcsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIC8vIFRPRE8oc3RldmVubGUpOiByZW5kZXIgYSBjdXN0b20gZXJyb3IgcGFnZS5cbiAgICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XG4gICAgICAgICAgcmVzLnN0YXR1cyg1MDApLnNlbmQoJ1VOS05PV04gU0VSVkVSIEVSUk9SJyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0sXG4gIH07XG59XG5cbmZ1bmN0aW9uIGZpbGVFeGlzdHMoZmlsZXBhdGg6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICByZXR1cm4gZnNcbiAgICAuYWNjZXNzKGZpbGVwYXRoKVxuICAgIC50aGVuKCgpID0+IHRydWUpXG4gICAgLmNhdGNoKCgpID0+IGZhbHNlKTtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7QUFBQSxTQUFRLFlBQVksVUFBUztBQUM3QixPQUFPLFVBQVU7QUFDakIsU0FBUSxxQkFBb0I7QUFVNUIsT0FBTyxnQkFBZ0I7QUFDdkIsT0FBTyxrQkFBa0I7QUFDekIsU0FBUSxvQkFBb0IscUJBQW9CO0FBQ2hELFNBQVEsZUFBOEI7QUFDdEMsT0FBTyxVQUFVO0FBRWpCLElBQU0sWUFBWSxLQUFLLFFBQVEsY0FBYyxZQUFZLEdBQUcsQ0FBQztBQUk3RCxJQUFNLGlCQUFpQjtBQXFEdkIsU0FBUyxpQkFBeUI7QUFD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
254
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vY29yZS9wbHVnaW4udHMiLCAiLi4vY29yZS9jc3YudHMiLCAiLi4vY29yZS9hcGkudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCB7cHJvbWlzZXMgYXMgZnN9IGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHBhdGggZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCB7ZmlsZVVSTFRvUGF0aH0gZnJvbSAnbm9kZTp1cmwnO1xuXG5pbXBvcnQge1xuICBDb25maWd1cmVTZXJ2ZXJPcHRpb25zLFxuICBOZXh0RnVuY3Rpb24sXG4gIFBsdWdpbixcbiAgUmVxdWVzdCxcbiAgUmVzcG9uc2UsXG4gIFNlcnZlcixcbn0gZnJvbSAnQGJsaW5ray9yb290JztcbmltcG9ydCBib2R5UGFyc2VyIGZyb20gJ2JvZHktcGFyc2VyJztcbmltcG9ydCBjb29raWVQYXJzZXIgZnJvbSAnY29va2llLXBhcnNlcic7XG5pbXBvcnQge2FwcGxpY2F0aW9uRGVmYXVsdCwgaW5pdGlhbGl6ZUFwcH0gZnJvbSAnZmlyZWJhc2UtYWRtaW4vYXBwJztcbmltcG9ydCB7Z2V0QXV0aCwgRGVjb2RlZElkVG9rZW59IGZyb20gJ2ZpcmViYXNlLWFkbWluL2F1dGgnO1xuaW1wb3J0IHNpcnYgZnJvbSAnc2lydic7XG5pbXBvcnQge2FwaX0gZnJvbSAnLi9hcGkuanMnO1xuXG5jb25zdCBfX2Rpcm5hbWUgPSBwYXRoLmRpcm5hbWUoZmlsZVVSTFRvUGF0aChpbXBvcnQubWV0YS51cmwpKTtcblxudHlwZSBBcHBNb2R1bGUgPSB0eXBlb2YgaW1wb3J0KCcuL2FwcC5qcycpO1xuXG5jb25zdCBTRVNTSU9OX0NPT0tJRSA9ICdfcm9vdGpzX2Ntcyc7XG5cbmV4cG9ydCB0eXBlIENNU1VzZXIgPSBEZWNvZGVkSWRUb2tlbjtcblxuZXhwb3J0IHR5cGUgQ01TUGx1Z2luT3B0aW9ucyA9IHtcbiAgLyoqXG4gICAqIFRoZSBJRCBvZiB0aGUgcHJvamVjdC4gRGF0YSB3aWxsIGJlIHN0b3JlZCB1bmRlciB0aGUgbmFtZXNwYWNlXG4gICAqIGBQcm9qZWN0cy8ke2lkfWAgaW4gZmlyZXN0b3JlLlxuICAgKi9cbiAgaWQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBwcm9qZWN0LiBVc2VkIGluIHRoZSBoZWFkZXIgb2YgdGhlIENNUyB0byBoZWxwIGlkZW50aWZ5XG4gICAqIHRoZSBwcm9qZWN0LlxuICAgKi9cbiAgbmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogRmlyZWJhc2UgY29uZmlnIG9iamVjdCwgd2hpY2ggY2FuIGJlIG9idGFpbmVkIGluIHRoZSBGaXJlYmFzZSBDb25zb2xlIGJ5XG4gICAqIGdvaW5nIHRvIFwiUHJvamVjdCBTZXR0aW5nc1wiLlxuICAgKi9cbiAgZmlyZWJhc2VDb25maWc6IHtcbiAgICBba2V5OiBzdHJpbmddOiBzdHJpbmc7XG4gICAgYXBpS2V5OiBzdHJpbmc7XG4gICAgYXV0aERvbWFpbjogc3RyaW5nO1xuICAgIHByb2plY3RJZDogc3RyaW5nO1xuICAgIHN0b3JhZ2VCdWNrZXQ6IHN0cmluZztcbiAgICBtZXNzYWdpbmdTZW5kZXJJZDogc3RyaW5nO1xuICAgIGFwcElkOiBzdHJpbmc7XG4gIH07XG5cbiAgLyoqIFNlY3JldCB2YWx1ZShzKSB1c2VkIGZvciBzaWduaW5nIHRoZSB1c2VyIGF1dGhlbnRpY2F0aW9uIGNvb2tpZS4gKi9cbiAgY29va2llU2VjcmV0Pzogc3RyaW5nIHwgc3RyaW5nW107XG5cbiAgLyoqIEZ1bmN0aW9uIGNhbGxlZCB0byBjaGVjayBpZiBhIHVzZXIgc2hvdWxkIGhhdmUgYWNjZXNzIHRvIHRoZSBDTVMuICovXG4gIGlzVXNlckF1dGhvcml6ZWQ/OiAoXG4gICAgcmVxOiBSZXF1ZXN0LFxuICAgIHVzZXI6IENNU1VzZXJcbiAgKSA9PiBib29sZWFuIHwgUHJvbWlzZTxib29sZWFuPjtcblxuICAvKipcbiAgICogVVJMIHRvIEdDSSBzZXJ2aWNlIGZvciB0cmFuc2Zvcm1pbmcgdXBsb2FkZWQgR0NTIGltYWdlcyB0byBhIEdvb2dsZSBBcHBcbiAgICogRW5naW5lIEltYWdlcyBBUEkgc2VydmluZyBVUkwuIERlZmF1bHRzIHRvIFwiaHR0cHM6Ly9nY2kucm9vdGpzLmRldlwiLiBUb1xuICAgKiBkaXNhYmxlLCBzZXQgdGhpcyB2YWx1ZSB0byBgZmFsc2VgLlxuICAgKi9cbiAgZ2NpPzogc3RyaW5nIHwgYm9vbGVhbjtcbn07XG5cbmV4cG9ydCB0eXBlIENNU1BsdWdpbiA9IFBsdWdpbiAmIHtcbiAgbmFtZTogJ3Jvb3QtY21zJztcbiAgZ2V0Q29uZmlnOiAoKSA9PiBDTVNQbHVnaW5PcHRpb25zO1xufTtcblxuZnVuY3Rpb24gZ2VuZXJhdGVTZWNyZXQoKTogc3RyaW5nIHtcbiAgY29uc3QgcmVzdWx0ID0gW107XG4gIGNvbnN0IGNoYXJzID1cbiAgICAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODknO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IDM2OyBpKyspIHtcbiAgICBjb25zdCByYW5kID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogY2hhcnMubGVuZ3RoKTtcbiAgICByZXN1bHQucHVzaChjaGFycy5jaGFyQXQocmFuZCkpO1xuICB9XG4gIHJldHVybiByZXN1bHQuam9pbignJyk7XG59XG5cbmZ1bmN0aW9uIGlzRXhwaXJlZChkZWNvZGVkSWRUb2tlbjogRGVjb2RlZElkVG9rZW4pIHtcbiAgY29uc3QgdHMgPSBNYXRoLmZsb29yKG5ldyBEYXRlKCkuZ2V0VGltZSgpIC8gMTAwMCk7XG4gIHJldHVybiB0cyA+PSBkZWNvZGVkSWRUb2tlbi5leHA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjbXNQbHVnaW4ob3B0aW9uczogQ01TUGx1Z2luT3B0aW9ucyk6IENNU1BsdWdpbiB7XG4gIGNvbnN0IGZpcmViYXNlQ29uZmlnID0gb3B0aW9ucy5maXJlYmFzZUNvbmZpZztcbiAgY29uc3QgY29va2llU2VjcmV0ID0gb3B0aW9ucy5jb29raWVTZWNyZXQgfHwgZ2VuZXJhdGVTZWNyZXQoKTtcbiAgY29uc3QgYXBwID0gaW5pdGlhbGl6ZUFwcCh7XG4gICAgcHJvamVjdElkOiBmaXJlYmFzZUNvbmZpZy5wcm9qZWN0SWQsXG4gICAgY3JlZGVudGlhbDogYXBwbGljYXRpb25EZWZhdWx0KCksXG4gIH0pO1xuICBjb25zdCBhdXRoID0gZ2V0QXV0aChhcHApO1xuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgbG9naW4gaXMgcmVxdWlyZWQgZm9yIHRoZSByZXF1ZXN0LiBDdXJyZW50bHkgcmV0dXJucyBgdHJ1ZWAgaWZcbiAgICogdGhlIFVSTCBwYXRoIHN0YXJ0cyB3aXRoIC9jbXMgb3IgaWYgP3ByZXZpZXc9dHJ1ZSBpcyBpbiB0aGUgVVJMLlxuICAgKi9cbiAgZnVuY3Rpb24gbG9naW5SZXF1aXJlZChyZXE6IFJlcXVlc3QpOiBib29sZWFuIHtcbiAgICBpZiAocmVxLm9yaWdpbmFsVXJsLnN0YXJ0c1dpdGgoJy9jbXMnKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGlmIChTdHJpbmcocmVxLnF1ZXJ5LnByZXZpZXcpID09PSAndHJ1ZScpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogVmVyaWZpZXMgYSBuZXcgbG9naW4gcmVxdWVzdCBmb3IgYSB1c2VyLiBUaGUgcmVxdWVzdCBib2R5IHNob3VsZCBjb250YWluXG4gICAqIGFuIGlkVG9rZW4sIHdoaWNoIGlzIHZlcmlmaWVkIG9uIHByb2QgdXNpbmcgRmlyZWJhc2UgQWRtaW4gYW5kIElkZW50aXR5XG4gICAqIFRvb2xraXQuIElmIGEgYGlzVXNlckF1dGhvcml6ZWQoKWAgY29uZmlnIGlzIHNldCwgdGhpcyBmdW5jdGlvbiB3aWxsIGFsc29cbiAgICogdmVyaWZ5IHZpYSB0aGF0IGZ1bmN0aW9uLiBSZXR1cm5zIHRydWUgaWYgdGhlIGxvZ2luIHZlcmlmaWNhdGlvbiBzdWNjZWVkcy5cbiAgICovXG4gIGFzeW5jIGZ1bmN0aW9uIHZlcmlmeVVzZXJMb2dpbihyZXE6IFJlcXVlc3QpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCBpZFRva2VuID0gcmVxLmJvZHk/LmlkVG9rZW47XG4gICAgaWYgKCFpZFRva2VuKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gT24gbG9jYWwgZGV2LCBzaW1wbHkgdmVyaWZ5IHRoYXQgYW4gaWRUb2tlbiBpcyBzZXQuIFRoZSBpZGVudGl0eSB0b29sa2l0XG4gICAgLy8gdGhhdCB2ZXJpZmllcyBpZCB0b2tlbnMgcmVxdWlyZXMgYSBzZXJ2aWNlIGFjY291bnQsIHdoaWNoIHdlIHdhbnQgdG9cbiAgICAvLyBhdm9pZCBoYXZpbmcgdG8gc2V0IHVwIHdoZW4gdXNlcnMgYXJlIGRvaW5nIGxvY2FsIGRldmVsb3BtZW50LlxuICAgIC8vIEF1dGhlbnRpY2F0aW9uIGlzIHN0aWxsIHJlcXVpcmVkIGJ5IHRoZSBmcm9udGVuZCB1c2luZyBGaXJlYmFzZSBBdXRoLFxuICAgIC8vIHRoaXMganVzdCBieXBhc3NlcyB0aGUgaW5pdGlhbCBzZXJ2ZXIgY2hlY2sgYmVmb3JlIHRoZSB1aSBpcyByZW5kZXJlZC5cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdkZXZlbG9wbWVudCcpIHtcbiAgICAgIHJldHVybiBCb29sZWFuKGlkVG9rZW4pO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBqd3QgPSBhd2FpdCBhdXRoLnZlcmlmeUlkVG9rZW4oaWRUb2tlbiwgdHJ1ZSk7XG4gICAgICBpZiAoaXNFeHBpcmVkKGp3dCkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgaWYgKCFqd3QuZW1haWwgfHwgIWp3dC5lbWFpbF92ZXJpZmllZCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBpZiAob3B0aW9ucy5pc1VzZXJBdXRob3JpemVkKSB7XG4gICAgICAgIHJldHVybiBhd2FpdCBvcHRpb25zLmlzVXNlckF1dGhvcml6ZWQocmVxLCBqd3QpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY29uc29sZS5lcnJvcignZmFpbGVkIHRvIHZlcmlmeSBqd3QgdG9rZW4nKTtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgLy8gVE9ETyhzdGV2ZW5sZSk6IGRlY2lkZSB3aGV0aGVyIHdlIHdhbnQgdG8gZW5mb3JjZSBgaXNVc2VyQXV0aG9yaXplZCgpYC5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWZXJpZmllcyB3aGV0aGVyIHRoZSBjdXJyZW50IHVzZXIgc2Vzc2lvbiBzaG91bGQgYmUgYWxsb3dlZCB0byBhY2Nlc3MgdGhlXG4gICAqIENNUy4gUmV0dXJucyB0cnVlIGlmIGFjY2VzcyBpcyBncmFudGVkLlxuICAgKi9cbiAgYXN5bmMgZnVuY3Rpb24gdmVyaWZ5VXNlclNlc3Npb24ocmVxOiBSZXF1ZXN0KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3Qgc2Vzc2lvbkNvb2tpZSA9IFN0cmluZyhyZXEuY29va2llc1tTRVNTSU9OX0NPT0tJRV0gfHwgJycpO1xuICAgIGlmICghc2Vzc2lvbkNvb2tpZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIE9uIGxvY2FsIGRldiwgc2ltcGx5IHZlcmlmeSB0aGF0IGFuIHNlc3Npb24gY29va2llIGlzIHNldC4gU2VlIG5vdGVcbiAgICAvLyBhYm92ZSBpbiBgdmVyaWZ5VXNlckxvZ2luKClgIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ2RldmVsb3BtZW50Jykge1xuICAgICAgcmV0dXJuIEJvb2xlYW4oc2Vzc2lvbkNvb2tpZSk7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGp3dCA9IGF3YWl0IGF1dGgudmVyaWZ5U2Vzc2lvbkNvb2tpZShzZXNzaW9uQ29va2llLCB0cnVlKTtcbiAgICAgIGlmIChpc0V4cGlyZWQoand0KSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBpZiAoIWp3dC5lbWFpbCB8fCAhand0LmVtYWlsX3ZlcmlmaWVkKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGlmIChvcHRpb25zLmlzVXNlckF1dGhvcml6ZWQpIHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IG9wdGlvbnMuaXNVc2VyQXV0aG9yaXplZChyZXEsIGp3dCk7XG4gICAgICB9XG4gICAgICAvLyBUT0RPKHN0ZXZlbmxlKTogZGVjaWRlIHdoZXRoZXIgd2Ugd2FudCB0byBlbmZvcmNlIGBpc1VzZXJBdXRob3JpemVkKClgLlxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdmYWlsZWQgdG8gdmVyaWZ5IGp3dCB0b2tlbicpO1xuICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgbmFtZTogJ3Jvb3QtY21zJyxcblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGNvbmZpZyBvcHRpb25zIHBhc3NlZCB0byB0aGUgcGx1Z2luLlxuICAgICAqL1xuICAgIGdldENvbmZpZzogKCkgPT4ge1xuICAgICAgcmV0dXJuIG9wdGlvbnM7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEEgbWFwIG9mIHNzciBmaWxlcyB0byBpbmNsdWRlIHdoZW4gcnVubmluZyBgcm9vdCBidWlsZGAuXG4gICAgICovXG4gICAgc3NySW5wdXQ6ICgpID0+ICh7XG4gICAgICBjbXM6IHBhdGgucmVzb2x2ZShfX2Rpcm5hbWUsICcuL2FwcC5qcycpLFxuICAgIH0pLFxuXG4gICAgLyoqXG4gICAgICogQXR0YWNoZXMgQ01TLXNwZWNpZmljIG1pZGRsZXdhcmUgdG8gdGhlIFJvb3QuanMgc2VydmVyLlxuICAgICAqL1xuICAgIGNvbmZpZ3VyZVNlcnZlcjogYXN5bmMgKFxuICAgICAgc2VydmVyOiBTZXJ2ZXIsXG4gICAgICBzZXJ2ZXJPcHRpb25zOiBDb25maWd1cmVTZXJ2ZXJPcHRpb25zXG4gICAgKSA9PiB7XG4gICAgICBzZXJ2ZXIudXNlKGNvb2tpZVBhcnNlcihjb29raWVTZWNyZXQpKTtcbiAgICAgIHNlcnZlci51c2UoYm9keVBhcnNlci5qc29uKCkpO1xuXG4gICAgICBhc3luYyBmdW5jdGlvbiBnZXRSZW5kZXJlcihyZXE6IFJlcXVlc3QpOiBQcm9taXNlPEFwcE1vZHVsZT4ge1xuICAgICAgICBpZiAoc2VydmVyT3B0aW9ucy50eXBlID09PSAnZGV2Jykge1xuICAgICAgICAgIGNvbnN0IGFwcEZpbGVQYXRoID0gcGF0aC5yZXNvbHZlKF9fZGlybmFtZSwgJy4vYXBwLmpzJyk7XG4gICAgICAgICAgY29uc3QgYXBwID0gKGF3YWl0IHJlcS52aXRlU2VydmVyIS5zc3JMb2FkTW9kdWxlKFxuICAgICAgICAgICAgYXBwRmlsZVBhdGhcbiAgICAgICAgICApKSBhcyBBcHBNb2R1bGU7XG4gICAgICAgICAgcmV0dXJuIGFwcDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGFwcEltcG9ydFBhdGggPSBwYXRoLnJlc29sdmUoXG4gICAgICAgICAgcmVxLnJvb3RDb25maWchLnJvb3REaXIsXG4gICAgICAgICAgJ2Rpc3Qvc2VydmVyL2Ntcy5qcydcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKCEoYXdhaXQgZmlsZUV4aXN0cyhhcHBJbXBvcnRQYXRoKSkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAnZGlzdC9zZXJ2ZXIvY21zLmpzIG5vdCBmb3VuZC4gcnVuIGByb290IGJ1aWxkYCB0byBjcmVhdGUgaXQuJ1xuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYXBwID0gKGF3YWl0IGltcG9ydChhcHBJbXBvcnRQYXRoKSkgYXMgQXBwTW9kdWxlO1xuICAgICAgICByZXR1cm4gYXBwO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBzdGF0aWNEaXIgPSBwYXRoLnJlc29sdmUoX19kaXJuYW1lLCAndWknKTtcbiAgICAgIHNlcnZlci51c2UoJy9jbXMvc3RhdGljJywgc2lydihzdGF0aWNEaXIsIHtkZXY6IGZhbHNlfSkpO1xuXG4gICAgICAvLyBMb2dpbiBoYW5kbGVyLlxuICAgICAgc2VydmVyLnVzZSgnL2Ntcy9sb2dpbicsIGFzeW5jIChyZXE6IFJlcXVlc3QsIHJlczogUmVzcG9uc2UpID0+IHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHJlcS5tZXRob2QgPT09ICdQVVQnICYmXG4gICAgICAgICAgcmVxLmhlYWRlcnNbJ2NvbnRlbnQtdHlwZSddID09PSAnYXBwbGljYXRpb24vanNvbidcbiAgICAgICAgKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IGlzQXV0aG9yaXplZCA9IGF3YWl0IHZlcmlmeVVzZXJMb2dpbihyZXEpO1xuICAgICAgICAgICAgaWYgKCFpc0F1dGhvcml6ZWQpIHtcbiAgICAgICAgICAgICAgcmVzLnN0YXR1cyg0MDEpLmpzb24oe3N1Y2Nlc3M6IGZhbHNlLCBlcnJvcjogJ05PVF9BVVRIT1JJWkVEJ30pO1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIFNldCBzZXNzaW9uIGV4cGlyYXRpb24gdG8gNSBkYXlzLlxuICAgICAgICAgICAgY29uc3QgZXhwaXJlc0luID0gNjAgKiA2MCAqIDI0ICogNSAqIDEwMDA7XG4gICAgICAgICAgICBjb25zdCBpZFRva2VuID0gcmVxLmJvZHkuaWRUb2tlbiE7XG5cbiAgICAgICAgICAgIGxldCBzZXNzaW9uQ29va2llOiBzdHJpbmc7XG4gICAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdkZXZlbG9wbWVudCcpIHtcbiAgICAgICAgICAgICAgc2Vzc2lvbkNvb2tpZSA9IGlkVG9rZW47XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBzZXNzaW9uQ29va2llID0gYXdhaXQgYXV0aC5jcmVhdGVTZXNzaW9uQ29va2llKGlkVG9rZW4sIHtcbiAgICAgICAgICAgICAgICBleHBpcmVzSW4sXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzLmNvb2tpZShTRVNTSU9OX0NPT0tJRSwgc2Vzc2lvbkNvb2tpZSwge1xuICAgICAgICAgICAgICBtYXhBZ2U6IGV4cGlyZXNJbixcbiAgICAgICAgICAgICAgaHR0cE9ubHk6IHRydWUsXG4gICAgICAgICAgICAgIHNlY3VyZTogdHJ1ZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmVzLmpzb24oe3N1Y2Nlc3M6IHRydWV9KTtcbiAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgIGlmIChlcnIuc3RhY2spIHtcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnIuc3RhY2spO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzXG4gICAgICAgICAgICAgIC5zdGF0dXMoNTAwKVxuICAgICAgICAgICAgICAuanNvbih7c3VjY2VzczogZmFsc2UsIGVycm9yOiAnVU5LTk9XTl9TRVJWRVJfRVJST1InfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgYXBwID0gYXdhaXQgZ2V0UmVuZGVyZXIocmVxKTtcbiAgICAgICAgICBhcHAucmVuZGVyU2lnbkluKHJlcSwgcmVzLCBvcHRpb25zKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgICAgIGlmIChlcnIuc3RhY2spIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyLnN0YWNrKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmVzLnN0YXR1cyg1MDApLnNlbmQoJ1VOS05PV04gU0VSVkVSIEVSUk9SJyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICAvLyBMb2dvdXQgaGFuZGxlci5cbiAgICAgIHNlcnZlci51c2UoJy9jbXMvbG9nb3V0JywgYXN5bmMgKHJlcTogUmVxdWVzdCwgcmVzOiBSZXNwb25zZSkgPT4ge1xuICAgICAgICByZXMuY2xlYXJDb29raWUoU0VTU0lPTl9DT09LSUUpO1xuICAgICAgICByZXMucmVkaXJlY3QoJy9jbXMvbG9naW4nKTtcbiAgICAgIH0pO1xuXG4gICAgICAvLyBTYWZlZ3VhcmQgdG8gdmVyaWZ5IHVzZXIgbG9naW4gYmVmb3JlIHJlbmRlcmluZyBhbnkgQ01TIHBhZ2UuXG4gICAgICBzZXJ2ZXIudXNlKGFzeW5jIChyZXE6IFJlcXVlc3QsIHJlczogUmVzcG9uc2UsIG5leHQ6IE5leHRGdW5jdGlvbikgPT4ge1xuICAgICAgICBpZiAoIWxvZ2luUmVxdWlyZWQocmVxKSkge1xuICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdXNlcklzTG9nZ2VkSW4gPSBhd2FpdCB2ZXJpZnlVc2VyU2Vzc2lvbihyZXEpO1xuICAgICAgICBpZiAodXNlcklzTG9nZ2VkSW4pIHtcbiAgICAgICAgICBuZXh0KCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyZXEub3JpZ2luYWxVcmwuc3RhcnRzV2l0aCgnL2Ntcy9hcGknKSkge1xuICAgICAgICAgIHJlcy5zdGF0dXMoNDAxKS5qc29uKHtzdWNjZXNzOiBmYWxzZSwgZXJyb3I6ICdOT1RfQVVUSE9SSVpFRCd9KTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcyh7XG4gICAgICAgICAgY29udGludWU6IHJlcS5vcmlnaW5hbFVybCxcbiAgICAgICAgfSk7XG4gICAgICAgIHJlcy5yZWRpcmVjdChgL2Ntcy9sb2dpbj8ke3BhcmFtcy50b1N0cmluZygpfWApO1xuICAgICAgfSk7XG5cbiAgICAgIC8vIFJlZ2lzdGVyIEFQSSBoYW5kbGVycy5cbiAgICAgIGFwaShzZXJ2ZXIpO1xuXG4gICAgICAvLyBSZW5kZXIgdGhlIENNUyBTUEEuXG4gICAgICBzZXJ2ZXIudXNlKCcvY21zJywgYXN5bmMgKHJlcTogUmVxdWVzdCwgcmVzOiBSZXNwb25zZSkgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IGFwcCA9IGF3YWl0IGdldFJlbmRlcmVyKHJlcSk7XG4gICAgICAgICAgYXdhaXQgYXBwLnJlbmRlckFwcChyZXEsIHJlcywge1xuICAgICAgICAgICAgcm9vdENvbmZpZzogcmVxLnJvb3RDb25maWcsXG4gICAgICAgICAgICBjbXNDb25maWc6IG9wdGlvbnMsXG4gICAgICAgICAgICBmaXJlYmFzZUNvbmZpZzogb3B0aW9ucy5maXJlYmFzZUNvbmZpZyxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgLy8gVE9ETyhzdGV2ZW5sZSk6IHJlbmRlciBhIGN1c3RvbSBlcnJvciBwYWdlLlxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgICAgICByZXMuc3RhdHVzKDUwMCkuc2VuZCgnVU5LTk9XTiBTRVJWRVIgRVJST1InKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gZmlsZUV4aXN0cyhmaWxlcGF0aDogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gIHJldHVybiBmc1xuICAgIC5hY2Nlc3MoZmlsZXBhdGgpXG4gICAgLnRoZW4oKCkgPT4gdHJ1ZSlcbiAgICAuY2F0Y2goKCkgPT4gZmFsc2UpO1xufVxuIiwgImltcG9ydCB7Y3JlYXRlUmVxdWlyZX0gZnJvbSAnbm9kZTptb2R1bGUnO1xuY29uc3QgcmVxdWlyZSA9IGNyZWF0ZVJlcXVpcmUoaW1wb3J0Lm1ldGEudXJsKTtcblxuLy8gTk9URShzdGV2ZW5sZSk6IHRoZSBjc3Ytd3JpdGVyIHBhY2thZ2UgaGFzIG1pc2NvbmZpZ3VyZWQgXCJ0eXBlc1wiIHNvIGByZXF1aXJlYFxuLy8gaXMgbmVlZGVkIGhlcmUuXG5jb25zdCBjcmVhdGVPYmplY3RDc3ZTdHJpbmdpZmllciA9XG4gIHJlcXVpcmUoJ2Nzdi13cml0ZXInKS5jcmVhdGVPYmplY3RDc3ZTdHJpbmdpZmllcjtcbi8vIGltcG9ydCB0eXBlIHtjcmVhdGVPYmplY3RDc3ZTdHJpbmdpZmllcn0gZnJvbSAnY3N2LXdyaXRlcic7XG5cbmV4cG9ydCBmdW5jdGlvbiBhcnJheVRvQ3N2KHJlcToge1xuICBoZWFkZXJzOiBzdHJpbmdbXTtcbiAgcm93czogQXJyYXk8UmVjb3JkPHN0cmluZywgYW55Pj47XG59KTogc3RyaW5nIHtcbiAgY29uc3QgaGVhZGVycyA9IHJlcS5oZWFkZXJzIHx8IFtdO1xuICBjb25zdCByb3dzID0gcmVxLnJvd3MgfHwgW107XG4gIGlmIChoZWFkZXJzLmxlbmd0aCA9PT0gMCB8fCByb3dzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIGNvbnN0IGNzdldyaXRlciA9IGNyZWF0ZU9iamVjdENzdlN0cmluZ2lmaWVyKHtcbiAgICBoZWFkZXI6IGhlYWRlcnMubWFwKChoKSA9PiAoe2lkOiBoLCB0aXRsZTogaH0pKSxcbiAgfSk7XG4gIGNvbnN0IGNzdkhlYWRlciA9IGNzdldyaXRlci5nZXRIZWFkZXJTdHJpbmcoKSB8fCAnJztcbiAgY29uc3QgY3N2Um93cyA9IGNzdldyaXRlci5zdHJpbmdpZnlSZWNvcmRzKHJvd3MpIHx8ICcnO1xuICByZXR1cm4gY3N2SGVhZGVyICsgY3N2Um93cztcbn1cbiIsICJpbXBvcnQge1NlcnZlcn0gZnJvbSAnQGJsaW5ray9yb290JztcbmltcG9ydCB7YXJyYXlUb0Nzdn0gZnJvbSAnLi9jc3YuanMnO1xuXG4vKipcbiAqIFJlZ2lzdGVycyBBUEkgbWlkZGxld2FyZSBoYW5kbGVycy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFwaShzZXJ2ZXI6IFNlcnZlcikge1xuICBzZXJ2ZXIudXNlKCcvY21zL2FwaS9jc3YuZG93bmxvYWQnLCAocmVxLCByZXMpID0+IHtcbiAgICBpZiAoXG4gICAgICByZXEubWV0aG9kICE9PSAnUE9TVCcgfHxcbiAgICAgICFTdHJpbmcocmVxLmdldCgnY29udGVudC10eXBlJykpLnN0YXJ0c1dpdGgoJ2FwcGxpY2F0aW9uL2pzb24nKVxuICAgICkge1xuICAgICAgcmVzLnN0YXR1cyg0MDApLmpzb24oe3N1Y2Nlc3M6IGZhbHNlLCBlcnJvcjogJ0JBRF9SRVFVRVNUJ30pO1xuICAgIH1cblxuICAgIGNvbnN0IGJvZHkgPSByZXEuYm9keSB8fCB7fTtcbiAgICBjb25zdCBoZWFkZXJzID0gYm9keS5oZWFkZXJzIHx8IFtdO1xuICAgIGNvbnN0IHJvd3MgPSBib2R5LnJvd3MgfHwgW107XG4gICAgY29uc3QgY3N2ID0gYXJyYXlUb0Nzdih7aGVhZGVycywgcm93c30pO1xuICAgIHJlcy5zZXRIZWFkZXIoJ0NvbnRlbnQtVHlwZScsICd0ZXh0L2NzdicpO1xuICAgIHJlcy5zZXRIZWFkZXIoJ0NvbnRlbnQtRGlzcG9zaXRpb24nLCAnYXR0YWNobWVudDsgZmlsZW5hbWU9XCJkYXRhLmNzdlwiJyk7XG4gICAgcmVzLnN0YXR1cygyMDApLmVuZChjc3YpO1xuICB9KTtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7QUFBQSxTQUFRLFlBQVksVUFBUztBQUM3QixPQUFPLFVBQVU7QUFDakIsU0FBUSxxQkFBb0I7QUFVNUIsT0FBTyxnQkFBZ0I7QUFDdkIsT0FBTyxrQkFBa0I7QUFDekIsU0FBUSxvQkFBb0IscUJBQW9CO0FBQ2hELFNBQVEsZUFBOEI7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
package/dist/project.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { S as Schema } from './schema-c9eba7cf.js';
1
+ import { S as Schema } from './schema-ee98b607.js';
2
2
  import 'preact';
3
3
 
4
4
  /**
@@ -47,16 +47,19 @@ type SelectField = CommonFieldProps & {
47
47
  value: string;
48
48
  label?: string;
49
49
  }> | string[];
50
+ translate?: boolean;
50
51
  };
51
52
  declare function select(field: Omit<SelectField, 'type'>): SelectField;
52
53
  type MultiSelectField = Omit<SelectField, 'type'> & {
53
54
  type: 'multiselect';
54
55
  /** Set to `true` to allow users to create arbitrary values. */
55
56
  creatable?: boolean;
57
+ translate?: boolean;
56
58
  };
57
59
  declare function multiselect(field: Omit<MultiSelectField, 'type'>): MultiSelectField;
58
60
  type ImageField = CommonFieldProps & {
59
61
  type: 'image';
62
+ translate?: boolean;
60
63
  };
61
64
  declare function image(field: Omit<ImageField, 'type'>): ImageField;
62
65
  type FileField = CommonFieldProps & {
@@ -89,6 +92,10 @@ type ArrayField = CommonFieldProps & {
89
92
  */
90
93
  preview?: string | string[];
91
94
  of: ObjectLikeField;
95
+ /**
96
+ * Label to use for the "add item" button. Defaults to `Add`.
97
+ */
98
+ buttonLabel?: string;
92
99
  };
93
100
  declare function array(field: Omit<ArrayField, 'type'>): ArrayField;
94
101
  type OneOfField = CommonFieldProps & {
@@ -117,7 +117,7 @@ body.menu\:open {
117
117
  .signin__card {
118
118
  background: #FFFFFF;
119
119
  border-radius: 12px;
120
- width: 400px;
120
+ width: 380px;
121
121
  display: flex;
122
122
  flex-direction: column;
123
123
  align-items: center;
@@ -134,9 +134,16 @@ body.menu\:open {
134
134
  gap: 8px;
135
135
  }
136
136
  .signin__card__header__icon {
137
- padding: 8px;
138
- border: 2px solid black;
137
+ padding: 12px;
138
+ border: 4px solid black;
139
139
  border-radius: 50%;
140
+ display: flex;
141
+ align-items: center;
142
+ justify-content: center;
143
+ }
144
+ .signin__card__header__icon svg {
145
+ display: block;
146
+ margin-top: -6px;
140
147
  }
141
148
  .signin__button {
142
149
  align-items: center;
package/dist/ui/signin.js CHANGED
@@ -289,7 +289,7 @@
289
289
  this.__v && (this.__e = true, n2 && this.__h.push(n2), b(this));
290
290
  }, d.prototype.render = p, t = [], g.__r = 0, r = 0;
291
291
 
292
- // ../../node_modules/.pnpm/@tabler+icons-preact@2.7.0_preact@10.11.0/node_modules/@tabler/icons-preact/dist/esm/defaultAttributes.js
292
+ // ../../node_modules/.pnpm/@tabler+icons-preact@2.17.0_preact@10.11.0/node_modules/@tabler/icons-preact/dist/esm/defaultAttributes.js
293
293
  var defaultAttributes = {
294
294
  xmlns: "http://www.w3.org/2000/svg",
295
295
  width: 24,
@@ -302,7 +302,7 @@
302
302
  "stroke-linejoin": "round"
303
303
  };
304
304
 
305
- // ../../node_modules/.pnpm/@tabler+icons-preact@2.7.0_preact@10.11.0/node_modules/@tabler/icons-preact/dist/esm/createPreactComponent.js
305
+ // ../../node_modules/.pnpm/@tabler+icons-preact@2.17.0_preact@10.11.0/node_modules/@tabler/icons-preact/dist/esm/createPreactComponent.js
306
306
  var __defProp = Object.defineProperty;
307
307
  var __defProps = Object.defineProperties;
308
308
  var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
@@ -353,7 +353,7 @@
353
353
  return Component2;
354
354
  };
355
355
 
356
- // ../../node_modules/.pnpm/@tabler+icons-preact@2.7.0_preact@10.11.0/node_modules/@tabler/icons-preact/dist/esm/icons/IconSitemap.js
356
+ // ../../node_modules/.pnpm/@tabler+icons-preact@2.17.0_preact@10.11.0/node_modules/@tabler/icons-preact/dist/esm/icons/IconSitemap.js
357
357
  var IconSitemap = createPreactComponent("sitemap", "IconSitemap", [
358
358
  [
359
359
  "path",
@@ -6996,10 +6996,7 @@
6996
6996
  // signin/signin.tsx
6997
6997
  function SignIn() {
6998
6998
  return /* @__PURE__ */ o2("div", { className: "signin", children: /* @__PURE__ */ o2("div", { className: "signin__card", children: [
6999
- /* @__PURE__ */ o2("div", { className: "signin__card__header", children: [
7000
- /* @__PURE__ */ o2(IconSitemap, { className: "signin__card__header__icon", size: 48 }),
7001
- /* @__PURE__ */ o2("h1", { children: "Root.js CMS" })
7002
- ] }),
6999
+ /* @__PURE__ */ o2("div", { className: "signin__card__header", children: /* @__PURE__ */ o2("div", { className: "signin__card__header__icon", children: /* @__PURE__ */ o2(IconSitemap, { size: 80, "stroke-width": 1.5 }) }) }),
7003
7000
  /* @__PURE__ */ o2(SignIn.Button, {})
7004
7001
  ] }) });
7005
7002
  }