sonamu 0.10.10 → 0.10.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/bin/cli.js CHANGED
@@ -524,11 +524,11 @@ async function setupFixtureManager() {
524
524
  }
525
525
  async function migrate_apply(targets) {
526
526
  await setupMigrator();
527
- await migrator.runAction("apply", targets);
527
+ await migrator.apply(targets);
528
528
  }
529
529
  async function migrate_run() {
530
530
  await setupMigrator();
531
- await migrator.runAction("apply", getMigrateRunTargets());
531
+ await migrator.apply(getMigrateRunTargets());
532
532
  }
533
533
  async function migrate_generate() {
534
534
  await setupMigrator();
@@ -849,4 +849,4 @@ async function auth_add_companions() {
849
849
  //#endregion
850
850
  export {};
851
851
 
852
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLmpzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9iaW4vY2xpLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhc3NlcnQgZnJvbSBcImFzc2VydFwiO1xuaW1wb3J0IHsgZXhlY1N5bmMsIHNwYXduIH0gZnJvbSBcImNoaWxkX3Byb2Nlc3NcIjtcbmltcG9ydCB7IG1rZGlyLCByZWFkZGlyLCB3cml0ZUZpbGUgfSBmcm9tIFwiZnMvcHJvbWlzZXNcIjtcbmltcG9ydCB7IGNyZWF0ZVJlcXVpcmUgfSBmcm9tIFwibW9kdWxlXCI7XG5pbXBvcnQgcGF0aCBmcm9tIFwicGF0aFwiO1xuaW1wb3J0IHByb2Nlc3MgZnJvbSBcInByb2Nlc3NcIjtcblxuaW1wb3J0IGNoYWxrIGZyb20gXCJjaGFsa1wiO1xuaW1wb3J0IGtuZXggZnJvbSBcImtuZXhcIjtcbmltcG9ydCB7IHR5cGUgS25leCB9IGZyb20gXCJrbmV4XCI7XG5pbXBvcnQgeyB0c2ljbGkgfSBmcm9tIFwidHNpY2xpXCI7XG5cbmltcG9ydCB7IFNvbmFtdSB9IGZyb20gXCIuLi9hcGkvc29uYW11XCI7XG5pbXBvcnQgeyBhZGRDb21wYW5pb25zVG9FbnRpdGllcywgZ2VuZXJhdGVCZXR0ZXJBdXRoRW50aXRpZXMgfSBmcm9tIFwiLi4vYXV0aC9hdXRoLWdlbmVyYXRvclwiO1xuaW1wb3J0IHsgaXNWYWxpZFBsdWdpbklkLCBTVVBQT1JURURfUExVR0lOX0lEUyB9IGZyb20gXCIuLi9hdXRoL3BsdWdpbnMvZW50aXR5LWRlZmluaXRpb25zXCI7XG5pbXBvcnQgeyB0eXBlIEJldHRlckF1dGhQbHVnaW5JZCB9IGZyb20gXCIuLi9hdXRoL3BsdWdpbnMvZW50aXR5LWRlZmluaXRpb25zXCI7XG5pbXBvcnQgeyB0eXBlIFNvbmFtdURCQ29uZmlnIH0gZnJvbSBcIi4uL2RhdGFiYXNlL2RiXCI7XG5pbXBvcnQgeyBFbnRpdHlNYW5hZ2VyIH0gZnJvbSBcIi4uL2VudGl0eS9lbnRpdHktbWFuYWdlclwiO1xuaW1wb3J0IHsgZ2V0U29uYW11RW52aXJvbm1lbnQgfSBmcm9tIFwiLi4vZW52XCI7XG5pbXBvcnQgeyBNaWdyYXRvciB9IGZyb20gXCIuLi9taWdyYXRpb24vbWlncmF0b3JcIjtcbmltcG9ydCB7IEZpeHR1cmVNYW5hZ2VyIH0gZnJvbSBcIi4uL3Rlc3RpbmcvZml4dHVyZS1tYW5hZ2VyXCI7XG5pbXBvcnQge1xuICBleGVjV2l0aExpbmVQcmVmaXgsXG4gIHByaW50QnVpbGRTdW1tYXJ5LFxuICBwcmludFRhc2tGYWlsZWQsXG4gIHByaW50VGFza0hlYWRlcixcbiAgcHJpbnRUYXNrU3RhcnQsXG4gIHByaW50VGFza1N1Y2Nlc3MsXG59IGZyb20gXCIuLi91dGlscy9jb25zb2xlLXV0aWxcIjtcbmltcG9ydCB7IGV4aXN0cyB9IGZyb20gXCIuLi91dGlscy9mcy11dGlsc1wiO1xuaW1wb3J0IHsgZmluZEFwaVJvb3RQYXRoLCBmaW5kQXBwUm9vdFBhdGggfSBmcm9tIFwiLi4vdXRpbHMvdXRpbHNcIjtcbmltcG9ydCB7IEFQSV9BUlRJRkFDVFMsIFdFQl9BUlRJRkFDVFMgfSBmcm9tIFwiLi9idWlsZC1jb25maWdcIjtcbmltcG9ydCB7IHR5cGUgQnVpbGRBcnRpZmFjdCB9IGZyb20gXCIuL2J1aWxkLWNvbmZpZ1wiO1xuaW1wb3J0IHsgZml4dHVyZUV4cGxvcmVDb21tYW5kLCBmaXh0dXJlRmV0Y2hDb21tYW5kLCBmaXh0dXJlR2VuQ29tbWFuZCB9IGZyb20gXCIuL2ZpeHR1cmVcIjtcbmltcG9ydCB7IGdldE1pZ3JhdGVSdW5UYXJnZXRzIH0gZnJvbSBcIi4vbWlncmF0ZS10YXJnZXRzXCI7XG5pbXBvcnQgeyB0ZXN0Q29tbWFuZCB9IGZyb20gXCIuL3Rlc3QtY29tbWFuZFwiO1xuXG5sZXQgbWlncmF0b3I6IE1pZ3JhdG9yO1xuXG4vKipcbiAqIENMSSDsmLXshZjsnYQg7YyM7Iux7ZWY64qUIO2XrO2NvCDtlajsiJhcbiAqL1xuZnVuY3Rpb24gcGFyc2VDbGlPcHRpb25zKGFyZ3Y6IHN0cmluZ1tdID0gcHJvY2Vzcy5hcmd2KToge1xuICBmbGFnczogU2V0PHN0cmluZz47IC8vIC0tcmVnZW5lcmF0ZSwgLS1haSwgLS1uby1jb25lcyDrk7FcbiAgb3B0aW9uczogUmVjb3JkPHN0cmluZywgc3RyaW5nPjsgLy8gLS1sb2NhbGUga28g65OxXG59IHtcbiAgY29uc3QgZmxhZ3MgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgY29uc3Qgb3B0aW9uczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYXJndi5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IGFyZyA9IGFyZ3ZbaV07XG4gICAgaWYgKCFhcmcuc3RhcnRzV2l0aChcIi0tXCIpKSBjb250aW51ZTtcblxuICAgIC8vIC0tb3B0aW9uPXZhbHVlIO2YleyLnVxuICAgIGlmIChhcmcuaW5jbHVkZXMoXCI9XCIpKSB7XG4gICAgICBjb25zdCBba2V5LCB2YWx1ZV0gPSBhcmcuc2xpY2UoMikuc3BsaXQoXCI9XCIpO1xuICAgICAgb3B0aW9uc1trZXldID0gdmFsdWU7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICAvLyAtLW9wdGlvbiB2YWx1ZSDtmJXsi53snbjsp4Ag7ZmV7J24XG4gICAgY29uc3QgbmV4dEFyZyA9IGFyZ3ZbaSArIDFdO1xuICAgIGlmIChuZXh0QXJnICYmICFuZXh0QXJnLnN0YXJ0c1dpdGgoXCItLVwiKSAmJiAhbmV4dEFyZy5zdGFydHNXaXRoKFwiLVwiKSkge1xuICAgICAgb3B0aW9uc1thcmcuc2xpY2UoMildID0gbmV4dEFyZztcbiAgICAgIGkrKzsgLy8g64uk7J2MIGFyZ+uKlCDqsJLsnbTrr4DroZwg7Iqk7YK1XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIC0tZmxhZyDtmJXsi51cbiAgICAgIGZsYWdzLmFkZChhcmcuc2xpY2UoMikpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7IGZsYWdzLCBvcHRpb25zIH07XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGJvb3RzdHJhcCgpIHtcbiAgY29uc3Qgbm90VG9Jbml0ID0gW1wiZGV2XCIsIFwiYnVpbGRcIiwgXCJzdGFydFwiLCBcInNraWxsc1wiLCBcInRlc3RcIl0uaW5jbHVkZXMocHJvY2Vzcy5hcmd2WzJdID8/IFwiXCIpO1xuICBpZiAoIW5vdFRvSW5pdCkge1xuICAgIGF3YWl0IFNvbmFtdS5pbml0KGZhbHNlLCBmYWxzZSk7XG4gIH1cblxuICB0cnkge1xuICAgIC8vIHRzaWNsaeuKlCDsoJXtmZXtlZwg66qF66C57Ja0IOunpOy5reunjCDsp4Dsm5DtlZjrr4DroZwsIC0t66GcIOyLnOyeke2VmOuKlCDsmLXshZjqs7wg6re4IOqwkuydhCDtlYTthLDrp4Htlanri4jri6QuXG4gICAgLy8g7Ji17IWYIO2MjOyLseydgCDqsIEgcnVubmVyIO2VqOyImOyXkOyEnCDsm5Drs7ggcHJvY2Vzcy5hcmd266W8IOyCrOyaqe2VmOyXrCDsiJjtlontlanri4jri6QuXG4gICAgLy8gXCItLVwiKGJhcmUgZG91YmxlIGRhc2gp64qUIHBhc3N0aHJvdWdoIOq1rOu2hOyekOydtOuvgOuhnCwg6re4IOuSpOydmCDrqqjrk6Ag7J247J6Q64+EIOygnOyZuO2VqeuLiOuLpC5cbiAgICBjb25zdCBmaWx0ZXJlZEFyZ3Y6IHN0cmluZ1tdID0gW107XG4gICAgbGV0IHNraXBOZXh0ID0gZmFsc2U7XG4gICAgbGV0IGFmdGVyRG91YmxlRGFzaCA9IGZhbHNlO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcHJvY2Vzcy5hcmd2Lmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBhcmcgPSBwcm9jZXNzLmFyZ3ZbaV07XG4gICAgICBpZiAoYXJnID09PSBcIi0tXCIpIHtcbiAgICAgICAgYWZ0ZXJEb3VibGVEYXNoID0gdHJ1ZTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAoYWZ0ZXJEb3VibGVEYXNoKSBjb250aW51ZTtcbiAgICAgIGlmIChza2lwTmV4dCkge1xuICAgICAgICBza2lwTmV4dCA9IGZhbHNlO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmIChhcmcuc3RhcnRzV2l0aChcIi0tXCIpKSB7XG4gICAgICAgIC8vIC0tb3B0aW9uPXZhbHVlIO2YleyLneydgCDsnbQgYXJn66eMIOyKpO2CtVxuICAgICAgICBpZiAoYXJnLmluY2x1ZGVzKFwiPVwiKSkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIC8vIC0tb3B0aW9uIHZhbHVlIO2YleyLneyduOyngCDtmZXsnbg6IOuLpOydjCBhcmfqsIAgLS3roZwg7Iuc7J6R7ZWY7KeAIOyViuycvOuptCDqsJLsnbQg7J6I64qUIOqyg1xuICAgICAgICBjb25zdCBuZXh0QXJnID0gcHJvY2Vzcy5hcmd2W2kgKyAxXTtcbiAgICAgICAgaWYgKG5leHRBcmcgJiYgIW5leHRBcmcuc3RhcnRzV2l0aChcIi0tXCIpICYmICFuZXh0QXJnLnN0YXJ0c1dpdGgoXCItXCIpKSB7XG4gICAgICAgICAgc2tpcE5leHQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgZmlsdGVyZWRBcmd2LnB1c2goYXJnKTtcbiAgICB9XG5cbiAgICAvLyBidWlsZC9kZXYg66qF66C57Ja06rCAIOyEnOu4jOy7pOunqOuTnCDsl4bsnbQg7Zi47Lac65CgIOuVjCBcImFsbFwi7J2EIOq4sOuzuOqwkuycvOuhnCDstpTqsIDtlanri4jri6QuXG4gICAgLy8g7JiIOiBgc29uYW11IGJ1aWxkYCDihpIgYHNvbmFtdSBidWlsZCBhbGxgLCBgc29uYW11IGRldmAg4oaSIGBzb25hbXUgZGV2IGFsbGBcbiAgICBjb25zdCBjbWQgPSBmaWx0ZXJlZEFyZ3ZbMl07XG4gICAgaWYgKChjbWQgPT09IFwiYnVpbGRcIiB8fCBjbWQgPT09IFwiZGV2XCIpICYmIGZpbHRlcmVkQXJndi5sZW5ndGggPT09IDMpIHtcbiAgICAgIGZpbHRlcmVkQXJndi5wdXNoKFwiYWxsXCIpO1xuICAgIH1cblxuICAgIC8vIHRlc3Qg7Luk66eo65Oc64qUIOqwgOuzgCDsnbjsnpAo7YyM7J2866qFLCAtLXBhdHRlcm4g65OxKeulvCDrsJvsnLzrr4DroZwgdHNpY2xp66W8IOyasO2ajO2VqeuLiOuLpC5cbiAgICBpZiAoY21kID09PSBcInRlc3RcIikge1xuICAgICAgcmV0dXJuIHRlc3RDb21tYW5kKCk7XG4gICAgfVxuXG4gICAgYXdhaXQgdHNpY2xpKGZpbHRlcmVkQXJndiwge1xuICAgICAgdHlwZXM6IHtcbiAgICAgICAgXCIjZW50aXR5SWRcIjoge1xuICAgICAgICAgIHR5cGU6IFwiYXV0b2NvbXBsZXRlXCIsXG4gICAgICAgICAgbmFtZTogXCIjZW50aXR5SWRcIixcbiAgICAgICAgICBtZXNzYWdlOiBcIlBsZWFzZSBpbnB1dCAjZW50aXR5SWRcIixcbiAgICAgICAgICBjaG9pY2VzOiBFbnRpdHlNYW5hZ2VyLmdldEFsbFBhcmVudElkcygpLm1hcCgoZW50aXR5SWQpID0+ICh7XG4gICAgICAgICAgICB0aXRsZTogZW50aXR5SWQsXG4gICAgICAgICAgICB2YWx1ZTogZW50aXR5SWQsXG4gICAgICAgICAgfSkpLFxuICAgICAgICB9LFxuICAgICAgICBcIiNyZWNvcmRJZHNcIjogXCJudW1iZXJbXVwiLFxuICAgICAgICBcIiNuYW1lXCI6IFwic3RyaW5nXCIsXG4gICAgICAgIFwiI3RhcmdldHNcIjoge1xuICAgICAgICAgIHR5cGU6IFwibXVsdGlzZWxlY3RcIixcbiAgICAgICAgICBuYW1lOiBcIiN0YXJnZXRzXCIsXG4gICAgICAgICAgbWVzc2FnZTogXCJQbGVhc2UgaW5wdXQgI3RhcmdldHNcIixcbiAgICAgICAgICBjaG9pY2VzOiBbXG4gICAgICAgICAgICB7IHRpdGxlOiBcIkRldmVsb3BtZW50XCIsIHZhbHVlOiBcImRldmVsb3BtZW50XCIgfSxcbiAgICAgICAgICAgIHsgdGl0bGU6IFwiU3RhZ2luZ1wiLCB2YWx1ZTogXCJzdGFnaW5nXCIgfSxcbiAgICAgICAgICAgIHsgdGl0bGU6IFwiUHJvZHVjdGlvblwiLCB2YWx1ZTogXCJwcm9kdWN0aW9uXCIgfSxcbiAgICAgICAgICAgIHsgdGl0bGU6IFwiRml4dHVyZVwiLCB2YWx1ZTogXCJmaXh0dXJlXCIgfSxcbiAgICAgICAgICAgIHsgdGl0bGU6IFwiVGVzdFwiLCB2YWx1ZTogXCJ0ZXN0XCIgfSxcbiAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIGFyZ3M6IFtcbiAgICAgICAgW1wiZml4dHVyZVwiLCBcImluaXRcIl0sXG4gICAgICAgIFtcImZpeHR1cmVcIiwgXCJpbXBvcnRcIiwgXCIjZW50aXR5SWRcIiwgXCIjcmVjb3JkSWRzXCJdLFxuICAgICAgICBbXCJmaXh0dXJlXCIsIFwic3luY1wiXSxcbiAgICAgICAgW1wiZml4dHVyZVwiLCBcImdlblwiXSxcbiAgICAgICAgW1wiZml4dHVyZVwiLCBcImZldGNoXCJdLFxuICAgICAgICBbXCJmaXh0dXJlXCIsIFwiZXhwbG9yZVwiXSxcbiAgICAgICAgW1wibWlncmF0ZVwiLCBcInJ1blwiXSxcbiAgICAgICAgW1wibWlncmF0ZVwiLCBcImFwcGx5XCIsIFwiI3RhcmdldHNcIl0sXG4gICAgICAgIFtcIm1pZ3JhdGVcIiwgXCJnZW5lcmF0ZVwiXSxcbiAgICAgICAgW1wibWlncmF0ZVwiLCBcInN0YXR1c1wiXSxcbiAgICAgICAgW1wic3R1YlwiLCBcInByYWN0aWNlXCIsIFwiI25hbWVcIl0sXG4gICAgICAgIFtcInN0dWJcIiwgXCJlbnRpdHlcIiwgXCIjbmFtZVwiXSxcbiAgICAgICAgW1wic2NhZmZvbGRcIiwgXCJtb2RlbFwiLCBcIiNlbnRpdHlJZFwiXSxcbiAgICAgICAgW1wic2NhZmZvbGRcIiwgXCJtb2RlbF90ZXN0XCIsIFwiI2VudGl0eUlkXCJdLFxuICAgICAgICBbXCJzY2FmZm9sZFwiLCBcInZpZXdfbGlzdFwiLCBcIiNlbnRpdHlJZFwiXSxcbiAgICAgICAgW1wic2NhZmZvbGRcIiwgXCJ2aWV3X2Zvcm1cIiwgXCIjZW50aXR5SWRcIl0sXG4gICAgICAgIFtcImNvbmVcIiwgXCJnZW5cIiwgXCIjZW50aXR5SWRcIl0sXG4gICAgICAgIFtcInN5bmNcIl0sXG4gICAgICAgIFtcImJ1aWxkXCIsIFwiYWxsXCJdLFxuICAgICAgICBbXCJidWlsZFwiLCBcImFwaVwiXSxcbiAgICAgICAgW1wiYnVpbGRcIiwgXCJ3ZWJcIl0sXG4gICAgICAgIFtcImRldlwiLCBcImFsbFwiXSxcbiAgICAgICAgW1wiZGV2XCIsIFwiYXBpXCJdLFxuICAgICAgICBbXCJkZXZcIiwgXCJ3ZWJcIl0sXG4gICAgICAgIFtcInN0YXJ0XCJdLFxuICAgICAgICBbXCJza2lsbHNcIiwgXCJzeW5jXCJdLFxuICAgICAgICBbXCJ0ZXN0XCJdLFxuICAgICAgICBbXCJhdXRoXCIsIFwiZ2VuZXJhdGVcIl0sXG4gICAgICAgIFtcImF1dGhcIiwgXCJhZGQtY29tcGFuaW9uc1wiXSxcbiAgICAgIF0sXG4gICAgICBydW5uZXJzOiB7XG4gICAgICAgIG1pZ3JhdGVfc3RhdHVzLFxuICAgICAgICBtaWdyYXRlX3J1bixcbiAgICAgICAgbWlncmF0ZV9hcHBseSxcbiAgICAgICAgbWlncmF0ZV9nZW5lcmF0ZSxcbiAgICAgICAgZml4dHVyZV9pbml0LFxuICAgICAgICBmaXh0dXJlX2ltcG9ydCxcbiAgICAgICAgZml4dHVyZV9zeW5jLFxuICAgICAgICBmaXh0dXJlX2dlbixcbiAgICAgICAgZml4dHVyZV9mZXRjaCxcbiAgICAgICAgZml4dHVyZV9leHBsb3JlLFxuICAgICAgICBzdHViX3ByYWN0aWNlLFxuICAgICAgICBzdHViX2VudGl0eSxcbiAgICAgICAgc2NhZmZvbGRfbW9kZWwsXG4gICAgICAgIHNjYWZmb2xkX21vZGVsX3Rlc3QsXG4gICAgICAgIHNjYWZmb2xkX3ZpZXdfbGlzdCxcbiAgICAgICAgc2NhZmZvbGRfdmlld19mb3JtLFxuICAgICAgICBjb25lX2dlbixcbiAgICAgICAgc3luYyxcbiAgICAgICAgYnVpbGRfYWxsLFxuICAgICAgICBidWlsZF9hcGksXG4gICAgICAgIGJ1aWxkX3dlYixcbiAgICAgICAgZGV2X2FsbCxcbiAgICAgICAgZGV2X2FwaSxcbiAgICAgICAgZGV2X3dlYixcbiAgICAgICAgc3RhcnQsXG4gICAgICAgIHNraWxsc19zeW5jOiBza2lsbHNNaWdyYXRpb25Ob3RpY2UsXG4gICAgICAgIHRlc3Q6IHRlc3RDb21tYW5kLFxuICAgICAgICBhdXRoX2dlbmVyYXRlLFxuICAgICAgICBcImF1dGhfYWRkLWNvbXBhbmlvbnNcIjogYXV0aF9hZGRfY29tcGFuaW9ucyxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH0gZmluYWxseSB7XG4gICAgYXdhaXQgU29uYW11LmRlc3Ryb3koKTtcbiAgfVxufVxuXG5ib290c3RyYXAoKS5maW5hbGx5KGFzeW5jICgpID0+IHtcbiAgYXdhaXQgRml4dHVyZU1hbmFnZXIuZGVzdHJveSgpO1xufSk7XG5cbi8qKlxuICogcG5wbSBzeW5jIO2VmOuptCDsi6TtlonrkJjripQg7ZWo7IiY7J6F64uI64ukLlxuICog7ZSE66Gc7KCd7Yq466W8IOyLse2BrO2VqeuLiOuLpC5cbiAqXG4gKiBgLS1mb3JjZWAg7Ji17IWY7J20IOyjvOyWtOyngOuptCBsb2Nr7J2EIOustOyLnO2VmOqzoCDtkoAt7Iux7YGs66W8IOyImO2Wie2VqeuLiOuLpC5cbiAqIGdpdCBwb3N0LW1lcmdlIGhvb2vsnbTrgpggQ0nsl5DshJwg66ekIHB1bGwg7ZuEIOyekOuPmSDsi6TtlontlaAg7IiYIOyeiOuPhOuhnSDrhbjstpwuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHN5bmMoKSB7XG4gIGNvbnN0IHsgZmxhZ3MgfSA9IHBhcnNlQ2xpT3B0aW9ucygpO1xuICBpZiAoZmxhZ3MuaGFzKFwiZm9yY2VcIikpIHtcbiAgICBhd2FpdCBTb25hbXUuc3luY2VyLmZvcmNlU3luYygpO1xuICB9IGVsc2Uge1xuICAgIGF3YWl0IFNvbmFtdS5zeW5jZXIuc3luYygpO1xuICB9XG59XG5cbi8qKlxuICog7J207KCEIOyDneyEsSDtlITroZzsoJ3tirjsnZggcG9zdGluc3RhbGzsnbQg7JeF6re466CI7J2065Oc66W8IOunieyngCDslYrrj4TroZ0g6rWsIOuqheugueunjCDslYjsoITtlZjqsowg7KKF66OM7ZWp64uI64ukLlxuICovXG5hc3luYyBmdW5jdGlvbiBza2lsbHNNaWdyYXRpb25Ob3RpY2UoKSB7XG4gIGNvbnNvbGUubG9nKGNoYWxrLnllbGxvdyhcIidzb25hbXUgc2tpbGxzIHN5bmMnIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQuXCIpKTtcbiAgY29uc29sZS5sb2coXG4gICAgY2hhbGsuY3lhbihcIkluc3RhbGwgU29uYW11IHNraWxscyB3aXRoICducHggc2tpbGxzQGxhdGVzdCBhZGQgY2FydGFub3ZhLWFpL3NraWxscycuXCIpLFxuICApO1xufVxuXG4vKipcbiAqIEFQSSDqsJzrsJwg7ISc67KE66W8IOyLpO2Wie2VmOuKlCDqs7XthrUg66Gc7KeB7J6F64uI64ukLlxuICogZGV2X2FsbOqzvCBkZXZfYXBp7JeQ7IScIOqzteycoO2VqeuLiOuLpC5cbiAqXG4gKiBUeXBlU2NyaXB066W8IOuwlOuhnCDsi6TtlontlaAg7IiYIOyeiOuPhOuhnSBAc29uYW11LWtpdC90cy1sb2FkZXLrpbwsXG4gKiBITVLsnYQg7KeA7JuQ7ZWY6riwIOychO2VtCBAc29uYW11LWtpdC9obXItaG9va+ydhCBpbXBvcnTtlZjrqbAsXG4gKiDshozsiqTrp7Ug7KeA7JuQ7J2EIOychO2VtCAtLWVuYWJsZS1zb3VyY2UtbWFwcyDtlIzrnpjqt7jrpbwg7Y+s7ZWo7ZWY7JesIOyLpO2Wie2VqeuLiOuLpC5cbiAqXG4gKiDsnbTrlYwgQHNvbmFtdS1raXQvdHMtbG9hZGVy7JmAIEBzb25hbXUta2l0L2htci1ob29r64qUIHNvbmFtdeqwgCDsnpDssrTsoIHsnLzroZwg6rCA7KeA6rOgIOyeiOuKlCBkZXBlbmRlbmN57J6F64uI64ukLlxuICog65iQ7ZWcIOyLpO2WieyXkCDsgqzsmqntlZjripQgQHNvbmFtdS1raXQvaG1yLXJ1bm5lcuuPhCDrp4jssKzqsIDsp4DroZwgc29uYW116rCAIOyekOyytOyggeycvOuhnCDqsIDsp4Dqs6Ag7J6I64qUIGRlcGVuZGVuY3nsnoXri4jri6QuXG4gKiDrlLDrnbzshJwg7IKs7Jqp7J6QIO2UhOuhnOygne2KuOyXkOyEnOuKlCDsnbQg7IS4IO2MqO2CpOyngOulvCDsp4HsoJEg7ISk7LmY7ZWgIO2VhOyalOqwgCDsl4bsirXri4jri6QuXG4gKi9cbmZ1bmN0aW9uIHNwYXduQXBpRGV2U2VydmVyKG9wdGlvbnM/OiB7IGV4dHJhRW52PzogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB9KSB7XG4gIGNvbnN0IGFwaVJvb3QgPSBmaW5kQXBpUm9vdFBhdGgoKTtcbiAgY29uc3QgZW50cnlQb2ludCA9IFwic3JjL2luZGV4LnRzXCI7XG5cbiAgLy8g7J20IHNvbmFtdSDtjKjtgqTsp4DqsIAgZGVwZW5kZW5jaWVz66GcIOqwgOyngOqzoCDsnojripQgQHNvbmFtdS1raXQvaG1yLXJ1bm5lcuydmCBiaW4vcnVuLmpz66W8IOyCrOyaqe2VqeuLiOuLpC5cbiAgLy8g7J20IOqyveuhnCgvYmluL3J1bi5qcynripQgQHNvbmFtdS1raXQvaG1yLXJ1bm5lcuydmCBwYWNrYWdlLmpzb27snZggYmluIO2VhOuTnOyXkCDrqoXsi5zrkJjslrQg7J6I64qUIOq3uOqyg+qzvCDqsJnsirXri4jri6QuXG4gIGNvbnN0IGhvdFJ1bm5lckJpblBhdGggPSBjcmVhdGVSZXF1aXJlKGltcG9ydC5tZXRhLnVybCkucmVzb2x2ZShcbiAgICBcIkBzb25hbXUta2l0L2htci1ydW5uZXIvYmluL3J1bi5qc1wiLFxuICApO1xuXG4gIGNvbnN0IHNlcnZlclByb2Nlc3MgPSBzcGF3bihcbiAgICBwcm9jZXNzLmV4ZWNQYXRoLCAvLyBub2RlXG4gICAgW1xuICAgICAgaG90UnVubmVyQmluUGF0aCwgLy8g7J2066CH6rKMIO2VtOyEnCBob3QtcnVubmVy66W8IOyLpO2Wie2VmOq1rOyalFxuICAgICAgXCItLWNsZWFyLXNjcmVlbj1mYWxzZVwiLCAvLyDsnbTtlZggaG90LXJ1bm5lcuyXkOqyjCDrhJjqsqjspIQg7J247J6Q65Ok7J6F64uI64ukLlxuICAgICAgXCItLW5vZGUtYXJncz0tLWltcG9ydD1zb25hbXUvdHMtbG9hZGVyLXJlZ2lzdGVyXCIsIC8vIFR5cGVTY3JpcHQg7ISc7Y+s7Yq466W8IOychO2VnCDroZzrjZQsXG4gICAgICBcIi0tbm9kZS1hcmdzPS0taW1wb3J0PXNvbmFtdS9obXItaG9vay1yZWdpc3RlclwiLCAvLyBITVLsnYQg7KeA7JuQ7ZWY6riwIOychO2VnCBob29rLFxuICAgICAgXCItLW5vZGUtYXJncz0tLWVuYWJsZS1zb3VyY2UtbWFwc1wiLCAvLyDqt7jrpqzqs6Ag7IaM7Iqk66e1IOyngOybkOydhCDsnITtlZwg7ZSM656Y6re47J6F64uI64ukLlxuICAgICAgXCItLW9uLWtleT1yOnJlc3RhcnQ6UmVzdGFydCBzZXJ2ZXJcIiwgLy8gciDriITrpbTrqbQg7ISc67KEIOyerOyLnOyeke2VmOqyjCDtlbTspJjsmpQuXG4gICAgICBcIi0tb24ta2V5PWM6Y2xlYXI6Q2xlYXIgc2NyZWVuXCIsIC8vIGMg64iE66W066m0IO2EsOuvuOuEkCDtmZTrqbTsnYQg7KeA7JuM7KSY7JqULlxuICAgICAgYC0tb24ta2V5PWY6c2hlbGwocm0gJHtwYXRoLmpvaW4oYXBpUm9vdCwgXCJzb25hbXUubG9ja1wiKX0pOnJlc3RhcnQ6Rm9yY2UgcmVzdGFydGAsIC8vIGYg64iE66W066m0IGxvY2sg7KCc6rGwIO2bhCDsnqzsi5zsnpEg4oaSIOyDiCDtlITroZzshLjsiqTqsIAg67aA7Yq47Iqk7Yq4656p7JeQ7IScIO2SgC3si7HtgawuIGZvcmNlIHN5bmMgQ0xJ66W8IHNoZWxs66GcIOu2gOultOuptCDsgrTslYTsnojripQg7ISc67KE7J2YIHdhdGNoZXIg7Y+t7ZKN7J20IDpyZXN0YXJ07JmAIOy2qeuPjO2VtCDsg4Htg5wg7J207IOBLlxuXG4gICAgICBcIi0tb24ta2V5PWVudGVyOnNoZWxsKGVjaG8gaGkpOktleSBiaW5kaW5nIHRlc3RcIiwgLy8gZW50ZXLrpbwga2V566GcIOyTuCDsiJgg7J6I7J2M7J2EIOuztOydtOq4sCDsnITtlZwg7YWM7Iqk7Yq47J6F64uI64ukLlxuICAgICAgXCItLW9uLWtleT1jdHJsK2YgY3RybCtmOnNoZWxsKGdpdCBwdWxsICYmIHBucG0gaW5zdGFsbCAmJiBwbnBtIC0tZmlsdGVyIHNvbmFtdSBidWlsZCAmJiBlY2hvICdTb25hbXUgaXMgbm93IHVwLXRvLWRhdGUhJyk6cmVzdGFydDpQdWxsICYgaW5zdGFsbCAmIGJ1aWxkICYgcmVzdGFydFwiLCAvLyBtb2RpZmllcuyZgOydmCDsobDtlaksIOq3uOumrOqzoCDrkZAg6rCc7J2YIGNob3Jk66W8IOyCrOyaqe2VoCDsiJgg7J6I7J2M7J2EIOuztOydtOq4sCDsnITtlZwg7YWM7Iqk7Yq47J6F64uI64ukLlxuICAgICAgZW50cnlQb2ludCwgLy8g66eI7KeA66eJ7Jy866GcIOyLpOygnCDsi6TtlontlaAg7Iqk7YGs66a97Yq47J2YIOqyveuhnOulvCDrhJjqsqjspI3ri4jri6QuXG4gICAgXSxcbiAgICB7XG4gICAgICBjd2Q6IGFwaVJvb3QsXG4gICAgICBzdGRpbzogXCJpbmhlcml0XCIsXG4gICAgICBlbnY6IHtcbiAgICAgICAgLi4ucHJvY2Vzcy5lbnYsXG4gICAgICAgIE5PREVfRU5WOiBwcm9jZXNzLmVudi5OT0RFX0VOViA/PyBcImRldmVsb3BtZW50XCIsXG4gICAgICAgIEhPVDogXCJ5ZXNcIiwgLy8g7JaY6rCAIOyeiOyWtOyVvCBITVLsnbQg7Zmc7ISx7ZmU65Cp64uI64ukLlxuICAgICAgICBBUElfUk9PVF9QQVRIOiBhcGlSb290LCAvLyDsnbQg6rK966Gc6rCAIGhtci1ob29r7J2YIOujqO2KuCDrlJTroInthqDrpqzqsIAg65Cp64uI64ukLlxuICAgICAgICAuLi5vcHRpb25zPy5leHRyYUVudixcbiAgICAgIH0sXG4gICAgfSxcbiAgKTtcblxuICAvLyDsooXro4wg7LKY66asXG4gIGNvbnN0IGNsZWFudXAgPSAoKSA9PiB7XG4gICAgY29uc29sZS5sb2coY2hhbGsueWVsbG93KFwiXFxuXFxu8J+RiyBTaHV0dGluZyBkb3duLi4uXCIpKTtcbiAgICBzZXJ2ZXJQcm9jZXNzLmtpbGwoXCJTSUdURVJNXCIpO1xuICAgIHByb2Nlc3MuZXhpdCgwKTtcbiAgfTtcblxuICBwcm9jZXNzLm9uKFwiU0lHSU5UXCIsIGNsZWFudXApO1xuICBwcm9jZXNzLm9uKFwiU0lHVEVSTVwiLCBjbGVhbnVwKTtcblxuICBzZXJ2ZXJQcm9jZXNzLm9uKFwiZXhpdFwiLCAoY29kZSkgPT4ge1xuICAgIGlmIChjb2RlICE9PSAwKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGNoYWxrLnJlZChgU2VydmVyIGV4aXRlZCB3aXRoIGNvZGUgJHtjb2RlfWApKTtcbiAgICAgIHByb2Nlc3MuZXhpdChjb2RlIHx8IDEpO1xuICAgIH1cbiAgfSk7XG59XG5cbi8qKlxuICogcG5wbSBkZXYgLyBwbnBtIGRldiBhbGwg7ZWY66m0IOyLpO2WieuQmOuKlCDtlajsiJjsnoXri4jri6QuXG4gKiDtlITroZzsoJ3tirjsl5Ag64yA7ZW0IEhNUiDsp4Dsm5DtlZjripQg6rCc67CcIOyEnOuyhOulvCDrnYTsm4zspI3ri4jri6QuXG4gKlxuICogU29uYW11LmluaXQg7JeG7J20IO2YuOy2nOuQoCDqsoPsnYQg7IOB7KCV7ZWY7JesIOq1rO2YhOuQmOyXiOyKteuLiOuLpC5cbiAqL1xuZnVuY3Rpb24gZGV2X2FsbCgpIHtcbiAgY29uc3QgcmVxdWlyZSA9IGNyZWF0ZVJlcXVpcmUoaW1wb3J0Lm1ldGEudXJsKTtcbiAgY29uc3QgeyB2ZXJzaW9uIH0gPSByZXF1aXJlKFwiLi4vLi4vcGFja2FnZS5qc29uXCIpO1xuICBjb25zb2xlLmxvZyhg8J+MsiBTb25hbXUgdiR7dmVyc2lvbn1cXG5gKTtcbiAgc3Bhd25BcGlEZXZTZXJ2ZXIoKTtcbn1cblxuLyoqXG4gKiBwbnBtIGRldiBhcGkg7ZWY66m0IOyLpO2WieuQmOuKlCDtlajsiJjsnoXri4jri6QuXG4gKiBBUEkg7KCE7JqpIOqwnOuwnCDshJzrsoTrpbwg652E7JuB64uI64ukLlxuICogZGV2X2FsbOqzvCDqsbDsnZgg64+Z7J287ZWY65CYLCDthrXtlakg7Ju5IOyEnOuyhOulvCDruYTtmZzshLHtmZTtlanri4jri6QuXG4gKlxuICogU29uYW11LmluaXQg7JeG7J20IO2YuOy2nOuQoCDqsoPsnYQg7IOB7KCV7ZWY7JesIOq1rO2YhOuQmOyXiOyKteuLiOuLpC5cbiAqL1xuZnVuY3Rpb24gZGV2X2FwaSgpIHtcbiAgY29uc29sZS5sb2coY2hhbGsueWVsbG93LmJvbGQoXCJTdGFydGluZyBTb25hbXUgQVBJLW9ubHkgZGV2IHNlcnZlci4uLlxcblwiKSk7XG4gIHNwYXduQXBpRGV2U2VydmVyKHtcbiAgICBleHRyYUVudjogeyBTT05BTVVfRElTQUJMRV9JTlRFR1JBVEVEX1dFQjogXCJ5ZXNcIiB9LFxuICB9KTtcbn1cblxuLyoqXG4gKiBwbnBtIGRldiB3ZWIg7ZWY66m0IOyLpO2WieuQmOuKlCDtlajsiJjsnoXri4jri6QuXG4gKiBWaXRlIOqwnOuwnCDshJzrsoTrpbwg64uo64+F7Jy866GcIOyLpO2Wie2VqeuLiOuLpC5cbiAqIC0tIOuSpOydmCDsnbjsnpDripQgVml0ZeyXkCDqt7jrjIDroZwg7KCE64us65Cp64uI64ukLlxuICpcbiAqIFNvbmFtdS5pbml0IOyXhuydtCDtmLjstpzrkKAg6rKD7J2EIOyDgeygle2VmOyXrCDqtaztmITrkJjsl4jsirXri4jri6QuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGRldl93ZWIoKSB7XG4gIGNvbnN0IGFwcFJvb3QgPSBmaW5kQXBwUm9vdFBhdGgoKTtcbiAgY29uc3Qgd2ViUGF0aCA9IHBhdGguam9pbihhcHBSb290LCBcIndlYlwiKTtcblxuICBpZiAoIShhd2FpdCBleGlzdHMod2ViUGF0aCkpKSB7XG4gICAgY29uc29sZS5lcnJvcihgd2ViIOuUlOugie2GoOumrOulvCDssL7snYQg7IiYIOyXhuyKteuLiOuLpDogJHt3ZWJQYXRofWApO1xuICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgfVxuXG4gIC8vIC0tIOuSpOydmCDsnbjsnpAg7LaU7LacXG4gIGNvbnN0IGRvdWJsZURhc2hJbmRleCA9IHByb2Nlc3MuYXJndi5pbmRleE9mKFwiLS1cIik7XG4gIGNvbnN0IHBhc3N0aHJvdWdoQXJncyA9IGRvdWJsZURhc2hJbmRleCAhPT0gLTEgPyBwcm9jZXNzLmFyZ3Yuc2xpY2UoZG91YmxlRGFzaEluZGV4ICsgMSkgOiBbXTtcblxuICBjb25zdCB2aXRlQXJncyA9IFtcImV4ZWNcIiwgXCJ2aXRlXCIsIC4uLnBhc3N0aHJvdWdoQXJnc107XG5cbiAgY29uc29sZS5sb2coY2hhbGsueWVsbG93LmJvbGQoXCJTdGFydGluZyBWaXRlIGRldiBzZXJ2ZXIuLi5cXG5cIikpO1xuXG4gIGNvbnN0IHZpdGVQcm9jZXNzID0gc3Bhd24oXCJwbnBtXCIsIHZpdGVBcmdzLCB7XG4gICAgY3dkOiB3ZWJQYXRoLFxuICAgIHN0ZGlvOiBcImluaGVyaXRcIixcbiAgfSk7XG5cbiAgdml0ZVByb2Nlc3Mub24oXCJleGl0XCIsIChjb2RlKSA9PiB7XG4gICAgcHJvY2Vzcy5leGl0KGNvZGUgPz8gMCk7XG4gIH0pO1xuXG4gIC8vIFNJR0lOVC9TSUdURVJNIOyLnCBWaXRlIO2UhOuhnOyEuOyKpOulvCBncmFjZWZ1bGx5IOyiheujjO2VqeuLiOuLpC5cbiAgZm9yIChjb25zdCBzaWduYWwgb2YgW1wiU0lHSU5UXCIsIFwiU0lHVEVSTVwiXSBhcyBjb25zdCkge1xuICAgIHByb2Nlc3Mub24oc2lnbmFsLCAoKSA9PiB7XG4gICAgICB2aXRlUHJvY2Vzcy5raWxsKHNpZ25hbCk7XG4gICAgfSk7XG4gIH1cbn1cblxuLyoqXG4gKiBBUEkg67mM65OcIOyEpOyglSDtjIzsnbwg6rK966Gc66W8IOqysOygle2VqeuLiOuLpC5cbiAqIO2UhOuhnOygne2KuCDro6jtirjsl5AgYHRzZG93bi5jb25maWcudHNg6rCAIOyeiOycvOuptCDqt7jqsoPsnYQsIOyXhuycvOuptCBzb25hbXUg6riw67O4IOyEpOygleydhCDsgqzsmqntlanri4jri6QuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHJlc29sdmVBcGlCdWlsZENvbmZpZ1BhdGgoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgbG9jYWxDb25maWdQYXRoID0gcGF0aC5qb2luKHByb2Nlc3MuY3dkKCksIFwidHNkb3duLmNvbmZpZy50c1wiKTtcblxuICB0cnkge1xuICAgIGlmIChhd2FpdCBleGlzdHMobG9jYWxDb25maWdQYXRoKSkge1xuICAgICAgY29uc29sZS5sb2coY2hhbGsuZGltKFwiVXNpbmcgdHNkb3duLmNvbmZpZy50cyBmcm9tIHByb2plY3Qgcm9vdC4uLlwiKSk7XG4gICAgICByZXR1cm4gbG9jYWxDb25maWdQYXRoO1xuICAgIH1cblxuICAgIGNvbnNvbGUubG9nKGNoYWxrLmRpbShcIlVzaW5nIGRlZmF1bHQgdHNkb3duIEFQSSBjb25maWcgZnJvbSBzb25hbXUgcGFja2FnZS4uLlwiKSk7XG4gICAgcmV0dXJuIHBhdGguam9pbihpbXBvcnQubWV0YS5kaXJuYW1lLCBcIi4uXCIsIFwiLi5cIiwgXCJ0c2Rvd24uYXBpLmNvbmZpZy50c1wiKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBjb25zb2xlLmVycm9yKGNoYWxrLnJlZChcIlNldHRpbmcgdXAgQVBJIGJ1aWxkIGNvbmZpZyBmYWlsZWQuXCIpLCBlcnJvcik7XG4gICAgcHJvY2Vzcy5leGl0KDEpO1xuICB9XG59XG5cbi8qKlxuICogc29uYW11IGJ1aWxkIC8gc29uYW11IGJ1aWxkIGFsbCDtlZjrqbQg7Iuk7ZaJ65CY64qUIO2VqOyImOyeheuLiOuLpC5cbiAqIGJ1aWxkX2FwaSArIGJ1aWxkX3dlYuydmCDtlanshLHsnoXri4jri6QuIFdlYiDrlJTroInthqDrpqzqsIAg7JeG7Jy866m0IFdlYiDruYzrk5zrpbwg7Iqk7YK17ZWp64uI64ukLlxuICovXG5hc3luYyBmdW5jdGlvbiBidWlsZF9hbGwoKSB7XG4gIGF3YWl0IGJ1aWxkX2FwaSgpO1xuICBhd2FpdCBidWlsZF93ZWIoeyBza2lwSWZNaXNzaW5nOiB0cnVlIH0pO1xufVxuXG4vKipcbiAqIHBucG0gYnVpbGQgYXBpIO2VmOuptCDsi6TtlonrkJjripQg7ZWo7IiY7J6F64uI64ukLlxuICogQVBJIO2UhOuhnOygne2KuOunjCDruYzrk5ztlanri4jri6QuXG4gKlxuICogU29uYW11LmluaXQg7JeG7J20IO2YuOy2nOuQoCDqsoPsnYQg7IOB7KCV7ZWY7JesIOq1rO2YhOuQmOyXiOyKteuLiOuLpC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gYnVpbGRfYXBpKCkge1xuICBjb25zdCBhcHBSb290ID0gZmluZEFwcFJvb3RQYXRoKCk7XG4gIGNvbnN0IGNvbmZpZ0ZpbGVQYXRoID0gYXdhaXQgcmVzb2x2ZUFwaUJ1aWxkQ29uZmlnUGF0aCgpO1xuXG4gIGNvbnN0IGFwaVN0YXJ0ZWRBdCA9IERhdGUubm93KCk7XG4gIHRyeSB7XG4gICAgZm9yIChjb25zdCBhcnRpZmFjdCBvZiBBUElfQVJUSUZBQ1RTKSB7XG4gICAgICBjb25zdCBjd2QgPSBwYXRoLmpvaW4oYXBwUm9vdCwgYXJ0aWZhY3QucHJvamVjdFBhdGgpO1xuICAgICAgcHJpbnRUYXNrSGVhZGVyKGFydGlmYWN0Lm5hbWUsIGFydGlmYWN0LmRlc2NyaXB0aW9uLCBjd2QpO1xuXG4gICAgICBhd2FpdCBydW5CdWlsZFN0ZXBzKGFydGlmYWN0LCB7IGN3ZCwgYnVpbGRDb21tYW5kQXJnczogeyBjb25maWdGaWxlUGF0aCB9IH0pO1xuICAgIH1cbiAgICBwcmludEJ1aWxkU3VtbWFyeShcIkFQSVwiLCB0cnVlLCBEYXRlLm5vdygpIC0gYXBpU3RhcnRlZEF0KTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHByaW50QnVpbGRTdW1tYXJ5KFwiQVBJXCIsIGZhbHNlLCBEYXRlLm5vdygpIC0gYXBpU3RhcnRlZEF0KTtcbiAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgfVxufVxuXG4vKipcbiAqIHBucG0gYnVpbGQgd2ViIO2VmOuptCDsi6TtlonrkJjripQg7ZWo7IiY7J6F64uI64ukLlxuICogV2ViIO2UhOuhnOygne2KuOunjCDruYzrk5ztlanri4jri6QuXG4gKlxuICogU29uYW11LmluaXQg7JeG7J20IO2YuOy2nOuQoCDqsoPsnYQg7IOB7KCV7ZWY7JesIOq1rO2YhOuQmOyXiOyKteuLiOuLpC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gYnVpbGRfd2ViKHsgc2tpcElmTWlzc2luZyA9IGZhbHNlIH0gPSB7fSkge1xuICBjb25zdCBhcHBSb290ID0gZmluZEFwcFJvb3RQYXRoKCk7XG4gIGNvbnN0IHdlYlBhdGggPSBwYXRoLmpvaW4oYXBwUm9vdCwgXCJ3ZWJcIik7XG5cbiAgaWYgKCEoYXdhaXQgZXhpc3RzKHdlYlBhdGgpKSkge1xuICAgIGlmIChza2lwSWZNaXNzaW5nKSB7XG4gICAgICBjb25zb2xlLmxvZyhjaGFsay5ncmF5KFwiV2ViIOuUlOugie2GoOumrOqwgCDsl4bsnLzrr4DroZwgV2ViIOu5jOuTnOulvCDqsbTrhIjrnIHri4jri6QuXCIpKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc29sZS5lcnJvcihgd2ViIOuUlOugie2GoOumrOulvCDssL7snYQg7IiYIOyXhuyKteuLiOuLpDogJHt3ZWJQYXRofWApO1xuICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgfVxuXG4gIGNvbnN0IHdlYlN0YXJ0ZWRBdCA9IERhdGUubm93KCk7XG4gIHRyeSB7XG4gICAgZm9yIChjb25zdCBhcnRpZmFjdCBvZiBXRUJfQVJUSUZBQ1RTKSB7XG4gICAgICBjb25zdCBjd2QgPSBwYXRoLmpvaW4oYXBwUm9vdCwgYXJ0aWZhY3QucHJvamVjdFBhdGgpO1xuICAgICAgcHJpbnRUYXNrSGVhZGVyKGFydGlmYWN0Lm5hbWUsIGFydGlmYWN0LmRlc2NyaXB0aW9uLCBjd2QpO1xuXG4gICAgICBhd2FpdCBydW5CdWlsZFN0ZXBzKGFydGlmYWN0LCB7IGN3ZCwgYnVpbGRDb21tYW5kQXJnczoge30gfSk7XG4gICAgfVxuICAgIHByaW50QnVpbGRTdW1tYXJ5KFwiV2ViXCIsIHRydWUsIERhdGUubm93KCkgLSB3ZWJTdGFydGVkQXQpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcHJpbnRCdWlsZFN1bW1hcnkoXCJXZWJcIiwgZmFsc2UsIERhdGUubm93KCkgLSB3ZWJTdGFydGVkQXQpO1xuICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgcHJvY2Vzcy5leGl0KDEpO1xuICB9XG59XG5cbi8qKlxuICogcHJlLWJ1aWxkLCBidWlsZCwgcG9zdC1idWlsZCDri6jqs4Trpbwg7Iic7LCo7KCB7Jy866GcIOyLpO2Wie2VqeuLiOuLpC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gcnVuQnVpbGRTdGVwczxUPihcbiAgYXJ0aWZhY3Q6IEJ1aWxkQXJ0aWZhY3Q8VD4sXG4gIG9wdGlvbnM6IHsgY3dkOiBzdHJpbmc7IGJ1aWxkQ29tbWFuZEFyZ3M6IFQgfSxcbikge1xuICBjb25zdCBzdGVwcyA9IFtcbiAgICB7IG5hbWU6IFwicHJlLWJ1aWxkXCIsIGNtZDogYXJ0aWZhY3QucHJlQnVpbGRDb21tYW5kPy4oKSB9LFxuICAgIHsgbmFtZTogXCJidWlsZFwiLCBjbWQ6IGFydGlmYWN0LmJ1aWxkQ29tbWFuZChvcHRpb25zLmJ1aWxkQ29tbWFuZEFyZ3MpIH0sXG4gICAgeyBuYW1lOiBcInBvc3QtYnVpbGRcIiwgY21kOiBhcnRpZmFjdC5wb3N0QnVpbGRDb21tYW5kPy4oKSB9LFxuICBdLmZpbHRlcigoc3RlcCkgPT4gc3RlcC5jbWQpO1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgc3RlcHMubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBzdGVwID0gc3RlcHNbaV07XG4gICAgY29uc3QgaXNMYXN0ID0gaSA9PT0gc3RlcHMubGVuZ3RoIC0gMTtcblxuICAgIHRyeSB7XG4gICAgICBhc3NlcnQoc3RlcC5jbWQpO1xuICAgICAgcHJpbnRUYXNrU3RhcnQoc3RlcC5uYW1lLCBzdGVwLmNtZCwgaXNMYXN0KTtcbiAgICAgIGF3YWl0IGV4ZWNXaXRoTGluZVByZWZpeChzdGVwLmNtZCwgeyBjd2Q6IG9wdGlvbnMuY3dkIH0pO1xuICAgICAgcHJpbnRUYXNrU3VjY2VzcyhzdGVwLm5hbWUsIGlzTGFzdCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcHJpbnRUYXNrRmFpbGVkKHN0ZXAubmFtZSwgaXNMYXN0KTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgJHtzdGVwLm5hbWV9IGZhaWxlZGAsIHsgY2F1c2U6IGUgfSk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogcG5wbSBzdGFydCDtlZjrqbQg7Iuk7ZaJ65CY64qUIO2VqOyImOyeheuLiOuLpC5cbiAqIOu5jOuTnOuQnCDtlITroZzsoJ3tirjrpbwg7Iuk7ZaJ7ZWp64uI64ukLlxuICpcbiAqIOu5jOuTnOuQnCDqsrDqs7zrrLwoZGlzdCDrlJTroInthqDrpqzsnZggaW5kZXguanMg7JeU7Yq466as7Y+s7J247Yq4KeydtCDsl4bri6TrqbQg7Iuk7ZaJ7J2EIOykkeuLqO2VqeuLiOuLpC5cbiAqIOyGjOyKpOuntSDsp4Dsm5Dqs7wgZG90ZW52IOyngOybkOydhCDtj6ztlajtlZjsl6wg7Iuk7ZaJ7ZWp64uI64ukLlxuICpcbiAqIFNvbmFtdS5pbml0IOyXhuydtCDtmLjstpzrkKAg6rKD7J2EIOyDgeygle2VmOyXrCDqtaztmITrkJjsl4jsirXri4jri6QuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHN0YXJ0KCkge1xuICBjb25zdCByZXF1aXJlID0gY3JlYXRlUmVxdWlyZShpbXBvcnQubWV0YS51cmwpO1xuICBjb25zdCB7IHZlcnNpb24gfSA9IHJlcXVpcmUoXCIuLi8uLi9wYWNrYWdlLmpzb25cIik7XG4gIGNvbnNvbGUubG9nKGDwn4yyIFNvbmFtdSB2JHt2ZXJzaW9ufVxcbmApO1xuXG4gIGNvbnN0IGFwaVJvb3QgPSBmaW5kQXBpUm9vdFBhdGgoKTtcbiAgY29uc3QgZW50cnlQb2ludCA9IFwiZGlzdC9pbmRleC5qc1wiO1xuXG4gIGlmICghKGF3YWl0IGV4aXN0cyhlbnRyeVBvaW50KSkpIHtcbiAgICBjb25zb2xlLmxvZyhjaGFsay5yZWQoYCR7ZW50cnlQb2ludH0gbm90IGZvdW5kLiBQbGVhc2UgYnVpbGQgeW91ciBwcm9qZWN0IGZpcnN0LmApKTtcbiAgICBjb25zb2xlLmxvZyhjaGFsay5ibHVlKFwiUnVuOiBwbnBtIHNvbmFtdSBidWlsZFwiKSk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgeyBzcGF3biB9ID0gYXdhaXQgaW1wb3J0KFwiY2hpbGRfcHJvY2Vzc1wiKTtcbiAgY29uc3Qgc2VydmVyUHJvY2VzcyA9IHNwYXduKFxuICAgIHByb2Nlc3MuZXhlY1BhdGgsXG4gICAgW1wiLS1lbmFibGUtc291cmNlLW1hcHNcIiwgXCItclwiLCBcImRvdGVudi9jb25maWdcIiwgZW50cnlQb2ludF0sXG4gICAge1xuICAgICAgY3dkOiBhcGlSb290LFxuICAgICAgc3RkaW86IFwiaW5oZXJpdFwiLFxuICAgIH0sXG4gICk7XG5cbiAgcHJvY2Vzcy5vbihcIlNJR0lOVFwiLCAoKSA9PiB7XG4gICAgc2VydmVyUHJvY2Vzcy5raWxsKFwiU0lHVEVSTVwiKTtcbiAgICBwcm9jZXNzLmV4aXQoMCk7XG4gIH0pO1xufVxuXG5hc3luYyBmdW5jdGlvbiBzZXR1cE1pZ3JhdG9yKCkge1xuICAvLyBtaWdyYXRvclxuICBtaWdyYXRvciA9IG5ldyBNaWdyYXRvcigpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBzZXR1cEZpeHR1cmVNYW5hZ2VyKCkge1xuICBGaXh0dXJlTWFuYWdlci5pbml0KCk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIG1pZ3JhdGVfYXBwbHkodGFyZ2V0czogKGtleW9mIFNvbmFtdURCQ29uZmlnKVtdKSB7XG4gIGF3YWl0IHNldHVwTWlncmF0b3IoKTtcbiAgYXdhaXQgbWlncmF0b3IucnVuQWN0aW9uKFwiYXBwbHlcIiwgdGFyZ2V0cyk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIG1pZ3JhdGVfcnVuKCkge1xuICBhd2FpdCBzZXR1cE1pZ3JhdG9yKCk7XG4gIGF3YWl0IG1pZ3JhdG9yLnJ1bkFjdGlvbihcImFwcGx5XCIsIGdldE1pZ3JhdGVSdW5UYXJnZXRzKCkpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBtaWdyYXRlX2dlbmVyYXRlKCkge1xuICBhd2FpdCBzZXR1cE1pZ3JhdG9yKCk7XG5cbiAgY29uc3QgeyBjb25ucyB9ID0gYXdhaXQgbWlncmF0b3IuZ2V0U3RhdHVzKCk7XG4gIGNvbnN0IGhhc1N0YXR1czAgPSBjb25ucy5zb21lKChjb25uKSA9PiBjb25uLnN0YXR1cyA9PT0gMCk7XG4gIGlmICghaGFzU3RhdHVzMCkge1xuICAgIGNvbnNvbGUubG9nKFxuICAgICAgY2hhbGsucmVkKFxuICAgICAgICBcIuuniOydtOq3uOugiOydtOyFmCDtjIzsnbzsnYQg7IOd7ISx7ZWY66Ck66m0IOq4sOyhtCDrp4jsnbTqt7jroIjsnbTshZjsnbQg7LWc7IaMIO2VmOuCmOydmCBEQuyXkCDrqqjrkZAg7KCB7Jqp65CY7Ja0IOyeiOyWtOyVvCDtlanri4jri6QuXCIsXG4gICAgICApLFxuICAgICk7XG4gICAgZm9yIChjb25zdCBjb25uIG9mIGNvbm5zKSB7XG4gICAgICBpZiAoY29ubi5wZW5kaW5nLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY29uc29sZS5sb2coY2hhbGsueWVsbG93KGAgICR7Y29ubi5uYW1lfTogcGVuZGluZyAke2Nvbm4ucGVuZGluZy5sZW5ndGh96rCcYCkpO1xuICAgICAgfVxuICAgIH1cbiAgICBwcm9jZXNzLmV4aXQoMSk7XG4gIH1cblxuICBjb25zdCBjb3VudCA9IGF3YWl0IG1pZ3JhdG9yLmdlbmVyYXRlUHJlcGFyZWRDb2RlcygpO1xuICBpZiAoY291bnQgPiAwKSB7XG4gICAgY29uc29sZS5sb2coY2hhbGsuZ3JlZW4oYCR7Y291bnR96rCc7J2YIOuniOydtOq3uOugiOydtOyFmCDtjIzsnbzsnbQg7IOd7ISx65CY7JeI7Iq164uI64ukLmApKTtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBtaWdyYXRlX3N0YXR1cygpIHtcbiAgYXdhaXQgc2V0dXBNaWdyYXRvcigpO1xuXG4gIGNvbnN0IHN0YXR1cyA9IGF3YWl0IG1pZ3JhdG9yLmdldFN0YXR1cygpO1xuICAvLyBzdGF0dXM7XG4gIGNvbnNvbGUubG9nKHN0YXR1cyk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGZpeHR1cmVfaW5pdCgpIHtcbiAgY29uc3Qgc3JjQ29uZmlnID0gU29uYW11LmRiQ29uZmlnW2dldFNvbmFtdUVudmlyb25tZW50KCldO1xuICBjb25zdCB0YXJnZXRzID0gW1xuICAgIHtcbiAgICAgIGxhYmVsOiBcIihSRU1PVEUpIEZpeHR1cmUgREJcIixcbiAgICAgIGNvbmZpZzogU29uYW11LmRiQ29uZmlnLmZpeHR1cmUsXG4gICAgfSxcbiAgICB7XG4gICAgICBsYWJlbDogXCIoTE9DQUwpIFRlc3RpbmcgREJcIixcbiAgICAgIGNvbmZpZzogU29uYW11LmRiQ29uZmlnLnRlc3QsXG4gICAgICB0b1NraXA6ICgoKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlbW90ZUNvbm4gPSBTb25hbXUuZGJDb25maWcuZml4dHVyZS5jb25uZWN0aW9uIGFzIEtuZXguQ29ubmVjdGlvbkNvbmZpZztcbiAgICAgICAgY29uc3QgbG9jYWxDb25uID0gU29uYW11LmRiQ29uZmlnLnRlc3QuY29ubmVjdGlvbiBhcyBLbmV4LkNvbm5lY3Rpb25Db25maWc7XG4gICAgICAgIHJldHVybiByZW1vdGVDb25uLmhvc3QgPT09IGxvY2FsQ29ubi5ob3N0ICYmIHJlbW90ZUNvbm4uZGF0YWJhc2UgPT09IGxvY2FsQ29ubi5kYXRhYmFzZTtcbiAgICAgIH0pKCksXG4gICAgfSxcbiAgXSBhcyB7XG4gICAgbGFiZWw6IHN0cmluZztcbiAgICBjb25maWc6IEtuZXguQ29uZmlnO1xuICAgIHRvU2tpcD86IGJvb2xlYW47XG4gIH1bXTtcblxuICAvLyAxLiDquLDspIBEQiDsiqTtgqTrp4jrpbwg642k7ZSEXG4gIGNvbnNvbGUubG9nKFwiRFVNUC4uLlwiKTtcbiAgY29uc3QgZHVtcEZpbGVuYW1lID0gYC90bXAvc29uYW11LWZpeHR1cmUtaW5pdC0ke0RhdGUubm93KCl9LnNxbGA7XG4gIGNvbnN0IHNyY0Nvbm4gPSBzcmNDb25maWcuY29ubmVjdGlvbiBhcyBLbmV4LkNvbm5lY3Rpb25Db25maWc7XG4gIGNvbnN0IG1pZ3JhdGlvbnNEdW1wID0gYC90bXAvc29uYW11LWZpeHR1cmUtaW5pdC1taWdyYXRpb25zLSR7RGF0ZS5ub3coKX0uc3FsYDtcbiAgZXhlY1N5bmMoXG4gICAgYG15c3FsZHVtcCAtaCR7c3JjQ29ubi5ob3N0fSAtdSR7c3JjQ29ubi51c2VyfSAtcCR7c3JjQ29ubi5wYXNzd29yZH0gLS1zaW5nbGUtdHJhbnNhY3Rpb24gLWQgLS1uby1jcmVhdGUtZGIgLS10cmlnZ2VycyAke3NyY0Nvbm4uZGF0YWJhc2V9ID4gJHtkdW1wRmlsZW5hbWV9YCxcbiAgKTtcbiAgY29uc3QgX2RiID0ga25leChzcmNDb25maWcpO1xuICBjb25zdCBbW21pZ3JhdGlvbnNdXSA9IGF3YWl0IF9kYi5yYXcoXG4gICAgXCJTRUxFQ1QgQ09VTlQoKikgYXMgY291bnQgRlJPTSBpbmZvcm1hdGlvbl9zY2hlbWEudGFibGVzIFdIRVJFIHRhYmxlX3NjaGVtYSA9ID8gQU5EIHRhYmxlX25hbWUgPSAna25leF9taWdyYXRpb25zJ1wiLFxuICAgIFtzcmNDb25uLmRhdGFiYXNlXSxcbiAgKTtcbiAgaWYgKG1pZ3JhdGlvbnMuY291bnQgPiAwKSB7XG4gICAgZXhlY1N5bmMoXG4gICAgICBgbXlzcWxkdW1wIC1oJHtzcmNDb25uLmhvc3R9IC11JHtzcmNDb25uLnVzZXJ9IC1wJHtzcmNDb25uLnBhc3N3b3JkfSAtLXNpbmdsZS10cmFuc2FjdGlvbiAtLW5vLWNyZWF0ZS1kYiAtLXRyaWdnZXJzICR7c3JjQ29ubi5kYXRhYmFzZX0ga25leF9taWdyYXRpb25zIGtuZXhfbWlncmF0aW9uc19sb2NrID4gJHttaWdyYXRpb25zRHVtcH1gLFxuICAgICk7XG4gIH1cblxuICAvLyAyLiDrjIDsg4FEQiDqsIHqsIHsl5Ag64yA7ZWY7JesIOyhtOyerOyXrOu2gCDtmZXsnbgg7ZuEIOu2k+q4sFxuICBmb3IgKGNvbnN0IHsgbGFiZWwsIGNvbmZpZywgdG9Ta2lwIH0gb2YgdGFyZ2V0cykge1xuICAgIGNvbnN0IGNvbm4gPSBjb25maWcuY29ubmVjdGlvbiBhcyBLbmV4LkNvbm5lY3Rpb25Db25maWc7XG5cbiAgICBpZiAodG9Ta2lwID09PSB0cnVlKSB7XG4gICAgICBjb25zb2xlLmxvZyhjaGFsay5yZWQoYCR7bGFiZWx9OiBTa2lwcGVkIWApKTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGNvbnN0IGRiID0ga25leCh7XG4gICAgICAuLi5jb25maWcsXG4gICAgICBjb25uZWN0aW9uOiB7XG4gICAgICAgIC4uLigoY29uZmlnLmNvbm5lY3Rpb24gPz8ge30pIGFzIEtuZXguQ29ubmVjdGlvbkNvbmZpZyksXG4gICAgICAgIGRhdGFiYXNlOiB1bmRlZmluZWQsXG4gICAgICB9LFxuICAgIH0pO1xuICAgIGNvbnN0IFtbcm93XV0gPSBhd2FpdCBkYi5yYXcoYFNIT1cgREFUQUJBU0VTIExJS0UgXCIke2Nvbm4uZGF0YWJhc2V9XCJgKTtcbiAgICBpZiAocm93KSB7XG4gICAgICBjb25zb2xlLmxvZyhjaGFsay55ZWxsb3coYCR7bGFiZWx9OiBEYXRhYmFzZSBcIiR7Y29ubi5kYXRhYmFzZX1cIiBBbHJlYWR5IGV4aXN0c2ApKTtcbiAgICAgIGF3YWl0IGRiLmRlc3Ryb3koKTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGNvbnNvbGUubG9nKGBTWU5DIHRvICR7bGFiZWx9Li4uYCk7XG4gICAgY29uc3QgbXlzcWxDbWQgPSBgbXlzcWwgLWgke2Nvbm4uaG9zdH0gLXUke2Nvbm4udXNlcn0gLXAke2Nvbm4ucGFzc3dvcmR9YDtcbiAgICBleGVjU3luYyhgJHtteXNxbENtZH0gLWUgJ0RST1AgREFUQUJBU0UgSUYgRVhJU1RTIFxcYCR7Y29ubi5kYXRhYmFzZX1cXGAnYCk7XG4gICAgZXhlY1N5bmMoYCR7bXlzcWxDbWR9IC1lICdDUkVBVEUgREFUQUJBU0UgXFxgJHtjb25uLmRhdGFiYXNlfVxcYCdgKTtcbiAgICBleGVjU3luYyhgJHtteXNxbENtZH0gJHtjb25uLmRhdGFiYXNlfSA8ICR7ZHVtcEZpbGVuYW1lfWApO1xuICAgIGlmIChhd2FpdCBleGlzdHMobWlncmF0aW9uc0R1bXApKSB7XG4gICAgICBleGVjU3luYyhgJHtteXNxbENtZH0gJHtjb25uLmRhdGFiYXNlfSA8ICR7bWlncmF0aW9uc0R1bXB9YCk7XG4gICAgfVxuXG4gICAgYXdhaXQgZGIuZGVzdHJveSgpO1xuICB9XG5cbiAgYXdhaXQgX2RiLmRlc3Ryb3koKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZml4dHVyZV9pbXBvcnQoZW50aXR5SWQ6IHN0cmluZywgcmVjb3JkSWRzOiBudW1iZXJbXSkge1xuICBhd2FpdCBzZXR1cEZpeHR1cmVNYW5hZ2VyKCk7XG5cbiAgYXdhaXQgRml4dHVyZU1hbmFnZXIuaW1wb3J0Rml4dHVyZShlbnRpdHlJZCwgcmVjb3JkSWRzKTtcbiAgYXdhaXQgRml4dHVyZU1hbmFnZXIuc3luYygpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBmaXh0dXJlX3N5bmMoKSB7XG4gIGF3YWl0IHNldHVwRml4dHVyZU1hbmFnZXIoKTtcblxuICBhd2FpdCBGaXh0dXJlTWFuYWdlci5zeW5jKCk7XG59XG5cbi8qKlxuICogZml4dHVyZSBnZW4g66qF66C57Ja0XG4gKiDsmLXshZjsnYQgcHJvY2Vzcy5hcmd27JeQ7IScIO2MjOyLsVxuICovXG5hc3luYyBmdW5jdGlvbiBmaXh0dXJlX2dlbigpIHtcbiAgY29uc3Qgb3B0aW9ucyA9IHBhcnNlT3B0aW9ucyhwcm9jZXNzLmFyZ3YpO1xuICBhd2FpdCBmaXh0dXJlR2VuQ29tbWFuZChvcHRpb25zKTtcbn1cblxuLyoqXG4gKiBmaXh0dXJlIGZldGNoIOuqheugueyWtFxuICog7Ji17IWY7J2EIHByb2Nlc3MuYXJnduyXkOyEnCDtjIzsi7FcbiAqL1xuYXN5bmMgZnVuY3Rpb24gZml4dHVyZV9mZXRjaCgpIHtcbiAgY29uc3Qgb3B0aW9ucyA9IHBhcnNlT3B0aW9ucyhwcm9jZXNzLmFyZ3YpO1xuICBhd2FpdCBmaXh0dXJlRmV0Y2hDb21tYW5kKG9wdGlvbnMpO1xufVxuXG4vKipcbiAqIGZpeHR1cmUgZXhwbG9yZSDrqoXroLnslrRcbiAqIOyYteyFmOydhCBwcm9jZXNzLmFyZ3bsl5DshJwg7YyM7IuxXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGZpeHR1cmVfZXhwbG9yZSgpIHtcbiAgY29uc3Qgb3B0aW9ucyA9IHBhcnNlT3B0aW9ucyhwcm9jZXNzLmFyZ3YpO1xuICBhd2FpdCBmaXh0dXJlRXhwbG9yZUNvbW1hbmQob3B0aW9ucyk7XG59XG5cbi8qKlxuICog6rCE64uo7ZWcIOyYteyFmCDtjIzshJxcbiAqL1xuZnVuY3Rpb24gcGFyc2VPcHRpb25zKFxuICBhcmd2OiBzdHJpbmdbXSxcbik6IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IGJvb2xlYW4gfCBzdHJpbmdbXT4gJiB7IF86IHN0cmluZ1tdIH0ge1xuICBjb25zdCBvcHRpb25zOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBib29sZWFuIHwgc3RyaW5nW10+ICYgeyBfOiBzdHJpbmdbXSB9ID0geyBfOiBbXSB9O1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYXJndi5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IGFyZyA9IGFyZ3ZbaV07XG5cbiAgICBpZiAoYXJnLnN0YXJ0c1dpdGgoXCItLVwiKSkge1xuICAgICAgY29uc3Qga2V5ID0gYXJnLnNsaWNlKDIpO1xuXG4gICAgICBpZiAoa2V5LmluY2x1ZGVzKFwiPVwiKSkge1xuICAgICAgICBjb25zdCBbaywgdl0gPSBrZXkuc3BsaXQoXCI9XCIpO1xuICAgICAgICBvcHRpb25zW2tdID0gdjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IG5leHQgPSBhcmd2W2kgKyAxXTtcbiAgICAgICAgaWYgKG5leHQgJiYgIW5leHQuc3RhcnRzV2l0aChcIi0tXCIpKSB7XG4gICAgICAgICAgb3B0aW9uc1trZXldID0gbmV4dDtcbiAgICAgICAgICBpKys7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb3B0aW9uc1trZXldID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoYXJnLnN0YXJ0c1dpdGgoXCItXCIpKSB7XG4gICAgICBjb25zdCBrZXkgPSBhcmcuc2xpY2UoMSk7XG4gICAgICBjb25zdCBuZXh0ID0gYXJndltpICsgMV07XG5cbiAgICAgIGlmIChuZXh0ICYmICFuZXh0LnN0YXJ0c1dpdGgoXCItXCIpKSB7XG4gICAgICAgIG9wdGlvbnNba2V5XSA9IG5leHQ7XG4gICAgICAgIGkrKztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9wdGlvbnNba2V5XSA9IHRydWU7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIG9wdGlvbnMuXy5wdXNoKGFyZyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG9wdGlvbnM7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHN0dWJfcHJhY3RpY2UobmFtZTogc3RyaW5nKSB7XG4gIGNvbnN0IHByYWN0aWNlRGlyID0gcGF0aC5qb2luKFNvbmFtdS5hcGlSb290UGF0aCwgXCJzcmNcIiwgXCJwcmFjdGljZXNcIik7XG4gIGNvbnN0IGZpbGVOYW1lcyA9IGF3YWl0IHJlYWRkaXIocHJhY3RpY2VEaXIpO1xuXG4gIGNvbnN0IG1heFNlcU5vID0gYXdhaXQgKGFzeW5jICgpID0+IHtcbiAgICBpZiAoIShhd2FpdCBleGlzdHMocHJhY3RpY2VEaXIpKSkge1xuICAgICAgYXdhaXQgbWtkaXIocHJhY3RpY2VEaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IGZpbHRlcmVkU2VxcyA9IGZpbGVOYW1lc1xuICAgICAgLmZpbHRlcigoZmlsZU5hbWUpID0+IGZpbGVOYW1lLnN0YXJ0c1dpdGgoXCJwXCIpICYmIGZpbGVOYW1lLmVuZHNXaXRoKFwiLnRzXCIpKVxuICAgICAgLm1hcCgoZmlsZU5hbWUpID0+IHtcbiAgICAgICAgY29uc3QgWywgc2VxTm9dID0gZmlsZU5hbWUubWF0Y2goL15wKFswLTldKyktLykgPz8gW1wiMFwiLCBcIjBcIl07XG4gICAgICAgIHJldHVybiBwYXJzZUludChzZXFObyk7XG4gICAgICB9KVxuICAgICAgLnRvU29ydGVkKChhLCBiKSA9PiBiIC0gYSk7XG5cbiAgICBpZiAoZmlsdGVyZWRTZXFzLmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybiBmaWx0ZXJlZFNlcXNbMF07XG4gICAgfVxuXG4gICAgcmV0dXJuIDA7XG4gIH0pKCk7XG5cbiAgY29uc3QgY3VycmVudFNlcU5vID0gbWF4U2VxTm8gKyAxO1xuICBjb25zdCBmaWxlTmFtZSA9IGBwJHtjdXJyZW50U2VxTm99LSR7bmFtZX0udHNgO1xuICBjb25zdCBkc3RQYXRoID0gcGF0aC5qb2luKHByYWN0aWNlRGlyLCBmaWxlTmFtZSk7XG5cbiAgY29uc3QgY29kZSA9IFtcbiAgICBgaW1wb3J0IHsgU29uYW11IH0gZnJvbSBcInNvbmFtdVwiO2AsXG4gICAgXCJcIixcbiAgICBgY29uc29sZS5jbGVhcigpO2AsXG4gICAgYGNvbnNvbGUubG9nKFwiJHtmaWxlTmFtZX1cIik7YCxcbiAgICBcIlwiLFxuICAgIGBTb25hbXUucnVuU2NyaXB0KGFzeW5jICgpID0+IHtgLFxuICAgIGAgLy8gVE9ET2AsXG4gICAgYH0pO2AsXG4gICAgXCJcIixcbiAgXS5qb2luKFwiXFxuXCIpO1xuICBhd2FpdCB3cml0ZUZpbGUoZHN0UGF0aCwgY29kZSk7XG5cbiAgZXhlY1N5bmMoYGNvZGUgJHtkc3RQYXRofWApO1xuXG4gIGNvbnN0IHJ1bkNvZGUgPSBgeWFybiBub2RlIC1yIGRvdGVudi9jb25maWcgLS1lbmFibGUtc291cmNlLW1hcHMgZGlzdC9wcmFjdGljZXMvJHtmaWxlTmFtZS5yZXBsYWNlKFxuICAgIFwiLnRzXCIsXG4gICAgXCIuanNcIixcbiAgKX1gO1xuICBjb25zb2xlLmxvZyhgJHtjaGFsay5ibHVlKHJ1bkNvZGUpfSBjb3BpZWQgdG8gY2xpcGJvYXJkLmApO1xuICBleGVjU3luYyhgZWNobyBcIiR7cnVuQ29kZX1cIiB8IHBiY29weWApO1xufVxuXG5hc3luYyBmdW5jdGlvbiBzdHViX2VudGl0eShlbnRpdHlJZDogc3RyaW5nKSB7XG4gIGF3YWl0IFNvbmFtdS5zeW5jZXIuY3JlYXRlRW50aXR5KHsgZW50aXR5SWQsIHRpdGxlOiBlbnRpdHlJZCB9KTtcblxuICBjb25zdCB7IGZsYWdzIH0gPSBwYXJzZUNsaU9wdGlvbnMoKTtcbiAgY29uc3QgdXNlQUkgPSBmbGFncy5oYXMoXCJhaVwiKTtcbiAgY29uc3Qgbm9Db25lcyA9IGZsYWdzLmhhcyhcIm5vLWNvbmVzXCIpO1xuXG4gIC8vIC0tbm8tY29uZXM6IGNvbmUg7IOd7ISxIOyKpO2CtVxuICBpZiAobm9Db25lcykge1xuICAgIGNvbnNvbGUubG9nKGDinJMgRW50aXR5ICcke2VudGl0eUlkfScgY3JlYXRlZCB3aXRob3V0IGNvbmVzYCk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgeyBFbnRpdHlNYW5hZ2VyIH0gPSBhd2FpdCBpbXBvcnQoXCIuLi9lbnRpdHkvZW50aXR5LW1hbmFnZXJcIik7XG4gIGNvbnN0IGVudGl0eSA9IEVudGl0eU1hbmFnZXIuZ2V0KGVudGl0eUlkKTtcbiAgaWYgKCFlbnRpdHkpIHtcbiAgICBjb25zb2xlLmVycm9yKGBFbnRpdHkgbm90IGZvdW5kOiAke2VudGl0eUlkfWApO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIC0tYWk6IExMTeycvOuhnCBjb25lIOyDneyEsVxuICBpZiAodXNlQUkpIHtcbiAgICBjb25zb2xlLmxvZyhg4pyTIEVudGl0eSAnJHtlbnRpdHlJZH0nIGNyZWF0ZWRgKTtcbiAgICBjb25zb2xlLmxvZyhg8J+MnyBHZW5lcmF0aW5nIEFJLXBvd2VyZWQgY29uZXMuLi5gKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgY29uZmlnTG9jYWxlID0gU29uYW11LmNvbmZpZy5pMThuPy5kZWZhdWx0TG9jYWxlO1xuICAgICAgY29uc3QgbG9jYWxlID1cbiAgICAgICAgY29uZmlnTG9jYWxlID09PSBcImtvXCIgfHwgY29uZmlnTG9jYWxlID09PSBcImVuXCIgfHwgY29uZmlnTG9jYWxlID09PSBcImphXCJcbiAgICAgICAgICA/IGNvbmZpZ0xvY2FsZVxuICAgICAgICAgIDogXCJrb1wiO1xuXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBlbnRpdHkuZ2VuZXJhdGVDb25lcyh7XG4gICAgICAgIHByZXNlcnZlRXhpc3Rpbmc6IGZhbHNlLFxuICAgICAgICBvbmx5RW1wdHk6IGZhbHNlLFxuICAgICAgICBsb2NhbGUsXG4gICAgICB9KTtcblxuICAgICAgY29uc29sZS5sb2coYOKchSBEb25lICgke3Jlc3VsdC50b2tlbnNVc2VkfSB0b2tlbnMpYCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yICYmIGVycm9yLm1lc3NhZ2UuaW5jbHVkZXMoXCJBTlRIUk9QSUNfQVBJX0tFWVwiKSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKGBcXG7inYwgJHtlcnJvci5tZXNzYWdlfWApO1xuICAgICAgICBjb25zb2xlLmVycm9yKGBcXG7wn5KhIFJlbW92ZSAtLWFpIGZsYWcgdG8gdXNlIHRlbXBsYXRlIGNvbmVzIGluc3RlYWRgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm47XG4gIH1cblxuICAvLyDquLDrs7g6IO2FnO2UjOumvyBjb25lIOyekOuPmSDsg53shLFcbiAgLy8gTExNIOyXhuydtCBmYWtlci1tYXBwaW5ncy50c+ulvCDtmZzsmqntlZjsl6wg6riw67O4IGNvbmUg66mU7YOA642w7J207YSw66W8IOyDneyEse2VqeuLiOuLpC5cbiAgLy8g7J2066W8IO2Gte2VtCBBTlRIUk9QSUNfQVBJX0tFWeqwgCDsl4bslrTrj4QgU29uYW1166W8IOyCrOyaqe2VoCDsiJgg7J6I7Jy866mwLFxuICAvLyDsg53shLHrkJwg7YWc7ZSM66a/IGNvbmXsnYAg64KY7KSR7JeQICdjb25lIGdlbicg66qF66C57Ja066GcIEFJ66W8IO2Gte2VtCDsl4Xqt7jroIjsnbTrk5ztlaAg7IiYIOyeiOyKteuLiOuLpC5cbiAgY29uc29sZS5sb2coYPCfjJ8gR2VuZXJhdGluZyB0ZW1wbGF0ZSBjb25lcy4uLmApO1xuICBhd2FpdCBlbnRpdHkuZ2VuZXJhdGVUZW1wbGF0ZUNvbmVzKCk7XG4gIGNvbnNvbGUubG9nKGDinJMgRW50aXR5ICcke2VudGl0eUlkfScgY3JlYXRlZCB3aXRoIHRlbXBsYXRlIGNvbmVzYCk7XG4gIGNvbnNvbGUubG9nKGDwn5KhIFRpcDogUnVuICdwbnBtIHNvbmFtdSBjb25lIGdlbiAke2VudGl0eUlkfScgdG8gaW1wcm92ZSB3aXRoIEFJYCk7XG59XG5cbi8qKlxuICogQUnrpbwg7IKs7Jqp7ZWY7JesIGVudGl0eeydmCBjb25lIOuplO2DgOuNsOydtO2EsOulvCDsg53shLHtlZjqsbDrgpgg7JeF6re466CI7J2065Oc7ZWp64uI64ukLlxuICpcbiAqIOyYteyFmDpcbiAqIC0gLS1yZWdlbmVyYXRlOiDsoITssrQg7J6s7IOd7ISxICjquLDsobQgY29uZSDrja7slrTsk7DquLApXG4gKiAtIC0tbG9jYWxlIDxrb3xlbnxqYT46IOyDneyEsSDslrjslrQg7KeA7KCVXG4gKiAtIOq4sOuzuDogb25seUVtcHR5IOuqqOuTnCAo6riw7KG0IGZpeHR1cmVIaW50IOuztOyhtClcbiAqXG4gKiBBTlRIUk9QSUNfQVBJX0tFWSDtlYTsmpQgKHNvbmFtdS5zZWNyZXQudHMg65iQ64qUIO2ZmOqyveuzgOyImClcbiAqL1xuYXN5bmMgZnVuY3Rpb24gY29uZV9nZW4oZW50aXR5SWQ6IHN0cmluZykge1xuICBjb25zdCB7IEVudGl0eU1hbmFnZXIgfSA9IGF3YWl0IGltcG9ydChcIi4uL2VudGl0eS9lbnRpdHktbWFuYWdlclwiKTtcbiAgY29uc3QgeyBmbGFncywgb3B0aW9ucyB9ID0gcGFyc2VDbGlPcHRpb25zKCk7XG5cbiAgLy8gLS1hbGwg7Ji17IWYOiDrqqjrk6AgZW50aXR5IGNvbmUg7IOd7ISxXG4gIGlmIChmbGFncy5oYXMoXCJhbGxcIikgfHwgZW50aXR5SWQgPT09IFwiYWxsXCIpIHtcbiAgICBjb25zdCBhbGxFbnRpdGllcyA9IEVudGl0eU1hbmFnZXIuZ2V0QWxsRW50aXRpZXMoKTtcbiAgICBjb25zb2xlLmxvZyhg8J+MnyBHZW5lcmF0aW5nIEFJLXBvd2VyZWQgY29uZXMgZm9yICR7YWxsRW50aXRpZXMubGVuZ3RofSBlbnRpdGllcy4uLlxcbmApO1xuXG4gICAgbGV0IHRvdGFsVG9rZW5zID0gMDtcbiAgICBjb25zdCBlcnJvcnM6IHN0cmluZ1tdID0gW107XG5cbiAgICBmb3IgKGNvbnN0IGVudGl0eSBvZiBhbGxFbnRpdGllcykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc29sZS5sb2coYFByb2Nlc3NpbmcgJHtlbnRpdHkuaWR9Li4uYCk7XG4gICAgICAgIGNvbnN0IGNvbmZpZ0xvY2FsZSA9IG9wdGlvbnMubG9jYWxlIHx8IFNvbmFtdS5jb25maWcuaTE4bj8uZGVmYXVsdExvY2FsZTtcbiAgICAgICAgY29uc3QgbG9jYWxlID1cbiAgICAgICAgICBjb25maWdMb2NhbGUgPT09IFwia29cIiB8fCBjb25maWdMb2NhbGUgPT09IFwiZW5cIiB8fCBjb25maWdMb2NhbGUgPT09IFwiamFcIlxuICAgICAgICAgICAgPyBjb25maWdMb2NhbGVcbiAgICAgICAgICAgIDogXCJrb1wiO1xuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGVudGl0eS5nZW5lcmF0ZUNvbmVzKHtcbiAgICAgICAgICBwcmVzZXJ2ZUV4aXN0aW5nOiAhZmxhZ3MuaGFzKFwicmVnZW5lcmF0ZVwiKSxcbiAgICAgICAgICBvbmx5RW1wdHk6ICFmbGFncy5oYXMoXCJyZWdlbmVyYXRlXCIpLFxuICAgICAgICAgIGxvY2FsZSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdG90YWxUb2tlbnMgKz0gcmVzdWx0LnRva2Vuc1VzZWQ7XG4gICAgICAgIGNvbnNvbGUubG9nKGAgIOKckyAke2VudGl0eS5pZH0gKCR7cmVzdWx0LnRva2Vuc1VzZWR9IHRva2VucylcXG5gKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFwiVW5rbm93biBlcnJvclwiO1xuICAgICAgICBlcnJvcnMucHVzaChgJHtlbnRpdHkuaWR9OiAke21lc3NhZ2V9YCk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYCAg4pyXICR7ZW50aXR5LmlkfTogJHttZXNzYWdlfVxcbmApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnNvbGUubG9nKGBcXG7inIUgRG9uZSEgVG90YWw6ICR7dG90YWxUb2tlbnN9IHRva2VucyB1c2VkYCk7XG4gICAgY29uc3QgZXN0aW1hdGVkQ29zdCA9ICh0b3RhbFRva2VucyAqIDkpIC8gMV8wMDBfMDAwO1xuICAgIGNvbnNvbGUubG9nKGDwn5KwIEVzdGltYXRlZCBjb3N0OiB+JCR7ZXN0aW1hdGVkQ29zdC50b0ZpeGVkKDQpfWApO1xuXG4gICAgaWYgKGVycm9ycy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGBcXG7inYwgRmFpbGVkIGVudGl0aWVzICgke2Vycm9ycy5sZW5ndGh9KTpgKTtcbiAgICAgIGZvciAoY29uc3QgZXJyIG9mIGVycm9ycykge1xuICAgICAgICBjb25zb2xlLmVycm9yKGAgIC0gJHtlcnJ9YCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIOuLqOydvCBlbnRpdHkgY29uZSDsg53shLFcbiAgY29uc3QgZW50aXR5ID0gRW50aXR5TWFuYWdlci5nZXQoZW50aXR5SWQpO1xuICBpZiAoIWVudGl0eSkge1xuICAgIGNvbnNvbGUuZXJyb3IoYEVudGl0eSBub3QgZm91bmQ6ICR7ZW50aXR5SWR9YCk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgbW9kZSA9IGZsYWdzLmhhcyhcInJlZ2VuZXJhdGVcIikgPyBcInJlZ2VuZXJhdGluZ1wiIDogXCJnZW5lcmF0aW5nXCI7XG4gIGNvbnNvbGUubG9nKFxuICAgIGDwn4yfICR7bW9kZSA9PT0gXCJyZWdlbmVyYXRpbmdcIiA/IFwiUmVnZW5lcmF0aW5nXCIgOiBcIkdlbmVyYXRpbmdcIn0gQUktcG93ZXJlZCBjb25lcyBmb3IgJHtlbnRpdHlJZH0uLi5gLFxuICApO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgY29uZmlnTG9jYWxlID0gb3B0aW9ucy5sb2NhbGUgfHwgU29uYW11LmNvbmZpZy5pMThuPy5kZWZhdWx0TG9jYWxlO1xuICAgIGNvbnN0IGxvY2FsZSA9XG4gICAgICBjb25maWdMb2NhbGUgPT09IFwia29cIiB8fCBjb25maWdMb2NhbGUgPT09IFwiZW5cIiB8fCBjb25maWdMb2NhbGUgPT09IFwiamFcIiA/IGNvbmZpZ0xvY2FsZSA6IFwia29cIjtcblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGVudGl0eS5nZW5lcmF0ZUNvbmVzKHtcbiAgICAgIHByZXNlcnZlRXhpc3Rpbmc6ICFmbGFncy5oYXMoXCJyZWdlbmVyYXRlXCIpLFxuICAgICAgb25seUVtcHR5OiAhZmxhZ3MuaGFzKFwicmVnZW5lcmF0ZVwiKSxcbiAgICAgIGxvY2FsZSxcbiAgICB9KTtcblxuICAgIGNvbnNvbGUubG9nKGDinIUgRG9uZSEgKCR7cmVzdWx0LnRva2Vuc1VzZWR9IHRva2VucyB1c2VkKWApO1xuXG4gICAgLy8g7Yag7YGwIOu5hOyaqSDqs4TsgrAgKOuMgOueteyggeyduCDstpTsoJUpXG4gICAgLy8gQ2xhdWRlIFNvbm5ldCA0LjU6IGlucHV0ICQzL00gdG9rZW5zLCBvdXRwdXQgJDE1L00gdG9rZW5zXG4gICAgLy8g6rCE64uo7ZWY6rKMIO2Pieq3oCAkOS9NIHRva2Vuc+uhnCDqs4TsgrBcbiAgICBjb25zdCBlc3RpbWF0ZWRDb3N0ID0gKHJlc3VsdC50b2tlbnNVc2VkICogOSkgLyAxXzAwMF8wMDA7XG4gICAgY29uc29sZS5sb2coYPCfkrAgRXN0aW1hdGVkIGNvc3Q6IH4kJHtlc3RpbWF0ZWRDb3N0LnRvRml4ZWQoNCl9YCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgIGlmIChlcnJvci5tZXNzYWdlLmluY2x1ZGVzKFwiQU5USFJPUElDX0FQSV9LRVlcIikpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihgXFxu4p2MICR7ZXJyb3IubWVzc2FnZX1gKTtcbiAgICAgICAgY29uc29sZS5lcnJvcihgXFxu8J+SoSBUbyB1c2UgQUktcG93ZXJlZCBjb25lIGdlbmVyYXRpb246YCk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYCAgIDEuIEdldCBhbiBBUEkga2V5IGZyb20gaHR0cHM6Ly9jb25zb2xlLmFudGhyb3BpYy5jb20vYCk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgYCAgIDIuIEFkZCBpdCB0byBzb25hbXUuc2VjcmV0LnRzIG9yIHNldCBBTlRIUk9QSUNfQVBJX0tFWSBlbnZpcm9ubWVudCB2YXJpYWJsZWAsXG4gICAgICAgICk7XG4gICAgICB9IGVsc2UgaWYgKGVycm9yLm1lc3NhZ2UuaW5jbHVkZXMoXCJSYXRlIGxpbWl0XCIpKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYFxcbuKdjCAke2Vycm9yLm1lc3NhZ2V9YCk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYFxcbvCfkqEgUGxlYXNlIHdhaXQgYSBtb21lbnQgYW5kIHRyeSBhZ2Fpbi5gKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYFxcbuKdjCBGYWlsZWQgdG8gZ2VuZXJhdGUgY29uZXM6ICR7ZXJyb3IubWVzc2FnZX1gKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS5lcnJvcihgXFxu4p2MIEZhaWxlZCB0byBnZW5lcmF0ZSBjb25lczogVW5rbm93biBlcnJvcmApO1xuICAgIH1cbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBzY2FmZm9sZF9tb2RlbChlbnRpdHlJZDogc3RyaW5nKSB7XG4gIGF3YWl0IFNvbmFtdS5zeW5jZXIuZ2VuZXJhdGVUZW1wbGF0ZShcIm1vZGVsXCIsIHtcbiAgICBlbnRpdHlJZCxcbiAgfSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHNjYWZmb2xkX21vZGVsX3Rlc3QoZW50aXR5SWQ6IHN0cmluZykge1xuICBhd2FpdCBTb25hbXUuc3luY2VyLmdlbmVyYXRlVGVtcGxhdGUoXCJtb2RlbF90ZXN0XCIsIHtcbiAgICBlbnRpdHlJZCxcbiAgfSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHNjYWZmb2xkX3ZpZXdfbGlzdChlbnRpdHlJZDogc3RyaW5nKSB7XG4gIGF3YWl0IFNvbmFtdS5zeW5jZXIuZ2VuZXJhdGVUZW1wbGF0ZShcInZpZXdfbGlzdFwiLCB7XG4gICAgZW50aXR5SWQsXG4gICAgZXh0cmE6IHVuZGVmaW5lZCxcbiAgfSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHNjYWZmb2xkX3ZpZXdfZm9ybShlbnRpdHlJZDogc3RyaW5nKSB7XG4gIGF3YWl0IFNvbmFtdS5zeW5jZXIuZ2VuZXJhdGVUZW1wbGF0ZShcInZpZXdfZm9ybVwiLCB7XG4gICAgZW50aXR5SWQsXG4gIH0pO1xufVxuXG5hc3luYyBmdW5jdGlvbiBhdXRoX2dlbmVyYXRlKCkge1xuICAvLyAtLXBsdWdpbnMg7Ji17IWYIO2MjOyLsVxuICBjb25zdCBwbHVnaW5zQXJnID0gcHJvY2Vzcy5hcmd2LmZpbmQoKGFyZykgPT4gYXJnLnN0YXJ0c1dpdGgoXCItLXBsdWdpbnNcIikpO1xuICBjb25zdCBwbHVnaW5zOiBCZXR0ZXJBdXRoUGx1Z2luSWRbXSA9IFtdO1xuXG4gIGlmIChwbHVnaW5zQXJnKSB7XG4gICAgY29uc3QgcGx1Z2luVmFsdWUgPSBwbHVnaW5zQXJnLmluY2x1ZGVzKFwiPVwiKVxuICAgICAgPyBwbHVnaW5zQXJnLnNwbGl0KFwiPVwiKVsxXVxuICAgICAgOiBwcm9jZXNzLmFyZ3ZbcHJvY2Vzcy5hcmd2LmluZGV4T2YocGx1Z2luc0FyZykgKyAxXTtcblxuICAgIGlmIChwbHVnaW5WYWx1ZSkge1xuICAgICAgY29uc3QgcGx1Z2luSWRzID0gcGx1Z2luVmFsdWUuc3BsaXQoXCIsXCIpLm1hcCgocCkgPT4gcC50cmltKCkpO1xuXG4gICAgICBmb3IgKGNvbnN0IGlkIG9mIHBsdWdpbklkcykge1xuICAgICAgICBpZiAoaXNWYWxpZFBsdWdpbklkKGlkKSkge1xuICAgICAgICAgIHBsdWdpbnMucHVzaChpZCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc29sZS5sb2coY2hhbGsueWVsbG93KGDimqAgVW5rbm93biBwbHVnaW46ICR7aWR9YCkpO1xuICAgICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmRpbShgICBTdXBwb3J0ZWQgcGx1Z2luczogJHtTVVBQT1JURURfUExVR0lOX0lEUy5qb2luKFwiLCBcIil9YCkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY29uc29sZS5sb2coY2hhbGsueWVsbG93LmJvbGQoXCLwn5SQIEdlbmVyYXRpbmcgYmV0dGVyLWF1dGggZW50aXRpZXMuLi5cXG5cIikpO1xuXG4gIGlmIChwbHVnaW5zLmxlbmd0aCA+IDApIHtcbiAgICBjb25zb2xlLmxvZyhjaGFsay5kaW0oYCAgUGx1Z2luczogJHtwbHVnaW5zLmpvaW4oXCIsIFwiKX1gKSk7XG4gIH1cblxuICBhd2FpdCBnZW5lcmF0ZUJldHRlckF1dGhFbnRpdGllcyh7IHBsdWdpbnMgfSk7XG59XG5cbi8qKlxuICogcG5wbSBzb25hbXUgYXV0aCBhZGQtY29tcGFuaW9ucyDtlZjrqbQg7Iuk7ZaJ65CY64qUIO2VqOyImOyeheuLiOuLpC5cbiAqIOq4sOyhtCDtlITroZzsoJ3tirjsnZggZW50aXR5Lmpzb27sl5AgZml4dHVyZUNvbXBhbmlvbnPrpbwg7IaM6riJIOy2lOqwgO2VqeuLiOuLpC5cbiAqXG4gKiDsnbTrr7ggZml4dHVyZUNvbXBhbmlvbnPqsIAg7J6I64qUIGVudGl0eeuKlCDsiqTtgrXtlanri4jri6QgKOuNruyWtOyTsOq4sCDsl4bsnYwpLlxuICovXG5hc3luYyBmdW5jdGlvbiBhdXRoX2FkZF9jb21wYW5pb25zKCkge1xuICBjb25zb2xlLmxvZyhjaGFsay55ZWxsb3cuYm9sZChcIvCflJAgQWRkaW5nIGZpeHR1cmVDb21wYW5pb25zIHRvIGJldHRlci1hdXRoIGVudGl0aWVzLi4uXFxuXCIpKTtcbiAgYXdhaXQgYWRkQ29tcGFuaW9uc1RvRW50aXRpZXMoKTtcbiAgY29uc29sZS5sb2coY2hhbGsuYm9sZChcIlxcbuKchSBEb25lIVwiKSk7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztZQVlzQztvQkFLa0I7U0FDWDtjQUNHO3FCQUNXO2tCQVE3QjtjQUNZO1dBQ3VCO0FBT2pFLElBQUk7Ozs7QUFLSixTQUFTLGdCQUFnQixPQUFpQixRQUFRLE1BR2hEO0NBQ0EsTUFBTSx3QkFBUSxJQUFJLElBQVk7Q0FDOUIsTUFBTSxVQUFrQyxDQUFDO0NBRXpDLEtBQUssSUFBSSxJQUFJLEdBQUcsSUFBSSxLQUFLLFFBQVEsS0FBSztFQUNwQyxNQUFNLE1BQU0sS0FBSztFQUNqQixJQUFJLENBQUMsSUFBSSxXQUFXLElBQUksR0FBRztFQUczQixJQUFJLElBQUksU0FBUyxHQUFHLEdBQUc7R0FDckIsTUFBTSxDQUFDLEtBQUssU0FBUyxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHO0dBQzNDLFFBQVEsT0FBTztHQUNmO0VBQ0Y7RUFHQSxNQUFNLFVBQVUsS0FBSyxJQUFJO0VBQ3pCLElBQUksV0FBVyxDQUFDLFFBQVEsV0FBVyxJQUFJLEtBQUssQ0FBQyxRQUFRLFdBQVcsR0FBRyxHQUFHO0dBQ3BFLFFBQVEsSUFBSSxNQUFNLENBQUMsS0FBSztHQUN4QjtFQUNGLE9BRUUsTUFB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
852
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLmpzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9iaW4vY2xpLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhc3NlcnQgZnJvbSBcImFzc2VydFwiO1xuaW1wb3J0IHsgZXhlY1N5bmMsIHNwYXduIH0gZnJvbSBcImNoaWxkX3Byb2Nlc3NcIjtcbmltcG9ydCB7IG1rZGlyLCByZWFkZGlyLCB3cml0ZUZpbGUgfSBmcm9tIFwiZnMvcHJvbWlzZXNcIjtcbmltcG9ydCB7IGNyZWF0ZVJlcXVpcmUgfSBmcm9tIFwibW9kdWxlXCI7XG5pbXBvcnQgcGF0aCBmcm9tIFwicGF0aFwiO1xuaW1wb3J0IHByb2Nlc3MgZnJvbSBcInByb2Nlc3NcIjtcblxuaW1wb3J0IGNoYWxrIGZyb20gXCJjaGFsa1wiO1xuaW1wb3J0IGtuZXggZnJvbSBcImtuZXhcIjtcbmltcG9ydCB7IHR5cGUgS25leCB9IGZyb20gXCJrbmV4XCI7XG5pbXBvcnQgeyB0c2ljbGkgfSBmcm9tIFwidHNpY2xpXCI7XG5cbmltcG9ydCB7IFNvbmFtdSB9IGZyb20gXCIuLi9hcGkvc29uYW11XCI7XG5pbXBvcnQgeyBhZGRDb21wYW5pb25zVG9FbnRpdGllcywgZ2VuZXJhdGVCZXR0ZXJBdXRoRW50aXRpZXMgfSBmcm9tIFwiLi4vYXV0aC9hdXRoLWdlbmVyYXRvclwiO1xuaW1wb3J0IHsgaXNWYWxpZFBsdWdpbklkLCBTVVBQT1JURURfUExVR0lOX0lEUyB9IGZyb20gXCIuLi9hdXRoL3BsdWdpbnMvZW50aXR5LWRlZmluaXRpb25zXCI7XG5pbXBvcnQgeyB0eXBlIEJldHRlckF1dGhQbHVnaW5JZCB9IGZyb20gXCIuLi9hdXRoL3BsdWdpbnMvZW50aXR5LWRlZmluaXRpb25zXCI7XG5pbXBvcnQgeyB0eXBlIFNvbmFtdURCQ29uZmlnIH0gZnJvbSBcIi4uL2RhdGFiYXNlL2RiXCI7XG5pbXBvcnQgeyBFbnRpdHlNYW5hZ2VyIH0gZnJvbSBcIi4uL2VudGl0eS9lbnRpdHktbWFuYWdlclwiO1xuaW1wb3J0IHsgZ2V0U29uYW11RW52aXJvbm1lbnQgfSBmcm9tIFwiLi4vZW52XCI7XG5pbXBvcnQgeyBNaWdyYXRvciB9IGZyb20gXCIuLi9taWdyYXRpb24vbWlncmF0b3JcIjtcbmltcG9ydCB7IEZpeHR1cmVNYW5hZ2VyIH0gZnJvbSBcIi4uL3Rlc3RpbmcvZml4dHVyZS1tYW5hZ2VyXCI7XG5pbXBvcnQge1xuICBleGVjV2l0aExpbmVQcmVmaXgsXG4gIHByaW50QnVpbGRTdW1tYXJ5LFxuICBwcmludFRhc2tGYWlsZWQsXG4gIHByaW50VGFza0hlYWRlcixcbiAgcHJpbnRUYXNrU3RhcnQsXG4gIHByaW50VGFza1N1Y2Nlc3MsXG59IGZyb20gXCIuLi91dGlscy9jb25zb2xlLXV0aWxcIjtcbmltcG9ydCB7IGV4aXN0cyB9IGZyb20gXCIuLi91dGlscy9mcy11dGlsc1wiO1xuaW1wb3J0IHsgZmluZEFwaVJvb3RQYXRoLCBmaW5kQXBwUm9vdFBhdGggfSBmcm9tIFwiLi4vdXRpbHMvdXRpbHNcIjtcbmltcG9ydCB7IEFQSV9BUlRJRkFDVFMsIFdFQl9BUlRJRkFDVFMgfSBmcm9tIFwiLi9idWlsZC1jb25maWdcIjtcbmltcG9ydCB7IHR5cGUgQnVpbGRBcnRpZmFjdCB9IGZyb20gXCIuL2J1aWxkLWNvbmZpZ1wiO1xuaW1wb3J0IHsgZml4dHVyZUV4cGxvcmVDb21tYW5kLCBmaXh0dXJlRmV0Y2hDb21tYW5kLCBmaXh0dXJlR2VuQ29tbWFuZCB9IGZyb20gXCIuL2ZpeHR1cmVcIjtcbmltcG9ydCB7IGdldE1pZ3JhdGVSdW5UYXJnZXRzIH0gZnJvbSBcIi4vbWlncmF0ZS10YXJnZXRzXCI7XG5pbXBvcnQgeyB0ZXN0Q29tbWFuZCB9IGZyb20gXCIuL3Rlc3QtY29tbWFuZFwiO1xuXG5sZXQgbWlncmF0b3I6IE1pZ3JhdG9yO1xuXG4vKipcbiAqIENMSSDsmLXshZjsnYQg7YyM7Iux7ZWY64qUIO2XrO2NvCDtlajsiJhcbiAqL1xuZnVuY3Rpb24gcGFyc2VDbGlPcHRpb25zKGFyZ3Y6IHN0cmluZ1tdID0gcHJvY2Vzcy5hcmd2KToge1xuICBmbGFnczogU2V0PHN0cmluZz47IC8vIC0tcmVnZW5lcmF0ZSwgLS1haSwgLS1uby1jb25lcyDrk7FcbiAgb3B0aW9uczogUmVjb3JkPHN0cmluZywgc3RyaW5nPjsgLy8gLS1sb2NhbGUga28g65OxXG59IHtcbiAgY29uc3QgZmxhZ3MgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgY29uc3Qgb3B0aW9uczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYXJndi5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IGFyZyA9IGFyZ3ZbaV07XG4gICAgaWYgKCFhcmcuc3RhcnRzV2l0aChcIi0tXCIpKSBjb250aW51ZTtcblxuICAgIC8vIC0tb3B0aW9uPXZhbHVlIO2YleyLnVxuICAgIGlmIChhcmcuaW5jbHVkZXMoXCI9XCIpKSB7XG4gICAgICBjb25zdCBba2V5LCB2YWx1ZV0gPSBhcmcuc2xpY2UoMikuc3BsaXQoXCI9XCIpO1xuICAgICAgb3B0aW9uc1trZXldID0gdmFsdWU7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICAvLyAtLW9wdGlvbiB2YWx1ZSDtmJXsi53snbjsp4Ag7ZmV7J24XG4gICAgY29uc3QgbmV4dEFyZyA9IGFyZ3ZbaSArIDFdO1xuICAgIGlmIChuZXh0QXJnICYmICFuZXh0QXJnLnN0YXJ0c1dpdGgoXCItLVwiKSAmJiAhbmV4dEFyZy5zdGFydHNXaXRoKFwiLVwiKSkge1xuICAgICAgb3B0aW9uc1thcmcuc2xpY2UoMildID0gbmV4dEFyZztcbiAgICAgIGkrKzsgLy8g64uk7J2MIGFyZ+uKlCDqsJLsnbTrr4DroZwg7Iqk7YK1XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIC0tZmxhZyDtmJXsi51cbiAgICAgIGZsYWdzLmFkZChhcmcuc2xpY2UoMikpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7IGZsYWdzLCBvcHRpb25zIH07XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGJvb3RzdHJhcCgpIHtcbiAgY29uc3Qgbm90VG9Jbml0ID0gW1wiZGV2XCIsIFwiYnVpbGRcIiwgXCJzdGFydFwiLCBcInNraWxsc1wiLCBcInRlc3RcIl0uaW5jbHVkZXMocHJvY2Vzcy5hcmd2WzJdID8/IFwiXCIpO1xuICBpZiAoIW5vdFRvSW5pdCkge1xuICAgIGF3YWl0IFNvbmFtdS5pbml0KGZhbHNlLCBmYWxzZSk7XG4gIH1cblxuICB0cnkge1xuICAgIC8vIHRzaWNsaeuKlCDsoJXtmZXtlZwg66qF66C57Ja0IOunpOy5reunjCDsp4Dsm5DtlZjrr4DroZwsIC0t66GcIOyLnOyeke2VmOuKlCDsmLXshZjqs7wg6re4IOqwkuydhCDtlYTthLDrp4Htlanri4jri6QuXG4gICAgLy8g7Ji17IWYIO2MjOyLseydgCDqsIEgcnVubmVyIO2VqOyImOyXkOyEnCDsm5Drs7ggcHJvY2Vzcy5hcmd266W8IOyCrOyaqe2VmOyXrCDsiJjtlontlanri4jri6QuXG4gICAgLy8gXCItLVwiKGJhcmUgZG91YmxlIGRhc2gp64qUIHBhc3N0aHJvdWdoIOq1rOu2hOyekOydtOuvgOuhnCwg6re4IOuSpOydmCDrqqjrk6Ag7J247J6Q64+EIOygnOyZuO2VqeuLiOuLpC5cbiAgICBjb25zdCBmaWx0ZXJlZEFyZ3Y6IHN0cmluZ1tdID0gW107XG4gICAgbGV0IHNraXBOZXh0ID0gZmFsc2U7XG4gICAgbGV0IGFmdGVyRG91YmxlRGFzaCA9IGZhbHNlO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcHJvY2Vzcy5hcmd2Lmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBhcmcgPSBwcm9jZXNzLmFyZ3ZbaV07XG4gICAgICBpZiAoYXJnID09PSBcIi0tXCIpIHtcbiAgICAgICAgYWZ0ZXJEb3VibGVEYXNoID0gdHJ1ZTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAoYWZ0ZXJEb3VibGVEYXNoKSBjb250aW51ZTtcbiAgICAgIGlmIChza2lwTmV4dCkge1xuICAgICAgICBza2lwTmV4dCA9IGZhbHNlO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmIChhcmcuc3RhcnRzV2l0aChcIi0tXCIpKSB7XG4gICAgICAgIC8vIC0tb3B0aW9uPXZhbHVlIO2YleyLneydgCDsnbQgYXJn66eMIOyKpO2CtVxuICAgICAgICBpZiAoYXJnLmluY2x1ZGVzKFwiPVwiKSkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIC8vIC0tb3B0aW9uIHZhbHVlIO2YleyLneyduOyngCDtmZXsnbg6IOuLpOydjCBhcmfqsIAgLS3roZwg7Iuc7J6R7ZWY7KeAIOyViuycvOuptCDqsJLsnbQg7J6I64qUIOqyg1xuICAgICAgICBjb25zdCBuZXh0QXJnID0gcHJvY2Vzcy5hcmd2W2kgKyAxXTtcbiAgICAgICAgaWYgKG5leHRBcmcgJiYgIW5leHRBcmcuc3RhcnRzV2l0aChcIi0tXCIpICYmICFuZXh0QXJnLnN0YXJ0c1dpdGgoXCItXCIpKSB7XG4gICAgICAgICAgc2tpcE5leHQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgZmlsdGVyZWRBcmd2LnB1c2goYXJnKTtcbiAgICB9XG5cbiAgICAvLyBidWlsZC9kZXYg66qF66C57Ja06rCAIOyEnOu4jOy7pOunqOuTnCDsl4bsnbQg7Zi47Lac65CgIOuVjCBcImFsbFwi7J2EIOq4sOuzuOqwkuycvOuhnCDstpTqsIDtlanri4jri6QuXG4gICAgLy8g7JiIOiBgc29uYW11IGJ1aWxkYCDihpIgYHNvbmFtdSBidWlsZCBhbGxgLCBgc29uYW11IGRldmAg4oaSIGBzb25hbXUgZGV2IGFsbGBcbiAgICBjb25zdCBjbWQgPSBmaWx0ZXJlZEFyZ3ZbMl07XG4gICAgaWYgKChjbWQgPT09IFwiYnVpbGRcIiB8fCBjbWQgPT09IFwiZGV2XCIpICYmIGZpbHRlcmVkQXJndi5sZW5ndGggPT09IDMpIHtcbiAgICAgIGZpbHRlcmVkQXJndi5wdXNoKFwiYWxsXCIpO1xuICAgIH1cblxuICAgIC8vIHRlc3Qg7Luk66eo65Oc64qUIOqwgOuzgCDsnbjsnpAo7YyM7J2866qFLCAtLXBhdHRlcm4g65OxKeulvCDrsJvsnLzrr4DroZwgdHNpY2xp66W8IOyasO2ajO2VqeuLiOuLpC5cbiAgICBpZiAoY21kID09PSBcInRlc3RcIikge1xuICAgICAgcmV0dXJuIHRlc3RDb21tYW5kKCk7XG4gICAgfVxuXG4gICAgYXdhaXQgdHNpY2xpKGZpbHRlcmVkQXJndiwge1xuICAgICAgdHlwZXM6IHtcbiAgICAgICAgXCIjZW50aXR5SWRcIjoge1xuICAgICAgICAgIHR5cGU6IFwiYXV0b2NvbXBsZXRlXCIsXG4gICAgICAgICAgbmFtZTogXCIjZW50aXR5SWRcIixcbiAgICAgICAgICBtZXNzYWdlOiBcIlBsZWFzZSBpbnB1dCAjZW50aXR5SWRcIixcbiAgICAgICAgICBjaG9pY2VzOiBFbnRpdHlNYW5hZ2VyLmdldEFsbFBhcmVudElkcygpLm1hcCgoZW50aXR5SWQpID0+ICh7XG4gICAgICAgICAgICB0aXRsZTogZW50aXR5SWQsXG4gICAgICAgICAgICB2YWx1ZTogZW50aXR5SWQsXG4gICAgICAgICAgfSkpLFxuICAgICAgICB9LFxuICAgICAgICBcIiNyZWNvcmRJZHNcIjogXCJudW1iZXJbXVwiLFxuICAgICAgICBcIiNuYW1lXCI6IFwic3RyaW5nXCIsXG4gICAgICAgIFwiI3RhcmdldHNcIjoge1xuICAgICAgICAgIHR5cGU6IFwibXVsdGlzZWxlY3RcIixcbiAgICAgICAgICBuYW1lOiBcIiN0YXJnZXRzXCIsXG4gICAgICAgICAgbWVzc2FnZTogXCJQbGVhc2UgaW5wdXQgI3RhcmdldHNcIixcbiAgICAgICAgICBjaG9pY2VzOiBbXG4gICAgICAgICAgICB7IHRpdGxlOiBcIkRldmVsb3BtZW50XCIsIHZhbHVlOiBcImRldmVsb3BtZW50XCIgfSxcbiAgICAgICAgICAgIHsgdGl0bGU6IFwiU3RhZ2luZ1wiLCB2YWx1ZTogXCJzdGFnaW5nXCIgfSxcbiAgICAgICAgICAgIHsgdGl0bGU6IFwiUHJvZHVjdGlvblwiLCB2YWx1ZTogXCJwcm9kdWN0aW9uXCIgfSxcbiAgICAgICAgICAgIHsgdGl0bGU6IFwiRml4dHVyZVwiLCB2YWx1ZTogXCJmaXh0dXJlXCIgfSxcbiAgICAgICAgICAgIHsgdGl0bGU6IFwiVGVzdFwiLCB2YWx1ZTogXCJ0ZXN0XCIgfSxcbiAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIGFyZ3M6IFtcbiAgICAgICAgW1wiZml4dHVyZVwiLCBcImluaXRcIl0sXG4gICAgICAgIFtcImZpeHR1cmVcIiwgXCJpbXBvcnRcIiwgXCIjZW50aXR5SWRcIiwgXCIjcmVjb3JkSWRzXCJdLFxuICAgICAgICBbXCJmaXh0dXJlXCIsIFwic3luY1wiXSxcbiAgICAgICAgW1wiZml4dHVyZVwiLCBcImdlblwiXSxcbiAgICAgICAgW1wiZml4dHVyZVwiLCBcImZldGNoXCJdLFxuICAgICAgICBbXCJmaXh0dXJlXCIsIFwiZXhwbG9yZVwiXSxcbiAgICAgICAgW1wibWlncmF0ZVwiLCBcInJ1blwiXSxcbiAgICAgICAgW1wibWlncmF0ZVwiLCBcImFwcGx5XCIsIFwiI3RhcmdldHNcIl0sXG4gICAgICAgIFtcIm1pZ3JhdGVcIiwgXCJnZW5lcmF0ZVwiXSxcbiAgICAgICAgW1wibWlncmF0ZVwiLCBcInN0YXR1c1wiXSxcbiAgICAgICAgW1wic3R1YlwiLCBcInByYWN0aWNlXCIsIFwiI25hbWVcIl0sXG4gICAgICAgIFtcInN0dWJcIiwgXCJlbnRpdHlcIiwgXCIjbmFtZVwiXSxcbiAgICAgICAgW1wic2NhZmZvbGRcIiwgXCJtb2RlbFwiLCBcIiNlbnRpdHlJZFwiXSxcbiAgICAgICAgW1wic2NhZmZvbGRcIiwgXCJtb2RlbF90ZXN0XCIsIFwiI2VudGl0eUlkXCJdLFxuICAgICAgICBbXCJzY2FmZm9sZFwiLCBcInZpZXdfbGlzdFwiLCBcIiNlbnRpdHlJZFwiXSxcbiAgICAgICAgW1wic2NhZmZvbGRcIiwgXCJ2aWV3X2Zvcm1cIiwgXCIjZW50aXR5SWRcIl0sXG4gICAgICAgIFtcImNvbmVcIiwgXCJnZW5cIiwgXCIjZW50aXR5SWRcIl0sXG4gICAgICAgIFtcInN5bmNcIl0sXG4gICAgICAgIFtcImJ1aWxkXCIsIFwiYWxsXCJdLFxuICAgICAgICBbXCJidWlsZFwiLCBcImFwaVwiXSxcbiAgICAgICAgW1wiYnVpbGRcIiwgXCJ3ZWJcIl0sXG4gICAgICAgIFtcImRldlwiLCBcImFsbFwiXSxcbiAgICAgICAgW1wiZGV2XCIsIFwiYXBpXCJdLFxuICAgICAgICBbXCJkZXZcIiwgXCJ3ZWJcIl0sXG4gICAgICAgIFtcInN0YXJ0XCJdLFxuICAgICAgICBbXCJza2lsbHNcIiwgXCJzeW5jXCJdLFxuICAgICAgICBbXCJ0ZXN0XCJdLFxuICAgICAgICBbXCJhdXRoXCIsIFwiZ2VuZXJhdGVcIl0sXG4gICAgICAgIFtcImF1dGhcIiwgXCJhZGQtY29tcGFuaW9uc1wiXSxcbiAgICAgIF0sXG4gICAgICBydW5uZXJzOiB7XG4gICAgICAgIG1pZ3JhdGVfc3RhdHVzLFxuICAgICAgICBtaWdyYXRlX3J1bixcbiAgICAgICAgbWlncmF0ZV9hcHBseSxcbiAgICAgICAgbWlncmF0ZV9nZW5lcmF0ZSxcbiAgICAgICAgZml4dHVyZV9pbml0LFxuICAgICAgICBmaXh0dXJlX2ltcG9ydCxcbiAgICAgICAgZml4dHVyZV9zeW5jLFxuICAgICAgICBmaXh0dXJlX2dlbixcbiAgICAgICAgZml4dHVyZV9mZXRjaCxcbiAgICAgICAgZml4dHVyZV9leHBsb3JlLFxuICAgICAgICBzdHViX3ByYWN0aWNlLFxuICAgICAgICBzdHViX2VudGl0eSxcbiAgICAgICAgc2NhZmZvbGRfbW9kZWwsXG4gICAgICAgIHNjYWZmb2xkX21vZGVsX3Rlc3QsXG4gICAgICAgIHNjYWZmb2xkX3ZpZXdfbGlzdCxcbiAgICAgICAgc2NhZmZvbGRfdmlld19mb3JtLFxuICAgICAgICBjb25lX2dlbixcbiAgICAgICAgc3luYyxcbiAgICAgICAgYnVpbGRfYWxsLFxuICAgICAgICBidWlsZF9hcGksXG4gICAgICAgIGJ1aWxkX3dlYixcbiAgICAgICAgZGV2X2FsbCxcbiAgICAgICAgZGV2X2FwaSxcbiAgICAgICAgZGV2X3dlYixcbiAgICAgICAgc3RhcnQsXG4gICAgICAgIHNraWxsc19zeW5jOiBza2lsbHNNaWdyYXRpb25Ob3RpY2UsXG4gICAgICAgIHRlc3Q6IHRlc3RDb21tYW5kLFxuICAgICAgICBhdXRoX2dlbmVyYXRlLFxuICAgICAgICBcImF1dGhfYWRkLWNvbXBhbmlvbnNcIjogYXV0aF9hZGRfY29tcGFuaW9ucyxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH0gZmluYWxseSB7XG4gICAgYXdhaXQgU29uYW11LmRlc3Ryb3koKTtcbiAgfVxufVxuXG5ib290c3RyYXAoKS5maW5hbGx5KGFzeW5jICgpID0+IHtcbiAgYXdhaXQgRml4dHVyZU1hbmFnZXIuZGVzdHJveSgpO1xufSk7XG5cbi8qKlxuICogcG5wbSBzeW5jIO2VmOuptCDsi6TtlonrkJjripQg7ZWo7IiY7J6F64uI64ukLlxuICog7ZSE66Gc7KCd7Yq466W8IOyLse2BrO2VqeuLiOuLpC5cbiAqXG4gKiBgLS1mb3JjZWAg7Ji17IWY7J20IOyjvOyWtOyngOuptCBsb2Nr7J2EIOustOyLnO2VmOqzoCDtkoAt7Iux7YGs66W8IOyImO2Wie2VqeuLiOuLpC5cbiAqIGdpdCBwb3N0LW1lcmdlIGhvb2vsnbTrgpggQ0nsl5DshJwg66ekIHB1bGwg7ZuEIOyekOuPmSDsi6TtlontlaAg7IiYIOyeiOuPhOuhnSDrhbjstpwuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHN5bmMoKSB7XG4gIGNvbnN0IHsgZmxhZ3MgfSA9IHBhcnNlQ2xpT3B0aW9ucygpO1xuICBpZiAoZmxhZ3MuaGFzKFwiZm9yY2VcIikpIHtcbiAgICBhd2FpdCBTb25hbXUuc3luY2VyLmZvcmNlU3luYygpO1xuICB9IGVsc2Uge1xuICAgIGF3YWl0IFNvbmFtdS5zeW5jZXIuc3luYygpO1xuICB9XG59XG5cbi8qKlxuICog7J207KCEIOyDneyEsSDtlITroZzsoJ3tirjsnZggcG9zdGluc3RhbGzsnbQg7JeF6re466CI7J2065Oc66W8IOunieyngCDslYrrj4TroZ0g6rWsIOuqheugueunjCDslYjsoITtlZjqsowg7KKF66OM7ZWp64uI64ukLlxuICovXG5hc3luYyBmdW5jdGlvbiBza2lsbHNNaWdyYXRpb25Ob3RpY2UoKSB7XG4gIGNvbnNvbGUubG9nKGNoYWxrLnllbGxvdyhcIidzb25hbXUgc2tpbGxzIHN5bmMnIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQuXCIpKTtcbiAgY29uc29sZS5sb2coXG4gICAgY2hhbGsuY3lhbihcIkluc3RhbGwgU29uYW11IHNraWxscyB3aXRoICducHggc2tpbGxzQGxhdGVzdCBhZGQgY2FydGFub3ZhLWFpL3NraWxscycuXCIpLFxuICApO1xufVxuXG4vKipcbiAqIEFQSSDqsJzrsJwg7ISc67KE66W8IOyLpO2Wie2VmOuKlCDqs7XthrUg66Gc7KeB7J6F64uI64ukLlxuICogZGV2X2FsbOqzvCBkZXZfYXBp7JeQ7IScIOqzteycoO2VqeuLiOuLpC5cbiAqXG4gKiBUeXBlU2NyaXB066W8IOuwlOuhnCDsi6TtlontlaAg7IiYIOyeiOuPhOuhnSBAc29uYW11LWtpdC90cy1sb2FkZXLrpbwsXG4gKiBITVLsnYQg7KeA7JuQ7ZWY6riwIOychO2VtCBAc29uYW11LWtpdC9obXItaG9va+ydhCBpbXBvcnTtlZjrqbAsXG4gKiDshozsiqTrp7Ug7KeA7JuQ7J2EIOychO2VtCAtLWVuYWJsZS1zb3VyY2UtbWFwcyDtlIzrnpjqt7jrpbwg7Y+s7ZWo7ZWY7JesIOyLpO2Wie2VqeuLiOuLpC5cbiAqXG4gKiDsnbTrlYwgQHNvbmFtdS1raXQvdHMtbG9hZGVy7JmAIEBzb25hbXUta2l0L2htci1ob29r64qUIHNvbmFtdeqwgCDsnpDssrTsoIHsnLzroZwg6rCA7KeA6rOgIOyeiOuKlCBkZXBlbmRlbmN57J6F64uI64ukLlxuICog65iQ7ZWcIOyLpO2WieyXkCDsgqzsmqntlZjripQgQHNvbmFtdS1raXQvaG1yLXJ1bm5lcuuPhCDrp4jssKzqsIDsp4DroZwgc29uYW116rCAIOyekOyytOyggeycvOuhnCDqsIDsp4Dqs6Ag7J6I64qUIGRlcGVuZGVuY3nsnoXri4jri6QuXG4gKiDrlLDrnbzshJwg7IKs7Jqp7J6QIO2UhOuhnOygne2KuOyXkOyEnOuKlCDsnbQg7IS4IO2MqO2CpOyngOulvCDsp4HsoJEg7ISk7LmY7ZWgIO2VhOyalOqwgCDsl4bsirXri4jri6QuXG4gKi9cbmZ1bmN0aW9uIHNwYXduQXBpRGV2U2VydmVyKG9wdGlvbnM/OiB7IGV4dHJhRW52PzogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB9KSB7XG4gIGNvbnN0IGFwaVJvb3QgPSBmaW5kQXBpUm9vdFBhdGgoKTtcbiAgY29uc3QgZW50cnlQb2ludCA9IFwic3JjL2luZGV4LnRzXCI7XG5cbiAgLy8g7J20IHNvbmFtdSDtjKjtgqTsp4DqsIAgZGVwZW5kZW5jaWVz66GcIOqwgOyngOqzoCDsnojripQgQHNvbmFtdS1raXQvaG1yLXJ1bm5lcuydmCBiaW4vcnVuLmpz66W8IOyCrOyaqe2VqeuLiOuLpC5cbiAgLy8g7J20IOqyveuhnCgvYmluL3J1bi5qcynripQgQHNvbmFtdS1raXQvaG1yLXJ1bm5lcuydmCBwYWNrYWdlLmpzb27snZggYmluIO2VhOuTnOyXkCDrqoXsi5zrkJjslrQg7J6I64qUIOq3uOqyg+qzvCDqsJnsirXri4jri6QuXG4gIGNvbnN0IGhvdFJ1bm5lckJpblBhdGggPSBjcmVhdGVSZXF1aXJlKGltcG9ydC5tZXRhLnVybCkucmVzb2x2ZShcbiAgICBcIkBzb25hbXUta2l0L2htci1ydW5uZXIvYmluL3J1bi5qc1wiLFxuICApO1xuXG4gIGNvbnN0IHNlcnZlclByb2Nlc3MgPSBzcGF3bihcbiAgICBwcm9jZXNzLmV4ZWNQYXRoLCAvLyBub2RlXG4gICAgW1xuICAgICAgaG90UnVubmVyQmluUGF0aCwgLy8g7J2066CH6rKMIO2VtOyEnCBob3QtcnVubmVy66W8IOyLpO2Wie2VmOq1rOyalFxuICAgICAgXCItLWNsZWFyLXNjcmVlbj1mYWxzZVwiLCAvLyDsnbTtlZggaG90LXJ1bm5lcuyXkOqyjCDrhJjqsqjspIQg7J247J6Q65Ok7J6F64uI64ukLlxuICAgICAgXCItLW5vZGUtYXJncz0tLWltcG9ydD1zb25hbXUvdHMtbG9hZGVyLXJlZ2lzdGVyXCIsIC8vIFR5cGVTY3JpcHQg7ISc7Y+s7Yq466W8IOychO2VnCDroZzrjZQsXG4gICAgICBcIi0tbm9kZS1hcmdzPS0taW1wb3J0PXNvbmFtdS9obXItaG9vay1yZWdpc3RlclwiLCAvLyBITVLsnYQg7KeA7JuQ7ZWY6riwIOychO2VnCBob29rLFxuICAgICAgXCItLW5vZGUtYXJncz0tLWVuYWJsZS1zb3VyY2UtbWFwc1wiLCAvLyDqt7jrpqzqs6Ag7IaM7Iqk66e1IOyngOybkOydhCDsnITtlZwg7ZSM656Y6re47J6F64uI64ukLlxuICAgICAgXCItLW9uLWtleT1yOnJlc3RhcnQ6UmVzdGFydCBzZXJ2ZXJcIiwgLy8gciDriITrpbTrqbQg7ISc67KEIOyerOyLnOyeke2VmOqyjCDtlbTspJjsmpQuXG4gICAgICBcIi0tb24ta2V5PWM6Y2xlYXI6Q2xlYXIgc2NyZWVuXCIsIC8vIGMg64iE66W066m0IO2EsOuvuOuEkCDtmZTrqbTsnYQg7KeA7JuM7KSY7JqULlxuICAgICAgYC0tb24ta2V5PWY6c2hlbGwocm0gJHtwYXRoLmpvaW4oYXBpUm9vdCwgXCJzb25hbXUubG9ja1wiKX0pOnJlc3RhcnQ6Rm9yY2UgcmVzdGFydGAsIC8vIGYg64iE66W066m0IGxvY2sg7KCc6rGwIO2bhCDsnqzsi5zsnpEg4oaSIOyDiCDtlITroZzshLjsiqTqsIAg67aA7Yq47Iqk7Yq4656p7JeQ7IScIO2SgC3si7HtgawuIGZvcmNlIHN5bmMgQ0xJ66W8IHNoZWxs66GcIOu2gOultOuptCDsgrTslYTsnojripQg7ISc67KE7J2YIHdhdGNoZXIg7Y+t7ZKN7J20IDpyZXN0YXJ07JmAIOy2qeuPjO2VtCDsg4Htg5wg7J207IOBLlxuXG4gICAgICBcIi0tb24ta2V5PWVudGVyOnNoZWxsKGVjaG8gaGkpOktleSBiaW5kaW5nIHRlc3RcIiwgLy8gZW50ZXLrpbwga2V566GcIOyTuCDsiJgg7J6I7J2M7J2EIOuztOydtOq4sCDsnITtlZwg7YWM7Iqk7Yq47J6F64uI64ukLlxuICAgICAgXCItLW9uLWtleT1jdHJsK2YgY3RybCtmOnNoZWxsKGdpdCBwdWxsICYmIHBucG0gaW5zdGFsbCAmJiBwbnBtIC0tZmlsdGVyIHNvbmFtdSBidWlsZCAmJiBlY2hvICdTb25hbXUgaXMgbm93IHVwLXRvLWRhdGUhJyk6cmVzdGFydDpQdWxsICYgaW5zdGFsbCAmIGJ1aWxkICYgcmVzdGFydFwiLCAvLyBtb2RpZmllcuyZgOydmCDsobDtlaksIOq3uOumrOqzoCDrkZAg6rCc7J2YIGNob3Jk66W8IOyCrOyaqe2VoCDsiJgg7J6I7J2M7J2EIOuztOydtOq4sCDsnITtlZwg7YWM7Iqk7Yq47J6F64uI64ukLlxuICAgICAgZW50cnlQb2ludCwgLy8g66eI7KeA66eJ7Jy866GcIOyLpOygnCDsi6TtlontlaAg7Iqk7YGs66a97Yq47J2YIOqyveuhnOulvCDrhJjqsqjspI3ri4jri6QuXG4gICAgXSxcbiAgICB7XG4gICAgICBjd2Q6IGFwaVJvb3QsXG4gICAgICBzdGRpbzogXCJpbmhlcml0XCIsXG4gICAgICBlbnY6IHtcbiAgICAgICAgLi4ucHJvY2Vzcy5lbnYsXG4gICAgICAgIE5PREVfRU5WOiBwcm9jZXNzLmVudi5OT0RFX0VOViA/PyBcImRldmVsb3BtZW50XCIsXG4gICAgICAgIEhPVDogXCJ5ZXNcIiwgLy8g7JaY6rCAIOyeiOyWtOyVvCBITVLsnbQg7Zmc7ISx7ZmU65Cp64uI64ukLlxuICAgICAgICBBUElfUk9PVF9QQVRIOiBhcGlSb290LCAvLyDsnbQg6rK966Gc6rCAIGhtci1ob29r7J2YIOujqO2KuCDrlJTroInthqDrpqzqsIAg65Cp64uI64ukLlxuICAgICAgICAuLi5vcHRpb25zPy5leHRyYUVudixcbiAgICAgIH0sXG4gICAgfSxcbiAgKTtcblxuICAvLyDsooXro4wg7LKY66asXG4gIGNvbnN0IGNsZWFudXAgPSAoKSA9PiB7XG4gICAgY29uc29sZS5sb2coY2hhbGsueWVsbG93KFwiXFxuXFxu8J+RiyBTaHV0dGluZyBkb3duLi4uXCIpKTtcbiAgICBzZXJ2ZXJQcm9jZXNzLmtpbGwoXCJTSUdURVJNXCIpO1xuICAgIHByb2Nlc3MuZXhpdCgwKTtcbiAgfTtcblxuICBwcm9jZXNzLm9uKFwiU0lHSU5UXCIsIGNsZWFudXApO1xuICBwcm9jZXNzLm9uKFwiU0lHVEVSTVwiLCBjbGVhbnVwKTtcblxuICBzZXJ2ZXJQcm9jZXNzLm9uKFwiZXhpdFwiLCAoY29kZSkgPT4ge1xuICAgIGlmIChjb2RlICE9PSAwKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGNoYWxrLnJlZChgU2VydmVyIGV4aXRlZCB3aXRoIGNvZGUgJHtjb2RlfWApKTtcbiAgICAgIHByb2Nlc3MuZXhpdChjb2RlIHx8IDEpO1xuICAgIH1cbiAgfSk7XG59XG5cbi8qKlxuICogcG5wbSBkZXYgLyBwbnBtIGRldiBhbGwg7ZWY66m0IOyLpO2WieuQmOuKlCDtlajsiJjsnoXri4jri6QuXG4gKiDtlITroZzsoJ3tirjsl5Ag64yA7ZW0IEhNUiDsp4Dsm5DtlZjripQg6rCc67CcIOyEnOuyhOulvCDrnYTsm4zspI3ri4jri6QuXG4gKlxuICogU29uYW11LmluaXQg7JeG7J20IO2YuOy2nOuQoCDqsoPsnYQg7IOB7KCV7ZWY7JesIOq1rO2YhOuQmOyXiOyKteuLiOuLpC5cbiAqL1xuZnVuY3Rpb24gZGV2X2FsbCgpIHtcbiAgY29uc3QgcmVxdWlyZSA9IGNyZWF0ZVJlcXVpcmUoaW1wb3J0Lm1ldGEudXJsKTtcbiAgY29uc3QgeyB2ZXJzaW9uIH0gPSByZXF1aXJlKFwiLi4vLi4vcGFja2FnZS5qc29uXCIpO1xuICBjb25zb2xlLmxvZyhg8J+MsiBTb25hbXUgdiR7dmVyc2lvbn1cXG5gKTtcbiAgc3Bhd25BcGlEZXZTZXJ2ZXIoKTtcbn1cblxuLyoqXG4gKiBwbnBtIGRldiBhcGkg7ZWY66m0IOyLpO2WieuQmOuKlCDtlajsiJjsnoXri4jri6QuXG4gKiBBUEkg7KCE7JqpIOqwnOuwnCDshJzrsoTrpbwg652E7JuB64uI64ukLlxuICogZGV2X2FsbOqzvCDqsbDsnZgg64+Z7J287ZWY65CYLCDthrXtlakg7Ju5IOyEnOuyhOulvCDruYTtmZzshLHtmZTtlanri4jri6QuXG4gKlxuICogU29uYW11LmluaXQg7JeG7J20IO2YuOy2nOuQoCDqsoPsnYQg7IOB7KCV7ZWY7JesIOq1rO2YhOuQmOyXiOyKteuLiOuLpC5cbiAqL1xuZnVuY3Rpb24gZGV2X2FwaSgpIHtcbiAgY29uc29sZS5sb2coY2hhbGsueWVsbG93LmJvbGQoXCJTdGFydGluZyBTb25hbXUgQVBJLW9ubHkgZGV2IHNlcnZlci4uLlxcblwiKSk7XG4gIHNwYXduQXBpRGV2U2VydmVyKHtcbiAgICBleHRyYUVudjogeyBTT05BTVVfRElTQUJMRV9JTlRFR1JBVEVEX1dFQjogXCJ5ZXNcIiB9LFxuICB9KTtcbn1cblxuLyoqXG4gKiBwbnBtIGRldiB3ZWIg7ZWY66m0IOyLpO2WieuQmOuKlCDtlajsiJjsnoXri4jri6QuXG4gKiBWaXRlIOqwnOuwnCDshJzrsoTrpbwg64uo64+F7Jy866GcIOyLpO2Wie2VqeuLiOuLpC5cbiAqIC0tIOuSpOydmCDsnbjsnpDripQgVml0ZeyXkCDqt7jrjIDroZwg7KCE64us65Cp64uI64ukLlxuICpcbiAqIFNvbmFtdS5pbml0IOyXhuydtCDtmLjstpzrkKAg6rKD7J2EIOyDgeygle2VmOyXrCDqtaztmITrkJjsl4jsirXri4jri6QuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGRldl93ZWIoKSB7XG4gIGNvbnN0IGFwcFJvb3QgPSBmaW5kQXBwUm9vdFBhdGgoKTtcbiAgY29uc3Qgd2ViUGF0aCA9IHBhdGguam9pbihhcHBSb290LCBcIndlYlwiKTtcblxuICBpZiAoIShhd2FpdCBleGlzdHMod2ViUGF0aCkpKSB7XG4gICAgY29uc29sZS5lcnJvcihgd2ViIOuUlOugie2GoOumrOulvCDssL7snYQg7IiYIOyXhuyKteuLiOuLpDogJHt3ZWJQYXRofWApO1xuICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgfVxuXG4gIC8vIC0tIOuSpOydmCDsnbjsnpAg7LaU7LacXG4gIGNvbnN0IGRvdWJsZURhc2hJbmRleCA9IHByb2Nlc3MuYXJndi5pbmRleE9mKFwiLS1cIik7XG4gIGNvbnN0IHBhc3N0aHJvdWdoQXJncyA9IGRvdWJsZURhc2hJbmRleCAhPT0gLTEgPyBwcm9jZXNzLmFyZ3Yuc2xpY2UoZG91YmxlRGFzaEluZGV4ICsgMSkgOiBbXTtcblxuICBjb25zdCB2aXRlQXJncyA9IFtcImV4ZWNcIiwgXCJ2aXRlXCIsIC4uLnBhc3N0aHJvdWdoQXJnc107XG5cbiAgY29uc29sZS5sb2coY2hhbGsueWVsbG93LmJvbGQoXCJTdGFydGluZyBWaXRlIGRldiBzZXJ2ZXIuLi5cXG5cIikpO1xuXG4gIGNvbnN0IHZpdGVQcm9jZXNzID0gc3Bhd24oXCJwbnBtXCIsIHZpdGVBcmdzLCB7XG4gICAgY3dkOiB3ZWJQYXRoLFxuICAgIHN0ZGlvOiBcImluaGVyaXRcIixcbiAgfSk7XG5cbiAgdml0ZVByb2Nlc3Mub24oXCJleGl0XCIsIChjb2RlKSA9PiB7XG4gICAgcHJvY2Vzcy5leGl0KGNvZGUgPz8gMCk7XG4gIH0pO1xuXG4gIC8vIFNJR0lOVC9TSUdURVJNIOyLnCBWaXRlIO2UhOuhnOyEuOyKpOulvCBncmFjZWZ1bGx5IOyiheujjO2VqeuLiOuLpC5cbiAgZm9yIChjb25zdCBzaWduYWwgb2YgW1wiU0lHSU5UXCIsIFwiU0lHVEVSTVwiXSBhcyBjb25zdCkge1xuICAgIHByb2Nlc3Mub24oc2lnbmFsLCAoKSA9PiB7XG4gICAgICB2aXRlUHJvY2Vzcy5raWxsKHNpZ25hbCk7XG4gICAgfSk7XG4gIH1cbn1cblxuLyoqXG4gKiBBUEkg67mM65OcIOyEpOyglSDtjIzsnbwg6rK966Gc66W8IOqysOygle2VqeuLiOuLpC5cbiAqIO2UhOuhnOygne2KuCDro6jtirjsl5AgYHRzZG93bi5jb25maWcudHNg6rCAIOyeiOycvOuptCDqt7jqsoPsnYQsIOyXhuycvOuptCBzb25hbXUg6riw67O4IOyEpOygleydhCDsgqzsmqntlanri4jri6QuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHJlc29sdmVBcGlCdWlsZENvbmZpZ1BhdGgoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgbG9jYWxDb25maWdQYXRoID0gcGF0aC5qb2luKHByb2Nlc3MuY3dkKCksIFwidHNkb3duLmNvbmZpZy50c1wiKTtcblxuICB0cnkge1xuICAgIGlmIChhd2FpdCBleGlzdHMobG9jYWxDb25maWdQYXRoKSkge1xuICAgICAgY29uc29sZS5sb2coY2hhbGsuZGltKFwiVXNpbmcgdHNkb3duLmNvbmZpZy50cyBmcm9tIHByb2plY3Qgcm9vdC4uLlwiKSk7XG4gICAgICByZXR1cm4gbG9jYWxDb25maWdQYXRoO1xuICAgIH1cblxuICAgIGNvbnNvbGUubG9nKGNoYWxrLmRpbShcIlVzaW5nIGRlZmF1bHQgdHNkb3duIEFQSSBjb25maWcgZnJvbSBzb25hbXUgcGFja2FnZS4uLlwiKSk7XG4gICAgcmV0dXJuIHBhdGguam9pbihpbXBvcnQubWV0YS5kaXJuYW1lLCBcIi4uXCIsIFwiLi5cIiwgXCJ0c2Rvd24uYXBpLmNvbmZpZy50c1wiKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBjb25zb2xlLmVycm9yKGNoYWxrLnJlZChcIlNldHRpbmcgdXAgQVBJIGJ1aWxkIGNvbmZpZyBmYWlsZWQuXCIpLCBlcnJvcik7XG4gICAgcHJvY2Vzcy5leGl0KDEpO1xuICB9XG59XG5cbi8qKlxuICogc29uYW11IGJ1aWxkIC8gc29uYW11IGJ1aWxkIGFsbCDtlZjrqbQg7Iuk7ZaJ65CY64qUIO2VqOyImOyeheuLiOuLpC5cbiAqIGJ1aWxkX2FwaSArIGJ1aWxkX3dlYuydmCDtlanshLHsnoXri4jri6QuIFdlYiDrlJTroInthqDrpqzqsIAg7JeG7Jy866m0IFdlYiDruYzrk5zrpbwg7Iqk7YK17ZWp64uI64ukLlxuICovXG5hc3luYyBmdW5jdGlvbiBidWlsZF9hbGwoKSB7XG4gIGF3YWl0IGJ1aWxkX2FwaSgpO1xuICBhd2FpdCBidWlsZF93ZWIoeyBza2lwSWZNaXNzaW5nOiB0cnVlIH0pO1xufVxuXG4vKipcbiAqIHBucG0gYnVpbGQgYXBpIO2VmOuptCDsi6TtlonrkJjripQg7ZWo7IiY7J6F64uI64ukLlxuICogQVBJIO2UhOuhnOygne2KuOunjCDruYzrk5ztlanri4jri6QuXG4gKlxuICogU29uYW11LmluaXQg7JeG7J20IO2YuOy2nOuQoCDqsoPsnYQg7IOB7KCV7ZWY7JesIOq1rO2YhOuQmOyXiOyKteuLiOuLpC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gYnVpbGRfYXBpKCkge1xuICBjb25zdCBhcHBSb290ID0gZmluZEFwcFJvb3RQYXRoKCk7XG4gIGNvbnN0IGNvbmZpZ0ZpbGVQYXRoID0gYXdhaXQgcmVzb2x2ZUFwaUJ1aWxkQ29uZmlnUGF0aCgpO1xuXG4gIGNvbnN0IGFwaVN0YXJ0ZWRBdCA9IERhdGUubm93KCk7XG4gIHRyeSB7XG4gICAgZm9yIChjb25zdCBhcnRpZmFjdCBvZiBBUElfQVJUSUZBQ1RTKSB7XG4gICAgICBjb25zdCBjd2QgPSBwYXRoLmpvaW4oYXBwUm9vdCwgYXJ0aWZhY3QucHJvamVjdFBhdGgpO1xuICAgICAgcHJpbnRUYXNrSGVhZGVyKGFydGlmYWN0Lm5hbWUsIGFydGlmYWN0LmRlc2NyaXB0aW9uLCBjd2QpO1xuXG4gICAgICBhd2FpdCBydW5CdWlsZFN0ZXBzKGFydGlmYWN0LCB7IGN3ZCwgYnVpbGRDb21tYW5kQXJnczogeyBjb25maWdGaWxlUGF0aCB9IH0pO1xuICAgIH1cbiAgICBwcmludEJ1aWxkU3VtbWFyeShcIkFQSVwiLCB0cnVlLCBEYXRlLm5vdygpIC0gYXBpU3RhcnRlZEF0KTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHByaW50QnVpbGRTdW1tYXJ5KFwiQVBJXCIsIGZhbHNlLCBEYXRlLm5vdygpIC0gYXBpU3RhcnRlZEF0KTtcbiAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgfVxufVxuXG4vKipcbiAqIHBucG0gYnVpbGQgd2ViIO2VmOuptCDsi6TtlonrkJjripQg7ZWo7IiY7J6F64uI64ukLlxuICogV2ViIO2UhOuhnOygne2KuOunjCDruYzrk5ztlanri4jri6QuXG4gKlxuICogU29uYW11LmluaXQg7JeG7J20IO2YuOy2nOuQoCDqsoPsnYQg7IOB7KCV7ZWY7JesIOq1rO2YhOuQmOyXiOyKteuLiOuLpC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gYnVpbGRfd2ViKHsgc2tpcElmTWlzc2luZyA9IGZhbHNlIH0gPSB7fSkge1xuICBjb25zdCBhcHBSb290ID0gZmluZEFwcFJvb3RQYXRoKCk7XG4gIGNvbnN0IHdlYlBhdGggPSBwYXRoLmpvaW4oYXBwUm9vdCwgXCJ3ZWJcIik7XG5cbiAgaWYgKCEoYXdhaXQgZXhpc3RzKHdlYlBhdGgpKSkge1xuICAgIGlmIChza2lwSWZNaXNzaW5nKSB7XG4gICAgICBjb25zb2xlLmxvZyhjaGFsay5ncmF5KFwiV2ViIOuUlOugie2GoOumrOqwgCDsl4bsnLzrr4DroZwgV2ViIOu5jOuTnOulvCDqsbTrhIjrnIHri4jri6QuXCIpKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc29sZS5lcnJvcihgd2ViIOuUlOugie2GoOumrOulvCDssL7snYQg7IiYIOyXhuyKteuLiOuLpDogJHt3ZWJQYXRofWApO1xuICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgfVxuXG4gIGNvbnN0IHdlYlN0YXJ0ZWRBdCA9IERhdGUubm93KCk7XG4gIHRyeSB7XG4gICAgZm9yIChjb25zdCBhcnRpZmFjdCBvZiBXRUJfQVJUSUZBQ1RTKSB7XG4gICAgICBjb25zdCBjd2QgPSBwYXRoLmpvaW4oYXBwUm9vdCwgYXJ0aWZhY3QucHJvamVjdFBhdGgpO1xuICAgICAgcHJpbnRUYXNrSGVhZGVyKGFydGlmYWN0Lm5hbWUsIGFydGlmYWN0LmRlc2NyaXB0aW9uLCBjd2QpO1xuXG4gICAgICBhd2FpdCBydW5CdWlsZFN0ZXBzKGFydGlmYWN0LCB7IGN3ZCwgYnVpbGRDb21tYW5kQXJnczoge30gfSk7XG4gICAgfVxuICAgIHByaW50QnVpbGRTdW1tYXJ5KFwiV2ViXCIsIHRydWUsIERhdGUubm93KCkgLSB3ZWJTdGFydGVkQXQpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcHJpbnRCdWlsZFN1bW1hcnkoXCJXZWJcIiwgZmFsc2UsIERhdGUubm93KCkgLSB3ZWJTdGFydGVkQXQpO1xuICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgcHJvY2Vzcy5leGl0KDEpO1xuICB9XG59XG5cbi8qKlxuICogcHJlLWJ1aWxkLCBidWlsZCwgcG9zdC1idWlsZCDri6jqs4Trpbwg7Iic7LCo7KCB7Jy866GcIOyLpO2Wie2VqeuLiOuLpC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gcnVuQnVpbGRTdGVwczxUPihcbiAgYXJ0aWZhY3Q6IEJ1aWxkQXJ0aWZhY3Q8VD4sXG4gIG9wdGlvbnM6IHsgY3dkOiBzdHJpbmc7IGJ1aWxkQ29tbWFuZEFyZ3M6IFQgfSxcbikge1xuICBjb25zdCBzdGVwcyA9IFtcbiAgICB7IG5hbWU6IFwicHJlLWJ1aWxkXCIsIGNtZDogYXJ0aWZhY3QucHJlQnVpbGRDb21tYW5kPy4oKSB9LFxuICAgIHsgbmFtZTogXCJidWlsZFwiLCBjbWQ6IGFydGlmYWN0LmJ1aWxkQ29tbWFuZChvcHRpb25zLmJ1aWxkQ29tbWFuZEFyZ3MpIH0sXG4gICAgeyBuYW1lOiBcInBvc3QtYnVpbGRcIiwgY21kOiBhcnRpZmFjdC5wb3N0QnVpbGRDb21tYW5kPy4oKSB9LFxuICBdLmZpbHRlcigoc3RlcCkgPT4gc3RlcC5jbWQpO1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgc3RlcHMubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBzdGVwID0gc3RlcHNbaV07XG4gICAgY29uc3QgaXNMYXN0ID0gaSA9PT0gc3RlcHMubGVuZ3RoIC0gMTtcblxuICAgIHRyeSB7XG4gICAgICBhc3NlcnQoc3RlcC5jbWQpO1xuICAgICAgcHJpbnRUYXNrU3RhcnQoc3RlcC5uYW1lLCBzdGVwLmNtZCwgaXNMYXN0KTtcbiAgICAgIGF3YWl0IGV4ZWNXaXRoTGluZVByZWZpeChzdGVwLmNtZCwgeyBjd2Q6IG9wdGlvbnMuY3dkIH0pO1xuICAgICAgcHJpbnRUYXNrU3VjY2VzcyhzdGVwLm5hbWUsIGlzTGFzdCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcHJpbnRUYXNrRmFpbGVkKHN0ZXAubmFtZSwgaXNMYXN0KTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgJHtzdGVwLm5hbWV9IGZhaWxlZGAsIHsgY2F1c2U6IGUgfSk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogcG5wbSBzdGFydCDtlZjrqbQg7Iuk7ZaJ65CY64qUIO2VqOyImOyeheuLiOuLpC5cbiAqIOu5jOuTnOuQnCDtlITroZzsoJ3tirjrpbwg7Iuk7ZaJ7ZWp64uI64ukLlxuICpcbiAqIOu5jOuTnOuQnCDqsrDqs7zrrLwoZGlzdCDrlJTroInthqDrpqzsnZggaW5kZXguanMg7JeU7Yq466as7Y+s7J247Yq4KeydtCDsl4bri6TrqbQg7Iuk7ZaJ7J2EIOykkeuLqO2VqeuLiOuLpC5cbiAqIOyGjOyKpOuntSDsp4Dsm5Dqs7wgZG90ZW52IOyngOybkOydhCDtj6ztlajtlZjsl6wg7Iuk7ZaJ7ZWp64uI64ukLlxuICpcbiAqIFNvbmFtdS5pbml0IOyXhuydtCDtmLjstpzrkKAg6rKD7J2EIOyDgeygle2VmOyXrCDqtaztmITrkJjsl4jsirXri4jri6QuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHN0YXJ0KCkge1xuICBjb25zdCByZXF1aXJlID0gY3JlYXRlUmVxdWlyZShpbXBvcnQubWV0YS51cmwpO1xuICBjb25zdCB7IHZlcnNpb24gfSA9IHJlcXVpcmUoXCIuLi8uLi9wYWNrYWdlLmpzb25cIik7XG4gIGNvbnNvbGUubG9nKGDwn4yyIFNvbmFtdSB2JHt2ZXJzaW9ufVxcbmApO1xuXG4gIGNvbnN0IGFwaVJvb3QgPSBmaW5kQXBpUm9vdFBhdGgoKTtcbiAgY29uc3QgZW50cnlQb2ludCA9IFwiZGlzdC9pbmRleC5qc1wiO1xuXG4gIGlmICghKGF3YWl0IGV4aXN0cyhlbnRyeVBvaW50KSkpIHtcbiAgICBjb25zb2xlLmxvZyhjaGFsay5yZWQoYCR7ZW50cnlQb2ludH0gbm90IGZvdW5kLiBQbGVhc2UgYnVpbGQgeW91ciBwcm9qZWN0IGZpcnN0LmApKTtcbiAgICBjb25zb2xlLmxvZyhjaGFsay5ibHVlKFwiUnVuOiBwbnBtIHNvbmFtdSBidWlsZFwiKSk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgeyBzcGF3biB9ID0gYXdhaXQgaW1wb3J0KFwiY2hpbGRfcHJvY2Vzc1wiKTtcbiAgY29uc3Qgc2VydmVyUHJvY2VzcyA9IHNwYXduKFxuICAgIHByb2Nlc3MuZXhlY1BhdGgsXG4gICAgW1wiLS1lbmFibGUtc291cmNlLW1hcHNcIiwgXCItclwiLCBcImRvdGVudi9jb25maWdcIiwgZW50cnlQb2ludF0sXG4gICAge1xuICAgICAgY3dkOiBhcGlSb290LFxuICAgICAgc3RkaW86IFwiaW5oZXJpdFwiLFxuICAgIH0sXG4gICk7XG5cbiAgcHJvY2Vzcy5vbihcIlNJR0lOVFwiLCAoKSA9PiB7XG4gICAgc2VydmVyUHJvY2Vzcy5raWxsKFwiU0lHVEVSTVwiKTtcbiAgICBwcm9jZXNzLmV4aXQoMCk7XG4gIH0pO1xufVxuXG5hc3luYyBmdW5jdGlvbiBzZXR1cE1pZ3JhdG9yKCkge1xuICAvLyBtaWdyYXRvclxuICBtaWdyYXRvciA9IG5ldyBNaWdyYXRvcigpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBzZXR1cEZpeHR1cmVNYW5hZ2VyKCkge1xuICBGaXh0dXJlTWFuYWdlci5pbml0KCk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIG1pZ3JhdGVfYXBwbHkodGFyZ2V0czogKGtleW9mIFNvbmFtdURCQ29uZmlnKVtdKSB7XG4gIGF3YWl0IHNldHVwTWlncmF0b3IoKTtcbiAgYXdhaXQgbWlncmF0b3IuYXBwbHkodGFyZ2V0cyk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIG1pZ3JhdGVfcnVuKCkge1xuICBhd2FpdCBzZXR1cE1pZ3JhdG9yKCk7XG4gIGF3YWl0IG1pZ3JhdG9yLmFwcGx5KGdldE1pZ3JhdGVSdW5UYXJnZXRzKCkpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBtaWdyYXRlX2dlbmVyYXRlKCkge1xuICBhd2FpdCBzZXR1cE1pZ3JhdG9yKCk7XG5cbiAgY29uc3QgeyBjb25ucyB9ID0gYXdhaXQgbWlncmF0b3IuZ2V0U3RhdHVzKCk7XG4gIGNvbnN0IGhhc1N0YXR1czAgPSBjb25ucy5zb21lKChjb25uKSA9PiBjb25uLnN0YXR1cyA9PT0gMCk7XG4gIGlmICghaGFzU3RhdHVzMCkge1xuICAgIGNvbnNvbGUubG9nKFxuICAgICAgY2hhbGsucmVkKFxuICAgICAgICBcIuuniOydtOq3uOugiOydtOyFmCDtjIzsnbzsnYQg7IOd7ISx7ZWY66Ck66m0IOq4sOyhtCDrp4jsnbTqt7jroIjsnbTshZjsnbQg7LWc7IaMIO2VmOuCmOydmCBEQuyXkCDrqqjrkZAg7KCB7Jqp65CY7Ja0IOyeiOyWtOyVvCDtlanri4jri6QuXCIsXG4gICAgICApLFxuICAgICk7XG4gICAgZm9yIChjb25zdCBjb25uIG9mIGNvbm5zKSB7XG4gICAgICBpZiAoY29ubi5wZW5kaW5nLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY29uc29sZS5sb2coY2hhbGsueWVsbG93KGAgICR7Y29ubi5uYW1lfTogcGVuZGluZyAke2Nvbm4ucGVuZGluZy5sZW5ndGh96rCcYCkpO1xuICAgICAgfVxuICAgIH1cbiAgICBwcm9jZXNzLmV4aXQoMSk7XG4gIH1cblxuICBjb25zdCBjb3VudCA9IGF3YWl0IG1pZ3JhdG9yLmdlbmVyYXRlUHJlcGFyZWRDb2RlcygpO1xuICBpZiAoY291bnQgPiAwKSB7XG4gICAgY29uc29sZS5sb2coY2hhbGsuZ3JlZW4oYCR7Y291bnR96rCc7J2YIOuniOydtOq3uOugiOydtOyFmCDtjIzsnbzsnbQg7IOd7ISx65CY7JeI7Iq164uI64ukLmApKTtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBtaWdyYXRlX3N0YXR1cygpIHtcbiAgYXdhaXQgc2V0dXBNaWdyYXRvcigpO1xuXG4gIGNvbnN0IHN0YXR1cyA9IGF3YWl0IG1pZ3JhdG9yLmdldFN0YXR1cygpO1xuICAvLyBzdGF0dXM7XG4gIGNvbnNvbGUubG9nKHN0YXR1cyk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGZpeHR1cmVfaW5pdCgpIHtcbiAgY29uc3Qgc3JjQ29uZmlnID0gU29uYW11LmRiQ29uZmlnW2dldFNvbmFtdUVudmlyb25tZW50KCldO1xuICBjb25zdCB0YXJnZXRzID0gW1xuICAgIHtcbiAgICAgIGxhYmVsOiBcIihSRU1PVEUpIEZpeHR1cmUgREJcIixcbiAgICAgIGNvbmZpZzogU29uYW11LmRiQ29uZmlnLmZpeHR1cmUsXG4gICAgfSxcbiAgICB7XG4gICAgICBsYWJlbDogXCIoTE9DQUwpIFRlc3RpbmcgREJcIixcbiAgICAgIGNvbmZpZzogU29uYW11LmRiQ29uZmlnLnRlc3QsXG4gICAgICB0b1NraXA6ICgoKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlbW90ZUNvbm4gPSBTb25hbXUuZGJDb25maWcuZml4dHVyZS5jb25uZWN0aW9uIGFzIEtuZXguQ29ubmVjdGlvbkNvbmZpZztcbiAgICAgICAgY29uc3QgbG9jYWxDb25uID0gU29uYW11LmRiQ29uZmlnLnRlc3QuY29ubmVjdGlvbiBhcyBLbmV4LkNvbm5lY3Rpb25Db25maWc7XG4gICAgICAgIHJldHVybiByZW1vdGVDb25uLmhvc3QgPT09IGxvY2FsQ29ubi5ob3N0ICYmIHJlbW90ZUNvbm4uZGF0YWJhc2UgPT09IGxvY2FsQ29ubi5kYXRhYmFzZTtcbiAgICAgIH0pKCksXG4gICAgfSxcbiAgXSBhcyB7XG4gICAgbGFiZWw6IHN0cmluZztcbiAgICBjb25maWc6IEtuZXguQ29uZmlnO1xuICAgIHRvU2tpcD86IGJvb2xlYW47XG4gIH1bXTtcblxuICAvLyAxLiDquLDspIBEQiDsiqTtgqTrp4jrpbwg642k7ZSEXG4gIGNvbnNvbGUubG9nKFwiRFVNUC4uLlwiKTtcbiAgY29uc3QgZHVtcEZpbGVuYW1lID0gYC90bXAvc29uYW11LWZpeHR1cmUtaW5pdC0ke0RhdGUubm93KCl9LnNxbGA7XG4gIGNvbnN0IHNyY0Nvbm4gPSBzcmNDb25maWcuY29ubmVjdGlvbiBhcyBLbmV4LkNvbm5lY3Rpb25Db25maWc7XG4gIGNvbnN0IG1pZ3JhdGlvbnNEdW1wID0gYC90bXAvc29uYW11LWZpeHR1cmUtaW5pdC1taWdyYXRpb25zLSR7RGF0ZS5ub3coKX0uc3FsYDtcbiAgZXhlY1N5bmMoXG4gICAgYG15c3FsZHVtcCAtaCR7c3JjQ29ubi5ob3N0fSAtdSR7c3JjQ29ubi51c2VyfSAtcCR7c3JjQ29ubi5wYXNzd29yZH0gLS1zaW5nbGUtdHJhbnNhY3Rpb24gLWQgLS1uby1jcmVhdGUtZGIgLS10cmlnZ2VycyAke3NyY0Nvbm4uZGF0YWJhc2V9ID4gJHtkdW1wRmlsZW5hbWV9YCxcbiAgKTtcbiAgY29uc3QgX2RiID0ga25leChzcmNDb25maWcpO1xuICBjb25zdCBbW21pZ3JhdGlvbnNdXSA9IGF3YWl0IF9kYi5yYXcoXG4gICAgXCJTRUxFQ1QgQ09VTlQoKikgYXMgY291bnQgRlJPTSBpbmZvcm1hdGlvbl9zY2hlbWEudGFibGVzIFdIRVJFIHRhYmxlX3NjaGVtYSA9ID8gQU5EIHRhYmxlX25hbWUgPSAna25leF9taWdyYXRpb25zJ1wiLFxuICAgIFtzcmNDb25uLmRhdGFiYXNlXSxcbiAgKTtcbiAgaWYgKG1pZ3JhdGlvbnMuY291bnQgPiAwKSB7XG4gICAgZXhlY1N5bmMoXG4gICAgICBgbXlzcWxkdW1wIC1oJHtzcmNDb25uLmhvc3R9IC11JHtzcmNDb25uLnVzZXJ9IC1wJHtzcmNDb25uLnBhc3N3b3JkfSAtLXNpbmdsZS10cmFuc2FjdGlvbiAtLW5vLWNyZWF0ZS1kYiAtLXRyaWdnZXJzICR7c3JjQ29ubi5kYXRhYmFzZX0ga25leF9taWdyYXRpb25zIGtuZXhfbWlncmF0aW9uc19sb2NrID4gJHttaWdyYXRpb25zRHVtcH1gLFxuICAgICk7XG4gIH1cblxuICAvLyAyLiDrjIDsg4FEQiDqsIHqsIHsl5Ag64yA7ZWY7JesIOyhtOyerOyXrOu2gCDtmZXsnbgg7ZuEIOu2k+q4sFxuICBmb3IgKGNvbnN0IHsgbGFiZWwsIGNvbmZpZywgdG9Ta2lwIH0gb2YgdGFyZ2V0cykge1xuICAgIGNvbnN0IGNvbm4gPSBjb25maWcuY29ubmVjdGlvbiBhcyBLbmV4LkNvbm5lY3Rpb25Db25maWc7XG5cbiAgICBpZiAodG9Ta2lwID09PSB0cnVlKSB7XG4gICAgICBjb25zb2xlLmxvZyhjaGFsay5yZWQoYCR7bGFiZWx9OiBTa2lwcGVkIWApKTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGNvbnN0IGRiID0ga25leCh7XG4gICAgICAuLi5jb25maWcsXG4gICAgICBjb25uZWN0aW9uOiB7XG4gICAgICAgIC4uLigoY29uZmlnLmNvbm5lY3Rpb24gPz8ge30pIGFzIEtuZXguQ29ubmVjdGlvbkNvbmZpZyksXG4gICAgICAgIGRhdGFiYXNlOiB1bmRlZmluZWQsXG4gICAgICB9LFxuICAgIH0pO1xuICAgIGNvbnN0IFtbcm93XV0gPSBhd2FpdCBkYi5yYXcoYFNIT1cgREFUQUJBU0VTIExJS0UgXCIke2Nvbm4uZGF0YWJhc2V9XCJgKTtcbiAgICBpZiAocm93KSB7XG4gICAgICBjb25zb2xlLmxvZyhjaGFsay55ZWxsb3coYCR7bGFiZWx9OiBEYXRhYmFzZSBcIiR7Y29ubi5kYXRhYmFzZX1cIiBBbHJlYWR5IGV4aXN0c2ApKTtcbiAgICAgIGF3YWl0IGRiLmRlc3Ryb3koKTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGNvbnNvbGUubG9nKGBTWU5DIHRvICR7bGFiZWx9Li4uYCk7XG4gICAgY29uc3QgbXlzcWxDbWQgPSBgbXlzcWwgLWgke2Nvbm4uaG9zdH0gLXUke2Nvbm4udXNlcn0gLXAke2Nvbm4ucGFzc3dvcmR9YDtcbiAgICBleGVjU3luYyhgJHtteXNxbENtZH0gLWUgJ0RST1AgREFUQUJBU0UgSUYgRVhJU1RTIFxcYCR7Y29ubi5kYXRhYmFzZX1cXGAnYCk7XG4gICAgZXhlY1N5bmMoYCR7bXlzcWxDbWR9IC1lICdDUkVBVEUgREFUQUJBU0UgXFxgJHtjb25uLmRhdGFiYXNlfVxcYCdgKTtcbiAgICBleGVjU3luYyhgJHtteXNxbENtZH0gJHtjb25uLmRhdGFiYXNlfSA8ICR7ZHVtcEZpbGVuYW1lfWApO1xuICAgIGlmIChhd2FpdCBleGlzdHMobWlncmF0aW9uc0R1bXApKSB7XG4gICAgICBleGVjU3luYyhgJHtteXNxbENtZH0gJHtjb25uLmRhdGFiYXNlfSA8ICR7bWlncmF0aW9uc0R1bXB9YCk7XG4gICAgfVxuXG4gICAgYXdhaXQgZGIuZGVzdHJveSgpO1xuICB9XG5cbiAgYXdhaXQgX2RiLmRlc3Ryb3koKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZml4dHVyZV9pbXBvcnQoZW50aXR5SWQ6IHN0cmluZywgcmVjb3JkSWRzOiBudW1iZXJbXSkge1xuICBhd2FpdCBzZXR1cEZpeHR1cmVNYW5hZ2VyKCk7XG5cbiAgYXdhaXQgRml4dHVyZU1hbmFnZXIuaW1wb3J0Rml4dHVyZShlbnRpdHlJZCwgcmVjb3JkSWRzKTtcbiAgYXdhaXQgRml4dHVyZU1hbmFnZXIuc3luYygpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBmaXh0dXJlX3N5bmMoKSB7XG4gIGF3YWl0IHNldHVwRml4dHVyZU1hbmFnZXIoKTtcblxuICBhd2FpdCBGaXh0dXJlTWFuYWdlci5zeW5jKCk7XG59XG5cbi8qKlxuICogZml4dHVyZSBnZW4g66qF66C57Ja0XG4gKiDsmLXshZjsnYQgcHJvY2Vzcy5hcmd27JeQ7IScIO2MjOyLsVxuICovXG5hc3luYyBmdW5jdGlvbiBmaXh0dXJlX2dlbigpIHtcbiAgY29uc3Qgb3B0aW9ucyA9IHBhcnNlT3B0aW9ucyhwcm9jZXNzLmFyZ3YpO1xuICBhd2FpdCBmaXh0dXJlR2VuQ29tbWFuZChvcHRpb25zKTtcbn1cblxuLyoqXG4gKiBmaXh0dXJlIGZldGNoIOuqheugueyWtFxuICog7Ji17IWY7J2EIHByb2Nlc3MuYXJnduyXkOyEnCDtjIzsi7FcbiAqL1xuYXN5bmMgZnVuY3Rpb24gZml4dHVyZV9mZXRjaCgpIHtcbiAgY29uc3Qgb3B0aW9ucyA9IHBhcnNlT3B0aW9ucyhwcm9jZXNzLmFyZ3YpO1xuICBhd2FpdCBmaXh0dXJlRmV0Y2hDb21tYW5kKG9wdGlvbnMpO1xufVxuXG4vKipcbiAqIGZpeHR1cmUgZXhwbG9yZSDrqoXroLnslrRcbiAqIOyYteyFmOydhCBwcm9jZXNzLmFyZ3bsl5DshJwg7YyM7IuxXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGZpeHR1cmVfZXhwbG9yZSgpIHtcbiAgY29uc3Qgb3B0aW9ucyA9IHBhcnNlT3B0aW9ucyhwcm9jZXNzLmFyZ3YpO1xuICBhd2FpdCBmaXh0dXJlRXhwbG9yZUNvbW1hbmQob3B0aW9ucyk7XG59XG5cbi8qKlxuICog6rCE64uo7ZWcIOyYteyFmCDtjIzshJxcbiAqL1xuZnVuY3Rpb24gcGFyc2VPcHRpb25zKFxuICBhcmd2OiBzdHJpbmdbXSxcbik6IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IGJvb2xlYW4gfCBzdHJpbmdbXT4gJiB7IF86IHN0cmluZ1tdIH0ge1xuICBjb25zdCBvcHRpb25zOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBib29sZWFuIHwgc3RyaW5nW10+ICYgeyBfOiBzdHJpbmdbXSB9ID0geyBfOiBbXSB9O1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYXJndi5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IGFyZyA9IGFyZ3ZbaV07XG5cbiAgICBpZiAoYXJnLnN0YXJ0c1dpdGgoXCItLVwiKSkge1xuICAgICAgY29uc3Qga2V5ID0gYXJnLnNsaWNlKDIpO1xuXG4gICAgICBpZiAoa2V5LmluY2x1ZGVzKFwiPVwiKSkge1xuICAgICAgICBjb25zdCBbaywgdl0gPSBrZXkuc3BsaXQoXCI9XCIpO1xuICAgICAgICBvcHRpb25zW2tdID0gdjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IG5leHQgPSBhcmd2W2kgKyAxXTtcbiAgICAgICAgaWYgKG5leHQgJiYgIW5leHQuc3RhcnRzV2l0aChcIi0tXCIpKSB7XG4gICAgICAgICAgb3B0aW9uc1trZXldID0gbmV4dDtcbiAgICAgICAgICBpKys7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb3B0aW9uc1trZXldID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoYXJnLnN0YXJ0c1dpdGgoXCItXCIpKSB7XG4gICAgICBjb25zdCBrZXkgPSBhcmcuc2xpY2UoMSk7XG4gICAgICBjb25zdCBuZXh0ID0gYXJndltpICsgMV07XG5cbiAgICAgIGlmIChuZXh0ICYmICFuZXh0LnN0YXJ0c1dpdGgoXCItXCIpKSB7XG4gICAgICAgIG9wdGlvbnNba2V5XSA9IG5leHQ7XG4gICAgICAgIGkrKztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9wdGlvbnNba2V5XSA9IHRydWU7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIG9wdGlvbnMuXy5wdXNoKGFyZyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG9wdGlvbnM7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHN0dWJfcHJhY3RpY2UobmFtZTogc3RyaW5nKSB7XG4gIGNvbnN0IHByYWN0aWNlRGlyID0gcGF0aC5qb2luKFNvbmFtdS5hcGlSb290UGF0aCwgXCJzcmNcIiwgXCJwcmFjdGljZXNcIik7XG4gIGNvbnN0IGZpbGVOYW1lcyA9IGF3YWl0IHJlYWRkaXIocHJhY3RpY2VEaXIpO1xuXG4gIGNvbnN0IG1heFNlcU5vID0gYXdhaXQgKGFzeW5jICgpID0+IHtcbiAgICBpZiAoIShhd2FpdCBleGlzdHMocHJhY3RpY2VEaXIpKSkge1xuICAgICAgYXdhaXQgbWtkaXIocHJhY3RpY2VEaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IGZpbHRlcmVkU2VxcyA9IGZpbGVOYW1lc1xuICAgICAgLmZpbHRlcigoZmlsZU5hbWUpID0+IGZpbGVOYW1lLnN0YXJ0c1dpdGgoXCJwXCIpICYmIGZpbGVOYW1lLmVuZHNXaXRoKFwiLnRzXCIpKVxuICAgICAgLm1hcCgoZmlsZU5hbWUpID0+IHtcbiAgICAgICAgY29uc3QgWywgc2VxTm9dID0gZmlsZU5hbWUubWF0Y2goL15wKFswLTldKyktLykgPz8gW1wiMFwiLCBcIjBcIl07XG4gICAgICAgIHJldHVybiBwYXJzZUludChzZXFObyk7XG4gICAgICB9KVxuICAgICAgLnRvU29ydGVkKChhLCBiKSA9PiBiIC0gYSk7XG5cbiAgICBpZiAoZmlsdGVyZWRTZXFzLmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybiBmaWx0ZXJlZFNlcXNbMF07XG4gICAgfVxuXG4gICAgcmV0dXJuIDA7XG4gIH0pKCk7XG5cbiAgY29uc3QgY3VycmVudFNlcU5vID0gbWF4U2VxTm8gKyAxO1xuICBjb25zdCBmaWxlTmFtZSA9IGBwJHtjdXJyZW50U2VxTm99LSR7bmFtZX0udHNgO1xuICBjb25zdCBkc3RQYXRoID0gcGF0aC5qb2luKHByYWN0aWNlRGlyLCBmaWxlTmFtZSk7XG5cbiAgY29uc3QgY29kZSA9IFtcbiAgICBgaW1wb3J0IHsgU29uYW11IH0gZnJvbSBcInNvbmFtdVwiO2AsXG4gICAgXCJcIixcbiAgICBgY29uc29sZS5jbGVhcigpO2AsXG4gICAgYGNvbnNvbGUubG9nKFwiJHtmaWxlTmFtZX1cIik7YCxcbiAgICBcIlwiLFxuICAgIGBTb25hbXUucnVuU2NyaXB0KGFzeW5jICgpID0+IHtgLFxuICAgIGAgLy8gVE9ET2AsXG4gICAgYH0pO2AsXG4gICAgXCJcIixcbiAgXS5qb2luKFwiXFxuXCIpO1xuICBhd2FpdCB3cml0ZUZpbGUoZHN0UGF0aCwgY29kZSk7XG5cbiAgZXhlY1N5bmMoYGNvZGUgJHtkc3RQYXRofWApO1xuXG4gIGNvbnN0IHJ1bkNvZGUgPSBgeWFybiBub2RlIC1yIGRvdGVudi9jb25maWcgLS1lbmFibGUtc291cmNlLW1hcHMgZGlzdC9wcmFjdGljZXMvJHtmaWxlTmFtZS5yZXBsYWNlKFxuICAgIFwiLnRzXCIsXG4gICAgXCIuanNcIixcbiAgKX1gO1xuICBjb25zb2xlLmxvZyhgJHtjaGFsay5ibHVlKHJ1bkNvZGUpfSBjb3BpZWQgdG8gY2xpcGJvYXJkLmApO1xuICBleGVjU3luYyhgZWNobyBcIiR7cnVuQ29kZX1cIiB8IHBiY29weWApO1xufVxuXG5hc3luYyBmdW5jdGlvbiBzdHViX2VudGl0eShlbnRpdHlJZDogc3RyaW5nKSB7XG4gIGF3YWl0IFNvbmFtdS5zeW5jZXIuY3JlYXRlRW50aXR5KHsgZW50aXR5SWQsIHRpdGxlOiBlbnRpdHlJZCB9KTtcblxuICBjb25zdCB7IGZsYWdzIH0gPSBwYXJzZUNsaU9wdGlvbnMoKTtcbiAgY29uc3QgdXNlQUkgPSBmbGFncy5oYXMoXCJhaVwiKTtcbiAgY29uc3Qgbm9Db25lcyA9IGZsYWdzLmhhcyhcIm5vLWNvbmVzXCIpO1xuXG4gIC8vIC0tbm8tY29uZXM6IGNvbmUg7IOd7ISxIOyKpO2CtVxuICBpZiAobm9Db25lcykge1xuICAgIGNvbnNvbGUubG9nKGDinJMgRW50aXR5ICcke2VudGl0eUlkfScgY3JlYXRlZCB3aXRob3V0IGNvbmVzYCk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgeyBFbnRpdHlNYW5hZ2VyIH0gPSBhd2FpdCBpbXBvcnQoXCIuLi9lbnRpdHkvZW50aXR5LW1hbmFnZXJcIik7XG4gIGNvbnN0IGVudGl0eSA9IEVudGl0eU1hbmFnZXIuZ2V0KGVudGl0eUlkKTtcbiAgaWYgKCFlbnRpdHkpIHtcbiAgICBjb25zb2xlLmVycm9yKGBFbnRpdHkgbm90IGZvdW5kOiAke2VudGl0eUlkfWApO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIC0tYWk6IExMTeycvOuhnCBjb25lIOyDneyEsVxuICBpZiAodXNlQUkpIHtcbiAgICBjb25zb2xlLmxvZyhg4pyTIEVudGl0eSAnJHtlbnRpdHlJZH0nIGNyZWF0ZWRgKTtcbiAgICBjb25zb2xlLmxvZyhg8J+MnyBHZW5lcmF0aW5nIEFJLXBvd2VyZWQgY29uZXMuLi5gKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgY29uZmlnTG9jYWxlID0gU29uYW11LmNvbmZpZy5pMThuPy5kZWZhdWx0TG9jYWxlO1xuICAgICAgY29uc3QgbG9jYWxlID1cbiAgICAgICAgY29uZmlnTG9jYWxlID09PSBcImtvXCIgfHwgY29uZmlnTG9jYWxlID09PSBcImVuXCIgfHwgY29uZmlnTG9jYWxlID09PSBcImphXCJcbiAgICAgICAgICA/IGNvbmZpZ0xvY2FsZVxuICAgICAgICAgIDogXCJrb1wiO1xuXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBlbnRpdHkuZ2VuZXJhdGVDb25lcyh7XG4gICAgICAgIHByZXNlcnZlRXhpc3Rpbmc6IGZhbHNlLFxuICAgICAgICBvbmx5RW1wdHk6IGZhbHNlLFxuICAgICAgICBsb2NhbGUsXG4gICAgICB9KTtcblxuICAgICAgY29uc29sZS5sb2coYOKchSBEb25lICgke3Jlc3VsdC50b2tlbnNVc2VkfSB0b2tlbnMpYCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yICYmIGVycm9yLm1lc3NhZ2UuaW5jbHVkZXMoXCJBTlRIUk9QSUNfQVBJX0tFWVwiKSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKGBcXG7inYwgJHtlcnJvci5tZXNzYWdlfWApO1xuICAgICAgICBjb25zb2xlLmVycm9yKGBcXG7wn5KhIFJlbW92ZSAtLWFpIGZsYWcgdG8gdXNlIHRlbXBsYXRlIGNvbmVzIGluc3RlYWRgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm47XG4gIH1cblxuICAvLyDquLDrs7g6IO2FnO2UjOumvyBjb25lIOyekOuPmSDsg53shLFcbiAgLy8gTExNIOyXhuydtCBmYWtlci1tYXBwaW5ncy50c+ulvCDtmZzsmqntlZjsl6wg6riw67O4IGNvbmUg66mU7YOA642w7J207YSw66W8IOyDneyEse2VqeuLiOuLpC5cbiAgLy8g7J2066W8IO2Gte2VtCBBTlRIUk9QSUNfQVBJX0tFWeqwgCDsl4bslrTrj4QgU29uYW1166W8IOyCrOyaqe2VoCDsiJgg7J6I7Jy866mwLFxuICAvLyDsg53shLHrkJwg7YWc7ZSM66a/IGNvbmXsnYAg64KY7KSR7JeQICdjb25lIGdlbicg66qF66C57Ja066GcIEFJ66W8IO2Gte2VtCDsl4Xqt7jroIjsnbTrk5ztlaAg7IiYIOyeiOyKteuLiOuLpC5cbiAgY29uc29sZS5sb2coYPCfjJ8gR2VuZXJhdGluZyB0ZW1wbGF0ZSBjb25lcy4uLmApO1xuICBhd2FpdCBlbnRpdHkuZ2VuZXJhdGVUZW1wbGF0ZUNvbmVzKCk7XG4gIGNvbnNvbGUubG9nKGDinJMgRW50aXR5ICcke2VudGl0eUlkfScgY3JlYXRlZCB3aXRoIHRlbXBsYXRlIGNvbmVzYCk7XG4gIGNvbnNvbGUubG9nKGDwn5KhIFRpcDogUnVuICdwbnBtIHNvbmFtdSBjb25lIGdlbiAke2VudGl0eUlkfScgdG8gaW1wcm92ZSB3aXRoIEFJYCk7XG59XG5cbi8qKlxuICogQUnrpbwg7IKs7Jqp7ZWY7JesIGVudGl0eeydmCBjb25lIOuplO2DgOuNsOydtO2EsOulvCDsg53shLHtlZjqsbDrgpgg7JeF6re466CI7J2065Oc7ZWp64uI64ukLlxuICpcbiAqIOyYteyFmDpcbiAqIC0gLS1yZWdlbmVyYXRlOiDsoITssrQg7J6s7IOd7ISxICjquLDsobQgY29uZSDrja7slrTsk7DquLApXG4gKiAtIC0tbG9jYWxlIDxrb3xlbnxqYT46IOyDneyEsSDslrjslrQg7KeA7KCVXG4gKiAtIOq4sOuzuDogb25seUVtcHR5IOuqqOuTnCAo6riw7KG0IGZpeHR1cmVIaW50IOuztOyhtClcbiAqXG4gKiBBTlRIUk9QSUNfQVBJX0tFWSDtlYTsmpQgKHNvbmFtdS5zZWNyZXQudHMg65iQ64qUIO2ZmOqyveuzgOyImClcbiAqL1xuYXN5bmMgZnVuY3Rpb24gY29uZV9nZW4oZW50aXR5SWQ6IHN0cmluZykge1xuICBjb25zdCB7IEVudGl0eU1hbmFnZXIgfSA9IGF3YWl0IGltcG9ydChcIi4uL2VudGl0eS9lbnRpdHktbWFuYWdlclwiKTtcbiAgY29uc3QgeyBmbGFncywgb3B0aW9ucyB9ID0gcGFyc2VDbGlPcHRpb25zKCk7XG5cbiAgLy8gLS1hbGwg7Ji17IWYOiDrqqjrk6AgZW50aXR5IGNvbmUg7IOd7ISxXG4gIGlmIChmbGFncy5oYXMoXCJhbGxcIikgfHwgZW50aXR5SWQgPT09IFwiYWxsXCIpIHtcbiAgICBjb25zdCBhbGxFbnRpdGllcyA9IEVudGl0eU1hbmFnZXIuZ2V0QWxsRW50aXRpZXMoKTtcbiAgICBjb25zb2xlLmxvZyhg8J+MnyBHZW5lcmF0aW5nIEFJLXBvd2VyZWQgY29uZXMgZm9yICR7YWxsRW50aXRpZXMubGVuZ3RofSBlbnRpdGllcy4uLlxcbmApO1xuXG4gICAgbGV0IHRvdGFsVG9rZW5zID0gMDtcbiAgICBjb25zdCBlcnJvcnM6IHN0cmluZ1tdID0gW107XG5cbiAgICBmb3IgKGNvbnN0IGVudGl0eSBvZiBhbGxFbnRpdGllcykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc29sZS5sb2coYFByb2Nlc3NpbmcgJHtlbnRpdHkuaWR9Li4uYCk7XG4gICAgICAgIGNvbnN0IGNvbmZpZ0xvY2FsZSA9IG9wdGlvbnMubG9jYWxlIHx8IFNvbmFtdS5jb25maWcuaTE4bj8uZGVmYXVsdExvY2FsZTtcbiAgICAgICAgY29uc3QgbG9jYWxlID1cbiAgICAgICAgICBjb25maWdMb2NhbGUgPT09IFwia29cIiB8fCBjb25maWdMb2NhbGUgPT09IFwiZW5cIiB8fCBjb25maWdMb2NhbGUgPT09IFwiamFcIlxuICAgICAgICAgICAgPyBjb25maWdMb2NhbGVcbiAgICAgICAgICAgIDogXCJrb1wiO1xuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGVudGl0eS5nZW5lcmF0ZUNvbmVzKHtcbiAgICAgICAgICBwcmVzZXJ2ZUV4aXN0aW5nOiAhZmxhZ3MuaGFzKFwicmVnZW5lcmF0ZVwiKSxcbiAgICAgICAgICBvbmx5RW1wdHk6ICFmbGFncy5oYXMoXCJyZWdlbmVyYXRlXCIpLFxuICAgICAgICAgIGxvY2FsZSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdG90YWxUb2tlbnMgKz0gcmVzdWx0LnRva2Vuc1VzZWQ7XG4gICAgICAgIGNvbnNvbGUubG9nKGAgIOKckyAke2VudGl0eS5pZH0gKCR7cmVzdWx0LnRva2Vuc1VzZWR9IHRva2VucylcXG5gKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFwiVW5rbm93biBlcnJvclwiO1xuICAgICAgICBlcnJvcnMucHVzaChgJHtlbnRpdHkuaWR9OiAke21lc3NhZ2V9YCk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYCAg4pyXICR7ZW50aXR5LmlkfTogJHttZXNzYWdlfVxcbmApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnNvbGUubG9nKGBcXG7inIUgRG9uZSEgVG90YWw6ICR7dG90YWxUb2tlbnN9IHRva2VucyB1c2VkYCk7XG4gICAgY29uc3QgZXN0aW1hdGVkQ29zdCA9ICh0b3RhbFRva2VucyAqIDkpIC8gMV8wMDBfMDAwO1xuICAgIGNvbnNvbGUubG9nKGDwn5KwIEVzdGltYXRlZCBjb3N0OiB+JCR7ZXN0aW1hdGVkQ29zdC50b0ZpeGVkKDQpfWApO1xuXG4gICAgaWYgKGVycm9ycy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGBcXG7inYwgRmFpbGVkIGVudGl0aWVzICgke2Vycm9ycy5sZW5ndGh9KTpgKTtcbiAgICAgIGZvciAoY29uc3QgZXJyIG9mIGVycm9ycykge1xuICAgICAgICBjb25zb2xlLmVycm9yKGAgIC0gJHtlcnJ9YCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIOuLqOydvCBlbnRpdHkgY29uZSDsg53shLFcbiAgY29uc3QgZW50aXR5ID0gRW50aXR5TWFuYWdlci5nZXQoZW50aXR5SWQpO1xuICBpZiAoIWVudGl0eSkge1xuICAgIGNvbnNvbGUuZXJyb3IoYEVudGl0eSBub3QgZm91bmQ6ICR7ZW50aXR5SWR9YCk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgbW9kZSA9IGZsYWdzLmhhcyhcInJlZ2VuZXJhdGVcIikgPyBcInJlZ2VuZXJhdGluZ1wiIDogXCJnZW5lcmF0aW5nXCI7XG4gIGNvbnNvbGUubG9nKFxuICAgIGDwn4yfICR7bW9kZSA9PT0gXCJyZWdlbmVyYXRpbmdcIiA/IFwiUmVnZW5lcmF0aW5nXCIgOiBcIkdlbmVyYXRpbmdcIn0gQUktcG93ZXJlZCBjb25lcyBmb3IgJHtlbnRpdHlJZH0uLi5gLFxuICApO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgY29uZmlnTG9jYWxlID0gb3B0aW9ucy5sb2NhbGUgfHwgU29uYW11LmNvbmZpZy5pMThuPy5kZWZhdWx0TG9jYWxlO1xuICAgIGNvbnN0IGxvY2FsZSA9XG4gICAgICBjb25maWdMb2NhbGUgPT09IFwia29cIiB8fCBjb25maWdMb2NhbGUgPT09IFwiZW5cIiB8fCBjb25maWdMb2NhbGUgPT09IFwiamFcIiA/IGNvbmZpZ0xvY2FsZSA6IFwia29cIjtcblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGVudGl0eS5nZW5lcmF0ZUNvbmVzKHtcbiAgICAgIHByZXNlcnZlRXhpc3Rpbmc6ICFmbGFncy5oYXMoXCJyZWdlbmVyYXRlXCIpLFxuICAgICAgb25seUVtcHR5OiAhZmxhZ3MuaGFzKFwicmVnZW5lcmF0ZVwiKSxcbiAgICAgIGxvY2FsZSxcbiAgICB9KTtcblxuICAgIGNvbnNvbGUubG9nKGDinIUgRG9uZSEgKCR7cmVzdWx0LnRva2Vuc1VzZWR9IHRva2VucyB1c2VkKWApO1xuXG4gICAgLy8g7Yag7YGwIOu5hOyaqSDqs4TsgrAgKOuMgOueteyggeyduCDstpTsoJUpXG4gICAgLy8gQ2xhdWRlIFNvbm5ldCA0LjU6IGlucHV0ICQzL00gdG9rZW5zLCBvdXRwdXQgJDE1L00gdG9rZW5zXG4gICAgLy8g6rCE64uo7ZWY6rKMIO2Pieq3oCAkOS9NIHRva2Vuc+uhnCDqs4TsgrBcbiAgICBjb25zdCBlc3RpbWF0ZWRDb3N0ID0gKHJlc3VsdC50b2tlbnNVc2VkICogOSkgLyAxXzAwMF8wMDA7XG4gICAgY29uc29sZS5sb2coYPCfkrAgRXN0aW1hdGVkIGNvc3Q6IH4kJHtlc3RpbWF0ZWRDb3N0LnRvRml4ZWQoNCl9YCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgIGlmIChlcnJvci5tZXNzYWdlLmluY2x1ZGVzKFwiQU5USFJPUElDX0FQSV9LRVlcIikpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihgXFxu4p2MICR7ZXJyb3IubWVzc2FnZX1gKTtcbiAgICAgICAgY29uc29sZS5lcnJvcihgXFxu8J+SoSBUbyB1c2UgQUktcG93ZXJlZCBjb25lIGdlbmVyYXRpb246YCk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYCAgIDEuIEdldCBhbiBBUEkga2V5IGZyb20gaHR0cHM6Ly9jb25zb2xlLmFudGhyb3BpYy5jb20vYCk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgYCAgIDIuIEFkZCBpdCB0byBzb25hbXUuc2VjcmV0LnRzIG9yIHNldCBBTlRIUk9QSUNfQVBJX0tFWSBlbnZpcm9ubWVudCB2YXJpYWJsZWAsXG4gICAgICAgICk7XG4gICAgICB9IGVsc2UgaWYgKGVycm9yLm1lc3NhZ2UuaW5jbHVkZXMoXCJSYXRlIGxpbWl0XCIpKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYFxcbuKdjCAke2Vycm9yLm1lc3NhZ2V9YCk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYFxcbvCfkqEgUGxlYXNlIHdhaXQgYSBtb21lbnQgYW5kIHRyeSBhZ2Fpbi5gKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYFxcbuKdjCBGYWlsZWQgdG8gZ2VuZXJhdGUgY29uZXM6ICR7ZXJyb3IubWVzc2FnZX1gKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS5lcnJvcihgXFxu4p2MIEZhaWxlZCB0byBnZW5lcmF0ZSBjb25lczogVW5rbm93biBlcnJvcmApO1xuICAgIH1cbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBzY2FmZm9sZF9tb2RlbChlbnRpdHlJZDogc3RyaW5nKSB7XG4gIGF3YWl0IFNvbmFtdS5zeW5jZXIuZ2VuZXJhdGVUZW1wbGF0ZShcIm1vZGVsXCIsIHtcbiAgICBlbnRpdHlJZCxcbiAgfSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHNjYWZmb2xkX21vZGVsX3Rlc3QoZW50aXR5SWQ6IHN0cmluZykge1xuICBhd2FpdCBTb25hbXUuc3luY2VyLmdlbmVyYXRlVGVtcGxhdGUoXCJtb2RlbF90ZXN0XCIsIHtcbiAgICBlbnRpdHlJZCxcbiAgfSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHNjYWZmb2xkX3ZpZXdfbGlzdChlbnRpdHlJZDogc3RyaW5nKSB7XG4gIGF3YWl0IFNvbmFtdS5zeW5jZXIuZ2VuZXJhdGVUZW1wbGF0ZShcInZpZXdfbGlzdFwiLCB7XG4gICAgZW50aXR5SWQsXG4gICAgZXh0cmE6IHVuZGVmaW5lZCxcbiAgfSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHNjYWZmb2xkX3ZpZXdfZm9ybShlbnRpdHlJZDogc3RyaW5nKSB7XG4gIGF3YWl0IFNvbmFtdS5zeW5jZXIuZ2VuZXJhdGVUZW1wbGF0ZShcInZpZXdfZm9ybVwiLCB7XG4gICAgZW50aXR5SWQsXG4gIH0pO1xufVxuXG5hc3luYyBmdW5jdGlvbiBhdXRoX2dlbmVyYXRlKCkge1xuICAvLyAtLXBsdWdpbnMg7Ji17IWYIO2MjOyLsVxuICBjb25zdCBwbHVnaW5zQXJnID0gcHJvY2Vzcy5hcmd2LmZpbmQoKGFyZykgPT4gYXJnLnN0YXJ0c1dpdGgoXCItLXBsdWdpbnNcIikpO1xuICBjb25zdCBwbHVnaW5zOiBCZXR0ZXJBdXRoUGx1Z2luSWRbXSA9IFtdO1xuXG4gIGlmIChwbHVnaW5zQXJnKSB7XG4gICAgY29uc3QgcGx1Z2luVmFsdWUgPSBwbHVnaW5zQXJnLmluY2x1ZGVzKFwiPVwiKVxuICAgICAgPyBwbHVnaW5zQXJnLnNwbGl0KFwiPVwiKVsxXVxuICAgICAgOiBwcm9jZXNzLmFyZ3ZbcHJvY2Vzcy5hcmd2LmluZGV4T2YocGx1Z2luc0FyZykgKyAxXTtcblxuICAgIGlmIChwbHVnaW5WYWx1ZSkge1xuICAgICAgY29uc3QgcGx1Z2luSWRzID0gcGx1Z2luVmFsdWUuc3BsaXQoXCIsXCIpLm1hcCgocCkgPT4gcC50cmltKCkpO1xuXG4gICAgICBmb3IgKGNvbnN0IGlkIG9mIHBsdWdpbklkcykge1xuICAgICAgICBpZiAoaXNWYWxpZFBsdWdpbklkKGlkKSkge1xuICAgICAgICAgIHBsdWdpbnMucHVzaChpZCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc29sZS5sb2coY2hhbGsueWVsbG93KGDimqAgVW5rbm93biBwbHVnaW46ICR7aWR9YCkpO1xuICAgICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmRpbShgICBTdXBwb3J0ZWQgcGx1Z2luczogJHtTVVBQT1JURURfUExVR0lOX0lEUy5qb2luKFwiLCBcIil9YCkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY29uc29sZS5sb2coY2hhbGsueWVsbG93LmJvbGQoXCLwn5SQIEdlbmVyYXRpbmcgYmV0dGVyLWF1dGggZW50aXRpZXMuLi5cXG5cIikpO1xuXG4gIGlmIChwbHVnaW5zLmxlbmd0aCA+IDApIHtcbiAgICBjb25zb2xlLmxvZyhjaGFsay5kaW0oYCAgUGx1Z2luczogJHtwbHVnaW5zLmpvaW4oXCIsIFwiKX1gKSk7XG4gIH1cblxuICBhd2FpdCBnZW5lcmF0ZUJldHRlckF1dGhFbnRpdGllcyh7IHBsdWdpbnMgfSk7XG59XG5cbi8qKlxuICogcG5wbSBzb25hbXUgYXV0aCBhZGQtY29tcGFuaW9ucyDtlZjrqbQg7Iuk7ZaJ65CY64qUIO2VqOyImOyeheuLiOuLpC5cbiAqIOq4sOyhtCDtlITroZzsoJ3tirjsnZggZW50aXR5Lmpzb27sl5AgZml4dHVyZUNvbXBhbmlvbnPrpbwg7IaM6riJIOy2lOqwgO2VqeuLiOuLpC5cbiAqXG4gKiDsnbTrr7ggZml4dHVyZUNvbXBhbmlvbnPqsIAg7J6I64qUIGVudGl0eeuKlCDsiqTtgrXtlanri4jri6QgKOuNruyWtOyTsOq4sCDsl4bsnYwpLlxuICovXG5hc3luYyBmdW5jdGlvbiBhdXRoX2FkZF9jb21wYW5pb25zKCkge1xuICBjb25zb2xlLmxvZyhjaGFsay55ZWxsb3cuYm9sZChcIvCflJAgQWRkaW5nIGZpeHR1cmVDb21wYW5pb25zIHRvIGJldHRlci1hdXRoIGVudGl0aWVzLi4uXFxuXCIpKTtcbiAgYXdhaXQgYWRkQ29tcGFuaW9uc1RvRW50aXRpZXMoKTtcbiAgY29uc29sZS5sb2coY2hhbGsuYm9sZChcIlxcbuKchSBEb25lIVwiKSk7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztZQVlzQztvQkFLa0I7U0FDWDtjQUNHO3FCQUNXO2tCQVE3QjtjQUNZO1dBQ3VCO0FBT2pFLElBQUk7Ozs7QUFLSixTQUFTLGdCQUFnQixPQUFpQixRQUFRLE1BR2hEO0NBQ0EsTUFBTSx3QkFBUSxJQUFJLElBQVk7Q0FDOUIsTUFBTSxVQUFrQyxDQUFDO0NBRXpDLEtBQUssSUFBSSxJQUFJLEdBQUcsSUFBSSxLQUFLLFFBQVEsS0FBSztFQUNwQyxNQUFNLE1BQU0sS0FBSztFQUNqQixJQUFJLENBQUMsSUFBSSxXQUFXLElBQUksR0FBRztFQUczQixJQUFJLElBQUksU0FBUyxHQUFHLEdBQUc7R0FDckIsTUFBTSxDQUFDLEtBQUssU0FBUyxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHO0dBQzNDLFFBQVEsT0FBTztHQUNmO0VBQ0Y7RUFHQSxNQUFNLFVBQVUsS0FBSyxJQUFJO0VBQ3pCLElBQUksV0FBVyxDQUFDLFFBQVEsV0FBVyxJQUFJLEtBQUssQ0FBQyxRQUFRLFdBQVcsR0FBRyxHQUFHO0dBQ3BFLFFBQVEsSUFBSSxNQUFNLENBQUMsS0FBSztHQUN4QjtFQUNGLE9BRUUsTUFBTSxJQUFJLElBQUksTUFBTSxDQUFDLENBQUM7Q0FF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
@@ -312,7 +312,8 @@ export declare class JoinClauseGroup<TLeft extends Record<string, any>, TRight e
312
312
  export declare class ResolvedPuri<TResolved, TReturning> implements Promise<TResolved> {
313
313
  knexQuery: Knex.QueryBuilder;
314
314
  private knex;
315
- constructor(knexQuery: Knex.QueryBuilder, knex: Knex);
315
+ private tableSpec;
316
+ constructor(knexQuery: Knex.QueryBuilder, knex: Knex, tableSpec?: TableSpec | null);
316
317
  [Symbol.toStringTag]: string;
317
318
  toQuery(): string;
318
319
  debug(): this;
@@ -1 +1 @@
1
- {"version":3,"file":"puri.d.ts","sourceRoot":"","sources":["../../src/database/puri.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"puri.d.ts","sourceRoot":"","sources":["../../src/database/puri.ts"],"names":[],"mappings":";AAMA,OAAO,EAAE,KAAK,IAAI,EAAE,MAAM,MAAM,CAAC;AAGjC,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAE1D,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EACL,KAAK,gBAAgB,EACrB,KAAK,UAAU,EACf,KAAK,kBAAkB,EACvB,KAAK,MAAM,EACX,KAAK,iBAAiB,EACtB,KAAK,eAAe,EACpB,KAAK,aAAa,EAClB,KAAK,UAAU,EACf,KAAK,YAAY,EACjB,KAAK,WAAW,EAChB,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EACrB,KAAK,iBAAiB,EACtB,KAAK,cAAc,EACnB,KAAK,gBAAgB,EACrB,KAAK,iBAAiB,EACtB,KAAK,sBAAsB,EAC3B,KAAK,eAAe,EACpB,KAAK,YAAY,EACjB,KAAK,gBAAgB,EACrB,KAAK,aAAa,EAClB,KAAK,kBAAkB,EACvB,KAAK,aAAa,EAClB,KAAK,cAAc,EACnB,KAAK,aAAa,EAClB,KAAK,aAAa,EAClB,KAAK,cAAc,EACnB,KAAK,aAAa,EACnB,MAAM,cAAc,CAAC;AAGtB,KAAK,oBAAoB,GAAG,KAAK,GAAG,MAAM,CAAC;AAC3C,KAAK,gBAAgB,GAAG,OAAO,GAAG,MAAM,CAAC;AACzC,KAAK,qBAAqB,GAAG,aAAa,CAAC,QAAQ,CAAC,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC;AAC/E,KAAK,eAAe,CAAC,OAAO,SAAS,MAAM,IAAI;IAC7C,MAAM,EAAE,OAAO,GAAG,qBAAqB,CAAC;IACxC,KAAK,CAAC,EAAE,oBAAoB,CAAC;IAC7B,KAAK,CAAC,EAAE,gBAAgB,CAAC;CAC1B,CAAC;AACF,KAAK,gBAAgB,CAAC,OAAO,SAAS,MAAM,IACxC,OAAO,GACP,qBAAqB,GACrB,eAAe,CAAC,OAAO,CAAC,CAAC;AAiG7B,qBAAa,IAAI,CAAC,OAAO,EAAE,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,OAAO;IAS5D,IAAI,EAAE,IAAI;IARnB,OAAO,CAAC,SAAS,CAAoB;IACrC,OAAO,CAAC,SAAS,CAA0B;IAC3C,OAAO,CAAC,mBAAmB,CAA8C;gBAG7D,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM;gBAC7B,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;IAqCrF,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI;IASrD,MAAM,CAAC,KAAK,CAAC,MAAM,GAAE,MAAY,GAAG,aAAa,CAAC,QAAQ,CAAC;IAQ3D,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,aAAa,CAAC,QAAQ,CAAC;IAQnD,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,aAAa,CAAC,QAAQ,CAAC;IAQnD,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,aAAa,CAAC,QAAQ,CAAC;IAQnD,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,aAAa,CAAC,QAAQ,CAAC;IAQnD,MAAM,CAAC,MAAM,CAAC,GAAG,IAAI,EAAE,MAAM,EAAE,GAAG,aAAa,CAAC,QAAQ,CAAC;IAQzD,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,aAAa,CAAC,QAAQ,CAAC;IAQrD,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,aAAa,CAAC,QAAQ,CAAC;IASrD,MAAM,CAAC,cAAc,CACnB,MAAM,EAAE,MAAM,GAAG,aAAa,CAAC,QAAQ,CAAC,EACxC,KAAK,EAAE,MAAM,GACZ,aAAa,CAAC,QAAQ,CAAC;IAkB1B,MAAM,CAAC,UAAU,CACf,MAAM,EAAE,MAAM,GAAG,aAAa,CAAC,QAAQ,CAAC,EACxC,KAAK,EAAE,MAAM,GACZ,aAAa,CAAC,QAAQ,CAAC;IAkB1B,MAAM,CAAC,oBAAoB,CACzB,MAAM,EAAE,MAAM,GAAG,aAAa,CAAC,QAAQ,CAAC,EACxC,KAAK,EAAE,MAAM,GACZ,aAAa,CAAC,QAAQ,CAAC;IAmB1B,MAAM,CAAC,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,GAAE,IAAI,CAAC,UAAU,EAAO,GAAG,aAAa,CAAC,QAAQ,CAAC;IAItF,MAAM,CAAC,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,GAAE,IAAI,CAAC,UAAU,EAAO,GAAG,aAAa,CAAC,UAAU,CAAC;IAI7F,MAAM,CAAC,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,GAAE,IAAI,CAAC,UAAU,EAAO,GAAG,aAAa,CAAC,QAAQ,CAAC;IAItF,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,GAAE,IAAI,CAAC,UAAU,EAAO,GAAG,aAAa,CAAC,SAAS,CAAC;IAIxF,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,GAAE,IAAI,CAAC,UAAU,EAAO,GAAG,aAAa,CAAC,MAAM,CAAC;IAIlF;;;;;;;;;;;;OAYG;IACH,MAAM,CAAC,WAAW,CAChB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EACb,QAAQ,CAAC,EAAE,kBAAkB,GAC5B,aAAa,CAAC,QAAQ,CAAC;IAkB1B,MAAM,CAAC,MAAM,CACX,MAAM,EAAE,MAAM,GAAG,aAAa,CAAC,UAAU,CAAC,EAC1C,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,aAAa,GACtB,aAAa,CAAC,QAAQ,CAAC;IAK1B,MAAM,CAAC,QAAQ,CACb,MAAM,EAAE,MAAM,GAAG,aAAa,CAAC,UAAU,CAAC,EAC1C,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,aAAa,GACtB,aAAa,CAAC,QAAQ,CAAC;IAI1B,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,GAAE,MAAiB,GAAG,aAAa,CAAC,UAAU,CAAC;IASvF,MAAM,CAAC,OAAO,CACZ,IAAI,EAAE,SAAS,GAAG,YAAY,EAC9B,MAAM,EAAE,MAAM,GAAG,aAAa,CAAC,UAAU,CAAC,EAC1C,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,aAAa,GACtB,aAAa,CAAC,QAAQ,CAAC;IAkC1B;;;;;;;OAOG;IACH,MAAM,CAAC,KAAK,IAAI,aAAa,CAAC,QAAQ,CAAC;IAIvC;;;;;;;OAOG;IACH,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,aAAa,CAAC,QAAQ,CAAC;IACnF,MAAM,CAAC,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,aAAa,CAAC,UAAU,CAAC;IAyBxF,MAAM,CAAC,OAAO,SAAS,YAAY,CAAC,OAAO,CAAC,EAC1C,SAAS,EAAE,OAAO,GACjB,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,iBAAiB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IA6B9D;;;;OAIG;IACH,OAAO,CAAC,aAAa;IAoBrB,YAAY,CAAC,OAAO,SAAS,YAAY,CAAC,OAAO,CAAC,EAChD,SAAS,EAAE,OAAO,GACjB,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,GAAG,iBAAiB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IA0BxE,SAAS,IAAI,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,eAAe,CAAC,OAAO,CAAC,CAAC;IAM7D,QAAQ,CAAC,QAAQ,SAAS,gBAAgB,CAAC,OAAO,CAAC,EAAE,GAAG,OAAO,EAAE,QAAQ,EAAE,GAAG,IAAI;IAOlF,KAAK,CAAC,SAAS,EAAE,eAAe,GAAG,IAAI;IASvC,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAkB9B,IAAI,CAAC,UAAU,SAAS,MAAM,EAAE,UAAU,EACxC,SAAS,EAAE;SAAG,CAAC,IAAI,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE,UAAU,CAAC;KAAE,EAChE,IAAI,EAAE,gBAAgB,CAAC,OAAO,CAAC,EAC/B,KAAK,EAAE,GAAG,UAAU,IAAI,UAAU,CAAC,UAAU,CAAC,EAAE,GAC/C,IAAI,CACL,OAAO,EACP,OAAO,GAAG,MAAM,CAAC,UAAU,EAAE,UAAU,CAAC,EAAE,gBAAgB;IAC1D,OAAO,CACR;IAED,IAAI,CAAC,UAAU,SAAS,MAAM,OAAO,EAAE,UAAU,SAAS,MAAM,EAC9D,SAAS,EAAE;SAAG,CAAC,IAAI,UAAU,GAAG,UAAU;KAAE,EAC5C,IAAI,EAAE,gBAAgB,CAAC,OAAO,CAAC,EAC/B,KAAK,EAAE,GAAG,UAAU,IAAI,UAAU,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,EAAE,GACxD,IAAI,CACL,OAAO,EACP,OAAO,GAAG,MAAM,CAAC,UAAU,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC,EAAE,cAAc;IACjE,OAAO,CACR;IAED,IAAI,CAAC,UAAU,SAAS,MAAM,OAAO,EACnC,SAAS,EAAE,UAAU,EACrB,IAAI,EAAE,gBAAgB,CAAC,OAAO,CAAC,EAC/B,KAAK,EAAE,GAAG,UAAU,GAAG,MAAM,IAAI,UAAU,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,EAAE,GACjE,IAAI,CACL,OAAO,EACP,OAAO,GAAG,MAAM,CAAC,UAAU,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC,EAAE,UAAU;IAC7D,OAAO,CACR;IAED,IAAI,CAAC,UAAU,SAAS,MAAM,EAAE,UAAU,EACxC,SAAS,EAAE;SAAG,CAAC,IAAI,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE,UAAU,CAAC;KAAE,EAChE,QAAQ,EAAE,CAAC,CAAC,EAAE,eAAe,CAAC,OAAO,EAAE,MAAM,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC,KAAK,IAAI,GAC9E,IAAI,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CAAC,UAAU,EAAE,UAAU,CAAC,EAAE,OAAO,CAAC;IAEnE,IAAI,CAAC,UAAU,SAAS,MAAM,OAAO,EAAE,UAAU,SAAS,MAAM,EAC9D,SAAS,EAAE;SAAG,CAAC,IAAI,UAAU,GAAG,UAAU;KAAE,EAC5C,QAAQ,EAAE,CAAC,CAAC,EAAE,eAAe,CAAC,OAAO,EAAE,MAAM,CAAC,UAAU,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,IAAI,GACvF,IAAI,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CAAC,UAAU,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC,EAAE,OAAO,CAAC;IAE5E,IAAI,CAAC,UAAU,SAAS,MAAM,OAAO,EACnC,SAAS,EAAE,UAAU,EACrB,QAAQ,EAAE,CAAC,CAAC,EAAE,eAAe,CAAC,OAAO,EAAE,MAAM,CAAC,UAAU,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,IAAI,GACvF,IAAI,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CAAC,UAAU,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC,EAAE,OAAO,CAAC;IAO5E,UAAU,CAAC,UAAU,SAAS,MAAM,OAAO,EAAE,UAAU,SAAS,MAAM,EACpE,SAAS,EAAE;SAAG,CAAC,IAAI,UAAU,GAAG,UAAU;KAAE,EAC5C,IAAI,EAAE,gBAAgB,CAAC,OAAO,CAAC,EAC/B,KAAK,EAAE,GAAG,UAAU,IAAI,UAAU,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,EAAE,GACxD,IAAI,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CAAC,UAAU,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC,EAAE,OAAO,CAAC;IAE5E,UAAU,CAAC,UAAU,SAAS,MAAM,OAAO,EACzC,SAAS,EAAE,UAAU,EACrB,IAAI,EAAE,gBAAgB,CAAC,OAAO,CAAC,EAC/B,KAAK,EAAE,GAAG,UAAU,GAAG,MAAM,IAAI,UAAU,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,EAAE,GACjE,IAAI,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CAAC,UAAU,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC,EAAE,OAAO,CAAC;IAM5E,QAAQ,CAAC,UAAU,SAAS,MAAM,EAAE,UAAU,EAC5C,SAAS,EAAE;SAAG,CAAC,IAAI,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE,UAAU,CAAC;KAAE,EAChE,IAAI,EAAE,gBAAgB,CAAC,OAAO,CAAC,EAC/B,KAAK,EAAE,GAAG,UAAU,IAAI,UAAU,CAAC,UAAU,CAAC,EAAE,GAC/C,IAAI,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CAAC,UAAU,EAAE,UAAU,GAAG,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAGtF,QAAQ,CACN,UAAU,SAAS,MAAM,OAAO,EAChC,UAAU,SAAS,MAAM,EACzB,KAAK,SAAS,gBAAgB,CAAC,OAAO,CAAC,EAEvC,SAAS,EAAE;SAAG,CAAC,IAAI,UAAU,GAAG,UAAU;KAAE,EAC5C,IAAI,EAAE,KAAK,EACX,KAAK,EAAE,GAAG,UAAU,IAAI,UAAU,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,EAAE,GACxD,IAAI,CACL,OAAO,EACP,OAAO,GAAG,MAAM,CAAC,UAAU,EAAE,OAAO,CAAC,UAAU,CAAC,GAAG,iBAAiB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,EACrF,OAAO,CACR;IAED,QAAQ,CAAC,UAAU,SAAS,MAAM,OAAO,EAAE,KAAK,SAAS,gBAAgB,CAAC,OAAO,CAAC,EAChF,SAAS,EAAE,UAAU,EACrB,IAAI,EAAE,KAAK,EACX,KAAK,EAAE,GAAG,UAAU,GAAG,MAAM,IAAI,UAAU,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,EAAE,GACjE,IAAI,CACL,OAAO,EACP,OAAO,GAAG,MAAM,CAAC,UAAU,EAAE,OAAO,CAAC,UAAU,CAAC,GAAG,iBAAiB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,EACrF,OAAO,CACR;IAED,QAAQ,CAAC,UAAU,SAAS,MAAM,EAAE,UAAU,EAC5C,SAAS,EAAE;SAAG,CAAC,IAAI,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE,UAAU,CAAC;KAAE,EAChE,QAAQ,EAAE,CAAC,CAAC,EAAE,eAAe,CAAC,OAAO,EAAE,MAAM,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC,KAAK,IAAI,GAC9E,IAAI,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CAAC,UAAU,EAAE,UAAU,GAAG,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAEtF,QAAQ,CAAC,UAAU,SAAS,MAAM,OAAO,EAAE,UAAU,SAAS,MAAM,EAClE,SAAS,EAAE;SAAG,CAAC,IAAI,UAAU,GAAG,UAAU;KAAE,EAC5C,QAAQ,EAAE,CAAC,CAAC,EAAE,eAAe,CAAC,OAAO,EAAE,MAAM,CAAC,UAAU,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,IAAI,GACvF,IAAI,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CAAC,UAAU,EAAE,OAAO,CAAC,UAAU,CAAC,GAAG,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAE/F,QAAQ,CAAC,UAAU,SAAS,MAAM,OAAO,EACvC,SAAS,EAAE,UAAU,EACrB,QAAQ,EAAE,CAAC,CAAC,EAAE,eAAe,CAAC,OAAO,EAAE,MAAM,CAAC,UAAU,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,IAAI,GACvF,IAAI,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CAAC,UAAU,EAAE,OAAO,CAAC,UAAU,CAAC,GAAG,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAO/F,cAAc,CACZ,UAAU,SAAS,MAAM,OAAO,EAChC,UAAU,SAAS,MAAM,EACzB,KAAK,SAAS,gBAAgB,CAAC,OAAO,CAAC,EAEvC,SAAS,EAAE;SAAG,CAAC,IAAI,UAAU,GAAG,UAAU;KAAE,EAC5C,IAAI,EAAE,KAAK,EACX,KAAK,EAAE,GAAG,UAAU,IAAI,UAAU,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,EAAE,GACxD,IAAI,CACL,OAAO,EACP,OAAO,GAAG,MAAM,CAAC,UAAU,EAAE,OAAO,CAAC,UAAU,CAAC,GAAG,iBAAiB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,EACrF,OAAO,CACR;IAED,cAAc,CAAC,UAAU,SAAS,MAAM,OAAO,EAAE,KAAK,SAAS,gBAAgB,CAAC,OAAO,CAAC,EACtF,SAAS,EAAE,UAAU,EACrB,IAAI,EAAE,KAAK,EACX,KAAK,EAAE,GAAG,UAAU,GAAG,MAAM,IAAI,UAAU,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,EAAE,GACjE,IAAI,CACL,OAAO,EACP,OAAO,GAAG,MAAM,CAAC,UAAU,EAAE,OAAO,CAAC,UAAU,CAAC,GAAG,iBAAiB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,EACrF,OAAO,CACR;IAKD,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,UAAU,EAAE,eAAe,EAAE,GAAG,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI;IAiEvF,OAAO,CAAC,YAAY;IAyBpB,OAAO,CAAC,sBAAsB;IAuC9B,OAAO,CAAC,0BAA0B;IAYlC,OAAO,CAAC,sBAAsB;IAe9B,OAAO,CAAC,uBAAuB;IAa/B,OAAO,CAAC,6BAA6B;IAarC,OAAO,CAAC,sBAAsB;IAQ9B,OAAO,CAAC,gBAAgB;IAoBxB,KAAK,CAAC,UAAU,EAAE,cAAc,CAAC,OAAO,CAAC,GAAG,IAAI;IAEhD,KAAK,CAAC,OAAO,SAAS,gBAAgB,CAAC,OAAO,CAAC,EAC7C,MAAM,EAAE,OAAO,EACf,KAAK,EAAE,iBAAiB,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CAAC,GAClD,IAAI;IAEP,KAAK,CAAC,OAAO,SAAS,gBAAgB,CAAC,OAAO,CAAC,EAC7C,MAAM,EAAE,OAAO,EACf,QAAQ,EAAE,aAAa,EACvB,KAAK,EAAE,iBAAiB,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CAAC,GAClD,IAAI;IAEP,KAAK,CAAC,OAAO,SAAS,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,KAAK,EAAE,GAAG,GAAG,IAAI;IA8B3F,OAAO,CAAC,OAAO,SAAS,gBAAgB,CAAC,OAAO,CAAC,EAC/C,MAAM,EAAE,OAAO,EACf,MAAM,EAAE,iBAAiB,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CAAC,EAAE,GACrD,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC;IAMlC,UAAU,CAAC,OAAO,SAAS,gBAAgB,CAAC,OAAO,CAAC,EAClD,MAAM,EAAE,OAAO,EACf,MAAM,EAAE,iBAAiB,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CAAC,EAAE,GACrD,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC;IAMlC,mBAAmB,CAAC,OAAO,SAAS,WAAW,CAAC,OAAO,CAAC,EACtD,MAAM,EAAE,OAAO,EACf,KAAK,EAAE,iBAAiB,CAAC,iBAAiB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,GAC5D,IAAI;IAMP,UAAU,CAAC,OAAO,SAAS,eAAe,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAK1F;;;;;;;;;;;;;OAaG;IACH,WAAW,CAAC,OAAO,SAAS,gBAAgB,CAAC,OAAO,CAAC,EACnD,MAAM,EAAE,OAAO,GAAG,OAAO,EAAE,EAC3B,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE;QACR,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;KACpB,GACA,IAAI;IAaP,aAAa,CAAC,OAAO,SAAS,gBAAgB,CAAC,OAAO,CAAC,GAAG,aAAa,CAAC,QAAQ,CAAC,EAC/E,MAAM,EAAE,OAAO,EACf,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,cAAc,GAAG,aAAa,GACvC,IAAI;IAeP,UAAU,CAAC,OAAO,SAAS,gBAAgB,CAAC,OAAO,CAAC,GAAG,aAAa,CAAC,QAAQ,CAAC,EAC5E,MAAM,EAAE,OAAO,EACf,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE;QACR,QAAQ,CAAC,EAAE,aAAa,CAAC;KAC1B,GACA,IAAI;IAqBP,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,SAAS,IAAI,CAAC,UAAU,EAAE,GAAG,IAAI;IAMlE,UAAU,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE,UAAU,CAAC,OAAO,CAAC,KAAK,IAAI,GAAG,IAAI;IAO5D,YAAY,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE,UAAU,CAAC,OAAO,CAAC,KAAK,IAAI,GAAG,IAAI;IAS9D,OAAO,CAAC,OAAO,SAAS,sBAAsB,CAAC,OAAO,EAAE,OAAO,CAAC,EAC9D,MAAM,EAAE,OAAO,GAAG,qBAAqB,EACvC,SAAS,CAAC,EAAE,oBAAoB,EAChC,KAAK,CAAC,EAAE,gBAAgB,GACvB,IAAI;IACP,OAAO,CAAC,OAAO,SAAS,sBAAsB,CAAC,OAAO,EAAE,OAAO,CAAC,EAC9D,OAAO,EAAE,SAAS,gBAAgB,CAAC,OAAO,CAAC,EAAE,GAC5C,IAAI;IAqBP,OAAO,CAAC,YAAY;IAkBpB,SAAS,IAAI,IAAI;IAKjB,QAAQ,IAAI,IAAI;IAKhB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAgCG;IACH,gBAAgB,CACd,MAAM,EAAE,aAAa,CAAC,OAAO,CAAC,EAC9B,SAAS,EAAE,MAAM,EAAE,EACnB,OAAO,GAAE;QACP,MAAM,CAAC,EAAE,QAAQ,GAAG,IAAI,GAAG,eAAe,CAAC;QAC3C,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,UAAU,CAAC,EAAE,gBAAgB,CAAC,OAAO,CAAC,CAAC;KACnC,GACL,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,GAAG;QAAE,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC;IA8E3D,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAQ1B,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAS3B,OAAO,CAAC,QAAQ,SAAS,sBAAsB,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,GAAG,OAAO,EAAE,QAAQ,EAAE,GAAG,IAAI;IAOhG,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAC/B,MAAM,CAAC,OAAO,SAAS,sBAAsB,CAAC,OAAO,EAAE,OAAO,CAAC,EAC7D,MAAM,EAAE,OAAO,EACf,QAAQ,EAAE,kBAAkB,EAC5B,KAAK,EAAE,GAAG,GACT,IAAI;IAoBP,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,EAAE,EAAE,QAAQ,GAAG,KAAK,EACjD,WAAW,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,EAAE,KAAK,QAAQ,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC,GAAG,IAAI,EACrF,UAAU,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,GAAG,KAAK,QAAQ,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC,GAAG,IAAI,GACtE,OAAO,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAI/B,KAAK,CAAC,QAAQ,GAAG,KAAK,EACpB,UAAU,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,GAAG,KAAK,QAAQ,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC,GAAG,IAAI,GACtE,OAAO,CAAC,OAAO,GAAG,QAAQ,CAAC;IAG9B,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC;IAK1D,KAAK,IAAI,YAAY,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,KAAK,CAAC;IAM7C,KAAK,CAAC,OAAO,SAAS,MAAM,OAAO,GAAG,sBAAsB,CAAC,OAAO,EAAE,OAAO,CAAC,EAC5E,MAAM,EAAE,OAAO,GACd,YAAY,CACb,OAAO,SAAS,MAAM,OAAO,GACzB,OAAO,CAAC,OAAO,CAAC,EAAE,GAClB,iBAAiB,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CAAC,EAAE,EAClD,KAAK,CACN;IAMD,MAAM,CACJ,IAAI,EAAE,UAAU,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,GAC1C,YAAY,CAAC,YAAY,EAAE,gBAAgB,CAAC,OAAO,CAAC,CAAC;IAExD,MAAM,CACJ,IAAI,EAAE,UAAU,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,EAAE,GAC5C,YAAY,CAAC,YAAY,EAAE,gBAAgB,CAAC,OAAO,CAAC,CAAC;IAYxD,MAAM,CAAC,OAAO,EAAE,cAAc,CAAC,OAAO,CAAC,GAAG,YAAY,CAAC,MAAM,EAAE,gBAAgB,CAAC,OAAO,CAAC,CAAC;IAOzF;;;;OAIG;IACH,OAAO,CAAC,iBAAiB;IA+BzB,SAAS,CAAC,OAAO,SAAS,cAAc,CAAC,OAAO,CAAC,EAC/C,MAAM,EAAE,OAAO,EACf,KAAK,EAAE,MAAM,GACZ,YAAY,CAAC,MAAM,EAAE,gBAAgB,CAAC,OAAO,CAAC,CAAC;IAQlD,SAAS,CAAC,OAAO,SAAS,cAAc,CAAC,OAAO,CAAC,EAC/C,MAAM,EAAE,OAAO,EACf,KAAK,EAAE,MAAM,GACZ,YAAY,CAAC,MAAM,EAAE,gBAAgB,CAAC,OAAO,CAAC,CAAC;IASlD,MAAM,IAAI,YAAY,CAAC,MAAM,EAAE,gBAAgB,CAAC,OAAO,CAAC,CAAC;IAMzD,OAAO,IAAI,MAAM;IAKjB,KAAK,IAAI,IAAI;IAKb,KAAK,IAAI,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC;IASxC,SAAS,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM;IA4GtC,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC,GAAG;IAK1B,QAAQ,IAAI,IAAI,CAAC,YAAY;CAG9B;AAED,qBAAa,UAAU,CAAC,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IAC7C,OAAO,CAAC,OAAO;gBAAP,OAAO,EAAE,IAAI,CAAC,YAAY;IAG9C,KAAK,CAAC,UAAU,EAAE,cAAc,CAAC,OAAO,CAAC,GAAG,IAAI;IAChD,KAAK,CAAC,OAAO,SAAS,gBAAgB,CAAC,OAAO,CAAC,EAC7C,MAAM,EAAE,OAAO,EACf,KAAK,EAAE,iBAAiB,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CAAC,GAClD,IAAI;IACP,KAAK,CAAC,OAAO,SAAS,gBAAgB,CAAC,OAAO,CAAC,EAC7C,MAAM,EAAE,OAAO,EACf,QAAQ,EAAE,aAAa,EACvB,KAAK,EAAE,iBAAiB,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CAAC,GAClD,IAAI;IAOP,OAAO,CAAC,OAAO,SAAS,gBAAgB,CAAC,OAAO,CAAC,EAC/C,MAAM,EAAE,OAAO,EACf,MAAM,EAAE,iBAAiB,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CAAC,EAAE,GACrD,IAAI;IAMP,UAAU,CAAC,OAAO,SAAS,gBAAgB,CAAC,OAAO,CAAC,EAClD,MAAM,EAAE,OAAO,EACf,MAAM,EAAE,iBAAiB,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CAAC,EAAE,GACrD,IAAI;IAOP,OAAO,CAAC,UAAU,EAAE,cAAc,CAAC,OAAO,CAAC,GAAG,IAAI;IAClD,OAAO,CAAC,OAAO,SAAS,gBAAgB,CAAC,OAAO,CAAC,EAC/C,MAAM,EAAE,OAAO,EACf,KAAK,EAAE,iBAAiB,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CAAC,GAClD,IAAI;IACP,OAAO,CAAC,OAAO,SAAS,gBAAgB,CAAC,OAAO,CAAC,EAC/C,MAAM,EAAE,OAAO,EACf,QAAQ,EAAE,aAAa,EACvB,KAAK,EAAE,iBAAiB,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CAAC,GAClD,IAAI;IAOP,SAAS,CAAC,OAAO,SAAS,gBAAgB,CAAC,OAAO,CAAC,EACjD,MAAM,EAAE,OAAO,EACf,MAAM,EAAE,iBAAiB,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CAAC,EAAE,GACrD,IAAI;IAMP,YAAY,CAAC,OAAO,SAAS,gBAAgB,CAAC,OAAO,CAAC,EACpD,MAAM,EAAE,OAAO,EACf,MAAM,EAAE,iBAAiB,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CAAC,EAAE,GACrD,IAAI;IAOP,mBAAmB,CAAC,OAAO,SAAS,WAAW,CAAC,OAAO,CAAC,EACtD,MAAM,EAAE,OAAO,EACf,KAAK,EAAE,iBAAiB,CAAC,iBAAiB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,GAC5D,IAAI;IAKP,qBAAqB,CAAC,OAAO,SAAS,WAAW,CAAC,OAAO,CAAC,EACxD,MAAM,EAAE,OAAO,EACf,KAAK,EAAE,iBAAiB,CAAC,iBAAiB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,GAC5D,IAAI;IAMP,UAAU,CAAC,OAAO,SAAS,eAAe,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAM1F,YAAY,CAAC,OAAO,SAAS,eAAe,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAO5F,WAAW,CAAC,OAAO,SAAS,gBAAgB,CAAC,OAAO,CAAC,EACnD,MAAM,EAAE,OAAO,GAAG,OAAO,EAAE,EAC3B,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE;QACR,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;KACpB,GACA,IAAI;IAYP,aAAa,CAAC,OAAO,SAAS,gBAAgB,CAAC,OAAO,CAAC,EACrD,MAAM,EAAE,OAAO,GAAG,OAAO,EAAE,EAC3B,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE;QACR,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;KACpB,GACA,IAAI;IAaP,aAAa,CAAC,OAAO,SAAS,gBAAgB,CAAC,OAAO,CAAC,GAAG,aAAa,CAAC,QAAQ,CAAC,EAC/E,MAAM,EAAE,OAAO,EACf,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,cAAc,GAAG,aAAa,GACvC,IAAI;IAgBP,eAAe,CAAC,OAAO,SAAS,gBAAgB,CAAC,OAAO,CAAC,GAAG,aAAa,CAAC,QAAQ,CAAC,EACjF,MAAM,EAAE,OAAO,EACf,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,cAAc,GAAG,aAAa,GACvC,IAAI;IAgBP,UAAU,CAAC,OAAO,SAAS,gBAAgB,CAAC,OAAO,CAAC,GAAG,aAAa,CAAC,QAAQ,CAAC,EAC5E,MAAM,EAAE,OAAO,EACf,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE;QACR,QAAQ,CAAC,EAAE,aAAa,CAAC;KAC1B,GACA,IAAI;IAqBP,YAAY,CAAC,OAAO,SAAS,gBAAgB,CAAC,OAAO,CAAC,GAAG,aAAa,CAAC,QAAQ,CAAC,EAC9E,MAAM,EAAE,OAAO,EACf,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE;QACR,QAAQ,CAAC,EAAE,aAAa,CAAC;KAC1B,GACA,IAAI;IAsBP,UAAU,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE,UAAU,CAAC,OAAO,CAAC,KAAK,IAAI,GAAG,IAAI;IAQ5D,YAAY,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE,UAAU,CAAC,OAAO,CAAC,KAAK,IAAI,GAAG,IAAI;CAQ/D;AAGD,qBAAa,eAAe,CAC1B,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACjC,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IAEtB,OAAO,CAAC,QAAQ;gBAAR,QAAQ,EAAE,IAAI,CAAC,UAAU;IAG7C,EAAE,CAAC,IAAI,EAAE,gBAAgB,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,gBAAgB,CAAC,MAAM,CAAC,GAAG,IAAI;IACxE,EAAE,CAAC,IAAI,EAAE,gBAAgB,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,gBAAgB,CAAC,KAAK,CAAC,GAAG,IAAI;IAExE,EAAE,CACA,IAAI,EAAE,gBAAgB,CAAC,KAAK,CAAC,EAC7B,KAAK,EAAE,iBAAiB,CAAC,KAAK,EAAE,gBAAgB,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,GAChE,IAAI;IACP,EAAE,CACA,IAAI,EAAE,gBAAgB,CAAC,MAAM,CAAC,EAC9B,KAAK,EAAE,iBAAiB,CAAC,MAAM,EAAE,gBAAgB,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,GAClE,IAAI;IAEP,EAAE,CACA,IAAI,EAAE,gBAAgB,CAAC,KAAK,CAAC,EAC7B,QAAQ,EAAE,kBAAkB,EAC5B,KAAK,EAAE,gBAAgB,CAAC,MAAM,CAAC,GAC9B,IAAI;IACP,EAAE,CACA,IAAI,EAAE,gBAAgB,CAAC,MAAM,CAAC,EAC9B,QAAQ,EAAE,kBAAkB,EAC5B,KAAK,EAAE,gBAAgB,CAAC,KAAK,CAAC,GAC7B,IAAI;IAEP,EAAE,CACA,IAAI,EAAE,gBAAgB,CAAC,KAAK,CAAC,EAC7B,QAAQ,EAAE,kBAAkB,EAC5B,KAAK,EAAE,iBAAiB,CAAC,KAAK,EAAE,gBAAgB,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,GAChE,IAAI;IACP,EAAE,CACA,IAAI,EAAE,gBAAgB,CAAC,MAAM,CAAC,EAC9B,QAAQ,EAAE,kBAAkB,EAC5B,KAAK,EAAE,iBAAiB,CAAC,MAAM,EAAE,gBAAgB,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,GAClE,IAAI;IAEP,EAAE,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,eAAe,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,GAAG,IAAI;IACpE,EAAE,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,eAAe,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,IAAI,GAAG,IAAI;IAQpE,IAAI,CAAC,IAAI,EAAE,gBAAgB,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,gBAAgB,CAAC,MAAM,CAAC,GAAG,IAAI;IAC1E,IAAI,CAAC,IAAI,EAAE,gBAAgB,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,gBAAgB,CAAC,KAAK,CAAC,GAAG,IAAI;IAE1E,IAAI,CACF,IAAI,EAAE,gBAAgB,CAAC,KAAK,CAAC,EAC7B,KAAK,EAAE,iBAAiB,CAAC,KAAK,EAAE,gBAAgB,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,GAChE,IAAI;IACP,IAAI,CACF,IAAI,EAAE,gBAAgB,CAAC,MAAM,CAAC,EAC9B,KAAK,EAAE,iBAAiB,CAAC,MAAM,EAAE,gBAAgB,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,GAClE,IAAI;IAEP,IAAI,CACF,IAAI,EAAE,gBAAgB,CAAC,KAAK,CAAC,EAC7B,QAAQ,EAAE,kBAAkB,EAC5B,KAAK,EAAE,gBAAgB,CAAC,MAAM,CAAC,GAC9B,IAAI;IACP,IAAI,CACF,IAAI,EAAE,gBAAgB,CAAC,MAAM,CAAC,EAC9B,QAAQ,EAAE,kBAAkB,EAC5B,KAAK,EAAE,gBAAgB,CAAC,KAAK,CAAC,GAC7B,IAAI;IAEP,IAAI,CACF,IAAI,EAAE,gBAAgB,CAAC,KAAK,CAAC,EAC7B,QAAQ,EAAE,kBAAkB,EAC5B,KAAK,EAAE,iBAAiB,CAAC,KAAK,EAAE,gBAAgB,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,GAChE,IAAI;IACP,IAAI,CACF,IAAI,EAAE,gBAAgB,CAAC,MAAM,CAAC,EAC9B,QAAQ,EAAE,kBAAkB,EAC5B,KAAK,EAAE,iBAAiB,CAAC,MAAM,EAAE,gBAAgB,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,GAClE,IAAI;IAEP,IAAI,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,eAAe,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,GAAG,IAAI;IACtE,IAAI,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,eAAe,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,IAAI,GAAG,IAAI;IAQtE,KAAK,CAAC,MAAM,EAAE,gBAAgB,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,GAAG,GAAG,IAAI;IACxD,KAAK,CAAC,MAAM,EAAE,gBAAgB,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,GAAG,GAAG,IAAI;IACzD,KAAK,CAAC,MAAM,EAAE,gBAAgB,CAAC,KAAK,CAAC,EAAE,QAAQ,EAAE,kBAAkB,EAAE,KAAK,EAAE,GAAG,GAAG,IAAI;IACtF,KAAK,CAAC,MAAM,EAAE,gBAAgB,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,kBAAkB,EAAE,KAAK,EAAE,GAAG,GAAG,IAAI;IAOvF,QAAQ,CAAC,MAAM,EAAE,gBAAgB,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,GAAG,GAAG,IAAI;IAC3D,QAAQ,CAAC,MAAM,EAAE,gBAAgB,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,GAAG,GAAG,IAAI;IAC5D,QAAQ,CAAC,MAAM,EAAE,gBAAgB,CAAC,KAAK,CAAC,EAAE,QAAQ,EAAE,kBAAkB,EAAE,KAAK,EAAE,GAAG,GAAG,IAAI;IACzF,QAAQ,CAAC,MAAM,EAAE,gBAAgB,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,kBAAkB,EAAE,KAAK,EAAE,GAAG,GAAG,IAAI;IAO1F,OAAO,CAAC,MAAM,EAAE,gBAAgB,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,GAAG,GAAG,IAAI;IAC1D,OAAO,CAAC,MAAM,EAAE,gBAAgB,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,GAAG,GAAG,IAAI;IAC3D,OAAO,CAAC,MAAM,EAAE,gBAAgB,CAAC,KAAK,CAAC,EAAE,QAAQ,EAAE,kBAAkB,EAAE,KAAK,EAAE,GAAG,GAAG,IAAI;IACxF,OAAO,CAAC,MAAM,EAAE,gBAAgB,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,kBAAkB,EAAE,KAAK,EAAE,GAAG,GAAG,IAAI;CAK1F;AAMD,qBAAa,YAAY,CAAC,SAAS,EAAE,UAAU,CAAE,YAAW,OAAO,CAAC,SAAS,CAAC;IAEnE,SAAS,EAAE,IAAI,CAAC,YAAY;IACnC,OAAO,CAAC,IAAI;IACZ,OAAO,CAAC,SAAS;gBAFV,SAAS,EAAE,IAAI,CAAC,YAAY,EAC3B,IAAI,EAAE,IAAI,EACV,SAAS,GAAE,SAAS,GAAG,IAAW;IAG5C,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,MAAM,CAAa;IAEzC,OAAO,IAAI,MAAM;IAIjB,KAAK,IAAI,IAAI;IAKb,IAAI,CAAC,QAAQ,GAAG,SAAS,EAAE,QAAQ,GAAG,KAAK,EACzC,WAAW,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,SAAS,KAAK,QAAQ,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC,GAAG,IAAI,EAC7E,UAAU,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,GAAG,KAAK,QAAQ,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC,GAAG,IAAI,GACtE,OAAO,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAK/B,KAAK,CAAC,QAAQ,GAAG,KAAK,EACpB,UAAU,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,GAAG,KAAK,QAAQ,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC,GAAG,IAAI,GACtE,OAAO,CAAC,SAAS,GAAG,QAAQ,CAAC;IAIhC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG,IAAI,GAAG,OAAO,CAAC,SAAS,CAAC;IAK5D,UAAU,CAAC,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,EACnD,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,EAC1B,MAAM,CAAC,EAAE,gBAAgB,CAAC,OAAO,CAAC,GACjC,IAAI;IAwCP,SAAS,CAAC,MAAM,EAAE,GAAG,GAAG,YAAY,CAAC,UAAU,EAAE,EAAE,KAAK,CAAC;IAEzD,SAAS,CAAC,OAAO,SAAS,UAAU,CAAC,UAAU,CAAC,EAC9C,MAAM,EAAE,OAAO,GACd,YAAY,CAAC,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC,EAAE,EAAE,KAAK,CAAC;IAEnD,SAAS,CAAC,OAAO,SAAS,UAAU,CAAC,UAAU,CAAC,EAC9C,OAAO,EAAE,OAAO,EAAE,GACjB,YAAY,CAAC,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC,EAAE,EAAE,KAAK,CAAC;CAMpD"}