sonamu 0.9.19 → 0.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (282) hide show
  1. package/dist/_virtual/_rolldown/runtime.js +36 -0
  2. package/dist/ai/agents/agent.js +5 -7
  3. package/dist/ai/agents/index.js +1 -2
  4. package/dist/ai/agents/types.js +1 -1
  5. package/dist/ai/index.js +1 -2
  6. package/dist/ai/providers/rtzr/api.js +2 -3
  7. package/dist/ai/providers/rtzr/error.js +14 -29
  8. package/dist/ai/providers/rtzr/index.js +1 -2
  9. package/dist/ai/providers/rtzr/model.js +13 -20
  10. package/dist/ai/providers/rtzr/options.js +2 -3
  11. package/dist/ai/providers/rtzr/provider.js +2 -3
  12. package/dist/ai/providers/rtzr/utils.js +12 -21
  13. package/dist/api/base-frame.js +4 -4
  14. package/dist/api/caster.js +21 -38
  15. package/dist/api/code-converters.js +41 -98
  16. package/dist/api/config.d.ts +1 -10
  17. package/dist/api/config.d.ts.map +1 -1
  18. package/dist/api/config.js +9 -8
  19. package/dist/api/context.js +2 -3
  20. package/dist/api/decorators.js +80 -116
  21. package/dist/api/index.js +2 -3
  22. package/dist/api/secret.js +6 -10
  23. package/dist/api/sonamu.d.ts.map +1 -1
  24. package/dist/api/sonamu.js +200 -387
  25. package/dist/api/validator.js +5 -8
  26. package/dist/api/websocket-helpers.js +21 -32
  27. package/dist/auth/audit-log/builders.js +2 -3
  28. package/dist/auth/audit-log/events.js +2 -2
  29. package/dist/auth/audit-log/plugin.js +30 -61
  30. package/dist/auth/audit-log-ingestor.js +19 -41
  31. package/dist/auth/auth-generator.js +16 -41
  32. package/dist/auth/better-auth-entities.js +3 -4
  33. package/dist/auth/index.js +2 -3
  34. package/dist/auth/knex-adapter.js +18 -45
  35. package/dist/auth/plugins/entity-definitions/admin.js +2 -2
  36. package/dist/auth/plugins/entity-definitions/anonymous.js +2 -2
  37. package/dist/auth/plugins/entity-definitions/api-key.js +2 -2
  38. package/dist/auth/plugins/entity-definitions/audit-log.js +2 -2
  39. package/dist/auth/plugins/entity-definitions/index.js +2 -3
  40. package/dist/auth/plugins/entity-definitions/jwt.js +2 -2
  41. package/dist/auth/plugins/entity-definitions/organization.js +2 -2
  42. package/dist/auth/plugins/entity-definitions/passkey.js +2 -2
  43. package/dist/auth/plugins/entity-definitions/phone-number.js +2 -2
  44. package/dist/auth/plugins/entity-definitions/sso.js +2 -2
  45. package/dist/auth/plugins/entity-definitions/two-factor.js +2 -2
  46. package/dist/auth/plugins/entity-definitions/types.js +1 -1
  47. package/dist/auth/plugins/entity-definitions/username.js +2 -2
  48. package/dist/auth/plugins/index.js +1 -2
  49. package/dist/auth/plugins/wrappers/admin.js +2 -3
  50. package/dist/auth/plugins/wrappers/anonymous.js +2 -3
  51. package/dist/auth/plugins/wrappers/api-key.js +2 -3
  52. package/dist/auth/plugins/wrappers/index.js +1 -2
  53. package/dist/auth/plugins/wrappers/jwt.js +2 -3
  54. package/dist/auth/plugins/wrappers/organization.js +2 -3
  55. package/dist/auth/plugins/wrappers/passkey.js +2 -3
  56. package/dist/auth/plugins/wrappers/phone-number.js +2 -3
  57. package/dist/auth/plugins/wrappers/sso.js +2 -3
  58. package/dist/auth/plugins/wrappers/two-factor.js +2 -3
  59. package/dist/auth/plugins/wrappers/username.js +2 -3
  60. package/dist/bin/build-config.js +2 -2
  61. package/dist/bin/cli.js +151 -258
  62. package/dist/bin/fixture.d.ts.map +1 -1
  63. package/dist/bin/fixture.js +55 -97
  64. package/dist/bin/hmr-hook-register.js +3 -3
  65. package/dist/bin/migrate-targets.d.ts +3 -0
  66. package/dist/bin/migrate-targets.d.ts.map +1 -0
  67. package/dist/bin/migrate-targets.js +11 -0
  68. package/dist/bin/test-command.js +25 -55
  69. package/dist/bin/ts-loader-register.js +5 -6
  70. package/dist/bin/ts-loader-registration.js +6 -13
  71. package/dist/cache/cache-manager.js +3 -4
  72. package/dist/cache/decorator.js +11 -21
  73. package/dist/cache/drivers.js +2 -3
  74. package/dist/cache/index.js +2 -3
  75. package/dist/cache/types.js +1 -1
  76. package/dist/cache-control/cache-control.js +21 -34
  77. package/dist/cache-control/types.js +1 -1
  78. package/dist/compress/compress.js +10 -10
  79. package/dist/compress/index.js +1 -2
  80. package/dist/compress/types.js +1 -1
  81. package/dist/cone/cone-generator.js +25 -63
  82. package/dist/database/_batch_update.js +26 -46
  83. package/dist/database/base-model.js +44 -97
  84. package/dist/database/base-model.types.js +1 -1
  85. package/dist/database/db.d.ts +8 -14
  86. package/dist/database/db.d.ts.map +1 -1
  87. package/dist/database/db.js +127 -72
  88. package/dist/database/knex.js +5 -8
  89. package/dist/database/puri-subset.types.js +1 -1
  90. package/dist/database/puri-wrapper.js +11 -15
  91. package/dist/database/puri.js +117 -234
  92. package/dist/database/puri.types.js +3 -4
  93. package/dist/database/transaction-context.js +4 -5
  94. package/dist/database/upsert-builder.js +109 -176
  95. package/dist/dict/en.d.ts +1 -0
  96. package/dist/dict/en.d.ts.map +1 -1
  97. package/dist/dict/en.js +4 -4
  98. package/dist/dict/index.js +2 -3
  99. package/dist/dict/ko.d.ts +1 -0
  100. package/dist/dict/ko.d.ts.map +1 -1
  101. package/dist/dict/ko.js +4 -4
  102. package/dist/dict/rc-keys.js +3 -4
  103. package/dist/dict/sd.js +8 -19
  104. package/dist/dict/sonamu-dictionary.js +141 -284
  105. package/dist/dict/types.js +1 -1
  106. package/dist/dict/utils.js +4 -5
  107. package/dist/entity/entity-manager.d.ts +2 -2
  108. package/dist/entity/entity-manager.js +34 -82
  109. package/dist/entity/entity-template-cone.js +33 -66
  110. package/dist/entity/entity.js +156 -310
  111. package/dist/env.d.ts +14 -0
  112. package/dist/env.d.ts.map +1 -0
  113. package/dist/env.js +75 -0
  114. package/dist/exceptions/error-handler.js +2 -3
  115. package/dist/exceptions/so-exceptions.js +7 -5
  116. package/dist/filter/index.js +1 -2
  117. package/dist/filter/types.js +3 -4
  118. package/dist/filter/utils.js +21 -54
  119. package/dist/index.js +8 -7
  120. package/dist/logger/category.js +6 -12
  121. package/dist/logger/configure.js +23 -34
  122. package/dist/migration/code-generation.js +146 -314
  123. package/dist/migration/index-where-predicate.js +52 -144
  124. package/dist/migration/migration-set.js +19 -33
  125. package/dist/migration/migrator.d.ts +2 -0
  126. package/dist/migration/migrator.d.ts.map +1 -1
  127. package/dist/migration/migrator.js +69 -53
  128. package/dist/migration/postgresql-schema-reader.js +126 -225
  129. package/dist/migration/slack-confirm.d.ts +1 -0
  130. package/dist/migration/slack-confirm.d.ts.map +1 -1
  131. package/dist/migration/slack-confirm.js +28 -38
  132. package/dist/migration/types.js +1 -1
  133. package/dist/naite/messaging-types.js +1 -1
  134. package/dist/naite/naite-reporter.js +15 -32
  135. package/dist/naite/naite.js +43 -76
  136. package/dist/ssr/index.js +6 -9
  137. package/dist/ssr/registry.js +10 -18
  138. package/dist/ssr/renderer.js +10 -21
  139. package/dist/ssr/types.js +1 -1
  140. package/dist/storage/base-file.js +5 -10
  141. package/dist/storage/buffered-file.js +3 -4
  142. package/dist/storage/drivers.js +2 -3
  143. package/dist/storage/index.js +2 -3
  144. package/dist/storage/s3-driver.js +5 -9
  145. package/dist/storage/storage-manager.js +5 -5
  146. package/dist/storage/types.js +1 -1
  147. package/dist/storage/uploaded-file.js +4 -6
  148. package/dist/stream/index.js +1 -2
  149. package/dist/stream/sse.js +8 -13
  150. package/dist/stream/ws-audience-resolver.js +5 -5
  151. package/dist/stream/ws-audience.js +3 -4
  152. package/dist/stream/ws-cluster-bus.js +3 -4
  153. package/dist/stream/ws-core.js +1 -1
  154. package/dist/stream/ws-delivery.js +11 -25
  155. package/dist/stream/ws-local-connection-store.js +9 -18
  156. package/dist/stream/ws-presence-store.js +43 -97
  157. package/dist/stream/ws-registry.js +17 -22
  158. package/dist/stream/ws-telemetry-memory.js +38 -45
  159. package/dist/stream/ws-telemetry-trace.js +4 -6
  160. package/dist/stream/ws-telemetry.js +82 -135
  161. package/dist/stream/ws.js +47 -91
  162. package/dist/syncer/api-parser.js +81 -147
  163. package/dist/syncer/checksum.js +9 -20
  164. package/dist/syncer/code-generator.js +29 -47
  165. package/dist/syncer/entity-operations.js +17 -27
  166. package/dist/syncer/event-batcher.js +8 -15
  167. package/dist/syncer/file-patterns.js +3 -4
  168. package/dist/syncer/file-tracking.js +6 -10
  169. package/dist/syncer/index.js +1 -2
  170. package/dist/syncer/module-loader.js +10 -26
  171. package/dist/syncer/syncer-actions.js +19 -37
  172. package/dist/syncer/syncer.js +46 -98
  173. package/dist/syncer/watcher.js +12 -26
  174. package/dist/tasks/decorator.js +7 -11
  175. package/dist/tasks/step-wrapper.js +7 -8
  176. package/dist/tasks/workflow-manager.js +18 -25
  177. package/dist/template/entity-converter.js +40 -64
  178. package/dist/template/helpers.js +32 -63
  179. package/dist/template/implementations/entity.template.js +7 -11
  180. package/dist/template/implementations/entry-server.template.js +2 -3
  181. package/dist/template/implementations/generated.template.js +25 -51
  182. package/dist/template/implementations/generated_http.template.js +31 -58
  183. package/dist/template/implementations/generated_sso.template.js +45 -85
  184. package/dist/template/implementations/init_types.template.js +4 -7
  185. package/dist/template/implementations/model.template.js +5 -10
  186. package/dist/template/implementations/model_test.template.js +2 -3
  187. package/dist/template/implementations/queries.template.js +4 -7
  188. package/dist/template/implementations/sd.template.js +17 -35
  189. package/dist/template/implementations/services.template.js +18 -30
  190. package/dist/template/implementations/view_form.template.js +72 -125
  191. package/dist/template/implementations/view_id_all_select.template.js +2 -3
  192. package/dist/template/implementations/view_list.template.js +86 -143
  193. package/dist/template/implementations/view_search_input.template.js +2 -3
  194. package/dist/template/index.js +5 -8
  195. package/dist/template/template-manager.js +13 -26
  196. package/dist/template/template-types.js +2 -3
  197. package/dist/template/template.js +7 -11
  198. package/dist/template/zod-converter.js +173 -348
  199. package/dist/testing/_relation-graph.js +18 -37
  200. package/dist/testing/bootstrap.js +5 -8
  201. package/dist/testing/data-explorer.js +34 -78
  202. package/dist/testing/dev-test-routes.js +54 -60
  203. package/dist/testing/dev-vitest-manager.js +33 -84
  204. package/dist/testing/faker-mappings.js +3 -4
  205. package/dist/testing/fixture-generator.d.ts +2 -1
  206. package/dist/testing/fixture-generator.d.ts.map +1 -1
  207. package/dist/testing/fixture-generator.js +159 -321
  208. package/dist/testing/fixture-loader.js +2 -2
  209. package/dist/testing/fixture-manager.d.ts.map +1 -1
  210. package/dist/testing/fixture-manager.js +124 -227
  211. package/dist/testing/global-setup.d.ts.map +1 -1
  212. package/dist/testing/global-setup.js +29 -17
  213. package/dist/testing/index.js +1 -2
  214. package/dist/testing/naite-vitest-reporter.js +2 -3
  215. package/dist/testing/parallel-db-manager.js +5 -3
  216. package/dist/testing/vitest-helpers.d.ts.map +1 -1
  217. package/dist/testing/vitest-helpers.js +15 -12
  218. package/dist/types/types.d.ts +14 -14
  219. package/dist/types/types.js +27 -50
  220. package/dist/ui/ai-api.js +6 -11
  221. package/dist/ui/ai-client.js +86 -134
  222. package/dist/ui/api.js +99 -195
  223. package/dist/ui/cdd-service.js +78 -130
  224. package/dist/ui/cdd-types.js +1 -1
  225. package/dist/ui-web/assets/{index-Df8q-fhb.js → index-DFStGyd0.js} +49 -49
  226. package/dist/ui-web/assets/index-Dx4ap5i4.css +1 -0
  227. package/dist/ui-web/index.html +2 -2
  228. package/dist/utils/async-utils.js +13 -25
  229. package/dist/utils/class-name.js +3 -4
  230. package/dist/utils/console-util.js +11 -26
  231. package/dist/utils/controller.d.ts.map +1 -1
  232. package/dist/utils/controller.js +14 -12
  233. package/dist/utils/esm-utils.js +5 -8
  234. package/dist/utils/formatter.js +10 -22
  235. package/dist/utils/fs-utils.js +14 -25
  236. package/dist/utils/lodash-able.js +3 -4
  237. package/dist/utils/model.js +7 -14
  238. package/dist/utils/object-utils.js +41 -73
  239. package/dist/utils/path-utils.js +5 -9
  240. package/dist/utils/process-utils.js +4 -7
  241. package/dist/utils/sql-parser.js +6 -13
  242. package/dist/utils/type-utils.js +16 -26
  243. package/dist/utils/utils.js +18 -40
  244. package/dist/utils/zod-error.js +9 -16
  245. package/dist/vector/chunking.js +24 -37
  246. package/dist/vector/config.js +2 -2
  247. package/dist/vector/embedding.js +8 -19
  248. package/dist/vector/index.js +1 -2
  249. package/dist/vector/types.js +1 -1
  250. package/package.json +7 -7
  251. package/src/__tests__/env.test.ts +127 -0
  252. package/src/api/__tests__/config.test.ts +10 -1
  253. package/src/api/config.ts +4 -12
  254. package/src/api/sonamu.ts +14 -4
  255. package/src/bin/__tests__/migrate-targets.test.ts +28 -0
  256. package/src/bin/__tests__/test-command.test.ts +82 -1
  257. package/src/bin/cli.ts +9 -18
  258. package/src/bin/fixture.ts +5 -4
  259. package/src/bin/migrate-targets.ts +7 -0
  260. package/src/bin/test-command.ts +2 -2
  261. package/src/database/__tests__/db.test.ts +175 -0
  262. package/src/database/db.ts +193 -71
  263. package/src/dict/en.ts +2 -0
  264. package/src/dict/ko.ts +2 -0
  265. package/src/env.ts +123 -0
  266. package/src/migration/__tests__/migrator.test.ts +149 -0
  267. package/src/migration/migrator.ts +74 -17
  268. package/src/migration/slack-confirm.ts +21 -0
  269. package/src/skills/sonamu/database.md +1 -1
  270. package/src/skills/sonamu/entity-basic.md +31 -0
  271. package/src/skills/sonamu/puri.md +22 -0
  272. package/src/skills/sonamu/testing-devrunner.md +1 -1
  273. package/src/skills/sonamu/upsert.md +53 -6
  274. package/src/stream/ws-telemetry-memory.ts +2 -2
  275. package/src/testing/fixture-generator.ts +2 -1
  276. package/src/testing/fixture-manager.ts +3 -4
  277. package/src/testing/global-setup.ts +42 -18
  278. package/src/testing/vitest-helpers.ts +14 -0
  279. package/src/utils/controller.ts +14 -7
  280. package/tsdown.api.config.ts +6 -0
  281. package/dist/_virtual/rolldown_runtime.js +0 -39
  282. package/dist/ui-web/assets/index-D4rYm-Xz.css +0 -1
@@ -1,9 +1,8 @@
1
- import { __esmMin } from "../_virtual/rolldown_runtime.js";
1
+ import { __esmMin } from "../_virtual/_rolldown/runtime.js";
2
2
  import { convertDomainToCategory, init_category } from "../logger/category.js";
3
3
  import { DB, init_db } from "../database/db.js";
4
4
  import { UpsertBuilder, init_upsert_builder } from "../database/upsert-builder.js";
5
5
  import { getLogger } from "@logtape/logtape";
6
-
7
6
  //#region src/api/base-frame.ts
8
7
  var BaseFrameClass;
