sonamu 0.7.12 → 0.7.13

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.
Files changed (55) hide show
  1. package/dist/api/config.d.ts +0 -3
  2. package/dist/api/config.d.ts.map +1 -1
  3. package/dist/api/config.js +1 -1
  4. package/dist/api/sonamu.d.ts.map +1 -1
  5. package/dist/api/sonamu.js +14 -4
  6. package/dist/bin/cli.js +2 -58
  7. package/dist/syncer/api-parser.d.ts.map +1 -1
  8. package/dist/syncer/api-parser.js +3 -2
  9. package/dist/syncer/syncer.d.ts +2 -1
  10. package/dist/syncer/syncer.d.ts.map +1 -1
  11. package/dist/syncer/syncer.js +17 -18
  12. package/dist/types/types.d.ts +1 -1
  13. package/dist/ui/ai-api.d.ts +1 -0
  14. package/dist/ui/ai-api.d.ts.map +1 -0
  15. package/dist/ui/ai-api.js +50 -0
  16. package/dist/ui/ai-client.d.ts +1 -0
  17. package/dist/ui/ai-client.d.ts.map +1 -0
  18. package/dist/ui/ai-client.js +438 -0
  19. package/dist/ui/api.d.ts +3 -0
  20. package/dist/ui/api.d.ts.map +1 -0
  21. package/dist/ui/api.js +680 -0
  22. package/dist/ui-web/assets/brand-icons-Cu_C0hZ4.svg +1008 -0
  23. package/dist/ui-web/assets/brand-icons-F3SPCeH1.woff +0 -0
  24. package/dist/ui-web/assets/brand-icons-XL9sxUpA.woff2 +0 -0
  25. package/dist/ui-web/assets/brand-icons-sqJ2Pg7a.eot +0 -0
  26. package/dist/ui-web/assets/brand-icons-ubhWoxly.ttf +0 -0
  27. package/dist/ui-web/assets/flags-DOLqOU7Y.png +0 -0
  28. package/dist/ui-web/assets/icons-BOCtAERH.woff +0 -0
  29. package/dist/ui-web/assets/icons-CHzK1VD9.eot +0 -0
  30. package/dist/ui-web/assets/icons-D29ZQHHw.ttf +0 -0
  31. package/dist/ui-web/assets/icons-Du6TOHnR.woff2 +0 -0
  32. package/dist/ui-web/assets/icons-RwhydX30.svg +1518 -0
  33. package/dist/ui-web/assets/index-CpaB9P6g.css +1 -0
  34. package/dist/ui-web/assets/index-J9MCfjCd.js +95 -0
  35. package/dist/ui-web/assets/outline-icons-BfdLr8tr.svg +366 -0
  36. package/dist/ui-web/assets/outline-icons-DD8jm0uy.ttf +0 -0
  37. package/dist/ui-web/assets/outline-icons-DInHoiqI.woff2 +0 -0
  38. package/dist/ui-web/assets/outline-icons-LX8adJ4n.eot +0 -0
  39. package/dist/ui-web/assets/outline-icons-aQ88nltS.woff +0 -0
  40. package/dist/ui-web/assets/provider-utils_false-BKJD46kk.js +1 -0
  41. package/dist/ui-web/assets/provider-utils_false-Bu5lmX18.js +1 -0
  42. package/dist/ui-web/index.html +13 -0
  43. package/dist/ui-web/vite.svg +1 -0
  44. package/dist/vector/embedding.d.ts.map +1 -1
  45. package/dist/vector/embedding.js +7 -7
  46. package/package.json +7 -5
  47. package/src/api/config.ts +0 -3
  48. package/src/api/sonamu.ts +17 -4
  49. package/src/bin/cli.ts +1 -67
  50. package/src/syncer/api-parser.ts +2 -1
  51. package/src/syncer/syncer.ts +20 -21
  52. package/src/ui/ai-api.ts +60 -0
  53. package/src/ui/ai-client.ts +499 -0
  54. package/src/ui/api.ts +786 -0
  55. package/src/vector/embedding.ts +8 -6