9
8
  var init_base_frame = __esmMin((() => {
@@ -11,6 +10,7 @@ var init_base_frame = __esmMin((() => {
11
10
  init_upsert_builder();
12
11
  init_category();
13
12
  BaseFrameClass = class {
13
+ frameName;
14
14
  logger;
15
15
  constructor(frameName = this.constructor.name) {
16
16
  this.frameName = frameName;
@@ -24,8 +24,8 @@ var init_base_frame = __esmMin((() => {
24
24
  }
25
25
  };
26
26
  }));
27
-
28
27
  //#endregion
29
28
  init_base_frame();
30
29
  export { BaseFrameClass, init_base_frame };
31
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1mcmFtZS5qcyIsIm5hbWVzIjpbImZyYW1lTmFtZTogc3RyaW5nIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FwaS9iYXNlLWZyYW1lLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGdldExvZ2dlciB9IGZyb20gXCJAbG9ndGFwZS9sb2d0YXBlXCI7XG5pbXBvcnQgeyB0eXBlIExvZ2dlciB9IGZyb20gXCJAbG9ndGFwZS9sb2d0YXBlXCI7XG5pbXBvcnQgeyB0eXBlIEtuZXggfSBmcm9tIFwia25leFwiO1xuXG5pbXBvcnQgeyB0eXBlIERCUHJlc2V0IH0gZnJvbSBcIi4uL2RhdGFiYXNlL2RiXCI7XG4vLyBTdGF0aWMgaW1wb3J0cyBrZXB0IGZvciBub24tYXN5bmMgZnVuY3Rpb25zIChnZXREQiwgZ2V0VXBzZXJ0QnVpbGRlcilcbmltcG9ydCB7IERCIH0gZnJvbSBcIi4uL2RhdGFiYXNlL2RiXCI7XG5pbXBvcnQgeyBVcHNlcnRCdWlsZGVyIH0gZnJvbSBcIi4uL2RhdGFiYXNlL3Vwc2VydC1idWlsZGVyXCI7XG5pbXBvcnQgeyBjb252ZXJ0RG9tYWluVG9DYXRlZ29yeSB9IGZyb20gXCIuLi9sb2dnZXIvY2F0ZWdvcnlcIjtcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEJhc2VGcmFtZUNsYXNzIHtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGxvZ2dlcjogTG9nZ2VyO1xuXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyByZWFkb25seSBmcmFtZU5hbWU6IHN0cmluZyA9IHRoaXMuY29uc3RydWN0b3IubmFtZSkge1xuICAgIHRoaXMubG9nZ2VyID0gZ2V0TG9nZ2VyKGNvbnZlcnREb21haW5Ub0NhdGVnb3J5KHRoaXMuZnJhbWVOYW1lLCBcImZyYW1lXCIpKTtcbiAgfVxuXG4gIGdldERCKHdoaWNoOiBEQlByZXNldCk6IEtuZXgge1xuICAgIHJldHVybiBEQi5nZXREQih3aGljaCk7XG4gIH1cblxuICBnZXRVcHNlcnRCdWlsZGVyKCkge1xuICAgIHJldHVybiBuZXcgVXBzZXJ0QnVpbGRlcigpO1xuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztVQU1vQztzQkFDdUI7Z0JBQ0U7Q0FFdkMsaUJBQXRCLE1BQXFDO0VBQ25DLEFBQW1CO0VBRW5CLFlBQVksQUFBZ0JBLFlBQW9CLEtBQUssWUFBWSxNQUFNO0dBQTNDO0FBQzFCLFFBQUssU0FBUyxVQUFVLHdCQUF3QixLQUFLLFdBQVcsUUFBUSxDQUFDOztFQUczRSxNQUFNLE9BQXVCO0FBQzNCLFVBQU8sR0FBRyxNQUFNLE1BQU07O0VBR3hCLG1CQUFtQjtBQUNqQixVQUFPLElBQUksZUFBZSJ9
30
+
31
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1mcmFtZS5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi9zcmMvYXBpL2Jhc2UtZnJhbWUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZ2V0TG9nZ2VyIH0gZnJvbSBcIkBsb2d0YXBlL2xvZ3RhcGVcIjtcbmltcG9ydCB7IHR5cGUgTG9nZ2VyIH0gZnJvbSBcIkBsb2d0YXBlL2xvZ3RhcGVcIjtcbmltcG9ydCB7IHR5cGUgS25leCB9IGZyb20gXCJrbmV4XCI7XG5cbmltcG9ydCB7IHR5cGUgREJQcmVzZXQgfSBmcm9tIFwiLi4vZGF0YWJhc2UvZGJcIjtcbi8vIFN0YXRpYyBpbXBvcnRzIGtlcHQgZm9yIG5vbi1hc3luYyBmdW5jdGlvbnMgKGdldERCLCBnZXRVcHNlcnRCdWlsZGVyKVxuaW1wb3J0IHsgREIgfSBmcm9tIFwiLi4vZGF0YWJhc2UvZGJcIjtcbmltcG9ydCB7IFVwc2VydEJ1aWxkZXIgfSBmcm9tIFwiLi4vZGF0YWJhc2UvdXBzZXJ0LWJ1aWxkZXJcIjtcbmltcG9ydCB7IGNvbnZlcnREb21haW5Ub0NhdGVnb3J5IH0gZnJvbSBcIi4uL2xvZ2dlci9jYXRlZ29yeVwiO1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQmFzZUZyYW1lQ2xhc3Mge1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgbG9nZ2VyOiBMb2dnZXI7XG5cbiAgY29uc3RydWN0b3IocHVibGljIHJlYWRvbmx5IGZyYW1lTmFtZTogc3RyaW5nID0gdGhpcy5jb25zdHJ1Y3Rvci5uYW1lKSB7XG4gICAgdGhpcy5sb2dnZXIgPSBnZXRMb2dnZXIoY29udmVydERvbWFpblRvQ2F0ZWdvcnkodGhpcy5mcmFtZU5hbWUsIFwiZnJhbWVcIikpO1xuICB9XG5cbiAgZ2V0REIod2hpY2g6IERCUHJlc2V0KTogS25leCB7XG4gICAgcmV0dXJuIERCLmdldERCKHdoaWNoKTtcbiAgfVxuXG4gIGdldFVwc2VydEJ1aWxkZXIoKSB7XG4gICAgcmV0dXJuIG5ldyBVcHNlcnRCdWlsZGVyKCk7XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7U0FNbUM7cUJBQ3VCO2VBQ0U7Q0FFdEMsaUJBQXRCLE1BQXFDO0VBR1A7RUFGNUI7RUFFQSxZQUFZLFlBQW9DLEtBQUssWUFBWSxNQUFNO0dBQTNDLEtBQUEsWUFBQTtHQUMxQixLQUFLLFNBQVMsVUFBVSx3QkFBd0IsS0FBSyxXQUFXLE9BQU8sQ0FBQztFQUMxRTtFQUVBLE1BQU0sT0FBdUI7R0FDM0IsT0FBTyxHQUFHLE1BQU0sS0FBSztFQUN2QjtFQUVBLG1CQUFtQjtHQUNqQixPQUFPLElBQUksY0FBYztFQUMzQjtDQUNGIn0=
@@ -1,7 +1,6 @@
1
- import { __esmMin } from "../_virtual/rolldown_runtime.js";
1
+ import { __esmMin } from "../_virtual/_rolldown/runtime.js";
2
2
  import { z as z$1 } from "zod";
3
3
  import assert from "assert";
4
-
5
4
  //#region src/api/caster.ts
6
5
  function isNumberType(zodType) {
7
6
  return zodType instanceof z$1.ZodNumber;
@@ -10,43 +9,27 @@ function isNullOrOptional(zodType) {
10
9
  return zodType instanceof z$1.ZodNullable || zodType instanceof z$1.ZodOptional;
11
10
  }
12
11
  function isZodNumberAnyway(zodType) {
13
- if (isNumberType(zodType)) {
14
- return true;
15
- }
16
- if (isNullOrOptional(zodType) && isNumberType(zodType.def.innerType)) {
17
- return true;
18
- }
12
+ if (isNumberType(zodType)) return true;
13
+ if (isNullOrOptional(zodType) && isNumberType(zodType.def.innerType)) return true;
19
14
  return false;
20
15
  }
21
16
  function caster(zodType, raw) {
22
- if (isZodNumberAnyway(zodType) && typeof raw === "string") {
23
- return Number(raw);
24
- } else if (zodType instanceof z$1.ZodUnion && zodType.options.some((opt) => isZodNumberAnyway(opt))) {
25
- if (Array.isArray(raw)) {
26
- const numType = zodType.options.find((opt) => isNumberType(opt));
27
- assert(numType !== undefined);
28
- return raw.map((elem) => caster(numType, elem));
29
- } else {
30
- return Number(raw);
31
- }
32
- } else if (zodType instanceof z$1.ZodBoolean && (raw === "true" || raw === "false")) {
33
- return raw === "true";
34
- } else if (raw !== null && Array.isArray(raw) && zodType instanceof z$1.ZodArray) {
35
- return raw.map((elem) => caster(zodType.element, elem));
36
- } else if (zodType instanceof z$1.ZodObject && typeof raw === "object" && raw !== null) {
37
- return Object.keys(raw).reduce((r, rawKey) => {
38
- r[rawKey] = caster(zodType.shape[rawKey], raw[rawKey]);
39
- return r;
40
- }, {});
41
- } else if (zodType instanceof z$1.ZodOptional) {
42
- return caster(zodType.def.innerType, raw);
43
- } else if (zodType instanceof z$1.ZodNullable) {
44
- return caster(zodType.def.innerType, raw);
45
- } else if (zodType instanceof z$1.ZodDate && raw !== null && raw !== undefined && new Date(raw).toString() !== "Invalid Date") {
46
- return new Date(raw);
47
- } else {
48
- return raw;
49
- }
17
+ if (isZodNumberAnyway(zodType) && typeof raw === "string") return Number(raw);
18
+ else if (zodType instanceof z$1.ZodUnion && zodType.options.some((opt) => isZodNumberAnyway(opt))) if (Array.isArray(raw)) {
19
+ const numType = zodType.options.find((opt) => isNumberType(opt));
20
+ assert(numType !== void 0);
21
+ return raw.map((elem) => caster(numType, elem));
22
+ } else return Number(raw);
23
+ else if (zodType instanceof z$1.ZodBoolean && (raw === "true" || raw === "false")) return raw === "true";
24
+ else if (raw !== null && Array.isArray(raw) && zodType instanceof z$1.ZodArray) return raw.map((elem) => caster(zodType.element, elem));
25
+ else if (zodType instanceof z$1.ZodObject && typeof raw === "object" && raw !== null) return Object.keys(raw).reduce((r, rawKey) => {
26
+ r[rawKey] = caster(zodType.shape[rawKey], raw[rawKey]);
27
+ return r;
28
+ }, {});
29
+ else if (zodType instanceof z$1.ZodOptional) return caster(zodType.def.innerType, raw);
30
+ else if (zodType instanceof z$1.ZodNullable) return caster(zodType.def.innerType, raw);
31
+ else if (zodType instanceof z$1.ZodDate && raw !== null && raw !== void 0 && new Date(raw).toString() !== "Invalid Date") return new Date(raw);
32
+ else return raw;
50
33
  }
51
34
  function fastifyCaster(schema) {
52
35
  return z$1.preprocess((raw) => {
@@ -54,8 +37,8 @@ function fastifyCaster(schema) {
54
37
  }, schema);
55
38
  }
56
39
  var init_caster = __esmMin((() => {}));
57
-
58
40
  //#endregion
59
41
  init_caster();
60
42
  export { caster, fastifyCaster, init_caster };
61
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FzdGVyLmpzIiwibmFtZXMiOlsieiJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hcGkvY2FzdGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhc3NlcnQgZnJvbSBcImFzc2VydFwiO1xuXG5pbXBvcnQgeyB6IH0gZnJvbSBcInpvZFwiO1xuaW1wb3J0IHsgdHlwZSAkWm9kVHlwZSB9IGZyb20gXCJ6b2QvdjQvY29yZVwiO1xuXG5mdW5jdGlvbiBpc051bWJlclR5cGUoem9kVHlwZTogJFpvZFR5cGUpOiB6b2RUeXBlIGlzIHouWm9kTnVtYmVyIHtcbiAgcmV0dXJuIHpvZFR5cGUgaW5zdGFuY2VvZiB6LlpvZE51bWJlcjtcbn1cblxuZnVuY3Rpb24gaXNOdWxsT3JPcHRpb25hbCh6b2RUeXBlOiAkWm9kVHlwZSk6IHpvZFR5cGUgaXMgei5ab2ROdWxsYWJsZSB8IHouWm9kT3B0aW9uYWwge1xuICByZXR1cm4gem9kVHlwZSBpbnN0YW5jZW9mIHouWm9kTnVsbGFibGUgfHwgem9kVHlwZSBpbnN0YW5jZW9mIHouWm9kT3B0aW9uYWw7XG59XG5cbi8vIG9wdGlvbmFsLCBudWxsYWJsZSDrrLTqtIDtlZjqsowgWm9kTnVtYmVyIOyytO2BrFxuZnVuY3Rpb24gaXNab2ROdW1iZXJBbnl3YXkoem9kVHlwZTogJFpvZFR5cGUpIHtcbiAgaWYgKGlzTnVtYmVyVHlwZSh6b2RUeXBlKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLy8gWm9kTnVsbGFibGUg65iQ64qUIFpvZE9wdGlvbmFs7J28IOuVjFxuICBpZiAoaXNOdWxsT3JPcHRpb25hbCh6b2RUeXBlKSAmJiBpc051bWJlclR5cGUoem9kVHlwZS5kZWYuaW5uZXJUeXBlKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG4vLyBab2RUeXBl7J2EIOydtOyaqe2VtCByYXfrpbwgVHlwZSBDb2VyY2luZ1xuLy8gb3hsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgLS0g7LqQ7Iqk7YyF7JeQ64qUIGFueeqwgCDtlYTsmpTtlaguXG5leHBvcnQgZnVuY3Rpb24gY2FzdGVyKHpvZFR5cGU6ICRab2RUeXBlLCByYXc6IGFueSk6IGFueSB7XG4gIGlmIChpc1pvZE51bWJlckFueXdheSh6b2RUeXBlKSAmJiB0eXBlb2YgcmF3ID09PSBcInN0cmluZ1wiKSB7XG4gICAgLy8gbnVtYmVyXG4gICAgcmV0dXJuIE51bWJlcihyYXcpO1xuICB9IGVsc2UgaWYgKFxuICAgIHpvZFR5cGUgaW5zdGFuY2VvZiB6LlpvZFVuaW9uICYmXG4gICAgem9kVHlwZS5vcHRpb25zLnNvbWUoKG9wdCkgPT4gaXNab2ROdW1iZXJBbnl3YXkob3B0KSlcbiAgKSB7XG4gICAgLy8gekFycmF5YWJsZSBOdW1iZXIg7LyA7J207IqkIOyymOumrFxuICAgIGlmIChBcnJheS5pc0FycmF5KHJhdykpIHtcbiAgICAgIGNvbnN0IG51bVR5cGUgPSB6b2RUeXBlLm9wdGlvbnMuZmluZCgob3B0KSA9PiBpc051bWJlclR5cGUob3B0KSk7XG4gICAgICBhc3NlcnQobnVtVHlwZSAhPT0gdW5kZWZpbmVkKTtcbiAgICAgIC8vIG94bGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55IC0tIOy6kOyKpO2MheyXkOuKlCBhbnnqsIAg7ZWE7JqU7ZWoLlxuICAgICAgcmV0dXJuIHJhdy5tYXAoKGVsZW06IGFueSkgPT4gY2FzdGVyKG51bVR5cGUsIGVsZW0pKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIE51bWJlcihyYXcpO1xuICAgIH1cbiAgfSBlbHNlIGlmICh6b2RUeXBlIGluc3RhbmNlb2Ygei5ab2RCb29sZWFuICYmIChyYXcgPT09IFwidHJ1ZVwiIHx8IHJhdyA9PT0gXCJmYWxzZVwiKSkge1xuICAgIC8vIGJvb2xlYW5cbiAgICByZXR1cm4gcmF3ID09PSBcInRydWVcIjtcbiAgfSBlbHNlIGlmIChyYXcgIT09IG51bGwgJiYgQXJyYXkuaXNBcnJheShyYXcpICYmIHpvZFR5cGUgaW5zdGFuY2VvZiB6LlpvZEFycmF5KSB7XG4gICAgLy8gYXJyYXlcbiAgICAvLyBveGxpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAtLSDsupDsiqTtjIXsl5DripQgYW556rCAIO2VhOyalO2VqC5cbiAgICByZXR1cm4gcmF3Lm1hcCgoZWxlbTogYW55KSA9PiBjYXN0ZXIoem9kVHlwZS5lbGVtZW50LCBlbGVtKSk7XG4gIH0gZWxzZSBpZiAoem9kVHlwZSBpbnN0YW5jZW9mIHouWm9kT2JqZWN0ICYmIHR5cGVvZiByYXcgPT09IFwib2JqZWN0XCIgJiYgcmF3ICE9PSBudWxsKSB7XG4gICAgLy8gb2JqZWN0XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKHJhdykucmVkdWNlKFxuICAgICAgKHIsIHJhd0tleSkgPT4ge1xuICAgICAgICByW3Jhd0tleV0gPSBjYXN0ZXIoem9kVHlwZS5zaGFwZVtyYXdLZXldLCByYXdbcmF3S2V5XSk7XG4gICAgICAgIHJldHVybiByO1xuICAgICAgfSxcbiAgICAgIHt9IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICAgICk7XG4gIH0gZWxzZSBpZiAoem9kVHlwZSBpbnN0YW5jZW9mIHouWm9kT3B0aW9uYWwpIHtcbiAgICAvLyBvcHRpb25hbFxuICAgIHJldHVybiBjYXN0ZXIoem9kVHlwZS5kZWYuaW5uZXJUeXBlLCByYXcpO1xuICB9IGVsc2UgaWYgKHpvZFR5cGUgaW5zdGFuY2VvZiB6LlpvZE51bGxhYmxlKSB7XG4gICAgLy8gbnVsbGFibGVcbiAgICByZXR1cm4gY2FzdGVyKHpvZFR5cGUuZGVmLmlubmVyVHlwZSwgcmF3KTtcbiAgfSBlbHNlIGlmIChcbiAgICB6b2RUeXBlIGluc3RhbmNlb2Ygei5ab2REYXRlICYmXG4gICAgcmF3ICE9PSBudWxsICYmXG4gICAgcmF3ICE9PSB1bmRlZmluZWQgJiZcbiAgICBuZXcgRGF0ZShyYXcpLnRvU3RyaW5nKCkgIT09IFwiSW52YWxpZCBEYXRlXCJcbiAgKSB7XG4gICAgLy8gZGF0ZVxuICAgIHJldHVybiBuZXcgRGF0ZShyYXcpO1xuICB9IGVsc2Uge1xuICAgIC8vIOuCmOuouOyngOuKlCDsspjrpqwg7JWI7ZWoXG4gICAgcmV0dXJuIHJhdztcbiAgfVxufVxuXG4vLyBveGxpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAtLSDsupDsiqTtjIXsl5DripQgYW556rCAIO2VhOyalO2VqC5cbmV4cG9ydCBmdW5jdGlvbiBmYXN0aWZ5Q2FzdGVyKHNjaGVtYTogei5ab2RPYmplY3Q8YW55Pikge1xuICAvLyBveGxpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAtLSDsupDsiqTtjIXsl5DripQgYW556rCAIO2VhOyalO2VqC5cbiAgcmV0dXJuIHoucHJlcHJvY2VzcygocmF3OiBhbnkpID0+IHtcbiAgICByZXR1cm4gY2FzdGVyKHNjaGVtYSwgcmF3KTtcbiAgfSwgc2NoZW1hKTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFLQSxTQUFTLGFBQWEsU0FBMkM7QUFDL0QsUUFBTyxtQkFBbUJBLElBQUU7O0FBRzlCLFNBQVMsaUJBQWlCLFNBQTZEO0FBQ3JGLFFBQU8sbUJBQW1CQSxJQUFFLGVBQWUsbUJBQW1CQSxJQUFFOztBQUlsRSxTQUFTLGtCQUFrQixTQUFtQjtBQUM1QyxLQUFJLGFBQWEsUUFBUSxFQUFFO0FBQ3pCLFNBQU87O0FBSVQsS0FBSSxpQkFBaUIsUUFBUSxJQUFJLGFBQWEsUUFBUSxJQUFJLFVBQVUsRUFBRTtBQUNwRSxTQUFPOztBQUdULFFBQU87O0FBS1QsU0FBZ0IsT0FBTyxTQUFtQixLQUFlO0FBQ3ZELEtBQUksa0JBQWtCLFFBQVEsSUFBSSxPQUFPLFFBQVEsVUFBVTtBQUV6RCxTQUFPLE9BQU8sSUFBSTtZQUVsQixtQkFBbUJBLElBQUUsWUFDckIsUUFBUSxRQUFRLE1BQU0sUUFBUSxrQkFBa0IsSUFBSSxDQUFDLEVBQ3JEO0FBRUEsTUFBSSxNQUFNLFFBQVEsSUFBSSxFQUFFO0dBQ3RCLE1BQU0sVUFBVSxRQUFRLFFBQVEsTUFBTSxRQUFRLGFBQWEsSUFBSSxDQUFDO0FBQ2hFLFVBQU8sWUFBWSxVQUFVO0FBRTdCLFVBQU8sSUFBSSxLQUFLLFNBQWMsT0FBTyxTQUFTLEtBQUssQ0FBQztTQUMvQztBQUNMLFVBQU8sT0FBTyxJQUFJOztZQUVYLG1CQUFtQkEsSUFBRSxlQUFlLFFBQVEsVUFBVSxRQUFRLFVBQVU7QUFFakYsU0FBTyxRQUFRO1lBQ04sUUFBUSxRQUFRLE1BQU0sUUFBUSxJQUFJLElBQUksbUJBQW1CQSxJQUFFLFVBQVU7QUFHOUUsU0FBTyxJQUFJLEtBQUssU0FBYyxPQUFPLFFBQVEsU0FBUyxLQUFLLENBQUM7WUFDbkQsbUJBQW1CQSxJQUFFLGFBQWEsT0FBTyxRQUFRLFlBQVksUUFBUSxNQUFNO0FBRXBGLFNBQU8sT0FBTyxLQUFLLElBQUksQ0FBQyxRQUNyQixHQUFHLFdBQVc7QUFDYixLQUFFLFVBQVUsT0FBTyxRQUFRLE1BQU0sU0FBUyxJQUFJLFFBQVE7QUFDdEQsVUFBTztLQUVULEVBQUUsQ0FDSDtZQUNRLG1CQUFtQkEsSUFBRSxhQUFhO0FBRTNDLFNBQU8sT0FBTyxRQUFRLElBQUksV0FBVyxJQUFJO1lBQ2hDLG1CQUFtQkEsSUFBRSxhQUFhO0FBRTNDLFNBQU8sT0FBTyxRQUFRLElBQUksV0FBVyxJQUFJO1lBRXpDLG1CQUFtQkEsSUFBRSxXQUNyQixRQUFRLFFBQ1IsUUFBUSxhQUNSLElBQUksS0FBSyxJQUFJLENBQUMsVUFBVSxLQUFLLGdCQUM3QjtBQUVBLFNBQU8sSUFBSSxLQUFLLElBQUk7UUFDZjtBQUVMLFNBQU87OztBQUtYLFNBQWdCLGNBQWMsUUFBMEI7QUFFdEQsUUFBT0EsSUFBRSxZQUFZLFFBQWE7QUFDaEMsU0FBTyxPQUFPLFFBQVEsSUFBSTtJQUN6QixPQUFPIn0=
43
+
44
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FzdGVyLmpzIiwibmFtZXMiOlsieiJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hcGkvY2FzdGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhc3NlcnQgZnJvbSBcImFzc2VydFwiO1xuXG5pbXBvcnQgeyB6IH0gZnJvbSBcInpvZFwiO1xuaW1wb3J0IHsgdHlwZSAkWm9kVHlwZSB9IGZyb20gXCJ6b2QvdjQvY29yZVwiO1xuXG5mdW5jdGlvbiBpc051bWJlclR5cGUoem9kVHlwZTogJFpvZFR5cGUpOiB6b2RUeXBlIGlzIHouWm9kTnVtYmVyIHtcbiAgcmV0dXJuIHpvZFR5cGUgaW5zdGFuY2VvZiB6LlpvZE51bWJlcjtcbn1cblxuZnVuY3Rpb24gaXNOdWxsT3JPcHRpb25hbCh6b2RUeXBlOiAkWm9kVHlwZSk6IHpvZFR5cGUgaXMgei5ab2ROdWxsYWJsZSB8IHouWm9kT3B0aW9uYWwge1xuICByZXR1cm4gem9kVHlwZSBpbnN0YW5jZW9mIHouWm9kTnVsbGFibGUgfHwgem9kVHlwZSBpbnN0YW5jZW9mIHouWm9kT3B0aW9uYWw7XG59XG5cbi8vIG9wdGlvbmFsLCBudWxsYWJsZSDrrLTqtIDtlZjqsowgWm9kTnVtYmVyIOyytO2BrFxuZnVuY3Rpb24gaXNab2ROdW1iZXJBbnl3YXkoem9kVHlwZTogJFpvZFR5cGUpIHtcbiAgaWYgKGlzTnVtYmVyVHlwZSh6b2RUeXBlKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLy8gWm9kTnVsbGFibGUg65iQ64qUIFpvZE9wdGlvbmFs7J28IOuVjFxuICBpZiAoaXNOdWxsT3JPcHRpb25hbCh6b2RUeXBlKSAmJiBpc051bWJlclR5cGUoem9kVHlwZS5kZWYuaW5uZXJUeXBlKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG4vLyBab2RUeXBl7J2EIOydtOyaqe2VtCByYXfrpbwgVHlwZSBDb2VyY2luZ1xuLy8gb3hsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgLS0g7LqQ7Iqk7YyF7JeQ64qUIGFueeqwgCDtlYTsmpTtlaguXG5leHBvcnQgZnVuY3Rpb24gY2FzdGVyKHpvZFR5cGU6ICRab2RUeXBlLCByYXc6IGFueSk6IGFueSB7XG4gIGlmIChpc1pvZE51bWJlckFueXdheSh6b2RUeXBlKSAmJiB0eXBlb2YgcmF3ID09PSBcInN0cmluZ1wiKSB7XG4gICAgLy8gbnVtYmVyXG4gICAgcmV0dXJuIE51bWJlcihyYXcpO1xuICB9IGVsc2UgaWYgKFxuICAgIHpvZFR5cGUgaW5zdGFuY2VvZiB6LlpvZFVuaW9uICYmXG4gICAgem9kVHlwZS5vcHRpb25zLnNvbWUoKG9wdCkgPT4gaXNab2ROdW1iZXJBbnl3YXkob3B0KSlcbiAgKSB7XG4gICAgLy8gekFycmF5YWJsZSBOdW1iZXIg7LyA7J207IqkIOyymOumrFxuICAgIGlmIChBcnJheS5pc0FycmF5KHJhdykpIHtcbiAgICAgIGNvbnN0IG51bVR5cGUgPSB6b2RUeXBlLm9wdGlvbnMuZmluZCgob3B0KSA9PiBpc051bWJlclR5cGUob3B0KSk7XG4gICAgICBhc3NlcnQobnVtVHlwZSAhPT0gdW5kZWZpbmVkKTtcbiAgICAgIC8vIG94bGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55IC0tIOy6kOyKpO2MheyXkOuKlCBhbnnqsIAg7ZWE7JqU7ZWoLlxuICAgICAgcmV0dXJuIHJhdy5tYXAoKGVsZW06IGFueSkgPT4gY2FzdGVyKG51bVR5cGUsIGVsZW0pKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIE51bWJlcihyYXcpO1xuICAgIH1cbiAgfSBlbHNlIGlmICh6b2RUeXBlIGluc3RhbmNlb2Ygei5ab2RCb29sZWFuICYmIChyYXcgPT09IFwidHJ1ZVwiIHx8IHJhdyA9PT0gXCJmYWxzZVwiKSkge1xuICAgIC8vIGJvb2xlYW5cbiAgICByZXR1cm4gcmF3ID09PSBcInRydWVcIjtcbiAgfSBlbHNlIGlmIChyYXcgIT09IG51bGwgJiYgQXJyYXkuaXNBcnJheShyYXcpICYmIHpvZFR5cGUgaW5zdGFuY2VvZiB6LlpvZEFycmF5KSB7XG4gICAgLy8gYXJyYXlcbiAgICAvLyBveGxpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAtLSDsupDsiqTtjIXsl5DripQgYW556rCAIO2VhOyalO2VqC5cbiAgICByZXR1cm4gcmF3Lm1hcCgoZWxlbTogYW55KSA9PiBjYXN0ZXIoem9kVHlwZS5lbGVtZW50LCBlbGVtKSk7XG4gIH0gZWxzZSBpZiAoem9kVHlwZSBpbnN0YW5jZW9mIHouWm9kT2JqZWN0ICYmIHR5cGVvZiByYXcgPT09IFwib2JqZWN0XCIgJiYgcmF3ICE9PSBudWxsKSB7XG4gICAgLy8gb2JqZWN0XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKHJhdykucmVkdWNlKFxuICAgICAgKHIsIHJhd0tleSkgPT4ge1xuICAgICAgICByW3Jhd0tleV0gPSBjYXN0ZXIoem9kVHlwZS5zaGFwZVtyYXdLZXldLCByYXdbcmF3S2V5XSk7XG4gICAgICAgIHJldHVybiByO1xuICAgICAgfSxcbiAgICAgIHt9IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICAgICk7XG4gIH0gZWxzZSBpZiAoem9kVHlwZSBpbnN0YW5jZW9mIHouWm9kT3B0aW9uYWwpIHtcbiAgICAvLyBvcHRpb25hbFxuICAgIHJldHVybiBjYXN0ZXIoem9kVHlwZS5kZWYuaW5uZXJUeXBlLCByYXcpO1xuICB9IGVsc2UgaWYgKHpvZFR5cGUgaW5zdGFuY2VvZiB6LlpvZE51bGxhYmxlKSB7XG4gICAgLy8gbnVsbGFibGVcbiAgICByZXR1cm4gY2FzdGVyKHpvZFR5cGUuZGVmLmlubmVyVHlwZSwgcmF3KTtcbiAgfSBlbHNlIGlmIChcbiAgICB6b2RUeXBlIGluc3RhbmNlb2Ygei5ab2REYXRlICYmXG4gICAgcmF3ICE9PSBudWxsICYmXG4gICAgcmF3ICE9PSB1bmRlZmluZWQgJiZcbiAgICBuZXcgRGF0ZShyYXcpLnRvU3RyaW5nKCkgIT09IFwiSW52YWxpZCBEYXRlXCJcbiAgKSB7XG4gICAgLy8gZGF0ZVxuICAgIHJldHVybiBuZXcgRGF0ZShyYXcpO1xuICB9IGVsc2Uge1xuICAgIC8vIOuCmOuouOyngOuKlCDsspjrpqwg7JWI7ZWoXG4gICAgcmV0dXJuIHJhdztcbiAgfVxufVxuXG4vLyBveGxpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAtLSDsupDsiqTtjIXsl5DripQgYW556rCAIO2VhOyalO2VqC5cbmV4cG9ydCBmdW5jdGlvbiBmYXN0aWZ5Q2FzdGVyKHNjaGVtYTogei5ab2RPYmplY3Q8YW55Pikge1xuICAvLyBveGxpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAtLSDsupDsiqTtjIXsl5DripQgYW556rCAIO2VhOyalO2VqC5cbiAgcmV0dXJuIHoucHJlcHJvY2VzcygocmF3OiBhbnkpID0+IHtcbiAgICByZXR1cm4gY2FzdGVyKHNjaGVtYSwgcmF3KTtcbiAgfSwgc2NoZW1hKTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7OztBQUtBLFNBQVMsYUFBYSxTQUEyQztDQUMvRCxPQUFPLG1CQUFtQkEsSUFBRTtBQUM5QjtBQUVBLFNBQVMsaUJBQWlCLFNBQTZEO0NBQ3JGLE9BQU8sbUJBQW1CQSxJQUFFLGVBQWUsbUJBQW1CQSxJQUFFO0FBQ2xFO0FBR0EsU0FBUyxrQkFBa0IsU0FBbUI7Q0FDNUMsSUFBSSxhQUFhLE9BQU8sR0FDdEIsT0FBTztDQUlULElBQUksaUJBQWlCLE9BQU8sS0FBSyxhQUFhLFFBQVEsSUFBSSxTQUFTLEdBQ2pFLE9BQU87Q0FHVCxPQUFPO0FBQ1Q7QUFJQSxTQUFnQixPQUFPLFNBQW1CLEtBQWU7Q0FDdkQsSUFBSSxrQkFBa0IsT0FBTyxLQUFLLE9BQU8sUUFBUSxVQUUvQyxPQUFPLE9BQU8sR0FBRztNQUNaLElBQ0wsbUJBQW1CQSxJQUFFLFlBQ3JCLFFBQVEsUUFBUSxNQUFNLFFBQVEsa0JBQWtCLEdBQUcsQ0FBQyxHQUdwRCxJQUFJLE1BQU0sUUFBUSxHQUFHLEdBQUc7RUFDdEIsTUFBTSxVQUFVLFFBQVEsUUFBUSxNQUFNLFFBQVEsYUFBYSxHQUFHLENBQUM7RUFDL0QsT0FBTyxZQUFZLE1BQVM7RUFFNUIsT0FBTyxJQUFJLEtBQUssU0FBYyxPQUFPLFNBQVMsSUFBSSxDQUFDO0NBQ3JELE9BQ0UsT0FBTyxPQUFPLEdBQUc7TUFFZCxJQUFJLG1CQUFtQkEsSUFBRSxlQUFlLFFBQVEsVUFBVSxRQUFRLFVBRXZFLE9BQU8sUUFBUTtNQUNWLElBQUksUUFBUSxRQUFRLE1BQU0sUUFBUSxHQUFHLEtBQUssbUJBQW1CQSxJQUFFLFVBR3BFLE9BQU8sSUFBSSxLQUFLLFNBQWMsT0FBTyxRQUFRLFNBQVMsSUFBSSxDQUFDO01BQ3RELElBQUksbUJBQW1CQSxJQUFFLGFBQWEsT0FBTyxRQUFRLFlBQVksUUFBUSxNQUU5RSxPQUFPLE9BQU8sS0FBSyxHQUFHLENBQUMsQ0FBQyxRQUNyQixHQUFHLFdBQVc7RUFDYixFQUFFLFVBQVUsT0FBTyxRQUFRLE1BQU0sU0FBUyxJQUFJLE9BQU87RUFDckQsT0FBTztDQUNULEdBQ0EsQ0FBQyxDQUNIO01BQ0ssSUFBSSxtQkFBbUJBLElBQUUsYUFFOUIsT0FBTyxPQUFPLFFBQVEsSUFBSSxXQUFXLEdBQUc7TUFDbkMsSUFBSSxtQkFBbUJBLElBQUUsYUFFOUIsT0FBTyxPQUFPLFFBQVEsSUFBSSxXQUFXLEdBQUc7TUFDbkMsSUFDTCxtQkFBbUJBLElBQUUsV0FDckIsUUFBUSxRQUNSLFFBQVEsVUFDUixJQUFJLEtBQUssR0FBRyxDQUFDLENBQUMsU0FBUyxNQUFNLGdCQUc3QixPQUFPLElBQUksS0FBSyxHQUFHO01BR25CLE9BQU87QUFFWDtBQUdBLFNBQWdCLGNBQWMsUUFBMEI7Q0FFdEQsT0FBT0EsSUFBRSxZQUFZLFFBQWE7RUFDaEMsT0FBTyxPQUFPLFFBQVEsR0FBRztDQUMzQixHQUFHLE1BQU07QUFDWCJ9
@@ -1,7 +1,6 @@
1
- import { __esmMin } from "../_virtual/rolldown_runtime.js";
1
+ import { __esmMin } from "../_virtual/_rolldown/runtime.js";
2
2
  import { ApiParamType, init_types } from "../types/types.js";
3
3
  import { z as z$1 } from "zod";
4
-
5
4
  //#region src/api/code-converters.ts
6
5
  /**
7
6
  * code-converters는 API 타입 정의들을 Zod 객체나 TypeScript 코드로 변환하는 함수들을 제공합니다.
@@ -27,11 +26,8 @@ import { z as z$1 } from "zod";
27
26
  * Promise가 아닌 경우 원본 타입을 그대로 반환합니다.
28
27
  */
29
28
  function unwrapPromiseOnce(paramType) {
30
- if (ApiParamType.isPromise(paramType)) {
31
- return paramType.args?.[0];
32
- } else {
33
- return paramType;
34
- }
29
+ if (ApiParamType.isPromise(paramType)) return paramType.args?.[0];
30
+ else return paramType;
35
31
  }
36
32
  /**
37
33
  * ApiParamType을 Zod 타입 인스턴스로 변환합니다.
@@ -48,76 +44,44 @@ function getZodTypeFromApiParamType(paramType, references) {
48
44
  switch (advType.t) {
49
45
  case "string-literal":
50
46
  case "numeric-literal": return z$1.literal(advType.value);
51
- case "object": {
52
- const objType = paramType;
53
- return getZodObjectFromApiParams(objType.props);
54
- }
47
+ case "object": return getZodObjectFromApiParams(paramType.props);
55
48
  case "array": {
56
49
  const arrType = paramType;
57
50
  return z$1.array(getZodTypeFromApiParamType(arrType.elementsType, references));
58
51
  }
59
52
  case "ref": {
60
53
  const refType = paramType;
61
- if (refType.id === "Date") {
62
- return z$1.date();
63
- }
54
+ if (refType.id === "Date") return z$1.date();
64
55
  if (["Pick", "Omit"].includes(refType.id)) {
65
- if (refType.args?.length !== 2) {
66
- throw new Error(`잘못된 ${refType.id}`);
67
- }
56
+ if (refType.args?.length !== 2) throw new Error(`잘못된 ${refType.id}`);
68
57
  const [obj, literalOrUnion] = refType.args.map((arg) => getZodTypeFromApiParamType(arg, references));
69
58
  let keys = [];
70
- if (literalOrUnion instanceof z$1.ZodUnion) {
71
- keys = literalOrUnion.def.options.map((option) => option.def.values[0]);
72
- } else {
73
- keys = literalOrUnion.def.values;
74
- }
59
+ if (literalOrUnion instanceof z$1.ZodUnion) keys = literalOrUnion.def.options.map((option) => option.def.values[0]);
60
+ else keys = literalOrUnion.def.values;
75
61
  const keyRecord = Object.fromEntries(keys.map((key) => [key, true]));
76
62
  if (refType.id === "Pick") {
77
- if (obj.pick) {
78
- return obj.pick(keyRecord);
79
- }
80
- } else {
81
- if (obj.omit) {
82
- return obj.omit(keyRecord);
83
- }
84
- }
63
+ if (obj.pick) return obj.pick(keyRecord);
64
+ } else if (obj.omit) return obj.omit(keyRecord);
85
65
  }
86
66
  if (["Partial"].includes(refType.id)) {
87
- if (refType.args?.length !== 1) {
88
- throw new Error(`잘못된 ${refType.id}`);
89
- }
90
- const obj = getZodTypeFromApiParamType(refType.args[0], references);
91
- return obj.partial();
67
+ if (refType.args?.length !== 1) throw new Error(`잘못된 ${refType.id}`);
68
+ return getZodTypeFromApiParamType(refType.args[0], references).partial();
92
69
  }
93
70
  const reference = references[refType.id];
94
- if (reference === undefined) {
95
- return z$1.unknown();
96
- }
71
+ if (reference === void 0) return z$1.unknown();
97
72
  return reference;
98
73
  }
99
74
  case "union": {
100
75
  const unionType = paramType;
101
- if (unionType.types.length === 2 && unionType.types.some((type) => type === "null")) {
102
- if (unionType.types[0] === "null") {
103
- return getZodTypeFromApiParamType(unionType.types[1], references).nullable();
104
- } else {
105
- return getZodTypeFromApiParamType(unionType.types[0], references).nullable();
106
- }
107
- }
76
+ if (unionType.types.length === 2 && unionType.types.some((type) => type === "null")) if (unionType.types[0] === "null") return getZodTypeFromApiParamType(unionType.types[1], references).nullable();
77
+ else return getZodTypeFromApiParamType(unionType.types[0], references).nullable();
108
78
  return z$1.union(unionType.types.map((type) => getZodTypeFromApiParamType(type, references)));
109
79
  }
110
- case "intersection": {
111
- const intersectionType = paramType;
112
- return intersectionType.types.reduce((result, type, index) => {
113
- const resolvedType = getZodTypeFromApiParamType(type, references);
114
- if (index === 0) {
115
- return resolvedType;
116
- } else {
117
- return z$1.intersection(result, resolvedType);
118
- }
119
- }, z$1.unknown());
120
- }
80
+ case "intersection": return paramType.types.reduce((result, type, index) => {
81
+ const resolvedType = getZodTypeFromApiParamType(type, references);
82
+ if (index === 0) return resolvedType;
83
+ else return z$1.intersection(result, resolvedType);
84
+ }, z$1.unknown());
121
85
  case "tuple-type": {
122
86
  const tupleType = paramType;
123
87
  return z$1.tuple(tupleType.elements.map((elem) => getZodTypeFromApiParamType(elem, references)));
@@ -134,9 +98,7 @@ function getZodTypeFromApiParamType(paramType, references) {
134
98
  function getZodObjectFromApiParams(apiParams, references = {}) {
135
99
  return z$1.object(Object.fromEntries(apiParams.map((param) => {
136
100
  let zodType = getZodTypeFromApiParamType(param.type, references);
137
- if (param.optional) {
138
- zodType = zodType.optional();
139
- }
101
+ if (param.optional) zodType = zodType.optional();
140
102
  return [param.name, zodType];
141
103
  })));
142
104
  }
@@ -147,15 +109,12 @@ function getZodObjectFromApiParams(apiParams, references = {}) {
147
109
  */
148
110
  function getZodObjectFromApi(api, references = {}) {
149
111
  if (api.typeParameters?.length > 0) {
150
- for (const typeParam of api.typeParameters) {
151
- if (typeParam.constraint) {
152
- const zodType = getZodTypeFromApiParamType(typeParam.constraint, references);
153
- references[typeParam.id] = zodType;
154
- }
112
+ for (const typeParam of api.typeParameters) if (typeParam.constraint) {
113
+ const zodType = getZodTypeFromApiParamType(typeParam.constraint, references);
114
+ references[typeParam.id] = zodType;
155
115
  }
156
116
  }
157
- const ReqType = getZodObjectFromApiParams(api.parameters.filter((param) => !ApiParamType.isContext(param.type) && !ApiParamType.isRefKnex(param.type) && !(param.optional && param.name.startsWith("_"))), references);
158
- return ReqType;
117
+ return getZodObjectFromApiParams(api.parameters.filter((param) => !ApiParamType.isContext(param.type) && !ApiParamType.isRefKnex(param.type) && !(param.optional && param.name.startsWith("_"))), references);
159
118
  }
160
119
  /**
161
120
  * ApiParamType을 TypeScript 타입 문자열로 변환합니다.
@@ -174,19 +133,13 @@ function apiParamTypeToTsType(paramType, injectImportKeys) {
174
133
  "void",
175
134
  "any",
176
135
  "unknown"
177
- ].includes(paramType)) {
178
- return paramType;
179
- } else if (ApiParamType.isObject(paramType)) {
180
- return `{ ${apiParamToTsCode(paramType.props, injectImportKeys)} }`;
181
- } else if (ApiParamType.isStringLiteral(paramType)) {
182
- return `"${paramType.value}"`;
183
- } else if (ApiParamType.isNumericLiteral(paramType)) {
184
- return String(paramType.value);
185
- } else if (ApiParamType.isUnion(paramType)) {
186
- return paramType.types.map((type) => apiParamTypeToTsType(type, injectImportKeys)).join(" | ");
187
- } else if (ApiParamType.isIntersection(paramType)) {
188
- return paramType.types.map((type) => apiParamTypeToTsType(type, injectImportKeys)).join(" & ");
189
- } else if (ApiParamType.isArray(paramType)) {
136
+ ].includes(paramType)) return paramType;
137
+ else if (ApiParamType.isObject(paramType)) return `{ ${apiParamToTsCode(paramType.props, injectImportKeys)} }`;
138
+ else if (ApiParamType.isStringLiteral(paramType)) return `"${paramType.value}"`;
139
+ else if (ApiParamType.isNumericLiteral(paramType)) return String(paramType.value);
140
+ else if (ApiParamType.isUnion(paramType)) return paramType.types.map((type) => apiParamTypeToTsType(type, injectImportKeys)).join(" | ");
141
+ else if (ApiParamType.isIntersection(paramType)) return paramType.types.map((type) => apiParamTypeToTsType(type, injectImportKeys)).join(" & ");
142
+ else if (ApiParamType.isArray(paramType)) {
190
143
  const elementsType = apiParamTypeToTsType(paramType.elementsType, injectImportKeys);
191
144
  return ApiParamType.isIntersection(paramType.elementsType) || ApiParamType.isUnion(paramType.elementsType) ? `(${elementsType})[]` : `${elementsType}[]`;
192
145
  } else if (ApiParamType.isRef(paramType)) {
@@ -196,23 +149,13 @@ function apiParamTypeToTsType(paramType, injectImportKeys) {
196
149
  "Promise",
197
150
  "Partial",
198
151
  "Date"
199
- ].includes(paramType.id)) {
200
- injectImportKeys.push(paramType.id);
201
- }
202
- if (paramType.args === undefined || paramType.args.length === 0) {
203
- return paramType.id;
204
- } else {
205
- return `${paramType.id}<${paramType.args.map((arg) => apiParamTypeToTsType(arg, injectImportKeys)).join(",")}>`;
206
- }
207
- } else if (ApiParamType.isIndexedAccess(paramType)) {
208
- return `${apiParamTypeToTsType(paramType.object, injectImportKeys)}[${apiParamTypeToTsType(paramType.index, injectImportKeys)}]`;
209
- } else if (ApiParamType.isTupleType(paramType)) {
210
- return `[ ${paramType.elements.map((elem) => apiParamTypeToTsType(elem, injectImportKeys))} ]`;
211
- } else if (ApiParamType.isTypeParam(paramType)) {
212
- return `${paramType.id}${paramType.constraint ? ` extends ${apiParamTypeToTsType(paramType.constraint, injectImportKeys)}` : ""}`;
213
- } else {
214
- throw new Error(`resolve 불가 ApiParamType ${paramType}`);
215
- }
152
+ ].includes(paramType.id)) injectImportKeys.push(paramType.id);
153
+ if (paramType.args === void 0 || paramType.args.length === 0) return paramType.id;
154
+ else return `${paramType.id}<${paramType.args.map((arg) => apiParamTypeToTsType(arg, injectImportKeys)).join(",")}>`;
155
+ } else if (ApiParamType.isIndexedAccess(paramType)) return `${apiParamTypeToTsType(paramType.object, injectImportKeys)}[${apiParamTypeToTsType(paramType.index, injectImportKeys)}]`;
156
+ else if (ApiParamType.isTupleType(paramType)) return `[ ${paramType.elements.map((elem) => apiParamTypeToTsType(elem, injectImportKeys))} ]`;
157
+ else if (ApiParamType.isTypeParam(paramType)) return `${paramType.id}${paramType.constraint ? ` extends ${apiParamTypeToTsType(paramType.constraint, injectImportKeys)}` : ""}`;
158
+ else throw new Error(`resolve 불가 ApiParamType ${paramType}`);
216
159
  }
217
160
  /**
218
161
  * ApiParam 배열을 TypeScript 함수 파라미터 코드로 변환합니다.
@@ -233,8 +176,8 @@ function apiParamToTsCodeAsObject(params, injectImportKeys) {
233
176
  var init_code_converters = __esmMin((() => {
234
177
  init_types();
235
178
  }));
236
-
237
179
  //#endregion
238
180
  init_code_converters();
239
181
  export { apiParamToTsCode, apiParamToTsCodeAsObject, apiParamTypeToTsType, getZodObjectFromApi, getZodObjectFromApiParams, getZodTypeFromApiParamType, init_code_converters, unwrapPromiseOnce };
240
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29kZS1jb252ZXJ0ZXJzLmpzIiwibmFtZXMiOlsieiIsImtleXM6IHN0cmluZ1tdIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FwaS9jb2RlLWNvbnZlcnRlcnMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBjb2RlLWNvbnZlcnRlcnPripQgQVBJIO2DgOyehSDsoJXsnZjrk6TsnYQgWm9kIOqwneyytOuCmCBUeXBlU2NyaXB0IOy9lOuTnOuhnCDrs4DtmZjtlZjripQg7ZWo7IiY65Ok7J2EIOygnOqzte2VqeuLiOuLpC5cbiAqXG4gKiAxLiBBUEkg7Iuc66as7KaI65OkOlxuICogLSBFeHRlbmRlZEFwaSwgQXBpUGFyYW0sIEFwaVBhcmFtVHlwZVxuICogLSBBUEkg66mU7YOA642w7J207YSw66W8IO2RnO2YhO2VmOuKlCDtg4DsnoUg7KCV7J2Y65OkXG4gKlxuICogMi4gWm9kT2JqZWN0IOuzgO2ZmFxuICogLSBBUEkg7YOA7J6FIOygleydmCDihpIgWm9kIO2DgOyehSDsnbjsiqTthLTsiqQgKOufsO2DgOyehCDrsLjrpqzrjbDsnbTshZjsmqkpXG4gKiAtIGdldFpvZFR5cGVGcm9tQXBpUGFyYW1UeXBlIOKGkiBnZXRab2RPYmplY3RGcm9tQXBpUGFyYW1zIOKGkiBnZXRab2RPYmplY3RGcm9tQXBpXG4gKlxuICogMy4gVHNUeXBlRGVmIOuzgO2ZmFxuICogLSBBUEkg7YOA7J6FIOygleydmCDihpIgVHlwZVNjcmlwdCDtg4DsnoUg7L2U65OcIOusuOyekOyXtCAo7L2U65OcIOyDneyEseyaqSlcbiAqIC0gYXBpUGFyYW1UeXBlVG9Uc1R5cGUg4oaSIGFwaVBhcmFtVG9Uc0NvZGUsIGFwaVBhcmFtVG9Uc0NvZGVBc09iamVjdFxuICpcbiAqIOywuOqzoDpcbiAqIC0gWm9kVHlwZURlZiDsg53shLEgKFpvZCDsvZTrk5wg66y47J6Q7Je0KTogem9kLWNvbnZlcnRlci50c+ydmCB6b2RUeXBlVG9ab2RDb2RlIOyCrOyaqVxuICogLSBFbnRpdHlQcm9wIOuzgO2ZmDogem9kLWNvbnZlcnRlci50cyDssLjsobBcbiAqL1xuXG5pbXBvcnQgeyB6IH0gZnJvbSBcInpvZFwiO1xuXG5pbXBvcnQgeyBBcGlQYXJhbVR5cGUgfSBmcm9tIFwiLi4vdHlwZXMvdHlwZXNcIjtcbmltcG9ydCB7IHR5cGUgQXBpUGFyYW0gfSBmcm9tIFwiLi4vdHlwZXMvdHlwZXNcIjtcbmltcG9ydCB7IHR5cGUgRXh0ZW5kZWRBcGkgfSBmcm9tIFwiLi9kZWNvcmF0b3JzXCI7XG5cbi8vIDxhbnk+66W8IOyekOygnO2VmOqzoCwgWm9k7JeQ7IScIOygnOyVve2VmOuKlCDquLDrs7jsoIHsnbggR2VuZXJpYyBUeXBlIFBhcmFtZXRlcuulvCDsgqzsmqntlaguXG50eXBlIEFueVpvZE9iamVjdCA9IHouWm9kT2JqZWN0O1xudHlwZSBBbnlab2RMaXRlcmFsID0gei5ab2RMaXRlcmFsO1xuXG4vKipcbiAqIFByb21pc2Ug7YOA7J6F7J2EIO2VnCDrsogg7Ja4656Y7ZWR7ZWY7JesIOuCtOu2gCDtg4DsnoXsnYQg67CY7ZmY7ZWp64uI64ukLlxuICogUHJvbWlzZeqwgCDslYTri4wg6rK97JqwIOybkOuzuCDtg4DsnoXsnYQg6re464yA66GcIOuwmO2ZmO2VqeuLiOuLpC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVud3JhcFByb21pc2VPbmNlKHBhcmFtVHlwZTogQXBpUGFyYW1UeXBlKSB7XG4gIGlmIChBcGlQYXJhbVR5cGUuaXNQcm9taXNlKHBhcmFtVHlwZSkpIHtcbiAgICByZXR1cm4gcGFyYW1UeXBlLmFyZ3M/LlswXTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gcGFyYW1UeXBlO1xuICB9XG59XG5cbi8qXG4gKiBBUEnrpbwg6rWs7ISx7ZWY64qUIOyalOyGjOuTpOydhCBab2RPYmplY3TroZwg67OA7ZmY7ZWY6riwIOychO2VnCDtlajsiJjrk6TsnoXri4jri6QuXG4gKi9cblxuLyoqXG4gKiBBcGlQYXJhbVR5cGXsnYQgWm9kIO2DgOyehSDsnbjsiqTthLTsiqTroZwg67OA7ZmY7ZWp64uI64ukLlxuICogc3RyaW5nLCBudW1iZXIsIGFycmF5LCB1bmlvbiDrk7Eg66qo65OgIEFwaVBhcmFtVHlwZeydhCDsspjrpqztlZjrqbAsXG4gKiDsiJztmZjssLjsobDqsIAg67Cc7IOd7ZWY64qUIOqyveyasCB6LnVua25vd24oKeycvOuhnCBmYWxsYmFja+2VqeuLiOuLpC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFpvZFR5cGVGcm9tQXBpUGFyYW1UeXBlKFxuICBwYXJhbVR5cGU6IEFwaVBhcmFtVHlwZSxcbiAgcmVmZXJlbmNlczoge1xuICAgIFtpZDogc3RyaW5nXTogei5ab2RUeXBlO1xuICB9LFxuKTogei5ab2RUeXBlIHtcbiAgc3dpdGNoIChwYXJhbVR5cGUpIHtcbiAgICBjYXNlIFwic3RyaW5nXCI6XG4gICAgICByZXR1cm4gei5zdHJpbmcoKTtcbiAgICBjYXNlIFwibnVtYmVyXCI6XG4gICAgICByZXR1cm4gei5udW1iZXIoKTtcbiAgICBjYXNlIFwiYm9vbGVhblwiOlxuICAgICAgcmV0dXJuIHouYm9vbGVhbigpO1xuICAgIGRlZmF1bHQ6IHtcbiAgICAgIGNvbnN0IGFkdlR5cGUgPSBwYXJhbVR5cGUgYXMgeyB0OiBzdHJpbmc7IHZhbHVlPzogc3RyaW5nIHwgbnVtYmVyIH07XG4gICAgICBzd2l0Y2ggKGFkdlR5cGUudCkge1xuICAgICAgICBjYXNlIFwic3RyaW5nLWxpdGVyYWxcIjpcbiAgICAgICAgY2FzZSBcIm51bWVyaWMtbGl0ZXJhbFwiOlxuICAgICAgICAgIHJldHVybiB6LmxpdGVyYWwoYWR2VHlwZS52YWx1ZSk7XG4gICAgICAgIGNhc2UgXCJvYmplY3RcIjoge1xuICAgICAgICAgIGNvbnN0IG9ialR5cGUgPSBwYXJhbVR5cGUgYXMgeyB0OiBzdHJpbmc7IHByb3BzOiBBcGlQYXJhbVtdIH07XG4gICAgICAgICAgcmV0dXJuIGdldFpvZE9iamVjdEZyb21BcGlQYXJhbXMob2JqVHlwZS5wcm9wcyk7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBcImFycmF5XCI6IHtcbiAgICAgICAgICBjb25zdCBhcnJUeXBlID0gcGFyYW1UeXBlIGFzIHtcbiAgICAgICAgICAgIHQ6IHN0cmluZztcbiAgICAgICAgICAgIGVsZW1lbnRzVHlwZTogQXBpUGFyYW1UeXBlO1xuICAgICAgICAgIH07XG4gICAgICAgICAgcmV0dXJuIHouYXJyYXkoZ2V0Wm9kVHlwZUZyb21BcGlQYXJhbVR5cGUoYXJyVHlwZS5lbGVtZW50c1R5cGUsIHJlZmVyZW5jZXMpKTtcbiAgICAgICAgfVxuICAgICAgICBjYXNlIFwicmVmXCI6IHtcbiAgICAgICAgICBjb25zdCByZWZUeXBlID0gcGFyYW1UeXBlIGFzIHtcbiAgICAgICAgICAgIHQ6IHN0cmluZztcbiAgICAgICAgICAgIGlkOiBzdHJpbmc7XG4gICAgICAgICAgICBhcmdzPzogQXBpUGFyYW1UeXBlW107XG4gICAgICAgICAgfTtcbiAgICAgICAgICAvLyBEYXRlIO2DgOyehSDsspjrpqxcbiAgICAgICAgICBpZiAocmVmVHlwZS5pZCA9PT0gXCJEYXRlXCIpIHtcbiAgICAgICAgICAgIHJldHVybiB6LmRhdGUoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8g6rCd7LK0IO2CpCDqtIDrpqwg7Jyg7Yu466as7YuwXG4gICAgICAgICAgaWYgKFtcIlBpY2tcIiwgXCJPbWl0XCJdLmluY2x1ZGVzKHJlZlR5cGUuaWQpKSB7XG4gICAgICAgICAgICBpZiAocmVmVHlwZS5hcmdzPy5sZW5ndGggIT09IDIpIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGDsnpjrqrvrkJwgJHtyZWZUeXBlLmlkfWApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgW29iaiwgbGl0ZXJhbE9yVW5pb25dID0gcmVmVHlwZS5hcmdzLm1hcChcbiAgICAgICAgICAgICAgKGFyZykgPT4gZ2V0Wm9kVHlwZUZyb21BcGlQYXJhbVR5cGUoYXJnLCByZWZlcmVuY2VzKSxcbiAgICAgICAgICAgICAgLy8gb3hsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgLS0g7IOd7ISx65CY64qUIFpvZFVuaW9u7J2YIO2DgOyeheydhCDstpTsoIHtlZjquLAg7Ja066Ck7JuAXG4gICAgICAgICAgICApIGFzIFtBbnlab2RPYmplY3QsIHouWm9kVW5pb248YW55PiB8IEFueVpvZExpdGVyYWxdO1xuXG4gICAgICAgICAgICBsZXQga2V5czogc3RyaW5nW10gPSBbXTtcbiAgICAgICAgICAgIGlmIChsaXRlcmFsT3JVbmlvbiBpbnN0YW5jZW9mIHouWm9kVW5pb24pIHtcbiAgICAgICAgICAgICAga2V5cyA9IGxpdGVyYWxPclVuaW9uLmRlZi5vcHRpb25zLm1hcChcbiAgICAgICAgICAgICAgICAob3B0aW9uOiB7IGRlZjogeyB2YWx1ZXM6IHN0cmluZ1tdIH0gfSkgPT4gb3B0aW9uLmRlZi52YWx1ZXNbMF0sXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBrZXlzID0gKGxpdGVyYWxPclVuaW9uIGFzIHouWm9kTGl0ZXJhbDxzdHJpbmc+KS5kZWYudmFsdWVzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3Qga2V5UmVjb3JkID0gT2JqZWN0LmZyb21FbnRyaWVzKGtleXMubWFwKChrZXkpID0+IFtrZXksIHRydWUgYXMgY29uc3RdKSk7XG4gICAgICAgICAgICBpZiAocmVmVHlwZS5pZCA9PT0gXCJQaWNrXCIpIHtcbiAgICAgICAgICAgICAgaWYgKG9iai5waWNrKSB7XG4gICAgICAgICAgICAgICAgLy8gb3hsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgLS0gWm9kIDQuMy42IHBpY2sg7YOA7J6FIO2YuO2ZmOyEsVxuICAgICAgICAgICAgICAgIHJldHVybiBvYmoucGljayhrZXlSZWNvcmQgYXMgYW55KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgaWYgKG9iai5vbWl0KSB7XG4gICAgICAgICAgICAgICAgLy8gb3hsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgLS0gWm9kIDQuMy42IG9taXQg7YOA7J6FIO2YuO2ZmOyEsVxuICAgICAgICAgICAgICAgIHJldHVybiBvYmoub21pdChrZXlSZWNvcmQgYXMgYW55KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoW1wiUGFydGlhbFwiXS5pbmNsdWRlcyhyZWZUeXBlLmlkKSkge1xuICAgICAgICAgICAgaWYgKHJlZlR5cGUuYXJncz8ubGVuZ3RoICE9PSAxKSB7XG4gICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihg7J6Y66q765CcICR7cmVmVHlwZS5pZH1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IG9iaiA9IGdldFpvZFR5cGVGcm9tQXBpUGFyYW1UeXBlKHJlZlR5cGUuYXJnc1swXSwgcmVmZXJlbmNlcyk7XG4gICAgICAgICAgICAvLyBveGxpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAtLSBQYXJ0aWFsIOyduOyImCDtg4DsnoUg7LqQ7Iqk7YyFXG4gICAgICAgICAgICByZXR1cm4gKG9iaiBhcyB6LlpvZE9iamVjdDxhbnk+KS5wYXJ0aWFsKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IHJlZmVyZW5jZSA9IHJlZmVyZW5jZXNbcmVmVHlwZS5pZF07XG4gICAgICAgICAgaWYgKHJlZmVyZW5jZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gei51bmtub3duKCk7XG4gICAgICAgICAgICAvLyB0aHJvdyBuZXcgRXJyb3IoYHJlZiDssLjsobAg67aI6rCAICR7cmVmVHlwZS5pZH1gKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHJlZmVyZW5jZTtcbiAgICAgICAgfVxuICAgICAgICBjYXNlIFwidW5pb25cIjoge1xuICAgICAgICAgIGNvbnN0IHVuaW9uVHlwZSA9IHBhcmFtVHlwZSBhcyB7XG4gICAgICAgICAgICB0OiBzdHJpbmc7XG4gICAgICAgICAgICB0eXBlczogQXBpUGFyYW1UeXBlW107XG4gICAgICAgICAgfTtcbiAgICAgICAgICAvLyBudWxsYWJsZSDsnKDri4jsmKhcbiAgICAgICAgICBpZiAodW5pb25UeXBlLnR5cGVzLmxlbmd0aCA9PT0gMiAmJiB1bmlvblR5cGUudHlwZXMuc29tZSgodHlwZSkgPT4gdHlwZSA9PT0gXCJudWxsXCIpKSB7XG4gICAgICAgICAgICBpZiAodW5pb25UeXBlLnR5cGVzWzBdID09PSBcIm51bGxcIikge1xuICAgICAgICAgICAgICByZXR1cm4gZ2V0Wm9kVHlwZUZyb21BcGlQYXJhbVR5cGUodW5pb25UeXBlLnR5cGVzWzFdLCByZWZlcmVuY2VzKS5udWxsYWJsZSgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGdldFpvZFR5cGVGcm9tQXBpUGFyYW1UeXBlKHVuaW9uVHlwZS50eXBlc1swXSwgcmVmZXJlbmNlcykubnVsbGFibGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgLy8g7J2867CYIOycoOuLiOyYqFxuICAgICAgICAgIHJldHVybiB6LnVuaW9uKFxuICAgICAgICAgICAgdW5pb25UeXBlLnR5cGVzLm1hcCgodHlwZSkgPT4gZ2V0Wm9kVHlwZUZyb21BcGlQYXJhbVR5cGUodHlwZSwgcmVmZXJlbmNlcykpLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBcImludGVyc2VjdGlvblwiOiB7XG4gICAgICAgICAgY29uc3QgaW50ZXJzZWN0aW9uVHlwZSA9IHBhcmFtVHlwZSBhcyB7XG4gICAgICAgICAgICB0OiBzdHJpbmc7XG4gICAgICAgICAgICB0eXBlczogQXBpUGFyYW1UeXBlW107XG4gICAgICAgICAgfTtcbiAgICAgICAgICByZXR1cm4gaW50ZXJzZWN0aW9uVHlwZS50eXBlcy5yZWR1Y2UoKHJlc3VsdCwgdHlwZSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJlc29sdmVkVHlwZSA9IGdldFpvZFR5cGVGcm9tQXBpUGFyYW1UeXBlKHR5cGUsIHJlZmVyZW5jZXMpO1xuICAgICAgICAgICAgaWYgKGluZGV4ID09PSAwKSB7XG4gICAgICAgICAgICAgIHJldHVybiByZXNvbHZlZFR5cGU7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICByZXR1cm4gei5pbnRlcnNlY3Rpb24ocmVzdWx0LCByZXNvbHZlZFR5cGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sIHoudW5rbm93bigpIGFzIHouWm9kVHlwZSk7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBcInR1cGxlLXR5cGVcIjoge1xuICAgICAgICAgIGNvbnN0IHR1cGxlVHlwZSA9IHBhcmFtVHlwZSBhcyBBcGlQYXJhbVR5cGUuVHVwbGVUeXBlO1xuICAgICAgICAgIHJldHVybiB6LnR1cGxlKFxuICAgICAgICAgICAgLy8gb3hsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgLS0g7IOd7ISx65CY64qUIFpvZFR1cGxl7J2YIO2DgOyeheydhCDstpTsoIHtlZjquLAg7Ja066Ck7JuAXG4gICAgICAgICAgICB0dXBsZVR5cGUuZWxlbWVudHMubWFwKChlbGVtKSA9PiBnZXRab2RUeXBlRnJvbUFwaVBhcmFtVHlwZShlbGVtLCByZWZlcmVuY2VzKSkgYXMgYW55LFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB6LnVua25vd24oKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBBcGlQYXJhbSDrsLDsl7TsnYQgWm9kT2JqZWN066GcIOuzgO2ZmO2VqeuLiOuLpC5cbiAqIOqwgSDtjIzrnbzrr7jthLDsnZggb3B0aW9uYWwg7Jes67aA66W8IOuwmOyYge2VmOyXrCBab2Qg7Iqk7YKk66eI66W8IOyDneyEse2VqeuLiOuLpC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFpvZE9iamVjdEZyb21BcGlQYXJhbXMoXG4gIGFwaVBhcmFtczogQXBpUGFyYW1bXSxcbiAgcmVmZXJlbmNlczoge1xuICAgIFtpZDogc3RyaW5nXTogei5ab2RUeXBlO1xuICB9ID0ge30sXG4pOiB6LlpvZE9iamVjdCB7XG4gIHJldHVybiB6Lm9iamVjdChcbiAgICBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgICBhcGlQYXJhbXMubWFwKChwYXJhbSkgPT4ge1xuICAgICAgICBsZXQgem9kVHlwZSA9IGdldFpvZFR5cGVGcm9tQXBpUGFyYW1UeXBlKHBhcmFtLnR5cGUsIHJlZmVyZW5jZXMpO1xuICAgICAgICBpZiAocGFyYW0ub3B0aW9uYWwpIHtcbiAgICAgICAgICB6b2RUeXBlID0gem9kVHlwZS5vcHRpb25hbCgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbcGFyYW0ubmFtZSwgem9kVHlwZV07XG4gICAgICB9KSxcbiAgICApLFxuICApO1xufVxuXG4vKipcbiAqIEV4dGVuZGVkQXBp66W8IFpvZE9iamVjdOuhnCDrs4DtmZjtlanri4jri6QuXG4gKiBUeXBlUGFyYW1ldGVy7JmAIOydvOuwmCDtjIzrnbzrr7jthLDrpbwg7LKY66as7ZWY66mwLFxuICogQ29udGV4dCwgUmVmS25leCwgX+uhnCDsi5zsnpHtlZjripQgb3B0aW9uYWwg7YyM652866+47YSw64qUIOygnOyZuO2VqeuLiOuLpC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFpvZE9iamVjdEZyb21BcGkoXG4gIGFwaTogRXh0ZW5kZWRBcGksXG4gIHJlZmVyZW5jZXM6IHtcbiAgICBbaWQ6IHN0cmluZ106IHouWm9kVHlwZTtcbiAgfSA9IHt9LFxuKSB7XG4gIGlmIChhcGkudHlwZVBhcmFtZXRlcnM/Lmxlbmd0aCA+IDApIHtcbiAgICBmb3IgKGNvbnN0IHR5cGVQYXJhbSBvZiBhcGkudHlwZVBhcmFtZXRlcnMpIHtcbiAgICAgIGlmICh0eXBlUGFyYW0uY29uc3RyYWludCkge1xuICAgICAgICBjb25zdCB6b2RUeXBlID0gZ2V0Wm9kVHlwZUZyb21BcGlQYXJhbVR5cGUodHlwZVBhcmFtLmNvbnN0cmFpbnQsIHJlZmVyZW5jZXMpO1xuXG4gICAgICAgIC8vIEZJWE1FOiByZWZlcmVuY2Vz64qUIOq4gOuhnOuyjCDsmKTruIzsoJ3tirjroZwsIHR5cGVQYXJhbS5pZChcIlRcIiDrk7Ep66W8IGtleeuhnCDsnbTroIfqsowg642u7Ja07JSM7JuM67KE66as66m0IGxvYWRlZFR5cGVz6rCAIOyYpOyXvOuQqC5cbiAgICAgICAgLy8gb3hsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgLS0g66CI7Y2865+w7IqkIO2DgOyehSDsupDsiqTtjIVcbiAgICAgICAgKHJlZmVyZW5jZXNbdHlwZVBhcmFtLmlkXSBhcyB6LlpvZFR5cGU8YW55PikgPSB6b2RUeXBlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBjb25zdCBSZXFUeXBlID0gZ2V0Wm9kT2JqZWN0RnJvbUFwaVBhcmFtcyhcbiAgICAvLyBhcGkgcGFyc2luZ+2VnCDqsrDqs7zqsIAgYXBpIHBhcmFtc1xuICAgIGFwaS5wYXJhbWV0ZXJzLmZpbHRlcihcbiAgICAgIChwYXJhbSkgPT5cbiAgICAgICAgIUFwaVBhcmFtVHlwZS5pc0NvbnRleHQocGFyYW0udHlwZSkgJiZcbiAgICAgICAgIUFwaVBhcmFtVHlwZS5pc1JlZktuZXgocGFyYW0udHlwZSkgJiZcbiAgICAgICAgIShwYXJhbS5vcHRpb25hbCAmJiBwYXJhbS5uYW1lLnN0YXJ0c1dpdGgoXCJfXCIpKSwgLy8gX+uhnCDsi5zsnpHtlZjripQg7YyM652866+47YSw64qUIOygnOyZuFxuICAgICksXG4gICAgcmVmZXJlbmNlcyxcbiAgKTtcbiAgcmV0dXJuIFJlcVR5cGU7XG59XG5cbi8qXG4gKiBBUEkg7YOA7J6FIOygleydmOulvCBUeXBlU2NyaXB0IOy9lOuTnCDrrLjsnpDsl7TroZwg67OA7ZmY7ZWY6riwIOychO2VnCDtlajsiJjrk6TsnoXri4jri6QuXG4gKi9cblxuLyoqXG4gKiBBcGlQYXJhbVR5cGXsnYQgVHlwZVNjcmlwdCDtg4DsnoUg66y47J6Q7Je066GcIOuzgO2ZmO2VqeuLiOuLpC5cbiAqIHVuaW9uLCBpbnRlcnNlY3Rpb24sIGFycmF5LCByZWYg65OxIOuqqOuToCDtg4DsnoXsnYQgVFMg66y467KV7Jy866GcIO2RnO2YhO2VmOupsCxcbiAqIGltcG9ydOqwgCDtlYTsmpTtlZwg7YOA7J6FIElE64qUIGluamVjdEltcG9ydEtleXPsl5Ag7IiY7KeR7ZWp64uI64ukLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYXBpUGFyYW1UeXBlVG9Uc1R5cGUocGFyYW1UeXBlOiBBcGlQYXJhbVR5cGUsIGluamVjdEltcG9ydEtleXM6IHN0cmluZ1tdKTogc3RyaW5nIHtcbiAgaWYgKFxuICAgIFtcbiAgICAgIFwic3RyaW5nXCIsXG4gICAgICBcIm51bWJlclwiLFxuICAgICAgXCJib29sZWFuXCIsXG4gICAgICBcInRydWVcIixcbiAgICAgIFwiZmFsc2VcIixcbiAgICAgIFwibnVsbFwiLFxuICAgICAgXCJ1bmRlZmluZWRcIixcbiAgICAgIFwidm9pZFwiLFxuICAgICAgXCJhbnlcIixcbiAgICAgIFwidW5rbm93blwiLFxuICAgIF0uaW5jbHVkZXMocGFyYW1UeXBlIGFzIHN0cmluZylcbiAgKSB7XG4gICAgcmV0dXJuIHBhcmFtVHlwZSBhcyBzdHJpbmc7XG4gIH0gZWxzZSBpZiAoQXBpUGFyYW1UeXBlLmlzT2JqZWN0KHBhcmFtVHlwZSkpIHtcbiAgICByZXR1cm4gYHsgJHthcGlQYXJhbVRvVHNDb2RlKHBhcmFtVHlwZS5wcm9wcywgaW5qZWN0SW1wb3J0S2V5cyl9IH1gO1xuICB9IGVsc2UgaWYgKEFwaVBhcmFtVHlwZS5pc1N0cmluZ0xpdGVyYWwocGFyYW1UeXBlKSkge1xuICAgIHJldHVybiBgXCIke3BhcmFtVHlwZS52YWx1ZX1cImA7XG4gIH0gZWxzZSBpZiAoQXBpUGFyYW1UeXBlLmlzTnVtZXJpY0xpdGVyYWwocGFyYW1UeXBlKSkge1xuICAgIHJldHVybiBTdHJpbmcocGFyYW1UeXBlLnZhbHVlKTtcbiAgfSBlbHNlIGlmIChBcGlQYXJhbVR5cGUuaXNVbmlvbihwYXJhbVR5cGUpKSB7XG4gICAgcmV0dXJuIHBhcmFtVHlwZS50eXBlcy5tYXAoKHR5cGUpID0+IGFwaVBhcmFtVHlwZVRvVHNUeXBlKHR5cGUsIGluamVjdEltcG9ydEtleXMpKS5qb2luKFwiIHwgXCIpO1xuICB9IGVsc2UgaWYgKEFwaVBhcmFtVHlwZS5pc0ludGVyc2VjdGlvbihwYXJhbVR5cGUpKSB7XG4gICAgcmV0dXJuIHBhcmFtVHlwZS50eXBlcy5tYXAoKHR5cGUpID0+IGFwaVBhcmFtVHlwZVRvVHNUeXBlKHR5cGUsIGluamVjdEltcG9ydEtleXMpKS5qb2luKFwiICYgXCIpO1xuICB9IGVsc2UgaWYgKEFwaVBhcmFtVHlwZS5pc0FycmF5KHBhcmFtVHlwZSkpIHtcbiAgICAvLyBpbnRlcnNlY3Rpb27snbTrgpggdW5pb27snbgg6rK97JqwIOq0hO2YuOuhnCDqsJDsi7jquLBcbiAgICBjb25zdCBlbGVtZW50c1R5cGUgPSBhcGlQYXJhbVR5cGVUb1RzVHlwZShwYXJhbVR5cGUuZWxlbWVudHNUeXBlLCBpbmplY3RJbXBvcnRLZXlzKTtcbiAgICByZXR1cm4gQXBpUGFyYW1UeXBlLmlzSW50ZXJzZWN0aW9uKHBhcmFtVHlwZS5lbGVtZW50c1R5cGUpIHx8XG4gICAgICBBcGlQYXJhbVR5cGUuaXNVbmlvbihwYXJhbVR5cGUuZWxlbWVudHNUeXBlKVxuICAgICAgPyBgKCR7ZWxlbWVudHNUeXBlfSlbXWBcbiAgICAgIDogYCR7ZWxlbWVudHNUeXBlfVtdYDtcbiAgfSBlbHNlIGlmIChBcGlQYXJhbVR5cGUuaXNSZWYocGFyYW1UeXBlKSkge1xuICAgIGlmICghW1wiUGlja1wiLCBcIk9taXRcIiwgXCJQcm9taXNlXCIsIFwiUGFydGlhbFwiLCBcIkRhdGVcIl0uaW5jbHVkZXMocGFyYW1UeXBlLmlkKSkge1xuICAgICAgLy8gaW1wb3J0S2V5cyDsnbjsoJ3shZhcbiAgICAgIGluamVjdEltcG9ydEtleXMucHVzaChwYXJhbVR5cGUuaWQpO1xuICAgIH1cbiAgICBpZiAocGFyYW1UeXBlLmFyZ3MgPT09IHVuZGVmaW5lZCB8fCBwYXJhbVR5cGUuYXJncy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBwYXJhbVR5cGUuaWQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBgJHtwYXJhbVR5cGUuaWR9PCR7cGFyYW1UeXBlLmFyZ3NcbiAgICAgICAgLm1hcCgoYXJnKSA9PiBhcGlQYXJhbVR5cGVUb1RzVHlwZShhcmcsIGluamVjdEltcG9ydEtleXMpKVxuICAgICAgICAuam9pbihcIixcIil9PmA7XG4gICAgfVxuICB9IGVsc2UgaWYgKEFwaVBhcmFtVHlwZS5pc0luZGV4ZWRBY2Nlc3MocGFyYW1UeXBlKSkge1xuICAgIHJldHVybiBgJHthcGlQYXJhbVR5cGVUb1RzVHlwZShcbiAgICAgIHBhcmFtVHlwZS5vYmplY3QsXG4gICAgICBpbmplY3RJbXBvcnRLZXlzLFxuICAgICl9WyR7YXBpUGFyYW1UeXBlVG9Uc1R5cGUocGFyYW1UeXBlLmluZGV4LCBpbmplY3RJbXBvcnRLZXlzKX1dYDtcbiAgfSBlbHNlIGlmIChBcGlQYXJhbVR5cGUuaXNUdXBsZVR5cGUocGFyYW1UeXBlKSkge1xuICAgIHJldHVybiBgWyAke3BhcmFtVHlwZS5lbGVtZW50cy5tYXAoKGVsZW0pID0+IGFwaVBhcmFtVHlwZVRvVHNUeXBlKGVsZW0sIGluamVjdEltcG9ydEtleXMpKX0gXWA7XG4gIH0gZWxzZSBpZiAoQXBpUGFyYW1UeXBlLmlzVHlwZVBhcmFtKHBhcmFtVHlwZSkpIHtcbiAgICByZXR1cm4gYCR7cGFyYW1UeXBlLmlkfSR7XG4gICAgICBwYXJhbVR5cGUuY29uc3RyYWludFxuICAgICAgICA/IGAgZXh0ZW5kcyAke2FwaVBhcmFtVHlwZVRvVHNUeXBlKHBhcmFtVHlwZS5jb25zdHJhaW50LCBpbmplY3RJbXBvcnRLZXlzKX1gXG4gICAgICAgIDogXCJcIlxuICAgIH1gO1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcihgcmVzb2x2ZSDrtojqsIAgQXBpUGFyYW1UeXBlICR7cGFyYW1UeXBlfWApO1xuICB9XG59XG5cbi8qKlxuICogQXBpUGFyYW0g67Cw7Je07J2EIFR5cGVTY3JpcHQg7ZWo7IiYIO2MjOudvOuvuO2EsCDsvZTrk5zroZwg67OA7ZmY7ZWp64uI64ukLlxuICog7JiIOiBcIm5hbWU6IHN0cmluZywgYWdlPzogbnVtYmVyLCBhY3RpdmU6IGJvb2xlYW4gPSB0cnVlXCJcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFwaVBhcmFtVG9Uc0NvZGUocGFyYW1zOiBBcGlQYXJhbVtdLCBpbmplY3RJbXBvcnRLZXlzOiBzdHJpbmdbXSk6IHN0cmluZyB7XG4gIHJldHVybiBwYXJhbXNcbiAgICAubWFwKChwYXJhbSkgPT4ge1xuICAgICAgcmV0dXJuIGAke3BhcmFtLm5hbWV9JHtcbiAgICAgICAgcGFyYW0ub3B0aW9uYWwgJiYgIXBhcmFtLmRlZmF1bHREZWYgPyBcIj9cIiA6IFwiXCJcbiAgICAgIH06ICR7YXBpUGFyYW1UeXBlVG9Uc1R5cGUocGFyYW0udHlwZSwgaW5qZWN0SW1wb3J0S2V5cyl9JHtcbiAgICAgICAgcGFyYW0uZGVmYXVsdERlZiA/IGA9ICR7cGFyYW0uZGVmYXVsdERlZn1gIDogXCJcIlxuICAgICAgfWA7XG4gICAgfSlcbiAgICAuam9pbihcIiwgXCIpO1xufVxuXG4vKipcbiAqIEFwaVBhcmFtIOuwsOyXtOydhCBUeXBlU2NyaXB0IOqwneyytCDtg4DsnoUg7L2U65Oc66GcIOuzgO2ZmO2VqeuLiOuLpC5cbiAqIOyYiDogXCJ7IG5hbWU6IHN0cmluZywgYWdlPzogbnVtYmVyLCBhY3RpdmU6IGJvb2xlYW4gPSB0cnVlIH1cIlxuICovXG5leHBvcnQgZnVuY3Rpb24gYXBpUGFyYW1Ub1RzQ29kZUFzT2JqZWN0KHBhcmFtczogQXBpUGFyYW1bXSwgaW5qZWN0SW1wb3J0S2V5czogc3RyaW5nW10pOiBzdHJpbmcge1xuICByZXR1cm4gYHsgJHtwYXJhbXNcbiAgICAubWFwKFxuICAgICAgKHBhcmFtKSA9PlxuICAgICAgICBgJHtwYXJhbS5uYW1lfSR7cGFyYW0ub3B0aW9uYWwgPyBcIj9cIiA6IFwiXCJ9OiAke2FwaVBhcmFtVHlwZVRvVHNUeXBlKFxuICAgICAgICAgIHBhcmFtLnR5cGUsXG4gICAgICAgICAgaW5qZWN0SW1wb3J0S2V5cyxcbiAgICAgICAgKX0ke3BhcmFtLmRlZmF1bHREZWYgPyBgPSAke3BhcmFtLmRlZmF1bHREZWZ9YCA6IFwiXCJ9YCxcbiAgICApXG4gICAgLmpvaW4oXCIsIFwiKX0gfWA7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFrQ0EsU0FBZ0Isa0JBQWtCLFdBQXlCO0FBQ3pELEtBQUksYUFBYSxVQUFVLFVBQVUsRUFBRTtBQUNyQyxTQUFPLFVBQVUsT0FBTztRQUNuQjtBQUNMLFNBQU87Ozs7Ozs7O0FBYVgsU0FBZ0IsMkJBQ2QsV0FDQSxZQUdXO0FBQ1gsU0FBUSxXQUFSO0VBQ0UsS0FBSyxTQUNILFFBQU9BLElBQUUsUUFBUTtFQUNuQixLQUFLLFNBQ0gsUUFBT0EsSUFBRSxRQUFRO0VBQ25CLEtBQUssVUFDSCxRQUFPQSxJQUFFLFNBQVM7RUFDcEIsU0FBUztHQUNQLE1BQU0sVUFBVTtBQUNoQixXQUFRLFFBQVEsR0FBaEI7SUFDRSxLQUFLO0lBQ0wsS0FBSyxrQkFDSCxRQUFPQSxJQUFFLFFBQVEsUUFBUSxNQUFNO0lBQ2pDLEtBQUssVUFBVTtLQUNiLE1BQU0sVUFBVTtBQUNoQixZQUFPLDBCQUEwQixRQUFRLE1BQU07O0lBRWpELEtBQUssU0FBUztLQUNaLE1BQU0sVUFBVTtBQUloQixZQUFPQSxJ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
182
+
183
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29kZS1jb252ZXJ0ZXJzLmpzIiwibmFtZXMiOlsieiJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hcGkvY29kZS1jb252ZXJ0ZXJzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogY29kZS1jb252ZXJ0ZXJz64qUIEFQSSDtg4DsnoUg7KCV7J2Y65Ok7J2EIFpvZCDqsJ3ssrTrgpggVHlwZVNjcmlwdCDsvZTrk5zroZwg67OA7ZmY7ZWY64qUIO2VqOyImOuTpOydhCDsoJzqs7Xtlanri4jri6QuXG4gKlxuICogMS4gQVBJIOyLnOumrOymiOuTpDpcbiAqIC0gRXh0ZW5kZWRBcGksIEFwaVBhcmFtLCBBcGlQYXJhbVR5cGVcbiAqIC0gQVBJIOuplO2DgOuNsOydtO2EsOulvCDtkZztmITtlZjripQg7YOA7J6FIOygleydmOuTpFxuICpcbiAqIDIuIFpvZE9iamVjdCDrs4DtmZhcbiAqIC0gQVBJIO2DgOyehSDsoJXsnZgg4oaSIFpvZCDtg4DsnoUg7J247Iqk7YS07IqkICjrn7Dtg4DsnoQg67C466as642w7J207IWY7JqpKVxuICogLSBnZXRab2RUeXBlRnJvbUFwaVBhcmFtVHlwZSDihpIgZ2V0Wm9kT2JqZWN0RnJvbUFwaVBhcmFtcyDihpIgZ2V0Wm9kT2JqZWN0RnJvbUFwaVxuICpcbiAqIDMuIFRzVHlwZURlZiDrs4DtmZhcbiAqIC0gQVBJIO2DgOyehSDsoJXsnZgg4oaSIFR5cGVTY3JpcHQg7YOA7J6FIOy9lOuTnCDrrLjsnpDsl7QgKOy9lOuTnCDsg53shLHsmqkpXG4gKiAtIGFwaVBhcmFtVHlwZVRvVHNUeXBlIOKGkiBhcGlQYXJhbVRvVHNDb2RlLCBhcGlQYXJhbVRvVHNDb2RlQXNPYmplY3RcbiAqXG4gKiDssLjqs6A6XG4gKiAtIFpvZFR5cGVEZWYg7IOd7ISxIChab2Qg7L2U65OcIOusuOyekOyXtCk6IHpvZC1jb252ZXJ0ZXIudHPsnZggem9kVHlwZVRvWm9kQ29kZSDsgqzsmqlcbiAqIC0gRW50aXR5UHJvcCDrs4DtmZg6IHpvZC1jb252ZXJ0ZXIudHMg7LC47KGwXG4gKi9cblxuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIjtcblxuaW1wb3J0IHsgQXBpUGFyYW1UeXBlIH0gZnJvbSBcIi4uL3R5cGVzL3R5cGVzXCI7XG5pbXBvcnQgeyB0eXBlIEFwaVBhcmFtIH0gZnJvbSBcIi4uL3R5cGVzL3R5cGVzXCI7XG5pbXBvcnQgeyB0eXBlIEV4dGVuZGVkQXBpIH0gZnJvbSBcIi4vZGVjb3JhdG9yc1wiO1xuXG4vLyA8YW55PuulvCDsnpDsoJztlZjqs6AsIFpvZOyXkOyEnCDsoJzslb3tlZjripQg6riw67O47KCB7J24IEdlbmVyaWMgVHlwZSBQYXJhbWV0ZXLrpbwg7IKs7Jqp7ZWoLlxudHlwZSBBbnlab2RPYmplY3QgPSB6LlpvZE9iamVjdDtcbnR5cGUgQW55Wm9kTGl0ZXJhbCA9IHouWm9kTGl0ZXJhbDtcblxuLyoqXG4gKiBQcm9taXNlIO2DgOyeheydhCDtlZwg67KIIOyWuOuemO2Vke2VmOyXrCDrgrTrtoAg7YOA7J6F7J2EIOuwmO2ZmO2VqeuLiOuLpC5cbiAqIFByb21pc2XqsIAg7JWE64uMIOqyveyasCDsm5Drs7gg7YOA7J6F7J2EIOq3uOuMgOuhnCDrsJjtmZjtlanri4jri6QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1bndyYXBQcm9taXNlT25jZShwYXJhbVR5cGU6IEFwaVBhcmFtVHlwZSkge1xuICBpZiAoQXBpUGFyYW1UeXBlLmlzUHJvbWlzZShwYXJhbVR5cGUpKSB7XG4gICAgcmV0dXJuIHBhcmFtVHlwZS5hcmdzPy5bMF07XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHBhcmFtVHlwZTtcbiAgfVxufVxuXG4vKlxuICogQVBJ66W8IOq1rOyEse2VmOuKlCDsmpTshozrk6TsnYQgWm9kT2JqZWN066GcIOuzgO2ZmO2VmOq4sCDsnITtlZwg7ZWo7IiY65Ok7J6F64uI64ukLlxuICovXG5cbi8qKlxuICogQXBpUGFyYW1UeXBl7J2EIFpvZCDtg4DsnoUg7J247Iqk7YS07Iqk66GcIOuzgO2ZmO2VqeuLiOuLpC5cbiAqIHN0cmluZywgbnVtYmVyLCBhcnJheSwgdW5pb24g65OxIOuqqOuToCBBcGlQYXJhbVR5cGXsnYQg7LKY66as7ZWY66mwLFxuICog7Iic7ZmY7LC47KGw6rCAIOuwnOyDne2VmOuKlCDqsr3smrAgei51bmtub3duKCnsnLzroZwgZmFsbGJhY2vtlanri4jri6QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRab2RUeXBlRnJvbUFwaVBhcmFtVHlwZShcbiAgcGFyYW1UeXBlOiBBcGlQYXJhbVR5cGUsXG4gIHJlZmVyZW5jZXM6IHtcbiAgICBbaWQ6IHN0cmluZ106IHouWm9kVHlwZTtcbiAgfSxcbik6IHouWm9kVHlwZSB7XG4gIHN3aXRjaCAocGFyYW1UeXBlKSB7XG4gICAgY2FzZSBcInN0cmluZ1wiOlxuICAgICAgcmV0dXJuIHouc3RyaW5nKCk7XG4gICAgY2FzZSBcIm51bWJlclwiOlxuICAgICAgcmV0dXJuIHoubnVtYmVyKCk7XG4gICAgY2FzZSBcImJvb2xlYW5cIjpcbiAgICAgIHJldHVybiB6LmJvb2xlYW4oKTtcbiAgICBkZWZhdWx0OiB7XG4gICAgICBjb25zdCBhZHZUeXBlID0gcGFyYW1UeXBlIGFzIHsgdDogc3RyaW5nOyB2YWx1ZT86IHN0cmluZyB8IG51bWJlciB9O1xuICAgICAgc3dpdGNoIChhZHZUeXBlLnQpIHtcbiAgICAgICAgY2FzZSBcInN0cmluZy1saXRlcmFsXCI6XG4gICAgICAgIGNhc2UgXCJudW1lcmljLWxpdGVyYWxcIjpcbiAgICAgICAgICByZXR1cm4gei5saXRlcmFsKGFkdlR5cGUudmFsdWUpO1xuICAgICAgICBjYXNlIFwib2JqZWN0XCI6IHtcbiAgICAgICAgICBjb25zdCBvYmpUeXBlID0gcGFyYW1UeXBlIGFzIHsgdDogc3RyaW5nOyBwcm9wczogQXBpUGFyYW1bXSB9O1xuICAgICAgICAgIHJldHVybiBnZXRab2RPYmplY3RGcm9tQXBpUGFyYW1zKG9ialR5cGUucHJvcHMpO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgXCJhcnJheVwiOiB7XG4gICAgICAgICAgY29uc3QgYXJyVHlwZSA9IHBhcmFtVHlwZSBhcyB7XG4gICAgICAgICAgICB0OiBzdHJpbmc7XG4gICAgICAgICAgICBlbGVtZW50c1R5cGU6IEFwaVBhcmFtVHlwZTtcbiAgICAgICAgICB9O1xuICAgICAgICAgIHJldHVybiB6LmFycmF5KGdldFpvZFR5cGVGcm9tQXBpUGFyYW1UeXBlKGFyclR5cGUuZWxlbWVudHNUeXBlLCByZWZlcmVuY2VzKSk7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBcInJlZlwiOiB7XG4gICAgICAgICAgY29uc3QgcmVmVHlwZSA9IHBhcmFtVHlwZSBhcyB7XG4gICAgICAgICAgICB0OiBzdHJpbmc7XG4gICAgICAgICAgICBpZDogc3RyaW5nO1xuICAgICAgICAgICAgYXJncz86IEFwaVBhcmFtVHlwZVtdO1xuICAgICAgICAgIH07XG4gICAgICAgICAgLy8gRGF0ZSDtg4DsnoUg7LKY66asXG4gICAgICAgICAgaWYgKHJlZlR5cGUuaWQgPT09IFwiRGF0ZVwiKSB7XG4gICAgICAgICAgICByZXR1cm4gei5kYXRlKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIOqwneyytCDtgqQg6rSA66asIOycoO2LuOumrO2LsFxuICAgICAgICAgIGlmIChbXCJQaWNrXCIsIFwiT21pdFwiXS5pbmNsdWRlcyhyZWZUeXBlLmlkKSkge1xuICAgICAgICAgICAgaWYgKHJlZlR5cGUuYXJncz8ubGVuZ3RoICE9PSAyKSB7XG4gICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihg7J6Y66q765CcICR7cmVmVHlwZS5pZH1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IFtvYmosIGxpdGVyYWxPclVuaW9uXSA9IHJlZlR5cGUuYXJncy5tYXAoXG4gICAgICAgICAgICAgIChhcmcpID0+IGdldFpvZFR5cGVGcm9tQXBpUGFyYW1UeXBlKGFyZywgcmVmZXJlbmNlcyksXG4gICAgICAgICAgICAgIC8vIG94bGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55IC0tIOyDneyEseuQmOuKlCBab2RVbmlvbuydmCDtg4DsnoXsnYQg7LaU7KCB7ZWY6riwIOyWtOugpOybgFxuICAgICAgICAgICAgKSBhcyBbQW55Wm9kT2JqZWN0LCB6LlpvZFVuaW9uPGFueT4gfCBBbnlab2RMaXRlcmFsXTtcblxuICAgICAgICAgICAgbGV0IGtleXM6IHN0cmluZ1tdID0gW107XG4gICAgICAgICAgICBpZiAobGl0ZXJhbE9yVW5pb24gaW5zdGFuY2VvZiB6LlpvZFVuaW9uKSB7XG4gICAgICAgICAgICAgIGtleXMgPSBsaXRlcmFsT3JVbmlvbi5kZWYub3B0aW9ucy5tYXAoXG4gICAgICAgICAgICAgICAgKG9wdGlvbjogeyBkZWY6IHsgdmFsdWVzOiBzdHJpbmdbXSB9IH0pID0+IG9wdGlvbi5kZWYudmFsdWVzWzBdLFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAga2V5cyA9IChsaXRlcmFsT3JVbmlvbiBhcyB6LlpvZExpdGVyYWw8c3RyaW5nPikuZGVmLnZhbHVlcztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGtleVJlY29yZCA9IE9iamVjdC5mcm9tRW50cmllcyhrZXlzLm1hcCgoa2V5KSA9PiBba2V5LCB0cnVlIGFzIGNvbnN0XSkpO1xuICAgICAgICAgICAgaWYgKHJlZlR5cGUuaWQgPT09IFwiUGlja1wiKSB7XG4gICAgICAgICAgICAgIGlmIChvYmoucGljaykge1xuICAgICAgICAgICAgICAgIC8vIG94bGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55IC0tIFpvZCA0LjMuNiBwaWNrIO2DgOyehSDtmLjtmZjshLFcbiAgICAgICAgICAgICAgICByZXR1cm4gb2JqLnBpY2soa2V5UmVjb3JkIGFzIGFueSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGlmIChvYmoub21pdCkge1xuICAgICAgICAgICAgICAgIC8vIG94bGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55IC0tIFpvZCA0LjMuNiBvbWl0IO2DgOyehSDtmLjtmZjshLFcbiAgICAgICAgICAgICAgICByZXR1cm4gb2JqLm9taXQoa2V5UmVjb3JkIGFzIGFueSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKFtcIlBhcnRpYWxcIl0uaW5jbHVkZXMocmVmVHlwZS5pZCkpIHtcbiAgICAgICAgICAgIGlmIChyZWZUeXBlLmFyZ3M/Lmxlbmd0aCAhPT0gMSkge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYOyemOuqu+uQnCAke3JlZlR5cGUuaWR9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBvYmogPSBnZXRab2RUeXBlRnJvbUFwaVBhcmFtVHlwZShyZWZUeXBlLmFyZ3NbMF0sIHJlZmVyZW5jZXMpO1xuICAgICAgICAgICAgLy8gb3hsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgLS0gUGFydGlhbCDsnbjsiJgg7YOA7J6FIOy6kOyKpO2MhVxuICAgICAgICAgICAgcmV0dXJuIChvYmogYXMgei5ab2RPYmplY3Q8YW55PikucGFydGlhbCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCByZWZlcmVuY2UgPSByZWZlcmVuY2VzW3JlZlR5cGUuaWRdO1xuICAgICAgICAgIGlmIChyZWZlcmVuY2UgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIHoudW5rbm93bigpO1xuICAgICAgICAgICAgLy8gdGhyb3cgbmV3IEVycm9yKGByZWYg7LC47KGwIOu2iOqwgCAke3JlZlR5cGUuaWR9YCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiByZWZlcmVuY2U7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBcInVuaW9uXCI6IHtcbiAgICAgICAgICBjb25zdCB1bmlvblR5cGUgPSBwYXJhbVR5cGUgYXMge1xuICAgICAgICAgICAgdDogc3RyaW5nO1xuICAgICAgICAgICAgdHlwZXM6IEFwaVBhcmFtVHlwZVtdO1xuICAgICAgICAgIH07XG4gICAgICAgICAgLy8gbnVsbGFibGUg7Jyg64uI7JioXG4gICAgICAgICAgaWYgKHVuaW9uVHlwZS50eXBlcy5sZW5ndGggPT09IDIgJiYgdW5pb25UeXBlLnR5cGVzLnNvbWUoKHR5cGUpID0+IHR5cGUgPT09IFwibnVsbFwiKSkge1xuICAgICAgICAgICAgaWYgKHVuaW9uVHlwZS50eXBlc1swXSA9PT0gXCJudWxsXCIpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGdldFpvZFR5cGVGcm9tQXBpUGFyYW1UeXBlKHVuaW9uVHlwZS50eXBlc1sxXSwgcmVmZXJlbmNlcykubnVsbGFibGUoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJldHVybiBnZXRab2RUeXBlRnJvbUFwaVBhcmFtVHlwZSh1bmlvblR5cGUudHlwZXNbMF0sIHJlZmVyZW5jZXMpLm51bGxhYmxlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIOydvOuwmCDsnKDri4jsmKhcbiAgICAgICAgICByZXR1cm4gei51bmlvbihcbiAgICAgICAgICAgIHVuaW9uVHlwZS50eXBlcy5tYXAoKHR5cGUpID0+IGdldFpvZFR5cGVGcm9tQXBpUGFyYW1UeXBlKHR5cGUsIHJlZmVyZW5jZXMpKSxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgXCJpbnRlcnNlY3Rpb25cIjoge1xuICAgICAgICAgIGNvbnN0IGludGVyc2VjdGlvblR5cGUgPSBwYXJhbVR5cGUgYXMge1xuICAgICAgICAgICAgdDogc3RyaW5nO1xuICAgICAgICAgICAgdHlwZXM6IEFwaVBhcmFtVHlwZVtdO1xuICAgICAgICAgIH07XG4gICAgICAgICAgcmV0dXJuIGludGVyc2VjdGlvblR5cGUudHlwZXMucmVkdWNlKChyZXN1bHQsIHR5cGUsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICBjb25zdCByZXNvbHZlZFR5cGUgPSBnZXRab2RUeXBlRnJvbUFwaVBhcmFtVHlwZSh0eXBlLCByZWZlcmVuY2VzKTtcbiAgICAgICAgICAgIGlmIChpbmRleCA9PT0gMCkge1xuICAgICAgICAgICAgICByZXR1cm4gcmVzb2x2ZWRUeXBlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHouaW50ZXJzZWN0aW9uKHJlc3VsdCwgcmVzb2x2ZWRUeXBlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LCB6LnVua25vd24oKSBhcyB6LlpvZFR5cGUpO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgXCJ0dXBsZS10eXBlXCI6IHtcbiAgICAgICAgICBjb25zdCB0dXBsZVR5cGUgPSBwYXJhbVR5cGUgYXMgQXBpUGFyYW1UeXBlLlR1cGxlVHlwZTtcbiAgICAgICAgICByZXR1cm4gei50dXBsZShcbiAgICAgICAgICAgIC8vIG94bGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55IC0tIOyDneyEseuQmOuKlCBab2RUdXBsZeydmCDtg4DsnoXsnYQg7LaU7KCB7ZWY6riwIOyWtOugpOybgFxuICAgICAgICAgICAgdHVwbGVUeXBlLmVsZW1lbnRzLm1hcCgoZWxlbSkgPT4gZ2V0Wm9kVHlwZUZyb21BcGlQYXJhbVR5cGUoZWxlbSwgcmVmZXJlbmNlcykpIGFzIGFueSxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gei51bmtub3duKCk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogQXBpUGFyYW0g67Cw7Je07J2EIFpvZE9iamVjdOuhnCDrs4DtmZjtlanri4jri6QuXG4gKiDqsIEg7YyM652866+47YSw7J2YIG9wdGlvbmFsIOyXrOu2gOulvCDrsJjsmIHtlZjsl6wgWm9kIOyKpO2CpOuniOulvCDsg53shLHtlanri4jri6QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRab2RPYmplY3RGcm9tQXBpUGFyYW1zKFxuICBhcGlQYXJhbXM6IEFwaVBhcmFtW10sXG4gIHJlZmVyZW5jZXM6IHtcbiAgICBbaWQ6IHN0cmluZ106IHouWm9kVHlwZTtcbiAgfSA9IHt9LFxuKTogei5ab2RPYmplY3Qge1xuICByZXR1cm4gei5vYmplY3QoXG4gICAgT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgICAgYXBpUGFyYW1zLm1hcCgocGFyYW0pID0+IHtcbiAgICAgICAgbGV0IHpvZFR5cGUgPSBnZXRab2RUeXBlRnJvbUFwaVBhcmFtVHlwZShwYXJhbS50eXBlLCByZWZlcmVuY2VzKTtcbiAgICAgICAgaWYgKHBhcmFtLm9wdGlvbmFsKSB7XG4gICAgICAgICAgem9kVHlwZSA9IHpvZFR5cGUub3B0aW9uYWwoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gW3BhcmFtLm5hbWUsIHpvZFR5cGVdO1xuICAgICAgfSksXG4gICAgKSxcbiAgKTtcbn1cblxuLyoqXG4gKiBFeHRlbmRlZEFwaeulvCBab2RPYmplY3TroZwg67OA7ZmY7ZWp64uI64ukLlxuICogVHlwZVBhcmFtZXRlcuyZgCDsnbzrsJgg7YyM652866+47YSw66W8IOyymOumrO2VmOupsCxcbiAqIENvbnRleHQsIFJlZktuZXgsIF/roZwg7Iuc7J6R7ZWY64qUIG9wdGlvbmFsIO2MjOudvOuvuO2EsOuKlCDsoJzsmbjtlanri4jri6QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRab2RPYmplY3RGcm9tQXBpKFxuICBhcGk6IEV4dGVuZGVkQXBpLFxuICByZWZlcmVuY2VzOiB7XG4gICAgW2lkOiBzdHJpbmddOiB6LlpvZFR5cGU7XG4gIH0gPSB7fSxcbikge1xuICBpZiAoYXBpLnR5cGVQYXJhbWV0ZXJzPy5sZW5ndGggPiAwKSB7XG4gICAgZm9yIChjb25zdCB0eXBlUGFyYW0gb2YgYXBpLnR5cGVQYXJhbWV0ZXJzKSB7XG4gICAgICBpZiAodHlwZVBhcmFtLmNvbnN0cmFpbnQpIHtcbiAgICAgICAgY29uc3Qgem9kVHlwZSA9IGdldFpvZFR5cGVGcm9tQXBpUGFyYW1UeXBlKHR5cGVQYXJhbS5jb25zdHJhaW50LCByZWZlcmVuY2VzKTtcblxuICAgICAgICAvLyBGSVhNRTogcmVmZXJlbmNlc+uKlCDquIDroZzrsowg7Jik67iM7KCd7Yq466GcLCB0eXBlUGFyYW0uaWQoXCJUXCIg65OxKeulvCBrZXnroZwg7J2066CH6rKMIOuNruyWtOyUjOybjOuyhOumrOuptCBsb2FkZWRUeXBlc+qwgCDsmKTsl7zrkKguXG4gICAgICAgIC8vIG94bGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55IC0tIOugiO2NvOufsOyKpCDtg4DsnoUg7LqQ7Iqk7YyFXG4gICAgICAgIChyZWZlcmVuY2VzW3R5cGVQYXJhbS5pZF0gYXMgei5ab2RUeXBlPGFueT4pID0gem9kVHlwZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgY29uc3QgUmVxVHlwZSA9IGdldFpvZE9iamVjdEZyb21BcGlQYXJhbXMoXG4gICAgLy8gYXBpIHBhcnNpbmftlZwg6rKw6rO86rCAIGFwaSBwYXJhbXNcbiAgICBhcGkucGFyYW1ldGVycy5maWx0ZXIoXG4gICAgICAocGFyYW0pID0+XG4gICAgICAgICFBcGlQYXJhbVR5cGUuaXNDb250ZXh0KHBhcmFtLnR5cGUpICYmXG4gICAgICAgICFBcGlQYXJhbVR5cGUuaXNSZWZLbmV4KHBhcmFtLnR5cGUpICYmXG4gICAgICAgICEocGFyYW0ub3B0aW9uYWwgJiYgcGFyYW0ubmFtZS5zdGFydHNXaXRoKFwiX1wiKSksIC8vIF/roZwg7Iuc7J6R7ZWY64qUIO2MjOudvOuvuO2EsOuKlCDsoJzsmbhcbiAgICApLFxuICAgIHJlZmVyZW5jZXMsXG4gICk7XG4gIHJldHVybiBSZXFUeXBlO1xufVxuXG4vKlxuICogQVBJIO2DgOyehSDsoJXsnZjrpbwgVHlwZVNjcmlwdCDsvZTrk5wg66y47J6Q7Je066GcIOuzgO2ZmO2VmOq4sCDsnITtlZwg7ZWo7IiY65Ok7J6F64uI64ukLlxuICovXG5cbi8qKlxuICogQXBpUGFyYW1UeXBl7J2EIFR5cGVTY3JpcHQg7YOA7J6FIOusuOyekOyXtOuhnCDrs4DtmZjtlanri4jri6QuXG4gKiB1bmlvbiwgaW50ZXJzZWN0aW9uLCBhcnJheSwgcmVmIOuTsSDrqqjrk6Ag7YOA7J6F7J2EIFRTIOusuOuyleycvOuhnCDtkZztmITtlZjrqbAsXG4gKiBpbXBvcnTqsIAg7ZWE7JqU7ZWcIO2DgOyehSBJROuKlCBpbmplY3RJbXBvcnRLZXlz7JeQIOyImOynke2VqeuLiOuLpC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFwaVBhcmFtVHlwZVRvVHNUeXBlKHBhcmFtVHlwZTogQXBpUGFyYW1UeXBlLCBpbmplY3RJbXBvcnRLZXlzOiBzdHJpbmdbXSk6IHN0cmluZyB7XG4gIGlmIChcbiAgICBbXG4gICAgICBcInN0cmluZ1wiLFxuICAgICAgXCJudW1iZXJcIixcbiAgICAgIFwiYm9vbGVhblwiLFxuICAgICAgXCJ0cnVlXCIsXG4gICAgICBcImZhbHNlXCIsXG4gICAgICBcIm51bGxcIixcbiAgICAgIFwidW5kZWZpbmVkXCIsXG4gICAgICBcInZvaWRcIixcbiAgICAgIFwiYW55XCIsXG4gICAgICBcInVua25vd25cIixcbiAgICBdLmluY2x1ZGVzKHBhcmFtVHlwZSBhcyBzdHJpbmcpXG4gICkge1xuICAgIHJldHVybiBwYXJhbVR5cGUgYXMgc3RyaW5nO1xuICB9IGVsc2UgaWYgKEFwaVBhcmFtVHlwZS5pc09iamVjdChwYXJhbVR5cGUpKSB7XG4gICAgcmV0dXJuIGB7ICR7YXBpUGFyYW1Ub1RzQ29kZShwYXJhbVR5cGUucHJvcHMsIGluamVjdEltcG9ydEtleXMpfSB9YDtcbiAgfSBlbHNlIGlmIChBcGlQYXJhbVR5cGUuaXNTdHJpbmdMaXRlcmFsKHBhcmFtVHlwZSkpIHtcbiAgICByZXR1cm4gYFwiJHtwYXJhbVR5cGUudmFsdWV9XCJgO1xuICB9IGVsc2UgaWYgKEFwaVBhcmFtVHlwZS5pc051bWVyaWNMaXRlcmFsKHBhcmFtVHlwZSkpIHtcbiAgICByZXR1cm4gU3RyaW5nKHBhcmFtVHlwZS52YWx1ZSk7XG4gIH0gZWxzZSBpZiAoQXBpUGFyYW1UeXBlLmlzVW5pb24ocGFyYW1UeXBlKSkge1xuICAgIHJldHVybiBwYXJhbVR5cGUudHlwZXMubWFwKCh0eXBlKSA9PiBhcGlQYXJhbVR5cGVUb1RzVHlwZSh0eXBlLCBpbmplY3RJbXBvcnRLZXlzKSkuam9pbihcIiB8IFwiKTtcbiAgfSBlbHNlIGlmIChBcGlQYXJhbVR5cGUuaXNJbnRlcnNlY3Rpb24ocGFyYW1UeXBlKSkge1xuICAgIHJldHVybiBwYXJhbVR5cGUudHlwZXMubWFwKCh0eXBlKSA9PiBhcGlQYXJhbVR5cGVUb1RzVHlwZSh0eXBlLCBpbmplY3RJbXBvcnRLZXlzKSkuam9pbihcIiAmIFwiKTtcbiAgfSBlbHNlIGlmIChBcGlQYXJhbVR5cGUuaXNBcnJheShwYXJhbVR5cGUpKSB7XG4gICAgLy8gaW50ZXJzZWN0aW9u7J2064KYIHVuaW9u7J24IOqyveyasCDqtITtmLjroZwg6rCQ7Iu46riwXG4gICAgY29uc3QgZWxlbWVudHNUeXBlID0gYXBpUGFyYW1UeXBlVG9Uc1R5cGUocGFyYW1UeXBlLmVsZW1lbnRzVHlwZSwgaW5qZWN0SW1wb3J0S2V5cyk7XG4gICAgcmV0dXJuIEFwaVBhcmFtVHlwZS5pc0ludGVyc2VjdGlvbihwYXJhbVR5cGUuZWxlbWVudHNUeXBlKSB8fFxuICAgICAgQXBpUGFyYW1UeXBlLmlzVW5pb24ocGFyYW1UeXBlLmVsZW1lbnRzVHlwZSlcbiAgICAgID8gYCgke2VsZW1lbnRzVHlwZX0pW11gXG4gICAgICA6IGAke2VsZW1lbnRzVHlwZX1bXWA7XG4gIH0gZWxzZSBpZiAoQXBpUGFyYW1UeXBlLmlzUmVmKHBhcmFtVHlwZSkpIHtcbiAgICBpZiAoIVtcIlBpY2tcIiwgXCJPbWl0XCIsIFwiUHJvbWlzZVwiLCBcIlBhcnRpYWxcIiwgXCJEYXRlXCJdLmluY2x1ZGVzKHBhcmFtVHlwZS5pZCkpIHtcbiAgICAgIC8vIGltcG9ydEtleXMg7J247KCd7IWYXG4gICAgICBpbmplY3RJbXBvcnRLZXlzLnB1c2gocGFyYW1UeXBlLmlkKTtcbiAgICB9XG4gICAgaWYgKHBhcmFtVHlwZS5hcmdzID09PSB1bmRlZmluZWQgfHwgcGFyYW1UeXBlLmFyZ3MubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gcGFyYW1UeXBlLmlkO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gYCR7cGFyYW1UeXBlLmlkfTwke3BhcmFtVHlwZS5hcmdzXG4gICAgICAgIC5tYXAoKGFyZykgPT4gYXBpUGFyYW1UeXBlVG9Uc1R5cGUoYXJnLCBpbmplY3RJbXBvcnRLZXlzKSlcbiAgICAgICAgLmpvaW4oXCIsXCIpfT5gO1xuICAgIH1cbiAgfSBlbHNlIGlmIChBcGlQYXJhbVR5cGUuaXNJbmRleGVkQWNjZXNzKHBhcmFtVHlwZSkpIHtcbiAgICByZXR1cm4gYCR7YXBpUGFyYW1UeXBlVG9Uc1R5cGUoXG4gICAgICBwYXJhbVR5cGUub2JqZWN0LFxuICAgICAgaW5qZWN0SW1wb3J0S2V5cyxcbiAgICApfVske2FwaVBhcmFtVHlwZVRvVHNUeXBlKHBhcmFtVHlwZS5pbmRleCwgaW5qZWN0SW1wb3J0S2V5cyl9XWA7XG4gIH0gZWxzZSBpZiAoQXBpUGFyYW1UeXBlLmlzVHVwbGVUeXBlKHBhcmFtVHlwZSkpIHtcbiAgICByZXR1cm4gYFsgJHtwYXJhbVR5cGUuZWxlbWVudHMubWFwKChlbGVtKSA9PiBhcGlQYXJhbVR5cGVUb1RzVHlwZShlbGVtLCBpbmplY3RJbXBvcnRLZXlzKSl9IF1gO1xuICB9IGVsc2UgaWYgKEFwaVBhcmFtVHlwZS5pc1R5cGVQYXJhbShwYXJhbVR5cGUpKSB7XG4gICAgcmV0dXJuIGAke3BhcmFtVHlwZS5pZH0ke1xuICAgICAgcGFyYW1UeXBlLmNvbnN0cmFpbnRcbiAgICAgICAgPyBgIGV4dGVuZHMgJHthcGlQYXJhbVR5cGVUb1RzVHlwZShwYXJhbVR5cGUuY29uc3RyYWludCwgaW5qZWN0SW1wb3J0S2V5cyl9YFxuICAgICAgICA6IFwiXCJcbiAgICB9YDtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYHJlc29sdmUg67aI6rCAIEFwaVBhcmFtVHlwZSAke3BhcmFtVHlwZX1gKTtcbiAgfVxufVxuXG4vKipcbiAqIEFwaVBhcmFtIOuwsOyXtOydhCBUeXBlU2NyaXB0IO2VqOyImCDtjIzrnbzrr7jthLAg7L2U65Oc66GcIOuzgO2ZmO2VqeuLiOuLpC5cbiAqIOyYiDogXCJuYW1lOiBzdHJpbmcsIGFnZT86IG51bWJlciwgYWN0aXZlOiBib29sZWFuID0gdHJ1ZVwiXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhcGlQYXJhbVRvVHNDb2RlKHBhcmFtczogQXBpUGFyYW1bXSwgaW5qZWN0SW1wb3J0S2V5czogc3RyaW5nW10pOiBzdHJpbmcge1xuICByZXR1cm4gcGFyYW1zXG4gICAgLm1hcCgocGFyYW0pID0+IHtcbiAgICAgIHJldHVybiBgJHtwYXJhbS5uYW1lfSR7XG4gICAgICAgIHBhcmFtLm9wdGlvbmFsICYmICFwYXJhbS5kZWZhdWx0RGVmID8gXCI/XCIgOiBcIlwiXG4gICAgICB9OiAke2FwaVBhcmFtVHlwZVRvVHNUeXBlKHBhcmFtLnR5cGUsIGluamVjdEltcG9ydEtleXMpfSR7XG4gICAgICAgIHBhcmFtLmRlZmF1bHREZWYgPyBgPSAke3BhcmFtLmRlZmF1bHREZWZ9YCA6IFwiXCJcbiAgICAgIH1gO1xuICAgIH0pXG4gICAgLmpvaW4oXCIsIFwiKTtcbn1cblxuLyoqXG4gKiBBcGlQYXJhbSDrsLDsl7TsnYQgVHlwZVNjcmlwdCDqsJ3ssrQg7YOA7J6FIOy9lOuTnOuhnCDrs4DtmZjtlanri4jri6QuXG4gKiDsmIg6IFwieyBuYW1lOiBzdHJpbmcsIGFnZT86IG51bWJlciwgYWN0aXZlOiBib29sZWFuID0gdHJ1ZSB9XCJcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFwaVBhcmFtVG9Uc0NvZGVBc09iamVjdChwYXJhbXM6IEFwaVBhcmFtW10sIGluamVjdEltcG9ydEtleXM6IHN0cmluZ1tdKTogc3RyaW5nIHtcbiAgcmV0dXJuIGB7ICR7cGFyYW1zXG4gICAgLm1hcChcbiAgICAgIChwYXJhbSkgPT5cbiAgICAgICAgYCR7cGFyYW0ubmFtZX0ke3BhcmFtLm9wdGlvbmFsID8gXCI/XCIgOiBcIlwifTogJHthcGlQYXJhbVR5cGVUb1RzVHlwZShcbiAgICAgICAgICBwYXJhbS50eXBlLFxuICAgICAgICAgIGluamVjdEltcG9ydEtleXMsXG4gICAgICAgICl9JHtwYXJhbS5kZWZhdWx0RGVmID8gYD0gJHtwYXJhbS5kZWZhdWx0RGVmfWAgOiBcIlwifWAsXG4gICAgKVxuICAgIC5qb2luKFwiLCBcIil9IH1gO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFrQ0EsU0FBZ0Isa0JBQWtCLFdBQXlCO0NBQ3pELElBQUksYUFBYSxVQUFVLFNBQVMsR0FDbEMsT0FBTyxVQUFVLE9BQU87TUFFeEIsT0FBTztBQUVYOzs7Ozs7QUFXQSxTQUFnQiwyQkFDZCxXQUNBLFlBR1c7Q0FDWCxRQUFRLFdBQVI7RUFDRSxLQUFLLFVBQ0gsT0FBT0EsSUFBRSxPQUFPO0VBQ2xCLEtBQUssVUFDSCxPQUFPQSxJQUFFLE9BQU87RUFDbEIsS0FBSyxXQUNILE9BQU9BLElBQUUsUUFBUTtFQUNuQixTQUFTO0dBQ1AsTUFBTSxVQUFVO0dBQ2hCLFFBQVEsUUFBUSxHQUFoQjtJQUNFLEtBQUs7SUFDTCxLQUFLLG1CQUNILE9BQU9BLElBQUUsUUFBUSxRQUFRLEtBQUs7SUFDaEMsS0FBSyxVQUVILE9BQU8sMEJBQTBCLFVBQVEsS0FBSztJQUVoRCxLQUFLLFNBQVM7S0FDWixNQUFNLFVBQVU7S0FJaEIsT0FBT0EsSUFBRSxNQUFNLDJCQUEyQixRQUFRLGNBQWMsVUFBVSxDQUFDO0lBQzdFO0lBQ0Es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
@@ -78,16 +78,7 @@ export type SonamuConfig<TSinkId extends string = string, TFilterId extends stri
78
78
  };
79
79
  database: {
80
80
  database?: "pg" | "pgnative";
81
- name: string;
82
- defaultOptions: DatabaseConfig;
83
- environments?: {
84
- development?: DatabaseConfig;
85
- development_slave?: DatabaseConfig;
86
- production?: DatabaseConfig;
87
- production_slave?: DatabaseConfig;
88
- fixture?: DatabaseConfig;
89
- test?: DatabaseConfig;
90
- };
81
+ defaultOptions?: DatabaseConfig;
91
82
  };
92
83
  logging?: false | SonamuLoggingOptions<TSinkId, TFilterId>;
93
84
  server: SonamuServerOptions;
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/api/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/api/config.ts"],"names":[],"mappings":"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"}
@@ -1,10 +1,8 @@
1
- import { __esmMin } from "../_virtual/rolldown_runtime.js";
2
-
1
+ import { __esmMin } from "../_virtual/_rolldown/runtime.js";
2
+ import { applyCurrentSnapshotToProcessEnv, init_env } from "../env.js";
3
3
  //#region src/api/config.ts
4
4
  function defineConfig(config) {
5
- if (typeof config === "function") {
6
- return Promise.resolve(config());
7
- }
5
+ if (typeof config === "function") return Promise.resolve(config());
8
6
  return Promise.resolve(config);
9
7
  }
10
8
  /**
@@ -21,6 +19,7 @@ function defineConfig(config) {
21
19
  * @returns
22
20
  */
23
21
  async function loadConfig(rootPath) {
22
+ applyCurrentSnapshotToProcessEnv(rootPath);
24
23
  const shouldLoadSourceConfig = process.env.HOT === "yes" || process.env.VITEST === "true";
25
24
  const configPath = shouldLoadSourceConfig ? `${rootPath}/src/sonamu.config.ts` : `${rootPath}/dist/sonamu.config.js`;
26
25
  if (shouldLoadSourceConfig) {
@@ -30,9 +29,11 @@ async function loadConfig(rootPath) {
30
29
  const { default: config } = await import(`file://${configPath}`);
31
30
  return config;
32
31
  }
33
- var init_config = __esmMin((() => {}));
34
-
32
+ var init_config = __esmMin((() => {
33
+ init_env();
34
+ }));
35
35
  //#endregion
36
36
  init_config();
37
37
  export { defineConfig, init_config, loadConfig };
38
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hcGkvY29uZmlnLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHR5cGUgRmFzdGlmeUNvbXByZXNzT3B0aW9ucyB9IGZyb20gXCJAZmFzdGlmeS9jb21wcmVzc1wiO1xuaW1wb3J0IHsgdHlwZSBGYXN0aWZ5Q29yc09wdGlvbnMgfSBmcm9tIFwiQGZhc3RpZnkvY29yc1wiO1xuaW1wb3J0IHsgdHlwZSBGYXN0aWZ5Rm9ybWJvZHlPcHRpb25zIH0gZnJvbSBcIkBmYXN0aWZ5L2Zvcm1ib2R5XCI7XG5pbXBvcnQgeyB0eXBlIEZhc3RpZnlNdWx0aXBhcnRPcHRpb25zIH0gZnJvbSBcIkBmYXN0aWZ5L211bHRpcGFydFwiO1xuaW1wb3J0IHsgdHlwZSBGYXN0aWZ5U3RhdGljT3B0aW9ucyB9IGZyb20gXCJAZmFzdGlmeS9zdGF0aWNcIjtcbmltcG9ydCB7IHR5cGUgV2Vic29ja2V0UGx1Z2luT3B0aW9ucyB9IGZyb20gXCJAZmFzdGlmeS93ZWJzb2NrZXRcIjtcbmltcG9ydCB7IHR5cGUgQmV0dGVyQXV0aE9wdGlvbnMgfSBmcm9tIFwiYmV0dGVyLWF1dGhcIjtcbmltcG9ydCB7XG4gIHR5cGUgRmFzdGlmeUluc3RhbmNlLFxuICB0eXBlIEZhc3RpZnlSZXBseSxcbiAgdHlwZSBGYXN0aWZ5UmVxdWVzdCxcbiAgdHlwZSBGYXN0aWZ5U2VydmVyT3B0aW9ucyxcbn0gZnJvbSBcImZhc3RpZnlcIjtcbmltcG9ydCB7IHR5cGUgUXNQbHVnaW5PcHRpb25zIH0gZnJvbSBcImZhc3RpZnktcXNcIjtcbmltcG9ydCB7IHR5cGUgU3NlUGx1Z2luT3B0aW9ucyB9IGZyb20gXCJmYXN0aWZ5LXNzZS12Mi9saWIvdHlwZXNcIjtcbmltcG9ydCB7IHR5cGUgS25leCB9IGZyb20gXCJrbmV4XCI7XG5cbmltcG9ydCB7IHR5cGUgQ2FjaGVDb25maWcgfSBmcm9tIFwiLi4vY2FjaGUvdHlwZXNcIjtcbmltcG9ydCB7IHR5cGUgU29uYW11REJDb25maWcgfSBmcm9tIFwiLi4vZGF0YWJhc2UvZGJcIjtcbmltcG9ydCB7IHR5cGUgU29uYW11TG9nZ2luZ09wdGlvbnMgfSBmcm9tIFwiLi4vbG9nZ2VyL2NvbmZpZ3VyZVwiO1xuaW1wb3J0IHsgdHlwZSBTdG9yYWdlQ29uZmlnIH0gZnJvbSBcIi4uL3N0b3JhZ2UvdHlwZXNcIjtcbmltcG9ydCB7IHR5cGUgV2ViU29ja2V0UnVudGltZU9wdGlvbnMgfSBmcm9tIFwiLi4vc3RyZWFtL3dzXCI7XG5pbXBvcnQgeyB0eXBlIFdvcmtmbG93T3B0aW9ucyB9IGZyb20gXCIuLi90YXNrcy93b3JrZmxvdy1tYW5hZ2VyXCI7XG5pbXBvcnQgeyB0eXBlIEV4ZWN1dGFibGUsIHR5cGUgU29uYW11RmFzdGlmeUNvbmZpZyB9IGZyb20gXCIuLi90eXBlcy90eXBlc1wiO1xuaW1wb3J0IHsgdHlwZSBDb250ZXh0LCB0eXBlIFdlYlNvY2tldENvbnRleHQgfSBmcm9tIFwiLi9jb250ZXh0XCI7XG5cbmV4cG9ydCB0eXBlIERhdGFiYXNlQ29uZmlnID0gT21pdDxLbmV4LkNvbmZpZywgXCJjb25uZWN0aW9uXCI+ICYge1xuICBjb25uZWN0aW9uPzogS25leC5QZ0Nvbm5lY3Rpb25Db25maWc7XG59O1xuXG4vKipcbiAqIGkxOG4g7ISk7KCVXG4gKi9cbmV4cG9ydCB0eXBlIFNvbmFtdUkxOG5PcHRpb25zID0ge1xuICAvKiog6riw67O4IGxvY2FsZSAo7YKkIOygleydmCDquLDspIAgKyDrn7Dtg4DsnoQg6riw67O46rCSKSAqL1xuICBkZWZhdWx0TG9jYWxlOiBzdHJpbmc7XG4gIC8qKiDsp4Dsm5DtlZjripQgbG9jYWxlIOuqqeuhnSAqL1xuICBzdXBwb3J0ZWRMb2NhbGVzOiBzdHJpbmdbXTtcbn07XG5cbi8qKlxuICogRGV2IOyEnOuyhCDrgrQgVml0ZXN0IOyDgeyjvCDsnbjsiqTthLTsiqQg7ISk7KCVXG4gKi9cbmV4cG9ydCB0eXBlIFNvbmFtdURldlJ1bm5lckNvbmZpZyA9IHtcbiAgLyoqIERldlJ1bm5lciDtmZzshLHtmZQg7Jes67aAICjquLDrs7g6IGZhbHNlKSAqL1xuICBlbmFibGVkOiBib29sZWFuO1xuICAvKiog7YWM7Iqk7Yq4IOyXlOuTnO2PrOyduO2KuCDqsr3roZwg7KCR65GQ7IKsICjquLDrs7g6IC9fX3Rlc3RfXykgKi9cbiAgcm91dGVQcmVmaXg/OiBzdHJpbmc7XG4gIC8qKiB2aXRlc3QuY29uZmlnLnRzIOqyveuhnCAoYXBpLXJvb3Qg7IOB64yA6rK966GcKSAqL1xuICB2aXRlc3RDb25maWdQYXRoPzogc3RyaW5nO1xufTtcblxuLyoqXG4gKiDthYzsiqTtirgg7ISk7KCVXG4gKiB2aXRlc3Qg67OR66CsIO2FjOyKpO2MheydhCBzb25hbXUuY29uZmlnLnRzIO2VnCDqs7Psl5DshJwg6rSA66as7ZWY6riwIOychO2VnCDshKTsoJXsnoXri4jri6QuXG4gKi9cbmV4cG9ydCB0eXBlIFNvbmFtdVRlc3RDb25maWcgPSB7XG4gIC8qKiDrs5HroKwg7YWM7Iqk7YyFIO2ZnOyEse2ZlCAo6riw67O4OiBmYWxzZSkgKi9cbiAgcGFyYWxsZWw/OiBib29sZWFuO1xuICAvKiog67OR66CsIOyLpO2WiSDsm4zsu6Qg7IiYICjquLDrs7g6IDQpICovXG4gIG1heFdvcmtlcnM/OiBudW1iZXI7XG4gIC8qKiBEZXYg7ISc67KEIOuCtCBWaXRlc3Qg7IOB7KO8IOyduOyKpO2EtOyKpCDshKTsoJUgKi9cbiAgZGV2UnVubmVyPzogU29uYW11RGV2UnVubmVyQ29uZmlnO1xufTtcblxuZXhwb3J0IHR5cGUgU29uYW11Q29uZmlnPFRTaW5rSWQgZXh0ZW5kcyBzdHJpbmcgPSBzdHJpbmcsIFRGaWx0ZXJJZCBleHRlbmRzIHN0cmluZyA9IHN0cmluZz4gPSB7XG4gIHByb2plY3ROYW1lPzogc3RyaW5nO1xuXG4gIGFwaToge1xuICAgIGRpcjogc3RyaW5nO1xuICAgIHJvdXRlOiB7XG4gICAgICBwcmVmaXg6IHN0cmluZztcbiAgICB9O1xuICAgIHRpbWV6b25lPzogc3RyaW5nO1xuICB9O1xuXG4gIC8qKlxuICAgKiBpMThuIOyEpOyglVxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIGkxOG46IHtcbiAgICogICBkZWZhdWx0TG9jYWxlOiAna28nLFxuICAgKiAgIHN1cHBvcnRlZExvY2FsZXM6IFsna28nLCAnZW4nLCAnamEnXSxcbiAgICogfVxuICAgKiBgYGBcbiAgICovXG4gIGkxOG46IFNvbmFtdUkxOG5PcHRpb25zO1xuXG4gIHN5bmM6IHtcbiAgICB0YXJnZXRzOiBzdHJpbmdbXTsgLy8gXCJ3ZWJcIiwgXCJhcHBcIiDrk7FcbiAgfTtcblxuICBkYXRhYmFzZToge1xuICAgIC8vIOuNsOydtO2EsOuyoOydtOyKpChwZ+uKlCBwZyDrqqjrk4gsIHBnbmF0aXZl64qUIHBnLW5hdGl2ZSDrqqjrk4jsnZgg7ISk7LmY6rCAIO2VhOyalO2VqeuLiOuLpC4pXG4gICAgZGF0YWJhc2U/OiBcInBnXCIgfCBcInBnbmF0aXZlXCI7XG4gICAgLy8g6riw67O4IOuNsOydtO2EsOuyoOydtOyKpCDsnbTrpoRcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgLy8g66qo65OgIO2ZmOqyveyXkCDsoIHsmqnrkKAg6riw67O4IEtuZXgg7Ji17IWYXG4gICAgZGVmYXVsdE9wdGlvbnM6IERhdGFiYXNlQ29uZmlnO1xuICAgIC8vIO2ZmOqyveuzhCDshKTsoJVcbiAgICBlbnZpcm9ubWVudHM/OiB7XG4gICAgICBkZXZlbG9wbWVudD86IERhdGFiYXNlQ29uZmlnO1xuICAgICAgZGV2ZWxvcG1lbnRfc2xhdmU/OiBEYXRhYmFzZUNvbmZpZztcbiAgICAgIHByb2R1Y3Rpb24/OiBEYXRhYmFzZUNvbmZpZztcbiAgICAgIHByb2R1Y3Rpb25fc2xhdmU/OiBEYXRhYmFzZUNvbmZpZztcbiAgICAgIGZpeHR1cmU/OiBEYXRhYmFzZUNvbmZpZztcbiAgICAgIHRlc3Q/OiBEYXRhYmFzZUNvbmZpZztcbiAgICB9O1xuICB9O1xuXG4gIGxvZ2dpbmc/OiBmYWxzZSB8IFNvbmFtdUxvZ2dpbmdPcHRpb25zPFRTaW5rSWQsIFRGaWx0ZXJJZD47XG4gIHNlcnZlcjogU29uYW11U2VydmVyT3B0aW9ucztcbiAgdGFza3M/OiBTb25hbXVUYXNrT3B0aW9ucztcblxuICAvKipcbiAgICog7YWM7Iqk7Yq4IOyEpOyglSAo67OR66CsIO2FjOyKpO2MhSDrk7EpXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogdGVzdDoge1xuICAgKiAgIHBhcmFsbGVsOiB0cnVlLFxuICAgKiAgIG1heFdvcmtlcnM6IDQsXG4gICAqIH1cbiAgICogYGBgXG4gICAqL1xuICB0ZXN0PzogU29uYW11VGVzdENvbmZpZztcblxuICAvKipcbiAgICog7Jm467aAIOyXkOuUlO2EsCDshKTsoJUgKENERCDrk7Hsl5DshJwg7YyM7J28IO2OuOynkSDsi5wg7IKs7JqpKVxuICAgKiDrr7jshKTsoJUg7IucIFwidnNjb2RlXCLrpbwg6riw67O46rCS7Jy866GcIOyCrOyaqe2VqeuLiOuLpC5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiBleHRlcm5hbEVkaXRvcjogXCJjdXJzb3JcIlxuICAgKiBgYGBcbiAgICovXG4gIGV4dGVybmFsRWRpdG9yPzogXCJWaXN1YWwgU3R1ZGlvIENvZGVcIiB8IFwiWmVkXCIgfCBcIkN1cnNvclwiO1xuXG4gIC8qKlxuICAgKiBTbGFjayDsirnsnbgg7ISk7KCVIChQcm9kdWN0aW9uIOuniOydtOq3uOugiOydtOyFmOyaqSlcbiAgICpcbiAgICogUHJvZHVjdGlvbiBEQiDrp4jsnbTqt7jroIjsnbTshZgg7IucIFNsYWNr7J2EIO2Gte2VnCDsirnsnbgg7ZSE66Gc7IS47Iqk66W8IO2ZnOyEse2ZlO2VqeuLiOuLpC5cbiAgICog7ISk7KCV7J20IOyXhuycvOuptCDquLDsobQg64+Z7J6RKOuwlOuhnCDsi6Ttlokp7Jy866GcIOuPmeyeke2VqeuLiOuLpC5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiBzbGFja0NvbmZpcm06IHtcbiAgICogICB0YXJnZXRzOiBbXCJwcm9kdWN0aW9uXCJdLFxuICAgKiAgIGJvdFRva2VuOiBwcm9jZXNzLmVudi5TTEFDS19CT1RfVE9LRU4gPz8gXCJcIixcbiAgICogICBjaGFubmVsSWQ6IHByb2Nlc3MuZW52LlNMQUNLX0NIQU5ORUxfSUQgPz8gXCJcIixcbiAgICogfVxuICAgKiBgYGBcbiAgICovXG4gIHNsYWNrQ29uZmlybT86IHtcbiAgICAvKiog7Iq57J247J20IO2VhOyalO2VnCBEQiDtgqQg66qp66GdICjsmIg6IFtcInByb2R1Y3Rpb25cIl0pICovXG4gICAgdGFyZ2V0czogKGtleW9mIFNvbmFtdURCQ29uZmlnKVtdO1xuICAgIC8qKiBTbGFjayBCb3QgVG9rZW4gKHhveGItLi4uKSAqL1xuICAgIGJvdFRva2VuOiBzdHJpbmc7XG4gICAgLyoqIFNsYWNrIENoYW5uZWwgSUQgKEMuLi4pICovXG4gICAgY2hhbm5lbElkOiBzdHJpbmc7XG4gIH07XG59O1xuXG5leHBvcnQgdHlwZSBTb25hbXVTZXJ2ZXJPcHRpb25zID0ge1xuICAvLyDtlITroZzsoJ3tirgg7Jm467aA7JeQ7IScIOygkeq3vO2VoCDsiJgg7J6I64qUIFVSTC4g6riw67O46rCS7J2AIHtzZXJ2ZXIubGlzdGVuLmhvc3R9OntzZXJ2ZXIubGlzdGVuLnBvcnR9IOyeheuLiOuLpC5cbiAgYmFzZVVybD86IHN0cmluZztcblxuICBmYXN0aWZ5PzogT21pdDxGYXN0aWZ5U2VydmVyT3B0aW9ucywgXCJsb2dnZXJcIj47XG5cbiAgbGlzdGVuPzoge1xuICAgIHBvcnQ6IG51bWJlcjtcbiAgICBob3N0Pzogc3RyaW5nO1xuICB9O1xuXG4gIHBsdWdpbnM/OiB7XG4gICAgLyoqIOydkeuLtSDslZXstpUg7ZSM65+s6re47J24IChAZmFzdGlmeS9jb21wcmVzcykgKi9cbiAgICBjb21wcmVzcz86IGJvb2xlYW4gfCBGYXN0aWZ5Q29tcHJlc3NPcHRpb25zO1xuICAgIGNvcnM/OiBib29sZWFuIHwgRmFzdGlmeUNvcnNPcHRpb25zO1xuICAgIGZvcm1ib2R5PzogYm9vbGVhbiB8IEZhc3RpZnlGb3JtYm9keU9wdGlvbnM7XG4gICAgbXVsdGlwYXJ0PzogYm9vbGVhbiB8IEZhc3RpZnlNdWx0aXBhcnRPcHRpb25zO1xuICAgIHFzPzogYm9vbGVhbiB8IFFzUGx1Z2luT3B0aW9ucztcbiAgICBzc2U/OiBib29sZWFuIHwgU3NlUGx1Z2luT3B0aW9ucztcbiAgICBzdGF0aWM/OiBib29sZWFuIHwgRmFzdGlmeVN0YXRpY09wdGlvbnM7XG4gICAgd3M/OiBib29sZWFuIHwgV2Vic29ja2V0UGx1Z2luT3B0aW9ucztcblxuICAgIGN1c3RvbT86IChzZXJ2ZXI6IEZhc3RpZnlJbnN0YW5jZSkgPT4gdm9pZDtcbiAgfTtcblxuICAvKipcbiAgICogYmV0dGVyLWF1dGgg7J247KadIOyEpOyglVxuICAgKiBTb25hbXUg7ZmV7J6l7Jy866GcIGFkZGl0aW9uYWxGaWVsZHPsl5Agc29uYW11VHlwZSDsho3shLEg7LaU6rCAIOqwgOuKpVxuICAgKiBCZXR0ZXJBdXRo7J2YIERCRmllbGRBdHRyaWJ1dGXrpbwg7ZmV7J6l7ZWgIOyImCDsl4bslrTshJwg7Jqw7ISgIHVzZXLrp4wg7KCB7JqpXG4gICAqL1xuICBhdXRoPzogQmV0dGVyQXV0aE9wdGlvbnMgJiB7XG4gICAgdXNlcj86IHtcbiAgICAgIGFkZGl0aW9uYWxGaWVsZHM/OiBSZWNvcmQ8XG4gICAgICAgIHN0cmluZyxcbiAgICAgICAgTm9uTnVsbGFibGU8Tm9uTnVsbGFibGU8QmV0dGVyQXV0aE9wdGlvbnNbXCJ1c2VyXCJdPltcImFkZGl0aW9uYWxGaWVsZHNcIl0+W3N0cmluZ10gJiB7XG4gICAgICAgICAgc29uYW11VHlwZT86IHN0cmluZztcbiAgICAgICAgfVxuICAgICAgPjtcbiAgICB9O1xuICB9O1xuXG4gIC8qKlxuICAgKiBXZWJTb2NrZXQgcnVudGltZSDshKTsoJUuXG4gICAqXG4gICAqIOuLqOydvCDsnbjsiqTthLTsiqTsl5DshJzripQg6riw67O46rCS7Jy866GcIOy2qeu2hO2VmOupsCwg66mA7YuwIOyduOyKpO2EtOyKpC/rjIDqt5zrqqgg7ZmY6rK97JeQ7ISc64qUXG4gICAqIHByZXNlbmNlIHN0b3Jl7JmAIGNsdXN0ZXIgYnVz66W8IOyXrOq4sOyEnCDso7zsnoXtlanri4jri6QuXG4gICAqL1xuICB3ZWJzb2NrZXQ/OiBXZWJTb2NrZXRSdW50aW1lT3B0aW9ucztcblxuICBhcGlDb25maWc6IFNvbmFtdUZhc3RpZnlDb25maWc7XG5cbiAgLyoqXG4gICAqIFN0b3JhZ2Ug65Oc65287J2067KEIOyEpOyglS5cbiAgICogc2F2ZVRvRGlzayhkaXNrTmFtZSwga2V5KSDtmLjstpwg7IucIOuTnOudvOydtOuyhOulvCDrqoXsi5zsoIHsnLzroZwg7KeA7KCV7ZWp64uI64ukLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIGltcG9ydCB7IGRyaXZlcnMgfSBmcm9tIFwic29uYW11L3N0b3JhZ2VcIjtcbiAgICpcbiAgICogc3RvcmFnZToge1xuICAgKiAgIGRyaXZlcnM6IHtcbiAgICogICAgIGZzOiBkcml2ZXJzLmZzKHsgbG9jYXRpb246IFwiLi91cGxvYWRzXCIsIHVybEJ1aWxkZXI6IHsgLi4uIH0gfSksXG4gICAqICAgICBzMzogZHJpdmVycy5zMyh7IGJ1Y2tldDogXCJteS1idWNrZXRcIiwgcmVnaW9uOiBcImFwLW5vcnRoZWFzdC0yXCIsIC4uLiB9KSxcbiAgICogICB9XG4gICAqIH1cbiAgICogYGBgXG4gICAqL1xuICBzdG9yYWdlPzogU3RvcmFnZUNvbmZpZztcblxuICAvKipcbiAgICogQ2FjaGUg7ISk7KCVIChCZW50b0NhY2hlIOq4sOuwmClcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiBpbXBvcnQgeyBkcml2ZXJzLCBzdG9yZSB9IGZyb20gXCJzb25hbXUvY2FjaGVcIjtcbiAgICpcbiAgICogY2FjaGU6IHtcbiAgICogICBkZWZhdWx0OiAnbWFpbicsXG4gICAqICAgc3RvcmVzOiB7XG4gICAqICAgICBtYWluOiBzdG9yZSgpXG4gICAqICAgICAgIC51c2VMMUxheWVyKGRyaXZlcnMubWVtb3J5KHsgbWF4U2l6ZTogJzEwMG1iJyB9KSlcbiAgICogICAgICAgLnVzZUwyTGF5ZXIoZHJpdmVycy5yZWRpcyh7IGNvbm5lY3Rpb246IHJlZGlzQ29ubmVjdGlvbiB9KSlcbiAgICogICAgICAgLnVzZUJ1cyhkcml2ZXJzLnJlZGlzQnVzKHsgY29ubmVjdGlvbjogcmVkaXNDb25uZWN0aW9uIH0pKVxuICAgKiAgIH0sXG4gICAqICAgdHRsOiAnMWgnLFxuICAgKiB9XG4gICAqIGBgYFxuICAgKi9cbiAgY2FjaGU/OiBDYWNoZUNvbmZpZztcblxuICBsaWZlY3ljbGU/OiB7XG4gICAgb25TdGFydD86IChzZXJ2ZXI6IEZhc3RpZnlJbnN0YW5jZSkgPT4gUHJvbWlzZTx2b2lkPiB8IHZvaWQ7XG4gICAgb25TaHV0ZG93bj86IChzZXJ2ZXI6IEZhc3RpZnlJbnN0YW5jZSkgPT4gUHJvbWlzZTx2b2lkPiB8IHZvaWQ7XG4gICAgb25FcnJvcj86IChlcnJvcjogRXJyb3IsIHJlcXVlc3Q6IEZhc3RpZnlSZXF1ZXN0LCByZXBseTogRmFzdGlmeVJlcGx5KSA9PiBQcm9taXNlPHZvaWQ+IHwgdm9pZDtcbiAgfTtcbn07XG5cbmV4cG9ydCB0eXBlIFNvbmFtdVRhc2tPcHRpb25zID0ge1xuICAvLyB3b3JrZXLrpbwg7IKs7Jqp7ZWg7KeAIOyXrOu2gCwg6riw67O47KCB7Jy866GcIGRhZW1vbiDrqqjrk5zsl5DshJzrp4wg7IKs7Jqp65CoLlxuICBlbmFibGVXb3JrZXI/OiBib29sZWFuO1xuICB3b3JrZXJPcHRpb25zPzogV29ya2Zsb3dPcHRpb25zO1xuICBjb250ZXh0UHJvdmlkZXI6IChcbiAgICBkZWZhdWx0Q29udGV4dDogUGljazxcbiAgICAgIENvbnRleHQsXG4gICAgICB8IFwidHJhbnNwb3J0XCJcbiAgICAgIHwgXCJyZXBseVwiXG4gICAgICB8IFwicmVxdWVzdFwiXG4gICAgICB8IFwiaGVhZGVyc1wiXG4gICAgICB8IFwiY3JlYXRlU1NFXCJcbiAgICAgIHwgXCJuYWl0ZVN0b3JlXCJcbiAgICAgIHwgXCJsb2NhbGVcIlxuICAgICAgfCBcInVzZXJcIlxuICAgICAgfCBcInNlc3Npb25cIlxuICAgID4sXG4gICkgPT4gQ29udGV4dCB8IFByb21pc2U8Q29udGV4dD47XG4gIHdlYnNvY2tldENvbnRleHRQcm92aWRlcj86IChcbiAgICBkZWZhdWx0Q29udGV4dDogUGljazxcbiAgICAgIFdlYlNvY2tldENvbnRleHQsXG4gICAgICBcInRyYW5zcG9ydFwiIHwgXCJyZXF1ZXN0XCIgfCBcImhlYWRlcnNcIiB8IFwid3NcIiB8IFwibmFpdGVTdG9yZVwiIHwgXCJsb2NhbGVcIiB8IFwidXNlclwiIHwgXCJzZXNzaW9uXCJcbiAgICA+LFxuICAgIHJlcXVlc3Q6IEZhc3RpZnlSZXF1ZXN0LFxuICApID0+IFdlYlNvY2tldENvbnRleHQgfCBQcm9taXNlPFdlYlNvY2tldENvbnRleHQ+O1xufTtcblxuZXhwb3J0IHR5cGUgU29uYW11U1NST3B0aW9ucyA9IHtcbiAgLyoqXG4gICAqIEh5ZHJhdGlvbiDsoITrnrVcbiAgICogLSAnbm9uZSc6IO2VreyDgSDsg4jroZwg66CM642U66eBIChoeWRyYXRpb24gbWlzbWF0Y2gg6rGx7KCVIOyXhuydjCwg6raM7J6lKVxuICAgKiAtICdmdWxsJzogUmVhY3QgaHlkcmF0aW9uIOyLnOuPhCAo7ISc67KEIEhUTUwg7J6s7IKs7JqpLCBtaXNtYXRjaCDso7zsnZgpXG4gICAqIEBkZWZhdWx0ICdub25lJ1xuICAgKi9cbiAgaHlkcmF0aW9uPzogXCJub25lXCIgfCBcImZ1bGxcIjtcbn07XG5cbi8vIE5PVEUoSGF6ZSwgMjUxMjA5KTogY29uZmln7JeQ64qUIFQsIFByb21pc2U8VD4sICgpID0+IFQsICgpID0+IFByb21pc2U8VD7qsIAg66qo65GQIOyYrCDsiJgg7J6I7Ja07JW8IO2VqC5cbmV4cG9ydCBmdW5jdGlvbiBkZWZpbmVDb25maWcoY29uZmlnOiBFeGVjdXRhYmxlPFNvbmFtdUNvbmZpZz4pOiBQcm9taXNlPFNvbmFtdUNvbmZpZz4ge1xuICBpZiAodHlwZW9mIGNvbmZpZyA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShjb25maWcoKSk7XG4gIH1cblxuICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGNvbmZpZyk7XG59XG5cbi8qKlxuICogc29uYW11LmNvbmZpZy50cyDtjIzsnbzsnYQg66Gc65Oc7ZWp64uI64ukLlxuICog7J20IOyEpOyglSDtjIzsnbzsnYAg7ZmY6rK97JeQIOuUsOudvCDri6Trpbgg6rK966Gc7JeQIOyeiOydhCDsiJgg7J6I7Iq164uI64ukLlxuICogZGlzdOulvCDruYzrk5ztlZjripQg7ZmY6rK97J20652866m0IGRpc3Qg67CU66GcIOyVhOuemOyXkCDsnojsnYQg6rKD7J206rOgKGNsaS13cmFwcGVyLnRz7JeQ7IScIOu5jOuTnCksXG4gKiDqt7jroIfsp4Ag7JWK7J2AIO2ZmOqyveydtOudvOuptCDtlITroZzsoJ3tirgg66Oo7Yq47JeQIOyeiOydhCDqsoPsnoXri4jri6QuXG4gKlxuICog7J20IO2VqOyImOuKlCDsnZjrj4TsoIHsnLzroZwg64uk66W4IOydmOyhtOyEseydmCDsgqzsmqnsnYQg7LWc64yA7ZWcIOuwsOygnO2VmOyYgOyKteuLiOuLpC5cbiAqIOydtOuKlCDsi6Ttlokg7LSI6riw7JeQIOy1nOuMgO2VnCDruaDrpbTqsowg7ISk7KCV7J2EIOydveyWtOyYrCDsiJgg7J6I64+E66GdIO2VmOq4sCDsnITtlajsnoXri4jri6QuXG4gKiDrlLDrnbzshJwg6rK966GcIGNvbmNhdOqzvCBVUkwgc2NoZW1lIOy2lOqwgOuPhCDri6jsiJztlZwg66y47J6Q7Je0IOyhsOyekeycvOuhnCDsspjrpqztlZjsmIDsirXri4jri6QuXG4gKlxuICogQHBhcmFtIHJvb3RQYXRoXG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbG9hZENvbmZpZyhyb290UGF0aDogc3RyaW5nKTogUHJvbWlzZTxTb25hbXVDb25maWc+IHtcbiAgY29uc3Qgc2hvdWxkTG9hZFNvdXJjZUNvbmZpZyA9IHByb2Nlc3MuZW52LkhPVCA9PT0gXCJ5ZXNcIiB8fCBwcm9jZXNzLmVudi5WSVRFU1QgPT09IFwidHJ1ZVwiO1xuICBjb25zdCBjb25maWdQYXRoID0gc2hvdWxkTG9hZFNvdXJjZUNvbmZpZ1xuICAgID8gYCR7cm9vdFBhdGh9L3NyYy9zb25hbXUuY29uZmlnLnRzYFxuICAgIDogYCR7cm9vdFBhdGh9L2Rpc3Qvc29uYW11LmNvbmZpZy5qc2A7XG5cbiAgaWYgKHNob3VsZExvYWRTb3VyY2VDb25maWcpIHtcbiAgICBjb25zdCB7IGVuc3VyZVRzTG9hZGVyUmVnaXN0ZXJlZCB9ID0gYXdhaXQgaW1wb3J0KFwiLi4vYmluL3RzLWxvYWRlci1yZWdpc3RyYXRpb25cIik7XG4gICAgYXdhaXQgZW5zdXJlVHNMb2FkZXJSZWdpc3RlcmVkKHJvb3RQYXRoKTtcbiAgfVxuXG4gIGNvbnN0IHsgZGVmYXVsdDogY29uZmlnIH0gPSBhd2FpdCBpbXBvcnQoYGZpbGU6Ly8ke2NvbmZpZ1BhdGh9YCk7XG4gIHJldHVybiBjb25maWc7XG59XG4iXSwibWFwcGluZ3MiOiI7OztBQTJTQSxTQUFnQixhQUFhLFFBQXlEO0FBQ3BGLEtBQUksT0FBTyxXQUFXLFlBQVk7QUFDaEMsU0FBTyxRQUFRLFFBQVEsUUFBUSxDQUFDOztBQUdsQyxRQUFPLFFBQVEsUUFBUSxPQUFPOzs7Ozs7Ozs7Ozs7Ozs7QUFnQmhDLGVBQXNCLFdBQVcsVUFBeUM7Q0FDeEUsTUFBTSx5QkFBeUIsUUFBUSxJQUFJLFFBQVEsU0FBUyxRQUFRLElBQUksV0FBVztDQUNuRixNQUFNLGFBQWEseUJBQ2YsR0FBRyxTQUFTLHlCQUNaLEdBQUcsU0FBUztBQUVoQixLQUFJLHdCQUF3QjtFQUMxQixNQUFNLEVBQUUsNkJBQTZCLE1BQU0sT0FBTztBQUNsRCxRQUFNLHlCQUF5QixTQUFTOztDQUcxQyxNQUFNLEVBQUUsU0FBUyxXQUFXLE1BQU0sT0FBTyxVQUFVO0FBQ25ELFFBQU8ifQ==
38
+
39
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hcGkvY29uZmlnLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHR5cGUgRmFzdGlmeUNvbXByZXNzT3B0aW9ucyB9IGZyb20gXCJAZmFzdGlmeS9jb21wcmVzc1wiO1xuaW1wb3J0IHsgdHlwZSBGYXN0aWZ5Q29yc09wdGlvbnMgfSBmcm9tIFwiQGZhc3RpZnkvY29yc1wiO1xuaW1wb3J0IHsgdHlwZSBGYXN0aWZ5Rm9ybWJvZHlPcHRpb25zIH0gZnJvbSBcIkBmYXN0aWZ5L2Zvcm1ib2R5XCI7XG5pbXBvcnQgeyB0eXBlIEZhc3RpZnlNdWx0aXBhcnRPcHRpb25zIH0gZnJvbSBcIkBmYXN0aWZ5L211bHRpcGFydFwiO1xuaW1wb3J0IHsgdHlwZSBGYXN0aWZ5U3RhdGljT3B0aW9ucyB9IGZyb20gXCJAZmFzdGlmeS9zdGF0aWNcIjtcbmltcG9ydCB7IHR5cGUgV2Vic29ja2V0UGx1Z2luT3B0aW9ucyB9IGZyb20gXCJAZmFzdGlmeS93ZWJzb2NrZXRcIjtcbmltcG9ydCB7IHR5cGUgQmV0dGVyQXV0aE9wdGlvbnMgfSBmcm9tIFwiYmV0dGVyLWF1dGhcIjtcbmltcG9ydCB7XG4gIHR5cGUgRmFzdGlmeUluc3RhbmNlLFxuICB0eXBlIEZhc3RpZnlSZXBseSxcbiAgdHlwZSBGYXN0aWZ5UmVxdWVzdCxcbiAgdHlwZSBGYXN0aWZ5U2VydmVyT3B0aW9ucyxcbn0gZnJvbSBcImZhc3RpZnlcIjtcbmltcG9ydCB7IHR5cGUgUXNQbHVnaW5PcHRpb25zIH0gZnJvbSBcImZhc3RpZnktcXNcIjtcbmltcG9ydCB7IHR5cGUgU3NlUGx1Z2luT3B0aW9ucyB9IGZyb20gXCJmYXN0aWZ5LXNzZS12Mi9saWIvdHlwZXNcIjtcbmltcG9ydCB7IHR5cGUgS25leCB9IGZyb20gXCJrbmV4XCI7XG5cbmltcG9ydCB7IHR5cGUgQ2FjaGVDb25maWcgfSBmcm9tIFwiLi4vY2FjaGUvdHlwZXNcIjtcbmltcG9ydCB7IHR5cGUgU29uYW11REJDb25maWcgfSBmcm9tIFwiLi4vZGF0YWJhc2UvZGJcIjtcbmltcG9ydCB7IGFwcGx5Q3VycmVudFNuYXBzaG90VG9Qcm9jZXNzRW52IH0gZnJvbSBcIi4uL2VudlwiO1xuaW1wb3J0IHsgdHlwZSBTb25hbXVMb2dnaW5nT3B0aW9ucyB9IGZyb20gXCIuLi9sb2dnZXIvY29uZmlndXJlXCI7XG5pbXBvcnQgeyB0eXBlIFN0b3JhZ2VDb25maWcgfSBmcm9tIFwiLi4vc3RvcmFnZS90eXBlc1wiO1xuaW1wb3J0IHsgdHlwZSBXZWJTb2NrZXRSdW50aW1lT3B0aW9ucyB9IGZyb20gXCIuLi9zdHJlYW0vd3NcIjtcbmltcG9ydCB7IHR5cGUgV29ya2Zsb3dPcHRpb25zIH0gZnJvbSBcIi4uL3Rhc2tzL3dvcmtmbG93LW1hbmFnZXJcIjtcbmltcG9ydCB7IHR5cGUgRXhlY3V0YWJsZSwgdHlwZSBTb25hbXVGYXN0aWZ5Q29uZmlnIH0gZnJvbSBcIi4uL3R5cGVzL3R5cGVzXCI7XG5pbXBvcnQgeyB0eXBlIENvbnRleHQsIHR5cGUgV2ViU29ja2V0Q29udGV4dCB9IGZyb20gXCIuL2NvbnRleHRcIjtcblxuZXhwb3J0IHR5cGUgRGF0YWJhc2VDb25maWcgPSBPbWl0PEtuZXguQ29uZmlnLCBcImNvbm5lY3Rpb25cIj4gJiB7XG4gIGNvbm5lY3Rpb24/OiBLbmV4LlBnQ29ubmVjdGlvbkNvbmZpZztcbn07XG5cbi8qKlxuICogaTE4biDshKTsoJVcbiAqL1xuZXhwb3J0IHR5cGUgU29uYW11STE4bk9wdGlvbnMgPSB7XG4gIC8qKiDquLDrs7ggbG9jYWxlICjtgqQg7KCV7J2YIOq4sOykgCArIOufsO2DgOyehCDquLDrs7jqsJIpICovXG4gIGRlZmF1bHRMb2NhbGU6IHN0cmluZztcbiAgLyoqIOyngOybkO2VmOuKlCBsb2NhbGUg66qp66GdICovXG4gIHN1cHBvcnRlZExvY2FsZXM6IHN0cmluZ1tdO1xufTtcblxuLyoqXG4gKiBEZXYg7ISc67KEIOuCtCBWaXRlc3Qg7IOB7KO8IOyduOyKpO2EtOyKpCDshKTsoJVcbiAqL1xuZXhwb3J0IHR5cGUgU29uYW11RGV2UnVubmVyQ29uZmlnID0ge1xuICAvKiogRGV2UnVubmVyIO2ZnOyEse2ZlCDsl6zrtoAgKOq4sOuzuDogZmFsc2UpICovXG4gIGVuYWJsZWQ6IGJvb2xlYW47XG4gIC8qKiDthYzsiqTtirgg7JeU65Oc7Y+s7J247Yq4IOqyveuhnCDsoJHrkZDsgqwgKOq4sOuzuDogL19fdGVzdF9fKSAqL1xuICByb3V0ZVByZWZpeD86IHN0cmluZztcbiAgLyoqIHZpdGVzdC5jb25maWcudHMg6rK966GcIChhcGktcm9vdCDsg4HrjIDqsr3roZwpICovXG4gIHZpdGVzdENvbmZpZ1BhdGg/OiBzdHJpbmc7XG59O1xuXG4vKipcbiAqIO2FjOyKpO2KuCDshKTsoJVcbiAqIHZpdGVzdCDrs5HroKwg7YWM7Iqk7YyF7J2EIHNvbmFtdS5jb25maWcudHMg7ZWcIOqzs+yXkOyEnCDqtIDrpqztlZjquLAg7JyE7ZWcIOyEpOygleyeheuLiOuLpC5cbiAqL1xuZXhwb3J0IHR5cGUgU29uYW11VGVzdENvbmZpZyA9IHtcbiAgLyoqIOuzkeugrCDthYzsiqTtjIUg7Zmc7ISx7ZmUICjquLDrs7g6IGZhbHNlKSAqL1xuICBwYXJhbGxlbD86IGJvb2xlYW47XG4gIC8qKiDrs5HroKwg7Iuk7ZaJIOybjOy7pCDsiJggKOq4sOuzuDogNCkgKi9cbiAgbWF4V29ya2Vycz86IG51bWJlcjtcbiAgLyoqIERldiDshJzrsoQg64K0IFZpdGVzdCDsg4Hso7wg7J247Iqk7YS07IqkIOyEpOyglSAqL1xuICBkZXZSdW5uZXI/OiBTb25hbXVEZXZSdW5uZXJDb25maWc7XG59O1xuXG5leHBvcnQgdHlwZSBTb25hbXVDb25maWc8VFNpbmtJZCBleHRlbmRzIHN0cmluZyA9IHN0cmluZywgVEZpbHRlcklkIGV4dGVuZHMgc3RyaW5nID0gc3RyaW5nPiA9IHtcbiAgcHJvamVjdE5hbWU/OiBzdHJpbmc7XG5cbiAgYXBpOiB7XG4gICAgZGlyOiBzdHJpbmc7XG4gICAgcm91dGU6IHtcbiAgICAgIHByZWZpeDogc3RyaW5nO1xuICAgIH07XG4gICAgdGltZXpvbmU/OiBzdHJpbmc7XG4gIH07XG5cbiAgLyoqXG4gICAqIGkxOG4g7ISk7KCVXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogaTE4bjoge1xuICAgKiAgIGRlZmF1bHRMb2NhbGU6ICdrbycsXG4gICAqICAgc3VwcG9ydGVkTG9jYWxlczogWydrbycsICdlbicsICdqYSddLFxuICAgKiB9XG4gICAqIGBgYFxuICAgKi9cbiAgaTE4bjogU29uYW11STE4bk9wdGlvbnM7XG5cbiAgc3luYzoge1xuICAgIHRhcmdldHM6IHN0cmluZ1tdOyAvLyBcIndlYlwiLCBcImFwcFwiIOuTsVxuICB9O1xuXG4gIGRhdGFiYXNlOiB7XG4gICAgLy8g642w7J207YSw67Kg7J207IqkKHBn64qUIHBnIOuqqOuTiCwgcGduYXRpdmXripQgcGctbmF0aXZlIOuqqOuTiOydmCDshKTsuZjqsIAg7ZWE7JqU7ZWp64uI64ukLilcbiAgICBkYXRhYmFzZT86IFwicGdcIiB8IFwicGduYXRpdmVcIjtcbiAgICAvLyDrqqjrk6Ag7ZmY6rK97JeQIOyggeyaqeuQoCDquLDrs7ggS25leCDsmLXshZhcbiAgICBkZWZhdWx0T3B0aW9ucz86IERhdGFiYXNlQ29uZmlnO1xuICB9O1xuXG4gIGxvZ2dpbmc/OiBmYWxzZSB8IFNvbmFtdUxvZ2dpbmdPcHRpb25zPFRTaW5rSWQsIFRGaWx0ZXJJZD47XG4gIHNlcnZlcjogU29uYW11U2VydmVyT3B0aW9ucztcbiAgdGFza3M/OiBTb25hbXVUYXNrT3B0aW9ucztcblxuICAvKipcbiAgICog7YWM7Iqk7Yq4IOyEpOyglSAo67OR66CsIO2FjOyKpO2MhSDrk7EpXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogdGVzdDoge1xuICAgKiAgIHBhcmFsbGVsOiB0cnVlLFxuICAgKiAgIG1heFdvcmtlcnM6IDQsXG4gICAqIH1cbiAgICogYGBgXG4gICAqL1xuICB0ZXN0PzogU29uYW11VGVzdENvbmZpZztcblxuICAvKipcbiAgICog7Jm467aAIOyXkOuUlO2EsCDshKTsoJUgKENERCDrk7Hsl5DshJwg7YyM7J28IO2OuOynkSDsi5wg7IKs7JqpKVxuICAgKiDrr7jshKTsoJUg7IucIFwidnNjb2RlXCLrpbwg6riw67O46rCS7Jy866GcIOyCrOyaqe2VqeuLiOuLpC5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiBleHRlcm5hbEVkaXRvcjogXCJjdXJzb3JcIlxuICAgKiBgYGBcbiAgICovXG4gIGV4dGVybmFsRWRpdG9yPzogXCJWaXN1YWwgU3R1ZGlvIENvZGVcIiB8IFwiWmVkXCIgfCBcIkN1cnNvclwiO1xuXG4gIC8qKlxuICAgKiBTbGFjayDsirnsnbgg7ISk7KCVIChQcm9kdWN0aW9uIOuniOydtOq3uOugiOydtOyFmOyaqSlcbiAgICpcbiAgICogUHJvZHVjdGlvbiBEQiDrp4jsnbTqt7jroIjsnbTshZgg7IucIFNsYWNr7J2EIO2Gte2VnCDsirnsnbgg7ZSE66Gc7IS47Iqk66W8IO2ZnOyEse2ZlO2VqeuLiOuLpC5cbiAgICog7ISk7KCV7J20IOyXhuycvOuptCDquLDsobQg64+Z7J6RKOuwlOuhnCDsi6Ttlokp7Jy866GcIOuPmeyeke2VqeuLiOuLpC5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiBzbGFja0NvbmZpcm06IHtcbiAgICogICB0YXJnZXRzOiBbXCJwcm9kdWN0aW9uXCJdLFxuICAgKiAgIGJvdFRva2VuOiBwcm9jZXNzLmVudi5TTEFDS19CT1RfVE9LRU4gPz8gXCJcIixcbiAgICogICBjaGFubmVsSWQ6IHByb2Nlc3MuZW52LlNMQUNLX0NIQU5ORUxfSUQgPz8gXCJcIixcbiAgICogfVxuICAgKiBgYGBcbiAgICovXG4gIHNsYWNrQ29uZmlybT86IHtcbiAgICAvKiog7Iq57J247J20IO2VhOyalO2VnCBEQiDtgqQg66qp66GdICjsmIg6IFtcInByb2R1Y3Rpb25cIl0pICovXG4gICAgdGFyZ2V0czogKGtleW9mIFNvbmFtdURCQ29uZmlnKVtdO1xuICAgIC8qKiBTbGFjayBCb3QgVG9rZW4gKHhveGItLi4uKSAqL1xuICAgIGJvdFRva2VuOiBzdHJpbmc7XG4gICAgLyoqIFNsYWNrIENoYW5uZWwgSUQgKEMuLi4pICovXG4gICAgY2hhbm5lbElkOiBzdHJpbmc7XG4gIH07XG59O1xuXG5leHBvcnQgdHlwZSBTb25hbXVTZXJ2ZXJPcHRpb25zID0ge1xuICAvLyDtlITroZzsoJ3tirgg7Jm467aA7JeQ7IScIOygkeq3vO2VoCDsiJgg7J6I64qUIFVSTC4g6riw67O46rCS7J2AIHtzZXJ2ZXIubGlzdGVuLmhvc3R9OntzZXJ2ZXIubGlzdGVuLnBvcnR9IOyeheuLiOuLpC5cbiAgYmFzZVVybD86IHN0cmluZztcblxuICBmYXN0aWZ5PzogT21pdDxGYXN0aWZ5U2VydmVyT3B0aW9ucywgXCJsb2dnZXJcIj47XG5cbiAgbGlzdGVuPzoge1xuICAgIHBvcnQ6IG51bWJlcjtcbiAgICBob3N0Pzogc3RyaW5nO1xuICB9O1xuXG4gIHBsdWdpbnM/OiB7XG4gICAgLyoqIOydkeuLtSDslZXstpUg7ZSM65+s6re47J24IChAZmFzdGlmeS9jb21wcmVzcykgKi9cbiAgICBjb21wcmVzcz86IGJvb2xlYW4gfCBGYXN0aWZ5Q29tcHJlc3NPcHRpb25zO1xuICAgIGNvcnM/OiBib29sZWFuIHwgRmFzdGlmeUNvcnNPcHRpb25zO1xuICAgIGZvcm1ib2R5PzogYm9vbGVhbiB8IEZhc3RpZnlGb3JtYm9keU9wdGlvbnM7XG4gICAgbXVsdGlwYXJ0PzogYm9vbGVhbiB8IEZhc3RpZnlNdWx0aXBhcnRPcHRpb25zO1xuICAgIHFzPzogYm9vbGVhbiB8IFFzUGx1Z2luT3B0aW9ucztcbiAgICBzc2U/OiBib29sZWFuIHwgU3NlUGx1Z2luT3B0aW9ucztcbiAgICBzdGF0aWM/OiBib29sZWFuIHwgRmFzdGlmeVN0YXRpY09wdGlvbnM7XG4gICAgd3M/OiBib29sZWFuIHwgV2Vic29ja2V0UGx1Z2luT3B0aW9ucztcblxuICAgIGN1c3RvbT86IChzZXJ2ZXI6IEZhc3RpZnlJbnN0YW5jZSkgPT4gdm9pZDtcbiAgfTtcblxuICAvKipcbiAgICogYmV0dGVyLWF1dGgg7J247KadIOyEpOyglVxuICAgKiBTb25hbXUg7ZmV7J6l7Jy866GcIGFkZGl0aW9uYWxGaWVsZHPsl5Agc29uYW11VHlwZSDsho3shLEg7LaU6rCAIOqwgOuKpVxuICAgKiBCZXR0ZXJBdXRo7J2YIERCRmllbGRBdHRyaWJ1dGXrpbwg7ZmV7J6l7ZWgIOyImCDsl4bslrTshJwg7Jqw7ISgIHVzZXLrp4wg7KCB7JqpXG4gICAqL1xuICBhdXRoPzogQmV0dGVyQXV0aE9wdGlvbnMgJiB7XG4gICAgdXNlcj86IHtcbiAgICAgIGFkZGl0aW9uYWxGaWVsZHM/OiBSZWNvcmQ8XG4gICAgICAgIHN0cmluZyxcbiAgICAgICAgTm9uTnVsbGFibGU8Tm9uTnVsbGFibGU8QmV0dGVyQXV0aE9wdGlvbnNbXCJ1c2VyXCJdPltcImFkZGl0aW9uYWxGaWVsZHNcIl0+W3N0cmluZ10gJiB7XG4gICAgICAgICAgc29uYW11VHlwZT86IHN0cmluZztcbiAgICAgICAgfVxuICAgICAgPjtcbiAgICB9O1xuICB9O1xuXG4gIC8qKlxuICAgKiBXZWJTb2NrZXQgcnVudGltZSDshKTsoJUuXG4gICAqXG4gICAqIOuLqOydvCDsnbjsiqTthLTsiqTsl5DshJzripQg6riw67O46rCS7Jy866GcIOy2qeu2hO2VmOupsCwg66mA7YuwIOyduOyKpO2EtOyKpC/rjIDqt5zrqqgg7ZmY6rK97JeQ7ISc64qUXG4gICAqIHByZXNlbmNlIHN0b3Jl7JmAIGNsdXN0ZXIgYnVz66W8IOyXrOq4sOyEnCDso7zsnoXtlanri4jri6QuXG4gICAqL1xuICB3ZWJzb2NrZXQ/OiBXZWJTb2NrZXRSdW50aW1lT3B0aW9ucztcblxuICBhcGlDb25maWc6IFNvbmFtdUZhc3RpZnlDb25maWc7XG5cbiAgLyoqXG4gICAqIFN0b3JhZ2Ug65Oc65287J2067KEIOyEpOyglS5cbiAgICogc2F2ZVRvRGlzayhkaXNrTmFtZSwga2V5KSDtmLjstpwg7IucIOuTnOudvOydtOuyhOulvCDrqoXsi5zsoIHsnLzroZwg7KeA7KCV7ZWp64uI64ukLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIGltcG9ydCB7IGRyaXZlcnMgfSBmcm9tIFwic29uYW11L3N0b3JhZ2VcIjtcbiAgICpcbiAgICogc3RvcmFnZToge1xuICAgKiAgIGRyaXZlcnM6IHtcbiAgICogICAgIGZzOiBkcml2ZXJzLmZzKHsgbG9jYXRpb246IFwiLi91cGxvYWRzXCIsIHVybEJ1aWxkZXI6IHsgLi4uIH0gfSksXG4gICAqICAgICBzMzogZHJpdmVycy5zMyh7IGJ1Y2tldDogXCJteS1idWNrZXRcIiwgcmVnaW9uOiBcImFwLW5vcnRoZWFzdC0yXCIsIC4uLiB9KSxcbiAgICogICB9XG4gICAqIH1cbiAgICogYGBgXG4gICAqL1xuICBzdG9yYWdlPzogU3RvcmFnZUNvbmZpZztcblxuICAvKipcbiAgICogQ2FjaGUg7ISk7KCVIChCZW50b0NhY2hlIOq4sOuwmClcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiBpbXBvcnQgeyBkcml2ZXJzLCBzdG9yZSB9IGZyb20gXCJzb25hbXUvY2FjaGVcIjtcbiAgICpcbiAgICogY2FjaGU6IHtcbiAgICogICBkZWZhdWx0OiAnbWFpbicsXG4gICAqICAgc3RvcmVzOiB7XG4gICAqICAgICBtYWluOiBzdG9yZSgpXG4gICAqICAgICAgIC51c2VMMUxheWVyKGRyaXZlcnMubWVtb3J5KHsgbWF4U2l6ZTogJzEwMG1iJyB9KSlcbiAgICogICAgICAgLnVzZUwyTGF5ZXIoZHJpdmVycy5yZWRpcyh7IGNvbm5lY3Rpb246IHJlZGlzQ29ubmVjdGlvbiB9KSlcbiAgICogICAgICAgLnVzZUJ1cyhkcml2ZXJzLnJlZGlzQnVzKHsgY29ubmVjdGlvbjogcmVkaXNDb25uZWN0aW9uIH0pKVxuICAgKiAgIH0sXG4gICAqICAgdHRsOiAnMWgnLFxuICAgKiB9XG4gICAqIGBgYFxuICAgKi9cbiAgY2FjaGU/OiBDYWNoZUNvbmZpZztcblxuICBsaWZlY3ljbGU/OiB7XG4gICAgb25TdGFydD86IChzZXJ2ZXI6IEZhc3RpZnlJbnN0YW5jZSkgPT4gUHJvbWlzZTx2b2lkPiB8IHZvaWQ7XG4gICAgb25TaHV0ZG93bj86IChzZXJ2ZXI6IEZhc3RpZnlJbnN0YW5jZSkgPT4gUHJvbWlzZTx2b2lkPiB8IHZvaWQ7XG4gICAgb25FcnJvcj86IChlcnJvcjogRXJyb3IsIHJlcXVlc3Q6IEZhc3RpZnlSZXF1ZXN0LCByZXBseTogRmFzdGlmeVJlcGx5KSA9PiBQcm9taXNlPHZvaWQ+IHwgdm9pZDtcbiAgfTtcbn07XG5cbmV4cG9ydCB0eXBlIFNvbmFtdVRhc2tPcHRpb25zID0ge1xuICAvLyB3b3JrZXLrpbwg7IKs7Jqp7ZWg7KeAIOyXrOu2gCwg6riw67O47KCB7Jy866GcIGRhZW1vbiDrqqjrk5zsl5DshJzrp4wg7IKs7Jqp65CoLlxuICBlbmFibGVXb3JrZXI/OiBib29sZWFuO1xuICB3b3JrZXJPcHRpb25zPzogV29ya2Zsb3dPcHRpb25zO1xuICBjb250ZXh0UHJvdmlkZXI6IChcbiAgICBkZWZhdWx0Q29udGV4dDogUGljazxcbiAgICAgIENvbnRleHQsXG4gICAgICB8IFwidHJhbnNwb3J0XCJcbiAgICAgIHwgXCJyZXBseVwiXG4gICAgICB8IFwicmVxdWVzdFwiXG4gICAgICB8IFwiaGVhZGVyc1wiXG4gICAgICB8IFwiY3JlYXRlU1NFXCJcbiAgICAgIHwgXCJuYWl0ZVN0b3JlXCJcbiAgICAgIHwgXCJsb2NhbGVcIlxuICAgICAgfCBcInVzZXJcIlxuICAgICAgfCBcInNlc3Npb25cIlxuICAgID4sXG4gICkgPT4gQ29udGV4dCB8IFByb21pc2U8Q29udGV4dD47XG4gIHdlYnNvY2tldENvbnRleHRQcm92aWRlcj86IChcbiAgICBkZWZhdWx0Q29udGV4dDogUGljazxcbiAgICAgIFdlYlNvY2tldENvbnRleHQsXG4gICAgICBcInRyYW5zcG9ydFwiIHwgXCJyZXF1ZXN0XCIgfCBcImhlYWRlcnNcIiB8IFwid3NcIiB8IFwibmFpdGVTdG9yZVwiIHwgXCJsb2NhbGVcIiB8IFwidXNlclwiIHwgXCJzZXNzaW9uXCJcbiAgICA+LFxuICAgIHJlcXVlc3Q6IEZhc3RpZnlSZXF1ZXN0LFxuICApID0+IFdlYlNvY2tldENvbnRleHQgfCBQcm9taXNlPFdlYlNvY2tldENvbnRleHQ+O1xufTtcblxuZXhwb3J0IHR5cGUgU29uYW11U1NST3B0aW9ucyA9IHtcbiAgLyoqXG4gICAqIEh5ZHJhdGlvbiDsoITrnrVcbiAgICogLSAnbm9uZSc6IO2VreyDgSDsg4jroZwg66CM642U66eBIChoeWRyYXRpb24gbWlzbWF0Y2gg6rGx7KCVIOyXhuydjCwg6raM7J6lKVxuICAgKiAtICdmdWxsJzogUmVhY3QgaHlkcmF0aW9uIOyLnOuPhCAo7ISc67KEIEhUTUwg7J6s7IKs7JqpLCBtaXNtYXRjaCDso7zsnZgpXG4gICAqIEBkZWZhdWx0ICdub25lJ1xuICAgKi9cbiAgaHlkcmF0aW9uPzogXCJub25lXCIgfCBcImZ1bGxcIjtcbn07XG5cbi8vIE5PVEUoSGF6ZSwgMjUxMjA5KTogY29uZmln7JeQ64qUIFQsIFByb21pc2U8VD4sICgpID0+IFQsICgpID0+IFByb21pc2U8VD7qsIAg66qo65GQIOyYrCDsiJgg7J6I7Ja07JW8IO2VqC5cbmV4cG9ydCBmdW5jdGlvbiBkZWZpbmVDb25maWcoY29uZmlnOiBFeGVjdXRhYmxlPFNvbmFtdUNvbmZpZz4pOiBQcm9taXNlPFNvbmFtdUNvbmZpZz4ge1xuICBpZiAodHlwZW9mIGNvbmZpZyA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShjb25maWcoKSk7XG4gIH1cblxuICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGNvbmZpZyk7XG59XG5cbi8qKlxuICogc29uYW11LmNvbmZpZy50cyDtjIzsnbzsnYQg66Gc65Oc7ZWp64uI64ukLlxuICog7J20IOyEpOyglSDtjIzsnbzsnYAg7ZmY6rK97JeQIOuUsOudvCDri6Trpbgg6rK966Gc7JeQIOyeiOydhCDsiJgg7J6I7Iq164uI64ukLlxuICogZGlzdOulvCDruYzrk5ztlZjripQg7ZmY6rK97J20652866m0IGRpc3Qg67CU66GcIOyVhOuemOyXkCDsnojsnYQg6rKD7J206rOgKGNsaS13cmFwcGVyLnRz7JeQ7IScIOu5jOuTnCksXG4gKiDqt7jroIfsp4Ag7JWK7J2AIO2ZmOqyveydtOudvOuptCDtlITroZzsoJ3tirgg66Oo7Yq47JeQIOyeiOydhCDqsoPsnoXri4jri6QuXG4gKlxuICog7J20IO2VqOyImOuKlCDsnZjrj4TsoIHsnLzroZwg64uk66W4IOydmOyhtOyEseydmCDsgqzsmqnsnYQg7LWc64yA7ZWcIOuwsOygnO2VmOyYgOyKteuLiOuLpC5cbiAqIOydtOuKlCDsi6Ttlokg7LSI6riw7JeQIOy1nOuMgO2VnCDruaDrpbTqsowg7ISk7KCV7J2EIOydveyWtOyYrCDsiJgg7J6I64+E66GdIO2VmOq4sCDsnITtlajsnoXri4jri6QuXG4gKiDrlLDrnbzshJwg6rK966GcIGNvbmNhdOqzvCBVUkwgc2NoZW1lIOy2lOqwgOuPhCDri6jsiJztlZwg66y47J6Q7Je0IOyhsOyekeycvOuhnCDsspjrpqztlZjsmIDsirXri4jri6QuXG4gKlxuICogQHBhcmFtIHJvb3RQYXRoXG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbG9hZENvbmZpZyhyb290UGF0aDogc3RyaW5nKTogUHJvbWlzZTxTb25hbXVDb25maWc+IHtcbiAgYXBwbHlDdXJyZW50U25hcHNob3RUb1Byb2Nlc3NFbnYocm9vdFBhdGgpO1xuXG4gIGNvbnN0IHNob3VsZExvYWRTb3VyY2VDb25maWcgPSBwcm9jZXNzLmVudi5IT1QgPT09IFwieWVzXCIgfHwgcHJvY2Vzcy5lbnYuVklURVNUID09PSBcInRydWVcIjtcbiAgY29uc3QgY29uZmlnUGF0aCA9IHNob3VsZExvYWRTb3VyY2VDb25maWdcbiAgICA/IGAke3Jvb3RQYXRofS9zcmMvc29uYW11LmNvbmZpZy50c2BcbiAgICA6IGAke3Jvb3RQYXRofS9kaXN0L3NvbmFtdS5jb25maWcuanNgO1xuXG4gIGlmIChzaG91bGRMb2FkU291cmNlQ29uZmlnKSB7XG4gICAgY29uc3QgeyBlbnN1cmVUc0xvYWRlclJlZ2lzdGVyZWQgfSA9IGF3YWl0IGltcG9ydChcIi4uL2Jpbi90cy1sb2FkZXItcmVnaXN0cmF0aW9uXCIpO1xuICAgIGF3YWl0IGVuc3VyZVRzTG9hZGVyUmVnaXN0ZXJlZChyb290UGF0aCk7XG4gIH1cblxuICBjb25zdCB7IGRlZmF1bHQ6IGNvbmZpZyB9ID0gYXdhaXQgaW1wb3J0KGBmaWxlOi8vJHtjb25maWdQYXRofWApO1xuICByZXR1cm4gY29uZmlnO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7QUFpU0EsU0FBZ0IsYUFBYSxRQUF5RDtDQUNwRixJQUFJLE9BQU8sV0FBVyxZQUNwQixPQUFPLFFBQVEsUUFBUSxPQUFPLENBQUM7Q0FHakMsT0FBTyxRQUFRLFFBQVEsTUFBTTtBQUMvQjs7Ozs7Ozs7Ozs7Ozs7QUFlQSxlQUFzQixXQUFXLFVBQXlDO0NBQ3hFLGlDQUFpQyxRQUFRO0NBRXpDLE1BQU0seUJBQXlCLFFBQVEsSUFBSSxRQUFRLFNBQVMsUUFBUSxJQUFJLFdBQVc7Q0FDbkYsTUFBTSxhQUFhLHlCQUNmLEdBQUcsU0FBUyx5QkFDWixHQUFHLFNBQVM7Q0FFaEIsSUFBSSx3QkFBd0I7RUFDMUIsTUFBTSxFQUFFLDZCQUE2QixNQUFNLE9BQU87RUFDbEQsTUFBTSx5QkFBeUIsUUFBUTtDQUN6QztDQUVBLE1BQU0sRUFBRSxTQUFTLFdBQVcsTUFBTSxPQUFPLFVBQVU7Q0FDbkQsT0FBTztBQUNUOztVQWxUeUQifQ==