package/dist/bin/cli.js CHANGED
@@ -20,8 +20,7 @@ async function bootstrap() {
20
20
  const notToInit = [
21
21
  "dev",
22
22
  "build",
23
- "start",
24
- "ui"
23
+ "start"
25
24
  ].includes(process.argv[2] ?? "");
26
25
  if (!notToInit) {
27
26
  await Sonamu.init(false, false);
@@ -110,9 +109,6 @@ async function bootstrap() {
110
109
  "view_form",
111
110
  "#entityId"
112
111
  ],
113
- [
114
- "ui"
115
- ],
116
112
  [
117
113
  "sync"
118
114
  ],
@@ -136,7 +132,6 @@ async function bootstrap() {
136
132
  stub_entity,
137
133
  scaffold_model,
138
134
  scaffold_model_test,
139
- ui,
140
135
  // scaffold_view_list,
141
136
  // scaffold_view_form,
142
137
  sync,
@@ -452,56 +447,5 @@ async function scaffold_model_test(entityId) {
452
447
  entityId
453
448
  });
454
449
  }
455
- async function ui() {
456
- try {
457
- const apiRootPath = findApiRootPath();
458
- // 사용자 프로젝트의 패키지들 중에서 @sonamu-kit/ui를 찾습니다.
459
- // 이를 위해서 createRequire를 사용하여 프로젝트 경로 기준으로 resolve합니다.
460
- const projectRequire = createRequire(path.join(apiRootPath, "package.json"));
461
- const uiPackagePath = projectRequire.resolve("@sonamu-kit/ui"); // 없으면 여기서 터져요(MODULE_NOT_FOUND)
462
- const uiNodePath = path.join(path.dirname(uiPackagePath), "run-ui.js");
463
- if (!await exists(uiNodePath)) {
464
- console.log(chalk.red(`UI runner script not found at ${uiNodePath}. Please rebuild @sonamu-kit/ui.`));
465
- return;
466
- }
467
- // UI를 별도 프로세스로 실행 (hmr-hook 활성화)
468
- const uiProcess = spawn(process.execPath, [
469
- "--import",
470
- "sonamu/ts-loader-register",
471
- "--import",
472
- "sonamu/hmr-hook-register",
473
- "--enable-source-maps",
474
- "--no-warnings",
475
- uiNodePath
476
- ], {
477
- stdio: "inherit",
478
- env: {
479
- ...process.env,
480
- HOT: "yes",
481
- API_ROOT_PATH: apiRootPath
482
- }
483
- });
484
- // 종료 처리
485
- const cleanup = ()=>{
486
- console.log(chalk.yellow("\n\n👋 Shutting down UI server..."));
487
- uiProcess.kill("SIGTERM");
488
- process.exit(0);
489
- };
490
- process.on("SIGINT", cleanup);
491
- process.on("SIGTERM", cleanup);
492
- uiProcess.on("exit", (code)=>{
493
- if (code !== 0) {
494
- console.error(chalk.red(`❌ UI server exited with code ${code}`));
495
- process.exit(code || 1);
496
- }
497
- });
498
- } catch (e) {
499
- if (e instanceof Error && e.message.includes("isn't declared")) {
500
- console.log(`You need to install ${chalk.blue(`@sonamu-kit/ui`)} first.`);
501
- return;
502
- }
503
- throw e;
504
- }
505
- }
506
450
 
507
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9iaW4vY2xpLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBjaGFsayBmcm9tIFwiY2hhbGtcIjtcbmltcG9ydCBkb3RlbnYgZnJvbSBcImRvdGVudlwiO1xuXG5kb3RlbnYuY29uZmlnKCk7XG5cbmltcG9ydCB7IGV4ZWNTeW5jLCBzcGF3biB9IGZyb20gXCJjaGlsZF9wcm9jZXNzXCI7XG5pbXBvcnQgeyBta2RpciwgcmVhZGRpciwgcm0sIHdyaXRlRmlsZSB9IGZyb20gXCJmcy9wcm9taXNlc1wiO1xuaW1wb3J0IGtuZXgsIHsgdHlwZSBLbmV4IH0gZnJvbSBcImtuZXhcIjtcbmltcG9ydCB7IGNyZWF0ZVJlcXVpcmUgfSBmcm9tIFwibW9kdWxlXCI7XG5pbXBvcnQgcGF0aCBmcm9tIFwicGF0aFwiO1xuaW1wb3J0IHByb2Nlc3MgZnJvbSBcInByb2Nlc3NcIjtcbmltcG9ydCB7IHRzaWNsaSB9IGZyb20gXCJ0c2ljbGlcIjtcbmltcG9ydCB7IFNvbmFtdSB9IGZyb20gXCIuLi9hcGlcIjtcbmltcG9ydCB0eXBlIHsgU29uYW11REJDb25maWcgfSBmcm9tIFwiLi4vZGF0YWJhc2UvZGJcIjtcbmltcG9ydCB7IEVudGl0eU1hbmFnZXIgfSBmcm9tIFwiLi4vZW50aXR5L2VudGl0eS1tYW5hZ2VyXCI7XG5pbXBvcnQgeyBNaWdyYXRvciB9IGZyb20gXCIuLi9taWdyYXRpb24vbWlncmF0b3JcIjtcbmltcG9ydCB7IEZpeHR1cmVNYW5hZ2VyIH0gZnJvbSBcIi4uL3Rlc3RpbmcvZml4dHVyZS1tYW5hZ2VyXCI7XG5pbXBvcnQgeyBleGlzdHMgfSBmcm9tIFwiLi4vdXRpbHMvZnMtdXRpbHNcIjtcbmltcG9ydCB7IGZpbmRBcGlSb290UGF0aCB9IGZyb20gXCIuLi91dGlscy91dGlsc1wiO1xuaW1wb3J0IHsgQlVJTERfRElSLCBTV0NfQlVJTERfQ09NTUFORCwgVFNDX1RZUEVfQ0hFQ0tfQ09NTUFORCB9IGZyb20gXCIuL2J1aWxkLWNvbmZpZ1wiO1xuXG5sZXQgbWlncmF0b3I6IE1pZ3JhdG9yO1xuXG5hc3luYyBmdW5jdGlvbiBib290c3RyYXAoKSB7XG4gIGNvbnN0IG5vdFRvSW5pdCA9IFtcImRldlwiLCBcImJ1aWxkXCIsIFwic3RhcnRcIiwgXCJ1aVwiXS5pbmNsdWRlcyhwcm9jZXNzLmFyZ3ZbMl0gPz8gXCJcIik7XG4gIGlmICghbm90VG9Jbml0KSB7XG4gICAgYXdhaXQgU29uYW11LmluaXQoZmFsc2UsIGZhbHNlKTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgYXdhaXQgdHNpY2xpKHByb2Nlc3MuYXJndiwge1xuICAgICAgdHlwZXM6IHtcbiAgICAgICAgXCIjZW50aXR5SWRcIjoge1xuICAgICAgICAgIHR5cGU6IFwiYXV0b2NvbXBsZXRlXCIsXG4gICAgICAgICAgbmFtZTogXCIjZW50aXR5SWRcIixcbiAgICAgICAgICBtZXNzYWdlOiBcIlBsZWFzZSBpbnB1dCAjZW50aXR5SWRcIixcbiAgICAgICAgICBjaG9pY2VzOiBFbnRpdHlNYW5hZ2VyLmdldEFsbFBhcmVudElkcygpLm1hcCgoZW50aXR5SWQpID0+ICh7XG4gICAgICAgICAgICB0aXRsZTogZW50aXR5SWQsXG4gICAgICAgICAgICB2YWx1ZTogZW50aXR5SWQsXG4gICAgICAgICAgfSkpLFxuICAgICAgICB9LFxuICAgICAgICBcIiNyZWNvcmRJZHNcIjogXCJudW1iZXJbXVwiLFxuICAgICAgICBcIiNuYW1lXCI6IFwic3RyaW5nXCIsXG4gICAgICB9LFxuICAgICAgYXJnczogW1xuICAgICAgICBbXCJmaXh0dXJlXCIsIFwiaW5pdFwiXSxcbiAgICAgICAgW1wiZml4dHVyZVwiLCBcImltcG9ydFwiLCBcIiNlbnRpdHlJZFwiLCBcIiNyZWNvcmRJZHNcIl0sXG4gICAgICAgIFtcImZpeHR1cmVcIiwgXCJzeW5jXCJdLFxuICAgICAgICBbXCJtaWdyYXRlXCIsIFwicnVuXCJdLFxuICAgICAgICBbXCJtaWdyYXRlXCIsIFwiY2hlY2tcIl0sXG4gICAgICAgIFtcIm1pZ3JhdGVcIiwgXCJyb2xsYmFja1wiXSxcbiAgICAgICAgW1wibWlncmF0ZVwiLCBcInJlc2V0XCJdLFxuICAgICAgICBbXCJtaWdyYXRlXCIsIFwiY2xlYXJcIl0sXG4gICAgICAgIFtcIm1pZ3JhdGVcIiwgXCJzdGF0dXNcIl0sXG4gICAgICAgIFtcInN0dWJcIiwgXCJwcmFjdGljZVwiLCBcIiNuYW1lXCJdLFxuICAgICAgICBbXCJzdHViXCIsIFwiZW50aXR5XCIsIFwiI25hbWVcIl0sXG4gICAgICAgIFtcInNjYWZmb2xkXCIsIFwibW9kZWxcIiwgXCIjZW50aXR5SWRcIl0sXG4gICAgICAgIFtcInNjYWZmb2xkXCIsIFwibW9kZWxfdGVzdFwiLCBcIiNlbnRpdHlJZFwiXSxcbiAgICAgICAgW1wic2NhZmZvbGRcIiwgXCJ2aWV3X2xpc3RcIiwgXCIjZW50aXR5SWRcIl0sXG4gICAgICAgIFtcInNjYWZmb2xkXCIsIFwidmlld19mb3JtXCIsIFwiI2VudGl0eUlkXCJdLFxuICAgICAgICBbXCJ1aVwiXSxcbiAgICAgICAgW1wic3luY1wiXSxcbiAgICAgICAgW1wiZGV2XCJdLFxuICAgICAgICBbXCJidWlsZFwiXSxcbiAgICAgICAgW1wic3RhcnRcIl0sXG4gICAgICBdLFxuICAgICAgcnVubmVyczoge1xuICAgICAgICBtaWdyYXRlX3N0YXR1cyxcbiAgICAgICAgbWlncmF0ZV9ydW4sXG4gICAgICAgIGZpeHR1cmVfaW5pdCxcbiAgICAgICAgZml4dHVyZV9pbXBvcnQsXG4gICAgICAgIGZpeHR1cmVfc3luYyxcbiAgICAgICAgc3R1Yl9wcmFjdGljZSxcbiAgICAgICAgc3R1Yl9lbnRpdHksXG4gICAgICAgIHNjYWZmb2xkX21vZGVsLFxuICAgICAgICBzY2FmZm9sZF9tb2RlbF90ZXN0LFxuICAgICAgICB1aSxcbiAgICAgICAgLy8gc2NhZmZvbGRfdmlld19saXN0LFxuICAgICAgICAvLyBzY2FmZm9sZF92aWV3X2Zvcm0sXG4gICAgICAgIHN5bmMsXG4gICAgICAgIGRldixcbiAgICAgICAgYnVpbGQsXG4gICAgICAgIHN0YXJ0LFxuICAgICAgfSxcbiAgICB9KTtcbiAgfSBmaW5hbGx5IHtcbiAgICBhd2FpdCBTb25hbXUuZGVzdHJveSgpO1xuICB9XG59XG5cbmJvb3RzdHJhcCgpLmZpbmFsbHkoYXN5bmMgKCkgPT4ge1xuICBhd2FpdCBGaXh0dXJlTWFuYWdlci5kZXN0cm95KCk7XG59KTtcblxuLyoqXG4gKiBwbnBtIHN5bmMg7ZWY66m0IOyLpO2WieuQmOuKlCDtlajsiJjsnoXri4jri6QuXG4gKiDtlITroZzsoJ3tirjrpbwg7Iux7YGs7ZWp64uI64ukLlxuICovXG5hc3luYyBmdW5jdGlvbiBzeW5jKCkge1xuICBhd2FpdCBTb25hbXUuc3luY2VyLnN5bmMoKTtcbn1cblxuLyoqXG4gKiBwbnBtIGRldiDtlZjrqbQg7Iuk7ZaJ65CY64qUIO2VqOyImOyeheuLiOuLpC5cbiAqIO2UhOuhnOygne2KuOyXkCDrjIDtlbQgSE1SIOyngOybkO2VmOuKlCDqsJzrsJwg7ISc67KE66W8IOudhOybjOykjeuLiOuLpC5cbiAqXG4gKiBUeXBlU2NyaXB066W8IOuwlOuhnCDsi6TtlontlaAg7IiYIOyeiOuPhOuhnSBAc29uYW11LWtpdC90cy1sb2FkZXLrpbwsXG4gKiBITVLsnYQg7KeA7JuQ7ZWY6riwIOychO2VtCBAc29uYW11LWtpdC9obXItaG9va+ydhCBpbXBvcnTtlZjrqbAsXG4gKiDshozsiqTrp7Ug7KeA7JuQ7J2EIOychO2VtCAtLWVuYWJsZS1zb3VyY2UtbWFwcyDtlIzrnpjqt7jrpbwg7Y+s7ZWo7ZWY7JesIOyLpO2Wie2VqeuLiOuLpC5cbiAqXG4gKiDsnbTrlYwgQHNvbmFtdS1raXQvdHMtbG9hZGVy7JmAIEBzb25hbXUta2l0L2htci1ob29r64qUIHNvbmFtdeqwgCDsnpDssrTsoIHsnLzroZwg6rCA7KeA6rOgIOyeiOuKlCBkZXBlbmRlbmN57J6F64uI64ukLlxuICog65iQ7ZWcIOyLpO2WieyXkCDsgqzsmqntlZjripQgQHNvbmFtdS1raXQvaG1yLXJ1bm5lcuuPhCDrp4jssKzqsIDsp4DroZwgc29uYW116rCAIOyekOyytOyggeycvOuhnCDqsIDsp4Dqs6Ag7J6I64qUIGRlcGVuZGVuY3nsnoXri4jri6QuXG4gKiDrlLDrnbzshJwg7IKs7Jqp7J6QIO2UhOuhnOygne2KuOyXkOyEnOuKlCDsnbQg7IS4IO2MqO2CpOyngOulvCDsp4HsoJEg7ISk7LmY7ZWgIO2VhOyalOqwgCDsl4bsirXri4jri6QuXG4gKlxuICogU29uYW11LmluaXQg7JeG7J20IO2YuOy2nOuQoCDqsoPsnYQg7IOB7KCV7ZWY7JesIOq1rO2YhOuQmOyXiOyKteuLiOuLpC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gZGV2KCkge1xuICBjb25zdCBhcGlSb290ID0gZmluZEFwaVJvb3RQYXRoKCk7XG4gIGNvbnN0IGVudHJ5UG9pbnQgPSBcInNyYy9pbmRleC50c1wiO1xuXG4gIGNvbnNvbGUubG9nKGNoYWxrLnllbGxvdy5ib2xkKFwi8J+agCBTdGFydGluZyBTb25hbXUgZGV2IHNlcnZlci4uLlxcblwiKSk7XG5cbiAgLy8g7J20IHNvbmFtdSDtjKjtgqTsp4DqsIAgZGVwZW5kZW5jaWVz66GcIOqwgOyngOqzoCDsnojripQgQHNvbmFtdS1raXQvaG1yLXJ1bm5lcuydmCBiaW4vcnVuLmpz66W8IOyCrOyaqe2VqeuLiOuLpC5cbiAgLy8g7J20IOqyveuhnCgvYmluL3J1bi5qcynripQgQHNvbmFtdS1raXQvaG1yLXJ1bm5lcuydmCBwYWNrYWdlLmpzb27snZggYmluIO2VhOuTnOyXkCDrqoXsi5zrkJjslrQg7J6I64qUIOq3uOqyg+qzvCDqsJnsirXri4jri6QuXG4gIGNvbnN0IGhvdFJ1bm5lckJpblBhdGggPSBjcmVhdGVSZXF1aXJlKGltcG9ydC5tZXRhLnVybCkucmVzb2x2ZShcbiAgICBcIkBzb25hbXUta2l0L2htci1ydW5uZXIvYmluL3J1bi5qc1wiLFxuICApO1xuXG4gIGNvbnN0IHNlcnZlclByb2Nlc3MgPSBzcGF3bihcbiAgICBwcm9jZXNzLmV4ZWNQYXRoLCAvLyBub2RlXG4gICAgW1xuICAgICAgaG90UnVubmVyQmluUGF0aCwgLy8g7J2066CH6rKMIO2VtOyEnCBob3QtcnVubmVy66W8IOyLpO2Wie2VmOq1rOyalFxuICAgICAgXCItLWNsZWFyLXNjcmVlbj1mYWxzZVwiLCAvLyDsnbTtlZggaG90LXJ1bm5lcuyXkOqyjCDrhJjqsqjspIQg7J247J6Q65Ok7J6F64uI64ukLlxuICAgICAgXCItLW5vZGUtYXJncz0tLWltcG9ydD1zb25hbXUvdHMtbG9hZGVyLXJlZ2lzdGVyXCIsIC8vIFR5cGVTY3JpcHQg7ISc7Y+s7Yq466W8IOychO2VnCDroZzrjZQsXG4gICAgICBcIi0tbm9kZS1hcmdzPS0taW1wb3J0PXNvbmFtdS9obXItaG9vay1yZWdpc3RlclwiLCAvLyBITVLsnYQg7KeA7JuQ7ZWY6riwIOychO2VnCBob29rLFxuICAgICAgXCItLW5vZGUtYXJncz0tLWVuYWJsZS1zb3VyY2UtbWFwc1wiLCAvLyDqt7jrpqzqs6Ag7IaM7Iqk66e1IOyngOybkOydhCDsnITtlZwg7ZSM656Y6re47J6F64uI64ukLlxuICAgICAgXCItLW9uLWtleT1yOnJlc3RhcnQ6UmVzdGFydCBzZXJ2ZXJcIiwgLy8gciDriITrpbTrqbQg7ISc67KEIOyerOyLnOyeke2VmOqyjCDtlbTspJjsmpQuXG4gICAgICBgLS1vbi1rZXk9ZjpzaGVsbChybSAke3BhdGguam9pbihhcGlSb290LCBcInNvbmFtdS5sb2NrXCIpfSk6cmVzdGFydDpGb3JjZSByZXN0YXJ0YCwgLy8gZiDriITrpbTrqbQgc29uYW11LmxvY2sg7YyM7J287J2EIOyngOyasOqzoCDshJzrsoQg7J6s7Iuc7J6R7ZWY6rKMIO2VtOykmOyalC5cblxuICAgICAgXCItLW9uLWtleT1lbnRlcjpzaGVsbChlY2hvIGhpKTpLZXkgYmluZGluZyB0ZXN0XCIsIC8vIGVudGVy66W8IGtleeuhnCDsk7gg7IiYIOyeiOydjOydhCDrs7TsnbTquLAg7JyE7ZWcIO2FjOyKpO2KuOyeheuLiOuLpC5cbiAgICAgIFwiLS1vbi1rZXk9Y3RybCtmIGN0cmwrZjpzaGVsbChnaXQgcHVsbCAmJiBwbnBtIGluc3RhbGwgJiYgcG5wbSAtLWZpbHRlciBzb25hbXUgYnVpbGQgJiYgZWNobyAnU29uYW11IGlzIG5vdyB1cC10by1kYXRlIScpOnJlc3RhcnQ6UHVsbCAmIGluc3RhbGwgJiBidWlsZCAmIHJlc3RhcnRcIiwgLy8gbW9kaWZpZXLsmYDsnZgg7KGw7ZWpLCDqt7jrpqzqs6Ag65GQIOqwnOydmCBjaG9yZOulvCDsgqzsmqntlaAg7IiYIOyeiOydjOydhCDrs7TsnbTquLAg7JyE7ZWcIO2FjOyKpO2KuOyeheuLiOuLpC5cbiAgICAgIGVudHJ5UG9pbnQsIC8vIOuniOyngOunieycvOuhnCDsi6TsoJwg7Iuk7ZaJ7ZWgIOyKpO2BrOumve2KuOydmCDqsr3roZzrpbwg64SY6rKo7KSN64uI64ukLlxuICAgIF0sXG4gICAge1xuICAgICAgY3dkOiBhcGlSb290LFxuICAgICAgc3RkaW86IFwiaW5oZXJpdFwiLFxuICAgICAgZW52OiB7XG4gICAgICAgIC4uLnByb2Nlc3MuZW52LFxuICAgICAgICBOT0RFX0VOVjogXCJkZXZlbG9wbWVudFwiLFxuICAgICAgICBIT1Q6IFwieWVzXCIsIC8vIOyWmOqwgCDsnojslrTslbwgSE1S7J20IO2ZnOyEse2ZlOuQqeuLiOuLpC5cbiAgICAgICAgQVBJX1JPT1RfUEFUSDogYXBpUm9vdCwgLy8g7J20IOqyveuhnOqwgCBobXItaG9va+ydmCDro6jtirgg65SU66CJ7Yag66as6rCAIOuQqeuLiOuLpC5cbiAgICAgIH0sXG4gICAgfSxcbiAgKTtcblxuICAvLyDsooXro4wg7LKY66asXG4gIGNvbnN0IGNsZWFudXAgPSAoKSA9PiB7XG4gICAgY29uc29sZS5sb2coY2hhbGsueWVsbG93KFwiXFxuXFxu8J+RiyBTaHV0dGluZyBkb3duLi4uXCIpKTtcbiAgICBzZXJ2ZXJQcm9jZXNzLmtpbGwoXCJTSUdURVJNXCIpO1xuICAgIHByb2Nlc3MuZXhpdCgwKTtcbiAgfTtcblxuICBwcm9jZXNzLm9uKFwiU0lHSU5UXCIsIGNsZWFudXApO1xuICBwcm9jZXNzLm9uKFwiU0lHVEVSTVwiLCBjbGVhbnVwKTtcblxuICBzZXJ2ZXJQcm9jZXNzLm9uKFwiZXhpdFwiLCAoY29kZSkgPT4ge1xuICAgIGlmIChjb2RlICE9PSAwKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGNoYWxrLnJlZChg4p2MIFNlcnZlciBleGl0ZWQgd2l0aCBjb2RlICR7Y29kZX1gKSk7XG4gICAgICBwcm9jZXNzLmV4aXQoY29kZSB8fCAxKTtcbiAgICB9XG4gIH0pO1xufVxuXG4vKipcbiAqIHBucG0gYnVpbGQg7ZWY66m0IOyLpO2WieuQmOuKlCDtlajsiJjsnoXri4jri6QuXG4gKiDtlITroZzsoJ3tirjrpbwg67mM65Oc7ZWp64uI64ukLlxuICpcbiAqIOu5jOuTnOyXkCDtlYTsmpTtlZwgLnN3Y3Jj64qUIO2UhOuhnOygne2KuCDro6jtirjsl5DshJwg7LC+6rOgLCDsl4bsnLzrqbQgc29uYW116rCAIOq0gOumrO2VmOuKlCAuc3djcmMucHJvamVjdC1kZWZhdWx066W8IOyCrOyaqe2VqeuLiOuLpC5cbiAqIHNvbmFtdS5jb25maWcudHPripQgc3Jj7JeQIOuTpOyWtOyeiOyngCDslYrquLAg65WM66y47JeQIFNXQ19CVUlMRF9DT01NQU5E66GcIOu5jOuTnOuQmOyngCDslYrsirXri4jri6QuXG4gKiDrlLDrnbzshJwg65Sw66GcIOu5jOuTnO2VtOykjeuLiOuLpC5cbiAqXG4gKiBTb25hbXUuaW5pdCDsl4bsnbQg7Zi47Lac65CgIOqyg+ydhCDsg4HsoJXtlZjsl6wg6rWs7ZiE65CY7JeI7Iq164uI64ukLlxuICovXG5hc3luYyBmdW5jdGlvbiBidWlsZCgpIHtcbiAgY29uc3QgYXBpUm9vdCA9IGZpbmRBcGlSb290UGF0aCgpO1xuXG4gIC8vIOy2nOugpSDrlJTroInthqDrpqzrpbwg7KCc6rGw7ZWp64uI64ukLlxuICB0cnkge1xuICAgIGNvbnNvbGUubG9nKGNoYWxrLmJsdWUoXCJSZW1vdmluZyBidWlsZCBkaXJlY3RvcnkuLi5cIikpO1xuICAgIGlmIChhd2FpdCBleGlzdHMoQlVJTERfRElSKSkge1xuICAgICAgYXdhaXQgcm0oQlVJTERfRElSLCB7IHJlY3Vyc2l2ZTogdHJ1ZSwgZm9yY2U6IHRydWUgfSk7XG4gICAgfVxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGNvbnNvbGUuZXJyb3IoY2hhbGsucmVkKFwiUmVtb3ZlIGJ1aWxkIGRpcmVjdG9yeSBmYWlsZWQuXCIpLCBlcnJvcik7XG4gICAgcHJvY2Vzcy5leGl0KDEpO1xuICB9XG5cbiAgLy8gLnN3Y3JjIO2MjOydvOydhCDsp4DsoJXtlanri4jri6QuXG4gIGxldCBzd2NGaWxlUGF0aCA9IFwiLnN3Y3JjXCI7XG4gIHRyeSB7XG4gICAgaWYgKGF3YWl0IGV4aXN0cyhzd2NGaWxlUGF0aCkpIHtcbiAgICAgIC8vIOyCrOyaqeyekCDtlITroZzsoJ3tirjsl5AgLnN3Y3Jj6rCAIOyeiOycvOuptCDsmrDshKDsnLzroZwg7IKs7Jqp7ZWp64uI64ukLlxuICAgICAgY29uc29sZS5sb2coY2hhbGsuYmx1ZShcIlVzaW5nIC5zd2NyYyBmcm9tIHByb2plY3Qgcm9vdC4uLlwiKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIOyVhOuLiOudvOuptCBzb25hbXXqsIAg6rSA66as7ZWY64qUIC5zd2NyYy5wcm9qZWN0LWRlZmF1bHTrpbwg6rCA7KC464ukIOyUgeuLiOuLpC5cbiAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmJsdWUoXCJVc2luZyBkZWZhdWx0IC5zd2NyYyBmcm9tIHNvbmFtdSBwYWNrYWdlLi4uXCIpKTtcbiAgICAgIHN3Y0ZpbGVQYXRoID0gcGF0aC5qb2luKGltcG9ydC5tZXRhLmRpcm5hbWUsIFwiLi5cIiwgXCIuLlwiLCBcIi5zd2NyYy5wcm9qZWN0LWRlZmF1bHRcIik7XG4gICAgfVxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGNvbnNvbGUuZXJyb3IoY2hhbGsucmVkKFwiU2V0dGluZyB1cCBzd2MgY29uZmlnIGZpbGUgZmFpbGVkLlwiKSwgZXJyb3IpO1xuICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgfVxuXG4gIC8vIOyGjOyKpCDrlJTroInthqDrpqzrpbwg67mM65Oc7ZWp64uI64ukLlxuICB0cnkge1xuICAgIGNvbnNvbGUubG9nKGNoYWxrLmJsdWUoXCJCdWlsZGluZyB3aXRoIHN3Yy4uLlwiKSk7XG4gICAgZXhlY1N5bmMoU1dDX0JVSUxEX0NPTU1BTkQoc3djRmlsZVBhdGgpLCB7IGN3ZDogYXBpUm9vdCwgc3RkaW86IFwiaW5oZXJpdFwiIH0pO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGNvbnNvbGUuZXJyb3IoY2hhbGsucmVkKFwiQnVpbGQgZmFpbGVkLlwiKSwgZXJyb3IpO1xuICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgfVxuXG4gIC8vIOuniOyngOunieyXkOuKlCDtg4DsnoUg7LK07YGs66W8IO2VtOyalC5cbiAgdHJ5IHtcbiAgICBjb25zb2xlLmxvZyhjaGFsay5ibHVlKFwiQ2hlY2tpbmcgdHlwZXMgd2l0aCB0c2MuLi5cIikpO1xuICAgIGV4ZWNTeW5jKFRTQ19UWVBFX0NIRUNLX0NPTU1BTkQsIHtcbiAgICAgIGN3ZDogYXBpUm9vdCxcbiAgICAgIHN0ZGlvOiBcImluaGVyaXRcIixcbiAgICB9KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBjb25zb2xlLmVycm9yKGNoYWxrLnJlZChcIlR5cGUgY2hlY2sgZmFpbGVkLlwiKSwgZXJyb3IpO1xuICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgfVxufVxuXG4vKipcbiAqIHBucG0gc3RhcnQg7ZWY66m0IOyLpO2WieuQmOuKlCDtlajsiJjsnoXri4jri6QuXG4gKiDruYzrk5zrkJwg7ZSE66Gc7KCd7Yq466W8IOyLpO2Wie2VqeuLiOuLpC5cbiAqXG4gKiDruYzrk5zrkJwg6rKw6rO866y8KGRpc3Qg65SU66CJ7Yag66as7J2YIGluZGV4LmpzIOyXlO2KuOumrO2PrOyduO2KuCnsnbQg7JeG64uk66m0IOyLpO2WieydhCDspJHri6jtlanri4jri6QuXG4gKiDshozsiqTrp7Ug7KeA7JuQ6rO8IGRvdGVudiDsp4Dsm5DsnYQg7Y+s7ZWo7ZWY7JesIOyLpO2Wie2VqeuLiOuLpC5cbiAqXG4gKiBTb25hbXUuaW5pdCDsl4bsnbQg7Zi47Lac65CgIOqyg+ydhCDsg4HsoJXtlZjsl6wg6rWs7ZiE65CY7JeI7Iq164uI64ukLlxuICovXG5hc3luYyBmdW5jdGlvbiBzdGFydCgpIHtcbiAgY29uc3QgYXBpUm9vdCA9IGZpbmRBcGlSb290UGF0aCgpO1xuICBjb25zdCBlbnRyeVBvaW50ID0gXCJkaXN0L2luZGV4LmpzXCI7XG5cbiAgaWYgKCEoYXdhaXQgZXhpc3RzKGVudHJ5UG9pbnQpKSkge1xuICAgIGNvbnNvbGUubG9nKGNoYWxrLnJlZChgJHtlbnRyeVBvaW50fSBub3QgZm91bmQuIFBsZWFzZSBidWlsZCB5b3VyIHByb2plY3QgZmlyc3QuYCkpO1xuICAgIGNvbnNvbGUubG9nKGNoYWxrLmJsdWUoXCJSdW46IHlhcm4gc29uYW11IGJ1aWxkXCIpKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCB7IHNwYXduIH0gPSBhd2FpdCBpbXBvcnQoXCJjaGlsZF9wcm9jZXNzXCIpO1xuICBjb25zdCBzZXJ2ZXJQcm9jZXNzID0gc3Bhd24oXG4gICAgcHJvY2Vzcy5leGVjUGF0aCxcbiAgICBbXCItLWVuYWJsZS1zb3VyY2UtbWFwc1wiLCBcIi1yXCIsIFwiZG90ZW52L2NvbmZpZ1wiLCBlbnRyeVBvaW50XSxcbiAgICB7XG4gICAgICBjd2Q6IGFwaVJvb3QsXG4gICAgICBzdGRpbzogXCJpbmhlcml0XCIsXG4gICAgfSxcbiAgKTtcblxuICBwcm9jZXNzLm9uKFwiU0lHSU5UXCIsICgpID0+IHtcbiAgICBzZXJ2ZXJQcm9jZXNzLmtpbGwoXCJTSUdURVJNXCIpO1xuICAgIHByb2Nlc3MuZXhpdCgwKTtcbiAgfSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHNldHVwTWlncmF0b3IoKSB7XG4gIC8vIG1pZ3JhdG9yXG4gIG1pZ3JhdG9yID0gbmV3IE1pZ3JhdG9yKCk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHNldHVwRml4dHVyZU1hbmFnZXIoKSB7XG4gIEZpeHR1cmVNYW5hZ2VyLmluaXQoKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gbWlncmF0ZV9ydW4oKSB7XG4gIGF3YWl0IHNldHVwTWlncmF0b3IoKTtcblxuICBhd2FpdCBtaWdyYXRvci5ydW5BY3Rpb24oXG4gICAgXCJhcHBseVwiLFxuICAgIE9iamVjdC5rZXlzKFNvbmFtdS5kYkNvbmZpZykgYXMgKGtleW9mIFNvbmFtdURCQ29uZmlnKVtdIC8q7Iu5IOuLpCEqLyxcbiAgKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gbWlncmF0ZV9zdGF0dXMoKSB7XG4gIGF3YWl0IHNldHVwTWlncmF0b3IoKTtcblxuICBjb25zdCBzdGF0dXMgPSBhd2FpdCBtaWdyYXRvci5nZXRTdGF0dXMoKTtcbiAgLy8gc3RhdHVzO1xuICBjb25zb2xlLmxvZyhzdGF0dXMpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBmaXh0dXJlX2luaXQoKSB7XG4gIGNvbnN0IHNyY0NvbmZpZyA9IFNvbmFtdS5kYkNvbmZpZy5kZXZlbG9wbWVudF9tYXN0ZXI7XG4gIGNvbnN0IHRhcmdldHMgPSBbXG4gICAge1xuICAgICAgbGFiZWw6IFwiKFJFTU9URSkgRml4dHVyZSBEQlwiLFxuICAgICAgY29uZmlnOiBTb25hbXUuZGJDb25maWcuZml4dHVyZV9yZW1vdGUsXG4gICAgfSxcbiAgICB7XG4gICAgICBsYWJlbDogXCIoTE9DQUwpIFRlc3RpbmcgREJcIixcbiAgICAgIGNvbmZpZzogU29uYW11LmRiQ29uZmlnLnRlc3QsXG4gICAgICB0b1NraXA6ICgoKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlbW90ZUNvbm4gPSBTb25hbXUuZGJDb25maWcuZml4dHVyZV9yZW1vdGUuY29ubmVjdGlvbiBhcyBLbmV4LkNvbm5lY3Rpb25Db25maWc7XG4gICAgICAgIGNvbnN0IGxvY2FsQ29ubiA9IFNvbmFtdS5kYkNvbmZpZy50ZXN0LmNvbm5lY3Rpb24gYXMgS25leC5Db25uZWN0aW9uQ29uZmlnO1xuICAgICAgICByZXR1cm4gcmVtb3RlQ29ubi5ob3N0ID09PSBsb2NhbENvbm4uaG9zdCAmJiByZW1vdGVDb25uLmRhdGFiYXNlID09PSBsb2NhbENvbm4uZGF0YWJhc2U7XG4gICAgICB9KSgpLFxuICAgIH0sXG4gIF0gYXMge1xuICAgIGxhYmVsOiBzdHJpbmc7XG4gICAgY29uZmlnOiBLbmV4LkNvbmZpZztcbiAgICB0b1NraXA/OiBib29sZWFuO1xuICB9W107XG5cbiAgLy8gMS4g6riw7KSAREIg7Iqk7YKk66eI66W8IOuNpO2UhFxuICBjb25zb2xlLmxvZyhcIkRVTVAuLi5cIik7XG4gIGNvbnN0IGR1bXBGaWxlbmFtZSA9IGAvdG1wL3NvbmFtdS1maXh0dXJlLWluaXQtJHtEYXRlLm5vdygpfS5zcWxgO1xuICBjb25zdCBzcmNDb25uID0gc3JjQ29uZmlnLmNvbm5lY3Rpb24gYXMgS25leC5Db25uZWN0aW9uQ29uZmlnO1xuICBjb25zdCBtaWdyYXRpb25zRHVtcCA9IGAvdG1wL3NvbmFtdS1maXh0dXJlLWluaXQtbWlncmF0aW9ucy0ke0RhdGUubm93KCl9LnNxbGA7XG4gIGV4ZWNTeW5jKFxuICAgIGBteXNxbGR1bXAgLWgke3NyY0Nvbm4uaG9zdH0gLXUke3NyY0Nvbm4udXNlcn0gLXAke3NyY0Nvbm4ucGFzc3dvcmR9IC0tc2luZ2xlLXRyYW5zYWN0aW9uIC1kIC0tbm8tY3JlYXRlLWRiIC0tdHJpZ2dlcnMgJHtzcmNDb25uLmRhdGFiYXNlfSA+ICR7ZHVtcEZpbGVuYW1lfWAsXG4gICk7XG4gIGNvbnN0IF9kYiA9IGtuZXgoc3JjQ29uZmlnKTtcbiAgY29uc3QgW1ttaWdyYXRpb25zXV0gPSBhd2FpdCBfZGIucmF3KFxuICAgIFwiU0VMRUNUIENPVU5UKCopIGFzIGNvdW50IEZST00gaW5mb3JtYXRpb25fc2NoZW1hLnRhYmxlcyBXSEVSRSB0YWJsZV9zY2hlbWEgPSA/IEFORCB0YWJsZV9uYW1lID0gJ2tuZXhfbWlncmF0aW9ucydcIixcbiAgICBbc3JjQ29ubi5kYXRhYmFzZV0sXG4gICk7XG4gIGlmIChtaWdyYXRpb25zLmNvdW50ID4gMCkge1xuICAgIGV4ZWNTeW5jKFxuICAgICAgYG15c3FsZHVtcCAtaCR7c3JjQ29ubi5ob3N0fSAtdSR7c3JjQ29ubi51c2VyfSAtcCR7c3JjQ29ubi5wYXNzd29yZH0gLS1zaW5nbGUtdHJhbnNhY3Rpb24gLS1uby1jcmVhdGUtZGIgLS10cmlnZ2VycyAke3NyY0Nvbm4uZGF0YWJhc2V9IGtuZXhfbWlncmF0aW9ucyBrbmV4X21pZ3JhdGlvbnNfbG9jayA+ICR7bWlncmF0aW9uc0R1bXB9YCxcbiAgICApO1xuICB9XG5cbiAgLy8gMi4g64yA7IOBREIg6rCB6rCB7JeQIOuMgO2VmOyXrCDsobTsnqzsl6zrtoAg7ZmV7J24IO2bhCDrtpPquLBcbiAgZm9yIGF3YWl0IChjb25zdCB7IGxhYmVsLCBjb25maWcsIHRvU2tpcCB9IG9mIHRhcmdldHMpIHtcbiAgICBjb25zdCBjb25uID0gY29uZmlnLmNvbm5lY3Rpb24gYXMgS25leC5Db25uZWN0aW9uQ29uZmlnO1xuXG4gICAgaWYgKHRvU2tpcCA9PT0gdHJ1ZSkge1xuICAgICAgY29uc29sZS5sb2coY2hhbGsucmVkKGAke2xhYmVsfTogU2tpcHBlZCFgKSk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBjb25zdCBkYiA9IGtuZXgoe1xuICAgICAgLi4uY29uZmlnLFxuICAgICAgY29ubmVjdGlvbjoge1xuICAgICAgICAuLi4oKGNvbmZpZy5jb25uZWN0aW9uID8/IHt9KSBhcyBLbmV4LkNvbm5lY3Rpb25Db25maWcpLFxuICAgICAgICBkYXRhYmFzZTogdW5kZWZpbmVkLFxuICAgICAgfSxcbiAgICB9KTtcbiAgICBjb25zdCBbW3Jvd11dID0gYXdhaXQgZGIucmF3KGBTSE9XIERBVEFCQVNFUyBMSUtFIFwiJHtjb25uLmRhdGFiYXNlfVwiYCk7XG4gICAgaWYgKHJvdykge1xuICAgICAgY29uc29sZS5sb2coY2hhbGsueWVsbG93KGAke2xhYmVsfTogRGF0YWJhc2UgXCIke2Nvbm4uZGF0YWJhc2V9XCIgQWxyZWFkeSBleGlzdHNgKSk7XG4gICAgICBhd2FpdCBkYi5kZXN0cm95KCk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBjb25zb2xlLmxvZyhgU1lOQyB0byAke2xhYmVsfS4uLmApO1xuICAgIGNvbnN0IG15c3FsQ21kID0gYG15c3FsIC1oJHtjb25uLmhvc3R9IC11JHtjb25uLnVzZXJ9IC1wJHtjb25uLnBhc3N3b3JkfWA7XG4gICAgZXhlY1N5bmMoYCR7bXlzcWxDbWR9IC1lICdEUk9QIERBVEFCQVNFIElGIEVYSVNUUyBcXGAke2Nvbm4uZGF0YWJhc2V9XFxgJ2ApO1xuICAgIGV4ZWNTeW5jKGAke215c3FsQ21kfSAtZSAnQ1JFQVRFIERBVEFCQVNFIFxcYCR7Y29ubi5kYXRhYmFzZX1cXGAnYCk7XG4gICAgZXhlY1N5bmMoYCR7bXlzcWxDbWR9ICR7Y29ubi5kYXRhYmFzZX0gPCAke2R1bXBGaWxlbmFtZX1gKTtcbiAgICBpZiAoYXdhaXQgZXhpc3RzKG1pZ3JhdGlvbnNEdW1wKSkge1xuICAgICAgZXhlY1N5bmMoYCR7bXlzcWxDbWR9ICR7Y29ubi5kYXRhYmFzZX0gPCAke21pZ3JhdGlvbnNEdW1wfWApO1xuICAgIH1cblxuICAgIGF3YWl0IGRiLmRlc3Ryb3koKTtcbiAgfVxuXG4gIGF3YWl0IF9kYi5kZXN0cm95KCk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGZpeHR1cmVfaW1wb3J0KGVudGl0eUlkOiBzdHJpbmcsIHJlY29yZElkczogbnVtYmVyW10pIHtcbiAgYXdhaXQgc2V0dXBGaXh0dXJlTWFuYWdlcigpO1xuXG4gIGF3YWl0IEZpeHR1cmVNYW5hZ2VyLmltcG9ydEZpeHR1cmUoZW50aXR5SWQsIHJlY29yZElkcyk7XG4gIGF3YWl0IEZpeHR1cmVNYW5hZ2VyLnN5bmMoKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZml4dHVyZV9zeW5jKCkge1xuICBhd2FpdCBzZXR1cEZpeHR1cmVNYW5hZ2VyKCk7XG5cbiAgYXdhaXQgRml4dHVyZU1hbmFnZXIuc3luYygpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBzdHViX3ByYWN0aWNlKG5hbWU6IHN0cmluZykge1xuICBjb25zdCBwcmFjdGljZURpciA9IHBhdGguam9pbihTb25hbXUuYXBpUm9vdFBhdGgsIFwic3JjXCIsIFwicHJhY3RpY2VzXCIpO1xuICBjb25zdCBmaWxlTmFtZXMgPSBhd2FpdCByZWFkZGlyKHByYWN0aWNlRGlyKTtcblxuICBjb25zdCBtYXhTZXFObyA9IGF3YWl0IChhc3luYyAoKSA9PiB7XG4gICAgaWYgKCEoYXdhaXQgZXhpc3RzKHByYWN0aWNlRGlyKSkpIHtcbiAgICAgIGF3YWl0IG1rZGlyKHByYWN0aWNlRGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICB9XG5cbiAgICBjb25zdCBmaWx0ZXJlZFNlcXMgPSBmaWxlTmFtZXNcbiAgICAgIC5maWx0ZXIoKGZpbGVOYW1lKSA9PiBmaWxlTmFtZS5zdGFydHNXaXRoKFwicFwiKSAmJiBmaWxlTmFtZS5lbmRzV2l0aChcIi50c1wiKSlcbiAgICAgIC5tYXAoKGZpbGVOYW1lKSA9PiB7XG4gICAgICAgIGNvbnN0IFssIHNlcU5vXSA9IGZpbGVOYW1lLm1hdGNoKC9ecChbMC05XSspLS8pID8/IFtcIjBcIiwgXCIwXCJdO1xuICAgICAgICByZXR1cm4gcGFyc2VJbnQoc2VxTm8pO1xuICAgICAgfSlcbiAgICAgIC5zb3J0KChhLCBiKSA9PiBiIC0gYSk7XG5cbiAgICBpZiAoZmlsdGVyZWRTZXFzLmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybiBmaWx0ZXJlZFNlcXNbMF07XG4gICAgfVxuXG4gICAgcmV0dXJuIDA7XG4gIH0pKCk7XG5cbiAgY29uc3QgY3VycmVudFNlcU5vID0gbWF4U2VxTm8gKyAxO1xuICBjb25zdCBmaWxlTmFtZSA9IGBwJHtjdXJyZW50U2VxTm99LSR7bmFtZX0udHNgO1xuICBjb25zdCBkc3RQYXRoID0gcGF0aC5qb2luKHByYWN0aWNlRGlyLCBmaWxlTmFtZSk7XG5cbiAgY29uc3QgY29kZSA9IFtcbiAgICBgaW1wb3J0IHsgU29uYW11IH0gZnJvbSBcInNvbmFtdVwiO2AsXG4gICAgXCJcIixcbiAgICBgY29uc29sZS5jbGVhcigpO2AsXG4gICAgYGNvbnNvbGUubG9nKFwiJHtmaWxlTmFtZX1cIik7YCxcbiAgICBcIlwiLFxuICAgIGBTb25hbXUucnVuU2NyaXB0KGFzeW5jICgpID0+IHtgLFxuICAgIGAgLy8gVE9ET2AsXG4gICAgYH0pO2AsXG4gICAgXCJcIixcbiAgXS5qb2luKFwiXFxuXCIpO1xuICBhd2FpdCB3cml0ZUZpbGUoZHN0UGF0aCwgY29kZSk7XG5cbiAgZXhlY1N5bmMoYGNvZGUgJHtkc3RQYXRofWApO1xuXG4gIGNvbnN0IHJ1bkNvZGUgPSBgeWFybiBub2RlIC1yIGRvdGVudi9jb25maWcgLS1lbmFibGUtc291cmNlLW1hcHMgZGlzdC9wcmFjdGljZXMvJHtmaWxlTmFtZS5yZXBsYWNlKFxuICAgIFwiLnRzXCIsXG4gICAgXCIuanNcIixcbiAgKX1gO1xuICBjb25zb2xlLmxvZyhgJHtjaGFsay5ibHVlKHJ1bkNvZGUpfSBjb3BpZWQgdG8gY2xpcGJvYXJkLmApO1xuICBleGVjU3luYyhgZWNobyBcIiR7cnVuQ29kZX1cIiB8IHBiY29weWApO1xufVxuXG5hc3luYyBmdW5jdGlvbiBzdHViX2VudGl0eShlbnRpdHlJZDogc3RyaW5nKSB7XG4gIGF3YWl0IFNvbmFtdS5zeW5jZXIuY3JlYXRlRW50aXR5KHsgZW50aXR5SWQsIHRpdGxlOiBlbnRpdHlJZCB9KTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gc2NhZmZvbGRfbW9kZWwoZW50aXR5SWQ6IHN0cmluZykge1xuICBhd2FpdCBTb25hbXUuc3luY2VyLmdlbmVyYXRlVGVtcGxhdGUoXCJtb2RlbFwiLCB7XG4gICAgZW50aXR5SWQsXG4gIH0pO1xufVxuXG5hc3luYyBmdW5jdGlvbiBzY2FmZm9sZF9tb2RlbF90ZXN0KGVudGl0eUlkOiBzdHJpbmcpIHtcbiAgYXdhaXQgU29uYW11LnN5bmNlci5nZW5lcmF0ZVRlbXBsYXRlKFwibW9kZWxfdGVzdFwiLCB7XG4gICAgZW50aXR5SWQsXG4gIH0pO1xufVxuXG5hc3luYyBmdW5jdGlvbiB1aSgpIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBhcGlSb290UGF0aCA9IGZpbmRBcGlSb290UGF0aCgpO1xuXG4gICAgLy8g7IKs7Jqp7J6QIO2UhOuhnOygne2KuOydmCDtjKjtgqTsp4Drk6Qg7KSR7JeQ7IScIEBzb25hbXUta2l0L3Vp66W8IOywvuyKteuLiOuLpC5cbiAgICAvLyDsnbTrpbwg7JyE7ZW07IScIGNyZWF0ZVJlcXVpcmXrpbwg7IKs7Jqp7ZWY7JesIO2UhOuhnOygne2KuCDqsr3roZwg6riw7KSA7Jy866GcIHJlc29sdmXtlanri4jri6QuXG4gICAgY29uc3QgcHJvamVjdFJlcXVpcmUgPSBjcmVhdGVSZXF1aXJlKHBhdGguam9pbihhcGlSb290UGF0aCwgXCJwYWNrYWdlLmpzb25cIikpO1xuICAgIGNvbnN0IHVpUGFja2FnZVBhdGggPSBwcm9qZWN0UmVxdWlyZS5yZXNvbHZlKFwiQHNvbmFtdS1raXQvdWlcIik7IC8vIOyXhuycvOuptCDsl6zquLDshJwg7YSw7KC47JqUKE1PRFVMRV9OT1RfRk9VTkQpXG4gICAgY29uc3QgdWlOb2RlUGF0aCA9IHBhdGguam9pbihwYXRoLmRpcm5hbWUodWlQYWNrYWdlUGF0aCksIFwicnVuLXVpLmpzXCIpO1xuXG4gICAgaWYgKCEoYXdhaXQgZXhpc3RzKHVpTm9kZVBhdGgpKSkge1xuICAgICAgY29uc29sZS5sb2coXG4gICAgICAgIGNoYWxrLnJlZChgVUkgcnVubmVyIHNjcmlwdCBub3QgZm91bmQgYXQgJHt1aU5vZGVQYXRofS4gUGxlYXNlIHJlYnVpbGQgQHNvbmFtdS1raXQvdWkuYCksXG4gICAgICApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFVJ66W8IOuzhOuPhCDtlITroZzshLjsiqTroZwg7Iuk7ZaJIChobXItaG9vayDtmZzshLHtmZQpXG4gICAgY29uc3QgdWlQcm9jZXNzID0gc3Bhd24oXG4gICAgICBwcm9jZXNzLmV4ZWNQYXRoLFxuICAgICAgW1xuICAgICAgICBcIi0taW1wb3J0XCIsXG4gICAgICAgIFwic29uYW11L3RzLWxvYWRlci1yZWdpc3RlclwiLFxuICAgICAgICBcIi0taW1wb3J0XCIsXG4gICAgICAgIFwic29uYW11L2htci1ob29rLXJlZ2lzdGVyXCIsXG4gICAgICAgIFwiLS1lbmFibGUtc291cmNlLW1hcHNcIixcbiAgICAgICAgXCItLW5vLXdhcm5pbmdzXCIsXG4gICAgICAgIHVpTm9kZVBhdGgsXG4gICAgICBdLFxuICAgICAge1xuICAgICAgICBzdGRpbzogXCJpbmhlcml0XCIsXG4gICAgICAgIGVudjoge1xuICAgICAgICAgIC4uLnByb2Nlc3MuZW52LFxuICAgICAgICAgIEhPVDogXCJ5ZXNcIixcbiAgICAgICAgICBBUElfUk9PVF9QQVRIOiBhcGlSb290UGF0aCwgLy8gVUnripQg7JaY66eMIOyVjOuptCDrj7zsmpQhIOuCmOuouOyngOuKlCDslpjqsIAg65ag7IScIOyVjOyVhOyEnCDtlaAg6rKD7J6EIOOFjlxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICApO1xuXG4gICAgLy8g7KKF66OMIOyymOumrFxuICAgIGNvbnN0IGNsZWFudXAgPSAoKSA9PiB7XG4gICAgICBjb25zb2xlLmxvZyhjaGFsay55ZWxsb3coXCJcXG5cXG7wn5GLIFNodXR0aW5nIGRvd24gVUkgc2VydmVyLi4uXCIpKTtcbiAgICAgIHVpUHJvY2Vzcy5raWxsKFwiU0lHVEVSTVwiKTtcbiAgICAgIHByb2Nlc3MuZXhpdCgwKTtcbiAgICB9O1xuXG4gICAgcHJvY2Vzcy5vbihcIlNJR0lOVFwiLCBjbGVhbnVwKTtcbiAgICBwcm9jZXNzLm9uKFwiU0lHVEVSTVwiLCBjbGVhbnVwKTtcblxuICAgIHVpUHJvY2Vzcy5vbihcImV4aXRcIiwgKGNvZGUpID0+IHtcbiAgICAgIGlmIChjb2RlICE9PSAwKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoY2hhbGsucmVkKGDinYwgVUkgc2VydmVyIGV4aXRlZCB3aXRoIGNvZGUgJHtjb2RlfWApKTtcbiAgICAgICAgcHJvY2Vzcy5leGl0KGNvZGUgfHwgMSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0gY2F0Y2ggKGU6IHVua25vd24pIHtcbiAgICBpZiAoZSBpbnN0YW5jZW9mIEVycm9yICYmIGUubWVzc2FnZS5pbmNsdWRlcyhcImlzbid0IGRlY2xhcmVkXCIpKSB7XG4gICAgICBjb25zb2xlLmxvZyhgWW91IG5lZWQgdG8gaW5zdGFsbCAke2NoYWxrLmJsdWUoYEBzb25hbXUta2l0L3VpYCl9IGZpcnN0LmApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aHJvdyBlO1xuICB9XG59XG4iXSwibmFtZXMiOlsiY2hhbGsiLCJkb3RlbnYiLCJjb25maWciLCJleGVjU3luYyIsInNwYXduIiwibWtkaXIiLCJyZWFkZGlyIiwicm0iLCJ3cml0ZUZpbGUiLCJrbmV4IiwiY3JlYXRlUmVxdWlyZSIsInBhdGgiLCJwcm9jZXNzIiwidHNpY2xpIiwiU29uYW11IiwiRW50aXR5TWFuYWdlciIsIk1pZ3JhdG9yIiwiRml4dHVyZU1hbmFnZXIiLCJleGlzdHMiLCJmaW5kQXBpUm9vdFBhdGgiLCJCVUlMRF9ESVIiLCJTV0NfQlVJTERfQ09NTUFORCIsIlRTQ19UWVBFX0NIRUNLX0NPTU1BTkQiLCJtaWdyYXRvciIsImJvb3RzdHJhcCIsIm5vdFRvSW5pdCIsImluY2x1ZGVzIiwiYXJndiIsImluaXQiLCJ0eXBlcyIsInR5cGUiLCJuYW1lIiwibWVzc2FnZSIsImNob2ljZXMiLCJnZXRBbGxQYXJlbnRJZHMiLCJtYXAiLCJlbnRpdHlJZCIsInRpdGxlIiwidmFsdWUiLCJhcmdzIiwicnVubmVycyIsIm1pZ3JhdGVfc3RhdHVzIiwibWlncmF0ZV9ydW4iLCJmaXh0dXJlX2luaXQiLCJmaXh0dXJlX2ltcG9ydCIsImZpeHR1cmVfc3luYyIsInN0dWJfcHJhY3RpY2UiLCJzdHViX2VudGl0eSIsInNjYWZmb2xkX21vZGVsIiwic2NhZmZvbGRfbW9kZWxfdGVzdCIsInVpIiwic3luYyIsImRldiIsImJ1aWxkIiwic3RhcnQiLCJkZXN0cm95IiwiZmluYWxseSIsInN5bmNlciIsImFwaVJvb3QiLCJlbnRyeVBvaW50IiwiY29uc29sZSIsImxvZyIsInllbGxvdyIsImJvbGQiLCJob3RSdW5uZXJCaW5QYXRoIiwidXJsIiwicmVzb2x2ZSIsInNlcnZlclByb2Nlc3MiLCJleGVjUGF0aCIsImpvaW4iLCJjd2QiLCJzdGRpbyIsImVudiIsIk5PREVfRU5WIiwiSE9UIiwiQVBJX1JPT1RfUEFUSCIsImNsZWFudXAiLCJraWxsIiwiZXhpdCIsIm9uIiwiY29kZSIsImVycm9yIiwicmVkIiwiYmx1ZSIsInJlY3Vyc2l2ZSIsImZvcmNlIiwic3djRmlsZVBhdGgiLCJkaXJuYW1lIiwic2V0dXBNaWdyYXRvciIsInNldHVwRml4dHVyZU1hbmFnZXIiLCJydW5BY3Rpb24iLCJPYmplY3QiLCJrZXlzIiwiZGJDb25maWciLCJzdGF0dXMiLCJnZXRTdGF0dXMiLCJzcmNDb25maWciLCJkZXZlbG9wbWVudF9tYXN0ZXIiLCJ0YXJnZXRzIiwibGFiZWwiLCJmaXh0dXJlX3JlbW90ZSIsInRlc3QiLCJ0b1NraXAiLCJyZW1vdGVDb25uIiwiY29ubmVjdGlvbiIsImxvY2FsQ29ubiIsImhvc3QiLCJkYXRhYmFzZSIsImR1bXBGaWxlbmFtZSIsIkRhdGUiLCJub3ciLCJzcmNDb25uIiwibWlncmF0aW9uc0R1bXAiLCJ1c2VyIiwicGFzc3dvcmQiLCJfZGIiLCJtaWdyYXRpb25zIiwicmF3IiwiY291bnQiLCJjb25uIiwiZGIiLCJ1bmRlZmluZWQiLCJyb3ciLCJteXNxbENtZCIsInJlY29yZElkcyIsImltcG9ydEZpeHR1cmUiLCJwcmFjdGljZURpciIsImFwaVJvb3RQYXRoIiwiZmlsZU5hbWVzIiwibWF4U2VxTm8iLCJmaWx0ZXJlZFNlcXMiLCJmaWx0ZXIiLCJmaWxlTmFtZSIsInN0YXJ0c1dpdGgiLCJlbmRzV2l0aCIsInNlcU5vIiwibWF0Y2giLCJwYXJzZUludCIsInNvcnQiLCJhIiwiYiIsImxlbmd0aCIsImN1cnJlbnRTZXFObyIsImRzdFBhdGgiLCJydW5Db2RlIiwicmVwbGFjZSIsImNyZWF0ZUVudGl0eSIsImdlbmVyYXRlVGVtcGxhdGUiLCJwcm9qZWN0UmVxdWlyZSIsInVpUGFja2FnZVBhdGgiLCJ1aU5vZGVQYXRoIiwidWlQcm9jZXNzIiwiZSIsIkVycm9yIl0sIm1hcHBpbmdzIjoiQUFBQSxPQUFPQSxXQUFXLFFBQVE7QUFDMUIsT0FBT0MsWUFBWSxTQUFTO0FBRTVCQSxPQUFPQyxNQUFNO0FBRWIsU0FBU0MsUUFBUSxFQUFFQyxLQUFLLFFBQVEsZ0JBQWdCO0FBQ2hELFNBQVNDLEtBQUssRUFBRUMsT0FBTyxFQUFFQyxFQUFFLEVBQUVDLFNBQVMsUUFBUSxtQkFBYztBQUM1RCxPQUFPQyxVQUF5QixPQUFPO0FBQ3ZDLFNBQVNDLGFBQWEsUUFBUSxTQUFTO0FBQ3ZDLE9BQU9DLFVBQVUsT0FBTztBQUN4QixPQUFPQyxhQUFhLFVBQVU7QUFDOUIsU0FBU0MsTUFBTSxRQUFRLFNBQVM7QUFDaEMsU0FBU0MsTUFBTSxRQUFRLGtCQUFTO0FBRWhDLFNBQVNDLGFBQWEsUUFBUSw4QkFBMkI7QUFDekQsU0FBU0MsUUFBUSxRQUFRLDJCQUF3QjtBQUNqRCxTQUFTQyxjQUFjLFFBQVEsZ0NBQTZCO0FBQzVELFNBQVNDLE1BQU0sUUFBUSx1QkFBb0I7QUFDM0MsU0FBU0MsZUFBZSxRQUFRLG9CQUFpQjtBQUNqRCxTQUFTQyxTQUFTLEVBQUVDLGlCQUFpQixFQUFFQyxzQkFBc0IsUUFBUSxvQkFBaUI7QUFFdEYsSUFBSUM7QUFFSixlQUFlQztJQUNiLE1BQU1DLFlBQVk7UUFBQztRQUFPO1FBQVM7UUFBUztLQUFLLENBQUNDLFFBQVEsQ0FBQ2QsUUFBUWUsSUFBSSxDQUFDLEVBQUUsSUFBSTtJQUM5RSxJQUFJLENBQUNGLFdBQVc7UUFDZCxNQUFNWCxPQUFPYyxJQUFJLENBQUMsT0FBTztJQUMzQjtJQUVBLElBQUk7UUFDRixNQUFNZixPQUFPRCxRQUFRZSxJQUFJLEVBQUU7WUFD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
451
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9iaW4vY2xpLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBjaGFsayBmcm9tIFwiY2hhbGtcIjtcbmltcG9ydCBkb3RlbnYgZnJvbSBcImRvdGVudlwiO1xuXG5kb3RlbnYuY29uZmlnKCk7XG5cbmltcG9ydCB7IGV4ZWNTeW5jLCBzcGF3biB9IGZyb20gXCJjaGlsZF9wcm9jZXNzXCI7XG5pbXBvcnQgeyBta2RpciwgcmVhZGRpciwgcm0sIHdyaXRlRmlsZSB9IGZyb20gXCJmcy9wcm9taXNlc1wiO1xuaW1wb3J0IGtuZXgsIHsgdHlwZSBLbmV4IH0gZnJvbSBcImtuZXhcIjtcbmltcG9ydCB7IGNyZWF0ZVJlcXVpcmUgfSBmcm9tIFwibW9kdWxlXCI7XG5pbXBvcnQgcGF0aCBmcm9tIFwicGF0aFwiO1xuaW1wb3J0IHByb2Nlc3MgZnJvbSBcInByb2Nlc3NcIjtcbmltcG9ydCB7IHRzaWNsaSB9IGZyb20gXCJ0c2ljbGlcIjtcbmltcG9ydCB7IFNvbmFtdSB9IGZyb20gXCIuLi9hcGlcIjtcbmltcG9ydCB0eXBlIHsgU29uYW11REJDb25maWcgfSBmcm9tIFwiLi4vZGF0YWJhc2UvZGJcIjtcbmltcG9ydCB7IEVudGl0eU1hbmFnZXIgfSBmcm9tIFwiLi4vZW50aXR5L2VudGl0eS1tYW5hZ2VyXCI7XG5pbXBvcnQgeyBNaWdyYXRvciB9IGZyb20gXCIuLi9taWdyYXRpb24vbWlncmF0b3JcIjtcbmltcG9ydCB7IEZpeHR1cmVNYW5hZ2VyIH0gZnJvbSBcIi4uL3Rlc3RpbmcvZml4dHVyZS1tYW5hZ2VyXCI7XG5pbXBvcnQgeyBleGlzdHMgfSBmcm9tIFwiLi4vdXRpbHMvZnMtdXRpbHNcIjtcbmltcG9ydCB7IGZpbmRBcGlSb290UGF0aCB9IGZyb20gXCIuLi91dGlscy91dGlsc1wiO1xuaW1wb3J0IHsgQlVJTERfRElSLCBTV0NfQlVJTERfQ09NTUFORCwgVFNDX1RZUEVfQ0hFQ0tfQ09NTUFORCB9IGZyb20gXCIuL2J1aWxkLWNvbmZpZ1wiO1xuXG5sZXQgbWlncmF0b3I6IE1pZ3JhdG9yO1xuXG5hc3luYyBmdW5jdGlvbiBib290c3RyYXAoKSB7XG4gIGNvbnN0IG5vdFRvSW5pdCA9IFtcImRldlwiLCBcImJ1aWxkXCIsIFwic3RhcnRcIl0uaW5jbHVkZXMocHJvY2Vzcy5hcmd2WzJdID8/IFwiXCIpO1xuICBpZiAoIW5vdFRvSW5pdCkge1xuICAgIGF3YWl0IFNvbmFtdS5pbml0KGZhbHNlLCBmYWxzZSk7XG4gIH1cblxuICB0cnkge1xuICAgIGF3YWl0IHRzaWNsaShwcm9jZXNzLmFyZ3YsIHtcbiAgICAgIHR5cGVzOiB7XG4gICAgICAgIFwiI2VudGl0eUlkXCI6IHtcbiAgICAgICAgICB0eXBlOiBcImF1dG9jb21wbGV0ZVwiLFxuICAgICAgICAgIG5hbWU6IFwiI2VudGl0eUlkXCIsXG4gICAgICAgICAgbWVzc2FnZTogXCJQbGVhc2UgaW5wdXQgI2VudGl0eUlkXCIsXG4gICAgICAgICAgY2hvaWNlczogRW50aXR5TWFuYWdlci5nZXRBbGxQYXJlbnRJZHMoKS5tYXAoKGVudGl0eUlkKSA9PiAoe1xuICAgICAgICAgICAgdGl0bGU6IGVudGl0eUlkLFxuICAgICAgICAgICAgdmFsdWU6IGVudGl0eUlkLFxuICAgICAgICAgIH0pKSxcbiAgICAgICAgfSxcbiAgICAgICAgXCIjcmVjb3JkSWRzXCI6IFwibnVtYmVyW11cIixcbiAgICAgICAgXCIjbmFtZVwiOiBcInN0cmluZ1wiLFxuICAgICAgfSxcbiAgICAgIGFyZ3M6IFtcbiAgICAgICAgW1wiZml4dHVyZVwiLCBcImluaXRcIl0sXG4gICAgICAgIFtcImZpeHR1cmVcIiwgXCJpbXBvcnRcIiwgXCIjZW50aXR5SWRcIiwgXCIjcmVjb3JkSWRzXCJdLFxuICAgICAgICBbXCJmaXh0dXJlXCIsIFwic3luY1wiXSxcbiAgICAgICAgW1wibWlncmF0ZVwiLCBcInJ1blwiXSxcbiAgICAgICAgW1wibWlncmF0ZVwiLCBcImNoZWNrXCJdLFxuICAgICAgICBbXCJtaWdyYXRlXCIsIFwicm9sbGJhY2tcIl0sXG4gICAgICAgIFtcIm1pZ3JhdGVcIiwgXCJyZXNldFwiXSxcbiAgICAgICAgW1wibWlncmF0ZVwiLCBcImNsZWFyXCJdLFxuICAgICAgICBbXCJtaWdyYXRlXCIsIFwic3RhdHVzXCJdLFxuICAgICAgICBbXCJzdHViXCIsIFwicHJhY3RpY2VcIiwgXCIjbmFtZVwiXSxcbiAgICAgICAgW1wic3R1YlwiLCBcImVudGl0eVwiLCBcIiNuYW1lXCJdLFxuICAgICAgICBbXCJzY2FmZm9sZFwiLCBcIm1vZGVsXCIsIFwiI2VudGl0eUlkXCJdLFxuICAgICAgICBbXCJzY2FmZm9sZFwiLCBcIm1vZGVsX3Rlc3RcIiwgXCIjZW50aXR5SWRcIl0sXG4gICAgICAgIFtcInNjYWZmb2xkXCIsIFwidmlld19saXN0XCIsIFwiI2VudGl0eUlkXCJdLFxuICAgICAgICBbXCJzY2FmZm9sZFwiLCBcInZpZXdfZm9ybVwiLCBcIiNlbnRpdHlJZFwiXSxcbiAgICAgICAgW1wic3luY1wiXSxcbiAgICAgICAgW1wiZGV2XCJdLFxuICAgICAgICBbXCJidWlsZFwiXSxcbiAgICAgICAgW1wic3RhcnRcIl0sXG4gICAgICBdLFxuICAgICAgcnVubmVyczoge1xuICAgICAgICBtaWdyYXRlX3N0YXR1cyxcbiAgICAgICAgbWlncmF0ZV9ydW4sXG4gICAgICAgIGZpeHR1cmVfaW5pdCxcbiAgICAgICAgZml4dHVyZV9pbXBvcnQsXG4gICAgICAgIGZpeHR1cmVfc3luYyxcbiAgICAgICAgc3R1Yl9wcmFjdGljZSxcbiAgICAgICAgc3R1Yl9lbnRpdHksXG4gICAgICAgIHNjYWZmb2xkX21vZGVsLFxuICAgICAgICBzY2FmZm9sZF9tb2RlbF90ZXN0LFxuICAgICAgICAvLyBzY2FmZm9sZF92aWV3X2xpc3QsXG4gICAgICAgIC8vIHNjYWZmb2xkX3ZpZXdfZm9ybSxcbiAgICAgICAgc3luYyxcbiAgICAgICAgZGV2LFxuICAgICAgICBidWlsZCxcbiAgICAgICAgc3RhcnQsXG4gICAgICB9LFxuICAgIH0pO1xuICB9IGZpbmFsbHkge1xuICAgIGF3YWl0IFNvbmFtdS5kZXN0cm95KCk7XG4gIH1cbn1cblxuYm9vdHN0cmFwKCkuZmluYWxseShhc3luYyAoKSA9PiB7XG4gIGF3YWl0IEZpeHR1cmVNYW5hZ2VyLmRlc3Ryb3koKTtcbn0pO1xuXG4vKipcbiAqIHBucG0gc3luYyDtlZjrqbQg7Iuk7ZaJ65CY64qUIO2VqOyImOyeheuLiOuLpC5cbiAqIO2UhOuhnOygne2KuOulvCDsi7Htgaztlanri4jri6QuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHN5bmMoKSB7XG4gIGF3YWl0IFNvbmFtdS5zeW5jZXIuc3luYygpO1xufVxuXG4vKipcbiAqIHBucG0gZGV2IO2VmOuptCDsi6TtlonrkJjripQg7ZWo7IiY7J6F64uI64ukLlxuICog7ZSE66Gc7KCd7Yq47JeQIOuMgO2VtCBITVIg7KeA7JuQ7ZWY64qUIOqwnOuwnCDshJzrsoTrpbwg652E7JuM7KSN64uI64ukLlxuICpcbiAqIFR5cGVTY3JpcHTrpbwg67CU66GcIOyLpO2Wie2VoCDsiJgg7J6I64+E66GdIEBzb25hbXUta2l0L3RzLWxvYWRlcuulvCxcbiAqIEhNUuydhCDsp4Dsm5DtlZjquLAg7JyE7ZW0IEBzb25hbXUta2l0L2htci1ob29r7J2EIGltcG9ydO2VmOupsCxcbiAqIOyGjOyKpOuntSDsp4Dsm5DsnYQg7JyE7ZW0IC0tZW5hYmxlLXNvdXJjZS1tYXBzIO2UjOuemOq3uOulvCDtj6ztlajtlZjsl6wg7Iuk7ZaJ7ZWp64uI64ukLlxuICpcbiAqIOydtOuVjCBAc29uYW11LWtpdC90cy1sb2FkZXLsmYAgQHNvbmFtdS1raXQvaG1yLWhvb2vripQgc29uYW116rCAIOyekOyytOyggeycvOuhnCDqsIDsp4Dqs6Ag7J6I64qUIGRlcGVuZGVuY3nsnoXri4jri6QuXG4gKiDrmJDtlZwg7Iuk7ZaJ7JeQIOyCrOyaqe2VmOuKlCBAc29uYW11LWtpdC9obXItcnVubmVy64+EIOuniOywrOqwgOyngOuhnCBzb25hbXXqsIAg7J6Q7LK07KCB7Jy866GcIOqwgOyngOqzoCDsnojripQgZGVwZW5kZW5jeeyeheuLiOuLpC5cbiAqIOuUsOudvOyEnCDsgqzsmqnsnpAg7ZSE66Gc7KCd7Yq47JeQ7ISc64qUIOydtCDshLgg7Yyo7YKk7KeA66W8IOyngeygkSDshKTsuZjtlaAg7ZWE7JqU6rCAIOyXhuyKteuLiOuLpC5cbiAqXG4gKiBTb25hbXUuaW5pdCDsl4bsnbQg7Zi47Lac65CgIOqyg+ydhCDsg4HsoJXtlZjsl6wg6rWs7ZiE65CY7JeI7Iq164uI64ukLlxuICovXG5hc3luYyBmdW5jdGlvbiBkZXYoKSB7XG4gIGNvbnN0IGFwaVJvb3QgPSBmaW5kQXBpUm9vdFBhdGgoKTtcbiAgY29uc3QgZW50cnlQb2ludCA9IFwic3JjL2luZGV4LnRzXCI7XG5cbiAgY29uc29sZS5sb2coY2hhbGsueWVsbG93LmJvbGQoXCLwn5qAIFN0YXJ0aW5nIFNvbmFtdSBkZXYgc2VydmVyLi4uXFxuXCIpKTtcblxuICAvLyDsnbQgc29uYW11IO2MqO2CpOyngOqwgCBkZXBlbmRlbmNpZXProZwg6rCA7KeA6rOgIOyeiOuKlCBAc29uYW11LWtpdC9obXItcnVubmVy7J2YIGJpbi9ydW4uanPrpbwg7IKs7Jqp7ZWp64uI64ukLlxuICAvLyDsnbQg6rK966GcKC9iaW4vcnVuLmpzKeuKlCBAc29uYW11LWtpdC9obXItcnVubmVy7J2YIHBhY2thZ2UuanNvbuydmCBiaW4g7ZWE65Oc7JeQIOuqheyLnOuQmOyWtCDsnojripQg6re46rKD6rO8IOqwmeyKteuLiOuLpC5cbiAgY29uc3QgaG90UnVubmVyQmluUGF0aCA9IGNyZWF0ZVJlcXVpcmUoaW1wb3J0Lm1ldGEudXJsKS5yZXNvbHZlKFxuICAgIFwiQHNvbmFtdS1raXQvaG1yLXJ1bm5lci9iaW4vcnVuLmpzXCIsXG4gICk7XG5cbiAgY29uc3Qgc2VydmVyUHJvY2VzcyA9IHNwYXduKFxuICAgIHByb2Nlc3MuZXhlY1BhdGgsIC8vIG5vZGVcbiAgICBbXG4gICAgICBob3RSdW5uZXJCaW5QYXRoLCAvLyDsnbTroIfqsowg7ZW07IScIGhvdC1ydW5uZXLrpbwg7Iuk7ZaJ7ZWY6rWs7JqUXG4gICAgICBcIi0tY2xlYXItc2NyZWVuPWZhbHNlXCIsIC8vIOydtO2VmCBob3QtcnVubmVy7JeQ6rKMIOuEmOqyqOykhCDsnbjsnpDrk6TsnoXri4jri6QuXG4gICAgICBcIi0tbm9kZS1hcmdzPS0taW1wb3J0PXNvbmFtdS90cy1sb2FkZXItcmVnaXN0ZXJcIiwgLy8gVHlwZVNjcmlwdCDshJztj6ztirjrpbwg7JyE7ZWcIOuhnOuNlCxcbiAgICAgIFwiLS1ub2RlLWFyZ3M9LS1pbXBvcnQ9c29uYW11L2htci1ob29rLXJlZ2lzdGVyXCIsIC8vIEhNUuydhCDsp4Dsm5DtlZjquLAg7JyE7ZWcIGhvb2ssXG4gICAgICBcIi0tbm9kZS1hcmdzPS0tZW5hYmxlLXNvdXJjZS1tYXBzXCIsIC8vIOq3uOumrOqzoCDshozsiqTrp7Ug7KeA7JuQ7J2EIOychO2VnCDtlIzrnpjqt7jsnoXri4jri6QuXG4gICAgICBcIi0tb24ta2V5PXI6cmVzdGFydDpSZXN0YXJ0IHNlcnZlclwiLCAvLyByIOuIhOultOuptCDshJzrsoQg7J6s7Iuc7J6R7ZWY6rKMIO2VtOykmOyalC5cbiAgICAgIGAtLW9uLWtleT1mOnNoZWxsKHJtICR7cGF0aC5qb2luKGFwaVJvb3QsIFwic29uYW11LmxvY2tcIil9KTpyZXN0YXJ0OkZvcmNlIHJlc3RhcnRgLCAvLyBmIOuIhOultOuptCBzb25hbXUubG9jayDtjIzsnbzsnYQg7KeA7Jqw6rOgIOyEnOuyhCDsnqzsi5zsnpHtlZjqsowg7ZW07KSY7JqULlxuXG4gICAgICBcIi0tb24ta2V5PWVudGVyOnNoZWxsKGVjaG8gaGkpOktleSBiaW5kaW5nIHRlc3RcIiwgLy8gZW50ZXLrpbwga2V566GcIOyTuCDsiJgg7J6I7J2M7J2EIOuztOydtOq4sCDsnITtlZwg7YWM7Iqk7Yq47J6F64uI64ukLlxuICAgICAgXCItLW9uLWtleT1jdHJsK2YgY3RybCtmOnNoZWxsKGdpdCBwdWxsICYmIHBucG0gaW5zdGFsbCAmJiBwbnBtIC0tZmlsdGVyIHNvbmFtdSBidWlsZCAmJiBlY2hvICdTb25hbXUgaXMgbm93IHVwLXRvLWRhdGUhJyk6cmVzdGFydDpQdWxsICYgaW5zdGFsbCAmIGJ1aWxkICYgcmVzdGFydFwiLCAvLyBtb2RpZmllcuyZgOydmCDsobDtlaksIOq3uOumrOqzoCDrkZAg6rCc7J2YIGNob3Jk66W8IOyCrOyaqe2VoCDsiJgg7J6I7J2M7J2EIOuztOydtOq4sCDsnITtlZwg7YWM7Iqk7Yq47J6F64uI64ukLlxuICAgICAgZW50cnlQb2ludCwgLy8g66eI7KeA66eJ7Jy866GcIOyLpOygnCDsi6TtlontlaAg7Iqk7YGs66a97Yq47J2YIOqyveuhnOulvCDrhJjqsqjspI3ri4jri6QuXG4gICAgXSxcbiAgICB7XG4gICAgICBjd2Q6IGFwaVJvb3QsXG4gICAgICBzdGRpbzogXCJpbmhlcml0XCIsXG4gICAgICBlbnY6IHtcbiAgICAgICAgLi4ucHJvY2Vzcy5lbnYsXG4gICAgICAgIE5PREVfRU5WOiBcImRldmVsb3BtZW50XCIsXG4gICAgICAgIEhPVDogXCJ5ZXNcIiwgLy8g7JaY6rCAIOyeiOyWtOyVvCBITVLsnbQg7Zmc7ISx7ZmU65Cp64uI64ukLlxuICAgICAgICBBUElfUk9PVF9QQVRIOiBhcGlSb290LCAvLyDsnbQg6rK966Gc6rCAIGhtci1ob29r7J2YIOujqO2KuCDrlJTroInthqDrpqzqsIAg65Cp64uI64ukLlxuICAgICAgfSxcbiAgICB9LFxuICApO1xuXG4gIC8vIOyiheujjCDsspjrpqxcbiAgY29uc3QgY2xlYW51cCA9ICgpID0+IHtcbiAgICBjb25zb2xlLmxvZyhjaGFsay55ZWxsb3coXCJcXG5cXG7wn5GLIFNodXR0aW5nIGRvd24uLi5cIikpO1xuICAgIHNlcnZlclByb2Nlc3Mua2lsbChcIlNJR1RFUk1cIik7XG4gICAgcHJvY2Vzcy5leGl0KDApO1xuICB9O1xuXG4gIHByb2Nlc3Mub24oXCJTSUdJTlRcIiwgY2xlYW51cCk7XG4gIHByb2Nlc3Mub24oXCJTSUdURVJNXCIsIGNsZWFudXApO1xuXG4gIHNlcnZlclByb2Nlc3Mub24oXCJleGl0XCIsIChjb2RlKSA9PiB7XG4gICAgaWYgKGNvZGUgIT09IDApIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoY2hhbGsucmVkKGDinYwgU2VydmVyIGV4aXRlZCB3aXRoIGNvZGUgJHtjb2RlfWApKTtcbiAgICAgIHByb2Nlc3MuZXhpdChjb2RlIHx8IDEpO1xuICAgIH1cbiAgfSk7XG59XG5cbi8qKlxuICogcG5wbSBidWlsZCDtlZjrqbQg7Iuk7ZaJ65CY64qUIO2VqOyImOyeheuLiOuLpC5cbiAqIO2UhOuhnOygne2KuOulvCDruYzrk5ztlanri4jri6QuXG4gKlxuICog67mM65Oc7JeQIO2VhOyalO2VnCAuc3djcmPripQg7ZSE66Gc7KCd7Yq4IOujqO2KuOyXkOyEnCDssL7qs6AsIOyXhuycvOuptCBzb25hbXXqsIAg6rSA66as7ZWY64qUIC5zd2NyYy5wcm9qZWN0LWRlZmF1bHTrpbwg7IKs7Jqp7ZWp64uI64ukLlxuICogc29uYW11LmNvbmZpZy50c+uKlCBzcmPsl5Ag65Ok7Ja07J6I7KeAIOyViuq4sCDrlYzrrLjsl5AgU1dDX0JVSUxEX0NPTU1BTkTroZwg67mM65Oc65CY7KeAIOyViuyKteuLiOuLpC5cbiAqIOuUsOudvOyEnCDrlLDroZwg67mM65Oc7ZW07KSN64uI64ukLlxuICpcbiAqIFNvbmFtdS5pbml0IOyXhuydtCDtmLjstpzrkKAg6rKD7J2EIOyDgeygle2VmOyXrCDqtaztmITrkJjsl4jsirXri4jri6QuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGJ1aWxkKCkge1xuICBjb25zdCBhcGlSb290ID0gZmluZEFwaVJvb3RQYXRoKCk7XG5cbiAgLy8g7Lac66ClIOuUlOugie2GoOumrOulvCDsoJzqsbDtlanri4jri6QuXG4gIHRyeSB7XG4gICAgY29uc29sZS5sb2coY2hhbGsuYmx1ZShcIlJlbW92aW5nIGJ1aWxkIGRpcmVjdG9yeS4uLlwiKSk7XG4gICAgaWYgKGF3YWl0IGV4aXN0cyhCVUlMRF9ESVIpKSB7XG4gICAgICBhd2FpdCBybShCVUlMRF9ESVIsIHsgcmVjdXJzaXZlOiB0cnVlLCBmb3JjZTogdHJ1ZSB9KTtcbiAgICB9XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY29uc29sZS5lcnJvcihjaGFsay5yZWQoXCJSZW1vdmUgYnVpbGQgZGlyZWN0b3J5IGZhaWxlZC5cIiksIGVycm9yKTtcbiAgICBwcm9jZXNzLmV4aXQoMSk7XG4gIH1cblxuICAvLyAuc3djcmMg7YyM7J287J2EIOyngOygle2VqeuLiOuLpC5cbiAgbGV0IHN3Y0ZpbGVQYXRoID0gXCIuc3djcmNcIjtcbiAgdHJ5IHtcbiAgICBpZiAoYXdhaXQgZXhpc3RzKHN3Y0ZpbGVQYXRoKSkge1xuICAgICAgLy8g7IKs7Jqp7J6QIO2UhOuhnOygne2KuOyXkCAuc3djcmPqsIAg7J6I7Jy866m0IOyasOyEoOycvOuhnCDsgqzsmqntlanri4jri6QuXG4gICAgICBjb25zb2xlLmxvZyhjaGFsay5ibHVlKFwiVXNpbmcgLnN3Y3JjIGZyb20gcHJvamVjdCByb290Li4uXCIpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8g7JWE64uI652866m0IHNvbmFtdeqwgCDqtIDrpqztlZjripQgLnN3Y3JjLnByb2plY3QtZGVmYXVsdOulvCDqsIDsoLjri6Qg7JSB64uI64ukLlxuICAgICAgY29uc29sZS5sb2coY2hhbGsuYmx1ZShcIlVzaW5nIGRlZmF1bHQgLnN3Y3JjIGZyb20gc29uYW11IHBhY2thZ2UuLi5cIikpO1xuICAgICAgc3djRmlsZVBhdGggPSBwYXRoLmpvaW4oaW1wb3J0Lm1ldGEuZGlybmFtZSwgXCIuLlwiLCBcIi4uXCIsIFwiLnN3Y3JjLnByb2plY3QtZGVmYXVsdFwiKTtcbiAgICB9XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY29uc29sZS5lcnJvcihjaGFsay5yZWQoXCJTZXR0aW5nIHVwIHN3YyBjb25maWcgZmlsZSBmYWlsZWQuXCIpLCBlcnJvcik7XG4gICAgcHJvY2Vzcy5leGl0KDEpO1xuICB9XG5cbiAgLy8g7IaM7IqkIOuUlOugie2GoOumrOulvCDruYzrk5ztlanri4jri6QuXG4gIHRyeSB7XG4gICAgY29uc29sZS5sb2coY2hhbGsuYmx1ZShcIkJ1aWxkaW5nIHdpdGggc3djLi4uXCIpKTtcbiAgICBleGVjU3luYyhTV0NfQlVJTERfQ09NTUFORChzd2NGaWxlUGF0aCksIHsgY3dkOiBhcGlSb290LCBzdGRpbzogXCJpbmhlcml0XCIgfSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY29uc29sZS5lcnJvcihjaGFsay5yZWQoXCJCdWlsZCBmYWlsZWQuXCIpLCBlcnJvcik7XG4gICAgcHJvY2Vzcy5leGl0KDEpO1xuICB9XG5cbiAgLy8g66eI7KeA66eJ7JeQ64qUIO2DgOyehSDssrTtgazrpbwg7ZW07JqULlxuICB0cnkge1xuICAgIGNvbnNvbGUubG9nKGNoYWxrLmJsdWUoXCJDaGVja2luZyB0eXBlcyB3aXRoIHRzYy4uLlwiKSk7XG4gICAgZXhlY1N5bmMoVFNDX1RZUEVfQ0hFQ0tfQ09NTUFORCwge1xuICAgICAgY3dkOiBhcGlSb290LFxuICAgICAgc3RkaW86IFwiaW5oZXJpdFwiLFxuICAgIH0pO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGNvbnNvbGUuZXJyb3IoY2hhbGsucmVkKFwiVHlwZSBjaGVjayBmYWlsZWQuXCIpLCBlcnJvcik7XG4gICAgcHJvY2Vzcy5leGl0KDEpO1xuICB9XG59XG5cbi8qKlxuICogcG5wbSBzdGFydCDtlZjrqbQg7Iuk7ZaJ65CY64qUIO2VqOyImOyeheuLiOuLpC5cbiAqIOu5jOuTnOuQnCDtlITroZzsoJ3tirjrpbwg7Iuk7ZaJ7ZWp64uI64ukLlxuICpcbiAqIOu5jOuTnOuQnCDqsrDqs7zrrLwoZGlzdCDrlJTroInthqDrpqzsnZggaW5kZXguanMg7JeU7Yq466as7Y+s7J247Yq4KeydtCDsl4bri6TrqbQg7Iuk7ZaJ7J2EIOykkeuLqO2VqeuLiOuLpC5cbiAqIOyGjOyKpOuntSDsp4Dsm5Dqs7wgZG90ZW52IOyngOybkOydhCDtj6ztlajtlZjsl6wg7Iuk7ZaJ7ZWp64uI64ukLlxuICpcbiAqIFNvbmFtdS5pbml0IOyXhuydtCDtmLjstpzrkKAg6rKD7J2EIOyDgeygle2VmOyXrCDqtaztmITrkJjsl4jsirXri4jri6QuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHN0YXJ0KCkge1xuICBjb25zdCBhcGlSb290ID0gZmluZEFwaVJvb3RQYXRoKCk7XG4gIGNvbnN0IGVudHJ5UG9pbnQgPSBcImRpc3QvaW5kZXguanNcIjtcblxuICBpZiAoIShhd2FpdCBleGlzdHMoZW50cnlQb2ludCkpKSB7XG4gICAgY29uc29sZS5sb2coY2hhbGsucmVkKGAke2VudHJ5UG9pbnR9IG5vdCBmb3VuZC4gUGxlYXNlIGJ1aWxkIHlvdXIgcHJvamVjdCBmaXJzdC5gKSk7XG4gICAgY29uc29sZS5sb2coY2hhbGsuYmx1ZShcIlJ1bjogeWFybiBzb25hbXUgYnVpbGRcIikpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHsgc3Bhd24gfSA9IGF3YWl0IGltcG9ydChcImNoaWxkX3Byb2Nlc3NcIik7XG4gIGNvbnN0IHNlcnZlclByb2Nlc3MgPSBzcGF3bihcbiAgICBwcm9jZXNzLmV4ZWNQYXRoLFxuICAgIFtcIi0tZW5hYmxlLXNvdXJjZS1tYXBzXCIsIFwiLXJcIiwgXCJkb3RlbnYvY29uZmlnXCIsIGVudHJ5UG9pbnRdLFxuICAgIHtcbiAgICAgIGN3ZDogYXBpUm9vdCxcbiAgICAgIHN0ZGlvOiBcImluaGVyaXRcIixcbiAgICB9LFxuICApO1xuXG4gIHByb2Nlc3Mub24oXCJTSUdJTlRcIiwgKCkgPT4ge1xuICAgIHNlcnZlclByb2Nlc3Mua2lsbChcIlNJR1RFUk1cIik7XG4gICAgcHJvY2Vzcy5leGl0KDApO1xuICB9KTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gc2V0dXBNaWdyYXRvcigpIHtcbiAgLy8gbWlncmF0b3JcbiAgbWlncmF0b3IgPSBuZXcgTWlncmF0b3IoKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gc2V0dXBGaXh0dXJlTWFuYWdlcigpIHtcbiAgRml4dHVyZU1hbmFnZXIuaW5pdCgpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBtaWdyYXRlX3J1bigpIHtcbiAgYXdhaXQgc2V0dXBNaWdyYXRvcigpO1xuXG4gIGF3YWl0IG1pZ3JhdG9yLnJ1bkFjdGlvbihcbiAgICBcImFwcGx5XCIsXG4gICAgT2JqZWN0LmtleXMoU29uYW11LmRiQ29uZmlnKSBhcyAoa2V5b2YgU29uYW11REJDb25maWcpW10gLyrsi7kg64ukISovLFxuICApO1xufVxuXG5hc3luYyBmdW5jdGlvbiBtaWdyYXRlX3N0YXR1cygpIHtcbiAgYXdhaXQgc2V0dXBNaWdyYXRvcigpO1xuXG4gIGNvbnN0IHN0YXR1cyA9IGF3YWl0IG1pZ3JhdG9yLmdldFN0YXR1cygpO1xuICAvLyBzdGF0dXM7XG4gIGNvbnNvbGUubG9nKHN0YXR1cyk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGZpeHR1cmVfaW5pdCgpIHtcbiAgY29uc3Qgc3JjQ29uZmlnID0gU29uYW11LmRiQ29uZmlnLmRldmVsb3BtZW50X21hc3RlcjtcbiAgY29uc3QgdGFyZ2V0cyA9IFtcbiAgICB7XG4gICAgICBsYWJlbDogXCIoUkVNT1RFKSBGaXh0dXJlIERCXCIsXG4gICAgICBjb25maWc6IFNvbmFtdS5kYkNvbmZpZy5maXh0dXJlX3JlbW90ZSxcbiAgICB9LFxuICAgIHtcbiAgICAgIGxhYmVsOiBcIihMT0NBTCkgVGVzdGluZyBEQlwiLFxuICAgICAgY29uZmlnOiBTb25hbXUuZGJDb25maWcudGVzdCxcbiAgICAgIHRvU2tpcDogKCgpID0+IHtcbiAgICAgICAgY29uc3QgcmVtb3RlQ29ubiA9IFNvbmFtdS5kYkNvbmZpZy5maXh0dXJlX3JlbW90ZS5jb25uZWN0aW9uIGFzIEtuZXguQ29ubmVjdGlvbkNvbmZpZztcbiAgICAgICAgY29uc3QgbG9jYWxDb25uID0gU29uYW11LmRiQ29uZmlnLnRlc3QuY29ubmVjdGlvbiBhcyBLbmV4LkNvbm5lY3Rpb25Db25maWc7XG4gICAgICAgIHJldHVybiByZW1vdGVDb25uLmhvc3QgPT09IGxvY2FsQ29ubi5ob3N0ICYmIHJlbW90ZUNvbm4uZGF0YWJhc2UgPT09IGxvY2FsQ29ubi5kYXRhYmFzZTtcbiAgICAgIH0pKCksXG4gICAgfSxcbiAgXSBhcyB7XG4gICAgbGFiZWw6IHN0cmluZztcbiAgICBjb25maWc6IEtuZXguQ29uZmlnO1xuICAgIHRvU2tpcD86IGJvb2xlYW47XG4gIH1bXTtcblxuICAvLyAxLiDquLDspIBEQiDsiqTtgqTrp4jrpbwg642k7ZSEXG4gIGNvbnNvbGUubG9nKFwiRFVNUC4uLlwiKTtcbiAgY29uc3QgZHVtcEZpbGVuYW1lID0gYC90bXAvc29uYW11LWZpeHR1cmUtaW5pdC0ke0RhdGUubm93KCl9LnNxbGA7XG4gIGNvbnN0IHNyY0Nvbm4gPSBzcmNDb25maWcuY29ubmVjdGlvbiBhcyBLbmV4LkNvbm5lY3Rpb25Db25maWc7XG4gIGNvbnN0IG1pZ3JhdGlvbnNEdW1wID0gYC90bXAvc29uYW11LWZpeHR1cmUtaW5pdC1taWdyYXRpb25zLSR7RGF0ZS5ub3coKX0uc3FsYDtcbiAgZXhlY1N5bmMoXG4gICAgYG15c3FsZHVtcCAtaCR7c3JjQ29ubi5ob3N0fSAtdSR7c3JjQ29ubi51c2VyfSAtcCR7c3JjQ29ubi5wYXNzd29yZH0gLS1zaW5nbGUtdHJhbnNhY3Rpb24gLWQgLS1uby1jcmVhdGUtZGIgLS10cmlnZ2VycyAke3NyY0Nvbm4uZGF0YWJhc2V9ID4gJHtkdW1wRmlsZW5hbWV9YCxcbiAgKTtcbiAgY29uc3QgX2RiID0ga25leChzcmNDb25maWcpO1xuICBjb25zdCBbW21pZ3JhdGlvbnNdXSA9IGF3YWl0IF9kYi5yYXcoXG4gICAgXCJTRUxFQ1QgQ09VTlQoKikgYXMgY291bnQgRlJPTSBpbmZvcm1hdGlvbl9zY2hlbWEudGFibGVzIFdIRVJFIHRhYmxlX3NjaGVtYSA9ID8gQU5EIHRhYmxlX25hbWUgPSAna25leF9taWdyYXRpb25zJ1wiLFxuICAgIFtzcmNDb25uLmRhdGFiYXNlXSxcbiAgKTtcbiAgaWYgKG1pZ3JhdGlvbnMuY291bnQgPiAwKSB7XG4gICAgZXhlY1N5bmMoXG4gICAgICBgbXlzcWxkdW1wIC1oJHtzcmNDb25uLmhvc3R9IC11JHtzcmNDb25uLnVzZXJ9IC1wJHtzcmNDb25uLnBhc3N3b3JkfSAtLXNpbmdsZS10cmFuc2FjdGlvbiAtLW5vLWNyZWF0ZS1kYiAtLXRyaWdnZXJzICR7c3JjQ29ubi5kYXRhYmFzZX0ga25leF9taWdyYXRpb25zIGtuZXhfbWlncmF0aW9uc19sb2NrID4gJHttaWdyYXRpb25zRHVtcH1gLFxuICAgICk7XG4gIH1cblxuICAvLyAyLiDrjIDsg4FEQiDqsIHqsIHsl5Ag64yA7ZWY7JesIOyhtOyerOyXrOu2gCDtmZXsnbgg7ZuEIOu2k+q4sFxuICBmb3IgYXdhaXQgKGNvbnN0IHsgbGFiZWwsIGNvbmZpZywgdG9Ta2lwIH0gb2YgdGFyZ2V0cykge1xuICAgIGNvbnN0IGNvbm4gPSBjb25maWcuY29ubmVjdGlvbiBhcyBLbmV4LkNvbm5lY3Rpb25Db25maWc7XG5cbiAgICBpZiAodG9Ta2lwID09PSB0cnVlKSB7XG4gICAgICBjb25zb2xlLmxvZyhjaGFsay5yZWQoYCR7bGFiZWx9OiBTa2lwcGVkIWApKTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGNvbnN0IGRiID0ga25leCh7XG4gICAgICAuLi5jb25maWcsXG4gICAgICBjb25uZWN0aW9uOiB7XG4gICAgICAgIC4uLigoY29uZmlnLmNvbm5lY3Rpb24gPz8ge30pIGFzIEtuZXguQ29ubmVjdGlvbkNvbmZpZyksXG4gICAgICAgIGRhdGFiYXNlOiB1bmRlZmluZWQsXG4gICAgICB9LFxuICAgIH0pO1xuICAgIGNvbnN0IFtbcm93XV0gPSBhd2FpdCBkYi5yYXcoYFNIT1cgREFUQUJBU0VTIExJS0UgXCIke2Nvbm4uZGF0YWJhc2V9XCJgKTtcbiAgICBpZiAocm93KSB7XG4gICAgICBjb25zb2xlLmxvZyhjaGFsay55ZWxsb3coYCR7bGFiZWx9OiBEYXRhYmFzZSBcIiR7Y29ubi5kYXRhYmFzZX1cIiBBbHJlYWR5IGV4aXN0c2ApKTtcbiAgICAgIGF3YWl0IGRiLmRlc3Ryb3koKTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGNvbnNvbGUubG9nKGBTWU5DIHRvICR7bGFiZWx9Li4uYCk7XG4gICAgY29uc3QgbXlzcWxDbWQgPSBgbXlzcWwgLWgke2Nvbm4uaG9zdH0gLXUke2Nvbm4udXNlcn0gLXAke2Nvbm4ucGFzc3dvcmR9YDtcbiAgICBleGVjU3luYyhgJHtteXNxbENtZH0gLWUgJ0RST1AgREFUQUJBU0UgSUYgRVhJU1RTIFxcYCR7Y29ubi5kYXRhYmFzZX1cXGAnYCk7XG4gICAgZXhlY1N5bmMoYCR7bXlzcWxDbWR9IC1lICdDUkVBVEUgREFUQUJBU0UgXFxgJHtjb25uLmRhdGFiYXNlfVxcYCdgKTtcbiAgICBleGVjU3luYyhgJHtteXNxbENtZH0gJHtjb25uLmRhdGFiYXNlfSA8ICR7ZHVtcEZpbGVuYW1lfWApO1xuICAgIGlmIChhd2FpdCBleGlzdHMobWlncmF0aW9uc0R1bXApKSB7XG4gICAgICBleGVjU3luYyhgJHtteXNxbENtZH0gJHtjb25uLmRhdGFiYXNlfSA8ICR7bWlncmF0aW9uc0R1bXB9YCk7XG4gICAgfVxuXG4gICAgYXdhaXQgZGIuZGVzdHJveSgpO1xuICB9XG5cbiAgYXdhaXQgX2RiLmRlc3Ryb3koKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZml4dHVyZV9pbXBvcnQoZW50aXR5SWQ6IHN0cmluZywgcmVjb3JkSWRzOiBudW1iZXJbXSkge1xuICBhd2FpdCBzZXR1cEZpeHR1cmVNYW5hZ2VyKCk7XG5cbiAgYXdhaXQgRml4dHVyZU1hbmFnZXIuaW1wb3J0Rml4dHVyZShlbnRpdHlJZCwgcmVjb3JkSWRzKTtcbiAgYXdhaXQgRml4dHVyZU1hbmFnZXIuc3luYygpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBmaXh0dXJlX3N5bmMoKSB7XG4gIGF3YWl0IHNldHVwRml4dHVyZU1hbmFnZXIoKTtcblxuICBhd2FpdCBGaXh0dXJlTWFuYWdlci5zeW5jKCk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHN0dWJfcHJhY3RpY2UobmFtZTogc3RyaW5nKSB7XG4gIGNvbnN0IHByYWN0aWNlRGlyID0gcGF0aC5qb2luKFNvbmFtdS5hcGlSb290UGF0aCwgXCJzcmNcIiwgXCJwcmFjdGljZXNcIik7XG4gIGNvbnN0IGZpbGVOYW1lcyA9IGF3YWl0IHJlYWRkaXIocHJhY3RpY2VEaXIpO1xuXG4gIGNvbnN0IG1heFNlcU5vID0gYXdhaXQgKGFzeW5jICgpID0+IHtcbiAgICBpZiAoIShhd2FpdCBleGlzdHMocHJhY3RpY2VEaXIpKSkge1xuICAgICAgYXdhaXQgbWtkaXIocHJhY3RpY2VEaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IGZpbHRlcmVkU2VxcyA9IGZpbGVOYW1lc1xuICAgICAgLmZpbHRlcigoZmlsZU5hbWUpID0+IGZpbGVOYW1lLnN0YXJ0c1dpdGgoXCJwXCIpICYmIGZpbGVOYW1lLmVuZHNXaXRoKFwiLnRzXCIpKVxuICAgICAgLm1hcCgoZmlsZU5hbWUpID0+IHtcbiAgICAgICAgY29uc3QgWywgc2VxTm9dID0gZmlsZU5hbWUubWF0Y2goL15wKFswLTldKyktLykgPz8gW1wiMFwiLCBcIjBcIl07XG4gICAgICAgIHJldHVybiBwYXJzZUludChzZXFObyk7XG4gICAgICB9KVxuICAgICAgLnNvcnQoKGEsIGIpID0+IGIgLSBhKTtcblxuICAgIGlmIChmaWx0ZXJlZFNlcXMubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIGZpbHRlcmVkU2Vxc1swXTtcbiAgICB9XG5cbiAgICByZXR1cm4gMDtcbiAgfSkoKTtcblxuICBjb25zdCBjdXJyZW50U2VxTm8gPSBtYXhTZXFObyArIDE7XG4gIGNvbnN0IGZpbGVOYW1lID0gYHAke2N1cnJlbnRTZXFOb30tJHtuYW1lfS50c2A7XG4gIGNvbnN0IGRzdFBhdGggPSBwYXRoLmpvaW4ocHJhY3RpY2VEaXIsIGZpbGVOYW1lKTtcblxuICBjb25zdCBjb2RlID0gW1xuICAgIGBpbXBvcnQgeyBTb25hbXUgfSBmcm9tIFwic29uYW11XCI7YCxcbiAgICBcIlwiLFxuICAgIGBjb25zb2xlLmNsZWFyKCk7YCxcbiAgICBgY29uc29sZS5sb2coXCIke2ZpbGVOYW1lfVwiKTtgLFxuICAgIFwiXCIsXG4gICAgYFNvbmFtdS5ydW5TY3JpcHQoYXN5bmMgKCkgPT4ge2AsXG4gICAgYCAvLyBUT0RPYCxcbiAgICBgfSk7YCxcbiAgICBcIlwiLFxuICBdLmpvaW4oXCJcXG5cIik7XG4gIGF3YWl0IHdyaXRlRmlsZShkc3RQYXRoLCBjb2RlKTtcblxuICBleGVjU3luYyhgY29kZSAke2RzdFBhdGh9YCk7XG5cbiAgY29uc3QgcnVuQ29kZSA9IGB5YXJuIG5vZGUgLXIgZG90ZW52L2NvbmZpZyAtLWVuYWJsZS1zb3VyY2UtbWFwcyBkaXN0L3ByYWN0aWNlcy8ke2ZpbGVOYW1lLnJlcGxhY2UoXG4gICAgXCIudHNcIixcbiAgICBcIi5qc1wiLFxuICApfWA7XG4gIGNvbnNvbGUubG9nKGAke2NoYWxrLmJsdWUocnVuQ29kZSl9IGNvcGllZCB0byBjbGlwYm9hcmQuYCk7XG4gIGV4ZWNTeW5jKGBlY2hvIFwiJHtydW5Db2RlfVwiIHwgcGJjb3B5YCk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHN0dWJfZW50aXR5KGVudGl0eUlkOiBzdHJpbmcpIHtcbiAgYXdhaXQgU29uYW11LnN5bmNlci5jcmVhdGVFbnRpdHkoeyBlbnRpdHlJZCwgdGl0bGU6IGVudGl0eUlkIH0pO1xufVxuXG5hc3luYyBmdW5jdGlvbiBzY2FmZm9sZF9tb2RlbChlbnRpdHlJZDogc3RyaW5nKSB7XG4gIGF3YWl0IFNvbmFtdS5zeW5jZXIuZ2VuZXJhdGVUZW1wbGF0ZShcIm1vZGVsXCIsIHtcbiAgICBlbnRpdHlJZCxcbiAgfSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHNjYWZmb2xkX21vZGVsX3Rlc3QoZW50aXR5SWQ6IHN0cmluZykge1xuICBhd2FpdCBTb25hbXUuc3luY2VyLmdlbmVyYXRlVGVtcGxhdGUoXCJtb2RlbF90ZXN0XCIsIHtcbiAgICBlbnRpdHlJZCxcbiAgfSk7XG59XG4iXSwibmFtZXMiOlsiY2hhbGsiLCJkb3RlbnYiLCJjb25maWciLCJleGVjU3luYyIsInNwYXduIiwibWtkaXIiLCJyZWFkZGlyIiwicm0iLCJ3cml0ZUZpbGUiLCJrbmV4IiwiY3JlYXRlUmVxdWlyZSIsInBhdGgiLCJwcm9jZXNzIiwidHNpY2xpIiwiU29uYW11IiwiRW50aXR5TWFuYWdlciIsIk1pZ3JhdG9yIiwiRml4dHVyZU1hbmFnZXIiLCJleGlzdHMiLCJmaW5kQXBpUm9vdFBhdGgiLCJCVUlMRF9ESVIiLCJTV0NfQlVJTERfQ09NTUFORCIsIlRTQ19UWVBFX0NIRUNLX0NPTU1BTkQiLCJtaWdyYXRvciIsImJvb3RzdHJhcCIsIm5vdFRvSW5pdCIsImluY2x1ZGVzIiwiYXJndiIsImluaXQiLCJ0eXBlcyIsInR5cGUiLCJuYW1lIiwibWVzc2FnZSIsImNob2ljZXMiLCJnZXRBbGxQYXJlbnRJZHMiLCJtYXAiLCJlbnRpdHlJZCIsInRpdGxlIiwidmFsdWUiLCJhcmdzIiwicnVubmVycyIsIm1pZ3JhdGVfc3RhdHVzIiwibWlncmF0ZV9ydW4iLCJmaXh0dXJlX2luaXQiLCJmaXh0dXJlX2ltcG9ydCIsImZpeHR1cmVfc3luYyIsInN0dWJfcHJhY3RpY2UiLCJzdHViX2VudGl0eSIsInNjYWZmb2xkX21vZGVsIiwic2NhZmZvbGRfbW9kZWxfdGVzdCIsInN5bmMiLCJkZXYiLCJidWlsZCIsInN0YXJ0IiwiZGVzdHJveSIsImZpbmFsbHkiLCJzeW5jZXIiLCJhcGlSb290IiwiZW50cnlQb2ludCIsImNvbnNvbGUiLCJsb2ciLCJ5ZWxsb3ciLCJib2xkIiwiaG90UnVubmVyQmluUGF0aCIsInVybCIsInJlc29sdmUiLCJzZXJ2ZXJQcm9jZXNzIiwiZXhlY1BhdGgiLCJqb2luIiwiY3dkIiwic3RkaW8iLCJlbnYiLCJOT0RFX0VOViIsIkhPVCIsIkFQSV9ST09UX1BBVEgiLCJjbGVhbnVwIiwia2lsbCIsImV4aXQiLCJvbiIsImNvZGUiLCJlcnJvciIsInJlZCIsImJsdWUiLCJyZWN1cnNpdmUiLCJmb3JjZSIsInN3Y0ZpbGVQYXRoIiwiZGlybmFtZSIsInNldHVwTWlncmF0b3IiLCJzZXR1cEZpeHR1cmVNYW5hZ2VyIiwicnVuQWN0aW9uIiwiT2JqZWN0Iiwia2V5cyIsImRiQ29uZmlnIiwic3RhdHVzIiwiZ2V0U3RhdHVzIiwic3JjQ29uZmlnIiwiZGV2ZWxvcG1lbnRfbWFzdGVyIiwidGFyZ2V0cyIsImxhYmVsIiwiZml4dHVyZV9yZW1vdGUiLCJ0ZXN0IiwidG9Ta2lwIiwicmVtb3RlQ29ubiIsImNvbm5lY3Rpb24iLCJsb2NhbENvbm4iLCJob3N0IiwiZGF0YWJhc2UiLCJkdW1wRmlsZW5hbWUiLCJEYXRlIiwibm93Iiwic3JjQ29ubiIsIm1pZ3JhdGlvbnNEdW1wIiwidXNlciIsInBhc3N3b3JkIiwiX2RiIiwibWlncmF0aW9ucyIsInJhdyIsImNvdW50IiwiY29ubiIsImRiIiwidW5kZWZpbmVkIiwicm93IiwibXlzcWxDbWQiLCJyZWNvcmRJZHMiLCJpbXBvcnRGaXh0dXJlIiwicHJhY3RpY2VEaXIiLCJhcGlSb290UGF0aCIsImZpbGVOYW1lcyIsIm1heFNlcU5vIiwiZmlsdGVyZWRTZXFzIiwiZmlsdGVyIiwiZmlsZU5hbWUiLCJzdGFydHNXaXRoIiwiZW5kc1dpdGgiLCJzZXFObyIsIm1hdGNoIiwicGFyc2VJbnQiLCJzb3J0IiwiYSIsImIiLCJsZW5ndGgiLCJjdXJyZW50U2VxTm8iLCJkc3RQYXRoIiwicnVuQ29kZSIsInJlcGxhY2UiLCJjcmVhdGVFbnRpdHkiLCJnZW5lcmF0ZVRlbXBsYXRlIl0sIm1hcHBpbmdzIjoiQUFBQSxPQUFPQSxXQUFXLFFBQVE7QUFDMUIsT0FBT0MsWUFBWSxTQUFTO0FBRTVCQSxPQUFPQyxNQUFNO0FBRWIsU0FBU0MsUUFBUSxFQUFFQyxLQUFLLFFBQVEsZ0JBQWdCO0FBQ2hELFNBQVNDLEtBQUssRUFBRUMsT0FBTyxFQUFFQyxFQUFFLEVBQUVDLFNBQVMsUUFBUSxtQkFBYztBQUM1RCxPQUFPQyxVQUF5QixPQUFPO0FBQ3ZDLFNBQVNDLGFB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
@@ -1 +1 @@
1
- {"version":3,"file":"api-parser.d.ts","sourceRoot":"","sources":["../../src/syncer/api-parser.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,WAAW,EAAkB,MAAM,mBAAmB,CAAC;AAGrE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAExD;;;;;GAKG;AACH,wBAAsB,gBAAgB,CAAC,QAAQ,EAAE,YAAY,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CAwGrF"}
1
+ {"version":3,"file":"api-parser.d.ts","sourceRoot":"","sources":["../../src/syncer/api-parser.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,WAAW,EAAkB,MAAM,mBAAmB,CAAC;AAGrE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAExD;;;;;GAKG;AACH,wBAAsB,gBAAgB,CAAC,QAAQ,EAAE,YAAY,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CAyGrF"}
@@ -72,7 +72,8 @@ import { validateMethodName } from "../api/validator.js";
72
72
  // const p = path.join(tmpdir(), "sonamu-syncer-error.json");
73
73
  // writeFileSync(p, JSON.stringify(registeredApis, null, 2));
74
74
  // execSync(`open ${p}`);
75
- throw new Error(`현재 파일에 사전 등록된 API가 없습니다. ${filePath}`);
75
+ // throw new Error(`현재 파일에 사전 등록된 API가 없습니다. ${filePath}`);
76
+ return [];
76
77
  }
77
78
  // 등록된 API에 현재 메소드 타입 정보 확장
78
79
  const extendedApis = currentModelApis.map((api)=>{
@@ -241,4 +242,4 @@ function printNode(node, sourceFile) {
241
242
  return printer.printNode(ts.EmitHint.Unspecified, node, sourceFile);
242
243
  }
243
244
 
244
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zeW5jZXIvYXBpLXBhcnNlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNzZXJ0IGZyb20gXCJhc3NlcnRcIjtcbmltcG9ydCB7IHJlYWRGaWxlIH0gZnJvbSBcImZzL3Byb21pc2VzXCI7XG5pbXBvcnQgaW5mbGVjdGlvbiBmcm9tIFwiaW5mbGVjdGlvblwiO1xuaW1wb3J0IHRzIGZyb20gXCJ0eXBlc2NyaXB0XCI7XG5pbXBvcnQgeyB0eXBlIEV4dGVuZGVkQXBpLCByZWdpc3RlcmVkQXBpcyB9IGZyb20gXCIuLi9hcGkvZGVjb3JhdG9yc1wiO1xuaW1wb3J0IHsgdmFsaWRhdGVNZXRob2ROYW1lIH0gZnJvbSBcIi4uL2FwaS92YWxpZGF0b3JcIjtcbmltcG9ydCB0eXBlIHsgQXBpUGFyYW0sIEFwaVBhcmFtVHlwZSB9IGZyb20gXCIuLi90eXBlcy90eXBlc1wiO1xuaW1wb3J0IHR5cGUgeyBBYnNvbHV0ZVBhdGggfSBmcm9tIFwiLi4vdXRpbHMvcGF0aC11dGlsc1wiO1xuXG4vKipcbiAqIFR5cGVTY3JpcHQg7YyM7J287J2EIO2MjOyLse2VmOyXrCBBUEkg66mU7IaM65OcIOygleuztOulvCDstpTstpztlanri4jri6QuXG4gKiBAYXBpIOuNsOy9lOugiOydtO2EsOqwgCDrtpnsnYAg66mU7IaM65Oc65Ok7J2YIO2DgOyehSDsoJXrs7Trpbwg67aE7ISd7ZWp64uI64ukLlxuICogQHBhcmFtIGZpbGVQYXRoIC0g7YyM7Iux7ZWgIFR5cGVTY3JpcHQg7YyM7J287J2YIOygiOuMgCDqsr3roZxcbiAqIEByZXR1cm5zIEFQSSDrqZTshozrk5wg7KCV67O0IOuwsOyXtCAo7YOA7J6FIO2MjOudvOuvuO2EsCwg7YyM652866+47YSwLCDrpqzthLQg7YOA7J6FIOuTsSlcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlYWRBcGlzRnJvbUZpbGUoZmlsZVBhdGg6IEFic29sdXRlUGF0aCk6IFByb21pc2U8RXh0ZW5kZWRBcGlbXT4ge1xuICBpZiAoIWZpbGVQYXRoLmVuZHNXaXRoKFwiLnRzXCIpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYCR7ZmlsZVBhdGh9IGRvZXMgbm90IHNlZW0gdG8gYmUgYSBUeXBlU2NyaXB0IGZpbGUuIFBsZWFzZSBjaGVjayB0aGUgZmlsZSBwYXRoLiBXZSBvbmx5IHN1cHBvcnQgcGFyc2luZyBUeXBlU2NyaXB0IGZpbGVzLmAsXG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IHNvdXJjZUZpbGUgPSB0cy5jcmVhdGVTb3VyY2VGaWxlKFxuICAgIGZpbGVQYXRoLFxuICAgIChhd2FpdCByZWFkRmlsZShmaWxlUGF0aCkpLnRvU3RyaW5nKCksXG4gICAgdHMuU2NyaXB0VGFyZ2V0LkxhdGVzdCxcbiAgKTtcblxuICBjb25zdCBtZXRob2RzOiBPbWl0PEV4dGVuZGVkQXBpLCBcInBhdGhcIiB8IFwib3B0aW9uc1wiPltdID0gW107XG4gIGxldCBtb2RlbE5hbWU6IHN0cmluZyA9IFwiVW5rbm93bk1vZGVsXCI7XG4gIGxldCBtZXRob2ROYW1lOiBzdHJpbmcgPSBcInVua25vd25NZXRob2RcIjtcbiAgY29uc3QgdmlzaXRvciA9IChub2RlOiB0cy5Ob2RlKSA9PiB7XG4gICAgaWYgKHRzLmlzQ2xhc3NEZWNsYXJhdGlvbihub2RlKSkge1xuICAgICAgaWYgKG5vZGUubmFtZSAmJiB0cy5pc0lkZW50aWZpZXIobm9kZS5uYW1lKSkge1xuICAgICAgICBtb2RlbE5hbWUgPSBub2RlLm5hbWUuZXNjYXBlZFRleHQudG9TdHJpbmcoKS5yZXBsYWNlKC9DbGFzcyQvLCBcIlwiKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHRzLmlzTWV0aG9kRGVjbGFyYXRpb24obm9kZSkpIHtcbiAgICAgIGlmICh0cy5pc0lkZW50aWZpZXIobm9kZS5uYW1lKSkge1xuICAgICAgICBtZXRob2ROYW1lID0gbm9kZS5uYW1lLmVzY2FwZWRUZXh0LnRvU3RyaW5nKCk7XG4gICAgICAgIHZhbGlkYXRlTWV0aG9kTmFtZShtZXRob2ROYW1lKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgdHlwZVBhcmFtZXRlcnM6IEFwaVBhcmFtVHlwZS5UeXBlUGFyYW1bXSA9IChub2RlLnR5cGVQYXJhbWV0ZXJzID8/IFtdKS5tYXAoXG4gICAgICAgICh0eXBlUGFyYW0pID0+IHtcbiAgICAgICAgICBjb25zdCB0cCA9IHR5cGVQYXJhbSBhcyB0cy5UeXBlUGFyYW1ldGVyRGVjbGFyYXRpb247XG5cbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdDogXCJ0eXBlLXBhcmFtXCIsXG4gICAgICAgICAgICBpZDogdHAubmFtZS5lc2NhcGVkVGV4dC50b1N0cmluZygpLFxuICAgICAgICAgICAgY29uc3RyYWludDogdHAuY29uc3RyYWludCA/IHJlc29sdmVUeXBlTm9kZSh0cC5jb25zdHJhaW50KSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICB9O1xuICAgICAgICB9LFxuICAgICAgKTtcbiAgICAgIGNvbnN0IHBhcmFtZXRlcnM6IEFwaVBhcmFtW10gPSBub2RlLnBhcmFtZXRlcnMubWFwKChwYXJhbURlYywgaW5kZXgpID0+IHtcbiAgICAgICAgY29uc3QgZGVmYXVsdERlZiA9IHByaW50Tm9kZShwYXJhbURlYy5pbml0aWFsaXplciwgc291cmNlRmlsZSk7XG5cbiAgICAgICAgLy8g6riw67O46rCS7J20IOyeiOuKlCDqsr3smrAgcGFyYW1EZWMudHlwZeqwgCB1bmRlZmluZWTroZwg64KY7Ji0XG5cbiAgICAgICAgcmV0dXJuIHJlc29sdmVQYXJhbURlYyhcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiBwYXJhbURlYy5uYW1lLFxuICAgICAgICAgICAgdHlwZTogcGFyYW1EZWMudHlwZSBhcyB0cy5UeXBlTm9kZSxcbiAgICAgICAgICAgIG9wdGlvbmFsOiBwYXJhbURlYy5xdWVzdGlvblRva2VuICE9PSB1bmRlZmluZWQgfHwgcGFyYW1EZWMuaW5pdGlhbGl6ZXIgIT09IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGRlZmF1bHREZWYsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBpbmRleCxcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuICAgICAgaWYgKG5vZGUudHlwZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihg66as7YS0IO2DgOyeheydtCDquLDsnqzrkJjsp4Ag7JWK7J2AIOuplOyGjOuTnCAke21vZGVsTmFtZX0uJHttZXRob2ROYW1lfWApO1xuICAgICAgfVxuICAgICAgY29uc3QgcmV0dXJuVHlwZSA9IHJlc29sdmVUeXBlTm9kZShub2RlLnR5cGUpO1xuXG4gICAgICBtZXRob2RzLnB1c2goe1xuICAgICAgICBtb2RlbE5hbWUsXG4gICAgICAgIG1ldGhvZE5hbWUsXG4gICAgICAgIHR5cGVQYXJhbWV0ZXJzLFxuICAgICAgICBwYXJhbWV0ZXJzLFxuICAgICAgICByZXR1cm5UeXBlLFxuICAgICAgfSk7XG4gICAgfVxuICAgIHRzLmZvckVhY2hDaGlsZChub2RlLCB2aXNpdG9yKTtcbiAgfTtcbiAgdmlzaXRvcihzb3VyY2VGaWxlKTtcblxuICBpZiAobWV0aG9kcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICAvLyDtmITsnqwg7YyM7J287J2YIOuTseuhneuQnCBBUEkg7ZWE7YSwXG4gIGNvbnN0IGN1cnJlbnRNb2RlbEFwaXMgPSByZWdpc3RlcmVkQXBpcy5maWx0ZXIoKGFwaSkgPT4ge1xuICAgIHJldHVybiBtZXRob2RzLmZpbmQoXG4gICAgICAobWV0aG9kKSA9PiBtZXRob2QubW9kZWxOYW1lID09PSBhcGkubW9kZWxOYW1lICYmIG1ldGhvZC5tZXRob2ROYW1lID09PSBhcGkubWV0aG9kTmFtZSxcbiAgICApO1xuICB9KTtcbiAgaWYgKGN1cnJlbnRNb2RlbEFwaXMubGVuZ3RoID09PSAwKSB7XG4gICAgLy8gY29uc3QgcCA9IHBhdGguam9pbih0bXBkaXIoKSwgXCJzb25hbXUtc3luY2VyLWVycm9yLmpzb25cIik7XG4gICAgLy8gd3JpdGVGaWxlU3luYyhwLCBKU09OLnN0cmluZ2lmeShyZWdpc3RlcmVkQXBpcywgbnVsbCwgMikpO1xuICAgIC8vIGV4ZWNTeW5jKGBvcGVuICR7cH1gKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYO2YhOyerCDtjIzsnbzsl5Ag7IKs7KCEIOuTseuhneuQnCBBUEnqsIAg7JeG7Iq164uI64ukLiAke2ZpbGVQYXRofWApO1xuICB9XG5cbiAgLy8g65Ox66Gd65CcIEFQSeyXkCDtmITsnqwg66mU7IaM65OcIO2DgOyehSDsoJXrs7Qg7ZmV7J6lXG4gIGNvbnN0IGV4dGVuZGVkQXBpcyA9IGN1cnJlbnRNb2RlbEFwaXMubWFwKChhcGkpID0+IHtcbiAgICBjb25zdCBmb3VuZE1ldGhvZCA9IG1ldGhvZHMuZmluZChcbiAgICAgIChtZXRob2QpID0+IG1ldGhvZC5tb2RlbE5hbWUgPT09IGFwaS5tb2RlbE5hbWUgJiYgbWV0aG9kLm1ldGhvZE5hbWUgPT09IGFwaS5tZXRob2ROYW1lLFxuICAgICk7XG4gICAgaWYgKCFmb3VuZE1ldGhvZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBBUEkgJHthcGkubW9kZWxOYW1lfS4ke2FwaS5tZXRob2ROYW1lfSBub3QgZm91bmQgaW4gJHtmaWxlUGF0aH1gKTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmFwaSxcbiAgICAgIHR5cGVQYXJhbWV0ZXJzOiBmb3VuZE1ldGhvZD8udHlwZVBhcmFtZXRlcnMsXG4gICAgICBwYXJhbWV0ZXJzOiBmb3VuZE1ldGhvZD8ucGFyYW1ldGVycyxcbiAgICAgIHJldHVyblR5cGU6IGZvdW5kTWV0aG9kPy5yZXR1cm5UeXBlLFxuICAgIH07XG4gIH0pO1xuICByZXR1cm4gZXh0ZW5kZWRBcGlzO1xufVxuXG5mdW5jdGlvbiByZXNvbHZlVHlwZU5vZGUodHlwZU5vZGU6IHRzLlR5cGVOb2RlKTogQXBpUGFyYW1UeXBlIHtcbiAgc3dpdGNoICh0eXBlTm9kZT8ua2luZCkge1xuICAgIGNhc2UgdHMuU3ludGF4S2luZC5BbnlLZXl3b3JkOlxuICAgICAgcmV0dXJuIFwiYW55XCI7XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLlVua25vd25LZXl3b3JkOlxuICAgICAgcmV0dXJuIFwidW5rbm93blwiO1xuICAgIGNhc2UgdHMuU3ludGF4S2luZC5TdHJpbmdLZXl3b3JkOlxuICAgICAgcmV0dXJuIFwic3RyaW5nXCI7XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLk51bWJlcktleXdvcmQ6XG4gICAgICByZXR1cm4gXCJudW1iZXJcIjtcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuQm9vbGVhbktleXdvcmQ6XG4gICAgICByZXR1cm4gXCJib29sZWFuXCI7XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLlVuZGVmaW5lZEtleXdvcmQ6XG4gICAgICByZXR1cm4gXCJ1bmRlZmluZWRcIjtcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuTnVsbEtleXdvcmQ6XG4gICAgICByZXR1cm4gXCJudWxsXCI7XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLlZvaWRLZXl3b3JkOlxuICAgICAgcmV0dXJuIFwidm9pZFwiO1xuICAgIGNhc2UgdHMuU3ludGF4S2luZC5MaXRlcmFsVHlwZToge1xuICAgICAgY29uc3QgbGl0ZXJhbCA9ICh0eXBlTm9kZSBhcyB0cy5MaXRlcmFsVHlwZU5vZGUpLmxpdGVyYWw7XG4gICAgICBpZiAodHMuaXNTdHJpbmdMaXRlcmFsKGxpdGVyYWwpKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgdDogXCJzdHJpbmctbGl0ZXJhbFwiLFxuICAgICAgICAgIHZhbHVlOiBsaXRlcmFsLnRleHQsXG4gICAgICAgIH07XG4gICAgICB9IGVsc2UgaWYgKHRzLmlzTnVtZXJpY0xpdGVyYWwobGl0ZXJhbCkpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB0OiBcIm51bWVyaWMtbGl0ZXJhbFwiLFxuICAgICAgICAgIHZhbHVlOiBOdW1iZXIobGl0ZXJhbC50ZXh0KSxcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChsaXRlcmFsLmtpbmQgPT09IHRzLlN5bnRheEtpbmQuTnVsbEtleXdvcmQpIHtcbiAgICAgICAgICByZXR1cm4gXCJudWxsXCI7XG4gICAgICAgIH0gZWxzZSBpZiAobGl0ZXJhbC5raW5kID09PSB0cy5TeW50YXhLaW5kLlVuZGVmaW5lZEtleXdvcmQpIHtcbiAgICAgICAgICByZXR1cm4gXCJ1bmRlZmluZWRcIjtcbiAgICAgICAgfSBlbHNlIGlmIChsaXRlcmFsLmtpbmQgPT09IHRzLlN5bnRheEtpbmQuVHJ1ZUtleXdvcmQpIHtcbiAgICAgICAgICByZXR1cm4gXCJ0cnVlXCI7XG4gICAgICAgIH0gZWxzZSBpZiAobGl0ZXJhbC5raW5kID09PSB0cy5TeW50YXhLaW5kLkZhbHNlS2V5d29yZCkge1xuICAgICAgICAgIHJldHVybiBcImZhbHNlXCI7XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwi7JWMIOyImCDsl4bripQg66as7YSw65+0XCIpO1xuICAgICAgfVxuICAgIH1cbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuQXJyYXlUeXBlOiB7XG4gICAgICBjb25zdCBhcnJOb2RlID0gdHlwZU5vZGUgYXMgdHMuQXJyYXlUeXBlTm9kZTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHQ6IFwiYXJyYXlcIixcbiAgICAgICAgZWxlbWVudHNUeXBlOiByZXNvbHZlVHlwZU5vZGUoYXJyTm9kZS5lbGVtZW50VHlwZSksXG4gICAgICB9O1xuICAgIH1cbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuVHlwZUxpdGVyYWw6IHtcbiAgICAgIGNvbnN0IGxpdGVyYWxOb2RlID0gdHlwZU5vZGUgYXMgdHMuVHlwZUxpdGVyYWxOb2RlO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdDogXCJvYmplY3RcIixcbiAgICAgICAgcHJvcHM6IGxpdGVyYWxOb2RlLm1lbWJlcnMubWFwKChtZW1iZXIpID0+IHtcbiAgICAgICAgICBpZiAodHMuaXNJbmRleFNpZ25hdHVyZURlY2xhcmF0aW9uKG1lbWJlcikpIHtcbiAgICAgICAgICAgIGFzc2VydChtZW1iZXIucGFyYW1ldGVyc1swXSk7XG4gICAgICAgICAgICBjb25zdCByZXMgPSByZXNvbHZlUGFyYW1EZWMoe1xuICAgICAgICAgICAgICBuYW1lOiBtZW1iZXIucGFyYW1ldGVyc1swXS5uYW1lIGFzIHRzLklkZW50aWZpZXIsXG4gICAgICAgICAgICAgIHR5cGU6IG1lbWJlci5wYXJhbWV0ZXJzWzBdLnR5cGUgYXMgdHMuVHlwZU5vZGUsXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgcmV0dXJuIHJlc29sdmVQYXJhbURlYyh7XG4gICAgICAgICAgICAgIG5hbWU6IHtcbiAgICAgICAgICAgICAgICBlc2NhcGVkVGV4dDogYFske3Jlcy5uYW1lfSR7cmVzLm9wdGlvbmFsID8gXCI/XCIgOiBcIlwifTogJHtyZXMudHlwZX1dYCxcbiAgICAgICAgICAgICAgfSBhcyB0cy5JZGVudGlmaWVyLFxuICAgICAgICAgICAgICB0eXBlOiBtZW1iZXIudHlwZSBhcyB0cy5UeXBlTm9kZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gcmVzb2x2ZVBhcmFtRGVjKHtcbiAgICAgICAgICAgICAgbmFtZTogKG1lbWJlciBhcyB0cy5Qcm9wZXJ0eVNpZ25hdHVyZSkubmFtZSBhcyB0cy5JZGVudGlmaWVyLFxuICAgICAgICAgICAgICB0eXBlOiAobWVtYmVyIGFzIHRzLlByb3BlcnR5U2lnbmF0dXJlKS50eXBlIGFzIHRzLlR5cGVOb2RlLFxuICAgICAgICAgICAgICBvcHRpb25hbDogKG1lbWJlciBhcyB0cy5Qcm9wZXJ0eVNpZ25hdHVyZSkucXVlc3Rpb25Ub2tlbiAhPT0gdW5kZWZpbmVkLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KSxcbiAgICAgIH07XG4gICAgfVxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5UeXBlUmVmZXJlbmNlOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdDogXCJyZWZcIixcbiAgICAgICAgaWQ6ICgodHlwZU5vZGUgYXMgdHMuVHlwZVJlZmVyZW5jZU5vZGUpLnR5cGVOYW1lIGFzIHRzLklkZW50aWZpZXIpLmVzY2FwZWRUZXh0LnRvU3RyaW5nKCksXG4gICAgICAgIGFyZ3M6ICh0eXBlTm9kZSBhcyB0cy5UeXBlUmVmZXJlbmNlTm9kZSkudHlwZUFyZ3VtZW50cz8ubWFwKCh0eXBlQXJnKSA9PlxuICAgICAgICAgIHJlc29sdmVUeXBlTm9kZSh0eXBlQXJnKSxcbiAgICAgICAgKSxcbiAgICAgIH07XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLlVuaW9uVHlwZTpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHQ6IFwidW5pb25cIixcbiAgICAgICAgdHlwZXM6ICh0eXBlTm9kZSBhcyB0cy5VbmlvblR5cGVOb2RlKS50eXBlcy5tYXAoKHR5cGUpID0+IHJlc29sdmVUeXBlTm9kZSh0eXBlKSksXG4gICAgICB9O1xuICAgIGNhc2UgdHMuU3ludGF4S2luZC5JbnRlcnNlY3Rpb25UeXBlOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdDogXCJpbnRlcnNlY3Rpb25cIixcbiAgICAgICAgdHlwZXM6ICh0eXBlTm9kZSBhcyB0cy5JbnRlcnNlY3Rpb25UeXBlTm9kZSkudHlwZXMubWFwKCh0eXBlKSA9PiByZXNvbHZlVHlwZU5vZGUodHlwZSkpLFxuICAgICAgfTtcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuSW5kZXhlZEFjY2Vzc1R5cGU6XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0OiBcImluZGV4ZWQtYWNjZXNzXCIsXG4gICAgICAgIG9iamVjdDogcmVzb2x2ZVR5cGVOb2RlKCh0eXBlTm9kZSBhcyB0cy5JbmRleGVkQWNjZXNzVHlwZU5vZGUpLm9iamVjdFR5cGUpLFxuICAgICAgICBpbmRleDogcmVzb2x2ZVR5cGVOb2RlKCh0eXBlTm9kZSBhcyB0cy5JbmRleGVkQWNjZXNzVHlwZU5vZGUpLmluZGV4VHlwZSksXG4gICAgICB9O1xuICAgIGNhc2UgdHMuU3ludGF4S2luZC5UdXBsZVR5cGU6XG4gICAgICBpZiAodHMuaXNUdXBsZVR5cGVOb2RlKHR5cGVOb2RlKSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHQ6IFwidHVwbGUtdHlwZVwiLFxuICAgICAgICAgIGVsZW1lbnRzOiB0eXBlTm9kZS5lbGVtZW50cy5tYXAoKGVsZW0pID0+IHJlc29sdmVUeXBlTm9kZShlbGVtKSksXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuUGFyZW50aGVzaXplZFR5cGU6XG4gICAgICAvLyDqtITtmLjroZwg66y27J24IO2DgOyehSAo7JiIOiAoQSAmIEIpW10g7JeQ7IScIChBICYgQikpXG4gICAgICAvLyDrgrTrtoAg7YOA7J6F7J2EIOyerOq3gOyggeycvOuhnCByZXNvbHZlXG4gICAgICByZXR1cm4gcmVzb2x2ZVR5cGVOb2RlKCh0eXBlTm9kZSBhcyB0cy5QYXJlbnRoZXNpemVkVHlwZU5vZGUpLnR5cGUpO1xuICAgIGNhc2UgdW5kZWZpbmVkOlxuICAgICAgdGhyb3cgbmV3IEVycm9yKGB0eXBlTm9kZSB1bmRlZmluZWRgKTtcbiAgfVxuXG4gIGNvbnNvbGUuZGVidWcodHlwZU5vZGUpO1xuICB0aHJvdyBuZXcgRXJyb3IoYOyVjCDsiJgg7JeG64qUIFN5bnRheEtpbmQgJHt0eXBlTm9kZS5raW5kfWApO1xufVxuXG5mdW5jdGlvbiByZXNvbHZlUGFyYW1EZWMoXG4gIHBhcmFtRGVjOiB7XG4gICAgbmFtZTogdHMuQmluZGluZ05hbWU7XG4gICAgdHlwZTogdHMuVHlwZU5vZGU7XG4gICAgb3B0aW9uYWw/OiBib29sZWFuO1xuICAgIGRlZmF1bHREZWY/OiBzdHJpbmc7XG4gIH0sXG4gIGluZGV4OiBudW1iZXIgPSAwLFxuKTogQXBpUGFyYW0ge1xuICBjb25zdCBuYW1lID0gcGFyYW1EZWMubmFtZSBhcyB0cy5JZGVudGlmaWVyO1xuICBjb25zdCB0eXBlID0gcmVzb2x2ZVR5cGVOb2RlKHBhcmFtRGVjLnR5cGUpO1xuXG4gIGlmIChuYW1lID09PSB1bmRlZmluZWQpIHtcbiAgICBjb25zb2xlLmRlYnVnKHsgbmFtZSwgdHlwZSwgcGFyYW1EZWMgfSk7XG4gIH1cblxuICBjb25zdCByZXN1bHQ6IEFwaVBhcmFtID0ge1xuICAgIG5hbWU6IG5hbWUuZXNjYXBlZFRleHQgPyBuYW1lLmVzY2FwZWRUZXh0LnRvU3RyaW5nKCkgOiBgbm9uYW1lQXQke2luZGV4fWAsXG4gICAgdHlwZSxcbiAgICBvcHRpb25hbDogcGFyYW1EZWMub3B0aW9uYWwgPT09IHRydWUsXG4gICAgZGVmYXVsdERlZjogcGFyYW1EZWM/LmRlZmF1bHREZWYsXG4gIH07XG5cbiAgLy8g6rWs7KGw67aE7ZW07ZWg64u57J2YIOqyveyasCDtg4DsnoXsnbTrpoQg7IKs7JqpXG4gIGlmIChcbiAgICB0cy5pc09iamVjdEJpbmRpbmdQYXR0ZXJuKG5hbWUpICYmXG4gICAgdHMuaXNUeXBlUmVmZXJlbmNlTm9kZShwYXJhbURlYy50eXBlKSAmJlxuICAgIHRzLmlzSWRlbnRpZmllcihwYXJhbURlYy50eXBlLnR5cGVOYW1lKVxuICApIHtcbiAgICByZXN1bHQubmFtZSA9IGluZmxlY3Rpb24uY2FtZWxpemUocGFyYW1EZWMudHlwZS50eXBlTmFtZS50ZXh0LCB0cnVlKTtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmZ1bmN0aW9uIHByaW50Tm9kZShub2RlOiB0cy5Ob2RlIHwgdW5kZWZpbmVkLCBzb3VyY2VGaWxlOiB0cy5Tb3VyY2VGaWxlKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgaWYgKG5vZGUgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBjb25zdCBwcmludGVyID0gdHMuY3JlYXRlUHJpbnRlcih7IG5ld0xpbmU6IHRzLk5ld0xpbmVLaW5kLkxpbmVGZWVkIH0pO1xuICByZXR1cm4gcHJpbnRlci5wcmludE5vZGUodHMuRW1pdEhpbnQuVW5zcGVjaWZpZWQsIG5vZGUsIHNvdXJjZUZpbGUpO1xufVxuIl0sIm5hbWVzIjpbImFzc2VydCIsInJlYWRGaWxlIiwiaW5mbGVjdGlvbiIsInRzIiwicmVnaXN0ZXJlZEFwaXMiLCJ2YWxpZGF0ZU1ldGhvZE5hbWUiLCJyZWFkQXBpc0Zyb21GaWxlIiwiZmlsZVBhdGgiLCJlbmRzV2l0aCIsIkVycm9yIiwic291cmNlRmlsZSIsImNyZWF0ZVNvdXJjZUZpbGUiLCJ0b1N0cmluZyIsIlNjcmlwdFRhcmdldCIsIkxhdGVzdCIsIm1ldGhvZHMiLCJtb2RlbE5hbWUiLCJtZXRob2ROYW1lIiwidmlzaXRvciIsIm5vZGUiLCJpc0NsYXNzRGVjbGFyYXRpb24iLCJuYW1lIiwiaXNJZGVudGlmaWVyIiwiZXNjYXBlZFRleHQiLCJyZXBsYWNlIiwiaXNNZXRob2REZWNsYXJhdGlvbiIsInR5cGVQYXJhbWV0ZXJzIiwibWFwIiwidHlwZVBhcmFtIiwidHAiLCJ0IiwiaWQiLCJjb25zdHJhaW50IiwicmVzb2x2ZVR5cGVOb2RlIiwidW5kZWZpbmVkIiwicGFyYW1ldGVycyIsInBhcmFtRGVjIiwiaW5kZXgiLCJkZWZhdWx0RGVmIiwicHJpbnROb2RlIiwiaW5pdGlhbGl6ZXIiLCJyZXNvbHZlUGFyYW1EZWMiLCJ0eXBlIiwib3B0aW9uYWwiLCJxdWVzdGlvblRva2VuIiwicmV0dXJuVHlwZSIsInB1c2giLCJmb3JFYWNoQ2hpbGQiLCJsZW5ndGgiLCJjdXJyZW50TW9kZWxBcGlzIiwiZmlsdGVyIiwiYXBpIiwiZmluZCIsIm1ldGhvZCIsImV4dGVuZGVkQXBpcyIsImZvdW5kTWV0aG9kIiwidHlwZU5vZGUiLCJraW5kIiwiU3ludGF4S2luZCIsIkFueUtleXdvcmQiLCJVbmtub3duS2V5d29yZCIsIlN0cmluZ0tleXdvcmQiLCJOdW1iZXJLZXl3b3JkIiwiQm9vbGVhbktleXdvcmQiLCJVbmRlZmluZWRLZXl3b3JkIiwiTnVsbEtleXdvcmQiLCJWb2lkS2V5d29yZCIsIkxpdGVyYWxUeXBlIiwibGl0ZXJhbCIsImlzU3RyaW5nTGl0ZXJhbCIsInZhbHVlIiwidGV4dCIsImlzTnVtZXJpY0xpdGVyYWwiLCJOdW1iZXIiLCJUcnVlS2V5d29yZCIsIkZhbHNlS2V5d29yZCIsIkFycmF5VHlwZSIsImFyck5vZGUiLCJlbGVtZW50c1R5cGUiLCJlbGVtZW50VHlwZSIsIlR5cGVMaXRlcmFsIiwibGl0ZXJhbE5vZGUiLCJwcm9wcyIsIm1lbWJlcnMiLCJtZW1iZXIiLCJpc0luZGV4U2lnbmF0dXJlRGVjbGFyYXRpb24iLCJyZXMiLCJUeXBlUmVmZXJlbmNlIiwidHlwZU5hbWUiLCJhcmdzIiwidHlwZUFyZ3VtZW50cyIsInR5cGVBcmciLCJVbmlvblR5cGUiLCJ0eXBlcyIsIkludGVyc2VjdGlvblR5cGUiLCJJbmRleGVkQWNjZXNzVHlwZSIsIm9iamVjdCIsIm9iamVjdFR5cGUiLCJpbmRleFR5cGUiLCJUdXBsZVR5cGUiLCJpc1R1cGxlVHlwZU5vZGUiLCJlbGVtZW50cyIsImVsZW0iLCJQYXJlbnRoZXNpemVkVHlwZSIsImNvbnNvbGUiLCJkZWJ1ZyIsInJlc3VsdCIsImlzT2JqZWN0QmluZGluZ1BhdHRlcm4iLCJpc1R5cGVSZWZlcmVuY2VOb2RlIiwiY2FtZWxpemUiLCJwcmludGVyIiwiY3JlYXRlUHJpbnRlciIsIm5ld0xpbmUiLCJOZXdMaW5lS2luZCIsIkxpbmVGZWVkIiwiRW1pdEhpbnQiLCJVbnNwZWNpZmllZCJdLCJtYXBwaW5ncyI6IkFBQUEsT0FBT0EsWUFBWSxTQUFTO0FBQzVCLFNBQVNDLFFBQVEsUUFBUSxtQkFBYztBQUN2QyxPQUFPQyxnQkFBZ0IsYUFBYTtBQUNwQyxPQUFPQyxRQUFRLGFBQWE7QUFDNUIsU0FBMkJDLGNBQWMsUUFBUSx1QkFBb0I7QUFDckUsU0FBU0Msa0JBQWtCLFFBQVEsc0JBQW1CO0FBSXREOzs7OztDQUtDLEdBQ0QsT0FBTyxlQUFlQyxpQkFBaUJDLFFBQXNCO0lBQzNELElBQUksQ0FBQ0EsU0FBU0MsUUFBUSxDQUFDLFFBQVE7UUFDN0IsTUFBTSxJQUFJQyxNQUNSLEdBQUdGLFNBQVMsNkdBQTZHLENBQUM7SUFFOUg7SUFFQSxNQUFNRyxhQUFhUCxHQUFHUSxnQkFBZ0IsQ0FDcENKLFVBQ0EsQUFBQyxDQUFBLE1BQU1OLFNBQVNNLFNBQVEsRUFBR0ssUUFBUSxJQUNuQ1QsR0FBR1UsWUFBWSxDQUFDQyxNQUFNO0lBR3hCLE1BQU1DLFVBQW1ELEVBQUU7SUFDM0QsSUFBSUMsWUFBb0I7SUFDeEIsSUFBSUMsYUFBcUI7SUFDekIsTUFBTUMsVUFBVSxDQUFDQztRQUNmLElBQUloQixHQUFHaUIsa0JBQWtCLENBQUNELE9BQU87WUFDL0IsSUFBSUEsS0FBS0UsSUFBSSxJQUFJbEIsR0FBR21CLFlBQVksQ0FBQ0gsS0FBS0UsSUFBSSxHQUFHO2dCQUMzQ0wsWUFBWUcsS0FBS0UsSUFBSSxDQUFDRSxXQUFXLENBQUNYLFFBQVEsR0FBR1ksT0FBTyxDQUFDLFVBQVU7WUFDakU7UUFDRjtRQUNBLElBQUlyQixHQUFHc0IsbUJBQW1CLENBQUNOLE9BQU87WUFDaEMsSUFBSWhCLEdBQUdtQixZQUFZLENBQUNILEtBQUtFLElBQUksR0FBRztnQkFDOUJKLGFBQWFFLEtBQUtFLElBQUksQ0FBQ0UsV0FBVyxDQUFDWCxRQUFRO2dCQUMzQ1AsbUJBQW1CWTtZQUNyQjtZQUVBLE1BQU1TLGlCQUEyQyxBQUFDUCxDQUFBQSxLQUFLTyxjQUFjLElBQUksRUFBRSxBQUFELEVBQUdDLEdBQUcsQ0FDOUUsQ0FBQ0M7Z0JBQ0MsTUFBTUMsS0FBS0Q7Z0JBRVgsT0FBTztvQkFDTEUsR0FBRztvQkFDSEMsSUFBSUYsR0FBR1IsSUFBSSxDQUFDRSxXQUFXLENBQUNYLFFBQVE7b0JBQ2hDb0IsWUFBWUgsR0FBR0csVUFBVSxHQUFHQyxnQkFBZ0JKLEdBQUdHLFVBQVUsSUFBSUU7Z0JBQy9EO1lBQ0Y7WUFFRixNQUFNQyxhQUF5QmhCLEtBQUtnQixVQUFVLENBQUNSLEdBQUcsQ0FBQyxDQUFDUyxVQUFVQztnQkFDNUQsTUFBTUMsYUFBYUMsVUFBVUgsU0FBU0ksV0FBVyxFQUFFOUI7Z0JBRW5ELDBDQUEwQztnQkFFMUMsT0FBTytCLGdCQUNMO29CQUNFcEIsTUFBTWUsU0FBU2YsSUFBSTtvQkFDbkJxQixNQUFNTixTQUFTTSxJQUFJO29CQUNuQkMsVUFBVVAsU0FBU1EsYUFBYSxLQUFLVixhQUFhRSxTQUFTSSxXQUFXLEtBQUtOO29CQUMzRUk7Z0JBQ0YsR0FDQUQ7WUFFSjtZQUNBLElBQUlsQixLQUFLdUIsSUFBSSxLQUFLUixXQUFXO2dCQUMzQixNQUFNLElBQUl6QixNQUFNLENBQUMsbUJBQW1CLEVBQUVPLFVBQVUsQ0FBQyxFQUFFQyxZQUFZO1lBQ2pFO1lBQ0EsTUFBTTRCLGFBQWFaLGdCQUFnQmQsS0FBS3VCLElBQUk7WUFFNUMzQixRQUFRK0IsSUFBSSxDQUFDO2dCQUNYOUI7Z0JBQ0FDO2dCQUNBUztnQkFDQVM7Z0JBQ0FVO1lBQ0Y7UUFDRjtRQUNBMUMsR0FBRzRDLFlBQVksQ0FBQzVCLE1BQU1EO0lBQ3hCO0lBQ0FBLFFBQVFSO0lBRVIsSUFBSUssUUFBUWlDLE1BQU0sS0FBSyxHQUFHO1FBQ3hCLE9BQU8sRUFBRTtJQUNYO0lBRUEsb0JBQW9CO0lBQ3BCLE1BQU1DLG1CQUFtQjdDLGVBQWU4QyxNQUFNLENBQUMsQ0FBQ0M7UUFDOUMsT0FBT3BDLFFBQVFxQyxJQUFJLENBQ2pCLENBQUNDLFNBQVdBLE9BQU9yQyxTQUFTLEtBQUttQyxJQUFJbkMsU0FBUyxJQUFJcUMsT0FBT3BDLFVBQVUsS0FBS2tDLElBQUlsQyxVQUFVO0lBRTFGO0lBQ0EsSUFBSWdDLGlCQUFpQkQsTUFBTSxLQUFLLEdBQUc7UUFDakMsNkRBQTZEO1FBQzdELDZEQUE2RDtRQUM3RCx5QkFBeUI7UUFDekIsTUFBTSxJQUFJdkMsTUFBTSxDQUFDLHlCQUF5QixFQUFFRixVQUFVO0lBQ3hEO0lBRUEsMkJBQTJCO0lBQzNCLE1BQU0rQyxlQUFlTCxpQkFBaUJ0QixHQUFHLENBQUMsQ0FBQ3dCO1FBQ3pDLE1BQU1JLGNBQWN4QyxRQUFRcUMsSUFBSSxDQUM5QixDQUFDQyxTQUFXQSxPQUFPckMsU0FBUyxLQUFLbUMsSUFBSW5DLFNBQVMsSUFBSXFDLE9BQU9wQyxVQUFVLEtBQUtrQyxJQUFJbEMsVUFBVTtRQUV4RixJQUFJLENBQUNzQyxhQUFhO1lBQ2hCLE1BQU0sSUFBSTlDLE1BQU0sQ0FBQyxJQUFJLEVBQUUwQyxJQUFJbkMsU0FBUyxDQUFDLENBQUMsRUFBRW1DLElBQUlsQyxVQUFVLENBQUMsY0FBYyxFQUFFVixVQUFVO1FBQ25GO1FBQ0EsT0FBTztZQUNMLEdBQUc0QyxHQUFHO1lBQ056QixnQkFBZ0I2QixhQUFhN0I7WUFDN0JTLFlBQVlvQixhQUFhcEI7WUFDekJVLFlBQVlVLGFBQWFWO1FBQzNCO0lBQ0Y7SUFDQSxPQUFPUztBQUNUO0FBRUEsU0FBU3JCLGdCQUFnQnVCLFFBQXFCO0lBQzVDLE9BQVFBLFVBQVVDO1FBQ2hCLEtBQUt0RCxHQUFHdUQsVUFBVSxDQUFDQyxVQUFVO1lBQzNCLE9BQU87UUFDVCxLQUFLeEQsR0FBR3VELFVBQVUsQ0FBQ0UsY0FBYztZQUMvQixPQUFPO1FBQ1QsS0FBS3pELEdBQUd1RCxVQUFVLENBQUNHLGFBQWE7WUFDOUIsT0FBTztRQUNULEtBQUsxRCxHQUFHdUQsVUFBVSxDQUFDSSxhQUFhO1lBQzlCLE9BQU87UUFDVCxLQUFLM0QsR0FBR3VELFVBQVUsQ0FBQ0ssY0FBYztZQUMvQixPQUFPO1FBQ1QsS0FBSzVELEdBQUd1RCxVQUFVLENBQUNNLGdCQUFnQjtZQUNqQyxPQUFPO1FBQ1QsS0FBSzdELEdBQUd1RCxVQUFVLENBQUNPLFdBQVc7WUFDNUIsT0FBTztRQUNULEtBQUs5RCxHQUFHdUQsVUFBVSxDQUFDUSxXQUFXO1lBQzVCLE9BQU87UUFDVCxLQUFLL0QsR0FBR3VELFVBQVUsQ0FBQ1MsV0FBVztZQUFFO2dCQUM5QixNQUFNQyxVQUFVLEFBQUNaLFNBQWdDWSxPQUFPO2dCQUN4RCxJQUFJakUsR0FBR2tFLGVBQWUsQ0FBQ0QsVUFBVTtvQkFDL0IsT0FBTzt3QkFDTHRDLEdBQUc7d0JBQ0h3QyxPQUFPRixRQUFRRyxJQUFJO29CQUNyQjtnQkFDRixPQUFPLElBQUlwRSxHQUFHcUUsZ0JBQWdCLENBQUNKLFVBQVU7b0JBQ3ZDLE9BQU87d0JBQ0x0QyxHQUFHO3dCQUNId0MsT0FBT0csT0FBT0wsUUFBUUcsSUFBSTtvQkFDNUI7Z0JBQ0YsT0FBTztvQkFDTCxJQUFJSCxRQUFRWCxJQUFJLEtBQUt0RCxHQUFHdUQsVUFBVSxDQUFDTyxXQUFXLEVBQUU7d0JBQzlDLE9BQU87b0JBQ1QsT0FBTyxJQUFJRyxRQUFRWCxJQUFJLEtBQUt0RCxHQUFHdUQsVUFBVSxDQUFDTSxnQkFBZ0IsRUFBRTt3QkFDMUQsT0FBTztvQkFDVCxPQUFPLElBQUlJLFFBQVFYLElBQUksS0FBS3RELEdBQUd1RCxVQUFVLENBQUNnQixXQUFXLEVBQUU7d0JBQ3JELE9BQU87b0JBQ1QsT0FBTyxJQUFJTixRQUFRWCxJQUFJLEtBQUt0RCxHQUFHdUQsVUFBVSxDQUFDaUIsWUFBWSxFQUFFO3dCQUN0RCxPQUFPO29CQUNUO29CQUNBLE1BQU0sSUFBSWxFLE1BQU07Z0JBQ2xCO1lBQ0Y7UUFDQSxLQUFLTixHQUFHdUQsVUFBVSxDQUFDa0IsU0FBUztZQUFFO2dCQUM1QixNQUFNQyxVQUFVckI7Z0JBQ2hCLE9BQU87b0JBQ0wxQixHQUFHO29CQUNIZ0QsY0FBYzdDLGdCQUFnQjRDLFFBQVFFLFdBQVc7Z0JBQ25EO1lBQ0Y7UUFDQSxLQUFLNUUsR0FBR3VELFVBQVUsQ0FBQ3NCLFdBQVc7WUFBRTtnQkFDOUIsTUFBTUMsY0FBY3pCO2dCQUNwQixPQUFPO29CQUNMMUIsR0FBRztvQkFDSG9ELE9BQU9ELFlBQVlFLE9BQU8sQ0FBQ3hELEdBQUcsQ0FBQyxDQUFDeUQ7d0JBQzlCLElBQUlqRixHQUFHa0YsMkJBQTJCLENBQUNELFNBQVM7NEJBQzFDcEYsT0FBT29GLE9BQU9qRCxVQUFVLENBQUMsRUFBRTs0QkFDM0IsTUFBTW1ELE1BQU03QyxnQkFBZ0I7Z0NBQzFCcEIsTUFBTStELE9BQU9qRCxVQUFVLENBQUMsRUFBRSxDQUFDZCxJQUFJO2dDQUMvQnFCLE1BQU0wQyxPQUFPakQsVUFBVSxDQUFDLEVBQUUsQ0FBQ08sSUFBSTs0QkFDakM7NEJBRUEsT0FBT0QsZ0JBQWdCO2dDQUNyQnBCLE1BQU07b0NBQ0pFLGFBQWEsQ0FBQyxDQUFDLEVBQUUrRCxJQUFJakUsSUFBSSxHQUFHaUUsSUFBSTNDLFFBQVEsR0FBRyxNQUFNLEdBQUcsRUFBRSxFQUFFMkMsSUFBSTVDLElBQUksQ0FBQyxDQUFDLENBQUM7Z0NBQ3JFO2dDQUNBQSxNQUFNMEMsT0FBTzFDLElBQUk7NEJBQ25CO3dCQUNGLE9BQU87NEJBQ0wsT0FBT0QsZ0JBQWdCO2dDQUNyQnBCLE1BQU0sQUFBQytELE9BQWdDL0QsSUFBSTtnQ0FDM0NxQixNQUFNLEFBQUMwQyxPQUFnQzFDLElBQUk7Z0NBQzNDQyxVQUFVLEFBQUN5QyxPQUFnQ3hDLGFBQWEsS0FBS1Y7NEJBQy9EO3dCQUNGO29CQUNGO2dCQUNGO1lBQ0Y7UUFDQSxLQUFLL0IsR0FBR3VELFVBQVUsQ0FBQzZCLGFBQWE7WUFDOUIsT0FBTztnQkFDTHpELEdBQUc7Z0JBQ0hDLElBQUksQUFBQyxBQUFDeUIsU0FBa0NnQyxRQUFRLENBQW1CakUsV0FBVyxDQUFDWCxRQUFRO2dCQUN2RjZFLE1BQU0sQUFBQ2pDLFNBQWtDa0MsYUFBYSxFQUFFL0QsSUFBSSxDQUFDZ0UsVUFDM0QxRCxnQkFBZ0IwRDtZQUVwQjtRQUNGLEtBQUt4RixHQUFHdUQsVUFBVSxDQUFDa0MsU0FBUztZQUMxQixPQUFPO2dCQUNMOUQsR0FBRztnQkFDSCtELE9BQU8sQUFBQ3JDLFNBQThCcUMsS0FBSyxDQUFDbEUsR0FBRyxDQUFDLENBQUNlLE9BQVNULGdCQUFnQlM7WUFDNUU7UUFDRixLQUFLdkMsR0FBR3VELFVBQVUsQ0FBQ29DLGdCQUFnQjtZQUNqQyxPQUFPO2dCQUNMaEUsR0FBRztnQkFDSCtELE9BQU8sQUFBQ3JDLFNBQXFDcUMsS0FBSyxDQUFDbEUsR0FBRyxDQUFDLENBQUNlLE9BQVNULGdCQUFnQlM7WUFDbkY7UUFDRixLQUFLdkMsR0FBR3VELFVBQVUsQ0FBQ3FDLGlCQUFpQjtZQUNsQyxPQUFPO2dCQUNMakUsR0FBRztnQkFDSGtFLFFBQVEvRCxnQkFBZ0IsQUFBQ3VCLFNBQXNDeUMsVUFBVTtnQkFDekU1RCxPQUFPSixnQkFBZ0IsQUFBQ3VCLFNBQXNDMEMsU0FBUztZQUN6RTtRQUNGLEtBQUsvRixHQUFHdUQsVUFBVSxDQUFDeUMsU0FBUztZQUMxQixJQUFJaEcsR0FBR2lHLGVBQWUsQ0FBQzVDLFdBQVc7Z0JBQ2hDLE9BQU87b0JBQ0wxQixHQUFHO29CQUNIdUUsVUFBVTdDLFNBQVM2QyxRQUFRLENBQUMxRSxHQUFHLENBQUMsQ0FBQzJFLE9BQVNyRSxnQkFBZ0JxRTtnQkFDNUQ7WUFDRjtZQUNBO1FBQ0YsS0FBS25HLEdBQUd1RCxVQUFVLENBQUM2QyxpQkFBaUI7WUFDbEMsc0NBQXNDO1lBQ3RDLHVCQUF1QjtZQUN2QixPQUFPdEUsZ0JBQWdCLEFBQUN1QixTQUFzQ2QsSUFBSTtRQUNwRSxLQUFLUjtZQUNILE1BQU0sSUFBSXpCLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQztJQUN4QztJQUVBK0YsUUFBUUMsS0FBSyxDQUFDakQ7SUFDZCxNQUFNLElBQUkvQyxNQUFNLENBQUMsa0JBQWtCLEVBQUUrQyxTQUFTQyxJQUFJLEVBQUU7QUFDdEQ7QUFFQSxTQUFTaEIsZ0JBQ1BMLFFBS0MsRUFDREMsUUFBZ0IsQ0FBQztJQUVqQixNQUFNaEIsT0FBT2UsU0FBU2YsSUFBSTtJQUMxQixNQUFNcUIsT0FBT1QsZ0JBQWdCRyxTQUFTTSxJQUFJO0lBRTFDLElBQUlyQixTQUFTYSxXQUFXO1FBQ3RCc0UsUUFBUUMsS0FBSyxDQUFDO1lBQUVwRjtZQUFNcUI7WUFBTU47UUFBUztJQUN2QztJQUVBLE1BQU1zRSxTQUFtQjtRQUN2QnJGLE1BQU1BLEtBQUtFLFdBQVcsR0FBR0YsS0FBS0UsV0FBVyxDQUFDWCxRQUFRLEtBQUssQ0FBQyxRQUFRLEVBQUV5QixPQUFPO1FBQ3pFSztRQUNBQyxVQUFVUCxTQUFTTyxRQUFRLEtBQUs7UUFDaENMLFlBQVlGLFVBQVVFO0lBQ3hCO0lBRUEscUJBQXFCO0lBQ3JCLElBQ0VuQyxHQUFHd0csc0JBQXNCLENBQUN0RixTQUMxQmxCLEdBQUd5RyxtQkFBbUIsQ0FBQ3hFLFNBQVNNLElBQUksS0FDcEN2QyxHQUFHbUIsWUFBWSxDQUFDYyxTQUFTTSxJQUFJLENBQUM4QyxRQUFRLEdBQ3RDO1FBQ0FrQixPQUFPckYsSUFBSSxHQUFHbkIsV0FBVzJHLFFBQVEsQ0FBQ3pFLFNBQVNNLElBQUksQ0FBQzhDLFFBQVEsQ0FBQ2pCLElBQUksRUFBRTtJQUNqRTtJQUVBLE9BQU9tQztBQUNUO0FBRUEsU0FBU25FLFVBQVVwQixJQUF5QixFQUFFVCxVQUF5QjtJQUNyRSxJQUFJUyxTQUFTZSxXQUFXO1FBQ3RCLE9BQU9BO0lBQ1Q7SUFFQSxNQUFNNEUsVUFBVTNHLEdBQUc0RyxhQUFhLENBQUM7UUFBRUMsU0FBUzdHLEdBQUc4RyxXQUFXLENBQUNDLFFBQVE7SUFBQztJQUNwRSxPQUFPSixRQUFRdkUsU0FBUyxDQUFDcEMsR0FBR2dILFFBQVEsQ0FBQ0MsV0FBVyxFQUFFakcsTUFBTVQ7QUFDMUQifQ==
245
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zeW5jZXIvYXBpLXBhcnNlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNzZXJ0IGZyb20gXCJhc3NlcnRcIjtcbmltcG9ydCB7IHJlYWRGaWxlIH0gZnJvbSBcImZzL3Byb21pc2VzXCI7XG5pbXBvcnQgaW5mbGVjdGlvbiBmcm9tIFwiaW5mbGVjdGlvblwiO1xuaW1wb3J0IHRzIGZyb20gXCJ0eXBlc2NyaXB0XCI7XG5pbXBvcnQgeyB0eXBlIEV4dGVuZGVkQXBpLCByZWdpc3RlcmVkQXBpcyB9IGZyb20gXCIuLi9hcGkvZGVjb3JhdG9yc1wiO1xuaW1wb3J0IHsgdmFsaWRhdGVNZXRob2ROYW1lIH0gZnJvbSBcIi4uL2FwaS92YWxpZGF0b3JcIjtcbmltcG9ydCB0eXBlIHsgQXBpUGFyYW0sIEFwaVBhcmFtVHlwZSB9IGZyb20gXCIuLi90eXBlcy90eXBlc1wiO1xuaW1wb3J0IHR5cGUgeyBBYnNvbHV0ZVBhdGggfSBmcm9tIFwiLi4vdXRpbHMvcGF0aC11dGlsc1wiO1xuXG4vKipcbiAqIFR5cGVTY3JpcHQg7YyM7J287J2EIO2MjOyLse2VmOyXrCBBUEkg66mU7IaM65OcIOygleuztOulvCDstpTstpztlanri4jri6QuXG4gKiBAYXBpIOuNsOy9lOugiOydtO2EsOqwgCDrtpnsnYAg66mU7IaM65Oc65Ok7J2YIO2DgOyehSDsoJXrs7Trpbwg67aE7ISd7ZWp64uI64ukLlxuICogQHBhcmFtIGZpbGVQYXRoIC0g7YyM7Iux7ZWgIFR5cGVTY3JpcHQg7YyM7J287J2YIOygiOuMgCDqsr3roZxcbiAqIEByZXR1cm5zIEFQSSDrqZTshozrk5wg7KCV67O0IOuwsOyXtCAo7YOA7J6FIO2MjOudvOuvuO2EsCwg7YyM652866+47YSwLCDrpqzthLQg7YOA7J6FIOuTsSlcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlYWRBcGlzRnJvbUZpbGUoZmlsZVBhdGg6IEFic29sdXRlUGF0aCk6IFByb21pc2U8RXh0ZW5kZWRBcGlbXT4ge1xuICBpZiAoIWZpbGVQYXRoLmVuZHNXaXRoKFwiLnRzXCIpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYCR7ZmlsZVBhdGh9IGRvZXMgbm90IHNlZW0gdG8gYmUgYSBUeXBlU2NyaXB0IGZpbGUuIFBsZWFzZSBjaGVjayB0aGUgZmlsZSBwYXRoLiBXZSBvbmx5IHN1cHBvcnQgcGFyc2luZyBUeXBlU2NyaXB0IGZpbGVzLmAsXG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IHNvdXJjZUZpbGUgPSB0cy5jcmVhdGVTb3VyY2VGaWxlKFxuICAgIGZpbGVQYXRoLFxuICAgIChhd2FpdCByZWFkRmlsZShmaWxlUGF0aCkpLnRvU3RyaW5nKCksXG4gICAgdHMuU2NyaXB0VGFyZ2V0LkxhdGVzdCxcbiAgKTtcblxuICBjb25zdCBtZXRob2RzOiBPbWl0PEV4dGVuZGVkQXBpLCBcInBhdGhcIiB8IFwib3B0aW9uc1wiPltdID0gW107XG4gIGxldCBtb2RlbE5hbWU6IHN0cmluZyA9IFwiVW5rbm93bk1vZGVsXCI7XG4gIGxldCBtZXRob2ROYW1lOiBzdHJpbmcgPSBcInVua25vd25NZXRob2RcIjtcbiAgY29uc3QgdmlzaXRvciA9IChub2RlOiB0cy5Ob2RlKSA9PiB7XG4gICAgaWYgKHRzLmlzQ2xhc3NEZWNsYXJhdGlvbihub2RlKSkge1xuICAgICAgaWYgKG5vZGUubmFtZSAmJiB0cy5pc0lkZW50aWZpZXIobm9kZS5uYW1lKSkge1xuICAgICAgICBtb2RlbE5hbWUgPSBub2RlLm5hbWUuZXNjYXBlZFRleHQudG9TdHJpbmcoKS5yZXBsYWNlKC9DbGFzcyQvLCBcIlwiKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHRzLmlzTWV0aG9kRGVjbGFyYXRpb24obm9kZSkpIHtcbiAgICAgIGlmICh0cy5pc0lkZW50aWZpZXIobm9kZS5uYW1lKSkge1xuICAgICAgICBtZXRob2ROYW1lID0gbm9kZS5uYW1lLmVzY2FwZWRUZXh0LnRvU3RyaW5nKCk7XG4gICAgICAgIHZhbGlkYXRlTWV0aG9kTmFtZShtZXRob2ROYW1lKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgdHlwZVBhcmFtZXRlcnM6IEFwaVBhcmFtVHlwZS5UeXBlUGFyYW1bXSA9IChub2RlLnR5cGVQYXJhbWV0ZXJzID8/IFtdKS5tYXAoXG4gICAgICAgICh0eXBlUGFyYW0pID0+IHtcbiAgICAgICAgICBjb25zdCB0cCA9IHR5cGVQYXJhbSBhcyB0cy5UeXBlUGFyYW1ldGVyRGVjbGFyYXRpb247XG5cbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdDogXCJ0eXBlLXBhcmFtXCIsXG4gICAgICAgICAgICBpZDogdHAubmFtZS5lc2NhcGVkVGV4dC50b1N0cmluZygpLFxuICAgICAgICAgICAgY29uc3RyYWludDogdHAuY29uc3RyYWludCA/IHJlc29sdmVUeXBlTm9kZSh0cC5jb25zdHJhaW50KSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICB9O1xuICAgICAgICB9LFxuICAgICAgKTtcbiAgICAgIGNvbnN0IHBhcmFtZXRlcnM6IEFwaVBhcmFtW10gPSBub2RlLnBhcmFtZXRlcnMubWFwKChwYXJhbURlYywgaW5kZXgpID0+IHtcbiAgICAgICAgY29uc3QgZGVmYXVsdERlZiA9IHByaW50Tm9kZShwYXJhbURlYy5pbml0aWFsaXplciwgc291cmNlRmlsZSk7XG5cbiAgICAgICAgLy8g6riw67O46rCS7J20IOyeiOuKlCDqsr3smrAgcGFyYW1EZWMudHlwZeqwgCB1bmRlZmluZWTroZwg64KY7Ji0XG5cbiAgICAgICAgcmV0dXJuIHJlc29sdmVQYXJhbURlYyhcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiBwYXJhbURlYy5uYW1lLFxuICAgICAgICAgICAgdHlwZTogcGFyYW1EZWMudHlwZSBhcyB0cy5UeXBlTm9kZSxcbiAgICAgICAgICAgIG9wdGlvbmFsOiBwYXJhbURlYy5xdWVzdGlvblRva2VuICE9PSB1bmRlZmluZWQgfHwgcGFyYW1EZWMuaW5pdGlhbGl6ZXIgIT09IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGRlZmF1bHREZWYsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBpbmRleCxcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuICAgICAgaWYgKG5vZGUudHlwZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihg66as7YS0IO2DgOyeheydtCDquLDsnqzrkJjsp4Ag7JWK7J2AIOuplOyGjOuTnCAke21vZGVsTmFtZX0uJHttZXRob2ROYW1lfWApO1xuICAgICAgfVxuICAgICAgY29uc3QgcmV0dXJuVHlwZSA9IHJlc29sdmVUeXBlTm9kZShub2RlLnR5cGUpO1xuXG4gICAgICBtZXRob2RzLnB1c2goe1xuICAgICAgICBtb2RlbE5hbWUsXG4gICAgICAgIG1ldGhvZE5hbWUsXG4gICAgICAgIHR5cGVQYXJhbWV0ZXJzLFxuICAgICAgICBwYXJhbWV0ZXJzLFxuICAgICAgICByZXR1cm5UeXBlLFxuICAgICAgfSk7XG4gICAgfVxuICAgIHRzLmZvckVhY2hDaGlsZChub2RlLCB2aXNpdG9yKTtcbiAgfTtcbiAgdmlzaXRvcihzb3VyY2VGaWxlKTtcblxuICBpZiAobWV0aG9kcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICAvLyDtmITsnqwg7YyM7J287J2YIOuTseuhneuQnCBBUEkg7ZWE7YSwXG4gIGNvbnN0IGN1cnJlbnRNb2RlbEFwaXMgPSByZWdpc3RlcmVkQXBpcy5maWx0ZXIoKGFwaSkgPT4ge1xuICAgIHJldHVybiBtZXRob2RzLmZpbmQoXG4gICAgICAobWV0aG9kKSA9PiBtZXRob2QubW9kZWxOYW1lID09PSBhcGkubW9kZWxOYW1lICYmIG1ldGhvZC5tZXRob2ROYW1lID09PSBhcGkubWV0aG9kTmFtZSxcbiAgICApO1xuICB9KTtcbiAgaWYgKGN1cnJlbnRNb2RlbEFwaXMubGVuZ3RoID09PSAwKSB7XG4gICAgLy8gY29uc3QgcCA9IHBhdGguam9pbih0bXBkaXIoKSwgXCJzb25hbXUtc3luY2VyLWVycm9yLmpzb25cIik7XG4gICAgLy8gd3JpdGVGaWxlU3luYyhwLCBKU09OLnN0cmluZ2lmeShyZWdpc3RlcmVkQXBpcywgbnVsbCwgMikpO1xuICAgIC8vIGV4ZWNTeW5jKGBvcGVuICR7cH1gKTtcbiAgICAvLyB0aHJvdyBuZXcgRXJyb3IoYO2YhOyerCDtjIzsnbzsl5Ag7IKs7KCEIOuTseuhneuQnCBBUEnqsIAg7JeG7Iq164uI64ukLiAke2ZpbGVQYXRofWApO1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIC8vIOuTseuhneuQnCBBUEnsl5Ag7ZiE7J6sIOuplOyGjOuTnCDtg4DsnoUg7KCV67O0IO2ZleyepVxuICBjb25zdCBleHRlbmRlZEFwaXMgPSBjdXJyZW50TW9kZWxBcGlzLm1hcCgoYXBpKSA9PiB7XG4gICAgY29uc3QgZm91bmRNZXRob2QgPSBtZXRob2RzLmZpbmQoXG4gICAgICAobWV0aG9kKSA9PiBtZXRob2QubW9kZWxOYW1lID09PSBhcGkubW9kZWxOYW1lICYmIG1ldGhvZC5tZXRob2ROYW1lID09PSBhcGkubWV0aG9kTmFtZSxcbiAgICApO1xuICAgIGlmICghZm91bmRNZXRob2QpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQVBJICR7YXBpLm1vZGVsTmFtZX0uJHthcGkubWV0aG9kTmFtZX0gbm90IGZvdW5kIGluICR7ZmlsZVBhdGh9YCk7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAuLi5hcGksXG4gICAgICB0eXBlUGFyYW1ldGVyczogZm91bmRNZXRob2Q/LnR5cGVQYXJhbWV0ZXJzLFxuICAgICAgcGFyYW1ldGVyczogZm91bmRNZXRob2Q/LnBhcmFtZXRlcnMsXG4gICAgICByZXR1cm5UeXBlOiBmb3VuZE1ldGhvZD8ucmV0dXJuVHlwZSxcbiAgICB9O1xuICB9KTtcbiAgcmV0dXJuIGV4dGVuZGVkQXBpcztcbn1cblxuZnVuY3Rpb24gcmVzb2x2ZVR5cGVOb2RlKHR5cGVOb2RlOiB0cy5UeXBlTm9kZSk6IEFwaVBhcmFtVHlwZSB7XG4gIHN3aXRjaCAodHlwZU5vZGU/LmtpbmQpIHtcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuQW55S2V5d29yZDpcbiAgICAgIHJldHVybiBcImFueVwiO1xuICAgIGNhc2UgdHMuU3ludGF4S2luZC5Vbmtub3duS2V5d29yZDpcbiAgICAgIHJldHVybiBcInVua25vd25cIjtcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuU3RyaW5nS2V5d29yZDpcbiAgICAgIHJldHVybiBcInN0cmluZ1wiO1xuICAgIGNhc2UgdHMuU3ludGF4S2luZC5OdW1iZXJLZXl3b3JkOlxuICAgICAgcmV0dXJuIFwibnVtYmVyXCI7XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLkJvb2xlYW5LZXl3b3JkOlxuICAgICAgcmV0dXJuIFwiYm9vbGVhblwiO1xuICAgIGNhc2UgdHMuU3ludGF4S2luZC5VbmRlZmluZWRLZXl3b3JkOlxuICAgICAgcmV0dXJuIFwidW5kZWZpbmVkXCI7XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLk51bGxLZXl3b3JkOlxuICAgICAgcmV0dXJuIFwibnVsbFwiO1xuICAgIGNhc2UgdHMuU3ludGF4S2luZC5Wb2lkS2V5d29yZDpcbiAgICAgIHJldHVybiBcInZvaWRcIjtcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuTGl0ZXJhbFR5cGU6IHtcbiAgICAgIGNvbnN0IGxpdGVyYWwgPSAodHlwZU5vZGUgYXMgdHMuTGl0ZXJhbFR5cGVOb2RlKS5saXRlcmFsO1xuICAgICAgaWYgKHRzLmlzU3RyaW5nTGl0ZXJhbChsaXRlcmFsKSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHQ6IFwic3RyaW5nLWxpdGVyYWxcIixcbiAgICAgICAgICB2YWx1ZTogbGl0ZXJhbC50ZXh0LFxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIGlmICh0cy5pc051bWVyaWNMaXRlcmFsKGxpdGVyYWwpKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgdDogXCJudW1lcmljLWxpdGVyYWxcIixcbiAgICAgICAgICB2YWx1ZTogTnVtYmVyKGxpdGVyYWwudGV4dCksXG4gICAgICAgIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAobGl0ZXJhbC5raW5kID09PSB0cy5TeW50YXhLaW5kLk51bGxLZXl3b3JkKSB7XG4gICAgICAgICAgcmV0dXJuIFwibnVsbFwiO1xuICAgICAgICB9IGVsc2UgaWYgKGxpdGVyYWwua2luZCA9PT0gdHMuU3ludGF4S2luZC5VbmRlZmluZWRLZXl3b3JkKSB7XG4gICAgICAgICAgcmV0dXJuIFwidW5kZWZpbmVkXCI7XG4gICAgICAgIH0gZWxzZSBpZiAobGl0ZXJhbC5raW5kID09PSB0cy5TeW50YXhLaW5kLlRydWVLZXl3b3JkKSB7XG4gICAgICAgICAgcmV0dXJuIFwidHJ1ZVwiO1xuICAgICAgICB9IGVsc2UgaWYgKGxpdGVyYWwua2luZCA9PT0gdHMuU3ludGF4S2luZC5GYWxzZUtleXdvcmQpIHtcbiAgICAgICAgICByZXR1cm4gXCJmYWxzZVwiO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIuyVjCDsiJgg7JeG64qUIOumrO2EsOuftFwiKTtcbiAgICAgIH1cbiAgICB9XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLkFycmF5VHlwZToge1xuICAgICAgY29uc3QgYXJyTm9kZSA9IHR5cGVOb2RlIGFzIHRzLkFycmF5VHlwZU5vZGU7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0OiBcImFycmF5XCIsXG4gICAgICAgIGVsZW1lbnRzVHlwZTogcmVzb2x2ZVR5cGVOb2RlKGFyck5vZGUuZWxlbWVudFR5cGUpLFxuICAgICAgfTtcbiAgICB9XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLlR5cGVMaXRlcmFsOiB7XG4gICAgICBjb25zdCBsaXRlcmFsTm9kZSA9IHR5cGVOb2RlIGFzIHRzLlR5cGVMaXRlcmFsTm9kZTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHQ6IFwib2JqZWN0XCIsXG4gICAgICAgIHByb3BzOiBsaXRlcmFsTm9kZS5tZW1iZXJzLm1hcCgobWVtYmVyKSA9PiB7XG4gICAgICAgICAgaWYgKHRzLmlzSW5kZXhTaWduYXR1cmVEZWNsYXJhdGlvbihtZW1iZXIpKSB7XG4gICAgICAgICAgICBhc3NlcnQobWVtYmVyLnBhcmFtZXRlcnNbMF0pO1xuICAgICAgICAgICAgY29uc3QgcmVzID0gcmVzb2x2ZVBhcmFtRGVjKHtcbiAgICAgICAgICAgICAgbmFtZTogbWVtYmVyLnBhcmFtZXRlcnNbMF0ubmFtZSBhcyB0cy5JZGVudGlmaWVyLFxuICAgICAgICAgICAgICB0eXBlOiBtZW1iZXIucGFyYW1ldGVyc1swXS50eXBlIGFzIHRzLlR5cGVOb2RlLFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHJldHVybiByZXNvbHZlUGFyYW1EZWMoe1xuICAgICAgICAgICAgICBuYW1lOiB7XG4gICAgICAgICAgICAgICAgZXNjYXBlZFRleHQ6IGBbJHtyZXMubmFtZX0ke3Jlcy5vcHRpb25hbCA/IFwiP1wiIDogXCJcIn06ICR7cmVzLnR5cGV9XWAsXG4gICAgICAgICAgICAgIH0gYXMgdHMuSWRlbnRpZmllcixcbiAgICAgICAgICAgICAgdHlwZTogbWVtYmVyLnR5cGUgYXMgdHMuVHlwZU5vZGUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHJlc29sdmVQYXJhbURlYyh7XG4gICAgICAgICAgICAgIG5hbWU6IChtZW1iZXIgYXMgdHMuUHJvcGVydHlTaWduYXR1cmUpLm5hbWUgYXMgdHMuSWRlbnRpZmllcixcbiAgICAgICAgICAgICAgdHlwZTogKG1lbWJlciBhcyB0cy5Qcm9wZXJ0eVNpZ25hdHVyZSkudHlwZSBhcyB0cy5UeXBlTm9kZSxcbiAgICAgICAgICAgICAgb3B0aW9uYWw6IChtZW1iZXIgYXMgdHMuUHJvcGVydHlTaWduYXR1cmUpLnF1ZXN0aW9uVG9rZW4gIT09IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSksXG4gICAgICB9O1xuICAgIH1cbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuVHlwZVJlZmVyZW5jZTpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHQ6IFwicmVmXCIsXG4gICAgICAgIGlkOiAoKHR5cGVOb2RlIGFzIHRzLlR5cGVSZWZlcmVuY2VOb2RlKS50eXBlTmFtZSBhcyB0cy5JZGVudGlmaWVyKS5lc2NhcGVkVGV4dC50b1N0cmluZygpLFxuICAgICAgICBhcmdzOiAodHlwZU5vZGUgYXMgdHMuVHlwZVJlZmVyZW5jZU5vZGUpLnR5cGVBcmd1bWVudHM/Lm1hcCgodHlwZUFyZykgPT5cbiAgICAgICAgICByZXNvbHZlVHlwZU5vZGUodHlwZUFyZyksXG4gICAgICAgICksXG4gICAgICB9O1xuICAgIGNhc2UgdHMuU3ludGF4S2luZC5VbmlvblR5cGU6XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0OiBcInVuaW9uXCIsXG4gICAgICAgIHR5cGVzOiAodHlwZU5vZGUgYXMgdHMuVW5pb25UeXBlTm9kZSkudHlwZXMubWFwKCh0eXBlKSA9PiByZXNvbHZlVHlwZU5vZGUodHlwZSkpLFxuICAgICAgfTtcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuSW50ZXJzZWN0aW9uVHlwZTpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHQ6IFwiaW50ZXJzZWN0aW9uXCIsXG4gICAgICAgIHR5cGVzOiAodHlwZU5vZGUgYXMgdHMuSW50ZXJzZWN0aW9uVHlwZU5vZGUpLnR5cGVzLm1hcCgodHlwZSkgPT4gcmVzb2x2ZVR5cGVOb2RlKHR5cGUpKSxcbiAgICAgIH07XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLkluZGV4ZWRBY2Nlc3NUeXBlOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdDogXCJpbmRleGVkLWFjY2Vzc1wiLFxuICAgICAgICBvYmplY3Q6IHJlc29sdmVUeXBlTm9kZSgodHlwZU5vZGUgYXMgdHMuSW5kZXhlZEFjY2Vzc1R5cGVOb2RlKS5vYmplY3RUeXBlKSxcbiAgICAgICAgaW5kZXg6IHJlc29sdmVUeXBlTm9kZSgodHlwZU5vZGUgYXMgdHMuSW5kZXhlZEFjY2Vzc1R5cGVOb2RlKS5pbmRleFR5cGUpLFxuICAgICAgfTtcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuVHVwbGVUeXBlOlxuICAgICAgaWYgKHRzLmlzVHVwbGVUeXBlTm9kZSh0eXBlTm9kZSkpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB0OiBcInR1cGxlLXR5cGVcIixcbiAgICAgICAgICBlbGVtZW50czogdHlwZU5vZGUuZWxlbWVudHMubWFwKChlbGVtKSA9PiByZXNvbHZlVHlwZU5vZGUoZWxlbSkpLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLlBhcmVudGhlc2l6ZWRUeXBlOlxuICAgICAgLy8g6rSE7Zi466GcIOustuyduCDtg4DsnoUgKOyYiDogKEEgJiBCKVtdIOyXkOyEnCAoQSAmIEIpKVxuICAgICAgLy8g64K067aAIO2DgOyeheydhCDsnqzqt4DsoIHsnLzroZwgcmVzb2x2ZVxuICAgICAgcmV0dXJuIHJlc29sdmVUeXBlTm9kZSgodHlwZU5vZGUgYXMgdHMuUGFyZW50aGVzaXplZFR5cGVOb2RlKS50eXBlKTtcbiAgICBjYXNlIHVuZGVmaW5lZDpcbiAgICAgIHRocm93IG5ldyBFcnJvcihgdHlwZU5vZGUgdW5kZWZpbmVkYCk7XG4gIH1cblxuICBjb25zb2xlLmRlYnVnKHR5cGVOb2RlKTtcbiAgdGhyb3cgbmV3IEVycm9yKGDslYwg7IiYIOyXhuuKlCBTeW50YXhLaW5kICR7dHlwZU5vZGUua2luZH1gKTtcbn1cblxuZnVuY3Rpb24gcmVzb2x2ZVBhcmFtRGVjKFxuICBwYXJhbURlYzoge1xuICAgIG5hbWU6IHRzLkJpbmRpbmdOYW1lO1xuICAgIHR5cGU6IHRzLlR5cGVOb2RlO1xuICAgIG9wdGlvbmFsPzogYm9vbGVhbjtcbiAgICBkZWZhdWx0RGVmPzogc3RyaW5nO1xuICB9LFxuICBpbmRleDogbnVtYmVyID0gMCxcbik6IEFwaVBhcmFtIHtcbiAgY29uc3QgbmFtZSA9IHBhcmFtRGVjLm5hbWUgYXMgdHMuSWRlbnRpZmllcjtcbiAgY29uc3QgdHlwZSA9IHJlc29sdmVUeXBlTm9kZShwYXJhbURlYy50eXBlKTtcblxuICBpZiAobmFtZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgY29uc29sZS5kZWJ1Zyh7IG5hbWUsIHR5cGUsIHBhcmFtRGVjIH0pO1xuICB9XG5cbiAgY29uc3QgcmVzdWx0OiBBcGlQYXJhbSA9IHtcbiAgICBuYW1lOiBuYW1lLmVzY2FwZWRUZXh0ID8gbmFtZS5lc2NhcGVkVGV4dC50b1N0cmluZygpIDogYG5vbmFtZUF0JHtpbmRleH1gLFxuICAgIHR5cGUsXG4gICAgb3B0aW9uYWw6IHBhcmFtRGVjLm9wdGlvbmFsID09PSB0cnVlLFxuICAgIGRlZmF1bHREZWY6IHBhcmFtRGVjPy5kZWZhdWx0RGVmLFxuICB9O1xuXG4gIC8vIOq1rOyhsOu2hO2VtO2VoOuLueydmCDqsr3smrAg7YOA7J6F7J2066aEIOyCrOyaqVxuICBpZiAoXG4gICAgdHMuaXNPYmplY3RCaW5kaW5nUGF0dGVybihuYW1lKSAmJlxuICAgIHRzLmlzVHlwZVJlZmVyZW5jZU5vZGUocGFyYW1EZWMudHlwZSkgJiZcbiAgICB0cy5pc0lkZW50aWZpZXIocGFyYW1EZWMudHlwZS50eXBlTmFtZSlcbiAgKSB7XG4gICAgcmVzdWx0Lm5hbWUgPSBpbmZsZWN0aW9uLmNhbWVsaXplKHBhcmFtRGVjLnR5cGUudHlwZU5hbWUudGV4dCwgdHJ1ZSk7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5mdW5jdGlvbiBwcmludE5vZGUobm9kZTogdHMuTm9kZSB8IHVuZGVmaW5lZCwgc291cmNlRmlsZTogdHMuU291cmNlRmlsZSk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGlmIChub2RlID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgY29uc3QgcHJpbnRlciA9IHRzLmNyZWF0ZVByaW50ZXIoeyBuZXdMaW5lOiB0cy5OZXdMaW5lS2luZC5MaW5lRmVlZCB9KTtcbiAgcmV0dXJuIHByaW50ZXIucHJpbnROb2RlKHRzLkVtaXRIaW50LlVuc3BlY2lmaWVkLCBub2RlLCBzb3VyY2VGaWxlKTtcbn1cbiJdLCJuYW1lcyI6WyJhc3NlcnQiLCJyZWFkRmlsZSIsImluZmxlY3Rpb24iLCJ0cyIsInJlZ2lzdGVyZWRBcGlzIiwidmFsaWRhdGVNZXRob2ROYW1lIiwicmVhZEFwaXNGcm9tRmlsZSIsImZpbGVQYXRoIiwiZW5kc1dpdGgiLCJFcnJvciIsInNvdXJjZUZpbGUiLCJjcmVhdGVTb3VyY2VGaWxlIiwidG9TdHJpbmciLCJTY3JpcHRUYXJnZXQiLCJMYXRlc3QiLCJtZXRob2RzIiwibW9kZWxOYW1lIiwibWV0aG9kTmFtZSIsInZpc2l0b3IiLCJub2RlIiwiaXNDbGFzc0RlY2xhcmF0aW9uIiwibmFtZSIsImlzSWRlbnRpZmllciIsImVzY2FwZWRUZXh0IiwicmVwbGFjZSIsImlzTWV0aG9kRGVjbGFyYXRpb24iLCJ0eXBlUGFyYW1ldGVycyIsIm1hcCIsInR5cGVQYXJhbSIsInRwIiwidCIsImlkIiwiY29uc3RyYWludCIsInJlc29sdmVUeXBlTm9kZSIsInVuZGVmaW5lZCIsInBhcmFtZXRlcnMiLCJwYXJhbURlYyIsImluZGV4IiwiZGVmYXVsdERlZiIsInByaW50Tm9kZSIsImluaXRpYWxpemVyIiwicmVzb2x2ZVBhcmFtRGVjIiwidHlwZSIsIm9wdGlvbmFsIiwicXVlc3Rpb25Ub2tlbiIsInJldHVyblR5cGUiLCJwdXNoIiwiZm9yRWFjaENoaWxkIiwibGVuZ3RoIiwiY3VycmVudE1vZGVsQXBpcyIsImZpbHRlciIsImFwaSIsImZpbmQiLCJtZXRob2QiLCJleHRlbmRlZEFwaXMiLCJmb3VuZE1ldGhvZCIsInR5cGVOb2RlIiwia2luZCIsIlN5bnRheEtpbmQiLCJBbnlLZXl3b3JkIiwiVW5rbm93bktleXdvcmQiLCJTdHJpbmdLZXl3b3JkIiwiTnVtYmVyS2V5d29yZCIsIkJvb2xlYW5LZXl3b3JkIiwiVW5kZWZpbmVkS2V5d29yZCIsIk51bGxLZXl3b3JkIiwiVm9pZEtleXdvcmQiLCJMaXRlcmFsVHlwZSIsImxpdGVyYWwiLCJpc1N0cmluZ0xpdGVyYWwiLCJ2YWx1ZSIsInRleHQiLCJpc051bWVyaWNMaXRlcmFsIiwiTnVtYmVyIiwiVHJ1ZUtleXdvcmQiLCJGYWxzZUtleXdvcmQiLCJBcnJheVR5cGUiLCJhcnJOb2RlIiwiZWxlbWVudHNUeXBlIiwiZWxlbWVudFR5cGUiLCJUeXBlTGl0ZXJhbCIsImxpdGVyYWxOb2RlIiwicHJvcHMiLCJtZW1iZXJzIiwibWVtYmVyIiwiaXNJbmRleFNpZ25hdHVyZURlY2xhcmF0aW9uIiwicmVzIiwiVHlwZVJlZmVyZW5jZSIsInR5cGVOYW1lIiwiYXJncyIsInR5cGVBcmd1bWVudHMiLCJ0eXBlQXJnIiwiVW5pb25UeXBlIiwidHlwZXMiLCJJbnRlcnNlY3Rpb25UeXBlIiwiSW5kZXhlZEFjY2Vzc1R5cGUiLCJvYmplY3QiLCJvYmplY3RUeXBlIiwiaW5kZXhUeXBlIiwiVHVwbGVUeXBlIiwiaXNUdXBsZVR5cGVOb2RlIiwiZWxlbWVudHMiLCJlbGVtIiwiUGFyZW50aGVzaXplZFR5cGUiLCJjb25zb2xlIiwiZGVidWciLCJyZXN1bHQiLCJpc09iamVjdEJpbmRpbmdQYXR0ZXJuIiwiaXNUeXBlUmVmZXJlbmNlTm9kZSIsImNhbWVsaXplIiwicHJpbnRlciIsImNyZWF0ZVByaW50ZXIiLCJuZXdMaW5lIiwiTmV3TGluZUtpbmQiLCJMaW5lRmVlZCIsIkVtaXRIaW50IiwiVW5zcGVjaWZpZWQiXSwibWFwcGluZ3MiOiJBQUFBLE9BQU9BLFlBQVksU0FBUztBQUM1QixTQUFTQyxRQUFRLFFBQVEsbUJBQWM7QUFDdkMsT0FBT0MsZ0JBQWdCLGFBQWE7QUFDcEMsT0FBT0MsUUFBUSxhQUFhO0FBQzVCLFNBQTJCQyxjQUFjLFFBQVEsdUJBQW9CO0FBQ3JFLFNBQVNDLGtCQUFrQixRQUFRLHNCQUFtQjtBQUl0RDs7Ozs7Q0FLQyxHQUNELE9BQU8sZUFBZUMsaUJBQWlCQyxRQUFzQjtJQUMz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
@@ -1,3 +1,4 @@
1
+ import { EventEmitter } from "events";
1
2
  import type { z } from "zod";
2
3
  import type { WorkflowMetadata } from "..";
3
4
  import { registeredApis } from "../api/decorators";
@@ -16,6 +17,7 @@ export declare class Syncer {
16
17
  models: LoadedModels;
17
18
  workflows: Map<string, WorkflowMetadata[]>;
18
19
  isSyncing: boolean;
20
+ eventEmitter: EventEmitter;
19
21
  /**
20
22
  * 체크섬이 변경된 부분에 대해 싱크를 진행합니다.
21
23
  * 다만 sonamu.shared.ts는 체크섬 비교 없이 무조건 싱크(복사)합니다.
@@ -95,7 +97,6 @@ export declare class Syncer {
95
97
  checkExists(entityId: string, enums: {
96
98
  [name: string]: z.ZodEnum<Readonly<Record<string, string | number>>>;
97
99
  }): Promise<Record<`${TemplateKey}${string}`, boolean>>;
98
- syncUI(): void;
99
100
  /**
100
101
  * 하위호환용 프록시 메소드입니다.
101
102
  */
@@ -1 +1 @@
1
- {"version":3,"file":"syncer.d.ts","sourceRoot":"","sources":["../../src/syncer/syncer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"syncer.d.ts","sourceRoot":"","sources":["../../src/syncer/syncer.ts"],"names":[],"mappings":"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"}